[{"content":"※本記事にはアフィリエイト広告が含まれています。\nはじめに 「なんとなく入ったまま、ずっと払い続けている保険」——30代の多くの方がこうした状況に陥っています。社会人になった当初にすすめられるがまま加入し、その後一度も内容を確認していないケースは珍しくありません。\nしかし30代は、ライフステージが大きく動く時期です。結婚・出産・住宅購入など、保険の必要保障額が変わるイベントが集中します。適切なタイミングで見直すことで、保険料を年間5万円以上削減できるケースも実際に存在します。\n本記事では、30代が知るべき保険見直しの考え方を、必要な保険と不要な保険の見極め方から、無料相談サービスの賢い活用法まで体系的に解説します。\n本記事は一般的な情報提供を目的としており、個別の保険推奨を行うものではありません。最終的な判断はご自身の状況をふまえ、専門家にご相談ください。\n1. 30代で保険を見直すべき3つのタイミング 1-1. 結婚したとき 独身時代の保険設計は「自分一人を守る」ことを前提としています。結婚すると、配偶者の生活を支える責任が生じます。特に、配偶者が専業主婦・主夫の場合や、共働きでも収入差が大きい場合は、死亡保障の見直しが急務です。\n一方で、独身時代に加入した医療保険や生命保険が手厚すぎる場合もあります。配偶者が就労収入を持つなら、必要保障額は下がります。結婚を機に保険を「足す」だけでなく「削る・整理する」視点も重要です。\nまた、配偶者が社会保険に加入していれば、遺族年金の受給資格も変わります。厚生年金加入者が亡くなった場合、配偶者には遺族厚生年金が支給されます（子なしの場合も条件付きで受給可）。公的保障を確認した上で、民間保険でカバーすべきギャップを計算しましょう。\n1-2. 子どもが生まれたとき 出産は、保険ニーズが最も大きく変わるタイミングです。子どもが生まれると、教育費・養育費という長期的な支出が発生し、万一の際に配偶者と子どもを守る保障が必要になります。\n遺族年金（子あり）の目安： 厚生年金加入者が死亡した場合、遺族基礎年金と遺族厚生年金を合わせると、子のある配偶者は約123万円/年（子1人の場合）を受け取れます（2026年度水準）。この公的保障を前提に、生活費の不足分を民間保険で補う考え方が基本です。\n必要保障額の計算式：\n必要保障額 = 遺族の生活費（年間） × 必要年数 - 遺族年金総額 - 現在の貯蓄 - 配偶者の将来収入 例えば、生活費が月25万円（年300万円）で子どもが18歳まで17年必要な場合、生活費合計は5,100万円。そこから遺族年金（約123万円×17年≒2,091万円）・貯蓄300万円・配偶者収入を差し引いた金額が実質的な必要保障額になります。多くのケースで、定期死亡保険で3,000万円前後の保障が目安になります。\n収支の確認には、家計簿ツール も活用してみてください。\n1-3. 住宅を購入したとき 住宅ローンを組むと、「団体信用生命保険（団信）」に加入します。団信は、債務者が死亡・高度障害になった際に残債を保険会社が肩代わりする仕組みです。\n住宅購入後に見直すべきポイント：\n団信で死亡保障が確保されるため、別途加入していた生命保険の保障額を減額できる可能性がある 三大疾病付き団信・就業不能保障付き団信など、特約の内容によっては医療保険と重複する場合がある 住宅ローン控除と保険料控除を合わせて税負担を最適化できる 住宅購入は「保険を減らすチャンス」でもあります。団信の保障内容を確認し、不要な重複保障をカットすることで保険料を大幅に削減できます。\n2. 必要な保険・不要な保険の見極め方 2-1. 生命保険（死亡保険） 必要性が高い人：\n扶養家族がいる（配偶者・子ども） 住宅ローンがある（団信のカバー範囲を超える場合） 配偶者が専業主婦・主夫 見直しポイント：\n種類 特徴 30代での推奨 定期保険 一定期間の保障、保険料安い 子育て期間中の主力保険として活用 終身保険 一生涯保障、保険料高い 貯蓄目的なら検討、純粋な保障なら割高 更新型 10年ごとに更新・保険料上昇 将来の保険料上昇リスクに注意 重要：更新型保険の落とし穴\n更新型の生命保険は、10年ごとに保険料が見直されます。30代で月5,000円の保険料が、40代更新時に8,000円、50代には15,000円以上になるケースもあります。終身型や長期定期保険に切り替えることで、トータルの保険料を抑えられる場合があります。\n2-2. 医療保険 医療保険を考える際に欠かせないのが「高額療養費制度」の存在です。\n高額療養費制度の自己負担上限（2026年度）：\n収入区分 月間自己負担上限 年収約370万〜770万円（一般） 約80,100円 + 超過分×1% 年収約770万〜1,160万円 約167,400円 + 超過分×1% 年収〜約370万円（低所得） 約57,600円 月の医療費が100万円かかっても、年収370〜770万円の一般的なサラリーマンであれば自己負担は約8万円/月で済みます。入院が長期化した場合も、3ヶ月目以降は「多数該当」でさらに上限が下がります。\n医療保険が有効なケース：\n入院中の差額ベッド代・食事代（高額療養費の対象外）を賄いたい 自営業・フリーランスで傷病手当金がない 入院中の収入減少リスクをカバーしたい 医療保険を削減できるケース：\n会社員で傷病手当金（最大18ヶ月・給与の2/3）がある 貯蓄が200万円以上あり、短期入院は自費でカバーできる 入院日数が長い「入院特化型」の保障に重複がある 2-3. がん保険 がんは治療が長期化し、先進医療・自由診療を使うと高額になるケースがあります。一方で、公的保険でカバーされる範囲は年々拡大しています。\nがん保険の必要性チェック：\n家族にがん既往歴がある → 加入を検討 抗がん剤・免疫療法など先進医療を希望する → 特約で対応 がん診断一時金が受け取れる商品を選ぶと使い勝手が良い 3. 無料相談サービスの賢い使い方 3-1. 保険マンモスの特徴と活用法 保険マンモスは、FP（ファイナンシャルプランナー）による無料保険相談を提供するサービスです。複数の保険会社の商品を比較検討でき、特定の保険会社の商品だけを推奨される心配がありません。\n主な特徴：\nFP資格を持つ専門家が無料で相談に対応 オンライン・対面どちらも選択可能 複数社の商品を中立的な立場で比較 相談後の強引なセールスなし こんな方におすすめ：\n今の保険が適切かどうか客観的に判断してもらいたい 保険の基礎知識から学びたい 複数の保険会社の商品を一度に比較したい 3-2. 保険見直しラボの特徴と活用法 保険見直しラボは、現在加入中の保険の診断・見直しに特化したサービスです。すでに保険に加入していて、「本当に必要な保障か」「保険料が高すぎないか」を確認したい方に向いています。\n主な特徴：\n経験豊富なFPが保険証券を見ながら診断 不要な特約の解約・保障の組み替えを具体的に提案 オンライン相談対応、全国対応 売りつけを目的としない中立的な診断 こんな方におすすめ：\n現在の保険の内容をしっかり把握したい 保険料を下げたいが、どこを削ればいいかわからない ライフイベント後の保険の整理をしたい 3-3. 無料相談を最大限に活かす準備 無料相談は「準備なし」で臨むと時間が分散しがちです。以下を事前に整理しておくと、相談の質が大きく上がります。\n相談前に準備するもの：\n保険証券（現在加入中の全保険） — 種類・保険料・保障内容・満期をメモ 家族構成と収入 — 配偶者の有無・子どもの年齢・世帯年収 住宅ローンの有無と残高 — 団信の内容も確認しておく 貯蓄額の目安 — 緊急時に使える流動性資産の概算 将来の予定 — 2〜3年以内に想定されるライフイベント 相談は1回だけでなく、複数のFPに意見を求めることで客観的な判断ができます。保険マンモスと保険見直しラボを両方利用して比較するのも有効な方法です。\n4. 見直しで浮いたお金をNISA・iDeCoに回す資産形成プラン 4-1. 保険料削減額の資産形成インパクト 保険の見直しで月5,000〜10,000円の保険料を削減できたとします。この金額をNISAの成長投資枠・積立投資枠に回すと、長期的に大きな差が生まれます。\n月5,000円を年利5%で30年間運用した場合（シミュレーション）：\n積立期間 積立元本 運用後の資産（年利5%） 10年 60万円 約78万円 20年 120万円 約205万円 30年 180万円 約416万円 複利の力で、30年後には積立元本の2倍以上になります。詳細はNISAシミュレーター で確認してみてください。\n4-2. iDeCoで節税しながら老後資産を形成 iDeCo（個人型確定拠出年金）は、掛け金が全額所得控除になるため、節税しながら老後資産を積み立てられる制度です。\niDeCoの節税効果（会社員・年収500万円の場合）：\n掛け金：月2.3万円（年27.6万円） 所得税率：20%・住民税率：10%（合計30%） 節税額：27.6万円 × 30% = 年間約8.3万円の節税 保険料を削減して月2.3万円をiDeCoに回すだけで、節税+資産形成の二重の効果が得られます。iDeCoシミュレーター で自分の節税額を計算してみましょう。\n4-3. 生命保険料控除も活用する 保険を整理した後も、控除枠は賢く活用しましょう。\n生命保険料控除の仕組み（2012年以降加入の新制度）：\n控除区分 控除対象 所得税控除上限 一般生命保険料控除 死亡保険・養老保険など 最大4万円 介護医療保険料控除 医療保険・がん保険など 最大4万円 個人年金保険料控除 個人年金保険 最大4万円 合計 最大12万円 3区分で最大12万円の所得控除が受けられます。保険の整理後も、各区分の控除枠を適切に活用することで節税効果を維持できます。\n4-4. 家計全体を俯瞰する 保険・NISA・iDeCoの最適化は、家計全体を把握した上で行うと効果的です。\n家計簿ツール — 収支を可視化して保険料削減の余地を確認 手取り計算ツール — 年収から手取りを逆算し、無理のない積立額を設定 NISAシミュレーター — 積立シミュレーションで目標額を逆算 iDeCoシミュレーター — 節税効果を年収別に試算 また、フリーランス・個人事業主の方は、freee会計 を活用することで、保険料の経費計上や確定申告をスムーズに管理できます。\nまとめ：30代の保険見直し行動チェックリスト 保険見直しの要点を整理します。\n結婚・出産・住宅購入のタイミングで必ず見直す 必要保障額を計算式で算出し、過不足を確認する 高額療養費制度を前提に医療保険の必要性を判断する 更新型保険の将来保険料上昇リスクを確認する 団信の内容を確認し、生命保険との重複を整理する 保険マンモス・保険見直しラボの無料相談を活用する 削減した保険料をNISA・iDeCoに回す計画を立てる 生命保険料控除の3区分を活用して節税する 保険は「入ること」より「正しく管理すること」が重要です。 30代のうちに一度本格的に見直すことで、老後までの家計が大きく改善します。まずは無料相談から始めてみてください。\n関連ツール 正確な年齢を今すぐ計算 → 年齢計算ツール BMIと適正体重をチェック → BMI計算ツール 浮いた保険料を積立投資に → 複利計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター iDeCoの節税効果をシミュレーション → iDeCoシミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター 教育費の総額を計算 → 教育費シミュレーター 総資産・純資産を計算 → 資産管理シミュレーター 関連記事 老後2000万円問題を自分で検証｜退職金なしの会社員がとるべき行動 NISA iDeCo どっちを先に始めるべき？優先順位を徹底解説【2026年最新版】 iDeCo節税シミュレーション｜年収別に実際いくら得するか計算 会社員が不動産投資を始めるならRENOSY？｜NISAやiDeCoとの使い分けガイド 新NISA始め方2026年版【初心者向け完全ガイド】口座開設から投資スタートまで よくある質問 Q. 無料相談は本当に無料ですか？しつこい勧誘はありませんか？\nA. 保険マンモス・保険見直しラボともに相談自体は無料です。FPの報酬は保険会社からの手数料で賄われる仕組みのため、相談者が費用を支払う必要はありません。中立的な立場での提案を方針としており、強引な勧誘は行っていないとされていますが、気になる点は相談前に確認することをおすすめします。\nQ. 保険の見直しで必ず保険料が下がりますか？\nA. 必ずしも下がるとは限りません。不足している保障を追加する必要があるケースや、年齢が上がって保険料が高くなるケースもあります。「削減」ではなく「最適化」を目的として相談に臨みましょう。\nQ. 既往症がある場合、新しい保険に加入できますか？\nA. 既往症がある場合、通常の保険への加入が制限される場合があります。ただし、引受基準緩和型保険や無選択型保険などの選択肢もあります。FPに状況を正直に伝えて相談することが重要です。\n","permalink":"https://productivity-works.com/ja/posts/30dai-hoken-minaoshi-guide/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch2 id=\"はじめに\"\u003eはじめに\u003c/h2\u003e\n\u003cp\u003e「なんとなく入ったまま、ずっと払い続けている保険」——30代の多くの方がこうした状況に陥っています。社会人になった当初にすすめられるがまま加入し、その後一度も内容を確認していないケースは珍しくありません。\u003c/p\u003e\n\u003cp\u003eしかし30代は、ライフステージが大きく動く時期です。結婚・出産・住宅購入など、保険の必要保障額が変わるイベントが集中します。\u003cstrong\u003e適切なタイミングで見直すことで、保険料を年間5万円以上削減できるケースも実際に存在します。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e本記事では、30代が知るべき保険見直しの考え方を、必要な保険と不要な保険の見極め方から、無料相談サービスの賢い活用法まで体系的に解説します。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e本記事は一般的な情報提供を目的としており、個別の保険推奨を行うものではありません。最終的な判断はご自身の状況をふまえ、専門家にご相談ください。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"1-30代で保険を見直すべき3つのタイミング\"\u003e1. 30代で保険を見直すべき3つのタイミング\u003c/h2\u003e\n\u003ch3 id=\"1-1-結婚したとき\"\u003e1-1. 結婚したとき\u003c/h3\u003e\n\u003cp\u003e独身時代の保険設計は「自分一人を守る」ことを前提としています。結婚すると、配偶者の生活を支える責任が生じます。特に、\u003cstrong\u003e配偶者が専業主婦・主夫の場合や、共働きでも収入差が大きい場合は、死亡保障の見直しが急務\u003c/strong\u003eです。\u003c/p\u003e\n\u003cp\u003e一方で、独身時代に加入した医療保険や生命保険が手厚すぎる場合もあります。配偶者が就労収入を持つなら、必要保障額は下がります。結婚を機に保険を「足す」だけでなく「削る・整理する」視点も重要です。\u003c/p\u003e\n\u003cp\u003eまた、配偶者が社会保険に加入していれば、遺族年金の受給資格も変わります。\u003cstrong\u003e厚生年金加入者が亡くなった場合、配偶者には遺族厚生年金が支給されます\u003c/strong\u003e（子なしの場合も条件付きで受給可）。公的保障を確認した上で、民間保険でカバーすべきギャップを計算しましょう。\u003c/p\u003e\n\u003ch3 id=\"1-2-子どもが生まれたとき\"\u003e1-2. 子どもが生まれたとき\u003c/h3\u003e\n\u003cp\u003e出産は、保険ニーズが最も大きく変わるタイミングです。子どもが生まれると、教育費・養育費という長期的な支出が発生し、万一の際に配偶者と子どもを守る保障が必要になります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e遺族年金（子あり）の目安：\u003c/strong\u003e\n厚生年金加入者が死亡した場合、遺族基礎年金と遺族厚生年金を合わせると、子のある配偶者は\u003cstrong\u003e約123万円/年\u003c/strong\u003e（子1人の場合）を受け取れます（2026年度水準）。この公的保障を前提に、生活費の不足分を民間保険で補う考え方が基本です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e必要保障額の計算式：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e必要保障額 = 遺族の生活費（年間） × 必要年数\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           - 遺族年金総額\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           - 現在の貯蓄\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           - 配偶者の将来収入\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e例えば、生活費が月25万円（年300万円）で子どもが18歳まで17年必要な場合、生活費合計は5,100万円。そこから遺族年金（約123万円×17年≒2,091万円）・貯蓄300万円・配偶者収入を差し引いた金額が実質的な必要保障額になります。多くのケースで、\u003cstrong\u003e定期死亡保険で3,000万円前後の保障\u003c/strong\u003eが目安になります。\u003c/p\u003e\n\u003cp\u003e収支の確認には、\u003ca href=\"https://productivity-works.com/ja/tools/kakeibo-generator/\"\u003e家計簿ツール\u003c/a\u003e\nも活用してみてください。\u003c/p\u003e\n\u003ch3 id=\"1-3-住宅を購入したとき\"\u003e1-3. 住宅を購入したとき\u003c/h3\u003e\n\u003cp\u003e住宅ローンを組むと、「団体信用生命保険（団信）」に加入します。団信は、債務者が死亡・高度障害になった際に残債を保険会社が肩代わりする仕組みです。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e住宅購入後に見直すべきポイント：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e団信で死亡保障が確保されるため、別途加入していた生命保険の保障額を減額できる可能性がある\u003c/li\u003e\n\u003cli\u003e三大疾病付き団信・就業不能保障付き団信など、特約の内容によっては医療保険と重複する場合がある\u003c/li\u003e\n\u003cli\u003e住宅ローン控除と保険料控除を合わせて税負担を最適化できる\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e住宅購入は「保険を減らすチャンス」でもあります。団信の保障内容を確認し、不要な重複保障をカットすることで保険料を大幅に削減できます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"2-必要な保険不要な保険の見極め方\"\u003e2. 必要な保険・不要な保険の見極め方\u003c/h2\u003e\n\u003ch3 id=\"2-1-生命保険死亡保険\"\u003e2-1. 生命保険（死亡保険）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e必要性が高い人：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e扶養家族がいる（配偶者・子ども）\u003c/li\u003e\n\u003cli\u003e住宅ローンがある（団信のカバー範囲を超える場合）\u003c/li\u003e\n\u003cli\u003e配偶者が専業主婦・主夫\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e見直しポイント：\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e種類\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n          \u003cth\u003e30代での推奨\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e定期保険\u003c/td\u003e\n          \u003ctd\u003e一定期間の保障、保険料安い\u003c/td\u003e\n          \u003ctd\u003e子育て期間中の主力保険として活用\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e終身保険\u003c/td\u003e\n          \u003ctd\u003e一生涯保障、保険料高い\u003c/td\u003e\n          \u003ctd\u003e貯蓄目的なら検討、純粋な保障なら割高\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e更新型\u003c/td\u003e\n          \u003ctd\u003e10年ごとに更新・保険料上昇\u003c/td\u003e\n          \u003ctd\u003e将来の保険料上昇リスクに注意\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e重要：更新型保険の落とし穴\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e更新型の生命保険は、10年ごとに保険料が見直されます。30代で月5,000円の保険料が、40代更新時に8,000円、50代には15,000円以上になるケースもあります。\u003cstrong\u003e終身型や長期定期保険に切り替えることで、トータルの保険料を抑えられる場合があります。\u003c/strong\u003e\u003c/p\u003e\n\u003ch3 id=\"2-2-医療保険\"\u003e2-2. 医療保険\u003c/h3\u003e\n\u003cp\u003e医療保険を考える際に欠かせないのが「\u003cstrong\u003e高額療養費制度\u003c/strong\u003e」の存在です。\u003c/p\u003e","title":"30代の保険見直し完全ガイド｜無料相談で年間5万円節約できるケースも"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n会社員の資産形成：NISA・iDeCo・不動産投資の3本柱 「老後2,000万円問題」が話題になって久しい。厚生年金だけでは老後資金が不足するという現実を前に、年収500万〜800万円の会社員がとれる手段は大きく3つある。NISA（少額投資非課税制度）、iDeCo（個人型確定拠出年金）、そして不動産投資だ。\nそれぞれを単独で使うのではなく、制度の特性を理解したうえで組み合わせることが、資産形成の最短ルートになる。本記事では各制度の基本から、RENOSYを使った不動産投資の具体的な税制メリット、そして年収別のモデルケースまでを一気に解説する。\nNISA・iDeCo・不動産投資の特性比較 NISA iDeCo 不動産投資（RENOSY） 非課税の種類 運用益が非課税 掛金が所得控除、運用益も非課税 減価償却・損益通算で税軽減 流動性 高い（いつでも売却可） 低い（原則60歳まで引き出し不可） 低い（物件売却に時間がかかる） 初期費用 不要（100円〜） 不要（月5,000円〜） 頭金・諸費用が必要な場合も レバレッジ 不可 不可 可能（融資を活用） リスク 市場リスク 市場リスク 空室・金利・価値下落リスク 向いている人 全員（まず活用すべき） 長期積立を重視する人 節税ニーズが高い、信用力のある会社員 3つに共通しているのは「早く始めるほど有利」という点だ。時間を味方にするために、まず制度の理解から着手しよう。\nRENOSYの特徴と他の不動産投資との違い RENOSYとは RENOSYは、株式会社GA technologiesが運営する不動産投資プラットフォームだ。会社員向けに特化しており、東京23区を中心とした中古ワンルームマンションへの投資を主力商品としている。\n最大の特徴はAIによる物件選定にある。独自のアルゴリズムが空室リスク・賃貸需要・価格動向を分析し、投資妙味の高い物件を抽出する。人の目だけに頼った従来の仲介業者モデルとは一線を画している。\n他の不動産投資との違い 区分マンション投資（一般）との違い 一般的な区分マンション投資では、物件選定・管理会社の選定・入居者対応など、オーナーが主体的に動く場面が多い。RENOSYは物件選定から賃貸管理までフルサポート体制を整えており、本業で忙しい会社員でも手間をかけずに運用できる。\n一棟アパート投資との違い 一棟物件は収益規模が大きい反面、初期投資額も数千万〜数億円規模になる。融資審査のハードルも高く、年収500万〜800万円の会社員には現実的でないケースが多い。RENOSYのワンルームであれば、月1万円台から投資をスタートできる（ローン返済と家賃収入の差額ベース）。\nREIT（不動産投資信託）との違い REITは証券化された不動産に少額から投資できるが、レバレッジがかからず、減価償却を活用した節税はできない。実物不動産の最大のアドバンテージである税制上の優位性を活かせるのは、RENOSYのような現物不動産投資だ。\nRENOSYの主な特徴まとめ AIが物件選定：賃貸需要・流動性・価格の3軸でスクリーニング 東京23区中心：人口流入が続くエリアに絞り込み、空室リスクを低減 月1万円台から：給与天引き感覚で資産形成が可能 管理はフルサポート：入居者募集・家賃回収・修繕対応まで一任可能 スマホで管理：アプリで収支・入居状況をリアルタイム確認 注意：不動産投資にはリスクがあります。 空室リスク（入居者が決まらず家賃収入がゼロになるリスク）、金利上昇リスク（変動金利ローン利用時に返済額が増加するリスク）、物件価値下落リスク（市況や建物の老朽化により売却時に損失が出るリスク）を必ず理解したうえで検討してください。\n不動産投資の税制メリット 不動産投資が「会社員の節税手段」として注目される理由は、その税制上の特性にある。正しく理解することで、合法的に所得税・住民税の負担を軽減できる。\n1. 不動産所得と総合課税 不動産から得られる所得（家賃収入－各種経費）は不動産所得として扱われ、総合課税の対象となる。つまり給与所得と合算して課税される。\n逆にいえば、不動産所得が赤字になった場合、給与所得と損益通算できる。これが不動産投資による節税の核心だ。\n2. 減価償却による帳簿上の赤字 不動産投資で最も重要な税務上の概念が減価償却だ。建物（土地は除く）は時間の経過とともに価値が減少するとみなされ、その分を毎年費用として計上できる。\n法定耐用年数の目安\n構造 法定耐用年数 RC造（鉄筋コンクリート） 47年 鉄骨造 34年 木造 22年 中古物件の場合は簡便法を用いて耐用年数を短縮できる。たとえば築25年のRC造マンションであれば、残存耐用年数＝（47年－25年）＋25年×20%＝約27年となる（計算式の詳細は税理士に確認を）。\n耐用年数が短いほど年間の減価償却費が大きくなり、帳簿上の赤字が拡大する。この「実際はキャッシュが出ていない帳簿上の損失」が節税効果を生む。\n例）RC造中古マンション、建物部分2,000万円・残存耐用年数20年の場合\n年間減価償却費：2,000万円 ÷ 20年 = 100万円 家賃収入が年間120万円、その他経費50万円とすると 不動産所得 = 120万円 − 50万円 − 100万円 = −30万円（赤字） この△30万円を給与所得と損益通算することで、課税所得が30万円圧縮される。\n3. 損益通算による所得税・住民税の軽減 年収600万円（給与所得約430万円）の会社員が、不動産所得で30万円の赤字を計上した場合を試算する。\n課税所得 = 430万円 − 30万円 = 400万円 所得税率（400万円：20%）での節税額 ≒ 30万円 × 20% = 6万円 住民税率（一律10%）での節税額 ≒ 30万円 × 10% = 3万円 合計節税額 ≒ 年間約9万円 高所得になるほど税率が上がるため、節税効果も大きくなる。\n4. 経費として計上できる主な費用 以下の費用は不動産所得の計算上、経費として認められる。\n固定資産税・都市計画税：毎年かかる保有コスト 管理費・修繕積立金：マンション管理組合への支払い 賃貸管理費：管理会社への支払い（家賃の5〜10%程度） ローン利息（元本は不可）：金融機関への支払いのうち利息部分のみ 火災保険料・地震保険料：建物の保険料 税理士費用：確定申告を依頼した場合 交通費：物件視察や管理会社との打ち合わせのための交通費 5. 青色申告特別控除（事業的規模の場合） 不動産投資の規模が5棟または10室以上（事業的規模）に達した場合、青色申告を選択することで最大65万円の特別控除が受けられる。\n1〜2物件の段階では事業的規模には届かないが、将来的に拡大を視野に入れるなら、早い段階から青色申告の手続きを整えておくことを推奨する。\n確定申告の作業はfreee会計 を使うと、不動産所得の仕訳・減価償却計算・確定申告書の作成まで大幅に効率化できる。副業・投資収入がある会社員に特に向いている。\nNISA+iDeCo+不動産をどう組み合わせるか（年収別モデルケース） 基本的な優先順位の考え方 どの制度を優先するかは、流動性・節税効果・投資目的によって変わる。以下が基本的な優先フローだ。\n緊急予備資金の確保（生活費3〜6か月分） iDeCoの満額拠出（節税効果が最も即効性あり） NISAの積立枠を活用（年120万円のつみたて投資枠） NISAの成長投資枠を活用（年240万円まで拡大可能） 余裕資金で不動産投資を検討（節税 × レバレッジ効果） 会社員のiDeCo拠出上限は月2.3万円（年27.6万円）。NISAの年間上限は合計360万円。これらを埋めてから不動産投資に進むのが安全だが、節税ニーズが高ければ並行して始める判断もある。\nモデルケース1：年収500万円・独身・30代 プロフィール\n年収500万円、手取り約380万円 月々の余裕資金：約5万円 貯金：200万円（うち緊急予備資金100万円を確保済み） 推奨ポートフォリオ\n手段 月額 年額 目的 iDeCo（掛金全額） 2.3万円 27.6万円 節税＋老後積立 NISA（つみたて枠） 1万円 12万円 運用益非課税 不動産投資（RENOSY） 1〜2万円 12〜24万円 節税＋レバレッジ資産形成 iDeCoで年27.6万円の掛金控除 → 所得税20%＋住民税10%で年間約8.3万円の節税。不動産所得の赤字（仮に20万円）との合算で、節税効果は年間約14万円規模になる。\n手取り計算ツールで手取り額を確認 → 手取り計算ツール iDeCo節税額をシミュレーション → iDeCoシミュレーター モデルケース2：年収700万円・既婚・35歳（住宅ローンあり） プロフィール\n年収700万円、手取り約530万円 住宅ローン残高3,000万円（住宅ローン控除を受けている） 月々の余裕資金：約8万円 推奨ポートフォリオ\n手段 月額 年額 目的 iDeCo（掛金全額） 2.3万円 27.6万円 節税＋老後積立 NISA（つみたて枠） 2万円 24万円 長期運用 不動産投資（RENOSY） 1〜2万円 12〜24万円 節税効果の上乗せ 家計管理 — — 支出見直しで投資余力を拡大 年収700万円の場合、所得税率は23%（課税所得約430万円）。iDeCoの節税額は約27.6万円 × 33% ≒ 年9.1万円。不動産所得の赤字20〜40万円と合算すると、節税効果は年間15〜20万円規模に達する可能性がある。\n住宅ローン控除（年末残高の0.7%）も受けている場合、所得税の「引ける余地」が限られるため、不動産の損益通算は住民税での節税が中心になる点に注意。\nNISA投資額の試算 → NISAシミュレーター 家計の見直し → 家計簿ツール モデルケース3：年収800万円・既婚・40代・資産形成加速期 プロフィール\n年収800万円、手取り約600万円 子どもの教育費が一段落し、投資余力が拡大 老後まで残り20〜25年 推奨ポートフォリオ\n手段 月額 年額 目的 iDeCo（掛金全額） 2.3万円 27.6万円 所得控除で即効節税 NISA（成長投資枠含む） 10万円 120万円 資産拡大 不動産投資（RENOSY） 2〜3万円 24〜36万円 節税＋インフレヘッジ 年収800万円の所得税率は23%（段階的に33%の帯もある）。不動産の減価償却費を大きく設定し、損益通算で課税所得を圧縮するアプローチが節税効果を最大化する。\nまた、この年収帯では金融機関の融資評価が高くなりやすく、フルローンや好条件のローンが通りやすい。不動産投資のレバレッジ効果が最も機能する年収層だ。\n3つの制度を組み合わせる際の注意点 iDeCoは60歳まで引き出せない：緊急資金が不十分な状態で拠出を増やすのは危険。まず流動性の高い資産（預金・NISA）を確保する。\n不動産所得の確定申告は必須：不動産収入がある場合、年間20万円超の所得（損失でも）があれば確定申告が必要になる。副業がある人は合わせて対応を。\n住宅ローンと投資用ローンの審査は別：住宅ローン審査中に投資用ローンを組むと審査に影響することがある。順序を確認して進めること。\n節税は本来「経費がかかった結果」：減価償却を使った節税は、実際に物件が経年劣化していることを意味する。売却時に利益が出れば譲渡所得税が発生する点も考慮に入れること。\nまとめ 会社員の資産形成において、NISA・iDeCo・不動産投資はそれぞれ異なる役割を担う。\nNISA：非課税で運用益を積み上げる「攻め」の制度 iDeCo：掛金が所得控除になる即効性ある節税手段 不動産投資（RENOSY）：減価償却×損益通算でさらなる節税＋レバレッジによる資産拡大 3本柱をバランスよく組み合わせることで、税引き後の手残りを最大化しながら老後資産を積み上げることができる。\nまずは手取りと支出の現状把握から始めよう。\n手取り計算ツール NISAシミュレーター iDeCoシミュレーター 家計簿ツール 関連ツール 年収から手取りを計算 → 手取り計算シミュレーター NISAの積立シミュレーション → NISAシミュレーター iDeCoの節税効果を計算 → iDeCoシミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 住宅ローンの返済計画 → 住宅ローンシミュレーター 教育費の総額を計算 → 教育費シミュレーター 関連記事 新NISA始め方2026年版【初心者向け完全ガイド】口座開設から投資スタートまで iDeCo おすすめ証券会社ランキング【2026年最新版】手数料・商品数を徹底比較 老後2000万円問題を自分で検証｜退職金なしの会社員がとるべき行動 NISA iDeCo どっちを先に始めるべき？優先順位を徹底解説【2026年最新版】 30代の保険見直し完全ガイド｜無料相談で年間5万円節約できるケースも よくある質問 Q. 会社員でも不動産投資ローンは組めますか？ A. はい。安定収入のある会社員は金融機関から信用を得やすく、不動産投資ローンの審査が通りやすい属性です。勤続年数・年収・勤め先の規模が審査のポイントになります。\nQ. 副業禁止の会社でも不動産投資はできますか？ A. 一般的に「不動産投資（賃貸経営）」は就業規則上の副業に該当しないケースが多いですが、会社の規定により異なります。確認が取れない場合は人事部門に相談することを推奨します。\nQ. 確定申告は自分でできますか？ A. 1〜2物件であれば、freeeなどの会計ソフトを使えば自分で申告できます。物件数が増えたり、青色申告65万円控除を狙う場合は、不動産に詳しい税理士に依頼することを検討してください。\n","permalink":"https://productivity-works.com/ja/posts/kaishain-fudousan-toushi-renosy/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch2 id=\"会社員の資産形成nisaideco不動産投資の3本柱\"\u003e会社員の資産形成：NISA・iDeCo・不動産投資の3本柱\u003c/h2\u003e\n\u003cp\u003e「老後2,000万円問題」が話題になって久しい。厚生年金だけでは老後資金が不足するという現実を前に、年収500万〜800万円の会社員がとれる手段は大きく3つある。\u003cstrong\u003eNISA（少額投資非課税制度）\u003c/strong\u003e、\u003cstrong\u003eiDeCo（個人型確定拠出年金）\u003c/strong\u003e、そして\u003cstrong\u003e不動産投資\u003c/strong\u003eだ。\u003c/p\u003e\n\u003cp\u003eそれぞれを単独で使うのではなく、制度の特性を理解したうえで組み合わせることが、資産形成の最短ルートになる。本記事では各制度の基本から、RENOSYを使った不動産投資の具体的な税制メリット、そして年収別のモデルケースまでを一気に解説する。\u003c/p\u003e\n\u003ch3 id=\"nisaideco不動産投資の特性比較\"\u003eNISA・iDeCo・不動産投資の特性比較\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003c/th\u003e\n          \u003cth\u003eNISA\u003c/th\u003e\n          \u003cth\u003eiDeCo\u003c/th\u003e\n          \u003cth\u003e不動産投資（RENOSY）\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e非課税の種類\u003c/td\u003e\n          \u003ctd\u003e運用益が非課税\u003c/td\u003e\n          \u003ctd\u003e掛金が所得控除、運用益も非課税\u003c/td\u003e\n          \u003ctd\u003e減価償却・損益通算で税軽減\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e流動性\u003c/td\u003e\n          \u003ctd\u003e高い（いつでも売却可）\u003c/td\u003e\n          \u003ctd\u003e低い（原則60歳まで引き出し不可）\u003c/td\u003e\n          \u003ctd\u003e低い（物件売却に時間がかかる）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e初期費用\u003c/td\u003e\n          \u003ctd\u003e不要（100円〜）\u003c/td\u003e\n          \u003ctd\u003e不要（月5,000円〜）\u003c/td\u003e\n          \u003ctd\u003e頭金・諸費用が必要な場合も\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eレバレッジ\u003c/td\u003e\n          \u003ctd\u003e不可\u003c/td\u003e\n          \u003ctd\u003e不可\u003c/td\u003e\n          \u003ctd\u003e可能（融資を活用）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eリスク\u003c/td\u003e\n          \u003ctd\u003e市場リスク\u003c/td\u003e\n          \u003ctd\u003e市場リスク\u003c/td\u003e\n          \u003ctd\u003e空室・金利・価値下落リスク\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e向いている人\u003c/td\u003e\n          \u003ctd\u003e全員（まず活用すべき）\u003c/td\u003e\n          \u003ctd\u003e長期積立を重視する人\u003c/td\u003e\n          \u003ctd\u003e節税ニーズが高い、信用力のある会社員\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e3つに共通しているのは「早く始めるほど有利」という点だ。時間を味方にするために、まず制度の理解から着手しよう。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"renosyの特徴と他の不動産投資との違い\"\u003eRENOSYの特徴と他の不動産投資との違い\u003c/h2\u003e\n\u003ch3 id=\"renosyとは\"\u003eRENOSYとは\u003c/h3\u003e\n\u003cp\u003eRENOSYは、株式会社GA technologiesが運営する不動産投資プラットフォームだ。会社員向けに特化しており、\u003cstrong\u003e東京23区を中心とした中古ワンルームマンション\u003c/strong\u003eへの投資を主力商品としている。\u003c/p\u003e\n\u003cp\u003e最大の特徴は\u003cstrong\u003eAIによる物件選定\u003c/strong\u003eにある。独自のアルゴリズムが空室リスク・賃貸需要・価格動向を分析し、投資妙味の高い物件を抽出する。人の目だけに頼った従来の仲介業者モデルとは一線を画している。\u003c/p\u003e\n\u003ch3 id=\"他の不動産投資との違い\"\u003e他の不動産投資との違い\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e区分マンション投資（一般）との違い\u003c/strong\u003e\n一般的な区分マンション投資では、物件選定・管理会社の選定・入居者対応など、オーナーが主体的に動く場面が多い。RENOSYは物件選定から賃貸管理まで\u003cstrong\u003eフルサポート体制\u003c/strong\u003eを整えており、本業で忙しい会社員でも手間をかけずに運用できる。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一棟アパート投資との違い\u003c/strong\u003e\n一棟物件は収益規模が大きい反面、初期投資額も数千万〜数億円規模になる。融資審査のハードルも高く、年収500万〜800万円の会社員には現実的でないケースが多い。RENOSYのワンルームであれば、\u003cstrong\u003e月1万円台から\u003c/strong\u003e投資をスタートできる（ローン返済と家賃収入の差額ベース）。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eREIT（不動産投資信託）との違い\u003c/strong\u003e\nREITは証券化された不動産に少額から投資できるが、レバレッジがかからず、減価償却を活用した節税はできない。実物不動産の最大のアドバンテージである\u003cstrong\u003e税制上の優位性\u003c/strong\u003eを活かせるのは、RENOSYのような現物不動産投資だ。\u003c/p\u003e\n\u003ch3 id=\"renosyの主な特徴まとめ\"\u003eRENOSYの主な特徴まとめ\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eAIが物件選定\u003c/strong\u003e：賃貸需要・流動性・価格の3軸でスクリーニング\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e東京23区中心\u003c/strong\u003e：人口流入が続くエリアに絞り込み、空室リスクを低減\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e月1万円台から\u003c/strong\u003e：給与天引き感覚で資産形成が可能\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e管理はフルサポート\u003c/strong\u003e：入居者募集・家賃回収・修繕対応まで一任可能\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eスマホで管理\u003c/strong\u003e：アプリで収支・入居状況をリアルタイム確認\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e注意：不動産投資にはリスクがあります。\u003c/strong\u003e\n空室リスク（入居者が決まらず家賃収入がゼロになるリスク）、金利上昇リスク（変動金利ローン利用時に返済額が増加するリスク）、物件価値下落リスク（市況や建物の老朽化により売却時に損失が出るリスク）を必ず理解したうえで検討してください。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"不動産投資の税制メリット\"\u003e不動産投資の税制メリット\u003c/h2\u003e\n\u003cp\u003e不動産投資が「会社員の節税手段」として注目される理由は、その税制上の特性にある。正しく理解することで、合法的に所得税・住民税の負担を軽減できる。\u003c/p\u003e\n\u003ch3 id=\"1-不動産所得と総合課税\"\u003e1. 不動産所得と総合課税\u003c/h3\u003e\n\u003cp\u003e不動産から得られる所得（家賃収入－各種経費）は\u003cstrong\u003e不動産所得\u003c/strong\u003eとして扱われ、\u003cstrong\u003e総合課税\u003c/strong\u003eの対象となる。つまり給与所得と合算して課税される。\u003c/p\u003e\n\u003cp\u003e逆にいえば、\u003cstrong\u003e不動産所得が赤字になった場合、給与所得と損益通算できる\u003c/strong\u003e。これが不動産投資による節税の核心だ。\u003c/p\u003e\n\u003ch3 id=\"2-減価償却による帳簿上の赤字\"\u003e2. 減価償却による帳簿上の赤字\u003c/h3\u003e\n\u003cp\u003e不動産投資で最も重要な税務上の概念が\u003cstrong\u003e減価償却\u003c/strong\u003eだ。建物（土地は除く）は時間の経過とともに価値が減少するとみなされ、その分を毎年費用として計上できる。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e法定耐用年数の目安\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e構造\u003c/th\u003e\n          \u003cth\u003e法定耐用年数\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eRC造（鉄筋コンクリート）\u003c/td\u003e\n          \u003ctd\u003e47年\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e鉄骨造\u003c/td\u003e\n          \u003ctd\u003e34年\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e木造\u003c/td\u003e\n          \u003ctd\u003e22年\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e中古物件の場合は\u003cstrong\u003e簡便法\u003c/strong\u003eを用いて耐用年数を短縮できる。たとえば築25年のRC造マンションであれば、残存耐用年数＝（47年－25年）＋25年×20%＝約27年となる（計算式の詳細は税理士に確認を）。\u003c/p\u003e","title":"会社員が不動産投資を始めるならRENOSY？｜NISAやiDeCoとの使い分けガイド"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nはじめに：「2000万円足りない」は本当に自分の話なのか 2019年、金融審議会の報告書が世間を騒がせた。「老後30年間で約2,000万円が不足する」という試算が一人歩きし、「老後2000万円問題」として広く知られるようになった。しかし、あの報告書の前提条件を正確に読んだ人はどれほどいるだろうか。\n実際、2000万円という数字はすべての人に当てはまるわけではない。前提次第では不足額が大きく膨らむこともあれば、逆に問題が小さく収まることもある。特に退職金なしの会社員にとっては、平均値の議論をそのまま自分に当てはめることは危険だ。\nこの記事では、2000万円問題の前提条件を正確に整理したうえで、退職金なし会社員が現実的に実行できる資産形成プランを具体的な数字で示す。\n1. 2000万円問題の前提条件と自分のケースへの当てはめ方 報告書の前提条件を正確に確認する 金融審議会2019年報告書が示した試算の前提は以下の通りだ。\n項目 前提条件 世帯構成 夫65歳・妻60歳の無職世帯 毎月の収支 ▲約5万円（支出26.4万円、収入20.9万円） 不足期間 老後30年間（95歳まで） 合計不足額 約2,000万円（5万円 × 12ヶ月 × 30年 ≒ 1,800万円を概算して2,000万円） ここで注意すべきは3点ある。\n第一に、収入は夫婦2人分の年金を合算している。 自営業者やフリーランスで国民年金のみの場合、年金収入はさらに少なくなる。反対に、会社員として厚生年金を満額納付してきた場合、月収入は20.9万円を上回る可能性がある。\n第二に、退職金は一切考慮されていない。 報告書の試算には、退職金収入が含まれていない。定年時に退職金を受け取れる環境にある人は、その分だけ実質的な不足額が圧縮される。逆に言えば、退職金なしの会社員は退職金がある人よりも自力での資産形成が必須となる。\n第三に、2,000万円はあくまで平均値ベースの試算だ。 住居費、医療費、介護費用の違いによって実際の必要額は大きく変わる。賃貸に住み続ける場合は住居費分がさらに加算され、3,000万円以上が必要になるケースも珍しくない。\n自分の不足額を試算する 自分のケースへの当てはめ方は次の手順で行う。\n将来受け取れる年金額を確認する — ねんきんネット（日本年金機構の公式サービス）で試算できる 老後の月間生活費を見積もる — 現在の家計支出をベースに、老後に増減する項目を調整する 不足額 = (月間生活費 − 月間年金収入) × 12ヶ月 × 老後年数 で計算する 現在の家計状況を把握するには家計簿ツール が便利だ。現在の支出パターンを可視化することで、老後の生活費推計の精度が上がる。また、手取り収入を正確に把握するには手取り計算ツール を活用しよう。手取り額から逆算して毎月の積立可能額を割り出すことができる。\nポイント：退職金なしの会社員は、報告書の2,000万円を最低ラインとして考え、住居費・医療費の状況に応じて2,500万〜3,000万円を目標に設定することが現実的だ。\n2. 退職金なしの会社員が直面する現実 退職金制度のある企業は減少している 厚生労働省の調査によれば、退職金制度がある企業の割合は大企業では依然として高いが、中小企業では大幅に低下している。特にスタートアップやIT系企業では退職金制度そのものを設けていないケースが多い。\n退職金の平均額（大卒・管理職・定年退職）は企業によって異なるが、大企業では1,500万〜2,000万円程度とされる。この額がないということは、老後資金の出発点が最初から2,000万円分不利な状態にあるということだ。\n退職金なし会社員が陥りやすい罠 退職金なし会社員が資産形成で失敗するパターンは主に3つある。\nパターン1：「将来なんとかなる」先送り症候群 30代・40代は育児・住宅ローン・教育費などの支出が重なり、老後資金の積立を後回しにしがちだ。しかし複利の効果を考えると、積立開始を10年遅らせることで必要な月額積立額は約1.5〜2倍に膨らむ。\nパターン2：退職金代わりに投資ビギナーが一括投資でリスクを取りすぎる 退職直前に焦って高リスク商品に一括投資するパターンは、暴落タイミングとぶつかった場合に取り返しのつかない損失を招く。\nパターン3：税制優遇制度を使わずに課税口座で資産形成する NISAやiDeCoを使わずに課税口座で積立てると、運用益・配当に約20%の税金がかかる。税制優遇を最大限活用することが退職金なし会社員の最重要戦略だ。\n3. NISA・iDeCoの併用で月いくら積立てれば届くか 現行NISAの枠組みを確認する 2024年から始まった新NISAの主要スペックは以下の通りだ。\n区分 年間投資枠 生涯投資枠 つみたて投資枠 120万円（月10万円） 1,800万円のうち最大1,800万円 成長投資枠 240万円（月20万円） 1,800万円のうち最大1,200万円 合計 360万円 1,800万円 生涯投資枠1,800万円は売却しても枠が復活するため、長期・積立・分散投資に最適化された制度だ。\niDeCoの積立上限（会社員の場合） iDeCoの掛金上限は職業・企業年金の有無によって異なる。企業年金なしの会社員の場合、**月23,000円（年27.6万円）**が上限だ。\niDeCoの最大のメリットは掛金全額が所得控除になることだ。年収500万円の人が月23,000円積立てると、年間の節税効果は約5.5万円〜6万円程度になる（所得・住民税率による）。\nNISAシミュレーションはNISAシミュレーター で、iDeCoのシミュレーションはiDeCoシミュレーター でそれぞれ試算できる。自分の年収・積立額・運用期間を入力して、目標額に届くかを確認しよう。\n月いくら積立てれば2,500万円に届くか 以下は年率5%での運用を仮定した場合のシミュレーション例だ（税制優遇効果を含まない元本ベース試算）。\n積立開始年齢 月額積立額 積立期間 65歳時の概算資産額 25歳 30,000円 40年 約4,560万円 30歳 40,000円 35年 約4,280万円 35歳 55,000円 30年 約4,560万円 40歳 80,000円 25年 約4,760万円 45歳 130,000円 20年 約5,330万円 ※上記はあくまで試算例。実際の運用成果は保証されない。\n退職金なし会社員が2,500万円を目標とする場合、30歳開始なら月4万円、35歳開始なら月5.5万円が目安となる。\nNISA・iDeCoの最適な使い分け 優先順位 制度 月額 理由 1位 iDeCo（つみたて） 23,000円 掛金全額が所得控除。節税効果が最大 2位 NISA（つみたて投資枠） 100,000円まで 運用益・配当が非課税。柔軟に引き出し可能 3位 NISA（成長投資枠） 残余枠を活用 個別株・ETFも対象。より積極的な運用が可能 合計：iDeCo 2.3万円 + NISA 最大10万円 = 月12.3万円が税制優遇フル活用の上限だ。この水準まで積立を増やすのが理想だが、まずはiDeCoで節税を確保しつつ、NISAで月3万〜5万円からスタートするのが現実的だ。\n4. 楽天証券で積立設定する具体的な手順 なぜ楽天証券か 楽天証券は以下の理由で退職金なし会社員の資産形成に適している。\n楽天カード積立：つみたてNISAの積立を楽天カードで支払うと月5万円まで最大1%のポイント還元（楽天プレミアムカードなら月10万円まで最大2%） iDeCo取扱い本数：インデックス系の低コストファンドを中心に幅広いラインナップ 楽天銀行との連携：証券口座と銀行口座の資金移動がシームレスで管理しやすい アプリの使いやすさ：スマートフォンから積立設定・変更が完結する NISA積立設定の手順（楽天証券） Step 1：口座開設・NISA口座の申請 楽天証券に総合口座を開設する際、同時にNISA口座を申請する。マイナンバーカードがあればオンラインで完結し、最短翌営業日に口座開設が完了する。\nStep 2：積立商品の選択 「iSPEED」アプリまたはウェブサイトから「投資信託」→「つみたてNISA対象銘柄」を選択。コストの低いインデックスファンドを選ぶのが基本だ。\n代表的な選択肢：\neMAXIS Slim 全世界株式（オール・カントリー）：全世界の株式に1本で分散投資。信託報酬0.05775%（税込） eMAXIS Slim 米国株式（S\u0026amp;P500）：米国の主要500社に連動。信託報酬0.09372%（税込） Step 3：積立金額・積立日の設定 「積立設定」から月次積立を選択し、金額と引落し日を設定する。楽天カード引落しを選択することでポイント還元が受けられる。\nStep 4：楽天カード支払い設定の確認 積立設定時に「楽天カードクレジット決済」を選択する。毎月1日〜12日に積立注文が発生し、翌月末にカード請求が来る仕組みだ。\nStep 5：iDeCoの申込み NISA設定後、iDeCoの申込みも楽天証券のウェブサイトから行える。会社員の場合、勤務先に「事業主の証明書」を作成してもらう必要があるため、1〜2ヶ月の時間を見込んでおく。\n設定後にやること 積立設定は「セット・アンド・フォーゲット（設定して忘れる）」が基本だ。市場の短期的な変動に反応して売買を繰り返すと、長期複利の恩恵を受けられない。年1回程度、資産配分（アセットアロケーション）を確認し、大きくバランスが崩れていれば積立比率を調整する程度で十分だ。\n口座開設だけで資産形成をスタート 楽天証券ならNISA口座とiDeCoを1か所で管理でき、楽天カード積立でポイントも貯まります。まず口座を開設して積立の第一歩を踏み出しましょう。楽天証券で口座開設\nまとめ：退職金なしは不利だが、手遅れではない 老後2000万円問題の本質は「公的年金だけでは老後の生活費が賄えない」という構造的な問題だ。退職金なしの会社員はこの問題をより直接的に受け止める必要があるが、今すぐ行動すれば十分に対処可能だ。\n行動チェックリストを以下にまとめる。\nねんきんネットで将来の年金受給額を確認する 手取り計算ツール で毎月の積立可能額を把握する 家計簿ツール で現在の支出を可視化する iDeCoシミュレーター で節税効果と運用見込みを試算する NISAシミュレーター で目標額に届く積立額を確認する 楽天証券でNISA口座を開設し、iDeCoを申込む 毎月の積立を自動化して「セット・アンド・フォーゲット」を実践する 退職金がないということは、その分だけ自分で積み上げるしかない。しかし、NISAとiDeCoという強力な税制優遇制度を使えば、税負担を抑えながら効率的に資産を育てることができる。重要なのは、**「完璧な計画を立ててから始める」ではなく、「今すぐ少額でも始めて継続する」**ことだ。\n関連ツール 正確な年齢を今すぐ計算 → 年齢計算ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール FIRE（経済的自立）までの年数を計算 → FIREシミュレーター 複利効果をシミュレーション → 複利計算シミュレーター 配当収入を計算 → 配当金シミュレーター 借金があるならまず返済計画 → 借金返済シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター 教育費の総額を計算 → 教育費シミュレーター 総資産・純資産を計算 → 資産管理シミュレーター インフレによる購買力低下を計算 → インフレ計算ツール 関連記事 新NISA始め方2026年版【初心者向け完全ガイド】口座開設から投資スタートまで iDeCo おすすめ証券会社ランキング【2026年最新版】手数料・商品数を徹底比較 iDeCo節税シミュレーション｜年収別に実際いくら得するか計算 NISA iDeCo どっちを先に始めるべき？優先順位を徹底解説【2026年最新版】 会社員が不動産投資を始めるならRENOSY？｜NISAやiDeCoとの使い分けガイド 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/posts/rougo-2000man-taisaku/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch2 id=\"はじめに2000万円足りないは本当に自分の話なのか\"\u003eはじめに：「2000万円足りない」は本当に自分の話なのか\u003c/h2\u003e\n\u003cp\u003e2019年、金融審議会の報告書が世間を騒がせた。「老後30年間で約2,000万円が不足する」という試算が一人歩きし、「老後2000万円問題」として広く知られるようになった。しかし、あの報告書の前提条件を正確に読んだ人はどれほどいるだろうか。\u003c/p\u003e\n\u003cp\u003e実際、2000万円という数字はすべての人に当てはまるわけではない。前提次第では不足額が大きく膨らむこともあれば、逆に問題が小さく収まることもある。特に\u003cstrong\u003e退職金なしの会社員\u003c/strong\u003eにとっては、平均値の議論をそのまま自分に当てはめることは危険だ。\u003c/p\u003e\n\u003cp\u003eこの記事では、2000万円問題の前提条件を正確に整理したうえで、退職金なし会社員が現実的に実行できる資産形成プランを具体的な数字で示す。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"1-2000万円問題の前提条件と自分のケースへの当てはめ方\"\u003e1. 2000万円問題の前提条件と自分のケースへの当てはめ方\u003c/h2\u003e\n\u003ch3 id=\"報告書の前提条件を正確に確認する\"\u003e報告書の前提条件を正確に確認する\u003c/h3\u003e\n\u003cp\u003e金融審議会2019年報告書が示した試算の前提は以下の通りだ。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e前提条件\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e世帯構成\u003c/td\u003e\n          \u003ctd\u003e夫65歳・妻60歳の無職世帯\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e毎月の収支\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e▲約5万円\u003c/strong\u003e（支出26.4万円、収入20.9万円）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e不足期間\u003c/td\u003e\n          \u003ctd\u003e老後30年間（95歳まで）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e合計不足額\u003c/td\u003e\n          \u003ctd\u003e約2,000万円（5万円 × 12ヶ月 × 30年 ≒ 1,800万円を概算して2,000万円）\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eここで注意すべきは3点ある。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e第一に、収入は夫婦2人分の年金を合算している。\u003c/strong\u003e 自営業者やフリーランスで国民年金のみの場合、年金収入はさらに少なくなる。反対に、会社員として厚生年金を満額納付してきた場合、月収入は20.9万円を上回る可能性がある。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e第二に、退職金は一切考慮されていない。\u003c/strong\u003e 報告書の試算には、退職金収入が含まれていない。定年時に退職金を受け取れる環境にある人は、その分だけ実質的な不足額が圧縮される。逆に言えば、\u003cstrong\u003e退職金なしの会社員は退職金がある人よりも自力での資産形成が必須\u003c/strong\u003eとなる。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e第三に、2,000万円はあくまで平均値ベースの試算だ。\u003c/strong\u003e 住居費、医療費、介護費用の違いによって実際の必要額は大きく変わる。賃貸に住み続ける場合は住居費分がさらに加算され、3,000万円以上が必要になるケースも珍しくない。\u003c/p\u003e\n\u003ch3 id=\"自分の不足額を試算する\"\u003e自分の不足額を試算する\u003c/h3\u003e\n\u003cp\u003e自分のケースへの当てはめ方は次の手順で行う。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e将来受け取れる年金額を確認する\u003c/strong\u003e — ねんきんネット（日本年金機構の公式サービス）で試算できる\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e老後の月間生活費を見積もる\u003c/strong\u003e — 現在の家計支出をベースに、老後に増減する項目を調整する\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e不足額 = (月間生活費 − 月間年金収入) × 12ヶ月 × 老後年数\u003c/strong\u003e で計算する\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e現在の家計状況を把握するには\u003ca href=\"https://productivity-works.com/ja/tools/kakeibo-generator/\"\u003e家計簿ツール\u003c/a\u003e\nが便利だ。現在の支出パターンを可視化することで、老後の生活費推計の精度が上がる。また、手取り収入を正確に把握するには\u003ca href=\"https://productivity-works.com/ja/tools/salary-tedori-calculator/\"\u003e手取り計算ツール\u003c/a\u003e\nを活用しよう。手取り額から逆算して毎月の積立可能額を割り出すことができる。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eポイント：退職金なしの会社員は、報告書の2,000万円を最低ラインとして考え、住居費・医療費の状況に応じて2,500万〜3,000万円を目標に設定することが現実的だ。\u003c/strong\u003e\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"2-退職金なしの会社員が直面する現実\"\u003e2. 退職金なしの会社員が直面する現実\u003c/h2\u003e\n\u003ch3 id=\"退職金制度のある企業は減少している\"\u003e退職金制度のある企業は減少している\u003c/h3\u003e\n\u003cp\u003e厚生労働省の調査によれば、退職金制度がある企業の割合は大企業では依然として高いが、中小企業では大幅に低下している。特にスタートアップやIT系企業では退職金制度そのものを設けていないケースが多い。\u003c/p\u003e\n\u003cp\u003e退職金の平均額（大卒・管理職・定年退職）は企業によって異なるが、大企業では1,500万〜2,000万円程度とされる。この額がないということは、\u003cstrong\u003e老後資金の出発点が最初から2,000万円分不利な状態にある\u003c/strong\u003eということだ。\u003c/p\u003e\n\u003ch3 id=\"退職金なし会社員が陥りやすい罠\"\u003e退職金なし会社員が陥りやすい罠\u003c/h3\u003e\n\u003cp\u003e退職金なし会社員が資産形成で失敗するパターンは主に3つある。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eパターン1：「将来なんとかなる」先送り症候群\u003c/strong\u003e\n30代・40代は育児・住宅ローン・教育費などの支出が重なり、老後資金の積立を後回しにしがちだ。しかし複利の効果を考えると、積立開始を10年遅らせることで必要な月額積立額は約1.5〜2倍に膨らむ。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eパターン2：退職金代わりに投資ビギナーが一括投資でリスクを取りすぎる\u003c/strong\u003e\n退職直前に焦って高リスク商品に一括投資するパターンは、暴落タイミングとぶつかった場合に取り返しのつかない損失を招く。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eパターン3：税制優遇制度を使わずに課税口座で資産形成する\u003c/strong\u003e\nNISAやiDeCoを使わずに課税口座で積立てると、運用益・配当に約20%の税金がかかる。税制優遇を最大限活用することが退職金なし会社員の最重要戦略だ。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"3-nisaidecoの併用で月いくら積立てれば届くか\"\u003e3. NISA・iDeCoの併用で月いくら積立てれば届くか\u003c/h2\u003e\n\u003ch3 id=\"現行nisaの枠組みを確認する\"\u003e現行NISAの枠組みを確認する\u003c/h3\u003e\n\u003cp\u003e2024年から始まった新NISAの主要スペックは以下の通りだ。\u003c/p\u003e","title":"老後2000万円問題を自分で検証｜退職金なしの会社員がとるべき行動"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「FXを始めてみたいけど、口座開設って難しそう…」と感じていませんか？DMM FXなら、スマートフォン一台で最短10分ほどで申し込みが完了します。この記事では、FX初心者の方に向けて、DMM FXの口座開設の全手順をステップバイステップでわかりやすく解説します。準備するものから審査の注意点、取引開始までの流れを網羅しているので、ぜひ参考にしてください。\nDMM FXとは DMM FXは、DMM.comグループが運営する国内大手のFX（外国為替証拠金取引）サービスです。2006年のサービス開始以来、口座数・取引量ともに国内トップクラスを誇り、初心者から中級者まで幅広い層に利用されています。\n主な特徴は以下の通りです。\n取引手数料無料: 売買の手数料は一切かかりません。コストはスプレッド（買値と売値の差）のみです。 24時間サポート体制: 電話・メール・LINEによるサポートを24時間（平日）提供しており、初心者でも疑問をすぐに解消できます。 使いやすいスマホアプリ: 「STANDARD」と「PLUS」の2種類のアプリを提供。STANDARDはシンプルで初心者向け、PLUSはチャート機能が充実した中上級者向けです。 デモ取引機能: 実際の資金を使わずに疑似取引を体験できるため、初心者が練習するのに最適です。 Pontaポイント・dポイント連携: 取引量に応じてポイントが貯まり、日常生活でも活用できます。 これだけのサービスが整っていながら、口座開設・維持費は無料。FXデビューの場としては非常に入門しやすい選択肢です。\n口座開設に必要なもの 申し込みを始める前に、以下を手元に準備しておくとスムーズです。\n1. 本人確認書類（いずれか1点） 書類 備考 マイナンバーカード（個人番号カード） 表面・裏面が必要。マイナンバーと本人確認を1枚で完結できるため最も便利 運転免許証 表面・裏面が必要 住民基本台帳カード（写真付き） 表面・裏面が必要 パスポート 顔写真ページと住所記載ページが必要 ポイント: マイナンバーカードを使うと、本人確認書類とマイナンバー確認を一枚で済ませられるため、最も手続きが簡単です。\n2. マイナンバー（個人番号） マイナンバーカードを使わない場合は、以下のいずれかでマイナンバーを確認する書類が別途必要です。\nマイナンバー通知カード マイナンバーが記載された住民票の写し 3. メールアドレス 申し込みの受付確認や、ログイン情報の受け取りに使用します。普段使いのアドレスで問題ありません。\n4. 銀行口座 入金・出金に使用する国内の銀行口座。ゆうちょ銀行も利用可能です。\n口座開設の手順ステップバイステップ それでは、実際の申し込み手順を順を追って解説します。\nStep 1: 公式サイトで申込フォームに入力 まず、DMM FXの公式サイトにアクセスし、「口座開設（無料）」ボタンをクリックします。\nDMM FXの公式サイトはこちら（URL: TBD）\n申込フォームでは以下の情報を入力します。\nメールアドレス（確認用に2回） パスワードの設定 氏名（漢字・カナ） 生年月日 住所 電話番号 職業・年収・金融資産・投資経験（アンケート形式） 取引目的・取引予定額 フォームの入力自体は5〜10分程度で完了します。途中で中断しても、メールアドレスとパスワードを入力すれば再開できます。\nStep 2: 本人確認書類のアップロード フォーム入力後、本人確認書類を提出します。提出方法は2種類あります。\n方法A: スマホ本人確認（推奨）\nスマートフォンのカメラを使って、書類の写真と自撮り（顔写真）を撮影・アップロードします。最短で当日中に審査が進むため、こちらの方法が圧倒的に早いです。\n手順は以下の通りです。\nスマホでDMM FXの申込ページにアクセス 「スマホで本人確認」を選択 書類の種類を選択（例: マイナンバーカード） 書類の表面・裏面を撮影してアップロード 自撮り写真を撮影してアップロード 方法B: 郵送\n書類のコピーを郵送する方法です。審査完了まで数日〜1週間程度かかります。急いでいない場合や、スマートフォンの操作に不安がある場合はこちらを選択できます。\nStep 3: 審査（最短即日〜数日） 書類提出後、DMM FX側で審査が行われます。審査期間の目安は以下の通りです。\nスマホ本人確認: 最短即日〜翌営業日 郵送: 書類到着後、3〜5営業日程度 審査中はメールで進捗が通知されます。混雑状況によっては多少時間がかかることもありますが、平均的には数日以内に完了します。\nStep 4: ログイン情報の受取・初期設定 審査通過後、登録したメールアドレスに「口座開設完了のお知らせ」が届きます。メールには以下が記載されています。\nログインID（口座番号） 初回ログイン用パスワード（セキュリティ上、ログイン後に変更を推奨） メールを受け取ったら、DMMのサイトまたはアプリにログインし、以下の初期設定を行いましょう。\nパスワードの変更 出金先銀行口座の登録 アプリのダウンロード（「DMM FX STANDARD」または「DMM FX PLUS」） Step 5: 入金して取引開始 初期設定が完了したら、いよいよ入金です。DMM FXへの入金方法は主に以下の2種類です。\n即時入金（推奨）: インターネットバンキングを使ってリアルタイムで入金が反映されます。対応銀行（三菱UFJ・三井住友・みずほ・ゆうちょなど主要行）であれば、手数料無料で即時反映されます。\n振込入金: 銀行ATMや窓口から振り込む方法。反映まで数時間〜翌営業日かかります。\n入金後、デモ取引で練習してから本番取引に臨むのがおすすめです。DMM FXのデモ取引は口座開設後すぐに利用でき、本番と同じ環境で練習できます。\n審査基準と注意点 開設できる人の条件 年齢: 18歳以上（未成年は開設不可） 日本在住: 国内に居住していること 本人確認書類が有効: 有効期限内の書類であること 申し込み時のアンケートについて 口座開設フォームには、金融資産・年収・投資経験に関するアンケートがあります。これはFXの適合性確認のためのもので、必ずしも「金融資産が多い人だけ開設できる」というわけではありません。ただし、以下の点には注意が必要です。\n虚偽の申告は禁物: 正直に回答することが重要です。 投資経験がなくても開設可能: 「投資経験なし」と答えても口座開設を拒否されることはありません。 審査に通りにくいケースの例 18歳未満 本人確認書類の写真が不鮮明・有効期限切れ 申告内容に不備・矛盾がある 反社会的勢力に該当する場合 書類の写真は、文字がはっきり読み取れる明るい場所で撮影し、四隅が欠けないよう注意しましょう。\nDMM FXのメリット・デメリット メリット 1. スプレッドが業界最狭水準 米ドル/円のスプレッドは0.2銭（原則固定、例外あり）と非常に狭く、コストを抑えた取引が可能です。\n2. 初心者に優しいサポート体制 24時間（平日）の電話・メール・LINEサポートは、FX初心者が疑問をすぐ解決できる安心感があります。\n3. デモ取引が充実 本番と同じツールでデモ取引ができるため、リスクなしで操作感を習得できます。\n4. ポイント還元 取引量に応じてPontaポイントまたはdポイントが貯まります。\n5. 取引ツールが充実 PC版のDMM FX PLUS（旧DMMトレーダー）はチャート分析機能が豊富で、中上級者にも対応しています。\nデメリット 1. 通貨ペアの数が限定的 提供している通貨ペア数は他社と比較するとやや少なめです。マイナー通貨ペアを取引したい場合は注意が必要です。\n2. CFD取引などには非対応 FX専業のサービスのため、株式CFDや仮想通貨CFDなどは取引できません。FX以外の商品も扱いたい場合は、楽天証券 などの総合証券口座を別途開設するのがおすすめです。\n3. 自動売買（EA）に非対応 MetaTrader（MT4/MT5）には対応していないため、自動売買ツールを使いたい方には不向きです。\nFX利益が出たら確定申告が必要 FXで利益を得た場合、一定額を超えると確定申告が必要になります。\n確定申告が必要になるケース 会社員・公務員: 給与所得以外のFX利益が年間20万円超の場合 専業主婦・無職: FX利益が年間48万円超（基礎控除額）の場合 FXの所得は「雑所得」として申告分離課税（税率一律20.315%）が適用されます。損失が出た場合は、最大3年間の繰越控除も活用できます。\n確定申告の具体的な手順については、以下の記事も参考にしてください。\nFXの確定申告のやり方（会社員向け） FXの税金計算方法（会社員向け） freeeを使えば確定申告がラクになる FXの利益・損失の集計や確定申告書類の作成には、クラウド会計ソフト「freee会計 」が便利です。取引履歴をCSVで取り込み、自動で損益を集計。確定申告書の作成から電子申告まで、一貫して対応できます。FXで利益が出始めたタイミングで、あわせて準備しておくと安心です。\nまとめ：DMM FXの口座開設は最短10分で完了 この記事で解説した口座開設の流れをまとめます。\n準備: 本人確認書類・マイナンバー・メールアドレス・銀行口座を用意 Step 1: 公式サイトで申込フォームに入力（5〜10分） Step 2: スマホ本人確認で書類をアップロード Step 3: 審査を待つ（最短即日〜翌営業日） Step 4: メールでログイン情報を受け取り、初期設定 Step 5: 入金してデモ取引で練習 → 本番取引開始 手数料無料・24時間サポート・豊富なデモ環境と、初心者がFXを始めるための条件が揃っているDMM FX。まずは口座開設だけでも済ませておけば、FXを始めたいと思ったときにすぐ動けます。\nDMM FXの公式サイトで口座開設する（URL: TBD）\n口座開設・維持費は完全無料です。ぜひこの機会に一歩踏み出してみてください。\n関連ツール FXの利益を計算 → FX利益計算シミュレーター 副業の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター ※本記事にはアフィリエイト広告が含まれています。\nあわせて読みたい FX口座 おすすめ2026年版！初心者向けに比較【少額から始められる】 FX利益20万円超えたら確定申告が必要？サラリーマン向けに税額を実計算 FX口座の開設審査に落ちる原因と通過率を上げる4つの対策 ","permalink":"https://productivity-works.com/ja/posts/dmm-fx-koza-kaisetsu-yarikata-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「FXを始めてみたいけど、口座開設って難しそう…」と感じていませんか？DMM FXなら、スマートフォン一台で最短10分ほどで申し込みが完了します。この記事では、FX初心者の方に向けて、DMM FXの口座開設の全手順をステップバイステップでわかりやすく解説します。準備するものから審査の注意点、取引開始までの流れを網羅しているので、ぜひ参考にしてください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"dmm-fxとは\"\u003eDMM FXとは\u003c/h2\u003e\n\u003cp\u003eDMM FXは、DMM.comグループが運営する国内大手のFX（外国為替証拠金取引）サービスです。2006年のサービス開始以来、口座数・取引量ともに国内トップクラスを誇り、初心者から中級者まで幅広い層に利用されています。\u003c/p\u003e\n\u003cp\u003e主な特徴は以下の通りです。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e取引手数料無料\u003c/strong\u003e: 売買の手数料は一切かかりません。コストはスプレッド（買値と売値の差）のみです。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e24時間サポート体制\u003c/strong\u003e: 電話・メール・LINEによるサポートを24時間（平日）提供しており、初心者でも疑問をすぐに解消できます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e使いやすいスマホアプリ\u003c/strong\u003e: 「STANDARD」と「PLUS」の2種類のアプリを提供。STANDARDはシンプルで初心者向け、PLUSはチャート機能が充実した中上級者向けです。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eデモ取引機能\u003c/strong\u003e: 実際の資金を使わずに疑似取引を体験できるため、初心者が練習するのに最適です。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePontaポイント・dポイント連携\u003c/strong\u003e: 取引量に応じてポイントが貯まり、日常生活でも活用できます。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eこれだけのサービスが整っていながら、口座開設・維持費は無料。FXデビューの場としては非常に入門しやすい選択肢です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"口座開設に必要なもの\"\u003e口座開設に必要なもの\u003c/h2\u003e\n\u003cp\u003e申し込みを始める前に、以下を手元に準備しておくとスムーズです。\u003c/p\u003e\n\u003ch3 id=\"1-本人確認書類いずれか1点\"\u003e1. 本人確認書類（いずれか1点）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e書類\u003c/th\u003e\n          \u003cth\u003e備考\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eマイナンバーカード（個人番号カード）\u003c/td\u003e\n          \u003ctd\u003e表面・裏面が必要。マイナンバーと本人確認を1枚で完結できるため最も便利\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e運転免許証\u003c/td\u003e\n          \u003ctd\u003e表面・裏面が必要\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e住民基本台帳カード（写真付き）\u003c/td\u003e\n          \u003ctd\u003e表面・裏面が必要\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eパスポート\u003c/td\u003e\n          \u003ctd\u003e顔写真ページと住所記載ページが必要\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eポイント\u003c/strong\u003e: マイナンバーカードを使うと、本人確認書類とマイナンバー確認を一枚で済ませられるため、最も手続きが簡単です。\u003c/p\u003e\u003c/blockquote\u003e\n\u003ch3 id=\"2-マイナンバー個人番号\"\u003e2. マイナンバー（個人番号）\u003c/h3\u003e\n\u003cp\u003eマイナンバーカードを使わない場合は、以下のいずれかでマイナンバーを確認する書類が別途必要です。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eマイナンバー通知カード\u003c/li\u003e\n\u003cli\u003eマイナンバーが記載された住民票の写し\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"3-メールアドレス\"\u003e3. メールアドレス\u003c/h3\u003e\n\u003cp\u003e申し込みの受付確認や、ログイン情報の受け取りに使用します。普段使いのアドレスで問題ありません。\u003c/p\u003e\n\u003ch3 id=\"4-銀行口座\"\u003e4. 銀行口座\u003c/h3\u003e\n\u003cp\u003e入金・出金に使用する国内の銀行口座。ゆうちょ銀行も利用可能です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"口座開設の手順ステップバイステップ\"\u003e口座開設の手順ステップバイステップ\u003c/h2\u003e\n\u003cp\u003eそれでは、実際の申し込み手順を順を追って解説します。\u003c/p\u003e\n\u003ch3 id=\"step-1-公式サイトで申込フォームに入力\"\u003eStep 1: 公式サイトで申込フォームに入力\u003c/h3\u003e\n\u003cp\u003eまず、DMM FXの公式サイトにアクセスし、「口座開設（無料）」ボタンをクリックします。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDMM FXの公式サイトはこちら\u003c/strong\u003e（URL: TBD）\u003c/p\u003e\n\u003cp\u003e申込フォームでは以下の情報を入力します。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eメールアドレス（確認用に2回）\u003c/li\u003e\n\u003cli\u003eパスワードの設定\u003c/li\u003e\n\u003cli\u003e氏名（漢字・カナ）\u003c/li\u003e\n\u003cli\u003e生年月日\u003c/li\u003e\n\u003cli\u003e住所\u003c/li\u003e\n\u003cli\u003e電話番号\u003c/li\u003e\n\u003cli\u003e職業・年収・金融資産・投資経験（アンケート形式）\u003c/li\u003e\n\u003cli\u003e取引目的・取引予定額\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eフォームの入力自体は5〜10分程度で完了します。途中で中断しても、メールアドレスとパスワードを入力すれば再開できます。\u003c/p\u003e\n\u003ch3 id=\"step-2-本人確認書類のアップロード\"\u003eStep 2: 本人確認書類のアップロード\u003c/h3\u003e\n\u003cp\u003eフォーム入力後、本人確認書類を提出します。提出方法は2種類あります。\u003c/p\u003e","title":"DMM FXの口座開設のやり方｜初心者でも10分で完了する全手順【2026年版】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n転職活動を始めたとき、「自分から求人を探すだけでなく、企業から声をかけてもらいたい」と思う人は多いはずです。そのニーズに応えるのが、dodaのスカウト機能です。\ndodaはパーソルキャリア株式会社が運営する国内最大級の転職サービスのひとつです。求人検索や転職エージェントサービスに加えて、スカウト機能が充実しており、プロフィールを登録するだけで企業やエージェントから直接オファーが届く仕組みになっています。\nしかし、「スカウトが全然来ない」「来ても希望と全然違う」という声もよく聞かれます。スカウト機能は使い方次第で効果が大きく変わります。本記事では、dodaスカウトの仕組みと種類、返信率を上げるプロフィール設定術、評判の傾向まで、2026年最新情報として詳しく解説します。\ndodaスカウトとは？仕組みをおさらい dodaのスカウト機能は、求職者がプロフィール（職務経歴・スキル・希望条件など）を登録しておくと、それを見た企業の採用担当者やdodaのキャリアアドバイザーから直接メッセージが届く機能です。\n求職者側のメリットは明確です。\n自分では気づかなかった求人や企業に出会える 企業から声をかけられることで、採用意欲の高い状態で選考に進める 在職中でも「待ち」のスタンスで転職活動を進められる スカウトを受け取るには、doda会員登録後にプロフィールを公開設定にする必要があります。非公開にすると現職の会社に登録がバレるリスクを抑えられますが、スカウトは届かなくなります。この点は後ほど詳しく説明します。\ndodaスカウトの種類：3つのオファーを理解する dodaのスカウトは大きく3種類に分類されます。それぞれの特徴を把握しておくことで、届いたオファーへの対応を適切に判断できます。\n1. 面接確約オファー 企業の採用担当者が求職者のプロフィールを直接閲覧し、「ぜひ会いたい」と判断して送るオファーです。書類選考が免除され、最初から面接に進めることが多い点が最大の特徴です。\n企業側も採用コストをかけてオファーを送っているため、採用意欲が高い状態と言えます。転職活動の効率化という観点では、最も価値が高いスカウトタイプです。届いた場合は積極的に検討することをおすすめします。\n2. プレミアムオファー dodaのキャリアアドバイザー（エージェント）が求職者のプロフィールを見て、特定の求人への応募を個別に推薦するオファーです。担当アドバイザーが求人の詳細情報や企業の採用背景を把握した上で送られてくるため、求職者との親和性が比較的高い傾向があります。\nエージェントを通じて選考が進むため、面接対策や条件交渉のサポートも受けられます。\n3. 通常スカウト 企業やエージェントが、一定の条件に合致した複数の求職者に対して一斉送信するタイプのスカウトです。パーソナライズ度は面接確約オファーやプレミアムオファーより低い場合がありますが、自分では検索しなかった求人と出会えるきっかけになります。\n受け取ったスカウトは種類を確認する習慣をつけましょう。 面接確約オファーとそれ以外を区別して優先度をつけることで、返信・対応の効率が上がります。\nスカウトが届くプロフィール設定術 スカウトが届くかどうかは、プロフィールの完成度に大きく左右されます。「登録したのにスカウトが来ない」という場合、プロフィールの記載内容が不十分なことがほとんどです。以下のポイントを意識して設定しましょう。\n職務経歴の書き方 職務経歴は、企業の採用担当者が最も重点的に見る項目です。以下の点を意識して記載します。\n具体的な数字を入れる: 「売上を向上させた」ではなく「担当エリアの売上を前年比120%に伸ばした（月次平均500万円規模）」のように定量化する 担当業務だけでなく実績・成果を書く: 何をやったかではなく、何を達成したかを明示する 専門用語は適切に使う: 業界の採用担当者が検索するキーワードが含まれると、スカウトの対象に入りやすくなる 直近の経験を詳しく書く: 古い職歴は簡潔に、直近3〜5年は詳細に記述するのが基本 スキル・資格の入力 保有資格や業務で使用したツール・技術スタックは漏れなく入力してください。採用担当者が「Pythonが使える人材」「TOEIC800点以上」などの条件で候補者を絞り込む際に、この情報が合否の判定基準になります。\n特に以下は見落とされがちなので確認しましょう。\n語学スキル（TOEIC・TOEFL・英検のスコアや取得級） ITツール・業務システムの操作経験（Excel・Salesforce・SAPなど） 業界特有の資格・免許（宅建・社会保険労務士・FP技能士など） 希望条件の設定 希望する職種・業界・勤務地・年収レンジを具体的に設定することで、ミスマッチなスカウトを減らし、関連性の高いオファーが届きやすくなります。\nただし、条件を絞りすぎるとスカウト数そのものが減る点に注意が必要です。特定の勤務地1か所のみに絞るよりも、「東京・神奈川・埼玉・リモート可」のように幅を持たせる方が機会を広げられます。\n写真の有無 dodaのプロフィールには顔写真を登録する項目があります。写真があると企業担当者が人物像をイメージしやすくなり、スカウトの確率が上がる傾向があると言われています。転職を本気で進めるなら、清潔感のある写真を設定しておくことを推奨します。\n返信率を上げるコツ5選 スカウトが届いた後、どう対応するかも重要です。返信率を上げ、選考につなげるための実践的なコツを5つ紹介します。\n1. ログイン頻度を上げる dodaは求職者のログイン頻度やプロフィール更新頻度を、スカウト配信の優先度に反映していると言われています。週に1〜2回はログインする習慣をつけるだけで、届くスカウトの量が変わることがあります。\n2. 職務経歴を定期的に更新する 内容が変わっていなくても、職務経歴を定期的に「更新」する操作をするだけで、プロフィールの鮮度が上がります。月に1回程度、内容を見直し・加筆するタイミングを決めておくと効果的です。\n直近のプロジェクト実績や新たに習得したスキル・資格があれば、その都度追記しましょう。\n3. 希望条件の幅を柔軟に設定する 転職で絶対に譲れない条件（Must条件）と、あればベターな条件（Want条件）を分けて考えましょう。doda上では希望条件を広めに設定しておき、スカウトが届いた後に自分でフィルタリングする方が、チャンスを逃しにくくなります。\n特に業種・職種の設定は、現職と近い分野だけでなく、スキルが活かせる隣接領域まで広げておくと想定外の好条件オファーに出会えることがあります。\n4. 公開ブロック設定を正しく使う 在職中の場合、現職の会社にdodaへの登録を知られたくないというケースが多いはずです。dodaには「現在の会社にプロフィールを公開しない」という公開ブロック設定があります。\nこの設定を適切に行えば、現職の会社の採用担当者がdodaでスカウト検索をしても、自分のプロフィールが表示されなくなります。ただし、設定を間違えると意図しない形で公開されてしまう可能性もあるため、設定画面をしっかり確認してください。\n注意点: 公開ブロックを設定しすぎると、スカウトそのものが届かなくなる場合があります。必要最小限のブロック設定にとどめ、できるだけ多くの企業にプロフィールを公開しておくのが返信率向上の観点では望ましいです。\n5. 返信の第一文を工夫する スカウトへの返信率（＝返信した後に選考が進む率）を上げるには、返信文の書き方も重要です。企業からのスカウトへの返信では、以下のポイントを押さえてください。\nなぜこの企業・ポジションに興味を持ったかを一言添える 自分の経験・スキルがどう活かせるかを簡潔に述べる 日程調整の意向を示す（「ご都合のよい日時をお知らせください」など） テンプレート的な返信より、スカウト文の内容に触れた個別感のある返信の方が、企業担当者の印象に残りやすくなります。\ndodaスカウトの評判・口コミの傾向 実際にdodaのスカウト機能を使った人たちの声は、ポジティブ・ネガティブ両方の傾向があります。一般的に聞かれる意見をまとめます（特定個人の口コミの引用ではなく、傾向の整理です）。\nポジティブな評判の傾向 大手・有名企業からのオファーが届くことがある: dodaは登録企業数が多いため、知名度の高い企業から直接スカウトが来るケースがある 面接確約オファーで選考が効率化できる: 書類選考なしで面接に進めるため、在職中でも転職活動のスピードを上げやすい エージェントからのプレミアムオファーが丁寧: キャリアアドバイザーが求職者の経歴を見た上で送るため、的外れな案件が少ないと感じる人もいる ネガティブな評判の傾向 スカウト数が多すぎてメール管理が大変: 登録直後は大量のスカウトメールが届くことがある。フォルダ分けや通知設定の工夫が必要 希望条件と合わない案件も届く: 通常スカウトは一斉配信型のため、自分の経験・希望と乖離した求人が含まれることがある スカウト返信後にレスポンスが遅い企業がある: スカウトを送る側（企業・エージェント）のレスポンス速度には差があり、すぐに返信が来ないケースも報告されている こうした傾向を踏まえると、dodaスカウトは「量は多いが精度はピンキリ」という特性を理解した上で活用するのが現実的な使い方と言えます。面接確約オファーを優先的に確認し、通常スカウトはある程度取捨選択するスタンスが効率的です。\ndoda以外の転職サービスとの使い分け dodaスカウトを活用しつつ、他の転職サービスも並行して使うことで、転職活動の選択肢が広がります。\nサービス 特徴 dodaとの使い分け リクルートエージェント 国内最大級の非公開求人数 管理職・専門職求人はリクルートエージェントが強い ビズリーチ ハイクラス転職特化のスカウト型 年収600万円以上を狙うならビズリーチを併用 マイナビ転職 20代・第二新卒に強い 若年層はマイナビ転職との併用が有効 LinkedIn グローバル転職・外資系に強い 外資系・スタートアップを狙う場合はLinkedIn dodaはスカウト機能と転職エージェント機能の両方が一体化している点が強みです。「スカウトを受けながらエージェントにも相談できる」ワンストップ性は、特に転職初心者や忙しい在職者にとって使いやすい設計になっています。\nまた、転職活動を本格化させる際には、自分の実績・ポートフォリオをまとめた専用サイトを作成しておくと強みのアピールがしやすくなります。ドメイン取得から始めるなら**お名前.com **が国内最大手で使いやすく、低コストで始められます。\n年収交渉の進め方については、こちらの記事も参考にしてください。 → 転職年収シミュレーター おすすめ転職サービスの比較はこちら。 → 手取り計算シミュレーター まとめ：dodaスカウトは「設定と選別」がカギ dodaのスカウト機能は、正しく設定して使えば転職活動を大きく効率化できるツールです。本記事のポイントを振り返ります。\nスカウトの種類を理解する: 面接確約オファーを最優先で確認する プロフィールを充実させる: 職務経歴は定量実績を入れて具体的に記述する ログインと更新を習慣化する: 週1〜2回のログインと月1回の更新が目安 希望条件は幅を持たせる: 絞りすぎるとスカウト数が減る 公開ブロック設定を正しく使う: 現職バレのリスクを管理しながら公開範囲を最大化する 届いたスカウトを選別する: 通常スカウトは取捨選択し、面接確約・プレミアムを優先 まだdodaに登録していない方、プロフィールを放置している方は、これを機に設定を見直してみてください。\ndoda公式サイトで無料登録・プロフィールを設定する 登録・利用は完全無料です。スカウト機能だけでなく、キャリアアドバイザーへの相談・求人検索・年収診断なども無料で使えます。転職を急いでいない段階からプロフィールを登録しておくことで、思わぬ好条件のスカウトに出会える可能性があります。\n関連ツール 転職後の年収をシミュレーション → 転職年収シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター ※本記事にはアフィリエイト広告が含まれています。記事内で紹介しているサービスの情報は執筆時点（2026年5月）のものです。最新情報は各サービスの公式サイトにてご確認ください。\nあわせて読みたい 転職サイト おすすめ2026年版！年代・目的別に徹底比較 転職で年収100万アップする人がやっている交渉術と税金対策 50代転職 AI活用準備ガイド2026 未経験からの完全ロードマップ ","permalink":"https://productivity-works.com/ja/posts/doda-scout-tsukaikata-hyoban/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e転職活動を始めたとき、「自分から求人を探すだけでなく、企業から声をかけてもらいたい」と思う人は多いはずです。そのニーズに応えるのが、dodaのスカウト機能です。\u003c/p\u003e\n\u003cp\u003edodaはパーソルキャリア株式会社が運営する国内最大級の転職サービスのひとつです。求人検索や転職エージェントサービスに加えて、\u003cstrong\u003eスカウト機能\u003c/strong\u003eが充実しており、プロフィールを登録するだけで企業やエージェントから直接オファーが届く仕組みになっています。\u003c/p\u003e\n\u003cp\u003eしかし、「スカウトが全然来ない」「来ても希望と全然違う」という声もよく聞かれます。スカウト機能は使い方次第で効果が大きく変わります。本記事では、dodaスカウトの仕組みと種類、返信率を上げるプロフィール設定術、評判の傾向まで、2026年最新情報として詳しく解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"dodaスカウトとは仕組みをおさらい\"\u003edodaスカウトとは？仕組みをおさらい\u003c/h2\u003e\n\u003cp\u003edodaのスカウト機能は、求職者がプロフィール（職務経歴・スキル・希望条件など）を登録しておくと、それを見た企業の採用担当者やdodaのキャリアアドバイザーから直接メッセージが届く機能です。\u003c/p\u003e\n\u003cp\u003e求職者側のメリットは明確です。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e自分では気づかなかった求人や企業に出会える\u003c/li\u003e\n\u003cli\u003e企業から声をかけられることで、採用意欲の高い状態で選考に進める\u003c/li\u003e\n\u003cli\u003e在職中でも「待ち」のスタンスで転職活動を進められる\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eスカウトを受け取るには、doda会員登録後にプロフィールを公開設定にする必要があります。非公開にすると現職の会社に登録がバレるリスクを抑えられますが、スカウトは届かなくなります。この点は後ほど詳しく説明します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"dodaスカウトの種類3つのオファーを理解する\"\u003edodaスカウトの種類：3つのオファーを理解する\u003c/h2\u003e\n\u003cp\u003edodaのスカウトは大きく3種類に分類されます。それぞれの特徴を把握しておくことで、届いたオファーへの対応を適切に判断できます。\u003c/p\u003e\n\u003ch3 id=\"1-面接確約オファー\"\u003e1. 面接確約オファー\u003c/h3\u003e\n\u003cp\u003e企業の採用担当者が求職者のプロフィールを直接閲覧し、「ぜひ会いたい」と判断して送るオファーです。書類選考が免除され、最初から面接に進めることが多い点が最大の特徴です。\u003c/p\u003e\n\u003cp\u003e企業側も採用コストをかけてオファーを送っているため、採用意欲が高い状態と言えます。転職活動の効率化という観点では、最も価値が高いスカウトタイプです。届いた場合は積極的に検討することをおすすめします。\u003c/p\u003e\n\u003ch3 id=\"2-プレミアムオファー\"\u003e2. プレミアムオファー\u003c/h3\u003e\n\u003cp\u003edodaのキャリアアドバイザー（エージェント）が求職者のプロフィールを見て、特定の求人への応募を個別に推薦するオファーです。担当アドバイザーが求人の詳細情報や企業の採用背景を把握した上で送られてくるため、求職者との親和性が比較的高い傾向があります。\u003c/p\u003e\n\u003cp\u003eエージェントを通じて選考が進むため、面接対策や条件交渉のサポートも受けられます。\u003c/p\u003e\n\u003ch3 id=\"3-通常スカウト\"\u003e3. 通常スカウト\u003c/h3\u003e\n\u003cp\u003e企業やエージェントが、一定の条件に合致した複数の求職者に対して一斉送信するタイプのスカウトです。パーソナライズ度は面接確約オファーやプレミアムオファーより低い場合がありますが、自分では検索しなかった求人と出会えるきっかけになります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e受け取ったスカウトは種類を確認する習慣をつけましょう。\u003c/strong\u003e 面接確約オファーとそれ以外を区別して優先度をつけることで、返信・対応の効率が上がります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"スカウトが届くプロフィール設定術\"\u003eスカウトが届くプロフィール設定術\u003c/h2\u003e\n\u003cp\u003eスカウトが届くかどうかは、プロフィールの完成度に大きく左右されます。「登録したのにスカウトが来ない」という場合、プロフィールの記載内容が不十分なことがほとんどです。以下のポイントを意識して設定しましょう。\u003c/p\u003e\n\u003ch3 id=\"職務経歴の書き方\"\u003e職務経歴の書き方\u003c/h3\u003e\n\u003cp\u003e職務経歴は、企業の採用担当者が最も重点的に見る項目です。以下の点を意識して記載します。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e具体的な数字を入れる\u003c/strong\u003e: 「売上を向上させた」ではなく「担当エリアの売上を前年比120%に伸ばした（月次平均500万円規模）」のように定量化する\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e担当業務だけでなく実績・成果を書く\u003c/strong\u003e: 何をやったかではなく、何を達成したかを明示する\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e専門用語は適切に使う\u003c/strong\u003e: 業界の採用担当者が検索するキーワードが含まれると、スカウトの対象に入りやすくなる\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e直近の経験を詳しく書く\u003c/strong\u003e: 古い職歴は簡潔に、直近3〜5年は詳細に記述するのが基本\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"スキル資格の入力\"\u003eスキル・資格の入力\u003c/h3\u003e\n\u003cp\u003e保有資格や業務で使用したツール・技術スタックは漏れなく入力してください。採用担当者が「Pythonが使える人材」「TOEIC800点以上」などの条件で候補者を絞り込む際に、この情報が合否の判定基準になります。\u003c/p\u003e\n\u003cp\u003e特に以下は見落とされがちなので確認しましょう。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e語学スキル（TOEIC・TOEFL・英検のスコアや取得級）\u003c/li\u003e\n\u003cli\u003eITツール・業務システムの操作経験（Excel・Salesforce・SAPなど）\u003c/li\u003e\n\u003cli\u003e業界特有の資格・免許（宅建・社会保険労務士・FP技能士など）\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"希望条件の設定\"\u003e希望条件の設定\u003c/h3\u003e\n\u003cp\u003e希望する職種・業界・勤務地・年収レンジを具体的に設定することで、ミスマッチなスカウトを減らし、関連性の高いオファーが届きやすくなります。\u003c/p\u003e\n\u003cp\u003eただし、\u003cstrong\u003e条件を絞りすぎるとスカウト数そのものが減る\u003c/strong\u003e点に注意が必要です。特定の勤務地1か所のみに絞るよりも、「東京・神奈川・埼玉・リモート可」のように幅を持たせる方が機会を広げられます。\u003c/p\u003e\n\u003ch3 id=\"写真の有無\"\u003e写真の有無\u003c/h3\u003e\n\u003cp\u003edodaのプロフィールには顔写真を登録する項目があります。写真があると企業担当者が人物像をイメージしやすくなり、スカウトの確率が上がる傾向があると言われています。転職を本気で進めるなら、清潔感のある写真を設定しておくことを推奨します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"返信率を上げるコツ5選\"\u003e返信率を上げるコツ5選\u003c/h2\u003e\n\u003cp\u003eスカウトが届いた後、どう対応するかも重要です。返信率を上げ、選考につなげるための実践的なコツを5つ紹介します。\u003c/p\u003e\n\u003ch3 id=\"1-ログイン頻度を上げる\"\u003e1. ログイン頻度を上げる\u003c/h3\u003e\n\u003cp\u003edodaは求職者のログイン頻度やプロフィール更新頻度を、スカウト配信の優先度に反映していると言われています。週に1〜2回はログインする習慣をつけるだけで、届くスカウトの量が変わることがあります。\u003c/p\u003e\n\u003ch3 id=\"2-職務経歴を定期的に更新する\"\u003e2. 職務経歴を定期的に更新する\u003c/h3\u003e\n\u003cp\u003e内容が変わっていなくても、職務経歴を定期的に「更新」する操作をするだけで、プロフィールの鮮度が上がります。月に1回程度、内容を見直し・加筆するタイミングを決めておくと効果的です。\u003c/p\u003e\n\u003cp\u003e直近のプロジェクト実績や新たに習得したスキル・資格があれば、その都度追記しましょう。\u003c/p\u003e\n\u003ch3 id=\"3-希望条件の幅を柔軟に設定する\"\u003e3. 希望条件の幅を柔軟に設定する\u003c/h3\u003e\n\u003cp\u003e転職で絶対に譲れない条件（Must条件）と、あればベターな条件（Want条件）を分けて考えましょう。doda上では希望条件を広めに設定しておき、スカウトが届いた後に自分でフィルタリングする方が、チャンスを逃しにくくなります。\u003c/p\u003e\n\u003cp\u003e特に業種・職種の設定は、現職と近い分野だけでなく、スキルが活かせる隣接領域まで広げておくと想定外の好条件オファーに出会えることがあります。\u003c/p\u003e\n\u003ch3 id=\"4-公開ブロック設定を正しく使う\"\u003e4. 公開ブロック設定を正しく使う\u003c/h3\u003e\n\u003cp\u003e在職中の場合、現職の会社にdodaへの登録を知られたくないというケースが多いはずです。dodaには「現在の会社にプロフィールを公開しない」という公開ブロック設定があります。\u003c/p\u003e\n\u003cp\u003eこの設定を適切に行えば、現職の会社の採用担当者がdodaでスカウト検索をしても、自分のプロフィールが表示されなくなります。ただし、設定を間違えると意図しない形で公開されてしまう可能性もあるため、設定画面をしっかり確認してください。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e注意点\u003c/strong\u003e: 公開ブロックを設定しすぎると、スカウトそのものが届かなくなる場合があります。必要最小限のブロック設定にとどめ、できるだけ多くの企業にプロフィールを公開しておくのが返信率向上の観点では望ましいです。\u003c/p\u003e\n\u003ch3 id=\"5-返信の第一文を工夫する\"\u003e5. 返信の第一文を工夫する\u003c/h3\u003e\n\u003cp\u003eスカウトへの返信率（＝返信した後に選考が進む率）を上げるには、返信文の書き方も重要です。企業からのスカウトへの返信では、以下のポイントを押さえてください。\u003c/p\u003e","title":"dodaスカウトの使い方と評判｜返信率を上げるプロフィール設定術【2026年版】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nfreeeで経費を入力するとき、科目選びで手が止まる——そんな経験はありませんか？ 個人事業主やフリーランスとして働き始めると、避けて通れないのが確定申告です。そのなかで多くの人が最初につまずくのが勘定科目（経費科目）の選択です。\n「このコーヒー代は接待交際費？会議費？」「サブスクリプションは通信費で合ってる？」「PCを買ったけど、消耗品費と減価償却費のどっちに入れればいいの？」——こうした疑問は、毎年確定申告シーズンになると検索が急増するテーマです。\n間違った科目で申告してしまうと、税務調査の際に指摘を受けるリスクがあるだけでなく、経費として認められなくなるケースもあります。一方で、正しく仕訳できれば節税効果を最大限に引き出せます。\nそこで本記事では、freee会計を使っている個人事業主・フリーランス向けに、よく使う経費科目TOP20を表形式で整理し、迷いやすいパターンの正解を解説します。\nfreeeは銀行口座やクレジットカードと連携することで取引を自動取込し、AIが科目を推定してくれる機能を備えています。科目の知識とfreeeの自動仕訳機能を組み合わせれば、確定申告の手間を大幅に削減できます。\n関連記事\nfreee青色申告で65万円控除を受ける方法【完全ガイド】 AIを使ったフリーランスの経費仕訳術 freeeで使える経費科目一覧（主要20科目） 以下は個人事業主・フリーランスがfreee会計で頻繁に使う経費科目の一覧です。国税庁の一般的な区分に基づいて整理しています。\n科目名 具体例 注意点 旅費交通費 電車・バス・タクシー代、出張時の宿泊費、航空券 私用との按分が必要な場合は業務割合で計上。領収書またはICカード明細を保管。 通信費 携帯電話代、固定電話代、インターネット回線料、サーバー代、ドメイン費用 自宅兼用の場合は業務使用割合で按分。お名前.comなどでのドメイン取得費も該当。 消耗品費 文房具、コピー用紙、インクカートリッジ、10万円未満のPC周辺機器 10万円未満の物品が対象。10万円以上は減価償却費または一括償却資産として処理。 接待交際費 取引先との飲食代、慶弔費、お歳暮・お中元 事業に関係する相手との交際に限る。完全に私的な飲食は不可。 地代家賃 事務所の家賃、月極駐車場代（事務所付属）、自宅兼事務所の家賃按分分 自宅兼事務所の場合は事業使用面積割合で按分計算が必要。 水道光熱費 電気代、ガス代、水道代（自宅兼事務所の按分分） 電力会社の明細をもとに業務時間・面積割合で按分。完全な事務所なら全額計上可。 新聞図書費 業務関連の書籍・雑誌、有料ニュースサービス、業界紙 業務に直接関連するものに限る。完全に私的な趣味書籍は不可。 広告宣伝費 Web広告費（Google広告、SNS広告）、名刺印刷費、ポスター・チラシ制作費 自社の事業を宣伝するためのコスト全般。 外注費 業務委託費、フリーランスへの発注費、デザイン・コーディング外注費 源泉徴収が必要な場合がある（デザイナー・ライター等への支払い）。支払調書の発行を検討。 荷造運賃 宅配便・郵送料、梱包材費 商品や書類等の発送に関わるコスト。旅費交通費との混同に注意。 支払手数料 銀行振込手数料、クラウドソーシングのプラットフォーム手数料、決済手数料 Lancersやクラウドワークスの手数料も該当。 租税公課 印紙税、事業税、固定資産税（事業用部分）、自動車税（事業用） 所得税・住民税は経費不可。事業に直接関係する税金のみ計上可能。 減価償却費 10万円以上のPC・カメラ・機材、事業用車両、ソフトウェア 耐用年数にわたって費用を分割計上。freeeが自動計算機能を提供。 修繕費 事業用機器の修理代、事務所の修繕費 資産の価値を高める「改良」は資本的支出として減価償却対象になる場合がある。 福利厚生費 従業員への慶弔費、健康診断費（従業員分） 個人事業主本人の分は計上不可。専従者や従業員がいる場合に適用。 諸会費 コワーキングスペースの月額会費、業界団体・商工会議所の会費 事業に関連する団体の会費に限る。社交クラブ等は原則不可。 研修費 セミナー参加費、オンライン講座・スクール費用、資格取得のための講習費 現在の事業に直結するスキルアップが対象。全く新しい事業のための資格取得は認められにくい。 車両費 ガソリン代、駐車場代（事業利用分）、高速道路料金、車検代 私用兼用の場合は業務走行距離割合で按分。走行記録（ドライブログ）を保管すると安心。 雑費 少額で他の科目に当てはまらないもの（クリーニング代等） 多用しすぎると税務調査で指摘されやすい。上記いずれかに当てはまるものは適切な科目を使うこと。 リース料 複合機・コピー機のリース代、ソフトウェアライセンスのリース契約 所有権が移転しないリース契約が対象。実質的な割賦販売は減価償却対象になる場合あり。 迷いやすい仕訳パターン5選 1. 自宅兼事務所の家賃・光熱費の按分方法 フリーランスや在宅ワーカーの多くが悩む「自宅兼事務所」問題。ポイントは合理的な按分基準を設けることです。\n家賃の按分は、事業で使用している部屋の面積を自宅全体の面積で割る方法が一般的です。\n例：自宅全体60㎡、仕事部屋10㎡の場合 按分割合 = 10 ÷ 60 ≒ 16.7% 月額家賃10万円であれば、1万6,700円を地代家賃として計上可能 **光熱費（電気代）**は、面積割合に加えて業務時間割合をかけ合わせる方法が合理的とされています。\n例：面積割合16.7%、1日の業務時間8時間（24時間中）の場合 按分割合 = 16.7% × (8 ÷ 24) ≒ 5.6% freeeでは按分登録機能を使うと、毎月の入力を自動化できます。\n2. PCを買ったら消耗品費？減価償却？ PCやカメラなどの機器購入は、金額によって処理方法が異なります（青色申告の場合）。\n購入金額 処理方法 備考 10万円未満 消耗品費として全額即時計上 10万円以上30万円未満 少額減価償却資産（青色申告限定）として全額即時計上 年間合計300万円まで 30万円以上 通常の減価償却 耐用年数に応じて分割計上 白色申告の場合は10万円以上から減価償却が必要になるため、青色申告との違いに注意しましょう。freeeは減価償却スケジュールを自動で計算・管理してくれます。\n3. サブスク（Adobe、ChatGPT Plus）はどの科目？ クリエイター・ライター・エンジニアが必須ツールとして契約することの多い月額サブスクリプションサービス。科目の選択は以下を参考にしてください。\nサービス例 推奨科目 理由 Adobe Creative Cloud 支払手数料 または 通信費 ソフトウェアのサービス利用料として ChatGPT Plus / Claude Pro 支払手数料 または 通信費 AIツールのサービス利用料として Notion / Slack（有料プラン） 支払手数料 または 通信費 業務用クラウドサービス Dropbox / Google Workspace 通信費 クラウドストレージ・通信インフラとして いずれも業務専用で使用している場合は全額計上できます。私用も兼ねている場合は業務利用割合で按分するのが原則です。freeeでは科目を一度設定すると、次回から同じ取引に同じ科目を自動提案してくれます。\n4. 事業用クレジットカードの年会費 クレジットカードの年会費は、支払手数料として計上するのが一般的です。ただし、完全な事業用カードであれば全額計上できますが、プライベート兼用の場合は按分が必要です。\nなお、事業用に別途クレジットカードを用意しておくと、freeeとの連携時に経費とプライベート支出が明確に分離でき、仕訳の手間が大幅に減ります（詳細は後述）。\n5. 取引先との食事は接待交際費？会議費？ 似ているようで税務上の扱いが異なるケースがあります。\n接待交際費：取引先との関係強化を目的とした飲食・贈答。参加者の名前・会社名・目的をメモしておくと安心。\n会議費：打ち合わせや商談の場での飲食代（通常、1人あたりの単価が高くないもの）。会議の内容がわかるメモを残しておくことを推奨。\n明確な区分基準があるわけではありませんが、高額な飲食代や娯楽を伴う場合は接待交際費、シンプルな打ち合わせ時のコーヒー代・軽食代は会議費とするのが実務上一般的です。税理士によっても見解が異なるため、迷う場合は専門家に確認しましょう。\nfreeeの自動仕訳機能の活用法 freee会計の最大の強みは、金融機関・クレジットカードとの連携による自動取込と、AIを活用した科目推定機能です。\n銀行口座・クレカ連携で取引を自動取込 freeeは国内の主要銀行・証券・クレジットカード会社と連携しています。一度連携を設定すれば、毎月の取引明細が自動的にfreeeに取り込まれます。手入力による入力漏れや転記ミスを防ぐことができます。\nAIによる科目の自動推定 取込まれた取引に対して、freeeのAIが過去の入力履歴や取引内容を分析して勘定科目を自動推定します。たとえば「Amazon」からの購入は「消耗品費」、「JR東日本」は「旅費交通費」といった形で提案されます。\n最初の数ヶ月は確認・修正が必要ですが、修正内容をシステムが学習するため、使い続けるほど精度が向上します。\n学習機能でルーティン作業をゼロに 同じ取引先や支払い内容については、一度正しい科目を設定すると次回から自動適用されるよう学習されます。毎月発生するサーバー代やサブスクリプション費用などは、設定後は確認のクリックだけで完了します。\n確定申告書類の自動作成 仕訳が完了すれば、freeeが確定申告書（青色申告決算書・確定申告書B）を自動で作成します。e-Taxへの電子申告にも対応しており、税務署に足を運ぶ手間もありません。\n事業用クレカでfreeeとの連携をもっと楽に 経費管理を劇的に楽にするもう一つのポイントが、事業専用のクレジットカードを持つことです。\nプライベート用カードと事業用カードを混在させると、毎月カード明細を見ながら「これは経費か否か」を仕分ける作業が発生します。事業用カードを1枚用意し、事業関連の支出はすべてそのカードに集約するだけで、freeeへの取込時にほぼ全件が経費候補として上がってきます。\n楽天カードは年会費無料で還元率1%と高く、freeeとの明細連携にも対応しています。事業用として1枚持っておくと、ポイントも貯まりつつ経費管理も効率化できる一石二鳥の選択肢です。\n楽天カードの詳細・申込はこちら（アフィリエイトリンク）\nまた、通信費の一例として触れたドメイン費用については、お名前.comなどのドメイン登録サービスでの支払いは「通信費」として計上できます。事業用サイトやポートフォリオサイトのドメイン維持費も、freeeに連携しているカードで支払えばスムーズに経費処理できます。\nお名前.comの詳細はこちら（アフィリエイトリンク）\nまとめ：freeeで経費科目の悩みをなくそう 本記事では、freee会計でよく使う経費科目20種類の一覧と、迷いやすい仕訳パターン5選を解説しました。\nポイントをまとめると以下のとおりです。\n勘定科目は国税庁の一般的な区分に基づき、事業との関連性を常に意識して選ぶ 自宅兼事務所・私用兼用の費用は合理的な割合で按分し、その根拠を記録しておく PCなどの高額機器は購入金額によって消耗品費か減価償却かが変わる（青色申告の場合は30万円未満なら即時償却可能） freeeの自動仕訳・学習機能を活用すれば、毎月の経費入力は大幅に効率化できる 事業用クレカをfreeeと連携させると、経費の取込・仕訳がほぼ自動化できる 確定申告の全体的な流れや青色申告65万円控除の取り方については、freee青色申告で65万円控除を受ける方法 で詳しく解説しています。また、AIツールを活用した経費仕訳の効率化についてはAIを使ったフリーランスの経費仕訳術 もあわせてご覧ください。\n科目の迷いをなくして、確定申告を確実かつ楽に終わらせるために、まずはfreee会計の無料トライアルから始めてみましょう。\nfreee会計の詳細はこちら（30日間無料トライアル実施中）（アフィリエイトリンク）\n※本記事の内容は2026年5月時点の情報に基づいています。税法改正や各サービスの仕様変更により内容が変わる場合があります。個別の税務判断については、税理士等の専門家にご相談ください。\n関連ツール 副業の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター ※本記事にはアフィリエイト広告が含まれています。\nあわせて読みたい 副業フリーランスがfreeeで青色申告65万控除を最速で取る方法 freeeとマネーフォワードどっちが副業向き？実際の費用と機能を徹底比較 フリーランス確定申告 AIで経費仕訳を自動化する具体的手順 ","permalink":"https://productivity-works.com/ja/posts/freee-keihi-kamoku-ichiran-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"freeeで経費を入力するとき科目選びで手が止まるそんな経験はありませんか\"\u003efreeeで経費を入力するとき、科目選びで手が止まる——そんな経験はありませんか？\u003c/h2\u003e\n\u003cp\u003e個人事業主やフリーランスとして働き始めると、避けて通れないのが確定申告です。そのなかで多くの人が最初につまずくのが\u003cstrong\u003e勘定科目（経費科目）の選択\u003c/strong\u003eです。\u003c/p\u003e\n\u003cp\u003e「このコーヒー代は接待交際費？会議費？」「サブスクリプションは通信費で合ってる？」「PCを買ったけど、消耗品費と減価償却費のどっちに入れればいいの？」——こうした疑問は、毎年確定申告シーズンになると検索が急増するテーマです。\u003c/p\u003e\n\u003cp\u003e間違った科目で申告してしまうと、税務調査の際に指摘を受けるリスクがあるだけでなく、経費として認められなくなるケースもあります。一方で、正しく仕訳できれば節税効果を最大限に引き出せます。\u003c/p\u003e\n\u003cp\u003eそこで本記事では、\u003cstrong\u003efreee会計\u003c/strong\u003eを使っている個人事業主・フリーランス向けに、よく使う経費科目TOP20を表形式で整理し、迷いやすいパターンの正解を解説します。\u003c/p\u003e\n\u003cp\u003efreeeは銀行口座やクレジットカードと連携することで取引を自動取込し、AIが科目を推定してくれる機能を備えています。科目の知識とfreeeの自動仕訳機能を組み合わせれば、確定申告の手間を大幅に削減できます。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e関連記事\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"../freee-aoiro-shinkoku-65man/\"\u003efreee青色申告で65万円控除を受ける方法【完全ガイド】\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"../freelance-kakuteishinkoku-ai-keihi-shiwake/\"\u003eAIを使ったフリーランスの経費仕訳術\u003c/a\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"freeeで使える経費科目一覧主要20科目\"\u003efreeeで使える経費科目一覧（主要20科目）\u003c/h2\u003e\n\u003cp\u003e以下は個人事業主・フリーランスがfreee会計で頻繁に使う経費科目の一覧です。国税庁の一般的な区分に基づいて整理しています。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e科目名\u003c/th\u003e\n          \u003cth\u003e具体例\u003c/th\u003e\n          \u003cth\u003e注意点\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e旅費交通費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e電車・バス・タクシー代、出張時の宿泊費、航空券\u003c/td\u003e\n          \u003ctd\u003e私用との按分が必要な場合は業務割合で計上。領収書またはICカード明細を保管。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e通信費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e携帯電話代、固定電話代、インターネット回線料、サーバー代、ドメイン費用\u003c/td\u003e\n          \u003ctd\u003e自宅兼用の場合は業務使用割合で按分。お名前.comなどでのドメイン取得費も該当。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e消耗品費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e文房具、コピー用紙、インクカートリッジ、10万円未満のPC周辺機器\u003c/td\u003e\n          \u003ctd\u003e10万円未満の物品が対象。10万円以上は減価償却費または一括償却資産として処理。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e接待交際費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e取引先との飲食代、慶弔費、お歳暮・お中元\u003c/td\u003e\n          \u003ctd\u003e事業に関係する相手との交際に限る。完全に私的な飲食は不可。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e地代家賃\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e事務所の家賃、月極駐車場代（事務所付属）、自宅兼事務所の家賃按分分\u003c/td\u003e\n          \u003ctd\u003e自宅兼事務所の場合は事業使用面積割合で按分計算が必要。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e水道光熱費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e電気代、ガス代、水道代（自宅兼事務所の按分分）\u003c/td\u003e\n          \u003ctd\u003e電力会社の明細をもとに業務時間・面積割合で按分。完全な事務所なら全額計上可。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e新聞図書費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e業務関連の書籍・雑誌、有料ニュースサービス、業界紙\u003c/td\u003e\n          \u003ctd\u003e業務に直接関連するものに限る。完全に私的な趣味書籍は不可。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e広告宣伝費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eWeb広告費（Google広告、SNS広告）、名刺印刷費、ポスター・チラシ制作費\u003c/td\u003e\n          \u003ctd\u003e自社の事業を宣伝するためのコスト全般。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e外注費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e業務委託費、フリーランスへの発注費、デザイン・コーディング外注費\u003c/td\u003e\n          \u003ctd\u003e源泉徴収が必要な場合がある（デザイナー・ライター等への支払い）。支払調書の発行を検討。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e荷造運賃\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e宅配便・郵送料、梱包材費\u003c/td\u003e\n          \u003ctd\u003e商品や書類等の発送に関わるコスト。旅費交通費との混同に注意。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e支払手数料\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e銀行振込手数料、クラウドソーシングのプラットフォーム手数料、決済手数料\u003c/td\u003e\n          \u003ctd\u003eLancersやクラウドワークスの手数料も該当。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e租税公課\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e印紙税、事業税、固定資産税（事業用部分）、自動車税（事業用）\u003c/td\u003e\n          \u003ctd\u003e所得税・住民税は経費不可。事業に直接関係する税金のみ計上可能。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e減価償却費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e10万円以上のPC・カメラ・機材、事業用車両、ソフトウェア\u003c/td\u003e\n          \u003ctd\u003e耐用年数にわたって費用を分割計上。freeeが自動計算機能を提供。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e修繕費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e事業用機器の修理代、事務所の修繕費\u003c/td\u003e\n          \u003ctd\u003e資産の価値を高める「改良」は資本的支出として減価償却対象になる場合がある。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e福利厚生費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e従業員への慶弔費、健康診断費（従業員分）\u003c/td\u003e\n          \u003ctd\u003e個人事業主本人の分は計上不可。専従者や従業員がいる場合に適用。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e諸会費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eコワーキングスペースの月額会費、業界団体・商工会議所の会費\u003c/td\u003e\n          \u003ctd\u003e事業に関連する団体の会費に限る。社交クラブ等は原則不可。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e研修費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eセミナー参加費、オンライン講座・スクール費用、資格取得のための講習費\u003c/td\u003e\n          \u003ctd\u003e現在の事業に直結するスキルアップが対象。全く新しい事業のための資格取得は認められにくい。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e車両費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eガソリン代、駐車場代（事業利用分）、高速道路料金、車検代\u003c/td\u003e\n          \u003ctd\u003e私用兼用の場合は業務走行距離割合で按分。走行記録（ドライブログ）を保管すると安心。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e雑費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e少額で他の科目に当てはまらないもの（クリーニング代等）\u003c/td\u003e\n          \u003ctd\u003e多用しすぎると税務調査で指摘されやすい。上記いずれかに当てはまるものは適切な科目を使うこと。\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eリース料\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e複合機・コピー機のリース代、ソフトウェアライセンスのリース契約\u003c/td\u003e\n          \u003ctd\u003e所有権が移転しないリース契約が対象。実質的な割賦販売は減価償却対象になる場合あり。\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"迷いやすい仕訳パターン5選\"\u003e迷いやすい仕訳パターン5選\u003c/h2\u003e\n\u003ch3 id=\"1-自宅兼事務所の家賃光熱費の按分方法\"\u003e1. 自宅兼事務所の家賃・光熱費の按分方法\u003c/h3\u003e\n\u003cp\u003eフリーランスや在宅ワーカーの多くが悩む「自宅兼事務所」問題。ポイントは\u003cstrong\u003e合理的な按分基準\u003c/strong\u003eを設けることです。\u003c/p\u003e","title":"freeeの経費科目一覧｜個人事業主・フリーランスが迷わない仕訳ガイド【2026年版】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nはじめに：iDeCoで「払う税金」を減らせる理由 老後のために積み立てながら、今の税負担もしっかり減らせる――そんな制度が iDeCo（個人型確定拠出年金） です。「名前は聞いたことがあるけれど、実際いくら得するのかよくわからない」という方は少なくありません。\n本記事では、年収300万円・500万円・700万円のモデルケース別に節税額を具体的に計算し、iDeCoを始める価値があるかどうかを判断できるよう解説します。さらに楽天証券でのおすすめファンドと口座開設の手順も紹介しますので、最後まで読んで「今日から行動」できる状態を目指してください。\n1. iDeCoの節税の仕組み：所得控除の基本 掛金が「全額」所得控除になる iDeCoの最大の特徴は、毎月の掛金が全額「小規模企業共済等掛金控除」として所得控除される点です。所得控除とは、課税対象の所得から差し引ける金額のこと。差し引かれた分だけ税率をかける元が小さくなるため、所得税と住民税の両方が減ります。\n計算式はシンプルです。\n年間節税額 = iDeCo年間掛金 × (所得税率 + 復興特別所得税 + 住民税率) 所得税率は所得に応じて 5〜45%（超過累進課税）、復興特別所得税は所得税額の 2.1%、住民税は一律 10% です。つまり年収が高いほど適用税率が高くなり、節税額も大きくなるという構造になっています。\n運用益も非課税 通常、投資信託や預金の利息・運用益には約20.315%の税金がかかります。iDeCoの口座内で得た運用益はこれが非課税。長期で複利が積み上がるほど、この恩恵は大きくなります。\n受取時の優遇 60歳以降に受け取る際も優遇があります。一括受取なら退職所得控除、年金形式なら公的年金等控除が適用されるため、一定額まで非課税または大幅な控除が受けられます。\n注意点： 60歳まで原則として引き出せません。生活資金や緊急資金とは分けて考える必要があります。\n2. 年収別シミュレーション：実際いくら節税できるか ここでは会社員（企業型DCなし）を想定し、月額掛金23,000円（年間276,000円） でシミュレーションします。\n前提条件 項目 数値 掛金（月額） 23,000円 掛金（年間） 276,000円 住民税率 10%（一律） 復興特別所得税 所得税×2.1% ケース1：年収300万円 年収300万円の場合、給与所得控除後の所得と各種基礎控除等を差し引くと、課税所得はおよそ100〜130万円程度になります。この水準の所得税率は 5% です。\n税目 税率 年間節税額 所得税 5% 13,800円 復興特別所得税 5%×2.1% 約290円 住民税 10% 27,600円 合計 — 約41,690円 年間約4万円強の節税効果。10年続ければ累計40万円以上が手元に残る計算です。掛金総額276万円に対して十分な節税メリットがあります。\nケース2：年収500万円 年収500万円では課税所得がおよそ240〜270万円前後となり、所得税率は 10% に上がります。\n税目 税率 年間節税額 所得税 10% 27,600円 復興特別所得税 10%×2.1% 約580円 住民税 10% 27,600円 合計 — 約55,780円 年間約5.6万円の節税。月換算で約4,600円分の税負担が消えるイメージです。10年で累計55万円超、20年では100万円を超える節税効果になります。\nケース3：年収700万円 年収700万円では課税所得が400万円を超えることも多く、所得税率は 20% 前後になるケースが一般的です。\n税目 税率 年間節税額 所得税 20% 55,200円 復興特別所得税 20%×2.1% 約1,159円 住民税 10% 27,600円 合計 — 約83,959円 年間約8.4万円の節税。月額掛金23,000円のうち実質的な手出しは 16,500円程度になる計算で、非常に高い費用対効果です。\n年収別節税額まとめ 年収 所得税率 年間節税額 20年累計節税額 300万円 5% 約41,690円 約83万円 500万円 10% 約55,780円 約112万円 700万円 20% 約83,959円 約168万円 ※掛金が毎年一定・税率変動なしの単純試算。実際は課税所得・家族構成等で異なります。\nより精度の高い試算は、こちらのシミュレーターをご活用ください。\niDeCoシミュレーター — 掛金・年収・運用期間を入力するだけで節税額と将来資産額を自動計算 手取り計算ツール — iDeCo加入後の毎月の手取りの変化を確認できます 3. 掛金上限と職業別の注意点 iDeCoの掛金上限は職業・加入状況によって異なります。上限いっぱいまで拠出するほど節税効果は大きくなりますが、無理のない範囲で設定することが重要です。\n職業別の月額掛金上限 対象者 月額上限 年額上限 自営業・フリーランス（国民年金第1号） 68,000円 816,000円 会社員（企業型DCなし） 23,000円 276,000円 会社員（企業型DCあり） 最大20,000円※ 240,000円※ 公務員 12,000円 144,000円 専業主婦（夫）・第3号被保険者 23,000円 276,000円 ※2024年12月の制度改正により条件が変更されています。加入前に勤務先の制度を確認してください。\n自営業・フリーランスが特に有利な理由 自営業者は月68,000円まで拠出でき、かつ厚生年金がない分、老後資金の自助努力が必要です。年収500万円のフリーランスが月68,000円拠出した場合、年間節税額は16万円超になることもあります。さらに国民年金基金との併用はできないため、iDeCoに集中させる戦略が有効です。\n会社員が注意すべきポイント 企業型DCとの併用ルール：2022年10月の改正で条件緩和されましたが、企業型DCの掛金との合計額に上限があります。人事部に必ず確認しましょう。 年末調整での申告：会社員はiDeCoの掛金を年末調整で申告できます（国民年金基金連合会から送付される証明書が必要）。確定申告は不要です。 転職・退職時の手続き：転職先に企業型DCがある場合、iDeCoからの移換手続きが必要です。放置するとリスクのある状態になるため注意してください。 受取時の注意点：出口課税を忘れずに 節税効果が高い反面、受取時には課税が発生します。\n一時金（一括）受取：退職所得控除が適用。勤続年数が長いほど控除額が大きい。 年金形式受取：公的年金等控除が適用。他の公的年金と合算して計算される。 併用受取：一部一時金＋残りを年金として受け取ることも可能。 出口を考慮した上で積立戦略を設計したい場合は、NISAシミュレーター と合わせて運用全体のバランスを確認することをおすすめします。\n4. iDeCoを楽天証券で始める手順とおすすめファンド 楽天証券をおすすめする理由 iDeCoの口座は金融機関ごとに特徴が異なりますが、楽天証券は以下の点で評価されています。\n口座管理手数料が業界最低水準：国民年金基金連合会・事務委託先金融機関への手数料（月171円）以外、楽天証券への手数料は無料 ファンドラインナップが豊富：低コストインデックスファンドを中心に32本以上 楽天ポイントとの連携：楽天経済圏を活用している方には使い勝手がよい アプリ・管理画面が使いやすい：残高確認・配分変更がスマホから簡単に操作可能 口座開設の手順 楽天証券のiDeCo申込ページにアクセス 加入資格の確認（年齢・国民年金加入状況） 申込書類の請求または電子申請（オンライン完結も可能） 事業主証明書の取得（会社員の場合は勤務先に記入依頼） 国民年金基金連合会への審査（1〜2か月程度かかる場合あります） 口座開設完了・初回掛金の引落開始 なお、iDeCoを始める前後で家計のコスト管理も重要です。会計ソフトのfreeeを使うと経費管理や確定申告の効率が大幅に上がります。\nfreeeで確定申告・経費管理を効率化する 楽天証券iDeCoのおすすめファンド（2026年時点） ファンド名 種別 信託報酬（目安） 特徴 楽天・全世界株式インデックス・ファンド 全世界株式 約0.2%以下 全世界分散・長期向き eMAXIS Slim 全世界株式（オール・カントリー） 全世界株式 約0.058% 超低コスト・人気No.1クラス eMAXIS Slim 米国株式（S\u0026amp;P500） 米国株式 約0.09% 米国集中・成長期待 たわらノーロード 先進国株式 先進国株式 約0.1% 日本除く先進国分散 三井住友・DCつみたてNISA・日本株インデックスファンド 国内株式 約0.17% 国内資産を加えたい方に 初心者には「eMAXIS Slim 全世界株式（オール・カントリー）」一本での積立が最もシンプルでコスト効率に優れた選択肢として多くのFPに推奨されています。\nまとめ：iDeCoは「始めた日が一番若い日」 iDeCoの節税メリットを改めて整理します。\n掛金が全額所得控除になり、所得税・住民税が年間4〜8万円以上削減できる 運用益が非課税で複利効果を最大化できる 受取時も退職所得控除・公的年金等控除の優遇がある 年収が高いほど節税効果は大きく、特に年収500万円以上から恩恵が顕著 唯一の制約である「60歳まで引き出せない」点さえ理解した上で加入すれば、老後資産形成と現役時代の節税を同時に実現できる制度です。\n具体的な試算はiDeCoシミュレーター で今すぐ確認し、楽天証券の申込ページから口座開設を進めてみてください。始めるタイミングが早いほど、節税額と運用益の両方が積み上がります。\n関連記事 iDeCo おすすめ証券会社ランキング【2026年最新版】手数料・商品数を徹底比較 NISA iDeCo どっちを先に始めるべき？優先順位を徹底解説【2026年最新版】 確定拠出年金 企業型（DC）と個人型（iDeCo）の違いを徹底比較【2026年版】 老後2000万円問題を自分で検証｜退職金なしの会社員がとるべき行動 新NISA始め方2026年版【初心者向け完全ガイド】口座開設から投資スタートまで 関連ツール・記事 ローンの返済額をシミュレーション → ローン計算ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール iDeCoシミュレーター — 年収・掛金・運用期間から節税額と将来資産を自動計算 NISAシミュレーター — iDeCoとNISAの併用効果を試算 手取り計算ツール — iDeCo加入後の毎月の手取り変化を確認 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター インフレによる購買力低下を計算 → インフレ計算ツール ","permalink":"https://productivity-works.com/ja/posts/ideco-tax-saving-simulation/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch2 id=\"はじめにidecoで払う税金を減らせる理由\"\u003eはじめに：iDeCoで「払う税金」を減らせる理由\u003c/h2\u003e\n\u003cp\u003e老後のために積み立てながら、今の税負担もしっかり減らせる――そんな制度が \u003cstrong\u003eiDeCo（個人型確定拠出年金）\u003c/strong\u003e です。「名前は聞いたことがあるけれど、実際いくら得するのかよくわからない」という方は少なくありません。\u003c/p\u003e\n\u003cp\u003e本記事では、\u003cstrong\u003e年収300万円・500万円・700万円のモデルケース別に節税額を具体的に計算\u003c/strong\u003eし、iDeCoを始める価値があるかどうかを判断できるよう解説します。さらに楽天証券でのおすすめファンドと口座開設の手順も紹介しますので、最後まで読んで「今日から行動」できる状態を目指してください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"1-idecoの節税の仕組み所得控除の基本\"\u003e1. iDeCoの節税の仕組み：所得控除の基本\u003c/h2\u003e\n\u003ch3 id=\"掛金が全額所得控除になる\"\u003e掛金が「全額」所得控除になる\u003c/h3\u003e\n\u003cp\u003eiDeCoの最大の特徴は、毎月の掛金が\u003cstrong\u003e全額「小規模企業共済等掛金控除」として所得控除\u003c/strong\u003eされる点です。所得控除とは、課税対象の所得から差し引ける金額のこと。差し引かれた分だけ税率をかける元が小さくなるため、所得税と住民税の両方が減ります。\u003c/p\u003e\n\u003cp\u003e計算式はシンプルです。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e年間節税額 = iDeCo年間掛金 × (所得税率 + 復興特別所得税 + 住民税率)\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e所得税率は所得に応じて \u003cstrong\u003e5〜45%（超過累進課税）\u003c/strong\u003e、復興特別所得税は所得税額の \u003cstrong\u003e2.1%\u003c/strong\u003e、住民税は一律 \u003cstrong\u003e10%\u003c/strong\u003e です。つまり年収が高いほど適用税率が高くなり、\u003cstrong\u003e節税額も大きくなる\u003c/strong\u003eという構造になっています。\u003c/p\u003e\n\u003ch3 id=\"運用益も非課税\"\u003e運用益も非課税\u003c/h3\u003e\n\u003cp\u003e通常、投資信託や預金の利息・運用益には約20.315%の税金がかかります。iDeCoの口座内で得た運用益はこれが\u003cstrong\u003e非課税\u003c/strong\u003e。長期で複利が積み上がるほど、この恩恵は大きくなります。\u003c/p\u003e\n\u003ch3 id=\"受取時の優遇\"\u003e受取時の優遇\u003c/h3\u003e\n\u003cp\u003e60歳以降に受け取る際も優遇があります。一括受取なら\u003cstrong\u003e退職所得控除\u003c/strong\u003e、年金形式なら\u003cstrong\u003e公的年金等控除\u003c/strong\u003eが適用されるため、一定額まで非課税または大幅な控除が受けられます。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e注意点：\u003c/strong\u003e 60歳まで原則として引き出せません。生活資金や緊急資金とは分けて考える必要があります。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"2-年収別シミュレーション実際いくら節税できるか\"\u003e2. 年収別シミュレーション：実際いくら節税できるか\u003c/h2\u003e\n\u003cp\u003eここでは会社員（企業型DCなし）を想定し、\u003cstrong\u003e月額掛金23,000円（年間276,000円）\u003c/strong\u003e でシミュレーションします。\u003c/p\u003e\n\u003ch3 id=\"前提条件\"\u003e前提条件\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e数値\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e掛金（月額）\u003c/td\u003e\n          \u003ctd\u003e23,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e掛金（年間）\u003c/td\u003e\n          \u003ctd\u003e276,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e住民税率\u003c/td\u003e\n          \u003ctd\u003e10%（一律）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e復興特別所得税\u003c/td\u003e\n          \u003ctd\u003e所得税×2.1%\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch3 id=\"ケース1年収300万円\"\u003eケース1：年収300万円\u003c/h3\u003e\n\u003cp\u003e年収300万円の場合、給与所得控除後の所得と各種基礎控除等を差し引くと、\u003cstrong\u003e課税所得はおよそ100〜130万円程度\u003c/strong\u003eになります。この水準の所得税率は \u003cstrong\u003e5%\u003c/strong\u003e です。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e税目\u003c/th\u003e\n          \u003cth\u003e税率\u003c/th\u003e\n          \u003cth\u003e年間節税額\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e所得税\u003c/td\u003e\n          \u003ctd\u003e5%\u003c/td\u003e\n          \u003ctd\u003e13,800円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e復興特別所得税\u003c/td\u003e\n          \u003ctd\u003e5%×2.1%\u003c/td\u003e\n          \u003ctd\u003e約290円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e住民税\u003c/td\u003e\n          \u003ctd\u003e10%\u003c/td\u003e\n          \u003ctd\u003e27,600円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e合計\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e—\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e約41,690円\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e年間約\u003cstrong\u003e4万円強\u003c/strong\u003eの節税効果。10年続ければ累計40万円以上が手元に残る計算です。掛金総額276万円に対して十分な節税メリットがあります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"ケース2年収500万円\"\u003eケース2：年収500万円\u003c/h3\u003e\n\u003cp\u003e年収500万円では課税所得がおよそ240〜270万円前後となり、所得税率は \u003cstrong\u003e10%\u003c/strong\u003e に上がります。\u003c/p\u003e","title":"iDeCo節税シミュレーション｜年収別に実際いくら得するか計算"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「RENOSYの利回りって実際どうなの？」「評判が気になるけど信用していいの？」——不動産投資を検討している会社員の方から、こうした声をよく耳にします。\nRENOSYはテレビCMや電車広告でも見かける機会が増え、認知度は急上昇中です。一方で、「勧誘電話がしつこい」「利回りが思ったより低かった」といった声もネット上で散見されます。本記事では、データサイエンスの視点からRENOSYの利回りの実態と評判・口コミの傾向を冷静に分析し、あなたが正しい判断を下せるよう整理します。\n1. RENOSYとは何か — サービスの基本概要 RENOSYは、**株式会社GA technologies（東証グロース上場）**が運営する不動産投資プラットフォームです。「AIを活用した物件選定」と「ワンストップの投資体験」を売りにしており、購入から管理・売却まで一気通貫でサポートする点が特徴です。\n主な対象商品は東京都心の中古ワンルームマンションです。新築ではなく中古に絞っている理由は、新築プレミアムが剥落するリスクを避け、比較的安定したキャッシュフローを実現するためとされています。\n投資家向けのスマートフォンアプリが充実しており、月次収支の確認・確定申告用データのダウンロード・物件状況のレポートをアプリ上で一元管理できます。この「運用の手間を極限まで減らす」設計が、本業を持つ会社員からの支持を集めている理由の一つです。\nなお、RENOSYを検討する前に不動産投資全般の基礎を押さえたい方は、当サイトの姉妹記事「会社員が始めるRENOSY不動産投資入門 」もあわせてご覧ください。\n2. RENOSYの「利回り」を正しく読み解く 2-1. 表面利回りと実質利回りの違い 不動産投資における「利回り」には大きく2種類あります。この違いを理解しないまま数字だけ比較すると、大きな誤解を生む危険があります。\n指標 計算式 特徴 表面利回り（グロス） 年間家賃収入 ÷ 物件購入価格 × 100 コスト無視。広告で使われやすい 実質利回り（ネット） （年間家賃収入 − 年間コスト）÷（物件購入価格 + 取得費用）× 100 実態に近い収益性指標 「年間コスト」に含まれる主な費用は以下のとおりです。\n年間コストの内訳（目安） - 管理費・修繕積立金: 月1.5〜2.5万円程度 - 賃貸管理手数料: 家賃の5〜8% - 固定資産税・都市計画税: 年3〜8万円程度 - 火災保険料: 年0.5〜1万円程度 - 空室時の機会損失: 稼働率に依存 2-2. 東京都心中古ワンルームの利回り水準（市場データ） 東京都心の中古ワンルームマンション市場全体のデータ（国土交通省・不動産投資家向け業界レポート等を参考とした一般的な水準）では、おおむね以下の範囲が相場とされています。\n東京都心（山手線内側〜城南・城東主要駅徒歩10分以内） 表面利回り: 約 4.0〜5.5% 実質利回り: 約 2.0〜3.5%（費用・空室率を考慮後） 表面利回りと実質利回りの間に1.5〜2ポイント程度の乖離が生じるのは珍しくありません。「4%台の利回り」という広告を見て「実質4%もらえる」と解釈するのは危険です。\n2-3. RENOSYの利回り表示の見方 RENOSYの公式サイトでは、物件ごとに想定利回りが掲載されています。ただし、これは市場の一般的な計算方法に基づく表面利回りである点に注意が必要です。実際の手取りキャッシュフローは、管理コスト・ローン返済・税金を差し引いた後の数字になります。\nRENOSYが提供する無料のシミュレーションツールや担当者との面談では、ローン返済額・管理費・税金を加味した月次キャッシュフローのシミュレーションを確認できます。「表面利回り」だけでなく「月次キャッシュフロー」と「実質利回り」を必ず確認することが、正しい投資判断の第一歩です。\n筆者注: 本記事における利回り数値は、東京都心中古ワンルームマンション市場の一般的な水準を示したものです。RENOSYが提供する特定物件の利回りを保証・約束するものではありません。個別物件の数値はRENOSY担当者に直接確認してください。\n3. 評判・口コミの傾向を分析する SNS・口コミサイト・投資家向けフォーラムに投稿される一般的な評判を分析すると、ポジティブな声とネガティブな声の両方が存在します。以下は個別の口コミを引用するのではなく、複数の情報源から読み取れる傾向をまとめたものです。\n3-1. ポジティブな評価の傾向 AIによる物件選定への評価 独自のAIアルゴリズムによって「賃貸需要が高く、流動性のある物件」を絞り込む仕組みに対して、データドリブンな姿勢を評価する声があります。物件選定の根拠が可視化されている点は、投資初心者にとって安心感につながるようです。\n管理の手間の少なさ 本業を持つ会社員が「ほぼ何もしなくてよい」と感じるほど管理業務が委託できる点は、時間的コストを重視する層から高く評価されています。アプリによる収支管理も「確定申告が楽になった」という声につながっています。\n入居率の高さ RENOSYの公式発表データによれば、管理物件の入居率は99%超とされています（公式サイト記載の数値。詳細条件は公式サイトにてご確認ください）。空室リスクを最小化したい投資家にとって、この数値は重要な判断材料の一つです。\n3-2. ネガティブな評価の傾向 営業接触の頻度 無料セミナー参加後や資料請求後に、電話・メールでの営業接触が続くケースが報告されています。「断るのが大変だった」という声も散見されます。これはRENOSY固有の問題というより、不動産投資業界全般に共通する課題でもあります。初回接触前に「連絡頻度の希望」を明示しておくことが有効です。\n物件価格への疑問 「同エリアの類似物件と比較して割高に感じた」という声があります。ワンストップサービスには当然コストがかかるため、サービス対価として許容できるかどうかは個人の判断によります。複数社で物件価格を比較検討することをお勧めします。\n利回りと実感のギャップ 想定利回りを見て期待していたより、実際の手取りキャッシュフローが少ないと感じるケースがあります。前述のとおり、表面利回りと実質利回りの差を事前に理解していなかった場合に起きやすい誤解です。シミュレーション段階で実質利回りをしっかり確認することで、このギャップは事前に解消できます。\n4. RENOSYのメリット・デメリット比較 客観的な判断材料として、メリットとデメリットを整理します。\nメリット 項目 内容 ワンストップサービス 物件選定・購入・管理・売却まで一社完結。窓口が一つで手間が少ない AIによる物件分析 データドリブンな物件選定プロセス。感覚ではなく数値根拠がある 高入居率（公式発表） 入居率99%超（公式発表数値）。空室リスクが抑えられやすい 透明な管理手数料 月額管理手数料が明確で、隠れたコストが把握しやすい アプリ管理 収支・物件状況をスマホで一元管理。確定申告データの出力も可能 東証グロース上場企業 GA technologiesは上場企業。財務情報が公開されており透明性が高い デメリット 項目 内容 初期費用 物件購入にともなう諸費用（仲介手数料・ローン手数料等）が発生する 節税効果は限定的 高い節税効果を期待するなら年収800万円以上が目安。それ以下では効果が薄い場合も 転売時の流動性リスク 中古ワンルームは市況によって売却価格が変動。短期売却には向かない 営業接触が多い 情報提供後の連絡頻度が高い傾向。事前に希望を伝えることが重要 相場比較が必要 サービス対価込みの価格設定のため、他社・他物件との比較検討が推奨される 5. 不動産投資を始める前のリスク管理 5-1. 団信と既存生命保険の重複をチェックする 不動産投資ローンを組む際には、多くの場合**団体信用生命保険（団信）**への加入が条件となります。団信は「ローン残高=死亡保障」として機能するため、既存の生命保険との重複が生じるケースがあります。\nたとえば、すでに死亡保障3,000万円の終身保険に加入しており、さらに3,000万円の不動産ローン（団信付き）を組むと、合計6,000万円の死亡保障を持つことになります。遺族への必要保障額を超えた保険料を払い続けることは、資産形成の効率を下げます。\n不動産投資を始めるタイミングで、既存の保険を見直すことは合理的な判断です。 保険の見直しには、複数の保険会社の商品を横断的に比較できる無料相談サービスの活用がお勧めです。\n保険マンモス（無料保険相談）はこちら [CTA: URLはTBD] ファイナンシャルプランナーが不動産投資と保険の最適な組み合わせを無料でアドバイス。\n5-2. 空室リスクと金利上昇リスクへの備え 不動産投資の主なリスクは大きく2つです。\n空室リスク: 賃借人が退去し次の入居者が決まるまでの期間、家賃収入がゼロになります。6か月分程度の家賃相当の現金を緊急予備資金として確保しておくことが一般的に推奨されます。\n金利上昇リスク: 変動金利でローンを組んでいる場合、政策金利の上昇がローン返済額の増加に直結します。2024年以降、日銀の利上げ方針が続いており、変動金利の借り入れには金利上昇シナリオでのシミュレーションが必須です。固定金利オプションとのコスト比較もRENOSYの担当者に確認することをお勧めします。\n6. NISA・iDeCoとの資産配分戦略 不動産投資は有力な資産形成手段ですが、一つの資産クラスへの集中投資はリスクを高めます。資産全体のポートフォリオを設計する視点が重要です。\n資産クラス別の特性比較 資産クラス 期待リターン（目安） 流動性 税制メリット 東京都心中古ワンルーム 実質2〜3%+キャピタルゲイン 低（売却に数か月） 減価償却・ローン利息控除 つみたてNISA（インデックス） 長期平均4〜7%（過去実績参考値） 高（翌営業日換金可） 運用益非課税（年間上限あり） iDeCo（確定拠出年金） 運用次第 低（60歳まで原則引き出し不可） 掛金全額所得控除 不動産投資の「安定したインカムゲイン」とNISA・iDeCoの「長期成長・税制優遇」を組み合わせることで、リスク分散と税効率の両立が可能です。どちらを先に始めるべきかの判断軸については、当サイトの「NISAとiDeCoどっちを先に始める？ 」で詳しく解説しています。\nNISAでのインデックス積立投資を始めるなら、取扱銘柄数・コスト・使いやすさの面で定評のある楽天証券が選択肢の一つです。\n楽天証券でNISAを始める → 楽天証券公式サイト （アフィリエイトリンク） NISAとiDeCoを一つの口座で管理できる使い勝手の良さが特徴。\n7. まとめ — RENOSYはどんな人に向いているか 本記事の分析を踏まえ、RENOSYが向いている人・向いていない人を整理します。\nRENOSYが向いている人 本業が忙しく、不動産管理に時間をかけたくない会社員 不動産投資初心者で、ワンストップのサポートを求めている 年収600万円以上で、ローン審査と節税効果を期待できる 東京都心の物件で、比較的安定した賃貸需要を重視したい データに基づいた物件選定プロセスに信頼感を求める RENOSYが向いていない人 高利回り（5%以上）を求めている（都心中古ワンルームの特性上、難しい） 物件を自分で探し、コストを徹底的に削りたい自己管理派 短期間での売却益（キャピタルゲイン）を主目的としている 営業電話への対応を極力避けたい RENOSYの実質利回りは、東京都心中古ワンルーム市場全体と同様に2〜3%程度が現実的な水準です。この数字だけを見ると物足りなく感じるかもしれませんが、「管理の手間がほぼゼロ」「団信による保険効果」「ローンを活用したレバレッジ」「長期保有によるキャピタルゲイン期待」を総合的に評価すると、時間的コストを重視する会社員には合理的な選択肢になり得ます。\nただし、どんな投資にも元本保証はありません。まずは無料面談でシミュレーションを確認し、自分のライフプランと照らし合わせた上で判断することを強くお勧めします。\nRENOSYの無料面談はこちら [CTA: URLはTBD] 無料の個別相談で、あなたの収入・ライフプランに合わせたシミュレーションを確認できます。強引な勧誘なしで話を聞くだけでもOK。\nこの記事のまとめ（ポイント整理） チェックリスト: RENOSY検討前に確認すべき5つのこと 1. 表面利回りと実質利回りの差を理解した（1.5〜2ポイント乖離が一般的） 2. 月次キャッシュフローのシミュレーションを担当者に確認した 3. 既存の生命保険と団信の重複をチェックした 4. NISAやiDeCoと組み合わせた資産全体のポートフォリオを考えた 5. 無料面談で自分のライフプランに合った提案を受けた 関連ツール 年収から手取りを計算 → 手取り計算シミュレーター 積立投資の複利効果を試算 → 複利計算シミュレーター NISAの積立シミュレーション → NISAシミュレーター iDeCoの節税効果を計算 → iDeCoシミュレーター 住宅ローンの返済計画 → 住宅ローンシミュレーター 関連記事\n会社員が始めるRENOSY不動産投資入門 NISAとiDeCoどっちを先に始める？ ※本記事は2026年5月時点の情報をもとに執筆しています。不動産市場・金利動向・税制は変化するため、投資判断の際は最新情報と専門家への相談を併用してください。\n※本記事にはアフィリエイト広告が含まれています。記事内のリンクから商品・サービスを購入・申し込みいただいた場合、当サイトが報酬を受け取ることがあります。掲載内容は編集部の独立した判断に基づくものであり、アフィリエイト報酬による恣意的な推薦は行っておりません。\nあわせて読みたい 会社員が不動産投資を始めるならRENOSY？｜NISAやiDeCoとの使い分けガイド 老後2000万円問題を自分で検証｜退職金なしの会社員がとるべき行動 投資信託 おすすめ 初心者向け厳選ファンド完全比較【2026年最新版】 ","permalink":"https://productivity-works.com/ja/posts/renosy-rimawari-hyoban-kensho-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e「RENOSYの利回りって実際どうなの？」「評判が気になるけど信用していいの？」——不動産投資を検討している会社員の方から、こうした声をよく耳にします。\u003c/p\u003e\n\u003cp\u003eRENOSYはテレビCMや電車広告でも見かける機会が増え、認知度は急上昇中です。一方で、「勧誘電話がしつこい」「利回りが思ったより低かった」といった声もネット上で散見されます。本記事では、データサイエンスの視点から\u003cstrong\u003eRENOSYの利回りの実態\u003c/strong\u003eと\u003cstrong\u003e評判・口コミの傾向\u003c/strong\u003eを冷静に分析し、あなたが正しい判断を下せるよう整理します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"1-renosyとは何か--サービスの基本概要\"\u003e1. RENOSYとは何か — サービスの基本概要\u003c/h2\u003e\n\u003cp\u003eRENOSYは、**株式会社GA technologies（東証グロース上場）**が運営する不動産投資プラットフォームです。「AIを活用した物件選定」と「ワンストップの投資体験」を売りにしており、購入から管理・売却まで一気通貫でサポートする点が特徴です。\u003c/p\u003e\n\u003cp\u003e主な対象商品は\u003cstrong\u003e東京都心の中古ワンルームマンション\u003c/strong\u003eです。新築ではなく中古に絞っている理由は、新築プレミアムが剥落するリスクを避け、比較的安定したキャッシュフローを実現するためとされています。\u003c/p\u003e\n\u003cp\u003e投資家向けのスマートフォンアプリが充実しており、月次収支の確認・確定申告用データのダウンロード・物件状況のレポートをアプリ上で一元管理できます。この「運用の手間を極限まで減らす」設計が、本業を持つ会社員からの支持を集めている理由の一つです。\u003c/p\u003e\n\u003cp\u003eなお、RENOSYを検討する前に不動産投資全般の基礎を押さえたい方は、当サイトの姉妹記事「\u003ca href=\"../kaishain-fudousan-toushi-renosy\"\u003e会社員が始めるRENOSY不動産投資入門\u003c/a\u003e\n」もあわせてご覧ください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"2-renosyの利回りを正しく読み解く\"\u003e2. RENOSYの「利回り」を正しく読み解く\u003c/h2\u003e\n\u003ch3 id=\"2-1-表面利回りと実質利回りの違い\"\u003e2-1. 表面利回りと実質利回りの違い\u003c/h3\u003e\n\u003cp\u003e不動産投資における「利回り」には大きく2種類あります。この違いを理解しないまま数字だけ比較すると、大きな誤解を生む危険があります。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e指標\u003c/th\u003e\n          \u003cth\u003e計算式\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e表面利回り（グロス）\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e年間家賃収入 ÷ 物件購入価格 × 100\u003c/td\u003e\n          \u003ctd\u003eコスト無視。広告で使われやすい\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e実質利回り（ネット）\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e（年間家賃収入 − 年間コスト）÷（物件購入価格 + 取得費用）× 100\u003c/td\u003e\n          \u003ctd\u003e実態に近い収益性指標\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e「年間コスト」に含まれる主な費用は以下のとおりです。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e年間コストの内訳（目安）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- 管理費・修繕積立金: 月1.5〜2.5万円程度\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- 賃貸管理手数料: 家賃の5〜8%\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- 固定資産税・都市計画税: 年3〜8万円程度\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- 火災保険料: 年0.5〜1万円程度\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- 空室時の機会損失: 稼働率に依存\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"2-2-東京都心中古ワンルームの利回り水準市場データ\"\u003e2-2. 東京都心中古ワンルームの利回り水準（市場データ）\u003c/h3\u003e\n\u003cp\u003e東京都心の中古ワンルームマンション市場全体のデータ（国土交通省・不動産投資家向け業界レポート等を参考とした一般的な水準）では、おおむね以下の範囲が相場とされています。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e東京都心（山手線内側〜城南・城東主要駅徒歩10分以内）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  表面利回り: 約 4.0〜5.5%\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  実質利回り: 約 2.0〜3.5%（費用・空室率を考慮後）\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e表面利回りと実質利回りの間に\u003cstrong\u003e1.5〜2ポイント程度の乖離\u003c/strong\u003eが生じるのは珍しくありません。「4%台の利回り」という広告を見て「実質4%もらえる」と解釈するのは危険です。\u003c/p\u003e\n\u003ch3 id=\"2-3-renosyの利回り表示の見方\"\u003e2-3. RENOSYの利回り表示の見方\u003c/h3\u003e\n\u003cp\u003eRENOSYの公式サイトでは、物件ごとに想定利回りが掲載されています。ただし、これは\u003cstrong\u003e市場の一般的な計算方法に基づく表面利回り\u003c/strong\u003eである点に注意が必要です。実際の手取りキャッシュフローは、管理コスト・ローン返済・税金を差し引いた後の数字になります。\u003c/p\u003e\n\u003cp\u003eRENOSYが提供する無料のシミュレーションツールや担当者との面談では、ローン返済額・管理費・税金を加味した月次キャッシュフローのシミュレーションを確認できます。\u003cstrong\u003e「表面利回り」だけでなく「月次キャッシュフロー」と「実質利回り」を必ず確認する\u003c/strong\u003eことが、正しい投資判断の第一歩です。\u003c/p\u003e","title":"RENOSYの利回りは本当？｜評判・口コミを徹底検証【2026年版データ分析】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n転職活動を進めているあなたに、まず一つ聞きたい。\n「年収500万円のオファーを受けたとき、毎月の手取りがいくらか、すぐに計算できますか？」\nこの問いに即答できない人は、年収交渉で損をしている可能性が高い。年収100万円アップを実現している人たちは、総支給額ではなく手取りベースで条件を比較し、住民税や社会保険の変動まで織り込んだうえで交渉テーブルに座っている。\nこの記事では、転職における年収交渉の実践的なノウハウと、見落としがちな税金・社会保険の落とし穴を徹底的に解説する。\n1. 年収交渉で失敗する人の共通パターン パターン1：現年収を「盛る」 転職活動で年収を聞かれると、つい現年収を少し多めに申告したくなる人がいる。しかし、採用担当者は源泉徴収票や雇用保険の記録で確認することができる。虚偽申告が発覚した場合、内定取り消しや入社後の信頼失墜につながる。\n正直に申告したうえで「市場価値として自分はこの水準が妥当だと考える」と根拠を示す交渉のほうが、長期的に有効だ。\nパターン2：オファー初日に即答する 「いいオファーをもらったら早く返事をしなければ」という焦りは禁物だ。正式オファーを受けてから回答するまでの期間（通常3〜5営業日）は、比較検討と条件交渉のための重要な時間だ。\nこの期間を使って、以下を必ず確認しよう。\n基本給と固定残業代の内訳 賞与の支給基準（業績連動か固定か） 昇給の頻度と実績 試用期間中の給与設定 パターン3：年収だけを見て手取りを計算しない これが最大の失敗パターンだ。\nたとえば現職が年収400万円、転職先が年収480万円だとしても、社会保険料の等級変更や前職の住民税の特別徴収切替によっては、転職直後の手取りが一時的に減ることがある。\n「年収は上がったのに生活が苦しい」と感じる転職者の多くは、このギャップを事前に把握していなかった人たちだ。\nパターン4：交渉を「一度しかできない」と思い込む オファー提示後に「少し高めに希望を伝えるのは失礼では」と遠慮する人は多い。しかし、企業側はある程度の交渉余地を見込んでオファーを出していることがほとんどだ。\n特に、エージェント経由の転職であれば、エージェントが間に入ってくれるため心理的ハードルが大幅に下がる。後述するdodaエージェントの活用もここで効いてくる。\n2. オファー金額から手取りを逆算する方法 なぜ「額面年収」だけで判断してはいけないか 年収600万円と言っても、実際に毎月の口座に振り込まれる手取り額は大きく異なる。主な控除項目を整理すると以下のとおりだ。\n控除項目 概算（年収600万円・東京・40歳の場合） 健康保険料 約32万円／年 厚生年金保険料 約55万円／年 雇用保険料 約3万円／年 所得税 約25万円／年 住民税 約33万円／年 合計控除 約148万円／年 手取り 約452万円／年（月約37.7万円） 額面600万円に対して手取りは約75%。この差を知らずに「年収アップ」を喜んでいると、生活設計が狂う。\n年収別 手取り額の目安（東京・会社員・独身） 年収300万円\n控除63万 手取り約237万円 年収400万円 控除96万 手取り約304万円\n年収500万円 手取り約368万円 控除132万\n年収700万円 手取り約490万円（70%）\n手取り額（概算） 社保・税金（控除） ※東京都在住・独身・40歳未満の目安。扶養家族・年齢・勤務地により異なります。 年収が上がるほど控除率も上昇 → 手取りベースで比較することが重要 手取り計算ツールを活用する 条件別の手取りを素早く計算したい場合は、手取り計算ツール を使おう。年収・扶養人数・居住地を入力するだけで、月々の手取りと各種控除額を自動で算出できる。\n転職先からオファーを受けたら、現職と転職先の条件を両方入力して比較するのが正しい使い方だ。「年収で80万円上がったが、手取りで比べると実質50万円の改善だった」といった正確な把握が可能になる。\nまた、副業を掛け持ちする予定がある人は副業税金計算ツール も併用すると、所得が増えた場合の税負担シミュレーションができる。\n交渉時に使える「手取りベースの逆算トーク」 「御社の提示額480万円だと、手取りベースで月約30万円となります。現職の手取りが月29万円ですので、実質的な改善幅が小さく、引越し費用や転職活動のコストを踏まえると500万円でご検討いただけないでしょうか」\nこのように手取りの数字を具体的に提示しながら交渉すると、感情論ではなく数字のロジックで話が進みやすくなる。\n3. 転職月の住民税・社会保険の落とし穴 住民税：前年所得ベースで6月に切り替わる仕組み 住民税は「前年1月〜12月の所得」を基に計算され、翌年6月から翌々年5月にかけて1年間かけて支払う。\n会社員の場合は毎月の給与から「特別徴収」として天引きされるが、転職時にはこの流れが一時的に乱れる。\n具体的な落とし穴：\n退職月によっては、残りの住民税が最後の給与から一括天引きされる場合がある（在職中に年内退職した場合） 転職先が特別徴収の引継ぎ手続きをしないと、**普通徴収（自分で納付書払い）**に切り替わり、数ヶ月後に一括請求が来ることがある 転職初月は給与が少ないのに、前職からの住民税一括徴収が重なって手取りがほぼゼロになるケースも実在する 対策： 転職先の人事担当に「住民税の特別徴収引継ぎはできますか？」と事前に確認しよう。また、6月直前の転職は住民税タイミングのリスクが特に高いため、転職時期を意識することも有効だ。\n社会保険：月末在籍基準を理解する 健康保険・厚生年金の社会保険料は、月末時点でどの会社に在籍しているかで、その月の保険料負担先が決まる。\n月の途中で退職した場合：退職月の社会保険料は発生しない（前月分まで） 月末退職の場合：退職月の社会保険料が1ヶ月分発生する そのため、たとえば5月31日退職と5月30日退職では、社会保険料の負担が1ヶ月分違ってくる。\n実務的な注意点：\n転職先の入社日も月初が多いが、前職の退職日が月末だった場合、同じ月に二重で社会保険料が発生することがある 転職先の試用期間中に社会保険に加入できる会社かどうかも確認しておく（一部の中小企業では試用期間中は未加入のケースがある） 退職金がある場合：退職所得控除を活用する 長年同じ会社に勤めていて退職金が出る場合、「退職所得控除」を活用することで税負担を大幅に軽減できる。\n退職所得控除の計算式：\n勤続年数20年以下：40万円 × 勤続年数（最低80万円） 勤続年数20年超：800万円 + 70万円 × （勤続年数 − 20年） たとえば勤続25年で退職金2,000万円の場合：\n控除額：800万円 + 70万円 × 5年 = 1,150万円 課税対象：（2,000万円 − 1,150万円）÷ 2 = 425万円 退職金は受け取る前に「退職所得の受給に関する申告書」を会社に提出することで、この控除が自動的に適用される。提出を忘れると20%の一律課税になるので要注意だ。\n退職金の受け取り後に確定申告が必要かどうかは状況によって異なる。複数の収入源がある場合は副業税金計算ツール で概算を試算しておこう。\n4. dodaエージェントを使うべきタイミングと活用法 自己応募とエージェント経由の決定的な違い 転職活動には大きく分けて「自己応募（求人サイトから直接応募）」と「エージェント経由」の2ルートがある。年収交渉の観点では、エージェント経由のほうが圧倒的に有利だ。\n理由は以下のとおり。\nエージェントは企業の採用予算を知っている — 求人票に書かれた年収レンジより高いオファーが出ることも珍しくない 交渉を代行してくれる — 「年収を上げてほしい」を直接言うのは気まずいが、エージェントが間に入ることで客観的な交渉ができる 内定後の条件調整も対応 — 内定後に「やはり条件が合わない」となったときも、エージェントが再交渉を試みてくれる dodaエージェントが30代転職に強い理由 doda転職エージェント は、国内最大級の転職サービスの一つで、特に30代のミドル層転職に強みを持つ。\n非公開求人が全体の約8割を占め、競合が少ない 業界・職種専門のキャリアアドバイザーが担当するため、専門的なアドバイスが得られる 年収交渉の実績データを豊富に持つため、「この企業にはこの提示額が通りやすい」という知見がある 実際に筆者が取材した転職経験者の声では「自己応募で480万円と言われていたが、dodaエージェント経由で再アプローチしたら520万円で通った」というケースもあった。\ndodaを活用すべき具体的なタイミング タイミング 活用方法 転職検討初期 市場価値診断・年収レンジの確認 求人を絞り込む段階 非公開求人の紹介を受ける 面接前 企業の評価基準・交渉余地のヒアリング オファー受領後 条件交渉の代行依頼 複数内定が出た段階 優先順位付けと最終条件調整の相談 特に「オファー受領後の条件交渉代行」はエージェント利用の最大メリットだ。登録・利用は完全無料なので、転職意欲がまだ固まっていない段階でも情報収集目的で登録する価値はある。\ndoda転職エージェントに無料登録する フリーランス・副業への展開を見越した転職戦略 転職先が副業OKの会社であれば、本業の年収アップと並行して副収入を積み上げる戦略も有効だ。副業収入が年20万円を超えると確定申告が必要になるが、freeeの確定申告ソフト を使えば、会計知識がなくても比較的簡単に申告できる。\n副業収入の管理には家計簿ツール も合わせて使うと、収支の全体像が把握しやすくなる。\nまとめ：年収100万アップを実現する人の思考法 この記事で解説したポイントを整理する。\n交渉は数字ベースで行う — 手取り逆算で具体的な根拠を持って臨む 住民税・社会保険の変動を事前に把握する — 転職月の一時的な手取り減少に備える 退職金がある人は退職所得控除を忘れずに — 勤続年数に応じた大きな節税効果がある エージェントを使って交渉を代行させる — 自己応募より年収が上振れしやすい 「年収アップ」の本質は額面の数字ではなく、毎月の手取りが実際にどれだけ増えるかだ。手取り計算ツール で現職と転職先を比較しながら、納得のいく転職を実現してほしい。\n転職活動の第一歩として、まずはdodaエージェントに無料登録 して市場価値を確認することをおすすめする。\n関連ツール・記事 正確な年齢を今すぐ計算 → 年齢計算ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール 転職年収シミュレーター — 転職前後の年収・手取り・税金・生涯収入差額を自動計算 手取り計算シミュレーター — 年収から手取り・税金・社会保険料を自動計算 副業税金計算ツール — 副収入追加時の税負担シミュレーション 年収から所得税・住民税を計算 → 所得税シミュレーター 時給と年収を換算 → 時給換算ツール 転職サイト おすすめ2026年版！年代・目的別に徹底比較 50代転職 AI活用準備ガイド2026 未経験からの完全ロードマップ 副業始め方 初心者向け完全ガイド2026年最新版 ","permalink":"https://productivity-works.com/ja/posts/tenshoku-nenshu-up-negotiation/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e転職活動を進めているあなたに、まず一つ聞きたい。\u003c/p\u003e\n\u003cp\u003e「年収500万円のオファーを受けたとき、毎月の手取りがいくらか、すぐに計算できますか？」\u003c/p\u003e\n\u003cp\u003eこの問いに即答できない人は、年収交渉で損をしている可能性が高い。年収100万円アップを実現している人たちは、総支給額ではなく\u003cstrong\u003e手取りベース\u003c/strong\u003eで条件を比較し、住民税や社会保険の変動まで織り込んだうえで交渉テーブルに座っている。\u003c/p\u003e\n\u003cp\u003eこの記事では、転職における年収交渉の実践的なノウハウと、見落としがちな税金・社会保険の落とし穴を徹底的に解説する。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"1-年収交渉で失敗する人の共通パターン\"\u003e1. 年収交渉で失敗する人の共通パターン\u003c/h2\u003e\n\u003ch3 id=\"パターン1現年収を盛る\"\u003eパターン1：現年収を「盛る」\u003c/h3\u003e\n\u003cp\u003e転職活動で年収を聞かれると、つい現年収を少し多めに申告したくなる人がいる。しかし、採用担当者は源泉徴収票や雇用保険の記録で確認することができる。虚偽申告が発覚した場合、内定取り消しや入社後の信頼失墜につながる。\u003c/p\u003e\n\u003cp\u003e正直に申告したうえで「市場価値として自分はこの水準が妥当だと考える」と根拠を示す交渉のほうが、長期的に有効だ。\u003c/p\u003e\n\u003ch3 id=\"パターン2オファー初日に即答する\"\u003eパターン2：オファー初日に即答する\u003c/h3\u003e\n\u003cp\u003e「いいオファーをもらったら早く返事をしなければ」という焦りは禁物だ。正式オファーを受けてから回答するまでの期間（通常3〜5営業日）は、比較検討と条件交渉のための重要な時間だ。\u003c/p\u003e\n\u003cp\u003eこの期間を使って、以下を必ず確認しよう。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e基本給と固定残業代の内訳\u003c/li\u003e\n\u003cli\u003e賞与の支給基準（業績連動か固定か）\u003c/li\u003e\n\u003cli\u003e昇給の頻度と実績\u003c/li\u003e\n\u003cli\u003e試用期間中の給与設定\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"パターン3年収だけを見て手取りを計算しない\"\u003eパターン3：年収だけを見て手取りを計算しない\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eこれが最大の失敗パターンだ。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eたとえば現職が年収400万円、転職先が年収480万円だとしても、社会保険料の等級変更や前職の住民税の特別徴収切替によっては、転職直後の手取りが一時的に減ることがある。\u003c/p\u003e\n\u003cp\u003e「年収は上がったのに生活が苦しい」と感じる転職者の多くは、このギャップを事前に把握していなかった人たちだ。\u003c/p\u003e\n\u003ch3 id=\"パターン4交渉を一度しかできないと思い込む\"\u003eパターン4：交渉を「一度しかできない」と思い込む\u003c/h3\u003e\n\u003cp\u003eオファー提示後に「少し高めに希望を伝えるのは失礼では」と遠慮する人は多い。しかし、企業側はある程度の交渉余地を見込んでオファーを出していることがほとんどだ。\u003c/p\u003e\n\u003cp\u003e特に、エージェント経由の転職であれば、エージェントが間に入ってくれるため心理的ハードルが大幅に下がる。後述するdodaエージェントの活用もここで効いてくる。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"2-オファー金額から手取りを逆算する方法\"\u003e2. オファー金額から手取りを逆算する方法\u003c/h2\u003e\n\u003ch3 id=\"なぜ額面年収だけで判断してはいけないか\"\u003eなぜ「額面年収」だけで判断してはいけないか\u003c/h3\u003e\n\u003cp\u003e年収600万円と言っても、実際に毎月の口座に振り込まれる手取り額は大きく異なる。主な控除項目を整理すると以下のとおりだ。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e控除項目\u003c/th\u003e\n          \u003cth\u003e概算（年収600万円・東京・40歳の場合）\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e健康保険料\u003c/td\u003e\n          \u003ctd\u003e約32万円／年\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e厚生年金保険料\u003c/td\u003e\n          \u003ctd\u003e約55万円／年\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e雇用保険料\u003c/td\u003e\n          \u003ctd\u003e約3万円／年\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e所得税\u003c/td\u003e\n          \u003ctd\u003e約25万円／年\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e住民税\u003c/td\u003e\n          \u003ctd\u003e約33万円／年\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e合計控除\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e約148万円／年\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e手取り\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e約452万円／年（月約37.7万円）\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e額面600万円に対して手取りは約75%。この差を知らずに「年収アップ」を喜んでいると、生活設計が狂う。\u003c/p\u003e\n\u003cdiv style=\"max-width:620px;margin:1.8em auto;text-align:center;\"\u003e\n\u003csvg viewBox=\"0 0 620 260\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:100%;height:auto;\" aria-label=\"年収別手取り比較バーチャート\"\u003e\n  \u003cstyle\u003etext { font-family: 'Noto Sans JP', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', sans-serif; }\u003c/style\u003e\n  \u003crect width=\"620\" height=\"260\" rx=\"12\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"26\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"14\" font-weight=\"bold\"\u003e年収別 手取り額の目安（東京・会社員・独身）\u003c/text\u003e\n  \u003c!-- 年収300万円 --\u003e\n\u003cp\u003e\u003ctext x=\"90\" y=\"52\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"11\"\u003e年収300万円\u003c/text\u003e\u003c/p\u003e","title":"転職で年収100万アップする人がやっている交渉術と税金対策"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nはじめに：「独身なのに保険って必要なの？」 「保険は結婚してから考えればいい」「独身で扶養家族もいないのに保険に入る意味ある？」——そんな声をよく耳にします。\n結論から言えば、独身者に生命保険が必要かどうかは「人による」 です。一律に「必要」とも「不要」とも言えません。\nただ、根拠なく「なんとなく入っておく」のも、「なんとなく入らない」のも、どちらも損をするリスクがあります。大切なのは、自分の状況をデータで整理し、必要な保障を必要なだけ持つ という考え方です。\nこの記事では、生命保険文化センターや厚生労働省などの公的データをもとに、独身の20代・30代が本当に必要な保障と、不要な保障を分けて考えるための判断軸を解説します。\n1. 独身者の生命保険加入率データ まず現状を把握しておきましょう。生命保険文化センターが定期的に実施する「生活保障に関する調査」を参考にすると、生命保険（個人年金保険を含む）の加入率は年代・性別によって大きく異なります。\n一般的に知られている水準として、以下のような傾向が確認されています。\n20代の加入率: 約50%前後 30代の加入率: 約70%前後 20代では約2人に1人が何らかの生命保険に加入しており、30代になると加入率がぐっと上がります。これは結婚・住宅購入・子どもの誕生などライフイベントが重なりやすいためと考えられます。\n男女差について 男女別に見ると、20代・30代ともに女性の加入率が男性よりやや高い傾向が報告されています。これは女性特有の疾病リスク（がん・乳がん・子宮頸がんなど）への意識の高さや、女性向けの医療保険商品が充実していることが背景にあると考えられます。\n一方で、独身男性は「保険を検討したことがない」という割合も比較的高く、無保険リスクを抱えているケースも少なくありません。\nポイント: 加入率の数字は「周囲に合わせる根拠」にはなりません。自分の状況で判断することが重要です。\n2. 独身者に生命保険が「不要」なケース 独身者の多くは、実は生命保険の中でも死亡保障については優先度が低いことがほとんどです。その理由を整理します。\n(1) 扶養家族がいない 生命保険の死亡保障の本来の目的は、自分が亡くなったときに経済的に困る人を守ることです。配偶者も子どももおらず、親も経済的に自立しているなら、多額の死亡保障は必要ありません。\n(2) 会社の遺族補償・遺族年金でカバーされる 会社員であれば、厚生年金の「遺族厚生年金」が遺族（一定の条件あり）に支給される仕組みがあります。また、会社によっては団体生命保険が福利厚生として付いている場合もあります。自分の勤務先の福利厚生を一度確認してみましょう。\n(3) 十分な貯蓄がある 葬儀費用の目安は一般的に200〜300万円程度と言われています（葬儀の規模・地域によって異なります）。これをカバーできる程度の貯蓄があれば、純粋な「死亡保障」としての生命保険は不要と判断できます。\n(4) 高額療養費制度で医療費はある程度カバーされる 日本の公的医療保険には「高額療養費制度」があります。これは、1か月の医療費の自己負担が一定額を超えた場合に、超過分を後から払い戻してもらえる制度です（厚生労働省が制度を所管）。\n所得区分によって上限額は異なりますが、会社員の平均的な収入帯では、ひと月の自己負担はおおむね8〜10万円程度が上限の目安になります。\nつまり、「入院したら医療費が何百万円にもなる」という事態は、公的保険だけでもある程度防げます。この点を知らずに医療保険を厚く掛け過ぎているケースが多いので注意しましょう。\n3. 独身者に生命保険が「必要」なケース 一方で、独身でも保険が必要になる状況は確かに存在します。\n(1) 親や兄弟が経済的に自分に依存している 仕送りをしている親、障害のある兄弟など、自分の収入に頼っている家族がいる場合は、死亡保障が必要になります。「独身=扶養家族なし」とは限りません。自分が亡くなったときに困る人が一人でもいるなら、死亡保障は検討すべきです。\n(2) 住宅ローンを組んでいるが団信に入れなかった 住宅ローンには通常「団体信用生命保険（団信）」が付いており、死亡・高度障害時にローン残高が免除されます。しかし持病などで団信の審査に通らなかった場合は、別途死亡保障を確保する必要があります。\n(3) 自営業・フリーランスで傷病手当金がない 会社員が病気やケガで働けなくなった場合、健康保険から傷病手当金が最長1年6か月支給されます。ところが、フリーランスや個人事業主が加入する国民健康保険には、原則として傷病手当金がありません。\nフリーランスにとって「働けない期間」は即収入ゼロを意味します。就業不能保険や所得補償保険は、フリーランスが真っ先に検討すべき保険です。\nフリーランスの方へ: 収入管理・確定申告をシンプルにするなら freee会計 の活用もあわせて検討してみてください。収支を可視化することで、万一に備えた保険予算も組みやすくなります。\n(4) 持病があり将来加入が難しくなる可能性がある 健康なうちに保険に加入しておくことで、将来的に持病が悪化しても保障を継続できます。特に終身医療保険やがん保険は、若く健康なうちの方が保険料も安く加入できます。「今は健康だから問題ない」と後回しにすると、いざというときに加入できなくなるリスクがあります。\n4. 独身者が検討すべき保険の種類と保障額の目安 必要性を整理したうえで、具体的にどの保険を検討すべきかを見ていきます。\n医療保険 入院・手術時の費用をカバーする保険です。\n入院日額: 5,000〜10,000円が一般的な目安 月額保険料: 年齢・性別・保障内容によって異なりますが、20〜30代では1,000〜3,000円程度が一般的な水準です 高額療養費制度があるとはいえ、差額ベッド代・食事代・通院費・休業中の生活費はカバーされません。貯蓄が十分でない場合は、シンプルな医療保険で備えておく価値があります。\nがん保険 日本人の2人に1人が生涯でがんに罹患するとされています（国立がん研究センターの統計）。治療の長期化・先進医療費用などを考えると、がん保険は独身でも検討の価値があります。\n診断一時金: 100〜200万円が一つの目安 月額保険料は医療保険と組み合わせると割安になるプランも多い 就業不能保険・所得補償保険 特にフリーランスや、貯蓄が少ない会社員に有効です。病気・ケガで働けない期間の生活費を月単位で補償します。\n保障額の目安: 月収の60〜80%程度を補償するプランが一般的 待機期間（免責期間）が設定されているため、その間をカバーできる緊急予備資金（生活費3〜6か月分）との組み合わせが理想 死亡保険（定期・終身） 独身で扶養家族がいない場合、死亡保険の必要性は低めです。\n必要な場合の保障額: 葬儀費用相当の200〜300万円程度が一つの基準 高額な終身保険を「貯蓄目的」で契約するケースがありますが、利回りの観点から投資（NISA・iDeCoなど）の方が効率的な場合が多いです 5. 保険より投資を優先すべきケース 「必要最小限の保険に入ったら、余ったお金はどうすれば？」という疑問には明確な答えがあります。\n余裕資金は投資に回す方が効率的です。\n終身保険を「貯蓄代わり」に使うケースがありますが、返戻率や流動性を考えると、NISAやiDeCoを使った長期投資の方が多くの場合で有利です。\n考え方の基本は以下のとおりです。\n保険 = リスクへの「備え」（保障） 投資 = 資産の「形成」（増やす） この2つを混同しないことが家計管理の鉄則です。終身保険で「貯蓄+保障」を一体化しようとすると、どちらも中途半端になりがちです。\n投資をはじめるなら: NISAとiDeCoのどちらを優先すべきか悩んでいる方は、「NISAとiDeCoどっちが先？優先順位と使い分けを解説 」もあわせてご覧ください。楽天証券 はNISA・iDeCo口座の開設に人気のサービスです。\n保険と投資の目安配分 あくまで目安ですが、手取り収入に対する支出の考え方として以下が参考になります。\n【手取り月収に対する目安】 - 生命保険料: 5〜8%以内（家計全体のバランスを考慮） - 投資（NISA・iDeCo）: 10〜20%を目標に - 生活防衛資金（貯金）: 生活費3〜6か月分を先に確保 保険料が月収の10%を超えるような状態は、一般的に「入りすぎ」のサインです。\n6. 無料FP相談で自分に合った保険を見つける 「自分には何が必要で、何が不要か、まだよくわからない」という方には、ファイナンシャルプランナー（FP）への無料相談を活用するのが最も確実です。\n保険の無料FP相談サービスでは、以下のようなメリットがあります。\n複数の保険会社の商品を横断的に比較できる 自分のライフプランに合った保障額を客観的に試算してもらえる 無料なので気軽に相談できる（勧誘が気になる場合は事前に確認を） 保険の無料FP相談（CEO A8.net提携申請後にリンク有効化予定）\n保険マンモス（全国対応・オンライン相談可） 保険見直しラボ（担当者指名可・相談実績多数） なお、既に何らかの保険に加入している方は、定期的な見直しも重要です。ライフステージが変わるたびに必要な保障は変化します。詳しくは「30代の保険見直しガイド｜必要な保障と削れる無駄を整理する 」もご参照ください。\n7. まとめ：独身者の保険判断フローチャート 最後に、独身者が保険を判断するための簡単なフローチャートを示します。\n独身（20〜30代）の保険判断フロー │ ├─ [Q1] 親・兄弟など、自分の収入に経済的に依存している人がいる？ │ YES → 死亡保険（定期保険）を検討 │ NO → 死亡保険の優先度は低い │ ├─ [Q2] フリーランス・自営業？ │ YES → 就業不能保険・所得補償保険を優先検討 │ NO → 会社の傷病手当金でカバーされる範囲を確認 │ ├─ [Q3] 貯蓄が生活費3か月分未満？ │ YES → まず生活防衛資金を積み立てる（保険より優先） │ NO → 医療保険・がん保険をシンプルな内容で検討 │ ├─ [Q4] 持病があるか、家族にがん歴が多い？ │ YES → 早めにがん保険・医療保険への加入を検討 │ NO → 健康状態が良好なうちに保険料を比較・検討 │ └─ [Q5] 余裕資金がある？ YES → NISAやiDeCoなどの投資を優先 NO → 家計を見直してから保険・投資の優先順位を再設定 独身者にとって、保険は「全員必須」ではなく「状況次第」 です。大切なのは以下の3点です。\n不要な死亡保障に過剰なお金をかけない 医療・就業不能リスクには適切に備える（特にフリーランス） 保険と投資の役割を分けて、資産形成も並行して進める 迷ったときは、無料のFP相談を活用して、自分に合った保障設計を専門家に相談してみてください。\n本記事で紹介したサービス・リンク（まとめ）\n保険無料FP相談: 保険マンモス（CEO A8.net提携申請待ち）/ 保険見直しラボ（CEO A8.net提携申請待ち） 投資口座: 楽天証券 フリーランスの会計: freee会計 関連記事: NISAとiDeCoどっちが先？ / 30代の保険見直しガイド 関連ツール 正確な年齢を今すぐ計算 → 年齢計算ツール BMIと適正体重をチェック → BMI計算ツール 月収から理想の支出配分を計算 → 家計簿シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 保険料の節約分を積立投資に回すと → 複利計算シミュレーター iDeCoの節税効果を計算 → iDeCoシミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター ※本記事にはアフィリエイト広告が含まれています。記事内で紹介しているサービスの一部について、提携先からの報酬を受け取る場合があります。ただし、記事の内容は報酬の有無にかかわらず、読者にとって有益な情報提供を目的として作成しています。\nあわせて読みたい 30代の保険見直し完全ガイド｜無料相談で年間5万円節約できるケースも 保険相談 おすすめ2026年版！無料で最適な保険が見つかる窓口比較 老後2000万円問題を自分で検証｜退職金なしの会社員がとるべき行動 ","permalink":"https://productivity-works.com/ja/posts/dokushin-hoken-hitsuyou-20dai-30dai/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"はじめに独身なのに保険って必要なの\"\u003eはじめに：「独身なのに保険って必要なの？」\u003c/h2\u003e\n\u003cp\u003e「保険は結婚してから考えればいい」「独身で扶養家族もいないのに保険に入る意味ある？」——そんな声をよく耳にします。\u003c/p\u003e\n\u003cp\u003e結論から言えば、\u003cstrong\u003e独身者に生命保険が必要かどうかは「人による」\u003c/strong\u003e です。一律に「必要」とも「不要」とも言えません。\u003c/p\u003e\n\u003cp\u003eただ、根拠なく「なんとなく入っておく」のも、「なんとなく入らない」のも、どちらも損をするリスクがあります。大切なのは、自分の状況をデータで整理し、\u003cstrong\u003e必要な保障を必要なだけ持つ\u003c/strong\u003e という考え方です。\u003c/p\u003e\n\u003cp\u003eこの記事では、生命保険文化センターや厚生労働省などの公的データをもとに、独身の20代・30代が本当に必要な保障と、不要な保障を分けて考えるための判断軸を解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"1-独身者の生命保険加入率データ\"\u003e1. 独身者の生命保険加入率データ\u003c/h2\u003e\n\u003cp\u003eまず現状を把握しておきましょう。生命保険文化センターが定期的に実施する「生活保障に関する調査」を参考にすると、生命保険（個人年金保険を含む）の加入率は年代・性別によって大きく異なります。\u003c/p\u003e\n\u003cp\u003e一般的に知られている水準として、以下のような傾向が確認されています。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e20代の加入率\u003c/strong\u003e: 約50%前後\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e30代の加入率\u003c/strong\u003e: 約70%前後\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20代では約2人に1人が何らかの生命保険に加入しており、30代になると加入率がぐっと上がります。これは結婚・住宅購入・子どもの誕生などライフイベントが重なりやすいためと考えられます。\u003c/p\u003e\n\u003ch3 id=\"男女差について\"\u003e男女差について\u003c/h3\u003e\n\u003cp\u003e男女別に見ると、20代・30代ともに\u003cstrong\u003e女性の加入率が男性よりやや高い\u003c/strong\u003e傾向が報告されています。これは女性特有の疾病リスク（がん・乳がん・子宮頸がんなど）への意識の高さや、女性向けの医療保険商品が充実していることが背景にあると考えられます。\u003c/p\u003e\n\u003cp\u003e一方で、独身男性は「保険を検討したことがない」という割合も比較的高く、無保険リスクを抱えているケースも少なくありません。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eポイント\u003c/strong\u003e: 加入率の数字は「周囲に合わせる根拠」にはなりません。自分の状況で判断することが重要です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"2-独身者に生命保険が不要なケース\"\u003e2. 独身者に生命保険が「不要」なケース\u003c/h2\u003e\n\u003cp\u003e独身者の多くは、実は生命保険の中でも\u003cstrong\u003e死亡保障\u003c/strong\u003eについては優先度が低いことがほとんどです。その理由を整理します。\u003c/p\u003e\n\u003ch3 id=\"1-扶養家族がいない\"\u003e(1) 扶養家族がいない\u003c/h3\u003e\n\u003cp\u003e生命保険の死亡保障の本来の目的は、\u003cstrong\u003e自分が亡くなったときに経済的に困る人を守る\u003c/strong\u003eことです。配偶者も子どももおらず、親も経済的に自立しているなら、多額の死亡保障は必要ありません。\u003c/p\u003e\n\u003ch3 id=\"2-会社の遺族補償遺族年金でカバーされる\"\u003e(2) 会社の遺族補償・遺族年金でカバーされる\u003c/h3\u003e\n\u003cp\u003e会社員であれば、厚生年金の「遺族厚生年金」が遺族（一定の条件あり）に支給される仕組みがあります。また、会社によっては団体生命保険が福利厚生として付いている場合もあります。自分の勤務先の福利厚生を一度確認してみましょう。\u003c/p\u003e\n\u003ch3 id=\"3-十分な貯蓄がある\"\u003e(3) 十分な貯蓄がある\u003c/h3\u003e\n\u003cp\u003e葬儀費用の目安は一般的に\u003cstrong\u003e200〜300万円程度\u003c/strong\u003eと言われています（葬儀の規模・地域によって異なります）。これをカバーできる程度の貯蓄があれば、純粋な「死亡保障」としての生命保険は不要と判断できます。\u003c/p\u003e\n\u003ch3 id=\"4-高額療養費制度で医療費はある程度カバーされる\"\u003e(4) 高額療養費制度で医療費はある程度カバーされる\u003c/h3\u003e\n\u003cp\u003e日本の公的医療保険には「高額療養費制度」があります。これは、1か月の医療費の自己負担が一定額を超えた場合に、超過分を後から払い戻してもらえる制度です（厚生労働省が制度を所管）。\u003c/p\u003e\n\u003cp\u003e所得区分によって上限額は異なりますが、会社員の平均的な収入帯では、ひと月の自己負担は\u003cstrong\u003eおおむね8〜10万円程度が上限\u003c/strong\u003eの目安になります。\u003c/p\u003e\n\u003cp\u003eつまり、「入院したら医療費が何百万円にもなる」という事態は、公的保険だけでもある程度防げます。この点を知らずに医療保険を厚く掛け過ぎているケースが多いので注意しましょう。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"3-独身者に生命保険が必要なケース\"\u003e3. 独身者に生命保険が「必要」なケース\u003c/h2\u003e\n\u003cp\u003e一方で、独身でも保険が必要になる状況は確かに存在します。\u003c/p\u003e\n\u003ch3 id=\"1-親や兄弟が経済的に自分に依存している\"\u003e(1) 親や兄弟が経済的に自分に依存している\u003c/h3\u003e\n\u003cp\u003e仕送りをしている親、障害のある兄弟など、自分の収入に頼っている家族がいる場合は、死亡保障が必要になります。「独身=扶養家族なし」とは限りません。自分が亡くなったときに困る人が一人でもいるなら、死亡保障は検討すべきです。\u003c/p\u003e\n\u003ch3 id=\"2-住宅ローンを組んでいるが団信に入れなかった\"\u003e(2) 住宅ローンを組んでいるが団信に入れなかった\u003c/h3\u003e\n\u003cp\u003e住宅ローンには通常「団体信用生命保険（団信）」が付いており、死亡・高度障害時にローン残高が免除されます。しかし持病などで団信の審査に通らなかった場合は、別途死亡保障を確保する必要があります。\u003c/p\u003e\n\u003ch3 id=\"3-自営業フリーランスで傷病手当金がない\"\u003e(3) 自営業・フリーランスで傷病手当金がない\u003c/h3\u003e\n\u003cp\u003e会社員が病気やケガで働けなくなった場合、健康保険から\u003cstrong\u003e傷病手当金\u003c/strong\u003eが最長1年6か月支給されます。ところが、フリーランスや個人事業主が加入する国民健康保険には、原則として傷病手当金がありません。\u003c/p\u003e\n\u003cp\u003eフリーランスにとって「働けない期間」は即収入ゼロを意味します。就業不能保険や所得補償保険は、フリーランスが真っ先に検討すべき保険です。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eフリーランスの方へ\u003c/strong\u003e: 収入管理・確定申告をシンプルにするなら \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計\u003c/a\u003e\nの活用もあわせて検討してみてください。収支を可視化することで、万一に備えた保険予算も組みやすくなります。\u003c/p\u003e\u003c/blockquote\u003e\n\u003ch3 id=\"4-持病があり将来加入が難しくなる可能性がある\"\u003e(4) 持病があり将来加入が難しくなる可能性がある\u003c/h3\u003e\n\u003cp\u003e健康なうちに保険に加入しておくことで、将来的に持病が悪化しても保障を継続できます。特に終身医療保険やがん保険は、若く健康なうちの方が保険料も安く加入できます。「今は健康だから問題ない」と後回しにすると、いざというときに加入できなくなるリスクがあります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"4-独身者が検討すべき保険の種類と保障額の目安\"\u003e4. 独身者が検討すべき保険の種類と保障額の目安\u003c/h2\u003e\n\u003cp\u003e必要性を整理したうえで、具体的にどの保険を検討すべきかを見ていきます。\u003c/p\u003e\n\u003ch3 id=\"医療保険\"\u003e医療保険\u003c/h3\u003e\n\u003cp\u003e入院・手術時の費用をカバーする保険です。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e入院日額\u003c/strong\u003e: 5,000〜10,000円が一般的な目安\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e月額保険料\u003c/strong\u003e: 年齢・性別・保障内容によって異なりますが、20〜30代では\u003cstrong\u003e1,000〜3,000円程度\u003c/strong\u003eが一般的な水準です\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e高額療養費制度があるとはいえ、差額ベッド代・食事代・通院費・休業中の生活費はカバーされません。貯蓄が十分でない場合は、シンプルな医療保険で備えておく価値があります。\u003c/p\u003e","title":"独身に生命保険は必要？｜20代・30代が本当に必要な保障額をデータで解説【2026年版】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n会社員からフリーランスエンジニアに転身した直後は、技術的なスキルに集中したい時期でも、税務手続きの波が押し寄せてくる。開業届をいつ出すか、青色申告はどう使うか、何が経費になるのか——これらを整理しないまま年末を迎えると、取り返しのつかない節税機会の損失につながる。\n本記事では、フリーランスエンジニアが初年度に押さえるべき手続きを網羅的に解説する。税務署への書類提出から freee を使った日常的な帳簿管理まで、チェックリスト形式で追えるよう構成した。\n1. 開業届と青色申告承認申請書の提出タイミング 開業届は「事業開始から1ヶ月以内」が原則 フリーランスとして活動を開始したら、まず開業届（個人事業の開業・廃業等届出書）を最寄りの税務署に提出する。提出期限は事業開始日から1ヶ月以内だ。遅れても罰則はないが、青色申告の承認を受けるうえで開業日の設定が重要になるため、早めに動くに越したことはない。\n提出方法は次の3つから選べる。\n提出方法 手間 費用 税務署窓口へ持参 控えに受領印をもらえて確実 無料 郵送（控え返送用切手同封） 出向く手間なし 切手代のみ e-Tax（マイナンバーカード必要） オンライン完結 無料 書類は国税庁の公式サイトまたは freee の開業届作成サービスで無料作成できる。フォームに入力するだけで書類が完成するため、初めての手続きでも迷わない。\n青色申告承認申請書は「開業から2ヶ月以内」 開業届と同時に青色申告承認申請書も提出しよう。こちらの提出期限は開業日から2ヶ月以内。ただし、1月1日〜1月15日に開業した場合は例外で、3月15日までに提出すれば同年分から青色申告が適用される。\n青色申告を選ぶ最大のメリットは青色申告特別控除だ。\n65万円控除：e-Tax で電子申告 ＋ 複式簿記で帳簿を作成した場合 55万円控除：複式簿記で帳簿を作成したが紙申告の場合 10万円控除：簡易簿記（単式簿記）の場合 年収500万円のエンジニアが65万円控除を受けると、所得税・住民税の合計で約13〜19万円の節税になる（税率により異なる）。この差は大きい。最初から複式簿記 ＋ e-Tax 環境を整えることを強く推奨する。\n初年度の手続きチェックリスト 開業日を決定する（最初に報酬が発生した日、または活動開始日） 開業届を事業開始から1ヶ月以内に提出 青色申告承認申請書を開業から2ヶ月以内に提出 マイナンバーカードを取得（e-Tax 利用のため） 事業用の銀行口座とクレジットカードを開設 会計ソフトのアカウントを作成（後述） 国民健康保険への切り替え（会社の保険を退職後20日以内に任意継続か国保を選択） 国民年金への切り替え 2. 初年度に経費計上できるもの・できないものの判断基準 経費の基本原則：「事業に直接関連するか」 個人事業主の経費として認められるのは、事業を遂行するために必要な費用に限られる。「エンジニアとして仕事をするために必要だったか」が判断軸になる。\n開業前に購入したものであっても、開業準備のための費用として「開業費」に計上し、任意の年に償却できる制度がある。例えば、フリーランス転身を決意してから購入した技術書、受講したオンライン講座の費用なども対象になりうる。\n経費になるもの（代表例） 費目 経費計上の可否 注意点 仕事用PCの購入費 原則可 30万円未満は即時一括計上可（青色申告特例） 技術書・専門書 可 業務関連であること オンライン学習費（Udemy等） 可 業務スキル向上が目的のもの 自宅の家賃（按分） 可（按分） 事業使用割合分のみ 光熱費（按分） 可（按分） 事業使用割合分のみ 通信費（ネット・スマホ） 可（按分） プライベート混在時は按分 クラウドサービス利用料 可 AWS、GitHub等 交通費 可 業務渡航・打ち合わせ目的 接待交際費 可（上限なし） クライアント関連であること 社会保険料（国民年金等） 所得控除 経費ではなく「所得控除」 経費にならないもの・注意が必要なもの 生活費全般：食費・衣服代・家族の医療費など 私的な旅行費：業務目的が認められない旅行 趣味の書籍・機材：仕事への直接関連性がないもの 罰金・科料：税務上、損金不算入とされる 按分のルール：自宅兼事務所の家賃・光熱費 フリーランスエンジニアが自宅で作業する場合、家賃や電気代の一部を経費に按分できる。計算方法は以下が代表的だ。\n面積按分（家賃）の例\n月額家賃：10万円 部屋全体：40㎡、仕事スペース：8㎡ 事業使用割合：8/40 = 20% 経費計上額：10万円 × 20% = 2万円/月 時間按分（光熱費・通信費）の例\n月額通信費：5,000円 1日の業務時間：8時間、プライベート使用：4時間 事業使用割合：8/(8+4) ≒ 67% 経費計上額：5,000円 × 67% ≒ 3,350円/月 按分根拠を記録しておくことが重要だ。税務調査の際に「なぜその割合か」を説明できるよう、間取り図や作業日誌を保管しておこう。\n副業・フリーランスの税額を簡単に試算 → 副業税金計算ツール 3. freeeで請求書→帳簿→確定申告を一本化する方法 なぜ会計ソフトを使うべきか 青色申告65万円控除を受けるには「複式簿記」での帳簿作成が必要だ。しかし複式簿記をゼロから習得して手作業で管理するのは、エンジニアの本業とは別に相当な学習コストがかかる。会計ソフトを使えば、日常の取引を登録するだけで複式簿記の帳簿が自動生成される。\nfreee会計 は、請求書作成から帳簿管理、確定申告書の作成まで一気通貫で対応している。特にエンジニアにとって嬉しいのは、API連携やクレジットカード・銀行口座の自動同期機能だ。\nfreeeで構築する「フリーランスエンジニアの経理フロー」 Step 1：銀行口座・クレジットカードを連携\nfreee の「口座連携」機能で事業用口座とカードを登録する。取引明細が自動で取り込まれ、仕訳の大部分が自動化される。AWS の引き落としや GitHub の年間費用なども自動で記帳される。\nStep 2：請求書を freee で発行する\nクライアントへの請求書を freee の請求書機能で作成する。発行した請求書は自動で「売上」として帳簿に反映されるため、二重入力の手間がない。インボイス（適格請求書）発行事業者の登録番号も請求書に自動表示できる。\nStep 3：経費の領収書をスマホで撮影\n外出先での交通費や書籍代などは、freee のスマホアプリで領収書を撮影するだけでOCR読み取りが行われ、経費として登録される。電子帳簿保存法の要件にも対応している。\nStep 4：年度末に確定申告書を自動生成\n1年間の取引が登録済みであれば、freee が貸借対照表・損益計算書・確定申告書B（第一表・第二表）・青色申告決算書を自動作成する。そのままe-Taxに送信して申告完了だ。\nfreee会計を無料で試す（30日間無料トライアル） インボイス制度への対応 2023年10月から始まったインボイス制度（適格請求書等保存方式）により、免税事業者はクライアントから仕事を得にくくなるケースが出ている。特に法人クライアントと取引するエンジニアは適格請求書発行事業者（課税事業者）への登録を検討しよう。freeeはインボイス対応の請求書テンプレートを備えており、登録番号の自動記載・消費税の管理も一元化できる。\n4. エンジニア特有の経費（PC・学習費・通信費）の扱い方 PCの購入費：30万円未満なら一括計上が最強 フリーランスエンジニアにとって最大の経費項目のひとつがPCだ。通常、10万円以上の資産は「減価償却資産」として複数年にわたって費用計上するのが原則だが、青色申告者には「少額減価償却資産の特例」がある。\n少額減価償却資産の特例（青色申告者） 取得価額が30万円未満の減価償却資産は、購入した年に全額を経費として一括計上できる（年間合計300万円まで）。\n例えば税込み22万円のMacBook Proを購入した場合、青色申告者ならその年に22万円を全額経費計上できる。白色申告者なら耐用年数（PCは4年）で分割償却しなければならない。この差は大きい。\nなお、30万円以上のPCを購入した場合は通常の減価償却（定額法・定率法）が必要になる。freeeは減価償却の計算を自動化しているため、登録時に金額と用途を入力するだけで正確な計算が行われる。\n学習費・資格取得費：「現在の業務に関連するか」が鍵 エンジニアの学習費は経費として認められやすい部類だが、注意点がある。\n経費になりやすいもの\n現在の業務に直結する技術のUdemy講座、オンラインスクール 業務で使う言語・フレームワークの技術書（Pythonエンジニアが買うPython本など） AWSクラウドプラクティショナー等、業務で活用する資格の受験料・教材費 業務に関連するカンファレンス・勉強会の参加費・交通費 経費になりにくいもの\n現在の業務とまったく関係のない分野のスキルアップ（例：バックエンドエンジニアが趣味でデザインスクールに通う費用） 大学院の学費（一般的には経費不可） 迷ったケースは「この学習は現在の業務の質を高めるためか、新しい職業を得るためか」で判断する。前者は経費として認められやすく、後者は認められにくい。\n通信費（スマートフォン・インターネット回線） フリーランスエンジニアの通信費は、業務・プライベート兼用が多い。この場合は時間按分または用途按分で経費部分を切り出す。\n一般的な按分率の目安：\n完全在宅作業のエンジニア：インターネット回線 50〜80%、スマホ 30〜50% 現場常駐型のエンジニア：スマホ 20〜40%（現場でWi-Fiが使えるため） 合理的な按分根拠があれば認められるケースが多い。按分率を決めたら毎年一貫して適用することが重要だ。\nクラウドサービス・ソフトウェア利用料 エンジニアが利用するSaaSやクラウドは、ほぼ全て経費として計上できる。\nAWS / GCP / Azure などクラウドコンピューティング費用 GitHub / GitLab の有料プラン JetBrains / Visual Studio などIDEのライセンス Slack / Notion / Figma などの業務ツール ドメイン取得・サーバーレンタル費用 特にドメイン取得はお名前.com などで年間数百円〜数千円程度の費用だが、事業用として使うなら当然経費計上できる。ポートフォリオサイトや事業ウェブサイトのドメイン代は積極的に計上しよう。\n所得税の計算イメージ：フリーランスエンジニアの税負担 フリーランスエンジニアの所得税は累進課税で計算される。2026年現在、税率は**5%〜45%の7段階で、これに復興特別所得税（所得税額の2.1%）**が加算される。\n課税所得（収入−経費−各種控除後） 所得税率 195万円以下 5% 195万円超〜330万円以下 10% 330万円超〜695万円以下 20% 695万円超〜900万円以下 23% 900万円超〜1,800万円以下 33% 1,800万円超〜4,000万円以下 40% 4,000万円超 45% 青色申告特別控除65万円を活用し、経費を正しく計上することで課税所得を下げ、適用税率を1段階低く抑えられるケースもある。実際の手取り額を試算したい場合は下記ツールを活用してほしい。\n手取り計算ツールで年収ごとの税負担を確認 副業・フリーランス収入の税額を簡単試算 また、収支をしっかり把握したい方には家計簿ツール もあわせて活用することをおすすめする。\nまとめ：フリーランスエンジニア初年度の手続きロードマップ フリーランス転身直後にやるべきことを時系列でまとめると次のようになる。\n開業日から1ヶ月以内：開業届を税務署に提出 開業日から2ヶ月以内：青色申告承認申請書を提出 開業と同時：事業用銀行口座・クレジットカードを開設 開業と同時：freee会計 を契約して口座連携・請求書発行を開始 日常的に：領収書をスマホで撮影・経費をリアルタイム登録 翌年2〜3月：確定申告書をfreeeで作成し、e-Taxで電子申告 青色申告65万円控除を確実に受けるためには、「複式簿記 ＋ e-Tax 申告」という要件をクリアしなければならない。会計ソフトなしにこれを手作業でこなすのは現実的ではない。早い段階で freee などの会計ソフトを導入し、日々の記帳を自動化しておくことが、本業に集中しながら節税も最大化する最善の方法だ。\n関連ツール 副業・フリーランスの税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター iDeCoの節税効果を計算 → iDeCoシミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター 教育費の総額を計算 → 教育費シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連記事 フリーランス確定申告のやり方完全ガイド2026年版 副業フリーランスがfreeeで青色申告65万控除を最速で取る方法 フリーランス確定申告 AIで経費仕訳を自動化する具体的手順 フリーランス開業届の書き方完全ガイド2026年版 AI×確定申告 フリーランス完全自動化ガイド2026 本記事に記載されている税制情報は2026年5月時点の情報をもとにしています。税務上の判断は個別の状況により異なりますので、詳細については税理士など専門家への相談をおすすめします。\n","permalink":"https://productivity-works.com/ja/posts/freelance-engineer-kaigyou-aoiro-shinkoku/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e会社員からフリーランスエンジニアに転身した直後は、技術的なスキルに集中したい時期でも、税務手続きの波が押し寄せてくる。開業届をいつ出すか、青色申告はどう使うか、何が経費になるのか——これらを整理しないまま年末を迎えると、取り返しのつかない節税機会の損失につながる。\u003c/p\u003e\n\u003cp\u003e本記事では、フリーランスエンジニアが初年度に押さえるべき手続きを網羅的に解説する。税務署への書類提出から freee を使った日常的な帳簿管理まで、チェックリスト形式で追えるよう構成した。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"1-開業届と青色申告承認申請書の提出タイミング\"\u003e1. 開業届と青色申告承認申請書の提出タイミング\u003c/h2\u003e\n\u003ch3 id=\"開業届は事業開始から1ヶ月以内が原則\"\u003e開業届は「事業開始から1ヶ月以内」が原則\u003c/h3\u003e\n\u003cp\u003eフリーランスとして活動を開始したら、まず\u003cstrong\u003e開業届（個人事業の開業・廃業等届出書）\u003cstrong\u003eを最寄りの税務署に提出する。提出期限は\u003c/strong\u003e事業開始日から1ヶ月以内\u003c/strong\u003eだ。遅れても罰則はないが、青色申告の承認を受けるうえで開業日の設定が重要になるため、早めに動くに越したことはない。\u003c/p\u003e\n\u003cp\u003e提出方法は次の3つから選べる。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e提出方法\u003c/th\u003e\n          \u003cth\u003e手間\u003c/th\u003e\n          \u003cth\u003e費用\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e税務署窓口へ持参\u003c/td\u003e\n          \u003ctd\u003e控えに受領印をもらえて確実\u003c/td\u003e\n          \u003ctd\u003e無料\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e郵送（控え返送用切手同封）\u003c/td\u003e\n          \u003ctd\u003e出向く手間なし\u003c/td\u003e\n          \u003ctd\u003e切手代のみ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ee-Tax（マイナンバーカード必要）\u003c/td\u003e\n          \u003ctd\u003eオンライン完結\u003c/td\u003e\n          \u003ctd\u003e無料\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e書類は国税庁の公式サイトまたは freee の開業届作成サービスで無料作成できる。フォームに入力するだけで書類が完成するため、初めての手続きでも迷わない。\u003c/p\u003e\n\u003ch3 id=\"青色申告承認申請書は開業から2ヶ月以内\"\u003e青色申告承認申請書は「開業から2ヶ月以内」\u003c/h3\u003e\n\u003cp\u003e開業届と同時に\u003cstrong\u003e青色申告承認申請書\u003c/strong\u003eも提出しよう。こちらの提出期限は\u003cstrong\u003e開業日から2ヶ月以内\u003c/strong\u003e。ただし、1月1日〜1月15日に開業した場合は例外で、\u003cstrong\u003e3月15日\u003c/strong\u003eまでに提出すれば同年分から青色申告が適用される。\u003c/p\u003e\n\u003cp\u003e青色申告を選ぶ最大のメリットは\u003cstrong\u003e青色申告特別控除\u003c/strong\u003eだ。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e65万円控除\u003c/strong\u003e：e-Tax で電子申告 ＋ 複式簿記で帳簿を作成した場合\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e55万円控除\u003c/strong\u003e：複式簿記で帳簿を作成したが紙申告の場合\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e10万円控除\u003c/strong\u003e：簡易簿記（単式簿記）の場合\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e年収500万円のエンジニアが65万円控除を受けると、所得税・住民税の合計で約13〜19万円の節税になる（税率により異なる）。この差は大きい。\u003cstrong\u003e最初から複式簿記 ＋ e-Tax 環境を整えることを強く推奨する。\u003c/strong\u003e\u003c/p\u003e\n\u003ch3 id=\"初年度の手続きチェックリスト\"\u003e初年度の手続きチェックリスト\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e 開業日を決定する（最初に報酬が発生した日、または活動開始日）\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e 開業届を事業開始から1ヶ月以内に提出\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e 青色申告承認申請書を開業から2ヶ月以内に提出\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e マイナンバーカードを取得（e-Tax 利用のため）\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e 事業用の銀行口座とクレジットカードを開設\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e 会計ソフトのアカウントを作成（後述）\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e 国民健康保険への切り替え（会社の保険を退職後20日以内に任意継続か国保を選択）\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e 国民年金への切り替え\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"2-初年度に経費計上できるものできないものの判断基準\"\u003e2. 初年度に経費計上できるもの・できないものの判断基準\u003c/h2\u003e\n\u003ch3 id=\"経費の基本原則事業に直接関連するか\"\u003e経費の基本原則：「事業に直接関連するか」\u003c/h3\u003e\n\u003cp\u003e個人事業主の経費として認められるのは、\u003cstrong\u003e事業を遂行するために必要な費用\u003c/strong\u003eに限られる。「エンジニアとして仕事をするために必要だったか」が判断軸になる。\u003c/p\u003e\n\u003cp\u003e開業前に購入したものであっても、\u003cstrong\u003e開業準備のための費用\u003c/strong\u003eとして「開業費」に計上し、任意の年に償却できる制度がある。例えば、フリーランス転身を決意してから購入した技術書、受講したオンライン講座の費用なども対象になりうる。\u003c/p\u003e\n\u003ch3 id=\"経費になるもの代表例\"\u003e経費になるもの（代表例）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e費目\u003c/th\u003e\n          \u003cth\u003e経費計上の可否\u003c/th\u003e\n          \u003cth\u003e注意点\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e仕事用PCの購入費\u003c/td\u003e\n          \u003ctd\u003e原則可\u003c/td\u003e\n          \u003ctd\u003e30万円未満は即時一括計上可（青色申告特例）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e技術書・専門書\u003c/td\u003e\n          \u003ctd\u003e可\u003c/td\u003e\n          \u003ctd\u003e業務関連であること\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eオンライン学習費（Udemy等）\u003c/td\u003e\n          \u003ctd\u003e可\u003c/td\u003e\n          \u003ctd\u003e業務スキル向上が目的のもの\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e自宅の家賃（按分）\u003c/td\u003e\n          \u003ctd\u003e可（按分）\u003c/td\u003e\n          \u003ctd\u003e事業使用割合分のみ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e光熱費（按分）\u003c/td\u003e\n          \u003ctd\u003e可（按分）\u003c/td\u003e\n          \u003ctd\u003e事業使用割合分のみ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e通信費（ネット・スマホ）\u003c/td\u003e\n          \u003ctd\u003e可（按分）\u003c/td\u003e\n          \u003ctd\u003eプライベート混在時は按分\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eクラウドサービス利用料\u003c/td\u003e\n          \u003ctd\u003e可\u003c/td\u003e\n          \u003ctd\u003eAWS、GitHub等\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e交通費\u003c/td\u003e\n          \u003ctd\u003e可\u003c/td\u003e\n          \u003ctd\u003e業務渡航・打ち合わせ目的\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e接待交際費\u003c/td\u003e\n          \u003ctd\u003e可（上限なし）\u003c/td\u003e\n          \u003ctd\u003eクライアント関連であること\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e社会保険料（国民年金等）\u003c/td\u003e\n          \u003ctd\u003e所得控除\u003c/td\u003e\n          \u003ctd\u003e経費ではなく「所得控除」\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"経費にならないもの注意が必要なもの\"\u003e経費にならないもの・注意が必要なもの\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e生活費全般\u003c/strong\u003e：食費・衣服代・家族の医療費など\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e私的な旅行費\u003c/strong\u003e：業務目的が認められない旅行\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e趣味の書籍・機材\u003c/strong\u003e：仕事への直接関連性がないもの\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e罰金・科料\u003c/strong\u003e：税務上、損金不算入とされる\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"按分のルール自宅兼事務所の家賃光熱費\"\u003e按分のルール：自宅兼事務所の家賃・光熱費\u003c/h3\u003e\n\u003cp\u003eフリーランスエンジニアが自宅で作業する場合、家賃や電気代の\u003cstrong\u003e一部を経費に按分\u003c/strong\u003eできる。計算方法は以下が代表的だ。\u003c/p\u003e","title":"フリーランスエンジニアの開業届と青色申告｜初年度にやるべき手続き全リスト"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n副業でブログを始めようと思っても、「どこからスタートすればいいのか分からない」という方は多いはずです。ドメインやサーバーの選び方、収益が出てきたときの税金の扱いなど、調べれば調べるほど情報が散らかって迷子になりがちです。\nこの記事では、副業ブログの立ち上げから経費管理・確定申告の準備まで、初心者が迷わず進められるロードマップを順番に解説します。\n1. 副業ブログで稼ぐまでのロードマップ｜現実的な期間感 収益化までに必要な期間の目安 副業ブログで「月に1万円以上稼ぐ」ことを最初の目標にするなら、現実的な期間感として最低6ヶ月〜1年は見ておく必要があります。多くのブログが検索エンジンからの評価を得るまでに時間がかかる（いわゆる「サンドボックス期間」）ためです。\nおおよその目安は次のとおりです。\n期間 やること 期待できる状態 開設〜1ヶ月 ドメイン取得・サーバー設定・記事10本 アクセスほぼゼロ 2〜3ヶ月 記事を30本程度に増やす 月100〜300PV 4〜6ヶ月 検索流入が増え始める 月1,000〜3,000PV 6ヶ月〜1年 収益ツールの最適化 月1万円前後 1年〜2年 ロングテールKWの積み上げ 月3万〜10万円 「3ヶ月で月10万円」のような話は例外中の例外です。焦らず記事を積み上げることが最短ルートです。\n副業ブログに向いているジャンル 節約・家計管理：検索ボリュームが安定しており、家計簿ツールや保険などのアフィリエイトと相性が良い。家計簿ツール も合わせて活用すると記事の説得力が上がります。 副業・お金系：本記事のように「副業 ブログ 始め方」「副業税金 計算方法」など検索意図が明確なKWが豊富。副業税金計算ツール を活用すると読者の実用性が高まります。 特定の趣味・専門領域：競合が少なく、熱量の高い読者が集まりやすい。 2. ドメイン・サーバー取得の具体手順 2-1. ドメイン名の決め方 ドメイン名はブログの「住所」です。一度決めると変更が難しいため、慎重に選びましょう。\n良いドメイン名の条件\n短くて覚えやすい（15文字以内が目安） ブログのテーマや自分のハンドルネームが入っている 拡張子は.comか.netが信頼性の観点から無難 例えば「節約と副業を発信するブログ」なら setsuyaku-fukugyo.com のように、テーマが一目で伝わる名前が理想です。\n2-2. お名前.comでドメインを取得する手順 ドメイン取得には国内最大級のサービスであるお名前.com が使い勝手・コストともにバランスが取れています。初年度は.comドメインが数百円〜1,000円台で取得できるため、副業の初期投資として非常に低リスクです。\n取得の流れ（5ステップ）\nお名前.com にアクセスし、希望のドメイン名を検索欄に入力する 使いたいドメインが「取得可能」と表示されたらカートに入れる 会員登録（メールアドレスとパスワードのみでOK） 支払い方法を選択（クレジットカードが最も手軽） 登録完了メールを受け取ったら取得成功 注意点: ドメインは毎年更新費用が発生します。初年度は安くても2年目以降は1,500〜3,000円/年になるケースがあるため、更新費用も確認した上で申し込みましょう。\n2-3. レンタルサーバーの選び方 ドメインを取得したら、次はサーバーを契約してブログを設置します。副業ブログの初心者に向くサーバーの主な選択肢は以下のとおりです。\nサービス名 月額目安 特徴 ConoHa WING 900円〜 表示速度が速く初心者にも管理しやすい エックスサーバー 990円〜 老舗で安定性が高い。WordPressの自動インストール機能あり さくらのレンタルサーバ 500円〜 コストを抑えたい方向け WordPressを使うなら、サーバー側で「WordPress自動インストール」が用意されているサービスを選ぶと初期設定の手間が大幅に省けます。\n2-4. ドメインとサーバーを紐づける サーバーを契約したら、お名前.comで取得したドメインのDNS設定を変更してサーバーに向けます。お名前.comの管理画面では「ネームサーバーの設定」から変更が可能で、各サーバー会社が専用のネームサーバーアドレスを案内してくれます。DNS反映には最大で24〜72時間かかる場合があります。\n3. 開設初月から経費を記録する理由とfreeeの使い方 3-1. なぜ「最初から」経費を記録するのか 副業ブログを始めた月から、次の費用は事業経費として計上できます。\nドメイン取得費用（年間1,000〜3,000円） レンタルサーバー費用（月額500〜1,000円） 有料WordPressテーマの購入費（1回5,000〜20,000円） 書籍・セミナー代（ブログ運営に関連するもの） サブスクリプション費用（ライティングツール・画像素材など） 多くの方が「収益が出てから記録しよう」と後回しにしてしまいますが、それでは初期費用を経費として証明しにくくなります。収益がゼロの段階から経費を記録しておくことが節税の第一歩です。\n3-2. freeeを使った経費管理の始め方 クラウド会計ソフトfreee会計 は、副業ブロガーにとって管理コストを最小化できるツールです。Excelで管理するより入力ミスが少なく、確定申告書類の自動生成にも対応しています。\nfreeeでの基本的な経費登録手順\nfreeeに登録し、「個人事業主」として事業を開始する 「取引」タブから「支出（経費）」を選ぶ 日付・金額・勘定科目・メモを入力する レシートや領収書の画像をスマホで撮影してアップロード（7年間保存推奨） 勘定科目の例：\nドメイン代・サーバー代 → 通信費 または 消耗品費 有料テーマ → 消耗品費（10万円未満の場合） 書籍 → 新聞図書費 3-3. 銀行口座・クレジットカードを連携するメリット freeeは銀行口座やクレジットカードと連携できます。副業専用のクレジットカードを1枚作り、ブログ関連の支出をすべてそこに集約すると、明細が自動取り込みされて記帳の手間がほぼゼロになります。毎月末に「確認待ち」の取引に勘定科目を割り当てるだけで帳簿が完成するため、本業と副業を掛け持ちしている方には特に恩恵が大きいです。\n手取り収入の感覚を把握したい方は手取り計算ツール も参考にしてください。\n4. 月5万円を超えたら青色申告を検討すべき理由 4-1. 副業所得20万円超で確定申告が必要になる 会社員が副業で得た所得が年間20万円を超えた場合、確定申告が必要です（所得税法上の規定）。これは「年収」ではなく「所得（収入から経費を差し引いた金額）」で判定されます。\nたとえば年間収益が30万円でも、ドメイン・サーバー・ツール代などの経費が合計12万円あれば所得は18万円となり、確定申告は不要です。経費をしっかり記録することが、この閾値の管理にも直結します。\n月5万円の収益があれば年換算で60万円。経費を差し引いても20万円を超える可能性が高いため、月5万円に近づいてきた段階で青色申告の準備を始めるのがベストなタイミングです。\n4-2. 青色申告の主なメリット 青色申告は申請が必要ですが、白色申告と比べて大きな節税効果があります。\n青色申告特別控除の金額（2026年現在）\n65万円控除：e-Tax（電子申告）で申告した場合 55万円控除：紙の確定申告書を提出した場合（複式簿記+貸借対照表の添付が必要） 10万円控除：簡易な帳簿のみの場合 仮に副業所得が50万円あり、65万円の控除を受けられれば課税所得はゼロになります。この控除を受けられるかどうかで、数万円単位の納税差が生まれます。\n4-3. 青色申告の申請手順 青色申告をするには、税務署に**「青色申告承認申請書」と「開業届（個人事業の開廃業等届出書）」**を提出する必要があります。\n開業届の提出期限：事業開始日から1ヶ月以内（所得税法第229条） 青色申告承認申請書の提出期限：申告しようとする年の3月15日まで（その年の1月1日〜1月15日までに開業した場合）、または開業日から2ヶ月以内 どちらもfreeeの画面から作成・印刷が可能なため、別途専門ソフトを用意する必要はありません。freee会計 に登録すれば、開業届の作成ウィザードも無料で利用できます。\n4-4. 赤字繰越と専従者給与のメリット 青色申告では、その年に赤字（損失）が発生した場合、翌年以降3年間繰り越すことができます。ブログ運営初年度は経費がかさんで赤字になりがちですが、翌年以降の黒字と相殺できるため長期的に節税効果が高いです。\nまた、家族にブログ運営を手伝ってもらっている場合、一定の条件を満たせば「青色事業専従者給与」として経費計上できます。\nまとめ｜副業ブログは「仕組み化」が成功のカギ 副業ブログで継続的に稼ぐには、記事を書き続けることと並行して「お金の仕組み」を早めに整えることが重要です。\nドメイン取得：お名前.com で低コストからスタート 経費管理：freee会計 で初月から記録を習慣化 確定申告の準備：月5万円が見えてきたら青色申告の手続きを開始 収入の把握：副業税金計算ツール や 手取り計算ツール で手元に残る金額を把握 副業ブログは「種まき」に時間がかかりますが、一度検索流入が安定すれば更新頻度を落としても収益が続く「資産型」の副業です。今日ドメインを取得して、最初の一歩を踏み出してみましょう。\n関連ツール 色をHEX・RGB・HSLで変換 → カラーピッカー SHA-256・MD5ハッシュを生成 → ハッシュ生成ツール Base64のエンコード・デコード → Base64エンコーダー 副業の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター マークダウンエディターが必要？ → マークダウンプレビュー — リアルタイムでプレビュー\nダミーテキストを生成 → ダミーテキスト生成ツール — レイアウト確認用のプレースホルダーを即作成\nブログ記事のアイキャッチ画像をリサイズ → 画像リサイズツール ブログURLをQRコードに変換して拡散 → QRコードジェネレーター グラデーションをビジュアルで作成 → CSSグラデーションジェネレーター — 美しいCSSグラデーションを視覚的に生成\n関連記事 副業の確定申告やり方2026年版【freee・マネーフォワード対応】 副業フリーランスがfreeeで青色申告65万控除を最速で取る方法 副業始め方 初心者向け完全ガイド2026年最新版 AIを使った副業の始め方完全ガイド【2026年版・月3万〜10万円を目指す】 フリーランスなり方ロードマップ2026年版【副業から独立まで完全ガイド】 ","permalink":"https://productivity-works.com/ja/posts/fukugyo-blog-hajimekata-domain-freee/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e副業でブログを始めようと思っても、「どこからスタートすればいいのか分からない」という方は多いはずです。ドメインやサーバーの選び方、収益が出てきたときの税金の扱いなど、調べれば調べるほど情報が散らかって迷子になりがちです。\u003c/p\u003e\n\u003cp\u003eこの記事では、副業ブログの立ち上げから経費管理・確定申告の準備まで、初心者が迷わず進められるロードマップを順番に解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"1-副業ブログで稼ぐまでのロードマップ現実的な期間感\"\u003e1. 副業ブログで稼ぐまでのロードマップ｜現実的な期間感\u003c/h2\u003e\n\u003ch3 id=\"収益化までに必要な期間の目安\"\u003e収益化までに必要な期間の目安\u003c/h3\u003e\n\u003cp\u003e副業ブログで「月に1万円以上稼ぐ」ことを最初の目標にするなら、現実的な期間感として\u003cstrong\u003e最低6ヶ月〜1年\u003c/strong\u003eは見ておく必要があります。多くのブログが検索エンジンからの評価を得るまでに時間がかかる（いわゆる「サンドボックス期間」）ためです。\u003c/p\u003e\n\u003cp\u003eおおよその目安は次のとおりです。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e期間\u003c/th\u003e\n          \u003cth\u003eやること\u003c/th\u003e\n          \u003cth\u003e期待できる状態\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e開設〜1ヶ月\u003c/td\u003e\n          \u003ctd\u003eドメイン取得・サーバー設定・記事10本\u003c/td\u003e\n          \u003ctd\u003eアクセスほぼゼロ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e2〜3ヶ月\u003c/td\u003e\n          \u003ctd\u003e記事を30本程度に増やす\u003c/td\u003e\n          \u003ctd\u003e月100〜300PV\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e4〜6ヶ月\u003c/td\u003e\n          \u003ctd\u003e検索流入が増え始める\u003c/td\u003e\n          \u003ctd\u003e月1,000〜3,000PV\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e6ヶ月〜1年\u003c/td\u003e\n          \u003ctd\u003e収益ツールの最適化\u003c/td\u003e\n          \u003ctd\u003e月1万円前後\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1年〜2年\u003c/td\u003e\n          \u003ctd\u003eロングテールKWの積み上げ\u003c/td\u003e\n          \u003ctd\u003e月3万〜10万円\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e「3ヶ月で月10万円」のような話は例外中の例外です。焦らず記事を積み上げることが最短ルートです。\u003c/p\u003e\n\u003ch3 id=\"副業ブログに向いているジャンル\"\u003e副業ブログに向いているジャンル\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e節約・家計管理\u003c/strong\u003e：検索ボリュームが安定しており、家計簿ツールや保険などのアフィリエイトと相性が良い。\u003ca href=\"https://productivity-works.com/ja/tools/kakeibo-generator/\"\u003e家計簿ツール\u003c/a\u003e\nも合わせて活用すると記事の説得力が上がります。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e副業・お金系\u003c/strong\u003e：本記事のように「副業 ブログ 始め方」「副業税金 計算方法」など検索意図が明確なKWが豊富。\u003ca href=\"https://productivity-works.com/ja/tools/fukugyou-tax-calculator/\"\u003e副業税金計算ツール\u003c/a\u003e\nを活用すると読者の実用性が高まります。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e特定の趣味・専門領域\u003c/strong\u003e：競合が少なく、熱量の高い読者が集まりやすい。\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"2-ドメインサーバー取得の具体手順\"\u003e2. ドメイン・サーバー取得の具体手順\u003c/h2\u003e\n\u003ch3 id=\"2-1-ドメイン名の決め方\"\u003e2-1. ドメイン名の決め方\u003c/h3\u003e\n\u003cp\u003eドメイン名はブログの「住所」です。一度決めると変更が難しいため、慎重に選びましょう。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e良いドメイン名の条件\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e短くて覚えやすい（15文字以内が目安）\u003c/li\u003e\n\u003cli\u003eブログのテーマや自分のハンドルネームが入っている\u003c/li\u003e\n\u003cli\u003e拡張子は\u003ccode\u003e.com\u003c/code\u003eか\u003ccode\u003e.net\u003c/code\u003eが信頼性の観点から無難\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e例えば「節約と副業を発信するブログ」なら \u003ccode\u003esetsuyaku-fukugyo.com\u003c/code\u003e のように、テーマが一目で伝わる名前が理想です。\u003c/p\u003e\n\u003ch3 id=\"2-2-お名前comでドメインを取得する手順\"\u003e2-2. お名前.comでドメインを取得する手順\u003c/h3\u003e\n\u003cp\u003eドメイン取得には国内最大級のサービスである\u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;29KENM\u0026#43;50\u0026#43;2HU3GX\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eお名前.com\u003c/a\u003e\nが使い勝手・コストともにバランスが取れています。初年度は\u003ccode\u003e.com\u003c/code\u003eドメインが数百円〜1,000円台で取得できるため、副業の初期投資として非常に低リスクです。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e取得の流れ（5ステップ）\u003c/strong\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;29KENM\u0026#43;50\u0026#43;2HU3GX\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eお名前.com\u003c/a\u003e\n にアクセスし、希望のドメイン名を検索欄に入力する\u003c/li\u003e\n\u003cli\u003e使いたいドメインが「取得可能」と表示されたらカートに入れる\u003c/li\u003e\n\u003cli\u003e会員登録（メールアドレスとパスワードのみでOK）\u003c/li\u003e\n\u003cli\u003e支払い方法を選択（クレジットカードが最も手軽）\u003c/li\u003e\n\u003cli\u003e登録完了メールを受け取ったら取得成功\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003e注意点:\u003c/strong\u003e ドメインは毎年更新費用が発生します。初年度は安くても2年目以降は1,500〜3,000円/年になるケースがあるため、更新費用も確認した上で申し込みましょう。\u003c/p\u003e\n\u003ch3 id=\"2-3-レンタルサーバーの選び方\"\u003e2-3. レンタルサーバーの選び方\u003c/h3\u003e\n\u003cp\u003eドメインを取得したら、次はサーバーを契約してブログを設置します。副業ブログの初心者に向くサーバーの主な選択肢は以下のとおりです。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eサービス名\u003c/th\u003e\n          \u003cth\u003e月額目安\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eConoHa WING\u003c/td\u003e\n          \u003ctd\u003e900円〜\u003c/td\u003e\n          \u003ctd\u003e表示速度が速く初心者にも管理しやすい\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eエックスサーバー\u003c/td\u003e\n          \u003ctd\u003e990円〜\u003c/td\u003e\n          \u003ctd\u003e老舗で安定性が高い。WordPressの自動インストール機能あり\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eさくらのレンタルサーバ\u003c/td\u003e\n          \u003ctd\u003e500円〜\u003c/td\u003e\n          \u003ctd\u003eコストを抑えたい方向け\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eWordPressを使うなら、サーバー側で「WordPress自動インストール」が用意されているサービスを選ぶと初期設定の手間が大幅に省けます。\u003c/p\u003e","title":"副業ブログの始め方｜お名前.comでドメイン取得→freeeで経費管理まで"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「NISAで積立投資をしているけれど、FXにも興味が出てきた」——そんな方は少なくありません。NISAは非課税で長期投資に向いているとよく聞くけれど、FXと組み合わせると税金の扱いはどうなるのか、確定申告は必要になるのか、気になるポイントは多いはずです。\n結論から言えば、NISAとFXは同時に利用できます。ただし、税金の仕組みが根本的に異なるため、それぞれの特性をきちんと理解しておくことが重要です。本記事では、NISA（2024年新NISA）とFXの税制の違い、併用戦略、確定申告のポイントをわかりやすく解説します。\nNISAとFXの基本的な違い まずは全体像を表で整理します。\n項目 NISA（新NISA） FX 税金の扱い 非課税 申告分離課税 20.315% 年間投資枠 つみたて投資枠 120万円 / 成長投資枠 240万円（合計360万円） 制限なし 生涯投資枠 1,800万円（成長投資枠は1,200万円まで） なし 非課税期間 無期限 該当なし 損失の繰越控除 不可 可（3年間） 他の所得との損益通算 不可（NISA口座内で完結） 先物取引に係る雑所得等と通算可 向いている投資スタイル 長期・積立投資 短期〜中期トレード 確定申告 原則不要 利益が一定額を超えると必要 NISAは「非課税で長期的に資産を育てる制度」、FXは「利益に税金がかかるが柔軟に運用できる手段」と理解すると、それぞれの役割が明確になります。\nNISAの税金の仕組み 新NISAは2024年からスタートした恒久的な非課税投資制度です。NISA口座内で得た配当金・分配金・売却益はすべて非課税となります。通常の特定口座・一般口座では約20.315%の税金がかかるため、これは大きなメリットです。\n新NISAの主な枠組み つみたて投資枠: 年間120万円まで。長期・積立・分散投資に適した投資信託が対象。 成長投資枠: 年間240万円まで。上場株式・投資信託・ETFなどが対象。 生涯投資枠: 合計1,800万円（うち成長投資枠は最大1,200万円）。 非課税期間: 無期限（旧NISAの「20年」「5年」といった期限なし）。 NISAの注意点 損失が出ても他の所得と損益通算できない点は理解しておく必要があります。たとえばNISA口座内で株式を売って損失が出た場合、特定口座の利益と相殺することはできません。また、損失を翌年以降に繰り越す「繰越控除」も利用できません。\n非課税は大きな恩恵ですが、損失時に税制上の優遇を受けられない点はデメリットです。そのため、NISA口座では値動きの安定した長期投資を中心に据えるのが基本的な考え方です。\nFXの税金の仕組み FX（外国為替証拠金取引）の利益は、所得税と住民税を合わせて一律20.315%の申告分離課税が適用されます。給与所得や事業所得など、他の所得とは切り離して計算される仕組みです。\n税率の内訳 所得税: 15% 復興特別所得税: 0.315%（所得税の2.1%相当） 住民税: 5% 合計: 20.315% 所得が多くて累進課税が高くなる方にとっては、20.315%の分離課税は有利に働く場合があります。一方、所得が低く累進税率が低い方にとっては、総合課税のほうが有利になるケースもありますが、FXは申告分離課税が強制適用されるため選択の余地はありません。\nFXの損益通算と繰越控除 FXでは、同じ「先物取引に係る雑所得等」に分類される金融商品との損益通算が認められています。具体的には、商品先物取引や日経225先物などのデリバティブ取引との損益を合算できます。株式の損益や給与所得との通算はできません。\nまた、FXで損失が出た年は、翌年から最大3年間にわたって損失を繰り越し、将来の利益と相殺できる「繰越控除」が利用できます。これを活用するには確定申告が必要です。\nFXの損益計算や税額の目安を手早く確認したい方は、FX利益計算ツール を活用してみてください。\nNISAとFXの併用戦略 NISAとFXはそれぞれ異なる強みを持つため、うまく組み合わせることで資産運用の幅が広がります。\n長期の資産形成はNISA 老後の生活資金や10〜20年後の目標に向けた積立は、NISAのつみたて投資枠を活用するのが合理的です。運用益が非課税で再投資されるため、複利効果が最大化されます。月3〜5万円程度をインデックスファンドで積み立てるのが基本的なアプローチです。\n短期〜中期の運用はFX 経済イベントや為替の動向を捉えた短期トレードにはFXが適しています。証拠金を使ったレバレッジ取引ができるため、少ない資金でも大きなポジションを持てる点が特徴です。ただしリスクも大きいため、損切りルールの徹底など適切なリスク管理が不可欠です。\n具体的な資金配分イメージ 毎月の積立資金（月3〜5万円） → NISAで投資信託を積立 余裕資金の一部（数十万円） → FXの証拠金として運用 生活防衛資金（月支出の6ヶ月分） → 手を付けない NISAで将来どれだけ資産が育つかを試算したい方は、NISAシミュレーター で積立期間・利回りを入力して確認できます。\nNISAとFXの損益は通算できる？ 結論: NISAとFXの損益は通算できません。\nこれは非常に重要なファクトです。理由は、それぞれが異なる所得区分・課税制度に属しているためです。\nNISA口座の利益: 非課税扱いのため、そもそも課税計算の対象外。損失も税務上存在しないものとして扱われます。 FXの利益・損失: 「先物取引に係る雑所得等」として申告分離課税の対象。 たとえばFXで50万円の損失が出て、NISAで50万円の利益が出た場合、FXの損失でNISAの利益を相殺することはできません。NISA側の利益は非課税のままですし、FX側の損失は繰越控除を使って翌年以降のFX利益と相殺する形になります。\nまた、FXの損失は株式の譲渡益（特定口座）とも通算できません。FXと損益通算できる主な商品は、商品先物・金融先物など「先物取引に係る雑所得等」に分類されるものに限られます。\n確定申告はどうなる？ NISAは原則として確定申告不要 NISA口座での取引は非課税であるため、確定申告は不要です。証券会社が源泉徴収を行う特定口座（源泉徴収あり）とも異なり、そもそも税金が発生しないため申告の必要がありません。\nFXは利益が一定額を超えると確定申告が必要 FXの場合、以下の基準で確定申告の要否が変わります。\n給与所得者（会社員）の場合\nFXの年間利益が 20万円を超える 場合、確定申告が必要です。 20万円以下であれば申告不要（ただし住民税の申告が必要な場合あり）。 専業主婦・学生など給与所得がない場合\nFXの年間利益が 基礎控除額（48万円）を超える 場合、確定申告が必要です。 損失を繰り越したい場合\n利益・損失の金額を問わず、繰越控除を活用するには確定申告が必要です。損失が出た年に申告しておかないと、翌年以降の繰越控除が適用されません。 FXの確定申告に使えるツール FXの確定申告では、年間の取引履歴を集計し、損益を正確に計算する作業が必要です。証券会社から発行される「年間取引報告書」を使いますが、複数口座を持っている場合や繰越控除を適用する場合は手間がかかります。\nFXの確定申告にはfreee会計 がおすすめです。FXの損益入力・繰越控除の管理・申告書の作成まで、クラウド上でまとめて対応できます。\nNISAとFXの併用なら、両方を1つの証券会社で管理できると便利です。**楽天証券 **はNISA口座もFX口座も開設可能で、楽天ポイントも貯まります。\nまとめ NISAとFXの税金の違いと併用戦略を整理します。\nポイント NISA FX 利益への課税 非課税 20.315% 損失の繰越控除 不可 可（3年間） 他の所得との損益通算 不可 先物等の雑所得と通算可 確定申告 不要 利益20万超（会社員）で必要 NISAとFXは税制上まったく別の仕組みであり、損益の通算はできません。それぞれの特性を理解した上で、「長期資産形成はNISA、短期運用の一部にFX」という役割分担を意識すると、バランスの良い資産運用が実現できます。\nFXで得た利益が手取りや税負担にどう影響するかを知りたい方は、手取り計算シミュレーター もあわせてご活用ください。\n制度の詳細や税務上の判断については、最新の国税庁情報や税理士への相談も適宜ご活用ください。\n関連ツール NISAの長期積立効果を計算 → NISAシミュレーター FXの利益を計算 → FX利益計算シミュレーター 積立投資の複利効果を試算 → 複利計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター あわせて読みたい 新NISA始め方2026年版【初心者向け完全ガイド】口座開設から投資スタートまで FX利益20万円超えたら確定申告が必要？サラリーマン向けに税額を実計算 NISA iDeCo どっちを先に始めるべき？優先順位を徹底解説【2026年最新版】 ","permalink":"https://productivity-works.com/ja/posts/nisa-fx-zeikin-hikaku/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「NISAで積立投資をしているけれど、FXにも興味が出てきた」——そんな方は少なくありません。NISAは非課税で長期投資に向いているとよく聞くけれど、FXと組み合わせると税金の扱いはどうなるのか、確定申告は必要になるのか、気になるポイントは多いはずです。\u003c/p\u003e\n\u003cp\u003e結論から言えば、\u003cstrong\u003eNISAとFXは同時に利用できます\u003c/strong\u003e。ただし、税金の仕組みが根本的に異なるため、それぞれの特性をきちんと理解しておくことが重要です。本記事では、NISA（2024年新NISA）とFXの税制の違い、併用戦略、確定申告のポイントをわかりやすく解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"nisaとfxの基本的な違い\"\u003eNISAとFXの基本的な違い\u003c/h2\u003e\n\u003cp\u003eまずは全体像を表で整理します。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003eNISA（新NISA）\u003c/th\u003e\n          \u003cth\u003eFX\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e税金の扱い\u003c/td\u003e\n          \u003ctd\u003e非課税\u003c/td\u003e\n          \u003ctd\u003e申告分離課税 20.315%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e年間投資枠\u003c/td\u003e\n          \u003ctd\u003eつみたて投資枠 120万円 / 成長投資枠 240万円（合計360万円）\u003c/td\u003e\n          \u003ctd\u003e制限なし\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e生涯投資枠\u003c/td\u003e\n          \u003ctd\u003e1,800万円（成長投資枠は1,200万円まで）\u003c/td\u003e\n          \u003ctd\u003eなし\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e非課税期間\u003c/td\u003e\n          \u003ctd\u003e無期限\u003c/td\u003e\n          \u003ctd\u003e該当なし\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e損失の繰越控除\u003c/td\u003e\n          \u003ctd\u003e不可\u003c/td\u003e\n          \u003ctd\u003e可（3年間）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e他の所得との損益通算\u003c/td\u003e\n          \u003ctd\u003e不可（NISA口座内で完結）\u003c/td\u003e\n          \u003ctd\u003e先物取引に係る雑所得等と通算可\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e向いている投資スタイル\u003c/td\u003e\n          \u003ctd\u003e長期・積立投資\u003c/td\u003e\n          \u003ctd\u003e短期〜中期トレード\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e確定申告\u003c/td\u003e\n          \u003ctd\u003e原則不要\u003c/td\u003e\n          \u003ctd\u003e利益が一定額を超えると必要\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eNISAは「非課税で長期的に資産を育てる制度」、FXは「利益に税金がかかるが柔軟に運用できる手段」と理解すると、それぞれの役割が明確になります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"nisaの税金の仕組み\"\u003eNISAの税金の仕組み\u003c/h2\u003e\n\u003cp\u003e新NISAは2024年からスタートした恒久的な非課税投資制度です。NISA口座内で得た\u003cstrong\u003e配当金・分配金・売却益はすべて非課税\u003c/strong\u003eとなります。通常の特定口座・一般口座では約20.315%の税金がかかるため、これは大きなメリットです。\u003c/p\u003e\n\u003ch3 id=\"新nisaの主な枠組み\"\u003e新NISAの主な枠組み\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eつみたて投資枠\u003c/strong\u003e: 年間120万円まで。長期・積立・分散投資に適した投資信託が対象。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e成長投資枠\u003c/strong\u003e: 年間240万円まで。上場株式・投資信託・ETFなどが対象。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e生涯投資枠\u003c/strong\u003e: 合計1,800万円（うち成長投資枠は最大1,200万円）。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e非課税期間\u003c/strong\u003e: 無期限（旧NISAの「20年」「5年」といった期限なし）。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"nisaの注意点\"\u003eNISAの注意点\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e損失が出ても他の所得と損益通算できない\u003c/strong\u003e点は理解しておく必要があります。たとえばNISA口座内で株式を売って損失が出た場合、特定口座の利益と相殺することはできません。また、損失を翌年以降に繰り越す「繰越控除」も利用できません。\u003c/p\u003e\n\u003cp\u003e非課税は大きな恩恵ですが、損失時に税制上の優遇を受けられない点はデメリットです。そのため、NISA口座では値動きの安定した長期投資を中心に据えるのが基本的な考え方です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"fxの税金の仕組み\"\u003eFXの税金の仕組み\u003c/h2\u003e\n\u003cp\u003eFX（外国為替証拠金取引）の利益は、所得税と住民税を合わせて\u003cstrong\u003e一律20.315%の申告分離課税\u003c/strong\u003eが適用されます。給与所得や事業所得など、他の所得とは切り離して計算される仕組みです。\u003c/p\u003e\n\u003ch3 id=\"税率の内訳\"\u003e税率の内訳\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e所得税: 15%\u003c/li\u003e\n\u003cli\u003e復興特別所得税: 0.315%（所得税の2.1%相当）\u003c/li\u003e\n\u003cli\u003e住民税: 5%\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e合計: 20.315%\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e所得が多くて累進課税が高くなる方にとっては、20.315%の分離課税は有利に働く場合があります。一方、所得が低く累進税率が低い方にとっては、総合課税のほうが有利になるケースもありますが、FXは申告分離課税が強制適用されるため選択の余地はありません。\u003c/p\u003e\n\u003ch3 id=\"fxの損益通算と繰越控除\"\u003eFXの損益通算と繰越控除\u003c/h3\u003e\n\u003cp\u003eFXでは、同じ「先物取引に係る雑所得等」に分類される金融商品との損益通算が認められています。具体的には、商品先物取引や日経225先物などのデリバティブ取引との損益を合算できます。株式の損益や給与所得との通算はできません。\u003c/p\u003e\n\u003cp\u003eまた、FXで損失が出た年は、翌年から最大3年間にわたって損失を繰り越し、将来の利益と相殺できる「繰越控除」が利用できます。これを活用するには\u003cstrong\u003e確定申告が必要\u003c/strong\u003eです。\u003c/p\u003e\n\u003cp\u003eFXの損益計算や税額の目安を手早く確認したい方は、\u003ca href=\"https://productivity-works.com/ja/tools/fx-profit-calculator/\"\u003eFX利益計算ツール\u003c/a\u003e\nを活用してみてください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"nisaとfxの併用戦略\"\u003eNISAとFXの併用戦略\u003c/h2\u003e\n\u003cp\u003eNISAとFXはそれぞれ異なる強みを持つため、うまく組み合わせることで資産運用の幅が広がります。\u003c/p\u003e","title":"NISAで運用しながらFXもできる？税金の仕組みを比較してわかりやすく解説"},{"content":"お問い合わせ Productivity Works へのお問い合わせは、以下のメールアドレスまでご連絡ください。\n連絡先 メールアドレス: kagakusha22@gmail.com お問い合わせの種類に応じて、件名に以下をご記入いただけると助かります：\n記事に関するご意見・情報の誤り → 件名：「記事について」 取材・コラボレーションのご依頼 → 件名：「コラボレーション依頼」 広告・PR掲載のご依頼 → 件名：「広告・PR掲載について」 その他のお問い合わせ → 件名：「お問い合わせ」 よくあるお問い合わせ Q. 記事の内容に誤りがある場合は？ 記事タイトルと該当箇所をお知らせください。確認の上、速やかに修正いたします。\nQ. 記事の転載・引用はできますか？ 引用は出典（記事URL）を明記の上であれば可能です。全文転載はご遠慮ください。詳しくは プライバシーポリシー をご確認ください。\nQ. 寄稿・ライター募集はしていますか？ 現在検討中です。ご興味のある方はメールにてご連絡ください。\n返信について お問い合わせへの返信は、通常 2〜5営業日以内 を目安にしております。\n内容によってはお返事が遅れる場合や、ご返答できない場合もございます。あらかじめご了承ください。\nProductivity Works 編集部\n","permalink":"https://productivity-works.com/ja/contact/","summary":"\u003ch2 id=\"お問い合わせ\"\u003eお問い合わせ\u003c/h2\u003e\n\u003cp\u003eProductivity Works へのお問い合わせは、以下のメールアドレスまでご連絡ください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"連絡先\"\u003e連絡先\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eメールアドレス\u003c/strong\u003e: \u003ca href=\"mailto:kagakusha22@gmail.com\"\u003ekagakusha22@gmail.com\u003c/a\u003e\n\u003c/p\u003e\n\u003cp\u003eお問い合わせの種類に応じて、件名に以下をご記入いただけると助かります：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e記事に関するご意見・情報の誤り → 件名：「記事について」\u003c/li\u003e\n\u003cli\u003e取材・コラボレーションのご依頼 → 件名：「コラボレーション依頼」\u003c/li\u003e\n\u003cli\u003e広告・PR掲載のご依頼 → 件名：「広告・PR掲載について」\u003c/li\u003e\n\u003cli\u003eその他のお問い合わせ → 件名：「お問い合わせ」\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"よくあるお問い合わせ\"\u003eよくあるお問い合わせ\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eQ. 記事の内容に誤りがある場合は？\u003c/strong\u003e\n記事タイトルと該当箇所をお知らせください。確認の上、速やかに修正いたします。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eQ. 記事の転載・引用はできますか？\u003c/strong\u003e\n引用は出典（記事URL）を明記の上であれば可能です。全文転載はご遠慮ください。詳しくは \u003ca href=\"https://productivity-works.com/privacy-policy/\"\u003eプライバシーポリシー\u003c/a\u003e\n をご確認ください。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eQ. 寄稿・ライター募集はしていますか？\u003c/strong\u003e\n現在検討中です。ご興味のある方はメールにてご連絡ください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"返信について\"\u003e返信について\u003c/h2\u003e\n\u003cp\u003eお問い合わせへの返信は、通常 \u003cstrong\u003e2〜5営業日以内\u003c/strong\u003e を目安にしております。\u003c/p\u003e\n\u003cp\u003e内容によってはお返事が遅れる場合や、ご返答できない場合もございます。あらかじめご了承ください。\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cem\u003eProductivity Works 編集部\u003c/em\u003e\u003c/p\u003e","title":"お問い合わせ"},{"content":"Productivity Works について Productivity Works は、「働き方を自分でデザインする」をテーマに、生産性向上・副業・AIツール活用の実践的な情報を届けるメディアです。\n私たちのミッション すべての人が、自分の時間と能力を最大限に活かせる社会をつくる。\nテクノロジーの進化により、個人が活躍できる機会はかつてなく広がっています。しかし情報が多すぎて、何から始めればいいか分からない——そんな方に向けて、私たちは「実際に使えるノウハウ」だけを厳選してお届けします。\n扱うテーマ 生産性・仕事効率化 時間管理・タスク管理の実践テクニック リモートワーク・在宅勤務の最適化 集中力・習慣形成のメソッド AIツール活用 ChatGPT・Claude・Geminiの実践的な使い方 業務自動化・時間削減のAI活用法 AIを使った副業・収益化の具体的な方法 副業・キャリア 会社員でも始められる副業の始め方 フリーランス・独立のロードマップ 転職・キャリアチェンジの実践ガイド コンテンツ方針 信頼性を最優先に。\n当サイトのコンテンツは以下の方針で作成しています：\n実践ベース: 理論だけでなく、実際に試して効果を確認した情報を掲載 具体性重視: 抽象的なアドバイスではなく、すぐに実践できる手順を提供 定期更新: 情報が古くなった記事は随時更新し、最新の状況を反映 中立性: 特定のサービス・商品に偏らない客観的な視点 運営について Productivity Worksは、生産性・AI・副業分野に関心を持つ編集チームが運営しています。\n記事に関するご意見・ご感想、取材・コラボレーションのご依頼は お問い合わせ からお気軽にご連絡ください。\nProductivity Works — Work smarter, live better.\n","permalink":"https://productivity-works.com/ja/about/","summary":"\u003ch2 id=\"productivity-works-について\"\u003eProductivity Works について\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eProductivity Works\u003c/strong\u003e は、「働き方を自分でデザインする」をテーマに、生産性向上・副業・AIツール活用の実践的な情報を届けるメディアです。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"私たちのミッション\"\u003e私たちのミッション\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eすべての人が、自分の時間と能力を最大限に活かせる社会をつくる。\u003c/strong\u003e\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eテクノロジーの進化により、個人が活躍できる機会はかつてなく広がっています。しかし情報が多すぎて、何から始めればいいか分からない——そんな方に向けて、私たちは「実際に使えるノウハウ」だけを厳選してお届けします。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"扱うテーマ\"\u003e扱うテーマ\u003c/h2\u003e\n\u003ch3 id=\"生産性仕事効率化\"\u003e生産性・仕事効率化\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e時間管理・タスク管理の実践テクニック\u003c/li\u003e\n\u003cli\u003eリモートワーク・在宅勤務の最適化\u003c/li\u003e\n\u003cli\u003e集中力・習慣形成のメソッド\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"aiツール活用\"\u003eAIツール活用\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eChatGPT・Claude・Geminiの実践的な使い方\u003c/li\u003e\n\u003cli\u003e業務自動化・時間削減のAI活用法\u003c/li\u003e\n\u003cli\u003eAIを使った副業・収益化の具体的な方法\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"副業キャリア\"\u003e副業・キャリア\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e会社員でも始められる副業の始め方\u003c/li\u003e\n\u003cli\u003eフリーランス・独立のロードマップ\u003c/li\u003e\n\u003cli\u003e転職・キャリアチェンジの実践ガイド\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"コンテンツ方針\"\u003eコンテンツ方針\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e信頼性を最優先に。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e当サイトのコンテンツは以下の方針で作成しています：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e実践ベース\u003c/strong\u003e: 理論だけでなく、実際に試して効果を確認した情報を掲載\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e具体性重視\u003c/strong\u003e: 抽象的なアドバイスではなく、すぐに実践できる手順を提供\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e定期更新\u003c/strong\u003e: 情報が古くなった記事は随時更新し、最新の状況を反映\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e中立性\u003c/strong\u003e: 特定のサービス・商品に偏らない客観的な視点\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"運営について\"\u003e運営について\u003c/h2\u003e\n\u003cp\u003eProductivity Worksは、生産性・AI・副業分野に関心を持つ編集チームが運営しています。\u003c/p\u003e\n\u003cp\u003e記事に関するご意見・ご感想、取材・コラボレーションのご依頼は \u003ca href=\"https://productivity-works.com/contact/\"\u003eお問い合わせ\u003c/a\u003e\n からお気軽にご連絡ください。\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cem\u003eProductivity Works — Work smarter, live better.\u003c/em\u003e\u003c/p\u003e","title":"このサイトについて"},{"content":"プライバシーポリシー Productivity Works（以下「当サイト」）は、ユーザーの個人情報の保護を重要な責務と考え、以下のプライバシーポリシーに従って個人情報を適切に取り扱います。\n1. 個人情報の収集について 当サイトでは、お問い合わせをいただいた際に、お名前・メールアドレス等の個人情報をご入力いただく場合があります。これらの個人情報は、お問い合わせへの回答や必要な情報のご提供を目的として収集します。\n収集した個人情報は、収集目的の範囲内でのみ利用し、ユーザーの同意なしに第三者へ提供することはありません。\n2. Google AdSense・広告について 当サイトは、Google AdSenseを利用した広告を掲載する場合があります。Google AdSenseは、ユーザーの興味に応じた広告を表示するため、Cookieを使用してユーザーの情報を収集します。\nGoogleは広告配信にCookieを使用します ユーザーはGoogleのプライバシーポリシーにより、パーソナライズ広告のオプトアウトが可能です 詳細は Google 広告に関するプライバシー ポリシー をご確認ください パーソナライズ広告のオプトアウト: Google 広告設定 3. Google Analytics（アクセス解析）について 当サイトでは、サイトの利用状況を把握するためにGoogle Analytics（Googleが提供するアクセス解析ツール）を利用する場合があります。Google AnalyticsはCookieを使用してデータを収集しますが、このデータは匿名で収集されており、個人を特定するものではありません。\n収集データ: ページビュー数、滞在時間、アクセス元など IPアドレスの匿名化: 有効 データの利用目的: コンテンツ改善・ユーザー体験向上 Google Analyticsの利用規約は こちら をご確認ください Cookieを無効にしたい場合は、ブラウザの設定からCookieを無効にするか、Google Analytics オプトアウトアドオン をご利用ください。\n4. Cookieについて 当サイトでは、上記のGoogle AdSenseおよびGoogle AnalyticsによるCookieを使用します。Cookieとは、ウェブサイトがユーザーのブラウザに保存する小さなデータファイルです。\nユーザーはブラウザの設定によりCookieを無効にすることができますが、一部のサービスが正常に利用できなくなる場合があります。\n5. 免責事項 当サイトに掲載されているコンテンツ（記事・情報等）は、正確性・最新性に努めていますが、その内容の完全性・正確性を保証するものではありません。当サイトの情報を利用した結果生じた損害について、当サイトは一切の責任を負いません。\nまた、当サイトからリンクされている外部サイトのコンテンツについては、当サイトは責任を負いません。\n6. 著作権 当サイトに掲載されている文章・画像等のコンテンツの著作権は、当サイト運営者に帰属します。無断転載・複製は禁じます。引用する場合は出典を明記してください。\n7. 個人情報保護法への対応 当サイトは、**個人情報の保護に関する法律（個人情報保護法）**を遵守し、ユーザーの個人情報を適切に管理します。個人情報の開示・訂正・削除等のご要望は、下記のお問い合わせ先までご連絡ください。\n8. プライバシーポリシーの変更 当サイトは、必要に応じてプライバシーポリシーを改定することがあります。改定した場合は、当ページにて通知します。最新のプライバシーポリシーは常に本ページにてご確認いただけます。\n9. お問い合わせ プライバシーポリシーに関するお問い合わせは、お問い合わせページ よりご連絡ください。\nメールアドレス: kagakusha22@gmail.com 最終更新日: 2026年5月14日\n","permalink":"https://productivity-works.com/ja/privacy-policy/","summary":"\u003ch2 id=\"プライバシーポリシー\"\u003eプライバシーポリシー\u003c/h2\u003e\n\u003cp\u003eProductivity Works（以下「当サイト」）は、ユーザーの個人情報の保護を重要な責務と考え、以下のプライバシーポリシーに従って個人情報を適切に取り扱います。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"1-個人情報の収集について\"\u003e1. 個人情報の収集について\u003c/h2\u003e\n\u003cp\u003e当サイトでは、お問い合わせをいただいた際に、お名前・メールアドレス等の個人情報をご入力いただく場合があります。これらの個人情報は、お問い合わせへの回答や必要な情報のご提供を目的として収集します。\u003c/p\u003e\n\u003cp\u003e収集した個人情報は、収集目的の範囲内でのみ利用し、ユーザーの同意なしに第三者へ提供することはありません。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"2-google-adsense広告について\"\u003e2. Google AdSense・広告について\u003c/h2\u003e\n\u003cp\u003e当サイトは、Google AdSenseを利用した広告を掲載する場合があります。Google AdSenseは、ユーザーの興味に応じた広告を表示するため、\u003cstrong\u003eCookieを使用\u003c/strong\u003eしてユーザーの情報を収集します。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eGoogleは広告配信にCookieを使用します\u003c/li\u003e\n\u003cli\u003eユーザーはGoogleのプライバシーポリシーにより、パーソナライズ広告のオプトアウトが可能です\u003c/li\u003e\n\u003cli\u003e詳細は \u003ca href=\"https://policies.google.com/privacy?hl=ja\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGoogle 広告に関するプライバシー ポリシー\u003c/a\u003e\n をご確認ください\u003c/li\u003e\n\u003cli\u003eパーソナライズ広告のオプトアウト: \u003ca href=\"https://adssettings.google.com/authenticated\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGoogle 広告設定\u003c/a\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"3-google-analyticsアクセス解析について\"\u003e3. Google Analytics（アクセス解析）について\u003c/h2\u003e\n\u003cp\u003e当サイトでは、サイトの利用状況を把握するためにGoogle Analytics（Googleが提供するアクセス解析ツール）を利用する場合があります。Google Analyticsは\u003cstrong\u003eCookieを使用\u003c/strong\u003eしてデータを収集しますが、このデータは匿名で収集されており、個人を特定するものではありません。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e収集データ: ページビュー数、滞在時間、アクセス元など\u003c/li\u003e\n\u003cli\u003eIPアドレスの匿名化: 有効\u003c/li\u003e\n\u003cli\u003eデータの利用目的: コンテンツ改善・ユーザー体験向上\u003c/li\u003e\n\u003cli\u003eGoogle Analyticsの利用規約は \u003ca href=\"https://marketingplatform.google.com/about/analytics/terms/jp/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eこちら\u003c/a\u003e\n をご確認ください\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eCookieを無効にしたい場合は、ブラウザの設定からCookieを無効にするか、\u003ca href=\"https://tools.google.com/dlpage/gaoptout?hl=ja\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGoogle Analytics オプトアウトアドオン\u003c/a\u003e\n をご利用ください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"4-cookieについて\"\u003e4. Cookieについて\u003c/h2\u003e\n\u003cp\u003e当サイトでは、上記のGoogle AdSenseおよびGoogle AnalyticsによるCookieを使用します。Cookieとは、ウェブサイトがユーザーのブラウザに保存する小さなデータファイルです。\u003c/p\u003e\n\u003cp\u003eユーザーはブラウザの設定によりCookieを無効にすることができますが、一部のサービスが正常に利用できなくなる場合があります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"5-免責事項\"\u003e5. 免責事項\u003c/h2\u003e\n\u003cp\u003e当サイトに掲載されているコンテンツ（記事・情報等）は、正確性・最新性に努めていますが、その内容の完全性・正確性を保証するものではありません。当サイトの情報を利用した結果生じた損害について、当サイトは一切の責任を負いません。\u003c/p\u003e\n\u003cp\u003eまた、当サイトからリンクされている外部サイトのコンテンツについては、当サイトは責任を負いません。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"6-著作権\"\u003e6. 著作権\u003c/h2\u003e\n\u003cp\u003e当サイトに掲載されている文章・画像等のコンテンツの著作権は、当サイト運営者に帰属します。無断転載・複製は禁じます。引用する場合は出典を明記してください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"7-個人情報保護法への対応\"\u003e7. 個人情報保護法への対応\u003c/h2\u003e\n\u003cp\u003e当サイトは、**個人情報の保護に関する法律（個人情報保護法）**を遵守し、ユーザーの個人情報を適切に管理します。個人情報の開示・訂正・削除等のご要望は、下記のお問い合わせ先までご連絡ください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"8-プライバシーポリシーの変更\"\u003e8. プライバシーポリシーの変更\u003c/h2\u003e\n\u003cp\u003e当サイトは、必要に応じてプライバシーポリシーを改定することがあります。改定した場合は、当ページにて通知します。最新のプライバシーポリシーは常に本ページにてご確認いただけます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"9-お問い合わせ\"\u003e9. お問い合わせ\u003c/h2\u003e\n\u003cp\u003eプライバシーポリシーに関するお問い合わせは、\u003ca href=\"https://productivity-works.com/contact/\"\u003eお問い合わせページ\u003c/a\u003e\n よりご連絡ください。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eメールアドレス\u003c/strong\u003e: \u003ca href=\"mailto:kagakusha22@gmail.com\"\u003ekagakusha22@gmail.com\u003c/a\u003e\n\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cem\u003e最終更新日: 2026年5月14日\u003c/em\u003e\u003c/p\u003e","title":"プライバシーポリシー"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n50代の転職は「詰み」ではない——AIが変えた転職市場の新常識 「50代で転職なんて無理」——そう思い込んでいる方に、まず現実のデータをお伝えします。\n厚生労働省の調査によると、50代の転職者数は2020年代に入り一貫して増加しています。背景には、少子高齢化による労働力不足、70歳就業確保法の浸透、そして「即戦力人材へのニーズ」の高まりがあります。\n企業は今、経験・判断力・対人スキルを持つ50代を積極的に求めています。 ただし、「正しい準備をした50代」だけが評価される厳しい側面も変わっていません。\n2026年の転職市場で50代が競争力を持つためには、AIを道具として使いこなすことが決定的な差になっています。本記事では、転職活動のあらゆるフェーズでAIを活用する実践的なロードマップをご紹介します。\n50代転職の現実：強みと課題を正確に把握する 50代の転職市場での強み 豊富な実務経験と専門知識（20〜30年分） マネジメント・チームビルディングの経験 業界・取引先人脈 危機管理・トラブルシューティングの経験 長期間の継続的な業務遂行実績 これらは若手には絶対に持てない資産です。\n50代転職の現実的な課題 年収水準の調整が必要なケースが多い（前職と同等を求めると選択肢が激減） 変化への適応力に疑問を持たれやすい（「新しいことを学べるか」という懸念） デジタルスキルのアップデートが急務 書類選考の通過率が若年層より低い傾向 課題の中で特に「変化への適応力」と「デジタルスキル」は、AIを活用する姿勢を見せることで直接払拭できます。\nPHASE 1：自己分析——ChatGPTで「キャリアの棚卸し」を深める 転職活動の第一歩は自己分析ですが、多くの50代が「自分の強みを言語化できない」という壁にぶつかります。長年の経験が多すぎて、逆に整理できないのです。ChatGPTはこの棚卸しを劇的に加速します。\nプロンプト1：キャリアの強みを引き出す質問攻め\n私は現在52歳で、転職を検討しています。 キャリアの棚卸しをしたいのですが、どこから始めれば良いかわからない状態です。 私の職歴： - 大手製造業（28年間） - 営業職10年→営業企画5年→部長職として営業部門のマネジメント13年 - 部下の最大人数：32名 - 担当製品：産業機械（B2B） 以下の質問に答えながら、私が言語化できていない強みを引き出してください： 1. 部長職として最も誇れる成果は何か（数字で説明できるものを） 2. 部下から感謝されたエピソードは何か 3. 危機的状況を乗り越えた経験は何か 4. 自分にしかできなかったと思う仕事は何か 1つずつ聞いてください。私が回答したら次の質問に進んでください。 プロンプト2：転職の軸を明確化する\n以下の情報をもとに、私が転職で求めるものの「優先順位」を整理してください。 【私の現状】 - 現在の年収：850万円 - 現在の不満：会社の方向性と自分の価値観のズレ、新しいチャレンジをしたい - 家族構成：妻（パート）、子供2人（大学生） - 持ち家（住宅ローン残15年・月10万円） 【転職で求めるもの（優先度不明）】 - やりがい・仕事の意味 - 年収（維持したい） - 働き方（リモートワーク希望） - 雇用安定性 - 新しいチャレンジ 「生活防衛ライン」「理想」「現実的な着地点」の3段階で整理してください。 特に年収については「最低ラインはいくらか」を考えるフレームワークも提示してください。 PHASE 2：市場調査——50代に合う求人領域をAIで特定する プロンプト3：50代の強みが活きる職種・業界を分析\n52歳・元大手製造業営業部長（B2B営業・マネジメント経験）が転職先として 検討すべき職種・業界を分析してください。 私の強み： - B2B大型商談の経験（案件規模5,000万〜2億円） - 32名のチームのマネジメント - 製造業・機械系の技術的知識 - 大手取引先（上場企業）との長期関係構築 - 予算管理（部門予算3億円） 以下の観点で分析してください： 1. 強みが直接活かせる職種（営業系）5つ 2. 強みが活かせる隣接領域（営業以外）3つ 3. 50代の転職でニーズが高まっている業界・職種 4. 避けるべき（採用されにくい）領域 各職種・業界について「50代を求める理由」「平均的な年収水準」「転職難易度」も教えてください。 PHASE 3：職務経歴書の作成——AIで「伝わる」自己PRを作る 職務経歴書は50代転職の最初の関門です。「経験が豊富すぎて何を書けばいいかわからない」という問題を、ChatGPTと協力して解決します。\nプロンプト4：職務経歴書の構成設計\n以下の経歴をもとに、転職用の職務経歴書の構成を設計してください。 【転職先：中小・ベンチャー企業の営業部長または事業開発ポジションを希望】 【職歴概要】 ・〇〇製作所（1997年〜2025年、28年間） - 1997〜2006年：法人営業（東海エリア担当） - 2007〜2011年：営業企画部（マーケティング施策立案） - 2012〜2025年：営業部長（部下32名、売上目標70億円） 【主な実績】 ・入社10年目：担当エリアで年間売上15億円達成（前年比140%） ・営業企画時代：CRM導入プロジェクトのリーダー、全社展開 ・部長就任後：毎年目標達成率100%超えを8年連続 ・組織改革：離職率28%→8%に改善（3年間） 【希望年収】720万〜850万円 転職先が「中小・ベンチャー」であることを意識した構成と、 アピールすべきポイントの優先順位を教えてください。 プロンプト5：職務経歴書の文章化（各セクション）\n職務経歴書の「自己PR」セクションを作成してください。 【私の強み（整理済み）】 - 大型B2B商談の実績（最大2億円案件） - 組織の離職率を劇的に改善した実績 - CRM導入など「業務改革」への関与経験 【転職先のターゲット】 成長中の中小企業で、営業組織の立て直し・拡大を求めている会社 【条件】 - 文字数：300〜400字 - 「50代だから〇〇できる」という逃げの表現は使わない - 具体的な数字を最低3つ入れる - 「御社でも貢献できる」という形でまとめる - 転職を「チャレンジ」として前向きに表現する プロンプト6：職務経歴書のチェック・改善\n私が作成した職務経歴書の自己PRを添削してください。 【私の文章】 「私は28年間、製造業の営業一筋で働いてきました。部長として32名のチームを 率い、目標達成に向けて日々努力してきました。離職率の改善など組織力強化にも 取り組み、成果を上げることができました。これまでの経験を活かして御社でも 貢献したいと思います。」 以下の観点で改善してください： 1. 具体的な数字がない部分の改善提案 2. 「努力してきました」「取り組み」など曖昧な表現の改善 3. 「50代の転職者が見られる懸念」を打ち消す表現の追加 4. 全体的な「強さ」「インパクト」を高める修正 改善版も合わせて提示してください。 PHASE 4：面接準備——ChatGPTで徹底的にシミュレーションする プロンプト7：50代に特有の「難しい質問」への回答準備\n50代の転職面接で必ず聞かれる「難しい質問」への回答を一緒に準備してください。 私のプロフィール：52歳・元製造業営業部長・中小ベンチャーへの転職希望 【想定される難問と私の懸念】 1. 「なぜ今の会社を辞めるのですか？」（本音は会社の方向性への不満だが、ネガティブに見られたくない） 2. 「弊社は年収が下がりますが大丈夫ですか？」（実際は少し不安） 3. 「若い上司の下で働けますか？」（やや抵抗があるが、正直に言えない） 4. 「デジタルやAIの活用はできますか？」（実は苦手意識がある） 5. 「50代でなぜ転職を？」（年齢への言及をどう扱うか） 各質問について： - ポジティブに答えるための「フレーミング」 - 具体的な模範回答（200字程度） - やってはいけないNG回答例 を教えてください。 プロンプト8：面接の模擬練習（ロールプレイ）\n面接の模擬練習をしてください。あなたが面接官、私が面接を受けます。 【設定】 - 会社：従業員50名の製造業向けITソリューション会社 - 求人ポジション：営業部長（年収650〜750万円） - 面接官：45歳・代表取締役 一問一問聞いてください。私が回答したら、その回答に対して： 1. 良かった点 2. 改善すべき点 3. 追加で答えるべきだった内容 をフィードバックしてから次の質問に進んでください。 最初の質問をどうぞ。 PHASE 5：スキルアップ——50代がAI時代に学ぶべきこと 面接で「デジタルへの適応力」を問われる50代が増えています。実際にスキルアップすることで、懸念を払拭できます。\nプロンプト9：50代がAIを学ぶための学習計画\nAIやデジタルが苦手な52歳のビジネスパーソンが、3ヶ月で「転職面接でアピールできる AIリテラシー」を身につけるための学習計画を作成してください。 【現状スキル】 - PC操作：問題なし（Excelは中級） - スマートフォン：日常使用には問題なし - ChatGPT：名前は知っているが使ったことがない - SNS：FacebookはあるがLinkedInは未活用 【目標】 - 転職面接で「AIを活用した業務改善経験あり」と言える - 週に使える学習時間：5〜7時間 学習計画は「週単位」で、 - 何を学ぶか - 具体的なツール・リソース（なるべく無料） - その週の「成果物」（実際に作ったもの） を含めて作成してください。 プロンプト10：LinkedInプロフィールの整備\n50代の転職活動でLinkedInを活用するためのプロフィール文を作成してください。 【私の情報】 - 名前：田中太郎（仮名） - 現職：〇〇製作所 営業部長 - 経歴：製造業B2B営業28年、うちマネジメント13年 - 実績：年間売上70億円の部門を率い、8年連続目標達成 - 求職意向：非公開にしたい（現職にバレたくない） - 希望：事業開発・営業マネジメント系 【プロフィール文の要件】 - 「概要（About）」セクション：300〜500字 - 英語版・日本語版の両方 - 求職意向は隠しつつ、ヘッドハンターや企業から声がかかりやすい書き方 - 具体的な実績数字を含める 50代転職の「心構え」——AIには変えられない大切なこと 本記事ではAI活用に多くの紙面を割きましたが、最後に技術では補えない大切なことをお伝えします。\n年収への「覚悟」を持つ 50代の転職では、多くの場合10〜30%の年収ダウンが現実です。これを受け入れられるかどうかが、転職成功の最大の分岐点です。「前職と同じ年収でないと動かない」という姿勢は、選択肢を大幅に狭めます。\n「教わる側」に回る柔軟性 中小・ベンチャーへの転職では、自分より若いスタッフから業務を教わる場面が必ず来ます。「28年のキャリアがある自分が、なぜ若者に…」という感情を持たないことが、転職後の成功に直結します。\n「長期戦」を前提にした精神的準備 50代の転職活動は平均して6ヶ月〜1年かかります。書類選考で落ち続ける経験は精神的にきつい。ChatGPTやAIツールは効率化できても、この「待つ辛さ」はありません。家族や信頼できる人との対話を大切にしてください。\nまとめ：AIを使いこなす50代が、次の転職市場を制する 2026年の転職市場で50代が競争力を持つためのAI活用ロードマップ：\nフェーズ AIの活用方法 成果 自己分析 ChatGPTとの対話でキャリア棚卸し 強みの言語化 市場調査 AI分析で転職先の絞り込み 求人応募の精度向上 書類作成 ChatGPTでたたき台作成・添削 書類通過率の向上 面接準備 AIとのロールプレイで回答精錬 本番での安定したパフォーマンス スキルアップ AI学習計画で3ヶ月でデジタル力強化 「AI時代の50代」としてのブランド化 ChatGPTは「若手に勝つための道具」ではありません。50代の豊富な経験を「わかりやすく、説得力を持って伝える」ためのパートナーです。\nあなたの28年分の経験は、本物の価値があります。AIを使って、それを正しく伝えてください。\nまずは**doda **で求人を検索し、自分の市場価値を確認することから始めましょう。転職サイトとエージェントの機能を1つで使えるため、50代の転職活動の第一歩に最適です。\n本記事の転職市場データは2026年5月時点の情報です。転職活動の具体的な戦略については、キャリアアドバイザー等の専門家への相談を推奨します。\n関連ツール・記事 転職年収シミュレーター — 転職前後の手取り・税金・生涯収入差額を自動計算 手取り計算シミュレーター — 年収から手取り・社会保険料を自動計算 時給と年収を換算 → 時給換算ツール 50代転職でChatGPTを使った職務経歴書の書き方 転職で年収アップを実現する交渉術 転職サイトおすすめ2026年版：実績と特徴を比較 副業・在宅ワーク始め方ガイド2026 関連テンプレート 転職・キャリアアップに役立つテンプレートはこちら：\nAI面接対策キット — 50の質問＋回答フレームワーク ChatGPTプロンプト集100選 — 職務経歴書・面接準備プロンプト付き ","permalink":"https://productivity-works.com/ja/posts/50dai-tenshoku-ai-junbi-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"50代の転職は詰みではないaiが変えた転職市場の新常識\"\u003e50代の転職は「詰み」ではない——AIが変えた転職市場の新常識\u003c/h2\u003e\n\u003cp\u003e「50代で転職なんて無理」——そう思い込んでいる方に、まず現実のデータをお伝えします。\u003c/p\u003e\n\u003cp\u003e厚生労働省の調査によると、50代の転職者数は2020年代に入り一貫して増加しています。背景には、少子高齢化による労働力不足、70歳就業確保法の浸透、そして「即戦力人材へのニーズ」の高まりがあります。\u003c/p\u003e\n\u003cp\u003e企業は今、\u003cstrong\u003e経験・判断力・対人スキルを持つ50代を積極的に求めています。\u003c/strong\u003e ただし、「正しい準備をした50代」だけが評価される厳しい側面も変わっていません。\u003c/p\u003e\n\u003cp\u003e2026年の転職市場で50代が競争力を持つためには、\u003cstrong\u003eAIを道具として使いこなすことが決定的な差\u003c/strong\u003eになっています。本記事では、転職活動のあらゆるフェーズでAIを活用する実践的なロードマップをご紹介します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"50代転職の現実強みと課題を正確に把握する\"\u003e50代転職の現実：強みと課題を正確に把握する\u003c/h2\u003e\n\u003ch3 id=\"50代の転職市場での強み\"\u003e50代の転職市場での強み\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e豊富な実務経験と専門知識\u003c/strong\u003e（20〜30年分）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eマネジメント・チームビルディングの経験\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e業界・取引先人脈\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e危機管理・トラブルシューティングの経験\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e長期間の継続的な業務遂行実績\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eこれらは若手には絶対に持てない資産です。\u003c/p\u003e\n\u003ch3 id=\"50代転職の現実的な課題\"\u003e50代転職の現実的な課題\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e年収水準の調整が必要なケースが多い\u003c/strong\u003e（前職と同等を求めると選択肢が激減）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e変化への適応力に疑問を持たれやすい\u003c/strong\u003e（「新しいことを学べるか」という懸念）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eデジタルスキルのアップデートが急務\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e書類選考の通過率が若年層より低い傾向\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e課題の中で特に「変化への適応力」と「デジタルスキル」は、AIを活用する姿勢を見せることで直接払拭できます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"phase-1自己分析chatgptでキャリアの棚卸しを深める\"\u003ePHASE 1：自己分析——ChatGPTで「キャリアの棚卸し」を深める\u003c/h2\u003e\n\u003cp\u003e転職活動の第一歩は自己分析ですが、多くの50代が「自分の強みを言語化できない」という壁にぶつかります。長年の経験が多すぎて、逆に整理できないのです。ChatGPTはこの棚卸しを劇的に加速します。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eプロンプト1：キャリアの強みを引き出す質問攻め\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e私は現在52歳で、転職を検討しています。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eキャリアの棚卸しをしたいのですが、どこから始めれば良いかわからない状態です。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e私の職歴：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 大手製造業（28年間）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 営業職10年→営業企画5年→部長職として営業部門のマネジメント13年\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 部下の最大人数：32名\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 担当製品：産業機械（B2B）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の質問に答えながら、私が言語化できていない強みを引き出してください：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e 部長職として最も誇れる成果は何か（数字で説明できるものを）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e 部下から感謝されたエピソードは何か\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 危機的状況を乗り越えた経験は何か\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e 自分にしかできなかったと思う仕事は何か\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e1つずつ聞いてください。私が回答したら次の質問に進んでください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003eプロンプト2：転職の軸を明確化する\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の情報をもとに、私が転職で求めるものの「優先順位」を整理してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【私の現状】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 現在の年収：850万円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 現在の不満：会社の方向性と自分の価値観のズレ、新しいチャレンジをしたい\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 家族構成：妻（パート）、子供2人（大学生）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 持ち家（住宅ローン残15年・月10万円）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【転職で求めるもの（優先度不明）】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e やりがい・仕事の意味\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 年収（維持したい）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 働き方（リモートワーク希望）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 雇用安定性\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 新しいチャレンジ\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e「生活防衛ライン」「理想」「現実的な着地点」の3段階で整理してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e特に年収については「最低ラインはいくらか」を考えるフレームワークも提示してください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"phase-2市場調査50代に合う求人領域をaiで特定する\"\u003ePHASE 2：市場調査——50代に合う求人領域をAIで特定する\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eプロンプト3：50代の強みが活きる職種・業界を分析\u003c/strong\u003e\u003c/p\u003e","title":"50代転職 AI活用準備ガイド2026 未経験からの完全ロードマップ"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「毎日スワップポイントが入ってくる。これって税金はどうなるんだろう？」――FXのスワップ投資を始めると、多くの方がこの疑問にぶつかります。為替差益に比べて地味に積み上がるスワップポイントですが、年単位で見るとかなりの金額になることも。そして当然、税務署はしっかり把握しています。申告漏れで後から追徴課税を受けないためにも、スワップポイントの課税ルールと正確な計算方法を今すぐ確認しておきましょう。\nスワップポイントとは スワップポイントとは、FX取引において2国間の政策金利の差（金利差）によって毎日発生する損益のことです。高金利の通貨を買い、低金利の通貨を売るポジションを保有し続けると、毎営業日ごとにスワップポイントが受け取れます（プラススワップ）。反対に、低金利通貨を買って高金利通貨を売る場合はスワップポイントを支払う形になります（マイナススワップ）。\n代表的なプラススワップ通貨ペアとしては、メキシコペソ/円、南アフリカランド/円、トルコリラ/円などが挙げられます。これらの国の政策金利は日本よりも高いため、円を売ってその通貨を買うポジションを持つと、毎日スワップポイントを受け取れる仕組みです。\nスワップポイントの額は、各FX業者が毎営業日に設定・公表しており、保有通貨量（ロット数）と日数に比例して積み上がっていきます。長期保有を前提とした「スワップ投資」は、為替変動リスクを抱えつつも安定したインカムゲインを狙う戦略として、個人投資家に広く活用されています。\nスワップポイントに税金はかかる？ 結論から言うと、スワップポイントには税金がかかります。\nFX取引による利益（為替差益およびスワップポイント損益）は、申告分離課税の対象です。税率は所得金額にかかわらず一律 20.315%（所得税15.315%＋住民税5%）です。\n給与所得や事業所得などの「総合課税」とは別枠で計算するため、FXの利益が大きくても他の所得と合算して税率が上がることはありません。一方で、年間のFX取引損益（為替差益＋スワップポイント損益）が 20万円を超えた場合、会社員であっても確定申告が必要です（年収2,000万円以下で他の副収入がない場合の目安）。\nスワップポイントは「雑所得」に分類され、同一口座内の為替差益・差損と合算して申告します。なお、FX以外の金融商品（株式・投資信託など）とは損益通算できない点に注意してください。\n決済時課税と未決済課税の違い スワップポイントの課税タイミングは、FX業者の仕組みによって異なります。これはスワップ投資において非常に重要なポイントです。\n受取型（決済時に課税） 毎日発生したスワップポイントを、ポジション保有中から「受取済み」として口座残高に加算していくタイプです。この場合、スワップポイントは発生した時点（各営業日ごと）で確定した利益とみなされ、ポジションを決済する前であっても年間利益の集計対象に含まれます。多くの業者はこの方式を採用しています。\n蓄積型（ポジション決済時に課税） スワップポイントをポジションに内包する形で蓄積し、ポジションを決済した時点でまとめて利益確定とするタイプです。この場合、保有中のスワップポイントは決済するまで課税対象になりません。\n重要: どちらの方式かは業者によって異なります。自分が使っているFX業者がどちらの方式かを必ず確認してください。判断の最も確実な方法は、年間取引報告書（年間損益報告書） を確認することです。業者は毎年1月から2月にかけてこの書類を発行します。確定申告の際はこの報告書をもとに申告内容を作成してください。\nスワップ利益の年間税額を計算してみよう 実際にスワップポイントにかかる税金を計算してみましょう。\n前提条件（例）\n通貨ペア: メキシコペソ/円 保有数量: 10万通貨 1日あたりのスワップポイント: +200円 保有期間: 1年間（365日） 年間スワップポイント収益\n200円 × 365日 = 73,000円 年間税額（申告分離課税 20.315%）\n73,000円 × 20.315% = 14,830円（端数切捨て） つまり、この条件で1年間スワップを積み上げた場合、約14,830円の税金が発生する計算になります。手取りのスワップ収益は73,000円 - 14,830円 = 約58,170円です。\nただし、為替差損が発生していた場合はその分が差し引かれます。逆に為替差益も加わればさらに税額が増えます。年間の正確な税額は為替差益・差損とスワップポイント損益を合算して計算する必要があります。\n正確な税額計算はFX利益計算ツール をご利用ください。\n為替差益とスワップを合算して申告 FX取引の確定申告では、為替差益（差損）とスワップポイント損益を合算した年間損益を申告します。\n年間損益 = 為替差益（差損）+ スワップポイント収益（損失） たとえば、年間を通じて以下のような結果だったとします。\n項目 金額 為替差益 +150,000円 スワップポイント収益 +73,000円 年間合計損益 +223,000円 この場合、223,000円 × 20.315% = 約45,302円が納税額となります。\n反対に、為替差損が大きく全体として損失になった場合は課税されません。また、損失額は翌年以降3年間繰り越すことができます（後述）。\n確定申告の際は、FX業者から発行される年間取引報告書を必ず取り寄せ、申告書第三表（分離課税用）および雑所得の欄に正確に記載してください。複数の業者で取引している場合は、すべての口座の損益を合算します。\nスワップ投資で節税する方法 損失が出た年は損失繰越控除を活用する FX取引（申告分離課税）の年間損益がマイナスだった場合、確定申告を行うことで翌年以降3年間にわたって損失を繰り越すことができます。これを「損失の繰越控除」と呼びます。\nたとえば今年100万円の損失が出た場合、来年以降に利益が出たとき、その利益からこの100万円を差し引いてから課税されます。繰越控除を受けるためには、損失が出た年も必ず確定申告を行う必要があります。無申告のままでは繰越できないので注意してください。\nスワップ損益と為替差益・差損を損益通算する 同一のFX口座（または同じ申告分離課税区分のFX口座）内であれば、為替差損とスワップポイント収益、あるいはその逆の組み合わせで損益通算が可能です。\nたとえばスワップポイントで73,000円の利益が出ていても、同じ口座で50,000円の為替差損があれば、課税対象は差し引き23,000円になります。スワップ狙いで長期保有していると含み損が拡大することもあるため、決済のタイミングと年間損益の把握は計画的に行いましょう。\n帳簿管理・確定申告は効率化ツールを活用する 複数通貨ペア、複数業者での取引を続けると、年間の取引明細や損益の整理が煩雑になりがちです。確定申告の帳簿管理はfreee会計 で効率化できます。FX取引の損益を含む雑所得の入力・計算をサポートしており、確定申告書の作成までスムーズに行えます。\nまとめ FXのスワップポイントには申告分離課税（20.315%）が適用されます。重要なポイントを整理すると以下の通りです。\nスワップポイントは雑所得として、為替差益と合算して申告する 課税タイミング（受取型・蓄積型）は業者によって異なるため、年間取引報告書で確認する 年間FX損益が20万円を超えたら会社員でも確定申告が必要 損失が出た年こそ確定申告して3年間の損失繰越控除を活用する 複数業者の損益はすべて合算して申告する スワップポイントは毎日少額でも年単位では大きな金額になります。税金の仕組みを正確に理解した上で、計画的な投資と申告を行いましょう。\n副業の税金全体を把握するなら副業税金計算ツール が便利です。FX以外の副業収入も含めた年間税額の目安を手軽に確認できます。\n関連ツール FXの利益を計算 → FX利益計算シミュレーター 副業の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター 関連記事 FXの損失繰越控除：3年間の申告手順と注意点 FX利益20万円超の確定申告のやり方 FX確定申告に必要な書類一覧 副業FXで住民税がバレない方法と節税術 NISA vs FX 税金の違いを徹底比較 ","permalink":"https://productivity-works.com/ja/posts/fx-swap-point-zeikin/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「毎日スワップポイントが入ってくる。これって税金はどうなるんだろう？」――FXのスワップ投資を始めると、多くの方がこの疑問にぶつかります。為替差益に比べて地味に積み上がるスワップポイントですが、年単位で見るとかなりの金額になることも。そして当然、税務署はしっかり把握しています。申告漏れで後から追徴課税を受けないためにも、スワップポイントの課税ルールと正確な計算方法を今すぐ確認しておきましょう。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"スワップポイントとは\"\u003eスワップポイントとは\u003c/h2\u003e\n\u003cp\u003eスワップポイントとは、FX取引において2国間の政策金利の差（金利差）によって毎日発生する損益のことです。高金利の通貨を買い、低金利の通貨を売るポジションを保有し続けると、毎営業日ごとにスワップポイントが受け取れます（プラススワップ）。反対に、低金利通貨を買って高金利通貨を売る場合はスワップポイントを支払う形になります（マイナススワップ）。\u003c/p\u003e\n\u003cp\u003e代表的なプラススワップ通貨ペアとしては、メキシコペソ/円、南アフリカランド/円、トルコリラ/円などが挙げられます。これらの国の政策金利は日本よりも高いため、円を売ってその通貨を買うポジションを持つと、毎日スワップポイントを受け取れる仕組みです。\u003c/p\u003e\n\u003cp\u003eスワップポイントの額は、各FX業者が毎営業日に設定・公表しており、保有通貨量（ロット数）と日数に比例して積み上がっていきます。長期保有を前提とした「スワップ投資」は、為替変動リスクを抱えつつも安定したインカムゲインを狙う戦略として、個人投資家に広く活用されています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"スワップポイントに税金はかかる\"\u003eスワップポイントに税金はかかる？\u003c/h2\u003e\n\u003cp\u003e結論から言うと、\u003cstrong\u003eスワップポイントには税金がかかります\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003eFX取引による利益（為替差益およびスワップポイント損益）は、\u003cstrong\u003e申告分離課税\u003c/strong\u003eの対象です。税率は所得金額にかかわらず一律 \u003cstrong\u003e20.315%\u003c/strong\u003e（所得税15.315%＋住民税5%）です。\u003c/p\u003e\n\u003cp\u003e給与所得や事業所得などの「総合課税」とは別枠で計算するため、FXの利益が大きくても他の所得と合算して税率が上がることはありません。一方で、年間のFX取引損益（為替差益＋スワップポイント損益）が \u003cstrong\u003e20万円を超えた場合\u003c/strong\u003e、会社員であっても確定申告が必要です（年収2,000万円以下で他の副収入がない場合の目安）。\u003c/p\u003e\n\u003cp\u003eスワップポイントは「雑所得」に分類され、同一口座内の為替差益・差損と合算して申告します。なお、FX以外の金融商品（株式・投資信託など）とは損益通算できない点に注意してください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"決済時課税と未決済課税の違い\"\u003e決済時課税と未決済課税の違い\u003c/h2\u003e\n\u003cp\u003eスワップポイントの課税タイミングは、\u003cstrong\u003eFX業者の仕組みによって異なります\u003c/strong\u003e。これはスワップ投資において非常に重要なポイントです。\u003c/p\u003e\n\u003ch3 id=\"受取型決済時に課税\"\u003e受取型（決済時に課税）\u003c/h3\u003e\n\u003cp\u003e毎日発生したスワップポイントを、ポジション保有中から「受取済み」として口座残高に加算していくタイプです。この場合、スワップポイントは\u003cstrong\u003e発生した時点（各営業日ごと）で確定した利益\u003c/strong\u003eとみなされ、ポジションを決済する前であっても年間利益の集計対象に含まれます。多くの業者はこの方式を採用しています。\u003c/p\u003e\n\u003ch3 id=\"蓄積型ポジション決済時に課税\"\u003e蓄積型（ポジション決済時に課税）\u003c/h3\u003e\n\u003cp\u003eスワップポイントをポジションに内包する形で蓄積し、ポジションを決済した時点でまとめて利益確定とするタイプです。この場合、保有中のスワップポイントは決済するまで課税対象になりません。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e重要:\u003c/strong\u003e どちらの方式かは業者によって異なります。自分が使っているFX業者がどちらの方式かを必ず確認してください。判断の最も確実な方法は、\u003cstrong\u003e年間取引報告書（年間損益報告書）\u003c/strong\u003e を確認することです。業者は毎年1月から2月にかけてこの書類を発行します。確定申告の際はこの報告書をもとに申告内容を作成してください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"スワップ利益の年間税額を計算してみよう\"\u003eスワップ利益の年間税額を計算してみよう\u003c/h2\u003e\n\u003cp\u003e実際にスワップポイントにかかる税金を計算してみましょう。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e前提条件（例）\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e通貨ペア: メキシコペソ/円\u003c/li\u003e\n\u003cli\u003e保有数量: 10万通貨\u003c/li\u003e\n\u003cli\u003e1日あたりのスワップポイント: +200円\u003c/li\u003e\n\u003cli\u003e保有期間: 1年間（365日）\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e年間スワップポイント収益\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e200円 × 365日 = 73,000円\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e年間税額（申告分離課税 20.315%）\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e73,000円 × 20.315% = 14,830円（端数切捨て）\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eつまり、この条件で1年間スワップを積み上げた場合、約14,830円の税金が発生する計算になります。手取りのスワップ収益は73,000円 - 14,830円 = \u003cstrong\u003e約58,170円\u003c/strong\u003eです。\u003c/p\u003e\n\u003cp\u003eただし、為替差損が発生していた場合はその分が差し引かれます。逆に為替差益も加わればさらに税額が増えます。年間の正確な税額は為替差益・差損とスワップポイント損益を合算して計算する必要があります。\u003c/p\u003e\n\u003cp\u003e正確な税額計算は\u003ca href=\"https://productivity-works.com/ja/tools/fx-profit-calculator/\"\u003eFX利益計算ツール\u003c/a\u003e\nをご利用ください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"為替差益とスワップを合算して申告\"\u003e為替差益とスワップを合算して申告\u003c/h2\u003e\n\u003cp\u003eFX取引の確定申告では、\u003cstrong\u003e為替差益（差損）とスワップポイント損益を合算した年間損益\u003c/strong\u003eを申告します。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e年間損益 = 為替差益（差損）+ スワップポイント収益（損失）\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eたとえば、年間を通じて以下のような結果だったとします。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e金額\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e為替差益\u003c/td\u003e\n          \u003ctd\u003e+150,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eスワップポイント収益\u003c/td\u003e\n          \u003ctd\u003e+73,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e年間合計損益\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e+223,000円\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eこの場合、223,000円 × 20.315% = 約45,302円が納税額となります。\u003c/p\u003e","title":"FXのスワップポイントに税金はかかる？計算方法と確定申告の注意点"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nクレジットカードおすすめ2026年版｜目的別に最適な1枚を選ぶ 「クレジットカードが多すぎて、どれを選べばいいかわからない」——これは2026年現在、もっとも多い金融系の悩みの一つです。日本国内だけで1,000種類以上のクレジットカードが発行されており、還元率・年会費・特典・付帯保険のすべてが異なります。\nこの記事では目的別に本当におすすめできるカードを厳選し、比較表付きで解説します。\nクレジットカードを選ぶ5つの基準 カード選びで失敗しないために、以下の5つの軸で比較しましょう。\n基準 重要な理由 年会費 年間コストが還元額を上回ると損 還元率 0.5%と1.0%の差は年間数万円の差になる ポイントの使いやすさ 使い道が限定的なポイントは実質価値が低い 付帯保険 海外旅行保険や購入品保護は高額カードの大きな強み 対応電子マネー QUICPay・iD・Suica対応など生活動線に合うか 【年会費無料】コスパ最強カード TOP3 1. 楽天カード 項目 内容 年会費 永年無料 還元率 1.0%（楽天市場で3.0%以上） ポイント 楽天ポイント（1P=1円、投資にも使える） 電子マネー 楽天Edy、QUICPay 付帯保険 海外旅行傷害保険（利用付帯） おすすめの人: 楽天市場をよく使う方、投資を始めたい方（楽天証券でポイント投資可能）\n楽天経済圏の方にとっては還元率の上乗せが圧倒的です。楽天証券でのクレカ積立にも対応しており、毎月の積立でさらにポイントが貯まります。\n楽天カードを申し込む（年会費永年無料） 関連記事: SBI証券と楽天証券を徹底比較2026 2. 三井住友カード(NL) 項目 内容 年会費 永年無料 還元率 0.5%（対象コンビニ・飲食店でタッチ決済最大7%） ポイント Vポイント（1P=1円、SBI証券投資に使える） 電子マネー iD、Apple Pay、Google Pay 付帯保険 海外旅行傷害保険（利用付帯、最大2,000万円） おすすめの人: コンビニ・飲食店をよく使う方、SBI証券ユーザー\nセブン-イレブン・ローソン・マクドナルドなどの対象店舗でVisaタッチ決済を使うと最大7%還元。日常使いの還元率が圧倒的に高いです。SBI証券のクレカ積立にも対応。\n3. JCBカードW 項目 内容 年会費 永年無料（39歳以下限定で申込可） 還元率 1.0%（Amazon・セブン-イレブンで2.0%） ポイント Oki Dokiポイント（nanacoやAmazonポイントに交換可） 電子マネー QUICPay 付帯保険 海外旅行傷害保険（利用付帯、最大2,000万円） おすすめの人: 39歳以下でAmazonをよく使う方\n年齢制限がある代わりに、年会費無料で還元率1.0%という高水準。Amazon利用時は2.0%還元になるため、ネット通販メインの若年層に最適です。\n【高還元率】ポイントを最大限貯めたい方向け リクルートカード 項目 内容 年会費 永年無料 還元率 1.2%（年会費無料カードで最高水準） ポイント リクルートポイント → Pontaポイントに交換可 特徴: 年会費無料カードの中で最高の基本還元率。どこで使っても1.2%還元。じゃらん・ホットペッパーではさらに上乗せ。Pontaポイント経由でau PAYマーケットやローソンでも使えます。\nPayPayカード 項目 内容 年会費 永年無料 還元率 1.0%（PayPay残高チャージで二重取り可） ポイント PayPayポイント 特徴: PayPayユーザーなら必携。カード利用1.0% + PayPay決済の還元で実質1.5%以上の還元率に。Yahoo!ショッピングでは5%以上の還元も。\n【ゴールドカード】ワンランク上のサービスを求める方向け 三井住友カード ゴールド(NL) 項目 内容 年会費 5,500円（年間100万円利用で翌年以降永年無料） 還元率 0.5%（対象店舗タッチ決済で最大7%） 特典 年100万円利用で10,000ポイントボーナス（実質還元率1.5%） 付帯保険 海外旅行傷害保険（最大2,000万円）、国内ショッピング保険 おすすめの人: 年間100万円以上カード決済する方\n年間100万円利用の条件をクリアすれば年会費永年無料+10,000ポイントボーナスで、実質還元率が1.5%に。SBI証券のクレカ積立還元率も1.0%にアップ。\n楽天プレミアムカード 項目 内容 年会費 11,000円 還元率 1.0%（楽天市場で5.0%以上） 特典 プライオリティ・パス（世界1,300以上の空港ラウンジ無料） 付帯保険 海外旅行保険（自動付帯、最大5,000万円） おすすめの人: 海外出張・旅行が多い楽天ユーザー\nプライオリティ・パスだけで年会費の元が取れます（通常年会費$469）。楽天市場での還元率も5%以上と驚異的。\n【ビジネスカード】フリーランス・個人事業主向け 三井住友カード ビジネスオーナーズ 項目 内容 年会費 永年無料 還元率 0.5%（個人カード併用で対象店舗1.5%） 限度額 最大500万円 おすすめの人: 経費管理を効率化したいフリーランス\n個人カードと法人カードの経費を自動分離。freeeやマネーフォワードとの連携で確定申告の仕訳が劇的に楽になります。\n関連記事: フリーランス確定申告のやり方 完全ガイド freeeカード（旧ライフカードビジネスライト） 項目 内容 年会費 永年無料 還元率 0.5%（freee利用で特典あり） 特典 freee会計と自動連携、開業直後でも審査通過しやすい おすすめの人: freee会計を使っている、または使う予定のフリーランス\n開業1年目でも審査に通りやすいのが最大の強み。freee会計との自動連携で、経費入力の手間がほぼゼロに。\n関連記事: AIを使ったフリーランス確定申告完全ガイド2026 【マイル特化】旅行好き・出張が多い方向け ANAカード（一般） 項目 内容 年会費 2,200円（初年度無料） マイル還元率 0.5%（10マイルコース加入で1.0%、年5,500円） ボーナスマイル 入会・継続で1,000マイル、搭乗ボーナス+10% JALカード（普通カード） 項目 内容 年会費 2,200円（初年度無料） マイル還元率 0.5%（ショッピングマイル・プレミアム加入で1.0%、年4,950円） ボーナスマイル 入会1,000マイル、毎年初回搭乗1,000マイル ANA vs JAL選びの基準: 普段よく使う航空会社に合わせましょう。路線カバー率はANA・JALでほぼ同等。マイルの有効期限はANAが3年、JALも3年です。\nタイプ別おすすめまとめ あなたのタイプ おすすめカード 楽天経済圏 楽天カード コンビニ・飲食店が多い 三井住友カード(NL) Amazon中心のネット通販 JCBカードW とにかく高還元率 リクルートカード（1.2%） PayPayユーザー PayPayカード 年100万円以上使う 三井住友カード ゴールド(NL) フリーランス・個人事業主 三井住友カード ビジネスオーナーズ 海外旅行好き 楽天プレミアムカード ANAマイラー ANAカード JALマイラー JALカード よくある質問（FAQ） Q1. クレジットカードは何枚持つのが理想？ メインカード1枚 + サブカード1枚の2枚持ちが管理しやすくおすすめです。目的別に使い分けることで還元率を最大化できます。\nQ2. 年会費有料カードは損ですか？ 還元率・特典で年会費以上の価値を得られるなら損ではありません。三井住友ゴールド(NL)は年100万円利用で年会費無料になるため、実質負担ゼロです。\nQ3. 審査に通りやすいカードは？ 楽天カード・PayPayカードは審査基準が比較的緩やかです。学生・フリーランスでも作れることが多いです。\nQ4. ポイント還元率と実質的な価値は同じ？ 必ずしも同じではありません。ポイントの交換先によって1ポイントの実質価値が変わります。楽天ポイントやVポイントは1P=1円で使えるため実質価値が高いです。\nQ5. キャッシュレス決済との併用はどうすれば？ クレジットカードをQUICPayやiDに紐付けてスマホ決済すると、カード還元 + 店舗キャンペーンの二重取りが可能な場合があります。\nまとめ クレジットカード選びで最も重要なのは自分の生活スタイルに合ったカードを選ぶことです。還元率だけでなく、どこで使うか・ポイントの使い道・年会費のバランスを考えましょう。\n迷ったらまずは楽天カード（楽天ユーザー）か三井住友カード(NL)（コンビニ・飲食店ユーザー）から始めるのが王道です。どちらも年会費無料で、使いながら自分に合ったカードが見えてきます。\nクレジットカードのポイントを投資に活用したいなら、楽天証券 がおすすめです。楽天カードのクレカ積立でNISA口座への毎月の投資が可能で、積立額に応じて楽天ポイントも貯まります。NISA口座の開設も無料で簡単にできます。\n関連記事: 新NISAの始め方 初心者向け完全ガイド2026 ※本記事は情報提供を目的としており、特定のクレジットカードの契約を推奨するものではありません。最新情報・詳細な条件は各カード会社の公式サイトでご確認ください。\n関連ツール リボ払いの返済計画を立てる → 借金返済シミュレーター 手取り額から支出配分を計算 → 家計簿シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 関連テンプレート 家計管理・資産運用をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す ","permalink":"https://productivity-works.com/ja/posts/credit-card-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"クレジットカードおすすめ2026年版目的別に最適な1枚を選ぶ\"\u003eクレジットカードおすすめ2026年版｜目的別に最適な1枚を選ぶ\u003c/h1\u003e\n\u003cp\u003e「クレジットカードが多すぎて、どれを選べばいいかわからない」——これは2026年現在、もっとも多い金融系の悩みの一つです。日本国内だけで1,000種類以上のクレジットカードが発行されており、還元率・年会費・特典・付帯保険のすべてが異なります。\u003c/p\u003e\n\u003cp\u003eこの記事では\u003cstrong\u003e目的別に本当におすすめできるカード\u003c/strong\u003eを厳選し、比較表付きで解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"クレジットカードを選ぶ5つの基準\"\u003eクレジットカードを選ぶ5つの基準\u003c/h2\u003e\n\u003cp\u003eカード選びで失敗しないために、以下の5つの軸で比較しましょう。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e基準\u003c/th\u003e\n          \u003cth\u003e重要な理由\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e年会費\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e年間コストが還元額を上回ると損\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e還元率\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0.5%と1.0%の差は年間数万円の差になる\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eポイントの使いやすさ\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e使い道が限定的なポイントは実質価値が低い\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e付帯保険\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e海外旅行保険や購入品保護は高額カードの大きな強み\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e対応電子マネー\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eQUICPay・iD・Suica対応など生活動線に合うか\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"年会費無料コスパ最強カード-top3\"\u003e【年会費無料】コスパ最強カード TOP3\u003c/h2\u003e\n\u003ch3 id=\"1-楽天カード\"\u003e1. 楽天カード\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e年会費\u003c/td\u003e\n          \u003ctd\u003e永年無料\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e還元率\u003c/td\u003e\n          \u003ctd\u003e1.0%（楽天市場で3.0%以上）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eポイント\u003c/td\u003e\n          \u003ctd\u003e楽天ポイント（1P=1円、投資にも使える）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e電子マネー\u003c/td\u003e\n          \u003ctd\u003e楽天Edy、QUICPay\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e付帯保険\u003c/td\u003e\n          \u003ctd\u003e海外旅行傷害保険（利用付帯）\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e 楽天市場をよく使う方、投資を始めたい方（楽天証券でポイント投資可能）\u003c/p\u003e\n\u003cp\u003e楽天経済圏の方にとっては還元率の上乗せが圧倒的です。楽天証券でのクレカ積立にも対応しており、毎月の積立でさらにポイントが貯まります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://hb.afl.rakuten.co.jp/hsc/53c8dc96.d22afdc6.53c8dc97.8a98bffe/?link_type=text\u0026amp;ut=eyJwYWdlIjoic2hvcCIsInR5cGUiOiJ0ZXh0IiwiY29sIjoxLCJjYXQiOjEsImJhbiI6Im5hbWUiLCJhbXAiOmZhbHNlfQ%3D%3D\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e楽天カードを申し込む（年会費永年無料）\u003c/a\u003e\n\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://productivity-works.com/ja/posts/sbi-rakuten-hikaku-2026/\"\u003e関連記事: SBI証券と楽天証券を徹底比較2026\u003c/a\u003e\n\u003c/p\u003e\n\u003ch3 id=\"2-三井住友カードnl\"\u003e2. 三井住友カード(NL)\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e年会費\u003c/td\u003e\n          \u003ctd\u003e永年無料\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e還元率\u003c/td\u003e\n          \u003ctd\u003e0.5%（対象コンビニ・飲食店でタッチ決済最大7%）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eポイント\u003c/td\u003e\n          \u003ctd\u003eVポイント（1P=1円、SBI証券投資に使える）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e電子マネー\u003c/td\u003e\n          \u003ctd\u003eiD、Apple Pay、Google Pay\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e付帯保険\u003c/td\u003e\n          \u003ctd\u003e海外旅行傷害保険（利用付帯、最大2,000万円）\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e コンビニ・飲食店をよく使う方、SBI証券ユーザー\u003c/p\u003e\n\u003cp\u003eセブン-イレブン・ローソン・マクドナルドなどの対象店舗でVisaタッチ決済を使うと最大7%還元。日常使いの還元率が圧倒的に高いです。SBI証券のクレカ積立にも対応。\u003c/p\u003e\n\u003ch3 id=\"3-jcbカードw\"\u003e3. JCBカードW\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e年会費\u003c/td\u003e\n          \u003ctd\u003e永年無料（39歳以下限定で申込可）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e還元率\u003c/td\u003e\n          \u003ctd\u003e1.0%（Amazon・セブン-イレブンで2.0%）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eポイント\u003c/td\u003e\n          \u003ctd\u003eOki Dokiポイント（nanacoやAmazonポイントに交換可）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e電子マネー\u003c/td\u003e\n          \u003ctd\u003eQUICPay\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e付帯保険\u003c/td\u003e\n          \u003ctd\u003e海外旅行傷害保険（利用付帯、最大2,000万円）\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e 39歳以下でAmazonをよく使う方\u003c/p\u003e","title":"クレジットカード おすすめ2026年版！目的別に徹底比較【初心者向け】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n副業を始めたばかりのころ、多くの人がマネーフォワードMEやZaimといった家計簿アプリで収支を記録しています。月1〜2万円程度の収入なら、それで十分かもしれません。しかし副業収入が月10万円を超えてくると、話が変わってきます。\n税務上の義務が生まれ、経費の管理が必要になり、確定申告の書類を自分で作らなければならなくなる。このタイミングで家計簿アプリに頼り続けていると、申告ミスや無駄な税負担といった痛いしっぺ返しが待っています。\nこの記事では、家計簿アプリの限界と、freee会計に切り替えるべき具体的な理由・タイミング・手順を解説します。\n家計簿アプリの限界 家計簿アプリは「個人の消費管理」を目的として設計されています。そのため、副業やフリーランスの収益管理に使うと、いくつかの根本的な壁にぶつかります。\n複式簿記に対応していない 日本の青色申告（65万円控除）では「正規の簿記の原則」、つまり複式簿記での記帳が必須です。家計簿アプリは単式簿記（入出金の記録）しか対応していないため、青色申告の最大控除を受けることができません。\n白色申告や青色申告（10万円控除）であれば単式簿記でも可能ですが、そうなると節税効果が大幅に落ちます。月10万円超の副業収入があるなら、65万円控除を取れるかどうかは税負担に直結します。\n事業経費の管理ができない 副業で稼ぐためにかかった費用——パソコン購入費、通信費、書籍代、交通費——は事業経費として計上できます。しかし家計簿アプリでは、これらを「プライベートの支出」と「事業の経費」に明確に分けて管理する機能がありません。\n税務調査で「この支出はなぜ経費にしたのか」と問われたとき、家計簿アプリのデータでは証明できません。\n確定申告書類を出力できない 最大の問題がこれです。家計簿アプリでいくら記録を積み上げても、確定申告に必要な「青色申告決算書」や「収支内訳書」を直接出力することはできません。結局、別のツールやExcelに転記し直す作業が発生します。月10万円超の収入があれば記録件数も相応に増えており、この転記作業は相当な手間になります。\nfreeeに切り替えるべき5つの理由 1. 青色申告65万円控除が取れる freee会計は複式簿記に対応しており、適切に記帳すれば青色申告の65万円控除を受けることができます。所得税の実効税率が20%の場合、65万円×20%＝13万円の節税効果。年間のfreee利用料（スタータープランで年額14,160円）を差し引いても、十分に元が取れる計算です。\n2. 銀行口座・クレジットカードの自動連携 freeeは国内の主要な銀行口座やクレジットカードと自動連携できます。口座明細を自動で取り込み、「これは交通費」「これは書籍代」といった勘定科目の候補をAIが提示してくれます。一度設定すれば、毎月の記帳にかかる時間を大幅に削減できます。\n副業収入の入金確認から経費の仕分けまで、ほぼ自動化できるのは家計簿アプリとの大きな違いです。\n3. 確定申告書類を自動生成 1年間の入力が終われば、freeeは青色申告決算書・損益計算書・貸借対照表などの申告書類を自動で作成します。税務署に提出する形式そのままで出力されるため、手書きや転記作業は不要です。\n4. e-Taxで直接送信できる freeeはe-Tax（国税電子申告）と連携しており、作成した申告書類をそのまま税務署にオンライン送信できます。税務署に出向く必要も、郵送する必要もありません。マイナンバーカードまたはID・パスワード方式で手続きが完結します。\n5. レシート撮影で経費登録 スマートフォンのカメラでレシートを撮影するだけで、金額・日付・取引先をOCRで読み取り、経費として登録できます。財布の中にレシートをためておく必要がなく、領収書の紛失リスクも減ります。外出先での経費処理がその場で完結するのは、副業を掛け持ちしている人にとって特に便利な機能です。\n切り替えのベストタイミング 「年の途中から切り替えるのは面倒では？」という疑問を持つ方も多いですが、freeeへの切り替えは年の途中でも問題なく行えます。\n1月1日スタートが理想\n税務上の事業年度は1月1日〜12月31日（個人事業主の場合）なので、1月から始めると1年間のデータが完結します。毎年10〜12月頃にfreeeの無料トライアルを試しておき、翌1月から本格稼働するのが最もスムーズな流れです。\n年の途中でも切り替えOK\n副業収入が増えてきた月から切り替えることも可能です。それ以前の期間は手動で入力するか、家計簿アプリのデータを参照しながら補完します。少し手間はかかりますが、「来年まで待つ」よりも早く正確な記帳環境を整えるほうが長期的にはメリットが大きいです。特に収入が増加傾向にある場合は、先延ばしにするほど後から遡って入力する量が増えます。\n家計簿アプリからfreeeへの移行手順（3ステップ） 移行は思ったより簡単です。以下の3ステップで進められます。\nステップ1：freeeの無料トライアルで操作感を確認 まず、freee会計 の30日間無料トライアルに登録します。クレジットカード登録不要で始められるので、費用を気にせず試せます。\n試用期間中に「取引の入力」「銀行連携の設定」「レシート撮影」の3つの操作を一通り体験しておくと、本番移行後に迷うことがありません。\nステップ2：銀行口座・クレカを連携して過去データを取り込む 口座連携を設定すると、過去90日〜180日分（金融機関による）の明細が自動で取り込まれます。これを仕分けしていくことで、移行前の取引も記帳できます。移行日以前のデータをどこまで遡るかは、事業の開始時期や申告の必要性に応じて判断してください。\nステップ3：事業開始届・青色申告承認申請書を提出する まだ個人事業主として開業届を出していない場合は、税務署への「開業届」と「青色申告承認申請書」の提出が必要です。青色申告承認申請書は、承認を受けたい年の3月15日まで（その年の1月16日以降に開業した場合は開業から2か月以内）に提出する必要があります。freeeの画面上からこれらの書類を作成・印刷することも可能です。\nfreeeの料金は元が取れる？ freee会計のスタータープランは月額1,480円（年払いの場合、月換算で月額1,180円・年額14,160円）です。この費用が節税効果に見合うかどうかを考えてみましょう。\n青色申告65万円控除の節税効果は、所得税率と住民税率によって変わります。副業収入が月10万円（年120万円）で、給与所得と合算した課税所得が330万円超695万円以下の場合、所得税率は20%です。\n65万円 × 所得税20% ＝ 130,000円 65万円 × 住民税10% ＝ 65,000円 合計節税効果：約195,000円 年間のfreee利用料14,160円と比べると、節税効果のほうが約13倍大きい計算になります。\nもちろん、実際の節税額は所得水準や他の控除の状況によって変わります。あなたの節税額は副業税金計算ツール で確認できます。\nまとめ 副業収入が月10万円を超えたら、家計簿アプリでの管理には限界があります。複式簿記への非対応、事業経費の管理不可、確定申告書類の出力不可——これら3つの壁が、確実に手間と税負担の増加につながります。\nfreeeに切り替えることで得られるメリットは明確です。\n青色申告65万円控除による年間最大19万円超の節税 銀行・クレカ連携による記帳の自動化 確定申告書類の自動生成とe-Tax送信 レシート撮影による経費登録の簡略化 年間14,160円のコストに対し、節税効果は10倍以上になるケースがほとんどです。切り替えを迷っている理由が「面倒そう」だとすれば、30日間の無料トライアルで実際に触ってみることが一番の答えになります。\nまずは家計簿シミュレーター で現在の収支を整理してみましょう。副業収入と経費の全体像が見えてから、freeeへの移行を検討すると判断がしやすくなります。\n準備ができたら、freee会計を無料で試す ことから始めてください。30日間、費用なしで全機能を使えます。\n関連ツール 副業の税金を計算 → 副業税金計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター 関連記事 副業フリーランスがfreeeで青色申告65万控除を取る方法 freee vs マネーフォワード：副業向け会計ソフト比較 AI×確定申告 フリーランス完全自動化ガイド2026 副業フリーランスの確定申告のやり方2026 フリーランス確定申告のやり方：完全ガイド 本記事は2026年5月時点の情報に基づいています。税制や料金は変更される場合があります。個別の税務相談については税理士にご確認ください。\n","permalink":"https://productivity-works.com/ja/posts/kakeibo-freee-kirikae-fukugyou/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e副業を始めたばかりのころ、多くの人がマネーフォワードMEやZaimといった家計簿アプリで収支を記録しています。月1〜2万円程度の収入なら、それで十分かもしれません。しかし副業収入が月10万円を超えてくると、話が変わってきます。\u003c/p\u003e\n\u003cp\u003e税務上の義務が生まれ、経費の管理が必要になり、確定申告の書類を自分で作らなければならなくなる。このタイミングで家計簿アプリに頼り続けていると、申告ミスや無駄な税負担といった痛いしっぺ返しが待っています。\u003c/p\u003e\n\u003cp\u003eこの記事では、家計簿アプリの限界と、freee会計に切り替えるべき具体的な理由・タイミング・手順を解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"家計簿アプリの限界\"\u003e家計簿アプリの限界\u003c/h2\u003e\n\u003cp\u003e家計簿アプリは「個人の消費管理」を目的として設計されています。そのため、副業やフリーランスの収益管理に使うと、いくつかの根本的な壁にぶつかります。\u003c/p\u003e\n\u003ch3 id=\"複式簿記に対応していない\"\u003e複式簿記に対応していない\u003c/h3\u003e\n\u003cp\u003e日本の青色申告（65万円控除）では「正規の簿記の原則」、つまり複式簿記での記帳が必須です。家計簿アプリは単式簿記（入出金の記録）しか対応していないため、青色申告の最大控除を受けることができません。\u003c/p\u003e\n\u003cp\u003e白色申告や青色申告（10万円控除）であれば単式簿記でも可能ですが、そうなると節税効果が大幅に落ちます。月10万円超の副業収入があるなら、65万円控除を取れるかどうかは税負担に直結します。\u003c/p\u003e\n\u003ch3 id=\"事業経費の管理ができない\"\u003e事業経費の管理ができない\u003c/h3\u003e\n\u003cp\u003e副業で稼ぐためにかかった費用——パソコン購入費、通信費、書籍代、交通費——は事業経費として計上できます。しかし家計簿アプリでは、これらを「プライベートの支出」と「事業の経費」に明確に分けて管理する機能がありません。\u003c/p\u003e\n\u003cp\u003e税務調査で「この支出はなぜ経費にしたのか」と問われたとき、家計簿アプリのデータでは証明できません。\u003c/p\u003e\n\u003ch3 id=\"確定申告書類を出力できない\"\u003e確定申告書類を出力できない\u003c/h3\u003e\n\u003cp\u003e最大の問題がこれです。家計簿アプリでいくら記録を積み上げても、確定申告に必要な「青色申告決算書」や「収支内訳書」を直接出力することはできません。結局、別のツールやExcelに転記し直す作業が発生します。月10万円超の収入があれば記録件数も相応に増えており、この転記作業は相当な手間になります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"freeeに切り替えるべき5つの理由\"\u003efreeeに切り替えるべき5つの理由\u003c/h2\u003e\n\u003ch3 id=\"1-青色申告65万円控除が取れる\"\u003e1. 青色申告65万円控除が取れる\u003c/h3\u003e\n\u003cp\u003efreee会計は複式簿記に対応しており、適切に記帳すれば青色申告の65万円控除を受けることができます。所得税の実効税率が20%の場合、65万円×20%＝13万円の節税効果。年間のfreee利用料（スタータープランで年額14,160円）を差し引いても、十分に元が取れる計算です。\u003c/p\u003e\n\u003ch3 id=\"2-銀行口座クレジットカードの自動連携\"\u003e2. 銀行口座・クレジットカードの自動連携\u003c/h3\u003e\n\u003cp\u003efreeeは国内の主要な銀行口座やクレジットカードと自動連携できます。口座明細を自動で取り込み、「これは交通費」「これは書籍代」といった勘定科目の候補をAIが提示してくれます。一度設定すれば、毎月の記帳にかかる時間を大幅に削減できます。\u003c/p\u003e\n\u003cp\u003e副業収入の入金確認から経費の仕分けまで、ほぼ自動化できるのは家計簿アプリとの大きな違いです。\u003c/p\u003e\n\u003ch3 id=\"3-確定申告書類を自動生成\"\u003e3. 確定申告書類を自動生成\u003c/h3\u003e\n\u003cp\u003e1年間の入力が終われば、freeeは青色申告決算書・損益計算書・貸借対照表などの申告書類を自動で作成します。税務署に提出する形式そのままで出力されるため、手書きや転記作業は不要です。\u003c/p\u003e\n\u003ch3 id=\"4-e-taxで直接送信できる\"\u003e4. e-Taxで直接送信できる\u003c/h3\u003e\n\u003cp\u003efreeeはe-Tax（国税電子申告）と連携しており、作成した申告書類をそのまま税務署にオンライン送信できます。税務署に出向く必要も、郵送する必要もありません。マイナンバーカードまたはID・パスワード方式で手続きが完結します。\u003c/p\u003e\n\u003ch3 id=\"5-レシート撮影で経費登録\"\u003e5. レシート撮影で経費登録\u003c/h3\u003e\n\u003cp\u003eスマートフォンのカメラでレシートを撮影するだけで、金額・日付・取引先をOCRで読み取り、経費として登録できます。財布の中にレシートをためておく必要がなく、領収書の紛失リスクも減ります。外出先での経費処理がその場で完結するのは、副業を掛け持ちしている人にとって特に便利な機能です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"切り替えのベストタイミング\"\u003e切り替えのベストタイミング\u003c/h2\u003e\n\u003cp\u003e「年の途中から切り替えるのは面倒では？」という疑問を持つ方も多いですが、freeeへの切り替えは年の途中でも問題なく行えます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1月1日スタートが理想\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e税務上の事業年度は1月1日〜12月31日（個人事業主の場合）なので、1月から始めると1年間のデータが完結します。毎年10〜12月頃にfreeeの無料トライアルを試しておき、翌1月から本格稼働するのが最もスムーズな流れです。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e年の途中でも切り替えOK\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e副業収入が増えてきた月から切り替えることも可能です。それ以前の期間は手動で入力するか、家計簿アプリのデータを参照しながら補完します。少し手間はかかりますが、「来年まで待つ」よりも早く正確な記帳環境を整えるほうが長期的にはメリットが大きいです。特に収入が増加傾向にある場合は、先延ばしにするほど後から遡って入力する量が増えます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"家計簿アプリからfreeeへの移行手順3ステップ\"\u003e家計簿アプリからfreeeへの移行手順（3ステップ）\u003c/h2\u003e\n\u003cp\u003e移行は思ったより簡単です。以下の3ステップで進められます。\u003c/p\u003e\n\u003ch3 id=\"ステップ1freeeの無料トライアルで操作感を確認\"\u003eステップ1：freeeの無料トライアルで操作感を確認\u003c/h3\u003e\n\u003cp\u003eまず、\u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計\u003c/a\u003e\nの30日間無料トライアルに登録します。クレジットカード登録不要で始められるので、費用を気にせず試せます。\u003c/p\u003e\n\u003cp\u003e試用期間中に「取引の入力」「銀行連携の設定」「レシート撮影」の3つの操作を一通り体験しておくと、本番移行後に迷うことがありません。\u003c/p\u003e\n\u003ch3 id=\"ステップ2銀行口座クレカを連携して過去データを取り込む\"\u003eステップ2：銀行口座・クレカを連携して過去データを取り込む\u003c/h3\u003e\n\u003cp\u003e口座連携を設定すると、過去90日〜180日分（金融機関による）の明細が自動で取り込まれます。これを仕分けしていくことで、移行前の取引も記帳できます。移行日以前のデータをどこまで遡るかは、事業の開始時期や申告の必要性に応じて判断してください。\u003c/p\u003e\n\u003ch3 id=\"ステップ3事業開始届青色申告承認申請書を提出する\"\u003eステップ3：事業開始届・青色申告承認申請書を提出する\u003c/h3\u003e\n\u003cp\u003eまだ個人事業主として開業届を出していない場合は、税務署への「開業届」と「青色申告承認申請書」の提出が必要です。青色申告承認申請書は、承認を受けたい年の3月15日まで（その年の1月16日以降に開業した場合は開業から2か月以内）に提出する必要があります。freeeの画面上からこれらの書類を作成・印刷することも可能です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"freeeの料金は元が取れる\"\u003efreeeの料金は元が取れる？\u003c/h2\u003e\n\u003cp\u003efreee会計のスタータープランは月額1,480円（年払いの場合、月換算で月額1,180円・年額14,160円）です。この費用が節税効果に見合うかどうかを考えてみましょう。\u003c/p\u003e\n\u003cp\u003e青色申告65万円控除の節税効果は、所得税率と住民税率によって変わります。副業収入が月10万円（年120万円）で、給与所得と合算した課税所得が330万円超695万円以下の場合、所得税率は20%です。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e65万円 × 所得税20% ＝ 130,000円\u003c/li\u003e\n\u003cli\u003e65万円 × 住民税10% ＝ 65,000円\u003c/li\u003e\n\u003cli\u003e合計節税効果：約195,000円\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e年間のfreee利用料14,160円と比べると、節税効果のほうが約13倍大きい計算になります。\u003c/p\u003e\n\u003cp\u003eもちろん、実際の節税額は所得水準や他の控除の状況によって変わります。あなたの節税額は\u003ca href=\"https://productivity-works.com/ja/tools/fukugyou-tax-calculator/\"\u003e副業税金計算ツール\u003c/a\u003e\nで確認できます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"まとめ\"\u003eまとめ\u003c/h2\u003e\n\u003cp\u003e副業収入が月10万円を超えたら、家計簿アプリでの管理には限界があります。複式簿記への非対応、事業経費の管理不可、確定申告書類の出力不可——これら3つの壁が、確実に手間と税負担の増加につながります。\u003c/p\u003e\n\u003cp\u003efreeeに切り替えることで得られるメリットは明確です。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e青色申告65万円控除による年間最大19万円超の節税\u003c/li\u003e\n\u003cli\u003e銀行・クレカ連携による記帳の自動化\u003c/li\u003e\n\u003cli\u003e確定申告書類の自動生成とe-Tax送信\u003c/li\u003e\n\u003cli\u003eレシート撮影による経費登録の簡略化\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e年間14,160円のコストに対し、節税効果は10倍以上になるケースがほとんどです。切り替えを迷っている理由が「面倒そう」だとすれば、30日間の無料トライアルで実際に触ってみることが一番の答えになります。\u003c/p\u003e","title":"家計簿アプリから卒業：収入が月10万円超えたらfreeeに切り替える理由"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nFXで損失が出た年に「確定申告をしなくていい」と思っている方は多いですが、それは大きな機会損失です。損失が出た年こそ確定申告をすることで、翌年以降に利益が出たときの税金をゼロにできる可能性があります。この仕組みが「繰越控除」です。\n本記事ではFX損失の繰越控除の仕組み・条件・具体的な申告手順を、会社員・個人投資家の方にもわかりやすく解説します。\nFXの繰越控除とは FXの取引で生じた損失は、翌年以降最大3年間にわたって繰り越し、将来の利益と相殺することができます。これを「先物取引の差金等決済に係る損失の繰越控除」といいます（租税特別措置法第41条の15の2）。\n仕組みを図で整理すると次のとおりです。\n1年目: FX損失 50万円 → 確定申告して損失を記録 ↓ 2年目: FX利益 30万円 → 繰越損失50万円と相殺 → 課税所得ゼロ（残り損失20万円） ↓ 3年目: FX利益 40万円 → 残り損失20万円と相殺 → 課税所得20万円のみ 通常、FXの利益には申告分離課税として一律20.315%（所得税15%＋復興特別所得税0.315%＋住民税5%）が課されます。繰越控除を使えば課税される利益を圧縮できるため、実質的な税負担を大きく減らせます。\nなお、FXの繰越控除は「先物取引に係る雑所得等」の区分で処理されます。給与所得や事業所得とは別枠の申告分離課税であり、他の所得との損益通算は原則できません（詳細は後述）。\n繰越控除でいくら節税できる？具体例 具体的な数字で節税効果を確認しましょう。\nケーススタディ（3年間） 年度 取引結果 繰越控除あり 繰越控除なし 1年目 損失 50万円 確定申告→損失繰越 申告不要（損失なので） 2年目 利益 30万円 繰越損失50万円と相殺→課税所得ゼロ→税額 0円 30万円に課税→税額 60,945円 3年目 利益 40万円 残り損失20万円と相殺→課税所得20万円→税額 40,630円 40万円に課税→税額 81,260円 合計 — 税額合計 40,630円 税額合計 142,205円 税額の計算式: 課税所得 × 20.315%（小数点以下切り捨て）\n繰越控除を使うことで、3年間の合計税額が 142,205円 → 40,630円 となり、差額 101,575円の節税になります。\n計算の前提 2年目・3年目の利益はFXのみ（他の先物等はなし） 住民税5%を含む20.315%で計算 復興特別所得税（2.1%上乗せ）込みの税率を使用 FX以外の先物・CFDの損益がある場合は合算して計算します。詳しい損益計算はFX利益計算ツール をご活用ください。\n繰越控除の3つの条件 FXの損失繰越控除を受けるには、以下の3条件をすべて満たす必要があります。\n条件1: 損失が発生した年に確定申告をする 損失が出た年に確定申告をしていないと、その損失は繰り越せません。「どうせ損失だから申告不要」と判断するのは誤りです。損失が出た年も必ず確定申告が必要です。\n条件2: 「先物取引に係る雑所得等」の区分で申告する FXの損益は「先物取引に係る雑所得等」として申告分離課税で処理します。FXのほかに株式・投資信託の損失は同じ区分では扱えません（区分が異なります）。FXで生じた損失を正しい区分で記載することが必要です。\n条件3: 損失発生から3年以内に繰越申告をする 損失は最大3年間しか繰り越せません。4年目以降には持ち越せないため、損失発生年から3年以内に利益と相殺することが節税の前提です。また、繰越期間中も毎年確定申告を続ける必要があります（利益がゼロの年でも申告が必要です）。\n損益通算できるもの・できないもの FXの損失は「先物取引に係る雑所得等」の区分内でのみ損益通算が可能です。他の所得区分とは通算できません。\n損益通算できるもの（同一区分内） 金融商品 通算可否 FX（外国為替証拠金取引） 可 CFD取引（差金決済取引） 可 国内商品先物取引 可 海外商品先物取引 可 損益通算できないもの 金融商品 通算不可の理由 上場株式・ETF 申告分離課税だが区分が「株式等に係る譲渡所得等」で異なる 投資信託（特定口座） 同上 NISA口座での損失 損失そのものが税務上存在しないとみなされる 給与所得・事業所得 総合課税区分との通算は不可 仮想通貨（暗号資産） 総合課税の雑所得区分で異なる NISAで損失が出ても繰越控除は使えない点に注意が必要です。NISAとFXの税制の違いについてはNISA・FX税制の比較記事 も参考にしてください。\n繰越控除の確定申告手順 FXの損失繰越控除は、以下の流れで申告します。\nステップ1: 年間取引報告書を取得する FX口座を提供している証券会社・FX会社から年間取引報告書を取得します。多くの会社ではマイページからPDF形式でダウンロードできます。この書類に年間の損益合計が記載されています。\nステップ2: e-Taxまたは書面で申告書を作成する 国税庁の確定申告書等作成コーナー（e-Tax）にアクセスし、「申告書の種類を選択」の画面で**申告書B（第一表・第二表）＋申告書第三表（分離課税用）**を選択します。\n「先物取引に係る雑所得等」の欄に年間損益を入力 損失の場合はマイナス（損失額）を記入 ステップ3: 「先物取引に係る損失の繰越控除に関する付表」を作成する 損失を繰り越す場合は、申告書とは別に付表の作成が必要です。\n付表に記載する主な項目:\n当年の損失額（例: 50万円） 前年以前から繰り越してきた損失額（2年目以降） 当年の利益との相殺後の残余損失額 付表は国税庁のウェブサイトからダウンロードできます（「先物取引に係る損失の繰越控除 付表」で検索）。\nステップ4: 申告書類を提出する e-Taxで電子申告する場合はそのままオンライン送信します。書面提出の場合は、申告書・第三表・付表・年間取引報告書（写し可）を税務署に郵送または持参します。\n申告期限は翌年の3月15日です（2025年分なら2026年3月15日）。\n確定申告の書類作成を効率化するには 申告書の作成や損益の集計に手間を感じる方には、freee会計 が役立ちます。FX取引の損益を入力すると、必要な申告書の作成をサポートしてくれます。確定申告の書類作成に不慣れな方でも、ステップに沿って進めるだけで申告書を完成させることができます。\nよくある質問 Q1. 損失が出た年も確定申告は必要ですか？ はい、必須です。 損失が出た年に申告をしないと、その損失は翌年以降に繰り越せません。「損したのに申告しても意味がない」と思われがちですが、繰越控除を受けるためには損失年の申告が大前提です。申告を忘れると、その年の損失は永久に使えなくなります。\nQ2. 途中の年に申告を忘れた場合はどうなりますか？ 繰越控除は毎年連続して申告していることが条件です。たとえば「1年目に損失→2年目に申告忘れ→3年目に利益」という場合、2年目の申告が途切れているため1年目の損失を3年目の利益と相殺することはできません。申告を忘れた年があると、それ以前の繰越損失はすべて使えなくなります。\nQ3. 更正の請求で過去の申告漏れを修正できますか？ 申告そのものを忘れていた場合（無申告）は、期限後申告として提出することは可能ですが、期限後申告には無申告加算税が課される場合があります。ただし、期限後申告であっても繰越控除の適用が認められるかどうかは税務署の判断によります。申告漏れに気づいた場合は早めに税務署に相談することをお勧めします。\nQ4. 複数のFX口座の損益は合算できますか？ はい、合算できます。 複数のFX会社に口座がある場合、それぞれの年間取引報告書を取り寄せて損益を合算した上で申告します。A社での損失とB社での利益を相殺することも可能です。\nQ5. FXの損失と株式の損失を合算できますか？ できません。 FXは「先物取引に係る雑所得等」、上場株式は「株式等に係る譲渡所得等」と、申告分離課税の区分が異なるため、両者の損益通算は認められていません。それぞれ別の区分で申告が必要です。\nFXの損失を繰り越しつつ、NISAで非課税の長期投資も始められます。**楽天証券 **なら口座管理がシンプルです。\nまとめ FXで損失が出た年に確定申告をすることは、将来の節税につながる重要な手続きです。繰越控除の要点を整理します。\nFXの損失は最大3年間繰り越して将来の利益と相殺できる 損失が出た年も必ず確定申告が必要 毎年連続して申告していないと繰越が途切れる FX・CFD・先物は同一区分で通算できるが、株式・NISAとは通算不可 申告書第三表と付表の両方が必要 繰越控除を正しく活用すれば、数年間にわたって数万円〜十数万円の節税になるケースもあります。損失を出した年こそ、しっかり申告することが将来の税負担を減らす第一歩です。\n関連記事 FX利益20万円超の確定申告のやり方 FXのスワップポイントにかかる税金と申告方法 FX確定申告に必要な書類一覧 副業FXで住民税がバレない方法と節税術 NISA vs FX 税金の違いを徹底比較 関連ツール 年間損益の計算にはFX利益計算ツール をご活用ください。 副業・投資全体の税金シミュレーションは副業税金計算ツール で確認できます。 ","permalink":"https://productivity-works.com/ja/posts/fx-sonshitsu-kurikoshi-koujo/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003eFXで損失が出た年に「確定申告をしなくていい」と思っている方は多いですが、それは大きな機会損失です。損失が出た年こそ確定申告をすることで、翌年以降に利益が出たときの税金をゼロにできる可能性があります。この仕組みが「繰越控除」です。\u003c/p\u003e\n\u003cp\u003e本記事ではFX損失の繰越控除の仕組み・条件・具体的な申告手順を、会社員・個人投資家の方にもわかりやすく解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"fxの繰越控除とは\"\u003eFXの繰越控除とは\u003c/h2\u003e\n\u003cp\u003eFXの取引で生じた損失は、翌年以降\u003cstrong\u003e最大3年間にわたって繰り越し\u003c/strong\u003e、将来の利益と相殺することができます。これを「先物取引の差金等決済に係る損失の繰越控除」といいます（租税特別措置法第41条の15の2）。\u003c/p\u003e\n\u003cp\u003e仕組みを図で整理すると次のとおりです。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e1年目: FX損失 50万円 → 確定申告して損失を記録\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e2年目: FX利益 30万円 → 繰越損失50万円と相殺 → 課税所得ゼロ（残り損失20万円）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e3年目: FX利益 40万円 → 残り損失20万円と相殺 → 課税所得20万円のみ\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e通常、FXの利益には\u003cstrong\u003e申告分離課税として一律20.315%\u003c/strong\u003e（所得税15%＋復興特別所得税0.315%＋住民税5%）が課されます。繰越控除を使えば課税される利益を圧縮できるため、実質的な税負担を大きく減らせます。\u003c/p\u003e\n\u003cp\u003eなお、FXの繰越控除は「先物取引に係る雑所得等」の区分で処理されます。給与所得や事業所得とは別枠の申告分離課税であり、他の所得との損益通算は原則できません（詳細は後述）。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"繰越控除でいくら節税できる具体例\"\u003e繰越控除でいくら節税できる？具体例\u003c/h2\u003e\n\u003cp\u003e具体的な数字で節税効果を確認しましょう。\u003c/p\u003e\n\u003ch3 id=\"ケーススタディ3年間\"\u003eケーススタディ（3年間）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e年度\u003c/th\u003e\n          \u003cth\u003e取引結果\u003c/th\u003e\n          \u003cth\u003e繰越控除あり\u003c/th\u003e\n          \u003cth\u003e繰越控除なし\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1年目\u003c/td\u003e\n          \u003ctd\u003e損失 50万円\u003c/td\u003e\n          \u003ctd\u003e確定申告→損失繰越\u003c/td\u003e\n          \u003ctd\u003e申告不要（損失なので）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e2年目\u003c/td\u003e\n          \u003ctd\u003e利益 30万円\u003c/td\u003e\n          \u003ctd\u003e繰越損失50万円と相殺→課税所得ゼロ→\u003cstrong\u003e税額 0円\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e30万円に課税→\u003cstrong\u003e税額 60,945円\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e3年目\u003c/td\u003e\n          \u003ctd\u003e利益 40万円\u003c/td\u003e\n          \u003ctd\u003e残り損失20万円と相殺→課税所得20万円→\u003cstrong\u003e税額 40,630円\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e40万円に課税→\u003cstrong\u003e税額 81,260円\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e合計\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e—\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e税額合計 40,630円\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e税額合計 142,205円\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cblockquote\u003e\n\u003cp\u003e税額の計算式: 課税所得 × 20.315%（小数点以下切り捨て）\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e繰越控除を使うことで、3年間の合計税額が 142,205円 → 40,630円 となり、差額 101,575円の節税\u003c/strong\u003eになります。\u003c/p\u003e","title":"FXの損失は3年繰り越せる？繰越控除の申告手順を図解で解説"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nFXを始めてしばらくたち、ようやく利益が出るようになってきた。でも、ふと気になるのが「これ、確定申告しなきゃいけないの？」という疑問ではないでしょうか。\n会社員であれば、毎年勤務先が年末調整をしてくれるため、自分で税務署に行く機会はほとんどありません。だからこそ、FXで利益が出たとき「20万円以下なら申告不要と聞いたけど、本当？」「申告が必要な場合、どうやって計算すればいい？」と頭を抱える人は少なくありません。\nこの記事では、FXの利益に適用される税率、20万円ルールの正確な意味、そして実際の税額シミュレーションを順を追って解説します。確定申告が初めての方でも理解できるよう、具体的な数字を使って丁寧に説明します。\nFX利益が出たら確定申告が必要？ FX利益が発生した 年末調整済みの 会社員？ YES 20万円 超え？ YES 確定申告が必要 （所得税20.315%） NO 確定申告が必要 （20万円ルール適用外） NO 所得税申告は不要 ※住民税申告は別途必要 ※年収2,000万円超の会社員は20万円ルール適用外。住民税申告は利益額に関わらず必要。\nFXの利益にかかる税金の基本 FXで得た利益は、給与所得とは別に申告分離課税の対象となります。税率は利益の額にかかわらず一律で、以下の3つを合算した 20.315% が適用されます。\n税目 税率 所得税 15% 復興特別所得税（所得税の2.1%） 0.315% 住民税 5% 合計 20.315% 「申告分離課税」とは、給与など他の所得と合算せず、FXの利益だけを切り離して課税する仕組みです。給与が高くても低くても、FX利益への税率は変わりません。この点は、給与・賞与に対する所得税（5〜45%の累進課税）とは大きく異なります。\n20万円ルールとは？ 「FXは20万円以下なら確定申告しなくていい」という話を聞いたことがある方は多いでしょう。これは所得税法上の規定に基づいたものですが、正確に理解しておく必要があります。\n20万円ルールが適用される条件 所得税法では、以下の条件をすべて満たす場合に限り、確定申告が不要とされています。\n給与所得者（会社員）である 年末調整が済んでいる 給与所得・退職所得以外の所得の合計が年間20万円以下 FXの利益はこの「給与所得・退職所得以外の所得」に該当するため、FX利益が20万円以下であれば所得税の確定申告は不要です。\nただし、住民税の申告は別問題 重要な点として、20万円ルールはあくまで所得税（国税）の確定申告が不要になる規定です。住民税（地方税）については別途、お住まいの市区町村への申告が必要です。\nFX利益が20万円以下でも住民税申告をしていない場合、後から市区町村より申告を求められる可能性があります。確定申告書を提出した場合は自動的に住民税にも反映されますが、確定申告を省略した場合は自分で住民税申告の手続きを行う必要があります。\n確定申告が必要なケース・不要なケース 会社員のFX利益に関する申告要否を整理すると、以下のようになります。\nケース 所得税の確定申告 住民税の申告 FX利益が20万円以下（年末調整済み） 不要 必要 FX利益が20万円超（年末調整済み） 必要 確定申告で自動反映 年収2,000万円超の給与所得者 必要（20万円ルール適用外） 確定申告で自動反映 2箇所以上から給与を受けている 必要（条件による） 確定申告で自動反映 FXで損失が出た（損失の繰越をしたい場合） 申告することを推奨 確定申告で自動反映 まとめると、年末調整済みの会社員でFX利益が20万円超の場合は必ず確定申告が必要です。申告を忘れると、後から延滞税や無申告加算税が課される可能性があります。\nFX利益の税額を実際に計算してみよう 税率が20.315%と分かれば、計算自体はシンプルです。\n計算式: FX利益 × 20.315% = 税額（概算）\nただし、所得税と住民税では申告・納付のタイミングが異なります。以下では、代表的な3つのケースで概算税額を確認してみましょう。\nパターン1: FX利益が25万円の場合 所得税: 250,000円 × 15% = 37,500円 復興特別所得税: 37,500円 × 2.1% = 787円（端数切捨） 住民税: 250,000円 × 5% = 12,500円 合計税額: 約50,787円 概算税額: 約50,787円（税率20.315%で計算すると250,000 × 0.20315 = 50,787円）\nパターン2: FX利益が50万円の場合 50万円 × 20.315% = 101,575円 概算税額: 約101,575円\nパターン3: FX利益が100万円の場合 100万円 × 20.315% = 203,150円 概算税額: 約203,150円\n利益が増えるほど、当然ながら税額も増えます。FXで稼いだ金額の約5分の1が税金として持っていかれるイメージです。利益確定のタイミングで「そのうち税金で払う分」を取り分けておく習慣をつけておくと、申告時に慌てずに済みます。\nなお、より正確な税額（復興特別所得税の端数処理なども含む）は、FX利益計算ツール で即座に計算できます。\n確定申告の手順 確定申告は難しそうに聞こえますが、手順を理解すれば会社員でも対応可能です。FXの申告は以下の流れで進めます。\nステップ1: 年間取引報告書を取得する FX口座を開設している証券会社・FX業者のマイページから「年間取引報告書」をダウンロードします。通常、翌年1月下旬〜2月上旬に発行されます。この書類には年間の損益合計が記載されています。\nステップ2: 申告書を作成する 確定申告書の作成方法は主に2つです。\ne-Tax（国税庁の電子申告システム）を使う方法 国税庁の確定申告書等作成コーナー（https://www.nta.go.jp/）から、画面の案内に従って入力します。マイナンバーカードがあればそのままオンラインで申告まで完了できます。\n会計ソフトを使う方法 確定申告書類の作成はfreee会計 を使えばガイドに沿って入力するだけです。FXの雑所得の入力項目も用意されており、年間取引報告書の数字を転記するだけで申告書が完成します。税務の知識がなくても手順通りに進めることができるため、初めての確定申告にも適しています。\nステップ3: 申告分離課税を選択して申告する FXの利益を入力する際は、「先物取引に係る雑所得等」として申告分離課税を選択します。給与所得と混同して「総合課税」で申告しないよう注意してください。\n申告・納付の期限 確定申告期間: 毎年2月16日〜3月15日（土日祝日の場合は翌営業日） 所得税の納付期限: 3月15日まで（口座振替は4月下旬） 住民税: 確定申告の内容をもとに市区町村が計算し、6月以降に通知が来ます FXの損失が出た場合も確定申告すべき理由 FXで損失が出た年は「申告しなくていいや」と思うかもしれませんが、損失を確定申告しておくことで大きなメリットがあります。\nFX利益別 税額シミュレーション（税率20.315%） 約5万円 利益25万円 約10万円 利益50万円 約20万円 利益100万円 税額 手取り益（概算） ※税率20.315%で概算。実際の税額は端数処理等で若干異なる場合があります。 損失の繰越控除（3年間） FXの損失は、確定申告することで**翌年以降3年間にわたって利益と相殺（繰越控除）**できます。\n例えば、2025年に30万円の損失が出て確定申告した場合、2026年に50万円の利益が出たとき、繰越損失30万円を差し引いた20万円分にのみ課税されます。\n2026年FX利益: 50万円 2025年繰越損失: △30万円 課税対象: 20万円 税額: 20万円 × 20.315% = 40,630円 （繰越控除なしの場合: 50万円 × 20.315% = 101,575円） この例では、損失の繰越申告をしていたことで約61,000円の節税になります。損失が出た年に確定申告を怠ると、この繰越控除の権利は失われてしまいます。\n損失が出た年でも、必ず確定申告して損失を記録しておくことを強くおすすめします。\nFX取引と並行して、NISAでの長期投資も検討してみませんか？**楽天証券 **ならNISA口座も同時に開設でき、FXとNISAを一括管理できます。\nまとめ FXの利益と確定申告について、重要なポイントをまとめます。\nFXの利益には**申告分離課税20.315%**が一律で適用される 年末調整済みの会社員は、FX利益が20万円以下なら所得税の確定申告は不要 ただし住民税の申告は20万円以下でも必要 FX利益が20万円を超えたら確定申告が必須（申告忘れはペナルティあり） 損失が出た年も申告しておけば、3年間の繰越控除で将来の節税につながる 確定申告書の作成はfreee会計 が便利 FXで利益が出始めた段階から、税金のことを把握しておくことが大切です。「知らなかった」では済まされないのが税務の世界。この記事を参考に、早めに準備を進めておきましょう。\n関連記事 FX確定申告に必要な書類一覧と取得方法｜初心者向け完全手順 FXの損失は3年繰り越せる？繰越控除の申告手順を図解で解説 FXのスワップポイントに税金はかかる？計算方法と確定申告の注意点 iDeCo節税シミュレーション｜年収別に実際いくら得するか計算 NISA iDeCo どっちを先に始めるべき？優先順位を徹底解説【2026年最新版】 関連ツール 確定申告の準備に役立つツールを用意しています。\n副業税金計算ツール — FX・副業の所得税・住民税を素早く試算 手取り計算シミュレーター — 給与から税金・社会保険料を差し引いた手取り額を確認 年収から所得税・住民税を計算 → 所得税シミュレーター 本記事の内容は2026年5月時点の税制に基づいています。税法は改正される場合があります。個別の申告については税理士等の専門家にご相談ください。\n","permalink":"https://productivity-works.com/ja/posts/fx-rieki-20man-kakuteishinkoku/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003eFXを始めてしばらくたち、ようやく利益が出るようになってきた。でも、ふと気になるのが「これ、確定申告しなきゃいけないの？」という疑問ではないでしょうか。\u003c/p\u003e\n\u003cp\u003e会社員であれば、毎年勤務先が年末調整をしてくれるため、自分で税務署に行く機会はほとんどありません。だからこそ、FXで利益が出たとき「20万円以下なら申告不要と聞いたけど、本当？」「申告が必要な場合、どうやって計算すればいい？」と頭を抱える人は少なくありません。\u003c/p\u003e\n\u003cp\u003eこの記事では、\u003cstrong\u003eFXの利益に適用される税率\u003c/strong\u003e、\u003cstrong\u003e20万円ルールの正確な意味\u003c/strong\u003e、そして\u003cstrong\u003e実際の税額シミュレーション\u003c/strong\u003eを順を追って解説します。確定申告が初めての方でも理解できるよう、具体的な数字を使って丁寧に説明します。\u003c/p\u003e\n\u003cdiv style=\"max-width:620px;margin:1.8em auto;text-align:center;\"\u003e\n\u003csvg viewBox=\"0 0 620 340\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:100%;height:auto;\" aria-label=\"FX利益が出たら確定申告が必要？判定フロー\"\u003e\n  \u003cstyle\u003etext { font-family: 'Noto Sans JP', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', sans-serif; }\u003c/style\u003e\n  \u003c!-- 背景 --\u003e\n  \u003crect width=\"620\" height=\"340\" rx=\"12\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"28\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"13\" font-weight=\"bold\"\u003eFX利益が出たら確定申告が必要？\u003c/text\u003e\n  \u003c!-- スタートノード --\u003e\n  \u003crect x=\"210\" y=\"44\" width=\"200\" height=\"44\" rx=\"22\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"310\" y=\"70\" text-anchor=\"middle\" fill=\"white\" font-size=\"13\" font-weight=\"bold\"\u003eFX利益が発生した\u003c/text\u003e\n  \u003c!-- 矢印↓ --\u003e\n  \u003cline x1=\"310\" y1=\"88\" x2=\"310\" y2=\"108\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr)\"/\u003e\n  \u003c!-- 菱形：会社員？ --\u003e\n  \u003cpolygon points=\"310,112 420,148 310,184 200,148\" fill=\"white\" stroke=\"#4a9eff\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"310\" y=\"144\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e年末調整済みの\u003c/text\u003e\n \u003ctext x=\"310\" y=\"162\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e会社員？\u003c/text\u003e\n  \u003c!-- YES → 右 --\u003e\n  \u003cline x1=\"420\" y1=\"148\" x2=\"500\" y2=\"148\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr)\"/\u003e\n \u003ctext x=\"458\" y=\"140\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"11\" font-weight=\"bold\"\u003eYES\u003c/text\u003e\n  \u003c!-- 菱形：20万超？ --\u003e\n  \u003cpolygon points=\"540,148 590,186 540,224 490,186\" fill=\"white\" stroke=\"#4a9eff\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"540\" y=\"182\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\"\u003e20万円\u003c/text\u003e\n \u003ctext x=\"540\" y=\"198\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\"\u003e超え？\u003c/text\u003e\n  \u003c!-- YES → 下（申告必要） --\u003e\n  \u003cline x1=\"540\" y1=\"224\" x2=\"540\" y2=\"264\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr)\"/\u003e\n \u003ctext x=\"555\" y=\"248\" fill=\"#4a9eff\" font-size=\"11\" font-weight=\"bold\"\u003eYES\u003c/text\u003e\n  \u003crect x=\"470\" y=\"268\" width=\"140\" height=\"44\" rx=\"8\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"540\" y=\"287\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003e確定申告が必要\u003c/text\u003e\n \u003ctext x=\"540\" y=\"304\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003e（所得税20.315%）\u003c/text\u003e\n  \u003c!-- NO → 右側（住民税のみ） --\u003e\n  \u003cline x1=\"590\" y1=\"186\" x2=\"610\" y2=\"186\" stroke=\"#94a3b8\" stroke-width=\"2\"/\u003e\n  \u003cline x1=\"610\" y1=\"186\" x2=\"610\" y2=\"310\" stroke=\"#94a3b8\" stroke-width=\"2\"/\u003e\n  \u003c!-- 会社員でない → 下 --\u003e\n  \u003cline x1=\"310\" y1=\"184\" x2=\"310\" y2=\"224\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr)\"/\u003e\n \u003ctext x=\"325\" y=\"210\" fill=\"#4a9eff\" font-size=\"11\" font-weight=\"bold\"\u003eNO\u003c/text\u003e\n  \u003crect x=\"190\" y=\"228\" width=\"240\" height=\"44\" rx=\"8\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"310\" y=\"247\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003e確定申告が必要\u003c/text\u003e\n \u003ctext x=\"310\" y=\"264\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003e（20万円ルール適用外）\u003c/text\u003e\n  \u003c!-- NO（20万以下） 結果 --\u003e\n  \u003cline x1=\"490\" y1=\"186\" x2=\"430\" y2=\"186\" stroke=\"#94a3b8\" stroke-width=\"2\"/\u003e\n  \u003cline x1=\"430\" y1=\"186\" x2=\"430\" y2=\"290\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr)\"/\u003e\n \u003ctext x=\"440\" y=\"220\" fill=\"#10b981\" font-size=\"11\" font-weight=\"bold\"\u003eNO\u003c/text\u003e\n  \u003crect x=\"330\" y=\"292\" width=\"200\" height=\"36\" rx=\"8\" fill=\"#10b981\"/\u003e\n \u003ctext x=\"430\" y=\"307\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003e所得税申告は不要\u003c/text\u003e\n \u003ctext x=\"430\" y=\"322\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003e※住民税申告は別途必要\u003c/text\u003e\n  \u003c!-- 矢印マーカー定義 --\u003e\n  \u003cdefs\u003e\n    \u003cmarker id=\"arr\" markerWidth=\"8\" markerHeight=\"8\" refX=\"6\" refY=\"3\" orient=\"auto\"\u003e\n      \u003cpath d=\"M0,0 L0,6 L8,3 z\" fill=\"#cbd5e1\"/\u003e\n    \u003c/marker\u003e\n  \u003c/defs\u003e\n\u003c/svg\u003e\n\u003cp style=\"font-size:12px;color:#64748b;margin-top:4px;\"\u003e※年収2,000万円超の会社員は20万円ルール適用外。住民税申告は利益額に関わらず必要。\u003c/p\u003e","title":"FX利益20万円超えたら確定申告が必要？サラリーマン向けに税額を実計算"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nプログラミングスクールおすすめ2026年版｜目的別に最適なスクールを選ぶ 「プログラミングを学びたいけど、スクールが多すぎて選べない」——この悩みを持つ方は非常に多いです。2026年現在、日本だけでも100以上のプログラミングスクールが存在し、料金は0円〜80万円以上、期間は1ヶ月〜12ヶ月まで大きく異なります。\nこの記事では**目的別（転職・副業・教養・フリーランス）**に最適なスクールを比較し、後悔しない選び方を解説します。\nスクール選びで失敗しないための5つのチェックポイント チェック項目 確認すべきこと 目的との一致 転職保証があるか、副業案件獲得の支援があるか カリキュラム内容 学べる言語・フレームワークが希望と一致するか 料金と支払い方法 分割払い対応、教育訓練給付金（最大70%還付）の対象か 学習形式 オンライン完結か、通学併用か、ライブ授業かオンデマンドか 転職サポート 転職成功率、紹介企業の質、転職保証の条件 【エンジニア転職】本気で転職したい方向け TOP3 1. DMM WEBCAMP（ディーエムエムウェブキャンプ） 項目 内容 料金 専門技術コース: 910,800円（教育訓練給付金利用で実質350,800円） 期間 3〜4ヶ月（学習）+ 転職サポート 学べる言語 Ruby, Ruby on Rails, JavaScript, AWS, Docker 転職保証 あり（転職できなければ全額返金） 転職成功率 98%（2025年実績） 学習形式 オンライン完結 + メンタリング おすすめの人: 未経験からWebエンジニアに転職したい方\n経済産業省認定の「専門実践教育訓練給付金」対象で、最大56万円が還付されます。転職保証付きで、万が一転職できなければ全額返金。カリキュラムはチーム開発も含み、実務に近い経験が積めます。\n2. テックキャンプ（TECH CAMP）エンジニア転職 項目 内容 料金 短期集中: 657,800円（教育訓練給付金利用で実質197,340円） 期間 最短10週間（短期集中）/ 6ヶ月（夜間・休日） 学べる言語 Ruby, Ruby on Rails, JavaScript, SQL 転職保証 あり（14日間の無条件返金保証 + 転職保証） 転職成功率 99%（2025年実績） 学習形式 オンライン + 教室（渋谷・なんば） おすすめの人: 最短で転職したい方、教室で学びたい方\n10週間の短期集中コースは、会社を辞めて本気で転職に取り組む方に最適。教育訓練給付金を使えば実質20万円以下で受講可能。対面での学習環境が欲しい方は教室利用もできます。\n3. RUNTEQ（ランテック） 項目 内容 料金 550,000円（教育訓練給付金利用で実質165,000円） 期間 5〜9ヶ月 学べる言語 Ruby, Ruby on Rails, JavaScript, Vue.js 転職保証 Web系自社開発企業への転職サポート 特徴 1,000時間のカリキュラム、ポートフォリオ重視 おすすめの人: Web系自社開発企業に入りたい方\nSES（客先常駐）ではなく、自社開発企業への転職にこだわったスクール。1,000時間の実践的なカリキュラムで、ポートフォリオの質が圧倒的に高いのが特徴。転職先の質を重視する方に。\n【副業・フリーランス】稼ぐスキルを身につけたい方向け TechAcademy（テックアカデミー） 項目 内容 料金 はじめての副業コース: 174,900円（4週間）〜339,900円（16週間） 学べるスキル HTML, CSS, JavaScript, Webデザイン 副業サポート 受講後に実案件を紹介（初案件保証） 学習形式 オンライン完結 + メンタリング おすすめの人: 副業で月5-10万円を稼ぎたい方\n「はじめての副業コース」は、受講後に実際の案件を紹介してもらえる「初案件保証」が最大の強み。Webサイト制作の案件は1件3-10万円が相場で、受講料を数ヶ月で回収できます。\n関連記事: 副業おすすめ 在宅でスキルなしから始める方法 デイトラ 項目 内容 料金 Web制作コース: 99,800円 / Webアプリコース: 99,800円 学べるスキル HTML, CSS, JavaScript, PHP(WordPress) / Ruby, Rails 特徴 買い切り型、1年間のメンター質問サポート 学習形式 オンライン完結（動画教材） おすすめの人: コスパ重視で学びたい方\n業界最安水準の10万円以下で、実務レベルのスキルが身につきます。買い切り型なので追加料金なし。SNSでの受講者コミュニティが活発で、モチベーション維持にも効果的。\n【無料・格安】コストを抑えて学びたい方向け 侍エンジニア塾（無料体験レッスン） 無料体験レッスンで適性診断とカリキュラムの相談が可能。強引な勧誘はなく、他スクールとの比較材料としても有用です。\nProgate / ドットインストール サービス 料金 特徴 Progate 無料（一部有料: 1,078円/月） スライド形式で初心者にわかりやすい ドットインストール 無料（一部有料: 1,080円/月） 3分動画で学べる、レッスン数豊富 おすすめの人: まずはプログラミングに触れてみたい方\nスクールに通う前に、まずProgateやドットインストールで基礎を体験してみましょう。「これは面白い」と感じてから有料スクールに投資するのが賢い判断です。\n2026年注目：AI×プログラミングコース AI時代に注目されている新しいコースも登場しています。\nスクール AI関連コース 料金目安 TechAcademy AIコース 174,900円〜 DMM WEBCAMP AI教養コース 169,800円〜 Aidemy AI アプリ開発講座 528,000円（給付金対象） Pythonを使ったAI・機械学習のスキルは、2026年のエンジニア求人で最も需要が高い分野です。\n関連記事: ChatGPT API の使い方 初心者向けガイド 教育訓練給付金を使えるスクール一覧 経済産業省認定の「専門実践教育訓練給付金」を使えば、受講料の最大70%（上限56万円）が還付されます。\nスクール 通常料金 給付金適用後の実質負担 DMM WEBCAMP 専門技術コース 910,800円 約350,800円 テックキャンプ 短期集中 657,800円 約197,340円 RUNTEQ 550,000円 約165,000円 Aidemy AI アプリ開発 528,000円 約158,400円 給付金の条件: 雇用保険の被保険者期間が2年以上（初回利用の場合）。在職中でも利用可能。ハローワークでの事前手続きが必要です。\nタイプ別おすすめまとめ あなたの目的 おすすめスクール 予算目安 未経験からエンジニア転職 DMM WEBCAMP / テックキャンプ 20-35万円（給付金利用） Web系自社開発企業へ転職 RUNTEQ 16.5万円（給付金利用） 副業で月5-10万円稼ぎたい TechAcademy はじめての副業コース 17-34万円 コスパ重視で学びたい デイトラ 10万円以下 まずは無料で試したい Progate / ドットインストール 0-1,080円/月 AI・機械学習を学びたい Aidemy / TechAcademy AI 17-53万円 よくある質問（FAQ） Q1. プログラミング未経験でもスクールについていけますか？ はい。上記のスクールはすべて未経験者を対象としています。メンターへの質問サポートがあるため、独学で挫折した方でも完走率が高いです。\nQ2. 独学とスクール、どちらがいいですか？ 目的によります。教養目的ならProgate等の独学で十分。転職・副業目的なら、スクールのカリキュラム・転職サポート・案件紹介に投資する価値があります。独学の挫折率は約90%です。\nQ3. 何歳まで転職できますか？ Web系エンジニアへの未経験転職は、現実的には20代〜30代前半が中心です。30代後半以降はポートフォリオの質と前職の経験をうまく活かすことが重要になります。\nQ4. どの言語から学ぶべきですか？ Web系転職ならRuby（Ruby on Rails）またはPHP。副業ならHTML/CSS/JavaScript。AI分野ならPython。迷ったらRubyから始めるのが王道です。\nQ5. 教育訓練給付金は誰でも使えますか？ 雇用保険の被保険者期間が2年以上（初回）または3年以上（2回目以降）であれば利用可能。会社員・派遣社員は在職中でも申請できます。離職者は離職後1年以内が条件。\nプログラミングスクール卒業後の転職活動には、**doda **がおすすめ。IT・Web業界の求人が豊富で、未経験からの転職支援実績も豊富です。\nまとめ プログラミングスクール選びで最も重要なのは目的の明確化です。「なんとなくプログラミングを学びたい」では挫折しやすく、「エンジニアとして転職して年収500万を目指す」「副業で月10万稼ぐ」という具体的な目標がある方が成功率が圧倒的に高いです。\n教育訓練給付金を使えば実質16-35万円でエンジニア転職が可能な時代です。まずは無料体験レッスンや説明会に参加して、自分に合ったスクールを見つけましょう。\n関連記事: フリーランスエンジニアの年収相場 ※本記事は情報提供を目的としており、特定のスクールの入学を推奨するものではありません。料金・カリキュラム・転職実績等の最新情報は各スクールの公式サイトでご確認ください。\n関連ツール JSONデータを即座に整形・検証 → JSONフォーマッター 正規表現をリアルタイムでテスト → 正規表現テスター フリーランスエンジニアとしての適正時給を計算 → フリーランス報酬計算ツール エンジニア転職後の手取り額を確認する → 手取り計算シミュレーター 副業収入が発生した場合の税金を計算 → 副業税金計算ツール 時給と年収を換算 → 時給換算ツール 関連テンプレート スキルアップ・キャリアチェンジをサポートするテンプレート：\nChatGPTプロンプト集100選 — エンジニア向け含む業務効率化プロンプト集 AI仕事術ガイド — AIで生産性を10倍にする実践ガイド ","permalink":"https://productivity-works.com/ja/posts/programming-school-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"プログラミングスクールおすすめ2026年版目的別に最適なスクールを選ぶ\"\u003eプログラミングスクールおすすめ2026年版｜目的別に最適なスクールを選ぶ\u003c/h1\u003e\n\u003cp\u003e「プログラミングを学びたいけど、スクールが多すぎて選べない」——この悩みを持つ方は非常に多いです。2026年現在、日本だけでも100以上のプログラミングスクールが存在し、料金は0円〜80万円以上、期間は1ヶ月〜12ヶ月まで大きく異なります。\u003c/p\u003e\n\u003cp\u003eこの記事では**目的別（転職・副業・教養・フリーランス）**に最適なスクールを比較し、後悔しない選び方を解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"スクール選びで失敗しないための5つのチェックポイント\"\u003eスクール選びで失敗しないための5つのチェックポイント\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eチェック項目\u003c/th\u003e\n          \u003cth\u003e確認すべきこと\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e目的との一致\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e転職保証があるか、副業案件獲得の支援があるか\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eカリキュラム内容\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e学べる言語・フレームワークが希望と一致するか\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e料金と支払い方法\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e分割払い対応、教育訓練給付金（最大70%還付）の対象か\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e学習形式\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eオンライン完結か、通学併用か、ライブ授業かオンデマンドか\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e転職サポート\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e転職成功率、紹介企業の質、転職保証の条件\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"エンジニア転職本気で転職したい方向け-top3\"\u003e【エンジニア転職】本気で転職したい方向け TOP3\u003c/h2\u003e\n\u003ch3 id=\"1-dmm-webcampディーエムエムウェブキャンプ\"\u003e1. DMM WEBCAMP（ディーエムエムウェブキャンプ）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e料金\u003c/td\u003e\n          \u003ctd\u003e専門技術コース: 910,800円（教育訓練給付金利用で実質350,800円）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e期間\u003c/td\u003e\n          \u003ctd\u003e3〜4ヶ月（学習）+ 転職サポート\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e学べる言語\u003c/td\u003e\n          \u003ctd\u003eRuby, Ruby on Rails, JavaScript, AWS, Docker\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e転職保証\u003c/td\u003e\n          \u003ctd\u003eあり（転職できなければ全額返金）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e転職成功率\u003c/td\u003e\n          \u003ctd\u003e98%（2025年実績）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e学習形式\u003c/td\u003e\n          \u003ctd\u003eオンライン完結 + メンタリング\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e 未経験からWebエンジニアに転職したい方\u003c/p\u003e\n\u003cp\u003e経済産業省認定の「専門実践教育訓練給付金」対象で、最大56万円が還付されます。転職保証付きで、万が一転職できなければ全額返金。カリキュラムはチーム開発も含み、実務に近い経験が積めます。\u003c/p\u003e\n\u003ch3 id=\"2-テックキャンプtech-campエンジニア転職\"\u003e2. テックキャンプ（TECH CAMP）エンジニア転職\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e料金\u003c/td\u003e\n          \u003ctd\u003e短期集中: 657,800円（教育訓練給付金利用で実質197,340円）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e期間\u003c/td\u003e\n          \u003ctd\u003e最短10週間（短期集中）/ 6ヶ月（夜間・休日）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e学べる言語\u003c/td\u003e\n          \u003ctd\u003eRuby, Ruby on Rails, JavaScript, SQL\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e転職保証\u003c/td\u003e\n          \u003ctd\u003eあり（14日間の無条件返金保証 + 転職保証）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e転職成功率\u003c/td\u003e\n          \u003ctd\u003e99%（2025年実績）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e学習形式\u003c/td\u003e\n          \u003ctd\u003eオンライン + 教室（渋谷・なんば）\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e 最短で転職したい方、教室で学びたい方\u003c/p\u003e","title":"プログラミングスクール おすすめ2026年版！目的別に比較【未経験〜転職まで】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n50代の転職で「職務経歴書」が壁になっていませんか？ 50代の転職活動において、最初の大きな壁となるのが「職務経歴書」の作成です。\n20〜30代の頃とは違い、50代になると職務経歴が20年・30年分あります。「何を書けばいいのか分からない」「書くことが多すぎて整理できない」「自分の強みを言葉にするのが難しい」——こうした悩みを持つ50代の転職希望者は非常に多いです。\nさらに、50代の転職には固有の課題があります。\n年齢への懸念を持つ採用担当者をどう説得するか 長いキャリアをどう「見せる」か 「即戦力」と「長期雇用」のバランスをどうアピールするか 2026年現在、ChatGPTを活用することで、これらの課題を乗り越えた**「刺さる職務経歴書」**を効率的に作成できるようになりました。この記事では、50代に特化した5つのプロンプトを使って、職務経歴書を劇的に改善する方法を解説します。\n50代転職全体のAI活用戦略については、50代転職AI活用準備ガイド2026 も参考にしてください。\nなぜ50代の職務経歴書にChatGPTが効くのか 理由1：第三者の視点で「強み」を言語化できる 50代の方が転職活動で最も苦労するのが、「自分の強みを言葉にすること」です。長年の経験が「当たり前」になりすぎていて、何が武器なのかが分からなくなっています。\nChatGPTに経験を入力すると、外部の視点から「これがあなたの強みです」と言語化してくれます。自己分析に行き詰まったときの突破口になります。\n理由2：業界・職種別のアピールポイントを教えてくれる 「同じ経験でも、業界によって刺さるポイントが違う」ことを、ChatGPTは知っています。製造業への転職と金融業への転職では、同じ管理職経験でも強調すべき点が異なります。\n理由3：書き直しの心理的ハードルを下げる 一から書いた文章を書き直すのは精神的に大変です。ChatGPTが生成したドラフトを「修正する」形にすることで、心理的ハードルが大幅に下がります。\nプロンプト1：30年分のキャリアを棚卸しする 職務経歴書を書く前に、まずキャリアを整理することが重要です。\n使い方：経験を箇条書きで入力して整理してもらう 私は現在52歳で転職活動中です。 以下の職歴・経験を、職務経歴書で効果的に使えるように 整理・カテゴリ分けしてください。 【職歴】 ・A社（食品メーカー）：22年間 - 営業職 8年（担当エリア：関東） - 営業部マネージャー 5年（メンバー12名） - 国内営業統括部長 9年（全国300名体制） ・転職理由：会社の事業縮小に伴うリストラ 【主な実績・経験（思い出せるもの）】 ・営業成績：入社3年目から7年連続トップ営業 ・マネージャー時代にチームの売上を1.5倍に改善 ・働き方改革でチームの残業を40%削減 ・新人研修プログラムを立ち上げ、定着率を70%→90%に改善 ・海外取引先との交渉経験（年2回程度、英語使用） ・業界団体の委員会に5年参加 【整理してほしいこと】 1. 「マネジメント力」「営業力」「改善力」などのカテゴリ別に実績を分類 2. 各カテゴリで特に強みとなるエピソードを3つずつ 3. 数字で表現できる実績の一覧 4. 職務経歴書での「使い順」の提案（インパクトが強い順） プロンプト2：強みを採用担当者に刺さる言葉に変換する 整理した実績を、採用担当者が「欲しい」と感じる言葉に変換します。\n使い方：実績と応募先の情報を入力して言語化してもらう 50代の転職活動中です。以下の実績を、 採用担当者に刺さる言葉で表現してください。 【私の実績】 チームの売上を1.5倍に改善（マネージャー就任から3年で） 【やったこと（詳細）】 ・週次の個別1on1を導入してメンバーの課題を把握 ・KPIを月次→週次管理に変更して早期に軌道修正 ・商品知識研修を月1回実施 ・トップ営業のノウハウをロールプレイング形式で水平展開 【応募先の情報】 ・業種：IT企業（SaaS系） ・職種：営業マネージャー（既存チームの立て直し） ・求める人材：「既存チームの改革経験がある方」 【お願い】 1. 採用担当者の目線で「なぜこの人が欲しいか」が伝わる言い方に変換する 2. IT企業・SaaS業界の文脈で響く表現に置き換える 3. 職務経歴書の「実績」欄に書ける形式（3〜5行）にまとめる 4. 「なぜ食品メーカーの経験がIT企業でも活かせるか」の橋渡しの言葉も提案する プロンプト3：年齢をアドバンテージに変える「経験の深み」表現 50代転職で最も大切なのは、「年齢をリスクではなく、アセット（資産）として見せる」ことです。\n使い方：年齢に対する不安を逆手に取る書き方を提案してもらう 50代の転職で、年齢をアドバンテージにした 職務経歴書の表現を提案してください。 【私の状況】 ・52歳、男性 ・食品メーカーで営業一筋30年 ・応募先：中堅IT企業の営業部長職 ・懸念点： - IT業界未経験 - 年齢による柔軟性への懸念 - デジタルリテラシーへの疑問 【私の実際の経験・スキル】 ・30年間で業界の変化（バブル崩壊・リーマンショック・コロナ禍）を経験 ・各時代に応じた営業手法の変革を自ら推進 ・スマートフォン活用・CRM導入・Zoomによる商談など、 ツールへの適応は得意 ・部下の育成で100名以上のキャリア形成を支援 ・複数の危機（会社の業績不振）を営業力で乗り越えた 【提案してほしいこと】 1. 「30年のキャリア」を「経験の深み」として表現する書き方 2. IT業界未経験でも「すぐに戦力になれる」と伝える論理構成 3. 「年齢より経験値の高さ」を前面に出す職務経歴書の冒頭文（キャリアサマリー） 4. 採用担当者の年齢への懸念に先手を打つ表現方法 プロンプト4：業界別のアピールポイントを最適化する 同じ経験でも、応募する業界・企業によって「何を強調すべきか」が異なります。\n使い方：同じ経験を複数の業界向けに最適化してもらう 以下の職務経験を、3つの異なる業界の採用担当者向けに それぞれ最適化した表現に変えてください。 【共通の経験】 国内食品メーカーで300名の営業組織を統括。 年間売上目標150億円の達成をマネジメントした経験（9年間）。 特に「組織の数値管理」「人材育成」「顧客リレーション」に強み。 【応募したい3つの業界】 業界A：食品・消費財メーカー（同業種転職） → 「即戦力」「業界知識の深さ」をアピールしたい 業界B：コンサルティング会社（異業種転職） → 「問題解決力」「組織変革の実績」をアピールしたい 業界C：人材・教育会社（異業種転職） → 「人材育成の専門性」「100名以上の育成実績」をアピールしたい 各業界について： 1. 最も強調すべき実績・スキル 2. 採用担当者が「おっ」と思う切り口の提案 3. 職務経歴書の「自己PR」欄（400字程度）のドラフト を作成してください。 プロンプト5：職務経歴書の全体ブラッシュアップ 仕上げに、作成した職務経歴書全体をChatGPTにレビューしてもらいます。\n使い方：書いた文章を貼り付けてフィードバックをもらう 以下は私が作成した職務経歴書の「職務要約」と「自己PR」の文章です。 50代の転職希望者として、採用担当者に好印象を与えるために 改善すべき点を具体的に教えてください。 【私が書いた職務要約】 （ここに自分が書いた文章を貼り付ける） 【私が書いた自己PR】 （ここに自分が書いた文章を貼り付ける） 【応募先の情報】 ・企業名：〇〇株式会社 ・職種：営業部長 ・求める人材像：「チームを引っ張るリーダーシップと数値管理力がある方」 【フィードバックしてほしい内容】 1. 読んで「強み」が伝わるか（採用担当者目線で） 2. 50代に特有の「年齢への懸念」を払拭できているか 3. 具体性が足りない箇所と、どう改善するかの提案 4. 印象を強くするための言い回しの変更案 5. 削った方が良い情報、追加すべき情報 最後に、改善版の文章を書き直して提示してください。 50代の職務経歴書：よくある失敗パターン 失敗1：経歴を「年代順に羅列」するだけ 1990年〜2000年：営業職として…… 2000年〜2010年：マネージャーとして……\n→ 採用担当者は「で、今の自分は何ができるの？」と感じます。\n改善策： 経歴より「今のあなたが提供できる価値」を冒頭に書く「キャリアサマリー」形式にする。\n失敗2：「〜の経験があります」という表現だらけ 「多くのメンバーをマネジメントした経験があります」 「大規模プロジェクトを手がけた経験があります」\n→ 「経験がある」という事実だけでは弱い。\n改善策： 「〜することで、〇〇という結果を出した」という成果・数字とセットで書く。\n失敗3：全職歴を均等に書く 30年間の全経験を同じ比重で書くと、焦点がぼやけます。\n改善策： 直近10年（最もアピールしたい経験）に紙面の60〜70%を割く。それ以前は簡潔に。\n失敗4：「熱意」だけの自己PR 「御社の発展に貢献したいと強く思っています」\n→ 50代に必要なのは熱意ではなく、「あなたが来れば具体的に何が解決するか」の説明。\n改善策： 「私が入社することで、〇〇という課題を〇〇という形で解決できます」という構成にする。\n50代転職：業界別アピールポイントチートシート 転職先業界 最優先アピールポイント 50代ならではの強み 同業種・同業態 即戦力・業界知識 豊富な人脈・ノウハウ 異業種（製造→IT等） 問題解決力・適応力 危機経験・長期視点 コンサルティング 実務経験の深さ 現場感覚・信頼性 人材・教育 人材育成実績 メンター経験・人間力 中小企業（管理職） 総合管理能力 即実行力・組織構築力 スタートアップ 経営視点・ネットワーク 経験に基づく判断力 ChatGPTを使った職務経歴書作成のワークフロー 棚卸し（プロンプト1）：30分で全キャリアを整理 言語化（プロンプト2）：実績を「採用担当者言語」に変換 戦略化（プロンプト3）：年齢をアドバンテージに変える 最適化（プロンプト4）：業界別にカスタマイズ ブラッシュアップ（プロンプト5）：全体をレビュー・改善 このフローで作業することで、50代の転職活動で最も時間のかかる「職務経歴書の作成」を1〜2日から半日程度に短縮できます。\n職務経歴書が完成したら、**doda **に登録して求人に応募しましょう。エージェントによる書類添削サービスも無料で利用できます。\nまとめ：50代の「経験」はChatGPTで最強の武器になる 50代の転職で最大のアセット（資産）は、他の世代には絶対に持てない「長年の実践経験」です。問題は多くの場合、その経験を「相手に伝わる言葉」で表現できていないことにあります。\nChatGPTは、あなたの経験を採用担当者に刺さる言葉に変換する「翻訳機」として機能します。5つのプロンプトを活用して、あなたの30年のキャリアを最大限に輝かせる職務経歴書を作り上げてください。\n50代転職のAI活用を、職務経歴書以外（面接準備・企業研究・スキルアップ計画）にも広げたい方は、50代転職AI活用準備ガイド2026 で体系的に解説しています。\n関連ツール 転職後の年収をシミュレーション → 転職年収シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 関連テンプレート 50代の転職活動をAIでスムーズに進めたい方へ:\n50代転職AI活用準備ガイド — 職務経歴書作成プロンプト5種・自己PR生成テンプレート・面接想定Q\u0026amp;Aジェネレーターなど、50代転職に特化したAI活用ツールを収録 ","permalink":"https://productivity-works.com/ja/posts/50dai-tenshoku-shokumu-keirekisho-chatgpt/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"50代の転職で職務経歴書が壁になっていませんか\"\u003e50代の転職で「職務経歴書」が壁になっていませんか？\u003c/h2\u003e\n\u003cp\u003e50代の転職活動において、最初の大きな壁となるのが「職務経歴書」の作成です。\u003c/p\u003e\n\u003cp\u003e20〜30代の頃とは違い、50代になると職務経歴が20年・30年分あります。「何を書けばいいのか分からない」「書くことが多すぎて整理できない」「自分の強みを言葉にするのが難しい」——こうした悩みを持つ50代の転職希望者は非常に多いです。\u003c/p\u003e\n\u003cp\u003eさらに、50代の転職には固有の課題があります。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e年齢への懸念を持つ採用担当者をどう説得するか\u003c/li\u003e\n\u003cli\u003e長いキャリアをどう「見せる」か\u003c/li\u003e\n\u003cli\u003e「即戦力」と「長期雇用」のバランスをどうアピールするか\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e2026年現在、ChatGPTを活用することで、これらの課題を乗り越えた**「刺さる職務経歴書」**を効率的に作成できるようになりました。この記事では、50代に特化した5つのプロンプトを使って、職務経歴書を劇的に改善する方法を解説します。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e50代転職全体のAI活用戦略については、\u003ca href=\"https://productivity-works.com/ja/posts/50dai-tenshoku-ai-junbi-2026/\"\u003e50代転職AI活用準備ガイド2026\u003c/a\u003e\nも参考にしてください。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"なぜ50代の職務経歴書にchatgptが効くのか\"\u003eなぜ50代の職務経歴書にChatGPTが効くのか\u003c/h2\u003e\n\u003ch3 id=\"理由1第三者の視点で強みを言語化できる\"\u003e理由1：第三者の視点で「強み」を言語化できる\u003c/h3\u003e\n\u003cp\u003e50代の方が転職活動で最も苦労するのが、「自分の強みを言葉にすること」です。長年の経験が「当たり前」になりすぎていて、何が武器なのかが分からなくなっています。\u003c/p\u003e\n\u003cp\u003eChatGPTに経験を入力すると、外部の視点から「これがあなたの強みです」と言語化してくれます。自己分析に行き詰まったときの突破口になります。\u003c/p\u003e\n\u003ch3 id=\"理由2業界職種別のアピールポイントを教えてくれる\"\u003e理由2：業界・職種別のアピールポイントを教えてくれる\u003c/h3\u003e\n\u003cp\u003e「同じ経験でも、業界によって刺さるポイントが違う」ことを、ChatGPTは知っています。製造業への転職と金融業への転職では、同じ管理職経験でも強調すべき点が異なります。\u003c/p\u003e\n\u003ch3 id=\"理由3書き直しの心理的ハードルを下げる\"\u003e理由3：書き直しの心理的ハードルを下げる\u003c/h3\u003e\n\u003cp\u003e一から書いた文章を書き直すのは精神的に大変です。ChatGPTが生成したドラフトを「修正する」形にすることで、心理的ハードルが大幅に下がります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"プロンプト130年分のキャリアを棚卸しする\"\u003eプロンプト1：30年分のキャリアを棚卸しする\u003c/h2\u003e\n\u003cp\u003e職務経歴書を書く前に、まずキャリアを整理することが重要です。\u003c/p\u003e\n\u003ch3 id=\"使い方経験を箇条書きで入力して整理してもらう\"\u003e使い方：経験を箇条書きで入力して整理してもらう\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e私は現在52歳で転職活動中です。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の職歴・経験を、職務経歴書で効果的に使えるように\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e整理・カテゴリ分けしてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【職歴】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・A社（食品メーカー）：22年間\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e　\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 営業職 8年（担当エリア：関東）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e　\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 営業部マネージャー 5年（メンバー12名）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e　\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 国内営業統括部長 9年（全国300名体制）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・転職理由：会社の事業縮小に伴うリストラ\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【主な実績・経験（思い出せるもの）】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・営業成績：入社3年目から7年連続トップ営業\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・マネージャー時代にチームの売上を1.5倍に改善\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・働き方改革でチームの残業を40%削減\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・新人研修プログラムを立ち上げ、定着率を70%→90%に改善\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・海外取引先との交渉経験（年2回程度、英語使用）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・業界団体の委員会に5年参加\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【整理してほしいこと】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e 「マネジメント力」「営業力」「改善力」などのカテゴリ別に実績を分類\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e 各カテゴリで特に強みとなるエピソードを3つずつ\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 数字で表現できる実績の一覧\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e 職務経歴書での「使い順」の提案（インパクトが強い順）\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"プロンプト2強みを採用担当者に刺さる言葉に変換する\"\u003eプロンプト2：強みを採用担当者に刺さる言葉に変換する\u003c/h2\u003e\n\u003cp\u003e整理した実績を、採用担当者が「欲しい」と感じる言葉に変換します。\u003c/p\u003e\n\u003ch3 id=\"使い方実績と応募先の情報を入力して言語化してもらう\"\u003e使い方：実績と応募先の情報を入力して言語化してもらう\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e50代の転職活動中です。以下の実績を、\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e採用担当者に刺さる言葉で表現してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【私の実績】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eチームの売上を1.5倍に改善（マネージャー就任から3年で）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【やったこと（詳細）】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・週次の個別1on1を導入してメンバーの課題を把握\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・KPIを月次→週次管理に変更して早期に軌道修正\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・商品知識研修を月1回実施\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・トップ営業のノウハウをロールプレイング形式で水平展開\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【応募先の情報】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・業種：IT企業（SaaS系）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・職種：営業マネージャー（既存チームの立て直し）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・求める人材：「既存チームの改革経験がある方」\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【お願い】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e 採用担当者の目線で「なぜこの人が欲しいか」が伝わる言い方に変換する\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e IT企業・SaaS業界の文脈で響く表現に置き換える\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 職務経歴書の「実績」欄に書ける形式（3〜5行）にまとめる\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e 「なぜ食品メーカーの経験がIT企業でも活かせるか」の橋渡しの言葉も提案する\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"プロンプト3年齢をアドバンテージに変える経験の深み表現\"\u003eプロンプト3：年齢をアドバンテージに変える「経験の深み」表現\u003c/h2\u003e\n\u003cp\u003e50代転職で最も大切なのは、「年齢をリスクではなく、アセット（資産）として見せる」ことです。\u003c/p\u003e","title":"50代転職 ChatGPTで職務経歴書を劇的に改善する5つのプロンプト"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nFXで利益が出たとき、多くのトレーダーが戸惑うのが確定申告の手続きです。「何の書類を集めればいいかわからない」「どこで取得するのか見当もつかない」という声はよく聞かれます。\nこの記事では、FX確定申告に必要な書類を一覧でまとめ、それぞれの取得方法を順を追って解説します。特に初めて申告に臨むトレーダーを念頭に置き、書類の役割と入手先、記入時の注意点、e-Taxを使った提出手順まで網羅しています。手元にこの記事を置きながら準備を進めれば、書類不足で税務署に出直すような事態を防げます。\nFX確定申告 ステップフロー Step 1 年間取引報告書 FX業者マイページから取得 Step 2 申告書類の準備 第三表・付表・源泉徴収票 Step 3 e-Tax入力・送信 マイナンバーカードで申請 必要書類 ・年間取引報告書 ・確定申告書B ・本人確認書類 記入ポイント ・申告分離課税を選択 ・第三表に損益を記入 ・税率は一律20.315% 提出と納付 ・申告期限：3月15日 ・e-Taxで自宅から送信 ・納税額も自動計算 損失が出た年も申告を忘れずに！ 損失繰越控除（3年間）で将来の利益と相殺できます 確定申告期間：毎年2月16日〜3月15日 FX確定申告に必要な書類一覧 まずは必要書類を一覧で把握しましょう。状況によって不要なものもあるため、チェックリスト形式で確認してください。\n# 書類名 取得先 備考 1 年間取引報告書 FX業者のマイページ 全口座分が必要 2 確定申告書B（第一表・第二表） 国税庁・税務署・e-Tax 所得全般を記載 3 申告書第三表（分離課税用） 国税庁・税務署・e-Tax FX所得は分離課税 4 先物取引に係る雑所得等の金額の計算明細書（付表） 国税庁・税務署・e-Tax FX損益の計算根拠 5 本人確認書類 お手元のマイナンバーカード等 e-Taxならカード読取 6 源泉徴収票 勤務先（会社員の場合） 給与所得がある方のみ 以下で各書類の内容と取得方法を詳しく説明します。\n1. 年間取引報告書（FX業者から取得） 年間取引報告書は、1月1日から12月31日の間に行ったすべてのFX取引の損益をFX業者が集計した書類です。確定申告書の記入に必要な「年間損益額」はこの書類から転記します。複数の業者で口座を持っている場合は、すべての業者分を取得して合算する必要があります。\n取得はFX業者のマイページ（会員ページ）から行います。具体的な手順は後述します。\n2. 確定申告書B（第一表・第二表） 確定申告書Bは、個人の所得を申告するための基本書類です。給与所得・事業所得・雑所得など複数の所得区分を一枚にまとめて記載します。FXによる所得は「先物取引に係る雑所得等」として第三表に記入し、その合計が第一表に連動します。\n国税庁の確定申告書等作成コーナーやe-Taxを使えば、画面の案内に沿って入力するだけで自動生成されます。税務署の窓口でも紙の用紙を入手できます。\n3. 申告書第三表（分離課税用） FXの所得は「申告分離課税」の対象となるため、給与所得等と合算する総合課税とは別に、専用の第三表が必要です。第三表には先物取引に係る所得額と税額が記載されます。e-Taxや確定申告書等作成コーナーを使う場合は、FX所得を入力すると自動的に第三表が生成されます。\n4. 先物取引に係る雑所得等の金額の計算明細書（付表） この付表は、FX（および商品先物・オプション取引等）による損益の計算根拠を記載する書類です。年間取引報告書の数字をもとに、各業者ごとの収入金額・必要経費・差引金額を記入します。損失が出ていて翌年以降に繰り越す場合も、この付表を使って繰越損失額を申告します。\n国税庁のウェブサイト（検索キーワード「付表 先物取引 雑所得」）からPDFをダウンロードするか、e-Taxの作成コーナーで自動生成してください。\n5. 本人確認書類（マイナンバーカード等） 確定申告書を提出する際には、マイナンバーの確認と本人確認を同時に行う必要があります。マイナンバーカード1枚で両方を兼ねられるため最も簡便です。カードがない場合は「通知カード＋運転免許証」などの組み合わせで代替できます。e-Taxを利用する場合はマイナンバーカードとカードリーダー（またはスマートフォン）が必要です。\n6. 源泉徴収票（会社員の場合） 会社員がFX利益を申告する際は、給与の源泉徴収票も申告書に記載する必要があります。毎年1月から2月にかけて勤務先から交付される書類ですが、紛失した場合は経理部門や人事部門に再発行を依頼してください。\n年間取引報告書の取得方法 年間取引報告書はFX業者のマイページ（会員ページ）からダウンロードするのが一般的です。業者によってメニュー名や操作手順は多少異なりますが、基本的な流れは共通しています。\n一般的な取得手順\nFX業者の公式サイトにアクセスし、会員ページ（マイページ）にログインする 「取引履歴」「報告書」「各種書類」「税務書類」などのメニューを探す（業者により名称が異なる） 対象年度（例：2025年分）を選択する 「年間取引報告書」「損益報告書」「年間損益一覧」などの書類名をクリックしてPDFをダウンロードする ダウンロードしたPDFを印刷、またはパソコン上で参照しながら確定申告書に転記する 取得時の注意点\nメニュー名は業者によって異なります。見当たらない場合は「お問い合わせ」や「FAQ」で「年間取引報告書」と検索するか、サポートに問い合わせてください。 対象年度が「前年分」になっているか確認してください。当年のデータを誤って取得しないよう注意が必要です。 複数の口座（異なる通貨ペアや取引種別ごとに口座が分かれている場合）がある場合は、すべての口座分を取得してください。 書類の発行が翌年1月下旬〜2月にかけて行われる業者が多いため、1月中旬以前は前年分が未反映の場合があります。 確定申告書の記入ポイント 第三表「先物取引に係る雑所得等」欄に記入する FXの損益は確定申告書B（第一表・第二表）には直接記入せず、まず申告書第三表の「先物取引に係る雑所得等」欄に記入します。そこで算出された税額が第一表の所定欄に転記される流れです。\n記入の流れは以下のとおりです。\n付表（先物取引に係る雑所得等の金額の計算明細書）に業者ごとの損益を記入し、合計額を算出する 付表の合計額を第三表の「先物取引に係る雑所得等」欄に転記する 必要経費（後述）を差し引いた後の金額が「所得金額」となる 第三表で計算した税額を第一表の「分離課税の所得税額」欄に転記する 税率は申告分離課税20.315% FXの利益にかかる税率は、所得金額に関わらず一律20.315%（所得税15.315%＋住民税5%）です。給与所得など他の所得の税率とは合算されません。これは「申告分離課税」と呼ばれる仕組みで、高収入であっても低収入であっても同じ税率が適用されます。\nなお、損失が出た年は「先物取引の雑所得等の損失の繰越控除」を利用することで、翌年以降3年間にわたって利益と相殺できます。繰越控除を受けるには、損失が出た年も確定申告を行う必要があります。\n必要経費として計上できるもの FX取引に直接関連する費用は必要経費として計上し、課税対象の利益から差し引くことができます。主な例として、FX専用のインターネット回線費用（自宅兼用の場合は按分）、取引に使用したパソコン・スマートフォンの減価償却費（業務専用部分）、FX関連書籍・セミナー受講費などが挙げられます。家賃や日常的な通信費など、FX取引と無関係な費用は計上できません。経費計上する場合は領収書等の証拠書類を保管しておいてください。\ne-Taxで申告する手順 e-Taxは国税庁が提供するオンライン申告システムです。税務署に出向くことなく、自宅から申告書を提出できます。\n事前に必要なもの マイナンバーカード マイナンバーカード対応のスマートフォン（ICチップ読取機能付き）、またはICカードリーダーライター パソコンまたはスマートフォン e-Taxの申告手順 国税庁「確定申告書等作成コーナー」にアクセスする 国税庁の公式サイト（nta.go.jp）から「確定申告書等作成コーナー」を開きます。\n「作成開始」から申告書の種類を選択する 「所得税」を選び、FX収入がある場合は「先物取引による所得がある」にチェックを入れます。\nマイナンバーカードでログインする スマートフォンのNFCリーダーまたはICカードリーダーライターを使い、マイナンバーカードを読み取って本人認証します。\n画面の案内に沿って収入・所得を入力する 給与所得がある場合は源泉徴収票の数字を入力します。FX所得は「先物取引に係る雑所得等」の入力画面で、年間取引報告書の損益額を入力します。\n付表・第三表が自動生成されることを確認する 入力が完了すると、必要な書類（付表・第三表含む）が自動的に作成されます。税額も自動計算されます。\n内容を確認して送信する 申告書の内容を確認し、問題がなければ「送信」ボタンをクリックして提出完了です。\n確定申告書類の作成はfreee会計 を使えばガイドに沿って入力するだけで書類が完成し、e-Taxへの連携もスムーズです。FX所得の入力にも対応しています。\nよくある質問 Q. 複数のFX業者を使っている場合、損益はどう申告するのですか？\nA. 複数業者の口座がある場合は、それぞれの年間取引報告書を取得し、損益を合算して申告します。付表（計算明細書）には業者ごとの損益を記入する欄があるため、各業者の数字を別行に記入してください。A社で50万円の利益・B社で20万円の損失であれば、合算した30万円が課税対象となります。\nQ. FX取引で損失が出た年も確定申告は必要ですか？\nA. 利益がゼロまたは損失の場合、確定申告の義務は原則ありません。ただし、損失を翌年以降に繰り越して将来の利益と相殺する「損失繰越控除」を利用したい場合は、損失が出た年も申告が必要です。申告しなければ繰越控除の権利が失われるため、将来の利益に備えて申告しておくことをお勧めします。\nQ. スワップポイントも申告が必要ですか？\nA. はい、スワップポイントもFXの利益として課税対象になります。年間取引報告書にはスワップポイントを含んだ損益が記載されていることが多いですが、念のず確認してください。\nQ. 会社の給与とFXの利益は合算して税率が上がりますか？\nA. FXの利益は申告分離課税（一律20.315%）のため、給与所得と合算されることはありません。給与の税率がいくらであっても、FX利益の税率は変わりません。ただし、住民税の計算では合算所得に基づいて保険料等が変わる場合があります。\nQ. 年間取引報告書に記載された数字と自分の計算が合いません。どうすればいいですか？\nA. 業者が発行する年間取引報告書は業者のシステムで正式に集計されたものです。記憶や手計算との差異が生じる場合は、取引履歴の詳細データをダウンロードして確認するか、業者のサポートに問い合わせてください。申告書には業者の報告書記載の数字を使用するのが原則です。\nまとめ FX確定申告に必要な書類は大きく6種類です。\n年間取引報告書 — FX業者のマイページからダウンロード 確定申告書B（第一表・第二表） — e-Taxまたは税務署で入手 申告書第三表（分離課税用） — FX所得は申告分離課税20.315% 付表（先物取引に係る雑所得等の金額の計算明細書） — 業者ごとの損益を記入 本人確認書類 — マイナンバーカードが最も簡便 源泉徴収票 — 会社員の場合のみ必要 書類を揃えたら、e-Taxの確定申告書等作成コーナーを使って入力・送信するのが最も効率的です。税額の事前シミュレーションにはFX利益計算ツール を活用してください。FX以外の副業収入も含めた税金の全体像を確認したい場合は副業税金計算ツール もご利用いただけます。\n確定申告は毎年2月16日から3月15日が提出期間です（土日の場合は翌営業日）。書類の取得に時間がかかる場合もあるため、1月中から準備を始めることをお勧めします。\n関連ツール FXの利益を計算 → FX利益計算シミュレーター 副業の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター あわせて読みたい FX利益20万円超えたら確定申告が必要？サラリーマン向けに税額を実計算 FXの損失は3年繰り越せる？繰越控除の申告手順を図解で解説 副業の確定申告やり方2026年版【freee・マネーフォワード対応】 ","permalink":"https://productivity-works.com/ja/posts/fx-kakuteishinkoku-shorui-ichiran/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003eFXで利益が出たとき、多くのトレーダーが戸惑うのが確定申告の手続きです。「何の書類を集めればいいかわからない」「どこで取得するのか見当もつかない」という声はよく聞かれます。\u003c/p\u003e\n\u003cp\u003eこの記事では、FX確定申告に必要な書類を一覧でまとめ、それぞれの取得方法を順を追って解説します。特に初めて申告に臨むトレーダーを念頭に置き、書類の役割と入手先、記入時の注意点、e-Taxを使った提出手順まで網羅しています。手元にこの記事を置きながら準備を進めれば、書類不足で税務署に出直すような事態を防げます。\u003c/p\u003e\n\u003cdiv style=\"max-width:620px;margin:1.8em auto;text-align:center;\"\u003e\n\u003csvg viewBox=\"0 0 620 290\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:100%;height:auto;\" aria-label=\"FX確定申告の手順フロー\"\u003e\n  \u003cstyle\u003etext { font-family: 'Noto Sans JP', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', sans-serif; }\u003c/style\u003e\n  \u003crect width=\"620\" height=\"290\" rx=\"12\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"26\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"14\" font-weight=\"bold\"\u003eFX確定申告 ステップフロー\u003c/text\u003e\n  \u003cdefs\u003e\n    \u003cmarker id=\"arr3\" markerWidth=\"8\" markerHeight=\"8\" refX=\"6\" refY=\"3\" orient=\"auto\"\u003e\n      \u003cpath d=\"M0,0 L0,6 L8,3 z\" fill=\"#4a9eff\"/\u003e\n    \u003c/marker\u003e\n  \u003c/defs\u003e\n  \u003c!-- Step 1 --\u003e\n  \u003crect x=\"30\" y=\"44\" width=\"160\" height=\"54\" rx=\"10\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"110\" y=\"66\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003eStep 1\u003c/text\u003e\n \u003ctext x=\"110\" y=\"82\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003e年間取引報告書\u003c/text\u003e\n \u003ctext x=\"110\" y=\"96\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003eFX業者マイページから取得\u003c/text\u003e\n  \u003cline x1=\"190\" y1=\"71\" x2=\"220\" y2=\"71\" stroke=\"#4a9eff\" stroke-width=\"1.5\" marker-end=\"url(#arr3)\"/\u003e\n  \u003c!-- Step 2 --\u003e\n  \u003crect x=\"220\" y=\"44\" width=\"160\" height=\"54\" rx=\"10\" fill=\"#60a5fa\"/\u003e\n \u003ctext x=\"300\" y=\"66\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003eStep 2\u003c/text\u003e\n \u003ctext x=\"300\" y=\"82\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003e申告書類の準備\u003c/text\u003e\n \u003ctext x=\"300\" y=\"96\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003e第三表・付表・源泉徴収票\u003c/text\u003e\n  \u003cline x1=\"380\" y1=\"71\" x2=\"410\" y2=\"71\" stroke=\"#4a9eff\" stroke-width=\"1.5\" marker-end=\"url(#arr3)\"/\u003e\n  \u003c!-- Step 3 --\u003e\n  \u003crect x=\"410\" y=\"44\" width=\"180\" height=\"54\" rx=\"10\" fill=\"#93c5fd\"/\u003e\n \u003ctext x=\"500\" y=\"66\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003eStep 3\u003c/text\u003e\n \u003ctext x=\"500\" y=\"82\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003ee-Tax入力・送信\u003c/text\u003e\n \u003ctext x=\"500\" y=\"96\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003eマイナンバーカードで申請\u003c/text\u003e\n  \u003c!-- 区切り線 --\u003e\n  \u003cline x1=\"30\" y1=\"116\" x2=\"590\" y2=\"116\" stroke=\"#e2e8f0\" stroke-width=\"1\" stroke-dasharray=\"4,4\"/\u003e\n  \u003c!-- 詳細説明ボックス --\u003e\n  \u003c!-- 年間取引報告書 詳細 --\u003e\n  \u003crect x=\"30\" y=\"126\" width=\"160\" height=\"70\" rx=\"8\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"110\" y=\"146\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003e必要書類\u003c/text\u003e\n \u003ctext x=\"110\" y=\"162\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・年間取引報告書\u003c/text\u003e\n \u003ctext x=\"110\" y=\"176\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・確定申告書B\u003c/text\u003e\n \u003ctext x=\"110\" y=\"190\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・本人確認書類\u003c/text\u003e\n  \u003c!-- 記入方法 詳細 --\u003e\n  \u003crect x=\"220\" y=\"126\" width=\"160\" height=\"70\" rx=\"8\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"300\" y=\"146\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003e記入ポイント\u003c/text\u003e\n \u003ctext x=\"300\" y=\"162\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・申告分離課税を選択\u003c/text\u003e\n \u003ctext x=\"300\" y=\"176\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・第三表に損益を記入\u003c/text\u003e\n \u003ctext x=\"300\" y=\"190\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・税率は一律20.315%\u003c/text\u003e\n  \u003c!-- 提出 詳細 --\u003e\n  \u003crect x=\"410\" y=\"126\" width=\"180\" height=\"70\" rx=\"8\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"500\" y=\"146\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003e提出と納付\u003c/text\u003e\n \u003ctext x=\"500\" y=\"162\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・申告期限：3月15日\u003c/text\u003e\n \u003ctext x=\"500\" y=\"176\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・e-Taxで自宅から送信\u003c/text\u003e\n \u003ctext x=\"500\" y=\"190\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・納税額も自動計算\u003c/text\u003e\n  \u003c!-- 損失繰越バナー --\u003e\n  \u003crect x=\"30\" y=\"210\" width=\"560\" height=\"50\" rx=\"10\" fill=\"#10b981\"/\u003e\n \u003ctext x=\"310\" y=\"232\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003e損失が出た年も申告を忘れずに！\u003c/text\u003e\n \u003ctext x=\"310\" y=\"252\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\"\u003e損失繰越控除（3年間）で将来の利益と相殺できます\u003c/text\u003e\n\u003cp\u003e\u003ctext x=\"310\" y=\"278\" text-anchor=\"middle\" fill=\"#cbd5e1\" font-size=\"10\"\u003e確定申告期間：毎年2月16日〜3月15日\u003c/text\u003e\n\u003c/svg\u003e\u003c/p\u003e","title":"FX確定申告に必要な書類一覧と取得方法｜初心者向け完全手順"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nFX口座を開設しようとしたのに審査に落ちてしまった、あるいはこれから申し込む予定だが審査が通るか不安、という方は少なくありません。証券口座と異なり、FX口座には取引所が独自に設ける審査基準があり、申告内容によっては通過できないケースがあります。\nこの記事では、FX口座開設の審査で何が確認されているか、落ちる主な原因、そして通過率を上げるための具体的な4つの対策を解説します。審査に落ちた場合の対処法についても触れるので、最後まで読んでいただければ次のアクションが明確になるはずです。\nFX口座開設の審査は何をチェックしている？ FX業者は口座開設の際、申込者が「適切なリスクを理解した上で取引できる人物かどうか」を確認する義務を負っています。これは金融商品取引法に基づく「適合性の原則」と呼ばれるもので、業者は顧客の知識・経験・財産状況・取引目的に照らして、不適切な勧誘をしてはならないとされています。\n審査で確認される主な項目は以下のとおりです。\n本人確認（KYC）\nマイナンバーカード、運転免許証、パスポートなどによる本人確認が必須です。氏名・住所・生年月日が一致しないと審査が進みません。住所が変更されているのに古い住所が記載された証明書を提出するケースはよくある失敗例です。\n年齢\n多くのFX業者では18歳以上を申込条件としています。業者によっては20歳以上を条件とする場合もあります。上限年齢については明示していない業者が多いですが、高齢の申込者に対して追加確認を行う業者もあります。\n金融資産\n申告する金融資産の額（預貯金・有価証券・保険などの合計）は、取引に必要な資金力があるかどうかの指標として使われます。金融資産が極端に少ない場合、リスクに見合った資金がないと判断されることがあります。\n投資経験\nFX・株式・投資信託・外貨預金などの投資経験の有無と年数を申告します。経験がゼロの場合、「FXのリスクを理解した上での申し込みか」という観点から審査が慎重になる傾向があります。\n職業・収入\n会社員・自営業・学生・無職など職業の種別と、年収の目安を申告します。安定した収入があるかどうかは、損失を抱えた場合に対応できるかどうかの判断材料の一つです。\n審査に落ちる5つの原因 1. 年齢制限に該当している 18歳未満の方は一般的に申し込みができません。また、一部の業者では未成年（18〜19歳）の扱いが異なる場合があります。申し込み前に業者の利用規約で年齢要件を確認してください。\n2. 申告した金融資産が少なすぎる 「金融資産100万円未満」「50万円未満」といった選択肢を選んだ場合、リスク許容度が低いと判断される可能性があります。預貯金しか持っていない場合でも、保険の解約返戻金や積立金なども含めた総額で考えることが重要です。ただし、虚偽申告は後述のとおり厳禁です。\n3. 投資経験が「なし」だけで記載している 投資経験の欄に「なし」と記入すること自体は正直な申告ですが、「FXのリスク（レバレッジ・損失拡大の可能性）を理解しているか」という業者の判断に影響することがあります。外貨預金や投資信託の経験があれば、それを正確に申告することが重要です。\n4. 申告内容の虚偽・矛盾 収入や資産を過大に申告したり、職業欄に虚偽を記載したりするケースです。業者は申告内容の整合性をチェックするため、矛盾が生じると審査で弾かれる可能性があります。また、虚偽申告は契約違反になるため、後から口座停止になるリスクもあります。\n5. 反社会的勢力チェック（反社チェック）への抵触 これはほぼ全業者が実施しています。氏名・住所・生年月日などのデータベース照合で問題があれば、申し込み内容に関わらず口座開設は拒否されます。一般的な申込者が意識するべき事項ではありませんが、審査の仕組みとして存在します。\n審査通過率を上げる4つの対策 対策1. 金融資産は正直に。ただし預貯金＋有価証券の合計で記載する 金融資産を申告する際、「普通預金だけ」と狭く考えず、保有しているすべての金融資産を合算した額を申告しましょう。\n含めてよい金融資産の例:\n普通預金・定期預金 株式・投資信託・債券などの有価証券（時価） 外貨預金 生命保険・個人年金の解約返戻金相当額 たとえば預貯金が30万円でも、積立型の生命保険や持ち株制度で100万円程度の価値がある場合、合算すれば「100万円以上」の選択肢を正直に選べます。虚偽申告ではなく、正確な合算申告を心がけてください。\n対策2. 投資経験は「少しでもあれば必ず記載する」 「FXの経験はないが、会社の持ち株制度で株式を保有している」「銀行で外貨預金をしたことがある」「iDeCoや積立NISAで投資信託を買っている」——これらはすべて投資経験として申告できます。\nFXと直接関係がなくても、金融商品に触れた経験があることは「リスクの概念を理解している」というシグナルになります。申告フォームをよく読み、該当する経験があれば漏らさず記入しましょう。\n対策3. 複数社に同時申し込みをする FX業者ごとに審査基準は非公開であり、A社では落ちてもB社では通るという例は珍しくありません。時間を節約するためにも、2〜3社に同時に申し込むことを検討してください。\n複数申し込みによるペナルティは一般的にありません。口座を複数持つこと自体も問題ありません。ただし、申告内容は各社で統一し、矛盾が生じないように注意してください。\n対策4. 審査が比較的通りやすいとされる大手業者から申し込む FX業者の中でも、口座数の多い大手業者は申込者の多様性を受け入れているケースが多く、一般的に審査が比較的通りやすいとされています（ただし各社の基準は非公開であり保証はできません）。\n初めて申し込む場合は、取引高・口座数ともに国内最大級とされている業者を選ぶのが一つの戦略です。スプレッドや取引ツールの使いやすさと合わせて検討しましょう。\n審査に落ちた場合の対処法 別の業者に申し込む 前述のとおり、業者によって審査基準が異なります。1社で落ちたからといってFX取引を諦める必要はありません。申告内容を見直した上で、別の業者に申し込んでみましょう。\n申告内容を見直す際のチェックリスト:\n本人確認書類の住所は現住所と一致しているか 金融資産は合算額で申告しているか 投資経験は漏れなく記載しているか 職業・収入の申告に矛盾はないか 期間を空けて再申請する 同じ業者に再申請する場合は、一定の期間を空けることが推奨されます。期間の目安は業者によって異なりますが、一般的には3〜6か月程度とされています。再申請の際は、申告内容に変化（就職・昇給・金融資産の増加など）があれば、それを反映した上で申し込みましょう。\nなお、審査に落ちた理由は業者から通知されないのが通常です。「なぜ落ちたか教えてほしい」と問い合わせても回答が得られないケースが多いため、上記のチェックリストを参考に自己点検するしかありません。\n投資経験を積んでから再申請する 現時点で投資経験がゼロの場合、先に証券口座で投資信託や株式ETFの購入を経験してから再申請するという方法もあります。証券口座の審査はFXよりも一般的に緩やかな傾向があります。数か月間の投資経験を積むことで、FX口座開設の審査に通りやすくなる場合があります。\n口座開設後の利益シミュレーション 審査を通過して口座を開設した後、実際にどれくらいの利益が見込めるかを事前に試算しておくことは重要です。証拠金・レバレッジ・ポジションサイズ・値幅によって損益は大きく変わります。\nFX利益計算ツール で口座開設後の利益をシミュレーションしてみましょう。投資元本・レバレッジ・想定値動きを入力するだけで、想定利益と損失の目安を確認できます。実際の取引を始める前に、複数のシナリオを試算することをおすすめします。\nFX口座を開設するなら、同時にNISA口座も検討してみてください。**楽天証券 **は審査基準も明確で、初心者に人気の証券会社です。\nまとめ FX口座開設の審査に落ちる主な原因は、年齢・金融資産の過少申告・投資経験の未記載・虚偽申告です。これらは正確な情報の申告と、申告方法の工夫（金融資産の合算、投資経験の網羅的な記載）によって改善できます。\n4つの対策をまとめます。\n金融資産は預貯金＋有価証券の合計で正直に申告する FX以外の投資経験（外貨預金・投資信託など）も漏らさず記載する 複数社に同時申し込みをして、選択肢を広げる 口座数・取引高の多い大手業者を優先的に選ぶ 審査に落ちた場合でも、別業者への申し込みや期間を空けての再申請で口座開設できる可能性は十分あります。焦らず、申告内容を丁寧に見直すことが近道です。\n副業としてFXを始める方は、利益が出た場合の税金計算も重要です。副業税金計算ツール で、FX所得にかかる税負担の目安を事前に確認しておきましょう。雑所得の申告漏れはペナルティの対象になるため、稼ぎ始める前に把握しておくことをおすすめします。\n関連ツール FXの利益を計算 → FX利益計算シミュレーター 副業の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 関連記事 海外FXおすすめ業者2026年版：スプレッドと特徴を比較 FX利益20万円超の確定申告のやり方 FXの損失繰越控除：3年間の申告手順と注意点 FXのスワップポイントにかかる税金と申告方法 副業FXで住民税がバレない方法と節税術 ","permalink":"https://productivity-works.com/ja/posts/fx-koza-kaisetsu-shinsa-taisaku/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003eFX口座を開設しようとしたのに審査に落ちてしまった、あるいはこれから申し込む予定だが審査が通るか不安、という方は少なくありません。証券口座と異なり、FX口座には取引所が独自に設ける審査基準があり、申告内容によっては通過できないケースがあります。\u003c/p\u003e\n\u003cp\u003eこの記事では、FX口座開設の審査で何が確認されているか、落ちる主な原因、そして通過率を上げるための具体的な4つの対策を解説します。審査に落ちた場合の対処法についても触れるので、最後まで読んでいただければ次のアクションが明確になるはずです。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"fx口座開設の審査は何をチェックしている\"\u003eFX口座開設の審査は何をチェックしている？\u003c/h2\u003e\n\u003cp\u003eFX業者は口座開設の際、申込者が「適切なリスクを理解した上で取引できる人物かどうか」を確認する義務を負っています。これは金融商品取引法に基づく「適合性の原則」と呼ばれるもので、業者は顧客の知識・経験・財産状況・取引目的に照らして、不適切な勧誘をしてはならないとされています。\u003c/p\u003e\n\u003cp\u003e審査で確認される主な項目は以下のとおりです。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e本人確認（KYC）\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eマイナンバーカード、運転免許証、パスポートなどによる本人確認が必須です。氏名・住所・生年月日が一致しないと審査が進みません。住所が変更されているのに古い住所が記載された証明書を提出するケースはよくある失敗例です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e年齢\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e多くのFX業者では18歳以上を申込条件としています。業者によっては20歳以上を条件とする場合もあります。上限年齢については明示していない業者が多いですが、高齢の申込者に対して追加確認を行う業者もあります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e金融資産\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e申告する金融資産の額（預貯金・有価証券・保険などの合計）は、取引に必要な資金力があるかどうかの指標として使われます。金融資産が極端に少ない場合、リスクに見合った資金がないと判断されることがあります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e投資経験\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eFX・株式・投資信託・外貨預金などの投資経験の有無と年数を申告します。経験がゼロの場合、「FXのリスクを理解した上での申し込みか」という観点から審査が慎重になる傾向があります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e職業・収入\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e会社員・自営業・学生・無職など職業の種別と、年収の目安を申告します。安定した収入があるかどうかは、損失を抱えた場合に対応できるかどうかの判断材料の一つです。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"審査に落ちる5つの原因\"\u003e審査に落ちる5つの原因\u003c/h2\u003e\n\u003ch3 id=\"1-年齢制限に該当している\"\u003e1. 年齢制限に該当している\u003c/h3\u003e\n\u003cp\u003e18歳未満の方は一般的に申し込みができません。また、一部の業者では未成年（18〜19歳）の扱いが異なる場合があります。申し込み前に業者の利用規約で年齢要件を確認してください。\u003c/p\u003e\n\u003ch3 id=\"2-申告した金融資産が少なすぎる\"\u003e2. 申告した金融資産が少なすぎる\u003c/h3\u003e\n\u003cp\u003e「金融資産100万円未満」「50万円未満」といった選択肢を選んだ場合、リスク許容度が低いと判断される可能性があります。預貯金しか持っていない場合でも、保険の解約返戻金や積立金なども含めた総額で考えることが重要です。ただし、虚偽申告は後述のとおり厳禁です。\u003c/p\u003e\n\u003ch3 id=\"3-投資経験がなしだけで記載している\"\u003e3. 投資経験が「なし」だけで記載している\u003c/h3\u003e\n\u003cp\u003e投資経験の欄に「なし」と記入すること自体は正直な申告ですが、「FXのリスク（レバレッジ・損失拡大の可能性）を理解しているか」という業者の判断に影響することがあります。外貨預金や投資信託の経験があれば、それを正確に申告することが重要です。\u003c/p\u003e\n\u003ch3 id=\"4-申告内容の虚偽矛盾\"\u003e4. 申告内容の虚偽・矛盾\u003c/h3\u003e\n\u003cp\u003e収入や資産を過大に申告したり、職業欄に虚偽を記載したりするケースです。業者は申告内容の整合性をチェックするため、矛盾が生じると審査で弾かれる可能性があります。また、虚偽申告は契約違反になるため、後から口座停止になるリスクもあります。\u003c/p\u003e\n\u003ch3 id=\"5-反社会的勢力チェック反社チェックへの抵触\"\u003e5. 反社会的勢力チェック（反社チェック）への抵触\u003c/h3\u003e\n\u003cp\u003eこれはほぼ全業者が実施しています。氏名・住所・生年月日などのデータベース照合で問題があれば、申し込み内容に関わらず口座開設は拒否されます。一般的な申込者が意識するべき事項ではありませんが、審査の仕組みとして存在します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"審査通過率を上げる4つの対策\"\u003e審査通過率を上げる4つの対策\u003c/h2\u003e\n\u003ch3 id=\"対策1-金融資産は正直にただし預貯金有価証券の合計で記載する\"\u003e対策1. 金融資産は正直に。ただし預貯金＋有価証券の合計で記載する\u003c/h3\u003e\n\u003cp\u003e金融資産を申告する際、「普通預金だけ」と狭く考えず、保有しているすべての金融資産を合算した額を申告しましょう。\u003c/p\u003e\n\u003cp\u003e含めてよい金融資産の例:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e普通預金・定期預金\u003c/li\u003e\n\u003cli\u003e株式・投資信託・債券などの有価証券（時価）\u003c/li\u003e\n\u003cli\u003e外貨預金\u003c/li\u003e\n\u003cli\u003e生命保険・個人年金の解約返戻金相当額\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eたとえば預貯金が30万円でも、積立型の生命保険や持ち株制度で100万円程度の価値がある場合、合算すれば「100万円以上」の選択肢を正直に選べます。虚偽申告ではなく、正確な合算申告を心がけてください。\u003c/p\u003e\n\u003ch3 id=\"対策2-投資経験は少しでもあれば必ず記載する\"\u003e対策2. 投資経験は「少しでもあれば必ず記載する」\u003c/h3\u003e\n\u003cp\u003e「FXの経験はないが、会社の持ち株制度で株式を保有している」「銀行で外貨預金をしたことがある」「iDeCoや積立NISAで投資信託を買っている」——これらはすべて投資経験として申告できます。\u003c/p\u003e\n\u003cp\u003eFXと直接関係がなくても、金融商品に触れた経験があることは「リスクの概念を理解している」というシグナルになります。申告フォームをよく読み、該当する経験があれば漏らさず記入しましょう。\u003c/p\u003e\n\u003ch3 id=\"対策3-複数社に同時申し込みをする\"\u003e対策3. 複数社に同時申し込みをする\u003c/h3\u003e\n\u003cp\u003eFX業者ごとに審査基準は非公開であり、A社では落ちてもB社では通るという例は珍しくありません。時間を節約するためにも、2〜3社に同時に申し込むことを検討してください。\u003c/p\u003e\n\u003cp\u003e複数申し込みによるペナルティは一般的にありません。口座を複数持つこと自体も問題ありません。ただし、申告内容は各社で統一し、矛盾が生じないように注意してください。\u003c/p\u003e\n\u003ch3 id=\"対策4-審査が比較的通りやすいとされる大手業者から申し込む\"\u003e対策4. 審査が比較的通りやすいとされる大手業者から申し込む\u003c/h3\u003e\n\u003cp\u003eFX業者の中でも、口座数の多い大手業者は申込者の多様性を受け入れているケースが多く、一般的に審査が比較的通りやすいとされています（ただし各社の基準は非公開であり保証はできません）。\u003c/p\u003e\n\u003cp\u003e初めて申し込む場合は、取引高・口座数ともに国内最大級とされている業者を選ぶのが一つの戦略です。スプレッドや取引ツールの使いやすさと合わせて検討しましょう。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"審査に落ちた場合の対処法\"\u003e審査に落ちた場合の対処法\u003c/h2\u003e\n\u003ch3 id=\"別の業者に申し込む\"\u003e別の業者に申し込む\u003c/h3\u003e\n\u003cp\u003e前述のとおり、業者によって審査基準が異なります。1社で落ちたからといってFX取引を諦める必要はありません。申告内容を見直した上で、別の業者に申し込んでみましょう。\u003c/p\u003e\n\u003cp\u003e申告内容を見直す際のチェックリスト:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e本人確認書類の住所は現住所と一致しているか\u003c/li\u003e\n\u003cli\u003e金融資産は合算額で申告しているか\u003c/li\u003e\n\u003cli\u003e投資経験は漏れなく記載しているか\u003c/li\u003e\n\u003cli\u003e職業・収入の申告に矛盾はないか\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"期間を空けて再申請する\"\u003e期間を空けて再申請する\u003c/h3\u003e\n\u003cp\u003e同じ業者に再申請する場合は、一定の期間を空けることが推奨されます。期間の目安は業者によって異なりますが、一般的には3〜6か月程度とされています。再申請の際は、申告内容に変化（就職・昇給・金融資産の増加など）があれば、それを反映した上で申し込みましょう。\u003c/p\u003e\n\u003cp\u003eなお、審査に落ちた理由は業者から通知されないのが通常です。「なぜ落ちたか教えてほしい」と問い合わせても回答が得られないケースが多いため、上記のチェックリストを参考に自己点検するしかありません。\u003c/p\u003e\n\u003ch3 id=\"投資経験を積んでから再申請する\"\u003e投資経験を積んでから再申請する\u003c/h3\u003e\n\u003cp\u003e現時点で投資経験がゼロの場合、先に証券口座で投資信託や株式ETFの購入を経験してから再申請するという方法もあります。証券口座の審査はFXよりも一般的に緩やかな傾向があります。数か月間の投資経験を積むことで、FX口座開設の審査に通りやすくなる場合があります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"口座開設後の利益シミュレーション\"\u003e口座開設後の利益シミュレーション\u003c/h2\u003e\n\u003cp\u003e審査を通過して口座を開設した後、実際にどれくらいの利益が見込めるかを事前に試算しておくことは重要です。証拠金・レバレッジ・ポジションサイズ・値幅によって損益は大きく変わります。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://productivity-works.com/ja/tools/fx-profit-calculator/\"\u003eFX利益計算ツール\u003c/a\u003e\nで口座開設後の利益をシミュレーションしてみましょう。投資元本・レバレッジ・想定値動きを入力するだけで、想定利益と損失の目安を確認できます。実際の取引を始める前に、複数のシナリオを試算することをおすすめします。\u003c/p\u003e","title":"FX口座の開設審査に落ちる原因と通過率を上げる4つの対策"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nVPNおすすめ2026年版｜用途別に最適なサービスを選ぶ 「VPNって本当に必要？どれを選べばいい？」——リモートワークの普及、海外出張、動画配信サービスの地域制限など、VPNの需要は2026年も増え続けています。\nしかし市場には数百のVPNサービスがあり、無料のものから月額1,000円以上のものまで品質も価格もバラバラ。間違ったVPNを選ぶと、セキュリティがむしろ悪化することもあります。\nこの記事では安全性・速度・コスパの観点から本当におすすめできるVPNを厳選し、用途別に比較します。\nVPNとは？なぜ必要なのか VPN（Virtual Private Network） は、インターネット通信を暗号化するサービスです。\nメリット 具体例 通信の暗号化 カフェや空港の公衆WiFiでも盗聴されない IPアドレスの秘匿 サイトやアプリにあなたの所在地を知られない 地域制限の回避 海外から日本の動画サービスにアクセス（またはその逆） ISPの監視回避 プロバイダに閲覧履歴を見られない 特に必要な人:\n公衆WiFiを使うことがある人（カフェ・空港・ホテル） リモートワークで機密情報を扱う人 海外在住で日本のサービスを使いたい人 プライバシーを重視する人 おすすめVPN TOP5 比較表 サービス 月額料金 サーバー数 同時接続 日本語対応 特徴 NordVPN 590円〜（2年プラン） 6,400+ (111カ国) 10台 アプリ対応 総合力No.1 ExpressVPN 約900円〜（1年プラン） 3,000+ (105カ国) 8台 アプリ対応 速度最速 Surfshark 358円〜（2年プラン） 3,200+ (100カ国) 無制限 アプリ対応 コスパ最強 CyberGhost 320円〜（2年プラン） 11,500+ (100カ国) 7台 一部対応 サーバー数最多 MillenVPN 396円〜（2年プラン） 1,300+ (72カ国) 10台 完全日本語 日本企業運営 ※料金は2026年時点の長期プラン適用時。為替レートにより変動します。\n各VPN詳細レビュー 1. NordVPN — 総合力No.1 項目 詳細 料金 2年プラン: 590円/月、1年: 790円/月、1ヶ月: 1,970円 サーバー 6,400台以上（111カ国） 暗号化 AES-256（軍事レベル） ノーログポリシー あり（第三者監査済み） 特徴 Threat Protection（マルウェア・広告ブロック機能）付属 おすすめの人: 迷ったらこれ。速度・安全性・機能のバランスが最も優れています。\nNordVPNは独立監査法人によるノーログポリシーの検証を複数回実施済み。Threat Protection機能はWebサイトのトラッカーやマルウェアもブロックするため、セキュリティソフトの補完にもなります。\n注意点: 2年プラン契約が最もお得ですが、月額プランは割高。短期利用には不向きです。\n2. ExpressVPN — 速度重視ならベスト 項目 詳細 料金 1年プラン: 約900円/月、6ヶ月: 約1,400円/月 サーバー 3,000台以上（105カ国） 独自技術 Lightwayプロトコル（業界最速レベル） ノーログポリシー あり（第三者監査済み + RAMのみサーバー） おすすめの人: 動画視聴やゲームなど速度が重要な用途\nExpressVPNのLightwayプロトコルは接続・切断が1秒以下。動画のバッファリングがほぼ発生しません。サーバーはRAMのみで動作するため、電源オフ時にデータが完全消去されます。\n注意点: 他のVPNと比較して料金がやや高め。コスパよりも品質を求める方向け。\n3. Surfshark — コスパ最強・接続台数無制限 項目 詳細 料金 2年プラン: 358円/月（業界最安水準） サーバー 3,200台以上（100カ国） 同時接続 無制限（家族全員で使える） ノーログポリシー あり（第三者監査済み） おすすめの人: 家族で使いたい方、コストを抑えたい方\n月額358円で同時接続台数が無制限。家族4人が各自のスマホ・PC・タブレットすべてで同時使用しても追加料金なし。品質も上位VPNに引けを取りません。\n4. CyberGhost — 初心者に優しいUI 項目 詳細 料金 2年プラン: 320円/月 サーバー 11,500台以上（100カ国、業界最多） 特徴 用途別サーバー（ストリーミング用・ゲーム用・P2P用） おすすめの人: VPN初心者、特定の動画サービス用\n「Netflix用」「Amazon Prime Video用」など用途別に最適化されたサーバーを選ぶだけでOK。技術的な知識がなくても使えます。\n5. MillenVPN — 日本企業運営で安心 項目 詳細 料金 2年プラン: 396円/月 運営 アズポケット株式会社（日本企業） 特徴 日本語サポート、日本のサービスへのアクセス最適化 おすすめの人: 海外から日本の動画サービス（TVer、ABEMA、U-NEXT等）を見たい方\n日本企業が運営するため、日本語でのサポートが充実。中国やロシアなどVPN規制が厳しい国からの接続実績も多く報告されています。\n無料VPNの危険性 結論: 無料VPNの使用は推奨しません。\nリスク 説明 データ販売 無料VPNの約72%がユーザーデータを第三者に販売（CSIRO調査） マルウェア混入 約38%の無料VPNにマルウェアが含まれていた 通信速度制限 有料版への誘導のため意図的に速度を絞られる 暗号化の不備 古い暗号化方式や、そもそも暗号化されていないケースも 例外: ProtonVPN（スイス拠点）の無料プランは信頼性が高いですが、サーバーが3カ国限定・速度制限ありのため実用性は限定的です。\n月額300-600円で安全なVPNが使える時代に、無料VPNでプライバシーリスクを取る意味はありません。\n用途別おすすめまとめ 用途 おすすめVPN 総合的に一番 NordVPN 動画視聴・速度重視 ExpressVPN 家族で使う・コスパ重視 Surfshark VPN初心者 CyberGhost 海外から日本のサービス MillenVPN リモートワーク NordVPN（Threat Protection付き） よくある質問（FAQ） Q1. VPNは合法ですか？ 日本・アメリカ・EU諸国ではVPNの利用は完全に合法です。ただし中国・ロシア・イラン等の一部の国ではVPN使用に制限があります。VPNで違法行為をすること自体は当然違法です。\nQ2. VPNを使うと速度は落ちますか？ 暗号化のオーバーヘッドにより5-15%程度の速度低下はありますが、上位VPN（NordVPN・ExpressVPN）では体感できないレベルです。近いサーバーを選ぶことで影響を最小化できます。\nQ3. スマホでもVPNは使えますか？ はい。上記のすべてのVPNがiOS・Androidアプリを提供しています。ワンタップで接続/切断できます。\nQ4. NetflixやAmazon Prime Videoで使えますか？ NordVPN・ExpressVPN・Surfsharkは主要な動画配信サービスに対応しています。ただし動画サービス側もVPN検知を強化しているため、常に100%アクセスできるとは限りません。\nQ5. 2年プランは長すぎませんか？ コスパは2年プランが圧倒的ですが、サービスへの不安がある場合は30日間の返金保証を活用しましょう。すべての上位VPNが30日返金保証を提供しています。\nまとめ VPN選びで最も重要なのはセキュリティとノーログポリシーです。速度やサーバー数も大切ですが、まずは信頼できる運営元であることが前提。上記5つのVPNはすべて第三者監査済みのノーログポリシーを持つ信頼性の高いサービスです。\n迷ったらNordVPN（総合力）かSurfshark（コスパ）から始めるのがおすすめです。どちらも30日返金保証があるため、試してから判断できます。\n関連記事: リモートワークで生産性を上げる方法 ※本記事は情報提供を目的としており、特定のサービスの契約を推奨するものではありません。料金・機能等の最新情報は各サービスの公式サイトでご確認ください。\n関連ツール VPN代など月々の固定費を家計全体で把握する → 家計簿シミュレーター VPNを含む複数サブスクの年間コストを計算 → サブスク管理計算ツール 安全なパスワードを即座に生成 → パスワード生成ツール SHA-256・MD5ハッシュを生成 → ハッシュ生成ツール 関連テンプレート リモートワーク・セキュリティ対策に役立つテンプレート：\nリモートワーク効率化テンプレート — タスク管理・週次レビューシート AI仕事術ガイド — AIで生産性を10倍にする実践ガイド ","permalink":"https://productivity-works.com/ja/posts/vpn-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"vpnおすすめ2026年版用途別に最適なサービスを選ぶ\"\u003eVPNおすすめ2026年版｜用途別に最適なサービスを選ぶ\u003c/h1\u003e\n\u003cp\u003e「VPNって本当に必要？どれを選べばいい？」——リモートワークの普及、海外出張、動画配信サービスの地域制限など、VPNの需要は2026年も増え続けています。\u003c/p\u003e\n\u003cp\u003eしかし市場には数百のVPNサービスがあり、無料のものから月額1,000円以上のものまで品質も価格もバラバラ。\u003cstrong\u003e間違ったVPNを選ぶと、セキュリティがむしろ悪化する\u003c/strong\u003eこともあります。\u003c/p\u003e\n\u003cp\u003eこの記事では安全性・速度・コスパの観点から本当におすすめできるVPNを厳選し、用途別に比較します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"vpnとはなぜ必要なのか\"\u003eVPNとは？なぜ必要なのか\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eVPN（Virtual Private Network）\u003c/strong\u003e は、インターネット通信を暗号化するサービスです。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eメリット\u003c/th\u003e\n          \u003cth\u003e具体例\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e通信の暗号化\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eカフェや空港の公衆WiFiでも盗聴されない\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eIPアドレスの秘匿\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eサイトやアプリにあなたの所在地を知られない\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e地域制限の回避\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e海外から日本の動画サービスにアクセス（またはその逆）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eISPの監視回避\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eプロバイダに閲覧履歴を見られない\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e特に必要な人:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e公衆WiFiを使うことがある人（カフェ・空港・ホテル）\u003c/li\u003e\n\u003cli\u003eリモートワークで機密情報を扱う人\u003c/li\u003e\n\u003cli\u003e海外在住で日本のサービスを使いたい人\u003c/li\u003e\n\u003cli\u003eプライバシーを重視する人\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"おすすめvpn-top5-比較表\"\u003eおすすめVPN TOP5 比較表\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eサービス\u003c/th\u003e\n          \u003cth\u003e月額料金\u003c/th\u003e\n          \u003cth\u003eサーバー数\u003c/th\u003e\n          \u003cth\u003e同時接続\u003c/th\u003e\n          \u003cth\u003e日本語対応\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eNordVPN\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e590円〜（2年プラン）\u003c/td\u003e\n          \u003ctd\u003e6,400+ (111カ国)\u003c/td\u003e\n          \u003ctd\u003e10台\u003c/td\u003e\n          \u003ctd\u003eアプリ対応\u003c/td\u003e\n          \u003ctd\u003e総合力No.1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eExpressVPN\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e約900円〜（1年プラン）\u003c/td\u003e\n          \u003ctd\u003e3,000+ (105カ国)\u003c/td\u003e\n          \u003ctd\u003e8台\u003c/td\u003e\n          \u003ctd\u003eアプリ対応\u003c/td\u003e\n          \u003ctd\u003e速度最速\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eSurfshark\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e358円〜（2年プラン）\u003c/td\u003e\n          \u003ctd\u003e3,200+ (100カ国)\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e無制限\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eアプリ対応\u003c/td\u003e\n          \u003ctd\u003eコスパ最強\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eCyberGhost\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e320円〜（2年プラン）\u003c/td\u003e\n          \u003ctd\u003e11,500+ (100カ国)\u003c/td\u003e\n          \u003ctd\u003e7台\u003c/td\u003e\n          \u003ctd\u003e一部対応\u003c/td\u003e\n          \u003ctd\u003eサーバー数最多\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eMillenVPN\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e396円〜（2年プラン）\u003c/td\u003e\n          \u003ctd\u003e1,300+ (72カ国)\u003c/td\u003e\n          \u003ctd\u003e10台\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e完全日本語\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e日本企業運営\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※料金は2026年時点の長期プラン適用時。為替レートにより変動します。\u003c/p\u003e","title":"VPN おすすめ2026年版！用途別に比較【初心者向けガイド】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n副業収入が年間20万円を超えると確定申告が必要になります。初めての確定申告を前に「会計ソフトを使おう」と思い立ったとき、多くの人が直面するのが「freeeとマネーフォワード、どっちを選べばいいの？」という疑問です。\nこの2サービスは国内の個人向け会計ソフト市場でトップシェアを争う存在であり、機能面でも料金面でも甲乙つけがたい部分があります。本記事では、副業者の視点に特化して両者を徹底比較します。簿記の知識がなくても理解できるよう、具体的な数字と実際の使い勝手を中心に解説しますので、ぜひ最後まで読んで自分に合う一本を見つけてください。\n料金比較：月額いくら払えばいい？ 会計ソフトを選ぶ際、まず気になるのが料金です。両サービスとも複数のプランを用意しており、副業者が実際に必要な機能を見極めた上でプランを選ぶことが重要です。\nfreee会計の料金プラン（個人向け） プラン 月額（税抜） 主な特徴 スターター 1,180円 確定申告書類の作成、銀行・クレカ自動連携 スタンダード 2,380円 スターター機能＋請求書・見積書の作成・送付 プレミアム 3,316円 スタンダード機能＋税理士サポート・電話サポート 副業者の多くは「スターター」プランで事足りますが、クライアントへの請求書発行も行う場合は「スタンダード」が必要になります。\nマネーフォワード確定申告の料金プラン（個人向け） プラン 月額（税抜） 主な特徴 パーソナルミニ 900円 確定申告書類の作成、金融連携5件まで パーソナル 1,280円 金融連携無制限、請求書・領収書機能 パーソナルプラス 3,000円 パーソナル機能＋チャット・メールサポート マネーフォワードは最安プランが900円と、freeeよりも低価格から始められます。ただし、パーソナルミニは銀行・クレカの連携が5件までに限定されているため、口座や決済手段が多い人はパーソナルへのアップグレードが必要です。\n料金面の結論： マネーフォワードのほうがやや安い傾向にあります。副業の収支が単純で口座数が少なければ、マネーフォワードのパーソナルミニでも十分対応できます。\n※料金は2026年5月時点の情報です。キャンペーンや改定により変更される場合があります。最新の料金は必ず各公式サイトをご確認ください。\n使いやすさ比較：操作感はどう違う？ 料金と同じくらい重要なのが「操作のしやすさ」です。会計ソフトは毎月・毎年継続して使うツールですから、入力のストレスが少ないものを選ぶことが長続きのコツです。\nfreee：簿記ゼロでも始められる設計 freeeの最大の特徴は、簿記の知識がなくても直感的に操作できる点です。取引の入力時には「どんな取引でしたか？」という質問形式で項目を選んでいくだけで、借方・貸方の仕訳が自動生成されます。\n入力画面がシンプルで迷いにくい 勘定科目の選択肢が日常語で書かれている（例：「消耗品費」ではなく「文房具・備品」など） 確定申告書類の作成ウィザードが充実しており、流れに沿って進めれば完成する 「帳簿って何？」「仕訳って何？」というレベルから会計ソフトを使い始める人には、freeeがほぼ迷わず使えるでしょう。\nマネーフォワード：簿記経験者には使い慣れた設計 マネーフォワード確定申告は、仕訳形式を基本とした入力インターフェースを採用しています。簿記の基礎知識（借方・貸方の概念）があれば、むしろfreeeより自然に感じるかもしれません。\n手入力の仕訳も可能で、自由度が高い 帳票の見た目が会計の教科書に近く、数字の確認がしやすい 機能が多い分、初心者はどの画面を使えばいいか迷うことも 簿記2級・3級の資格を持っていたり、前職で経理業務を経験したりしている人には、マネーフォワードのほうがとっつきやすい場合があります。\n銀行・クレジットカード連携の比較 副業の収支管理を自動化するためには、銀行口座やクレジットカードとの連携が欠かせません。\n対応金融機関数 freee マネーフォワード 対応金融機関数 約3,200件 約2,500件 主要ネットバンク 対応 対応 主要クレカ 対応 対応 対応件数はfreeeが多いですが、メガバンク・地方銀行・主要クレカはどちらも網羅されています。差が出るのはマイナーな地銀、信用金庫、地方のネット証券などで、自分がよく使う口座が連携できるか事前に確認することをおすすめします。\n自動仕訳の精度 マネーフォワードはAI自動仕訳の学習機能が評判で、利用を続けると自分のパターンを学習して仕訳候補の精度が上がっていきます。freeeも自動仕訳機能を備えており基本的な精度は高いですが、「カスタマイズの細かさ」ではマネーフォワードのほうがユーザーの評価が高い傾向があります。\n副業者に重要な機能の比較 副業で確定申告を行う際に特に重要な機能を一覧で比較します。\n機能 freee マネーフォワード e-Tax（電子申告）対応 あり あり スマホアプリ iOS・Android対応 iOS・Android対応 レシート撮影・OCR読取 あり あり 請求書作成・送付 スタンダード以上 パーソナル以上 青色申告（65万円控除）対応 あり あり 白色申告対応 あり あり 複式簿記対応 あり あり チャットサポート プレミアムのみ パーソナルプラス 税理士連携 あり（有料） あり（有料） 主要な機能は両者ほぼ横並びです。どちらも副業の確定申告に必要な書類（青色・白色申告書、収支内訳書など）を作成でき、e-Taxによる電子申告にも対応しています。\nスマホアプリの使いやすさについては、freeeのアプリのほうが操作がシンプルという声が多く、移動中や外出先でサッとレシートを登録したい人にはfreeeが使いやすいと感じる人が多いようです。\nこんな人はfreeeがおすすめ 以下に当てはまる人には、freeeがより適しています。\n簿記の知識がゼロ、あるいはほとんどない人 質問形式のウィザードで迷わず入力できるため、会計の基礎知識がなくても安心して始められます。\nとにかく操作をシンプルにしたい人 画面設計が直感的で、「難しそう」という心理的ハードルが低いのがfreeeの強みです。\nスマホで経費入力を完結させたい人 アプリの操作性が高く、レシートをその場で撮影して登録する習慣がつきやすいです。\n初めて会計ソフトを使う人 サポートコンテンツ（ヘルプ記事・YouTube動画など）が充実しており、わからないことを自己解決しやすい環境が整っています。\n副業を始めたばかりで「確定申告のやり方もよくわからない」という段階であれば、freeeのほうが挫折しにくいでしょう。\nfreee会計を無料で試してみる こんな人はマネーフォワードがおすすめ 一方、次のような人にはマネーフォワードが向いています。\n簿記の基礎知識がある人・経理経験者 仕訳形式の入力に慣れている人なら、マネーフォワードのほうがかえってスムーズに操作できます。\nコストを最小限に抑えたい人 パーソナルミニは月900円（税抜）と、副業向け会計ソフトの中でも最安クラスです。口座・カードの数が少ない場合は、このプランで十分な場合があります。\n自動仕訳の学習精度を重視する人 継続利用によって自動仕訳の精度が向上していく学習機能は、取引数が多い副業者に特に恩恵があります。\n複数の副業や事業を持つ人 帳票の閲覧・管理機能が多機能で、収支の状況を細かく把握したい人に向いています。\nまとめ：迷ったらfreeeから始めるのが無難 freeeとマネーフォワードは、どちらも副業の確定申告に十分対応した優れたサービスです。ただ、副業を始めたばかりで会計の経験がない人にとっては、操作のわかりやすさという点でfreeeに一日の長があります。\n最初の確定申告は、とにかく「無事に完了させること」が最重要目標です。使い方に迷って途中で諦めてしまうリスクを減らすためにも、初心者にはfreeeをおすすめします。一方で、簿記経験がありコストを抑えたいという人は、マネーフォワードのパーソナルプランを比較検討してみてください。\nどちらのサービスも無料トライアル期間が設けられているため、まず試してみて使い心地を確かめるのが最善の選び方です。\nfreee マネーフォワード 初心者向き ◎ △ コスト △ ◎ 金融連携数 ◎ ○ 自動仕訳精度 ○ ◎ スマホ操作性 ◎ ○ 総合（初心者） ◎ ○ 副業で得た収入の税額を事前に把握しておきたい場合は、副業税金計算ツール が便利です。年収・副業収入を入力するだけで、おおよその所得税・住民税の追加負担額を試算できます。会計ソフトを選ぶ前に、まず自分がどの程度の税負担になるのかを把握しておくと、プラン選びの参考にもなります。\n関連ツール 副業の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター あわせて読みたい 副業フリーランスがfreeeで青色申告65万控除を最速で取る方法 会計ソフト おすすめ2026年版！個人事業主・フリーランス向け比較 freeeの経費科目一覧｜個人事業主・フリーランスが迷わない仕訳ガイド【2026年版】 ","permalink":"https://productivity-works.com/ja/posts/freee-vs-moneyforward-fukugyou/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e副業収入が年間20万円を超えると確定申告が必要になります。初めての確定申告を前に「会計ソフトを使おう」と思い立ったとき、多くの人が直面するのが「freeeとマネーフォワード、どっちを選べばいいの？」という疑問です。\u003c/p\u003e\n\u003cp\u003eこの2サービスは国内の個人向け会計ソフト市場でトップシェアを争う存在であり、機能面でも料金面でも甲乙つけがたい部分があります。本記事では、\u003cstrong\u003e副業者の視点\u003c/strong\u003eに特化して両者を徹底比較します。簿記の知識がなくても理解できるよう、具体的な数字と実際の使い勝手を中心に解説しますので、ぜひ最後まで読んで自分に合う一本を見つけてください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"料金比較月額いくら払えばいい\"\u003e料金比較：月額いくら払えばいい？\u003c/h2\u003e\n\u003cp\u003e会計ソフトを選ぶ際、まず気になるのが料金です。両サービスとも複数のプランを用意しており、副業者が実際に必要な機能を見極めた上でプランを選ぶことが重要です。\u003c/p\u003e\n\u003ch3 id=\"freee会計の料金プラン個人向け\"\u003efreee会計の料金プラン（個人向け）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eプラン\u003c/th\u003e\n          \u003cth\u003e月額（税抜）\u003c/th\u003e\n          \u003cth\u003e主な特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eスターター\u003c/td\u003e\n          \u003ctd\u003e1,180円\u003c/td\u003e\n          \u003ctd\u003e確定申告書類の作成、銀行・クレカ自動連携\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eスタンダード\u003c/td\u003e\n          \u003ctd\u003e2,380円\u003c/td\u003e\n          \u003ctd\u003eスターター機能＋請求書・見積書の作成・送付\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eプレミアム\u003c/td\u003e\n          \u003ctd\u003e3,316円\u003c/td\u003e\n          \u003ctd\u003eスタンダード機能＋税理士サポート・電話サポート\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e副業者の多くは「スターター」プランで事足りますが、クライアントへの請求書発行も行う場合は「スタンダード」が必要になります。\u003c/p\u003e\n\u003ch3 id=\"マネーフォワード確定申告の料金プラン個人向け\"\u003eマネーフォワード確定申告の料金プラン（個人向け）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eプラン\u003c/th\u003e\n          \u003cth\u003e月額（税抜）\u003c/th\u003e\n          \u003cth\u003e主な特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eパーソナルミニ\u003c/td\u003e\n          \u003ctd\u003e900円\u003c/td\u003e\n          \u003ctd\u003e確定申告書類の作成、金融連携5件まで\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eパーソナル\u003c/td\u003e\n          \u003ctd\u003e1,280円\u003c/td\u003e\n          \u003ctd\u003e金融連携無制限、請求書・領収書機能\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eパーソナルプラス\u003c/td\u003e\n          \u003ctd\u003e3,000円\u003c/td\u003e\n          \u003ctd\u003eパーソナル機能＋チャット・メールサポート\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eマネーフォワードは最安プランが900円と、freeeよりも低価格から始められます。ただし、パーソナルミニは銀行・クレカの連携が5件までに限定されているため、口座や決済手段が多い人はパーソナルへのアップグレードが必要です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e料金面の結論：\u003c/strong\u003e マネーフォワードのほうがやや安い傾向にあります。副業の収支が単純で口座数が少なければ、マネーフォワードのパーソナルミニでも十分対応できます。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e※料金は2026年5月時点の情報です。キャンペーンや改定により変更される場合があります。最新の料金は必ず各公式サイトをご確認ください。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"使いやすさ比較操作感はどう違う\"\u003e使いやすさ比較：操作感はどう違う？\u003c/h2\u003e\n\u003cp\u003e料金と同じくらい重要なのが「操作のしやすさ」です。会計ソフトは毎月・毎年継続して使うツールですから、入力のストレスが少ないものを選ぶことが長続きのコツです。\u003c/p\u003e\n\u003ch3 id=\"freee簿記ゼロでも始められる設計\"\u003efreee：簿記ゼロでも始められる設計\u003c/h3\u003e\n\u003cp\u003efreeeの最大の特徴は、\u003cstrong\u003e簿記の知識がなくても直感的に操作できる\u003c/strong\u003e点です。取引の入力時には「どんな取引でしたか？」という質問形式で項目を選んでいくだけで、借方・貸方の仕訳が自動生成されます。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e入力画面がシンプルで迷いにくい\u003c/li\u003e\n\u003cli\u003e勘定科目の選択肢が日常語で書かれている（例：「消耗品費」ではなく「文房具・備品」など）\u003c/li\u003e\n\u003cli\u003e確定申告書類の作成ウィザードが充実しており、流れに沿って進めれば完成する\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e「帳簿って何？」「仕訳って何？」というレベルから会計ソフトを使い始める人には、freeeがほぼ迷わず使えるでしょう。\u003c/p\u003e\n\u003ch3 id=\"マネーフォワード簿記経験者には使い慣れた設計\"\u003eマネーフォワード：簿記経験者には使い慣れた設計\u003c/h3\u003e\n\u003cp\u003eマネーフォワード確定申告は、\u003cstrong\u003e仕訳形式を基本とした入力インターフェース\u003c/strong\u003eを採用しています。簿記の基礎知識（借方・貸方の概念）があれば、むしろfreeeより自然に感じるかもしれません。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e手入力の仕訳も可能で、自由度が高い\u003c/li\u003e\n\u003cli\u003e帳票の見た目が会計の教科書に近く、数字の確認がしやすい\u003c/li\u003e\n\u003cli\u003e機能が多い分、初心者はどの画面を使えばいいか迷うことも\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e簿記2級・3級の資格を持っていたり、前職で経理業務を経験したりしている人には、マネーフォワードのほうがとっつきやすい場合があります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"銀行クレジットカード連携の比較\"\u003e銀行・クレジットカード連携の比較\u003c/h2\u003e\n\u003cp\u003e副業の収支管理を自動化するためには、銀行口座やクレジットカードとの連携が欠かせません。\u003c/p\u003e\n\u003ch3 id=\"対応金融機関数\"\u003e対応金融機関数\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003c/th\u003e\n          \u003cth\u003efreee\u003c/th\u003e\n          \u003cth\u003eマネーフォワード\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e対応金融機関数\u003c/td\u003e\n          \u003ctd\u003e約3,200件\u003c/td\u003e\n          \u003ctd\u003e約2,500件\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e主要ネットバンク\u003c/td\u003e\n          \u003ctd\u003e対応\u003c/td\u003e\n          \u003ctd\u003e対応\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e主要クレカ\u003c/td\u003e\n          \u003ctd\u003e対応\u003c/td\u003e\n          \u003ctd\u003e対応\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e対応件数はfreeeが多いですが、メガバンク・地方銀行・主要クレカはどちらも網羅されています。差が出るのはマイナーな地銀、信用金庫、地方のネット証券などで、自分がよく使う口座が連携できるか事前に確認することをおすすめします。\u003c/p\u003e\n\u003ch3 id=\"自動仕訳の精度\"\u003e自動仕訳の精度\u003c/h3\u003e\n\u003cp\u003eマネーフォワードは\u003cstrong\u003eAI自動仕訳の学習機能\u003c/strong\u003eが評判で、利用を続けると自分のパターンを学習して仕訳候補の精度が上がっていきます。freeeも自動仕訳機能を備えており基本的な精度は高いですが、「カスタマイズの細かさ」ではマネーフォワードのほうがユーザーの評価が高い傾向があります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"副業者に重要な機能の比較\"\u003e副業者に重要な機能の比較\u003c/h2\u003e\n\u003cp\u003e副業で確定申告を行う際に特に重要な機能を一覧で比較します。\u003c/p\u003e","title":"freeeとマネーフォワードどっちが副業向き？実際の費用と機能を徹底比較"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n転職サイトおすすめ2026年版｜年代・目的別に最適なサービスを選ぶ 「転職サイトが多すぎて、どこに登録すればいいかわからない」——これは転職活動を始める方の最も多い悩みです。2026年現在、日本の主要転職サービスだけでも50以上。それぞれ得意分野が異なり、闇雲に登録しても効果は薄いです。\nこの記事では年代別・目的別に本当におすすめできる転職サービスを厳選し、「転職サイト」と「転職エージェント」の違いから、複数サービスの使い分け方まで解説します。\n転職サイトと転職エージェントの違い 転職サイト 転職エージェント 仕組み 自分で求人を検索・応募 担当者が求人を紹介 費用 無料 無料（企業が費用負担） メリット マイペースで活動、求人数が多い 非公開求人、面接対策、年収交渉 デメリット すべて自分で対応 担当者との相性次第 向いている人 自分のペースで探したい人 プロのサポートが欲しい人 おすすめの使い方: 転職サイト2-3社 + 転職エージェント1-2社の併用が最も効率的です。\n【総合型】まず登録すべき転職サービス TOP3 1. doda（デューダ） 項目 内容 求人数 約25万件（2026年時点、非公開含む） 特徴 転職サイト + エージェント一体型 対象年代 20代〜40代 強み 求人数の多さ、エージェントとの併用が簡単 おすすめの人: 転職初心者、幅広い選択肢から選びたい方\ndodaは転職サイトとエージェントの機能を1つのサービスで使えるため、最初に登録するサービスとして最適です。自分で検索しつつ、エージェントからの紹介も受けられます。\n2. リクルートエージェント 項目 内容 求人数 約30万件（業界最大級、非公開求人20万件以上） 特徴 業界最大手のエージェント 対象年代 全年代 強み 非公開求人の圧倒的な数、各業界に精通したアドバイザー おすすめの人: とにかく多くの選択肢が欲しい方\n非公開求人だけで20万件以上は他社を圧倒。特に大手企業・有名企業の求人が豊富。担当者の質にバラつきがあるため、合わない場合は担当変更を依頼しましょう。\n3. マイナビ転職 項目 内容 求人数 約2万件（公開求人） 特徴 20代・30代の転職に特化 対象年代 20代〜30代前半 強み 第二新卒・未経験歓迎の求人が豊富 おすすめの人: 20代で初めての転職をする方\n大手転職サイトの中で最も若手向けの求人が充実。「未経験歓迎」「第二新卒歓迎」の求人割合が高く、初めての転職でも安心して使えます。\n【年代別】おすすめ転職サービス 20代向け サービス 特徴 マイナビ転職 第二新卒・未経験向け求人が豊富 ハタラクティブ 未経験・フリーターからの正社員転職に強い doda 幅広い求人 + エージェント併用可 20代は「未経験可」の求人が圧倒的に多い年代。経験が浅くても転職のハードルは低いです。\n30代向け サービス 特徴 doda 30代向けの即戦力求人が豊富 リクルートエージェント 非公開求人で年収アップ案件多数 ビズリーチ 年収500万円以上のハイクラス求人 30代は「即戦力」として最も市場価値が高い年代。年収アップ交渉もしやすいため、エージェントの活用が特に効果的。\n40代・50代向け サービス 特徴 ビズリーチ 管理職・エグゼクティブ求人 JACリクルートメント 外資系・グローバル企業 リクルートエージェント 幅広い年齢層に対応 40代以降は求人数が減るため、複数エージェントへの登録と人脈活用が重要になります。\n関連記事: 50代転職AI活用準備ガイド2026 【業種・職種特化型】専門転職サービス IT・エンジニア向け サービス 特徴 レバテックキャリア ITエンジニア特化、年収600万円以上の求人多数 Green IT/Web業界特化の転職サイト、カジュアル面談が特徴 Geekly IT・Web・ゲーム業界に特化 関連記事: フリーランスエンジニアの年収相場 ハイクラス・管理職向け サービス 特徴 ビズリーチ 年収500万円以上、ヘッドハンターからのスカウト型 JACリクルートメント 外資系・管理職に強い、両面型エージェント リクルートダイレクトスカウト リクルート運営のハイクラススカウト 女性向け サービス 特徴 Woman Career（doda） dodaの女性特化セクション LiBzCAREER 女性のキャリアアップに特化 type女性の転職エージェント 女性の転職支援実績豊富 障がい者向け サービス 特徴 dodaチャレンジ パーソルグループ運営、大手企業の障がい者雇用枠に強い atGP 障がい者転職支援の大手、在宅勤務求人も豊富 障がい者手帳をお持ちの方は、一般転職サイトよりも専門エージェントの方が適切な求人に出会えます。**dodaチャレンジ **はパーソルグループ（doda運営元）のサービスで、大手企業の非公開求人が豊富です。\n転職サービスの賢い使い方 複数登録のコツ 総合型2-3社 + 特化型1-2社の計3-5社に登録 2週間使ってみて、相性の良い2社に絞る エージェントの担当者が合わなければ遠慮なく変更依頼 転職活動の進め方 ステップ 期間目安 やること 1. 自己分析 1-2週間 強み・希望条件の整理 2. サービス登録 1日 3-5社に登録、職務経歴書アップロード 3. 求人検索・応募 2-4週間 週10-20社に応募（エージェント経由含む） 4. 面接 2-4週間 1次→2次→最終（平均2-3回） 5. 内定・交渉 1-2週間 年収交渉はエージェントに任せる 転職活動の平均期間: 3-6ヶ月。在職中の転職活動が安全です。\nAI活用のすすめ 2026年の転職活動ではAIの活用が当たり前になりつつあります。\n職務経歴書の作成: ChatGPTで下書き → 添削を繰り返す 面接対策: AIに想定質問を出させて模擬面接 企業研究: AIに企業の強み・弱みを分析させる 関連記事: ChatGPTで職務経歴書を作成する方法（50代向け） よくある質問（FAQ） Q1. 転職サイトへの登録は会社にバレますか？ 基本的にバレません。大手転職サイトには「企業ブロック機能」があり、現職の企業に情報が公開されないよう設定できます。\nQ2. 転職エージェントの面談は何を聞かれますか？ 転職理由、希望条件（年収・勤務地・職種）、職歴のヒアリングが中心。カジュアルな面談なので緊張は不要です。\nQ3. 何社くらいに応募すべきですか？ 書類通過率は約20-30%、面接通過率は約30-50%が一般的。10社応募 → 3社面接 → 1社内定が目安です。\nQ4. 転職回数が多いと不利ですか？ 3回以内なら大きなマイナスにはなりません。4回以上は理由を明確に説明できれば問題ありません。「キャリアアップのため」という前向きな理由が重要。\nQ5. 在職中と退職後、どちらで転職活動すべき？ 在職中を強く推奨します。収入が途切れず精神的余裕があり、条件交渉でも有利です。退職後は焦って条件を下げがちです。\nまとめ 転職サービス選びのポイントは**「自分の年代・状況に合ったサービスを3-5社登録し、2週間で2社に絞る」**ことです。\n初めての転職ならdoda（サイト+エージェント一体型）から。年収アップを狙うならリクルートエージェント（非公開求人30万件）。ハイクラスならビズリーチ。IT特化ならレバテックキャリア。\n最も大切なのは「まず登録して動き出すこと」。完璧な転職先は見つかりません。まずは市場を見ることで、自分の市場価値と選択肢がわかります。\n関連記事: 副業 おすすめ 在宅でスキルなしから始める方法 関連ツール BMIと適正体重をチェック → BMI計算ツール 転職後の年収・手取りをシミュレーション → 転職年収シミュレーター 手取り額の変化を確認 → 手取り計算ツール 時給と年収を換算 → 時給換算ツール ※本記事は情報提供を目的としており、特定の転職サービスの利用を推奨するものではありません。最新情報は各サービスの公式サイトでご確認ください。\n関連テンプレート 転職活動をサポートするテンプレート：\nChatGPTプロンプト集100選 — 職務経歴書作成・面接対策プロンプト含む AI仕事術ガイド — AIで転職活動を効率化する方法 ","permalink":"https://productivity-works.com/ja/posts/tenshoku-site-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"転職サイトおすすめ2026年版年代目的別に最適なサービスを選ぶ\"\u003e転職サイトおすすめ2026年版｜年代・目的別に最適なサービスを選ぶ\u003c/h1\u003e\n\u003cp\u003e「転職サイトが多すぎて、どこに登録すればいいかわからない」——これは転職活動を始める方の最も多い悩みです。2026年現在、日本の主要転職サービスだけでも50以上。それぞれ得意分野が異なり、闇雲に登録しても効果は薄いです。\u003c/p\u003e\n\u003cp\u003eこの記事では\u003cstrong\u003e年代別・目的別に本当におすすめできる転職サービス\u003c/strong\u003eを厳選し、「転職サイト」と「転職エージェント」の違いから、複数サービスの使い分け方まで解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"転職サイトと転職エージェントの違い\"\u003e転職サイトと転職エージェントの違い\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003c/th\u003e\n          \u003cth\u003e転職サイト\u003c/th\u003e\n          \u003cth\u003e転職エージェント\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e仕組み\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e自分で求人を検索・応募\u003c/td\u003e\n          \u003ctd\u003e担当者が求人を紹介\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e費用\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e無料\u003c/td\u003e\n          \u003ctd\u003e無料（企業が費用負担）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eメリット\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eマイペースで活動、求人数が多い\u003c/td\u003e\n          \u003ctd\u003e非公開求人、面接対策、年収交渉\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eデメリット\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eすべて自分で対応\u003c/td\u003e\n          \u003ctd\u003e担当者との相性次第\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e向いている人\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e自分のペースで探したい人\u003c/td\u003e\n          \u003ctd\u003eプロのサポートが欲しい人\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの使い方:\u003c/strong\u003e 転職サイト2-3社 + 転職エージェント1-2社の併用が最も効率的です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"総合型まず登録すべき転職サービス-top3\"\u003e【総合型】まず登録すべき転職サービス TOP3\u003c/h2\u003e\n\u003ch3 id=\"1-dodaデューダ\"\u003e1. doda（デューダ）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e求人数\u003c/td\u003e\n          \u003ctd\u003e約25万件（2026年時点、非公開含む）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e特徴\u003c/td\u003e\n          \u003ctd\u003e転職サイト + エージェント一体型\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e対象年代\u003c/td\u003e\n          \u003ctd\u003e20代〜40代\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e強み\u003c/td\u003e\n          \u003ctd\u003e求人数の多さ、エージェントとの併用が簡単\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e 転職初心者、幅広い選択肢から選びたい方\u003c/p\u003e\n\u003cp\u003edodaは転職サイトとエージェントの機能を1つのサービスで使えるため、最初に登録するサービスとして最適です。自分で検索しつつ、エージェントからの紹介も受けられます。\u003c/p\u003e\n\u003ch3 id=\"2-リクルートエージェント\"\u003e2. リクルートエージェント\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e求人数\u003c/td\u003e\n          \u003ctd\u003e約30万件（業界最大級、非公開求人20万件以上）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e特徴\u003c/td\u003e\n          \u003ctd\u003e業界最大手のエージェント\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e対象年代\u003c/td\u003e\n          \u003ctd\u003e全年代\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e強み\u003c/td\u003e\n          \u003ctd\u003e非公開求人の圧倒的な数、各業界に精通したアドバイザー\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e とにかく多くの選択肢が欲しい方\u003c/p\u003e\n\u003cp\u003e非公開求人だけで20万件以上は他社を圧倒。特に大手企業・有名企業の求人が豊富。担当者の質にバラつきがあるため、合わない場合は担当変更を依頼しましょう。\u003c/p\u003e\n\u003ch3 id=\"3-マイナビ転職\"\u003e3. マイナビ転職\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e求人数\u003c/td\u003e\n          \u003ctd\u003e約2万件（公開求人）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e特徴\u003c/td\u003e\n          \u003ctd\u003e20代・30代の転職に特化\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e対象年代\u003c/td\u003e\n          \u003ctd\u003e20代〜30代前半\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e強み\u003c/td\u003e\n          \u003ctd\u003e第二新卒・未経験歓迎の求人が豊富\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e 20代で初めての転職をする方\u003c/p\u003e","title":"転職サイト おすすめ2026年版！年代・目的別に徹底比較"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n副業でFXを始めたいけれど、「会社にバレたら困る」「住民税の通知で発覚するって本当？」と不安を感じていませんか。\n実際、副業FXが職場に発覚するケースの多くは、確定申告の方法を誤ったことによる住民税の金額変動が原因です。仕組みを正しく理解して適切な手続きをとれば、会社員でも副業FXを合法的に続けることができます。\nこの記事では、FXの利益が会社にバレる仕組みから、住民税の普通徴収への切り替え方法、利益別の税額シミュレーション、節税の具体策まで、ファクトベースで丁寧に解説します。\nFXの利益が会社にバレる仕組み FX取引で得た利益が会社に発覚する経路は、主に「住民税」です。その流れを理解するために、まず住民税の徴収方法を確認しましょう。\n特別徴収と普通徴収の違い 住民税には2種類の納付方法があります。\n特別徴収: 毎月の給与から天引きされる方式。会社が従業員に代わって市区町村に納付する。 普通徴収: 自分で納付書を使って年4回に分けて市区町村に直接納付する方式。 会社員は原則として特別徴収が適用されています。問題はここです。\nなぜ住民税の金額変動でバレるのか FX取引で利益が出て確定申告を行うと、その利益を含めた所得をもとに市区町村が翌年の住民税額を再計算します。その結果、特別徴収の金額が増加した通知が会社の経理担当者に届きます。\n通常の給与収入だけであれば住民税額はある程度予測できる範囲に収まりますが、副業収入が加わると不自然な増額が生じます。経理担当者が「この人の住民税が急に増えた」と気づけば、副業の存在が発覚するリスクがあります。\nこれが「住民税でバレる」メカニズムです。逆にいえば、住民税の徴収方法を普通徴収に切り替えることで、このリスクを大幅に低減できます。\n利益20万円以下なら確定申告不要？住民税申告は別途必要 「副業収入が20万円以下なら確定申告しなくていい」という話を聞いたことがある方は多いと思います。これは所得税に関するルールとしては概ね正しいのですが、住民税については別途申告が必要という点で、よくある誤解が生じています。\n所得税の20万円ルール 給与所得者（会社員）が他に所得を得た場合、その所得合計が年間20万円以下であれば、所得税の確定申告は不要です（給与が1か所から支払われており、他に申告が必要な所得がない場合）。FX取引の利益もこの対象に含まれます。\n住民税は20万円以下でも申告が必要 しかし、住民税（地方税）については所得税の「20万円以下不要ルール」は適用されません。FXで1円でも利益が出た場合、原則としてお住まいの市区町村に住民税の申告が必要です。\n所得税の確定申告を行った場合、その情報は自動的に市区町村に共有されるため、住民税の申告を別途行う必要はありません。ただし、所得税の確定申告を行わない場合（利益20万円以下のケース）は、市区町村に直接住民税の申告をする必要があります。\nこの申告を怠ると、後から追徴課税を受けるリスクがあります。「20万円以下だから何もしなくていい」は誤りですので、注意してください。\n普通徴収に切り替える方法 住民税を普通徴収（自分で直接納付）に切り替えることで、会社の経理に副業収入の情報が届くリスクを軽減できます。手続きは確定申告書の中で行います。\n確定申告書での手続き 確定申告書（第二表）の「住民税・事業税に関する事項」の欄に、「給与・公的年金等以外の所得に係る住民税の徴収方法の選択」という項目があります。ここで**「自分で納付」（普通徴収）にチェック**を入れます。\nこれにより、FXの利益に対応する住民税分については、会社を通じた特別徴収ではなく、自分で納付書を使って支払う形になります。\ne-Taxでの手続き e-Tax（国税電子申告・納税システム）を使ってオンラインで確定申告を行う場合も、同様の項目があります。「給与以外の所得に係る市区町村民税の徴収方法」の選択欄で「自分で納付」を選択してください。\n注意点 普通徴収を選択しても、給与分の住民税は引き続き特別徴収（給与天引き）となります。また、市区町村によっては普通徴収の選択が認められない場合があります（事業所得がある個人事業主の場合など、状況によって異なります）。不明な点は居住地の市区町村の税務担当窓口に確認することをお勧めします。\n副業FX利益の税額シミュレーション FX取引で得た利益は「雑所得（申告分離課税）」として扱われます。税率は一律20.315%（所得税15%＋復興特別所得税0.315%＋住民税5%）です。給与所得のような累進課税ではなく、利益額にかかわらず一定率が適用されるのが特徴です。\n利益30万円の場合 項目 金額 FX利益 300,000円 税率 20.315% 税額 60,945円 手取り（税引後） 約239,055円 利益50万円の場合 項目 金額 FX利益 500,000円 税率 20.315% 税額 101,575円 手取り（税引後） 約398,425円 利益100万円の場合 項目 金額 FX利益 1,000,000円 税率 20.315% 税額 203,150円 手取り（税引後） 約796,850円 上記はあくまで概算です。実際の税額は経費や損益通算の有無、所得控除の適用状況によって変わります。詳しい税額計算はFX利益計算ツール で即計算できます。\n申告分離課税のメリット 給与収入が高い方にとって、申告分離課税の20.315%は有利に働く場合があります。たとえば給与所得で課税所得が900万円を超えると所得税率は33%以上になりますが、FX利益は分離課税なので給与の税率に関係なく20.315%が適用されます。FXは高所得の会社員にとって税制上の恩恵を受けやすい投資手段といえます。\n副業FXで節税する3つの方法 FXの税負担を合法的に軽減するための主な方法を3つ紹介します。\n1. 経費を正しく計上する FX取引に関連する費用は、雑所得の経費として計上できます。\n取引ツール・情報サービスの費用: FX専門の情報サービス、チャートツールの利用料など 書籍・セミナー費用: FXの学習に使った書籍代、セミナー参加費 通信費の一部: FX取引に使用したインターネット接続費用（按分計算が必要） パソコン・スマートフォンの減価償却費の一部: FX取引専用で使用している場合 重要なのは「FX取引に直接関連する費用」であることを証明できる記録を保持することです。レシートや領収書は必ず保管してください。\n経費を正確に管理するには、クラウド会計ソフトの活用が効果的です。確定申告をスムーズに行うならfreee会計 がおすすめです。FXの収支管理から確定申告書の作成まで一貫してサポートしてくれます。\n2. 損益通算を活用する FX取引は年間を通じて利益と損失が発生します。同一年内に複数の取引がある場合、利益と損失は通算（差し引き）して申告します。これを損益通算といいます。\nたとえば、ある通貨ペアで80万円の利益、別の取引で30万円の損失が出た場合、申告する所得は50万円（80万円－30万円）となります。損益通算は特別な手続きが不要で、確定申告時に自動的に適用されます。\nまた、FXの雑所得（申告分離課税）は、同じ申告分離課税の対象となる先物取引の差金等決済に係る所得と損益通算できます。株式等の譲渡所得や配当所得とは損益通算できないため注意が必要です。\n3. 繰越控除で翌年以降も節税する FX取引で年間を通じて損失が出た場合、その損失を翌年以降3年間にわたって繰り越し、将来の利益と相殺することができます。これを繰越控除といいます。\n繰越控除を利用するためには、損失が出た年も確定申告を行う必要があります。申告を怠ると繰越控除の権利が失われるので注意してください。\nたとえば2026年に50万円の損失が出て確定申告をしておけば、2027年に70万円の利益が出た際に50万円を控除した20万円に対してのみ課税されます。長期的な節税効果は非常に大きいといえます。\nまとめ 副業FXと住民税について重要なポイントを整理します。\n住民税でバレる仕組み: 特別徴収の金額変動が会社の経理に通知されることで発覚するリスクがある 20万円以下でも住民税申告は必要: 所得税の確定申告が不要な場合でも、市区町村への住民税申告は別途必要 普通徴収への切り替え: 確定申告書（第二表）で「自分で納付」を選択することでリスクを低減できる 税率は申告分離課税20.315%: 給与の税率に関係なく一律適用されるため、高所得者には特に有利 節税の3本柱: 経費計上・損益通算・繰越控除を組み合わせることで合法的に税負担を軽減できる 副業FXは正しい知識と手続きがあれば、税務上のリスクを最小化しながら継続することが可能です。確定申告を毎年確実に行い、経費と損失の記録をしっかり残すことが最大の節税対策です。\n手取りがいくら変わるか知りたい方は手取り計算シミュレーター もご活用ください。副業の税金全体を把握するなら副業税金計算ツール が便利です。\n関連ツール FXの利益を計算 → FX利益計算シミュレーター 副業の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター 関連記事 FXの損失繰越控除：3年間の申告手順と注意点 FXのスワップポイントにかかる税金と申告方法 FX利益20万円超の確定申告のやり方 FX確定申告に必要な書類一覧 副業フリーランスの確定申告のやり方2026 本記事は2026年5月時点の税制・制度に基づいて作成しています。税制は改正されることがあるため、最新情報は国税庁の公式サイトまたは税理士にご確認ください。\n","permalink":"https://productivity-works.com/ja/posts/fukugyou-fx-juuminzei-bareru/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e副業でFXを始めたいけれど、「会社にバレたら困る」「住民税の通知で発覚するって本当？」と不安を感じていませんか。\u003c/p\u003e\n\u003cp\u003e実際、副業FXが職場に発覚するケースの多くは、確定申告の方法を誤ったことによる住民税の金額変動が原因です。仕組みを正しく理解して適切な手続きをとれば、会社員でも副業FXを合法的に続けることができます。\u003c/p\u003e\n\u003cp\u003eこの記事では、FXの利益が会社にバレる仕組みから、住民税の普通徴収への切り替え方法、利益別の税額シミュレーション、節税の具体策まで、ファクトベースで丁寧に解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"fxの利益が会社にバレる仕組み\"\u003eFXの利益が会社にバレる仕組み\u003c/h2\u003e\n\u003cp\u003eFX取引で得た利益が会社に発覚する経路は、主に「住民税」です。その流れを理解するために、まず住民税の徴収方法を確認しましょう。\u003c/p\u003e\n\u003ch3 id=\"特別徴収と普通徴収の違い\"\u003e特別徴収と普通徴収の違い\u003c/h3\u003e\n\u003cp\u003e住民税には2種類の納付方法があります。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e特別徴収\u003c/strong\u003e: 毎月の給与から天引きされる方式。会社が従業員に代わって市区町村に納付する。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e普通徴収\u003c/strong\u003e: 自分で納付書を使って年4回に分けて市区町村に直接納付する方式。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e会社員は原則として特別徴収が適用されています。問題はここです。\u003c/p\u003e\n\u003ch3 id=\"なぜ住民税の金額変動でバレるのか\"\u003eなぜ住民税の金額変動でバレるのか\u003c/h3\u003e\n\u003cp\u003eFX取引で利益が出て確定申告を行うと、その利益を含めた所得をもとに市区町村が翌年の住民税額を再計算します。その結果、\u003cstrong\u003e特別徴収の金額が増加した通知が会社の経理担当者に届きます\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e通常の給与収入だけであれば住民税額はある程度予測できる範囲に収まりますが、副業収入が加わると不自然な増額が生じます。経理担当者が「この人の住民税が急に増えた」と気づけば、副業の存在が発覚するリスクがあります。\u003c/p\u003e\n\u003cp\u003eこれが「住民税でバレる」メカニズムです。逆にいえば、住民税の徴収方法を普通徴収に切り替えることで、このリスクを大幅に低減できます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"利益20万円以下なら確定申告不要住民税申告は別途必要\"\u003e利益20万円以下なら確定申告不要？住民税申告は別途必要\u003c/h2\u003e\n\u003cp\u003e「副業収入が20万円以下なら確定申告しなくていい」という話を聞いたことがある方は多いと思います。これは所得税に関するルールとしては概ね正しいのですが、\u003cstrong\u003e住民税については別途申告が必要\u003c/strong\u003eという点で、よくある誤解が生じています。\u003c/p\u003e\n\u003ch3 id=\"所得税の20万円ルール\"\u003e所得税の20万円ルール\u003c/h3\u003e\n\u003cp\u003e給与所得者（会社員）が他に所得を得た場合、その所得合計が年間20万円以下であれば、所得税の確定申告は不要です（給与が1か所から支払われており、他に申告が必要な所得がない場合）。FX取引の利益もこの対象に含まれます。\u003c/p\u003e\n\u003ch3 id=\"住民税は20万円以下でも申告が必要\"\u003e住民税は20万円以下でも申告が必要\u003c/h3\u003e\n\u003cp\u003eしかし、住民税（地方税）については所得税の「20万円以下不要ルール」は適用されません。FXで1円でも利益が出た場合、原則として\u003cstrong\u003eお住まいの市区町村に住民税の申告が必要\u003c/strong\u003eです。\u003c/p\u003e\n\u003cp\u003e所得税の確定申告を行った場合、その情報は自動的に市区町村に共有されるため、住民税の申告を別途行う必要はありません。ただし、所得税の確定申告を行わない場合（利益20万円以下のケース）は、市区町村に直接住民税の申告をする必要があります。\u003c/p\u003e\n\u003cp\u003eこの申告を怠ると、後から追徴課税を受けるリスクがあります。「20万円以下だから何もしなくていい」は誤りですので、注意してください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"普通徴収に切り替える方法\"\u003e普通徴収に切り替える方法\u003c/h2\u003e\n\u003cp\u003e住民税を普通徴収（自分で直接納付）に切り替えることで、会社の経理に副業収入の情報が届くリスクを軽減できます。手続きは確定申告書の中で行います。\u003c/p\u003e\n\u003ch3 id=\"確定申告書での手続き\"\u003e確定申告書での手続き\u003c/h3\u003e\n\u003cp\u003e確定申告書（第二表）の「住民税・事業税に関する事項」の欄に、「給与・公的年金等以外の所得に係る住民税の徴収方法の選択」という項目があります。ここで**「自分で納付」（普通徴収）にチェック**を入れます。\u003c/p\u003e\n\u003cp\u003eこれにより、FXの利益に対応する住民税分については、会社を通じた特別徴収ではなく、自分で納付書を使って支払う形になります。\u003c/p\u003e\n\u003ch3 id=\"e-taxでの手続き\"\u003ee-Taxでの手続き\u003c/h3\u003e\n\u003cp\u003ee-Tax（国税電子申告・納税システム）を使ってオンラインで確定申告を行う場合も、同様の項目があります。「給与以外の所得に係る市区町村民税の徴収方法」の選択欄で「自分で納付」を選択してください。\u003c/p\u003e\n\u003ch3 id=\"注意点\"\u003e注意点\u003c/h3\u003e\n\u003cp\u003e普通徴収を選択しても、給与分の住民税は引き続き特別徴収（給与天引き）となります。また、市区町村によっては普通徴収の選択が認められない場合があります（事業所得がある個人事業主の場合など、状況によって異なります）。不明な点は居住地の市区町村の税務担当窓口に確認することをお勧めします。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"副業fx利益の税額シミュレーション\"\u003e副業FX利益の税額シミュレーション\u003c/h2\u003e\n\u003cp\u003eFX取引で得た利益は「雑所得（申告分離課税）」として扱われます。税率は\u003cstrong\u003e一律20.315%\u003c/strong\u003e（所得税15%＋復興特別所得税0.315%＋住民税5%）です。給与所得のような累進課税ではなく、利益額にかかわらず一定率が適用されるのが特徴です。\u003c/p\u003e\n\u003ch3 id=\"利益30万円の場合\"\u003e利益30万円の場合\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e金額\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eFX利益\u003c/td\u003e\n          \u003ctd\u003e300,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e税率\u003c/td\u003e\n          \u003ctd\u003e20.315%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e税額\u003c/td\u003e\n          \u003ctd\u003e60,945円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e手取り（税引後）\u003c/td\u003e\n          \u003ctd\u003e約239,055円\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"利益50万円の場合\"\u003e利益50万円の場合\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e金額\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eFX利益\u003c/td\u003e\n          \u003ctd\u003e500,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e税率\u003c/td\u003e\n          \u003ctd\u003e20.315%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e税額\u003c/td\u003e\n          \u003ctd\u003e101,575円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e手取り（税引後）\u003c/td\u003e\n          \u003ctd\u003e約398,425円\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"利益100万円の場合\"\u003e利益100万円の場合\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e金額\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eFX利益\u003c/td\u003e\n          \u003ctd\u003e1,000,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e税率\u003c/td\u003e\n          \u003ctd\u003e20.315%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e税額\u003c/td\u003e\n          \u003ctd\u003e203,150円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e手取り（税引後）\u003c/td\u003e\n          \u003ctd\u003e約796,850円\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e上記はあくまで概算です。実際の税額は経費や損益通算の有無、所得控除の適用状況によって変わります。詳しい税額計算は\u003ca href=\"https://productivity-works.com/ja/tools/fx-profit-calculator/\"\u003eFX利益計算ツール\u003c/a\u003e\nで即計算できます。\u003c/p\u003e","title":"副業FXで年収いくらまで住民税でバレない？会社員の節税シミュレーション"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「英語を話せるようになりたいけど、どのアプリを使えばいいかわからない」——2026年現在、AI技術を活用した英語学習アプリは急速に進化しており、個人の弱点に合わせた最適な学習が自動で提供される時代になっています。本記事では主要なAI英語学習アプリを徹底比較し、目的別のおすすめをご紹介します。\n2026年AI英語学習アプリ比較一覧 アプリ 月額料金 特徴 向いている人 Duolingo 無料〜約3,000円 ゲーム感覚・継続しやすい 初心者・習慣化したい人 スタディサプリENGLISH 約2,200円〜 TOEIC対策・日本語対応 TOEIC受験者 ELSA Speak 無料〜約1,700円 AI発音矯正特化 発音を改善したい人 Speak 約4,000円 AI会話特化・スピーキング 会話力を鍛えたい人 Cambly 約6,000円〜 ネイティブ講師とのビデオ会話 実践会話練習 Anki 無料 単語暗記・フラッシュカード 単語力強化 ChatGPT（英語学習活用） 無料〜3,000円 会話練習・作文添削 上級者・コスト重視 abceed 無料〜約2,100円 TOEIC/TOEFL・AI分析 資格試験対策 各アプリ詳細レビュー 1. Duolingo（デュオリンゴ） 世界最大の語学学習アプリ。ゲーミフィケーションで飽きずに継続できることが最大の強みです。\nAI機能：\nAIが学習履歴を分析して弱点を自動特定 間違えた問題を最適なタイミングで再出題（スペーシング効果） Duolingo Max（上位プラン）でAI会話練習が可能 メリット：\n無料でも十分な学習量 毎日5〜10分からOK 日本語UIで使いやすい ストリーク（連続学習）機能でモチベーション維持 デメリット：\n文法の体系的な理解には不向き ビジネス英語は弱め 上位プランでないとAI機能は限定的 料金： 無料 / Super Duolingo 約3,000円/月（広告なし・オフライン等）\nこんな方におすすめ： 毎日少しずつ英語に触れる習慣を作りたい初心者。特に「三日坊主になりがちな方」に継続しやすいと大好評です。\n2. スタディサプリENGLISH リクルートが提供する日本人向けの英語学習アプリ。TOEIC L\u0026amp;R対策に特化したコンテンツが充実しています。\nAI機能：\nTOEIC模試の結果から弱点パートを自動分析 習熟度に合わせた問題が自動出題 学習継続のリマインド機能 メリット：\nTOEIC実践問題の量が圧倒的 日本人向けに設計された解説 ビジネス英会話コースも充実 NETFLIX風のドラマ仕立て教材で楽しく学べる デメリット：\nTOEIC対策外の用途には不向き 海外のアプリと比べてAI機能は発展途上 料金： パーソナルコーチプランなしで約2,200円/月\nこんな方におすすめ： TOEIC700点以上を目指している方、ビジネス英語を体系的に学びたい社会人。\n3. ELSA Speak（エルサ スピーク） AI音声認識による発音矯正に特化したアプリ。元スタンフォード大学の研究者が開発し、AIが発音の細かな問題点を指摘します。\nAI機能：\nスマートフォンのマイクで発音を録音・分析 音素レベルで正確な発音スコアを提示 改善が必要な音の集中練習プログラムを自動生成 メリット：\n発音矯正に特化した唯一無二の機能 「th」「r/l」「v/b」など日本人が苦手な音に対応 短時間（1日10分）でも効果が出やすい デメリット：\n発音以外の学習には使えない 比較的高め 料金： 無料版あり / Pro 約1,700円/月 / 年額約5,800円\nこんな方におすすめ： 「英語は読めるけど話すと通じない」と悩んでいる方、ビジネスや海外旅行で話す機会が多い方。\n4. Speak（スピーク） AIとの会話練習に特化したアプリ。リアルタイムでAIが英語で返答し、発音・文法を修正してくれます。\nAI機能：\nAIロールプレイ会話（レストラン・ミーティング・面接など多数のシナリオ） リアルタイムのフィードバック 間違えた表現の解説と正しい例文の提示 メリット：\n会話力が最も上がる 人に話すのが恥ずかしい方でも練習しやすい 多様なシチュエーション別練習 デメリット：\n料金がやや高め 文法学習・単語学習は別途必要 料金： 約4,000円/月\nこんな方におすすめ： 英会話スクールの代わりに使いたい方、スピーキングが苦手な方。\n5. Cambly（キャンブリー） 24時間いつでもネイティブ英語講師とビデオ通話できるサービス。AIではなく実際の人間との会話という点で差別化されています。\nAI機能：\n会話履歴をAIが分析してレポート作成 おすすめ講師のマッチング メリット：\nリアルなネイティブ英語に触れられる 予約不要でいつでも繋がれる 様々な国・アクセントの講師がいる デメリット：\n料金が最も高い 通信環境に依存する 料金： 約6,000〜12,000円/月（週のレッスン時間による）\n6. ChatGPTを英語学習に活用する方法 ChatGPT Plus/Proをすでに使っているなら、英語学習ツールとしても活用できます。\n活用例：\n英作文の添削：\n以下の英文を添削して、自然なネイティブ表現に直してください。 また、なぜ修正したか理由も教えてください。 [あなたの英文をここに入力] 英会話の練習：\nPlease act as an English conversation partner. Let\u0026#39;s have a casual conversation about weekend plans. Please correct my grammar and vocabulary naturally during our conversation. 単語学習：\n\u0026#34;Elaborate\u0026#34;という単語の意味、使い方、例文を5つ教えてください。 また、類義語と反義語も教えてください。 音声モードの活用（ChatGPT Plus）： ChatGPT Plusの音声会話モードを使えば、AIとのリアルタイム英会話練習ができます。ELSA Speakほどの発音分析はできませんが、無料・低コストで会話練習できる点は魅力です。\n目的別おすすめアプリ 目的 最優先アプリ サブアプリ まず習慣化 Duolingo — TOEIC対策 スタディサプリENGLISH abceed 発音矯正 ELSA Speak Speak 会話力強化 Speak Cambly コスト最小化 ChatGPT（英語学習活用） Duolingo無料 単語強化 Anki Duolingo ビジネス英語 スタディサプリENGLISH Cambly 英語学習アプリを続けるコツ 1. 1日15分でもいいから毎日続ける 英語学習は「量より頻度」です。週末に2時間より、毎日15分の方が圧倒的に定着します。\n2. 目標を具体的にする NG：「英語が話せるようになりたい」 OK：「3ヶ月でTOEIC 650点」「6ヶ月で外国人と5分間会話できる」 3. アプリは2〜3個に絞る 多すぎると管理が大変になり、どれも中途半端に。メインアプリ1つ＋サブ1つが理想です。\n4. インプットとアウトプットを組み合わせる アプリだけでは「受動的な学習」に偏りがちです。\nインプット アウトプット アプリ・YouTube ChatGPTで英作文 英語ポッドキャスト Camblyで会話練習 英語動画（Netflix等） 日記を英語で書く 月額コスト別おすすめプラン 月額予算 おすすめ構成 0円（完全無料） Duolingo無料 ＋ Anki ＋ ChatGPT無料版 〜3,000円 ChatGPT Plus（英語学習にフル活用） 〜5,000円 ELSA Speak Pro ＋ スタディサプリ 〜8,000円 Speak ＋ Duolingo Super 本格投資 Cambly ＋ ELSA Speak まとめ 2026年のAI英語学習アプリは、個人の弱点を自動分析して最適な学習プログラムを提供できるレベルまで進化しています。\n習慣化最優先 → Duolingo 発音矯正 → ELSA Speak 会話力 → Speak / Cambly TOEIC対策 → スタディサプリENGLISH コスト最小 → ChatGPTの英語学習活用 まずは無料から始めて、続けられると確認してから有料プランに切り替えるのが賢い選び方です。今日から1つアプリをインストールして、英語学習を始めてみましょう。\n英語力を身につけたら、それを武器にキャリアアップを目指してみませんか。doda では英語スキルを活かせるポジションや外資系企業の求人を豊富に扱っています。専任のキャリアアドバイザーが、あなたの英語力と経験を最大限に評価してくれる転職先を無料で紹介します。\n関連記事 AIを使った英語メールの書き方 ChatGPTプロンプトの書き方コツ 無料AIツールおすすめ 関連ツール 月々のアプリ代を把握する → 家計簿シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 英語学習テンプレートをBOOTHで配布中 英語学習の進捗管理・単語記録・目標設定に使える学習管理ExcelテンプレートをBOOTHで配布しています。英語学習のPDCAを可視化して、習慣を定着させましょう。\nProductivity Works BOOTHストアはこちら ","permalink":"https://productivity-works.com/ja/posts/ai-eigo-gakushu-osusume-app-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「英語を話せるようになりたいけど、どのアプリを使えばいいかわからない」——2026年現在、AI技術を活用した英語学習アプリは急速に進化しており、\u003cstrong\u003e個人の弱点に合わせた最適な学習が自動で提供される時代\u003c/strong\u003eになっています。本記事では主要なAI英語学習アプリを徹底比較し、目的別のおすすめをご紹介します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"2026年ai英語学習アプリ比較一覧\"\u003e2026年AI英語学習アプリ比較一覧\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eアプリ\u003c/th\u003e\n          \u003cth\u003e月額料金\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n          \u003cth\u003e向いている人\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDuolingo\u003c/td\u003e\n          \u003ctd\u003e無料〜約3,000円\u003c/td\u003e\n          \u003ctd\u003eゲーム感覚・継続しやすい\u003c/td\u003e\n          \u003ctd\u003e初心者・習慣化したい人\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eスタディサプリENGLISH\u003c/td\u003e\n          \u003ctd\u003e約2,200円〜\u003c/td\u003e\n          \u003ctd\u003eTOEIC対策・日本語対応\u003c/td\u003e\n          \u003ctd\u003eTOEIC受験者\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eELSA Speak\u003c/td\u003e\n          \u003ctd\u003e無料〜約1,700円\u003c/td\u003e\n          \u003ctd\u003eAI発音矯正特化\u003c/td\u003e\n          \u003ctd\u003e発音を改善したい人\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSpeak\u003c/td\u003e\n          \u003ctd\u003e約4,000円\u003c/td\u003e\n          \u003ctd\u003eAI会話特化・スピーキング\u003c/td\u003e\n          \u003ctd\u003e会話力を鍛えたい人\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eCambly\u003c/td\u003e\n          \u003ctd\u003e約6,000円〜\u003c/td\u003e\n          \u003ctd\u003eネイティブ講師とのビデオ会話\u003c/td\u003e\n          \u003ctd\u003e実践会話練習\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAnki\u003c/td\u003e\n          \u003ctd\u003e無料\u003c/td\u003e\n          \u003ctd\u003e単語暗記・フラッシュカード\u003c/td\u003e\n          \u003ctd\u003e単語力強化\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eChatGPT（英語学習活用）\u003c/td\u003e\n          \u003ctd\u003e無料〜3,000円\u003c/td\u003e\n          \u003ctd\u003e会話練習・作文添削\u003c/td\u003e\n          \u003ctd\u003e上級者・コスト重視\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eabceed\u003c/td\u003e\n          \u003ctd\u003e無料〜約2,100円\u003c/td\u003e\n          \u003ctd\u003eTOEIC/TOEFL・AI分析\u003c/td\u003e\n          \u003ctd\u003e資格試験対策\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"各アプリ詳細レビュー\"\u003e各アプリ詳細レビュー\u003c/h2\u003e\n\u003ch3 id=\"1-duolingoデュオリンゴ\"\u003e1. Duolingo（デュオリンゴ）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e世界最大の語学学習アプリ\u003c/strong\u003e。ゲーミフィケーションで飽きずに継続できることが最大の強みです。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eAI機能：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAIが学習履歴を分析して弱点を自動特定\u003c/li\u003e\n\u003cli\u003e間違えた問題を最適なタイミングで再出題（スペーシング効果）\u003c/li\u003e\n\u003cli\u003eDuolingo Max（上位プラン）でAI会話練習が可能\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eメリット：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e無料でも十分な学習量\u003c/li\u003e\n\u003cli\u003e毎日5〜10分からOK\u003c/li\u003e\n\u003cli\u003e日本語UIで使いやすい\u003c/li\u003e\n\u003cli\u003eストリーク（連続学習）機能でモチベーション維持\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eデメリット：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e文法の体系的な理解には不向き\u003c/li\u003e\n\u003cli\u003eビジネス英語は弱め\u003c/li\u003e\n\u003cli\u003e上位プランでないとAI機能は限定的\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e料金：\u003c/strong\u003e 無料 / Super Duolingo 約3,000円/月（広告なし・オフライン等）\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eこんな方におすすめ：\u003c/strong\u003e\n毎日少しずつ英語に触れる習慣を作りたい初心者。特に「三日坊主になりがちな方」に継続しやすいと大好評です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"2-スタディサプリenglish\"\u003e2. スタディサプリENGLISH\u003c/h3\u003e\n\u003cp\u003eリクルートが提供する日本人向けの英語学習アプリ。\u003cstrong\u003eTOEIC L\u0026amp;R対策に特化したコンテンツ\u003c/strong\u003eが充実しています。\u003c/p\u003e","title":"AI英語学習おすすめアプリ2026年版【比較ランキング・無料あり】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n格安SIMおすすめ2026年版｜乗り換えで月5,000円節約する方法 大手キャリア（ドコモ・au・ソフトバンク）の平均月額料金は約7,000-8,000円。格安SIMに乗り換えるだけで月額1,000-3,000円に下がります。年間で5-6万円の節約です。\n「でも速度が遅いのでは？」「乗り換えが面倒では？」——2026年の格安SIMはこれらの不安をほぼ解消しています。この記事では本当におすすめできる格安SIMを用途別に厳選し、乗り換え手順まで解説します。\n格安SIMとは？なぜ安いのか 格安SIMはMVNO（仮想移動体通信事業者） が大手キャリアの回線を借りて提供するサービスです。\n大手キャリア 格安SIM 月額料金 7,000-8,000円 1,000-3,000円 通信速度 常に高速 混雑時やや低下（昼12-13時等） 店舗サポート 全国に店舗あり オンライン中心 端末割引 大きい 小さめ 安い理由: 大手キャリアの回線設備を借りているため、設備投資が不要。さらに店舗を最小限にしてコストを削減。\nおすすめ格安SIM TOP5 比較表 サービス 月額料金 データ量 回線 特徴 楽天モバイル 1,078円〜3,278円 3GB〜無制限 楽天/au データ無制限が最安 ahamo 2,970円 20GB ドコモ ドコモ品質で安定 LINEMO 990円〜2,728円 3GB/20GB ソフトバンク LINEデータフリー UQモバイル 1,628円〜3,278円 4GB〜20GB au 速度安定No.1 Y!mobile 2,178円〜4,158円 4GB〜30GB ソフトバンク 店舗サポート充実 ※料金は2026年時点、税込み。割引前の基本料金。\n各サービス詳細レビュー 1. 楽天モバイル — データ無制限が最安 項目 内容 料金 〜3GB: 1,078円 / 3-20GB: 2,178円 / 20GB〜無制限: 3,278円 回線 楽天回線 + au回線（パートナーエリア） 通話 Rakuten Linkアプリで国内通話無料 特徴 使った分だけ従量制、データ無制限が3,278円 おすすめの人: データ大量に使う方、楽天経済圏の方\n楽天モバイルの最大の強みは3,278円でデータ無制限。テザリングも無制限なので、自宅WiFi代わりに使う人もいます。Rakuten Linkアプリ経由なら通話も無料。\n注意点: 楽天回線のエリアは都市部中心。地方ではau回線になり、データ上限がある場合があります。\n2. ahamo — ドコモ品質で月2,970円 項目 内容 料金 20GB: 2,970円 / 100GB: 4,950円（大盛りオプション） 回線 ドコモ（MNOプラン） 通話 5分以内の通話無料 特徴 ドコモと同じ通信品質、海外ローミング20GB含む おすすめの人: 通信品質を妥協したくない方、海外旅行する方\nahamoは格安SIMではなくドコモのオンライン専用プラン。回線品質はドコモそのものなので、昼休みの速度低下なし。海外82カ国で追加料金なしでデータ利用可能。\n3. LINEMO — LINEヘビーユーザーに最適 項目 内容 料金 ミニプラン3GB: 990円 / スマホプラン20GB: 2,728円 回線 ソフトバンク（MNOプラン） 特徴 LINEのトーク・通話・ビデオ通話がデータフリー おすすめの人: LINEをたくさん使う方、月3GBで十分な方\n月990円の3GBプランは業界最安水準。LINEのデータ通信がカウントフリーなので、ビデオ通話を頻繁にする方でもデータ量を気にする必要がありません。\n4. UQモバイル — 速度安定性No.1 項目 内容 料金 ミニミニ4GB: 1,628円 / トクトク15GB: 2,178円 / コミコミ20GB: 3,278円 回線 au（KDDIサブブランド） 特徴 格安SIMの中で通信速度が最も安定、店舗あり おすすめの人: 速度重視の方、auショップでサポートを受けたい方\nUQモバイルはKDDIのサブブランドなので、一般的なMVNOと違い混雑時の速度低下がほとんどありません。全国のauショップ・UQスポットで対面サポートも受けられます。\n5. Y!mobile — 家族割・店舗サポートが充実 項目 内容 料金 S 4GB: 2,178円 / M 20GB: 3,278円 / L 30GB: 4,158円 回線 ソフトバンク（サブブランド） 特徴 家族割で2回線目以降1,188円引き、全国約2,600店舗 おすすめの人: 家族で乗り換える方、店舗サポートが欲しい方\n家族割適用で2回線目以降は月990円〜。ソフトバンクショップ・Y!mobileショップで対面サポートが充実。初心者や高齢の家族にも安心。\n乗り換えの節約シミュレーション 項目 大手キャリア 格安SIM（LINEMO 3GB） 差額 月額料金 7,500円 990円 -6,510円 年間合計 90,000円 11,880円 -78,120円 2年間合計 180,000円 23,760円 -156,240円 2年間で約15万円の節約。 家族4人で乗り換えれば年間60万円以上の節約になります。\n乗り換え手順（最短30分） MNP予約番号を取得（現在のキャリアで）— My docomoなどWeb上で即日取得可能 格安SIMに申し込み（オンラインで10分） SIMカードが届く（eSIMなら即日、物理SIMは2-3日） SIMカードを挿入・設定（説明書通りで5分） 完了 — 電話番号そのまま、すぐに使える eSIM対応の場合: 申込みから開通まで最短30分。店舗に行く必要もありません。\nタイプ別おすすめまとめ あなたのタイプ おすすめ 月額 データ大量に使う 楽天モバイル 3,278円（無制限） 通信品質重視 ahamo 2,970円（20GB） とにかく安く LINEMO ミニプラン 990円（3GB） 速度安定重視 UQモバイル 1,628円〜 家族で乗り換え Y!mobile 990円〜（家族割適用） 海外によく行く ahamo 2,970円（海外20GB含む） よくある質問（FAQ） Q1. 格安SIMに変えると電話番号は変わりますか？ MNP（番号ポータビリティ）を使えば電話番号はそのまま。手続きはWebで完結し、即日切り替えが可能です。\nQ2. 格安SIMは本当に遅くないですか？ ahamo・LINEMO・UQモバイル・Y!mobileは大手キャリアのサブブランド/オンラインプランなので、速度は大手とほぼ同等。一般的なMVNOは昼12-13時にやや遅くなることがあります。\nQ3. 今の端末はそのまま使えますか？ SIMロック解除済みの端末であれば、ほとんどの場合そのまま使えます。2021年10月以降に購入した端末はSIMロックフリーです。\nQ4. キャリアメール（@docomo.ne.jp等）は使えなくなりますか？ 「メール持ち運び」サービス（月330円）を利用すれば引き続き使えます。ただしGmailへの移行を推奨します（無料で高機能）。\nQ5. 乗り換えに違約金はかかりますか？ 2021年10月以降、大手キャリアの違約金は廃止されています。いつでも無料で解約・乗り換え可能です。\n楽天経済圏をフル活用するなら**楽天カード（年会費永年無料） **がおすすめ。楽天モバイルの支払いでもポイントが貯まります。\nまとめ 格安SIMへの乗り換えは年間5-8万円の節約効果があり、2026年時点で品質面のデメリットはほぼ解消されています。\n迷ったらまずはLINEMO ミニプラン（月990円） か ahamo（月2,970円） から始めるのがおすすめ。どちらも大手キャリアの回線品質そのままで、満足度が非常に高いです。\n浮いたお金を投資に回せば、さらに資産形成が加速します。\n関連記事: 新NISAの始め方 初心者向け完全ガイド2026 ※本記事は情報提供を目的としており、特定の通信サービスの契約を推奨するものではありません。料金・サービス内容の最新情報は各社公式サイトでご確認ください。\n関連ツール 格安SIMで節約した分を家計全体で管理する → 家計簿シミュレーター スマホ代・サブスクの年間コストをまとめて確認 → サブスク管理計算ツール 関連テンプレート 家計見直し・節約をサポートするテンプレート：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで生産性を上げて収入もアップ ","permalink":"https://productivity-works.com/ja/posts/kakuyasu-sim-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"格安simおすすめ2026年版乗り換えで月5000円節約する方法\"\u003e格安SIMおすすめ2026年版｜乗り換えで月5,000円節約する方法\u003c/h1\u003e\n\u003cp\u003e大手キャリア（ドコモ・au・ソフトバンク）の平均月額料金は約7,000-8,000円。格安SIMに乗り換えるだけで\u003cstrong\u003e月額1,000-3,000円\u003c/strong\u003eに下がります。年間で\u003cstrong\u003e5-6万円の節約\u003c/strong\u003eです。\u003c/p\u003e\n\u003cp\u003e「でも速度が遅いのでは？」「乗り換えが面倒では？」——2026年の格安SIMはこれらの不安をほぼ解消しています。この記事では本当におすすめできる格安SIMを用途別に厳選し、乗り換え手順まで解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"格安simとはなぜ安いのか\"\u003e格安SIMとは？なぜ安いのか\u003c/h2\u003e\n\u003cp\u003e格安SIMは\u003cstrong\u003eMVNO（仮想移動体通信事業者）\u003c/strong\u003e が大手キャリアの回線を借りて提供するサービスです。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003c/th\u003e\n          \u003cth\u003e大手キャリア\u003c/th\u003e\n          \u003cth\u003e格安SIM\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月額料金\u003c/td\u003e\n          \u003ctd\u003e7,000-8,000円\u003c/td\u003e\n          \u003ctd\u003e1,000-3,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e通信速度\u003c/td\u003e\n          \u003ctd\u003e常に高速\u003c/td\u003e\n          \u003ctd\u003e混雑時やや低下（昼12-13時等）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e店舗サポート\u003c/td\u003e\n          \u003ctd\u003e全国に店舗あり\u003c/td\u003e\n          \u003ctd\u003eオンライン中心\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e端末割引\u003c/td\u003e\n          \u003ctd\u003e大きい\u003c/td\u003e\n          \u003ctd\u003e小さめ\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e安い理由:\u003c/strong\u003e 大手キャリアの回線設備を借りているため、設備投資が不要。さらに店舗を最小限にしてコストを削減。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"おすすめ格安sim-top5-比較表\"\u003eおすすめ格安SIM TOP5 比較表\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eサービス\u003c/th\u003e\n          \u003cth\u003e月額料金\u003c/th\u003e\n          \u003cth\u003eデータ量\u003c/th\u003e\n          \u003cth\u003e回線\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e楽天モバイル\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e1,078円〜3,278円\u003c/td\u003e\n          \u003ctd\u003e3GB〜無制限\u003c/td\u003e\n          \u003ctd\u003e楽天/au\u003c/td\u003e\n          \u003ctd\u003eデータ無制限が最安\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eahamo\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e2,970円\u003c/td\u003e\n          \u003ctd\u003e20GB\u003c/td\u003e\n          \u003ctd\u003eドコモ\u003c/td\u003e\n          \u003ctd\u003eドコモ品質で安定\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eLINEMO\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e990円〜2,728円\u003c/td\u003e\n          \u003ctd\u003e3GB/20GB\u003c/td\u003e\n          \u003ctd\u003eソフトバンク\u003c/td\u003e\n          \u003ctd\u003eLINEデータフリー\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eUQモバイル\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e1,628円〜3,278円\u003c/td\u003e\n          \u003ctd\u003e4GB〜20GB\u003c/td\u003e\n          \u003ctd\u003eau\u003c/td\u003e\n          \u003ctd\u003e速度安定No.1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eY!mobile\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e2,178円〜4,158円\u003c/td\u003e\n          \u003ctd\u003e4GB〜30GB\u003c/td\u003e\n          \u003ctd\u003eソフトバンク\u003c/td\u003e\n          \u003ctd\u003e店舗サポート充実\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※料金は2026年時点、税込み。割引前の基本料金。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"各サービス詳細レビュー\"\u003e各サービス詳細レビュー\u003c/h2\u003e\n\u003ch3 id=\"1-楽天モバイル--データ無制限が最安\"\u003e1. 楽天モバイル — データ無制限が最安\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e料金\u003c/td\u003e\n          \u003ctd\u003e〜3GB: 1,078円 / 3-20GB: 2,178円 / 20GB〜無制限: 3,278円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e回線\u003c/td\u003e\n          \u003ctd\u003e楽天回線 + au回線（パートナーエリア）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e通話\u003c/td\u003e\n          \u003ctd\u003eRakuten Linkアプリで国内通話無料\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e特徴\u003c/td\u003e\n          \u003ctd\u003e使った分だけ従量制、データ無制限が3,278円\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e データ大量に使う方、楽天経済圏の方\u003c/p\u003e","title":"格安SIM おすすめ2026年版！乗り換えで月5,000円節約する方法"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n副業収入が年間100万円を超えてきたのに、まだ白色申告でざっくり申告していませんか。白色申告と青色申告の違いを「なんとなく知っている」だけで放置していると、毎年数万〜十数万円の節税チャンスを見逃し続けていることになります。\nこの記事では、副業収入がある会社員・フリーランスがfreee会計を使って青色申告65万円控除を最短で取得する方法を、制度の仕組みから実際の手順まで具体的に解説します。税務署に提出する書類、帳簿の付け方、e-Taxでの送信まで、全ステップを一記事で完結させます。\n青色申告65万控除とは？白色申告との税額差を具体計算 青色申告特別控除は、所得税法上の特典として認められた控除制度で、要件を満たせば最大65万円を所得から差し引ける制度です。控除額は帳簿の種類と申告方法によって3段階に分かれます。\n帳簿の種類 申告方法 控除額 複式簿記 e-Tax送信 65万円 複式簿記 書面提出 55万円 簡易簿記 いずれも 10万円 白色申告 — 0円 白色申告には特別控除がないため、事業所得がそのまま課税対象になります。青色申告65万円控除を使うと、その分だけ課税所得が圧縮されます。\n副業所得300万円の場合の節税シミュレーション 副業所得が300万円、給与所得も別にあり合計所得から各種控除後の課税所得が高めになるケースを想定します。\n課税所得が300万円台の場合、所得税の限界税率は20%（＋住民税10%） 65万円 × 税率30%（所得税20%＋住民税10%） ＝ 約19.5万円の節税 55万円控除（書面e-Tax以外）との差分：10万円 × 30% ＝ 3万円の追加節税 単純計算でe-Taxを使った65万円控除は、55万円控除より毎年3万円有利です。\nあなたの副業所得での正確な節税額は、副業税金計算ツール で無料シミュレーションできます。収入額・経費・給与所得を入力するだけで概算節税額が分かります。\n65万控除の3つの条件 青色申告65万円控除を受けるには、以下の3条件をすべて満たす必要があります。\n条件1：事業所得または不動産所得があること 青色申告の対象は「事業所得」「不動産所得」「山林所得」の3種類のみです。副業収入が「雑所得」に分類されると青色申告の適用外になります。\n国税庁の解釈では、継続・反復・営利性があれば事業所得として認定される可能性があります。副業で年間300万円超の収入があり、帳簿をきちんと管理しているケースは事業所得と認められやすくなっています（2022年改正通達以降）。\n条件2：複式簿記で帳簿をつけること 簡易簿記（収入・支出の一覧記録）ではなく、借方・貸方を用いた複式簿記での記帳が必要です。手書きでも可ですが、freee会計のようなクラウド会計ソフトを使えば、銀行明細の取り込みで自動仕訳が行われるため実質的に手間はほぼゼロになります。\n条件3：e-Taxで確定申告すること（65万円控除の場合） 55万円控除は書面提出でも取れますが、65万円控除にはe-Tax（電子申告）が必須です。freee会計はe-Tax送信に対応しているため、ソフト内の操作だけで申告が完結します。\nステップ1 — 開業届と青色申告承認申請書を出す 青色申告を始めるには、まず税務署への届出が必要です。提出書類は2点あります。\n提出書類 個人事業の開業・廃業等届出書（開業届）\n提出期限：事業開始日から1ヶ月以内 提出先：納税地の所轄税務署 所得税の青色申告承認申請書\n提出期限：青色申告を開始したい年の3月15日まで（すでにその年の1月1日以前から事業をしている場合） 新規開業の場合：開業日から2ヶ月以内 たとえば2026年3月1日に開業した場合、開業届は2026年3月31日まで、青色申告承認申請書は2026年4月30日までが提出期限になります。\nfreee開業を使えば5分で書類が完成する 開業届と青色申告承認申請書は書式が決まっているため、知識がなくても質問に答えるだけで作れます。freee開業 は、屋号・住所・事業内容などを入力フォームに入力するだけで、提出用PDFを自動生成してくれる無料サービスです。\n手書き不要・ミス防止・提出先の税務署名も自動入力されるため、書類作成の手間を大幅に削減できます。作成した書類は税務署の窓口持参、郵送、e-Taxのいずれかで提出します。\nステップ2 — freee会計で複式簿記をつける 開業届を出したら、次は日々の帳簿付けです。青色申告65万円控除には複式簿記が必須ですが、freee会計を使えば会計の専門知識がなくても対応できます。\n銀行口座・クレジットカード連携で自動仕訳 freee会計の最大の強みは、メガバンク・ネット銀行・クレジットカードとのAPI連携です。口座を登録しておくと、入出金明細が自動で取り込まれ、AIが勘定科目を推測して仕訳候補を提示します。\n副業収入の振込、交通費・通信費などの経費支払いが多い人ほど、この自動化の恩恵が大きくなります。月次の帳簿確認は15〜30分程度で終わるケースも多いです。\nfreee会計の料金プラン 個人事業主向けの「スターター」プランは**月額1,180円（税抜）**から利用できます（年払いの場合）。青色申告に必要な複式簿記・確定申告書類の作成・e-Tax送信まですべてスターターに含まれています。\n節税効果が年間10万円以上になるケースでは、ソフト代（年間約1.5万円）を考慮しても十分なコスパです。\nfreee会計 は30日間の無料トライアルがあるため、まず試してから判断することもできます。\n記帳のポイント 売上の入力：請求書発行時または入金時に売上として登録。freee会計は請求書機能も内蔵しており、請求書発行と売上計上を連動させられます。 経費の入力：クレカ連携で自動取り込み。通信費・交通費・書籍代・ソフトウェア代など副業に関連する支出を漏れなく登録します。 プライベートと事業の分離：副業専用の銀行口座とクレカを作ることを強く推奨します。混在すると仕訳の手間が増え、税務調査時のリスクも高まります。 ステップ3 — e-Taxで確定申告する 帳簿が整ったら、翌年の2月16日〜3月15日の確定申告期間中にe-Taxで申告します。\nfreeeからe-Tax直接送信 freee会計はソフト内からe-Taxへ直接送信できます。マイナンバーカードとICカードリーダー、またはスマートフォンのマイナンバーカード読み取り機能があれば、税務署に行かずに完結します。\n手順の概要は以下の通りです。\nfreee会計上で年間の帳簿を確認・修正 「確定申告」メニューから申告書を作成（自動生成） 収入・経費の内訳、青色申告特別控除（65万円）が自動で反映されていることを確認 マイナンバーカードで電子署名 e-Tax送信 送信後、税務署からの受付通知がメールで届けば申告完了です。\n申告後の納税・還付 申告書上で税額が確定します。追加納税がある場合は3月15日までに納付。給与から源泉徴収が多めにされていた場合は還付になります。還付は申告後1〜2ヶ月で指定口座に振り込まれます。\nよくある質問 Q. 副業収入でも「事業所得」にできますか？ A. 副業収入が「事業所得」か「雑所得」かは、継続性・営利性・事業規模によって判断されます。2022年の国税庁通達改正以降、副業収入が300万円以下の場合は原則として雑所得と扱われる方向性が示されましたが、帳簿書類を保存している場合はこの限りではありません。\n継続的に収入があり、帳簿を正しく管理していれば事業所得として認定される可能性があります。判断が難しい場合は税理士への相談を検討してください。\nQ. 副業の確定申告が会社にバレませんか？ A. 確定申告自体は会社に通知されません。ただし、副業収入に係る住民税が増額になった場合、会社経由で天引きされる「特別徴収」のままだと担当者に気づかれる可能性があります。\n対策として、確定申告書の第二表で副業分の住民税を「自分で納付（普通徴収）」に指定することで、副業分の住民税を自分で直接支払えます。これにより会社に副業収入の情報が渡りにくくなります。\nQ. 開業届を出すと社会保険や健康保険はどうなりますか？ A. 会社員が副業で開業届を出しても、会社の社会保険・健康保険の資格は失いません。副業の事業収入は国民健康保険の計算には影響しますが、会社の健保組合を通じている場合は別途手続きは原則不要です。ただし組合によってルールが異なるため、就業規則や組合規約の確認を推奨します。\nQ. 青色申告をやめることはできますか？ A. 可能です。「青色申告の取りやめ届出書」をその年の3月15日までに税務署に提出すれば、翌年から白色申告に戻せます。ただし一度取りやめた後、再度青色申告に戻すには再申請が必要です。\nまとめ 副業フリーランスが青色申告65万円控除を取るための最短ルートを整理します。\nfreee開業 で開業届と青色申告承認申請書を作成・提出（事業開始から2ヶ月以内） freee会計 で複式簿記を開始（口座連携で自動仕訳） 確定申告期間中にfreeeからe-Tax送信で65万円控除を確定 制度上の手続きは多くみえますが、freeeのツールを使えば書類作成から帳簿管理・申告送信まで一気通貫で完結します。年間数万〜十数万円の節税効果を毎年積み上げられることを考えると、早く始めるほど有利です。\n副業収入の全体的な税負担・手取り額の変化を把握したい場合は、副業税金計算ツール で事前シミュレーションをお試しください。また、副業収入が増えてきたタイミングで家計全体を見直したい場合には、家計簿シミュレーター も役立てられます。\n青色申告への切り替えは「難しそう」と先送りにされがちですが、実態はソフトを使えば決してハードルは高くありません。今年の確定申告から適用するために、今すぐ開業届の準備を始めましょう。\n関連ツール 副業の税金を計算 → 副業税金計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター iDeCoの節税効果を計算 → iDeCoシミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター 関連記事 freee vs マネーフォワード：副業向け会計ソフト比較 副業フリーランスの確定申告のやり方2026 フリーランス開業届の書き方と提出方法 AI×確定申告 フリーランス完全自動化ガイド2026 フリーランス確定申告のやり方：完全ガイド ","permalink":"https://productivity-works.com/ja/posts/freee-aoiro-shinkoku-65man/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e副業収入が年間100万円を超えてきたのに、まだ白色申告でざっくり申告していませんか。白色申告と青色申告の違いを「なんとなく知っている」だけで放置していると、毎年数万〜十数万円の節税チャンスを見逃し続けていることになります。\u003c/p\u003e\n\u003cp\u003eこの記事では、\u003cstrong\u003e副業収入がある会社員・フリーランスがfreee会計を使って青色申告65万円控除を最短で取得する方法\u003c/strong\u003eを、制度の仕組みから実際の手順まで具体的に解説します。税務署に提出する書類、帳簿の付け方、e-Taxでの送信まで、全ステップを一記事で完結させます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"青色申告65万控除とは白色申告との税額差を具体計算\"\u003e青色申告65万控除とは？白色申告との税額差を具体計算\u003c/h2\u003e\n\u003cp\u003e青色申告特別控除は、所得税法上の特典として認められた控除制度で、要件を満たせば\u003cstrong\u003e最大65万円を所得から差し引ける\u003c/strong\u003e制度です。控除額は帳簿の種類と申告方法によって3段階に分かれます。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e帳簿の種類\u003c/th\u003e\n          \u003cth\u003e申告方法\u003c/th\u003e\n          \u003cth\u003e控除額\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e複式簿記\u003c/td\u003e\n          \u003ctd\u003ee-Tax送信\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e65万円\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e複式簿記\u003c/td\u003e\n          \u003ctd\u003e書面提出\u003c/td\u003e\n          \u003ctd\u003e55万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e簡易簿記\u003c/td\u003e\n          \u003ctd\u003eいずれも\u003c/td\u003e\n          \u003ctd\u003e10万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e白色申告\u003c/td\u003e\n          \u003ctd\u003e—\u003c/td\u003e\n          \u003ctd\u003e0円\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e白色申告には特別控除がないため、事業所得がそのまま課税対象になります。青色申告65万円控除を使うと、その分だけ課税所得が圧縮されます。\u003c/p\u003e\n\u003ch3 id=\"副業所得300万円の場合の節税シミュレーション\"\u003e副業所得300万円の場合の節税シミュレーション\u003c/h3\u003e\n\u003cp\u003e副業所得が300万円、給与所得も別にあり合計所得から各種控除後の課税所得が高めになるケースを想定します。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e課税所得が300万円台の場合、所得税の限界税率は\u003cstrong\u003e20%\u003c/strong\u003e（＋住民税10%）\u003c/li\u003e\n\u003cli\u003e65万円 × 税率30%（所得税20%＋住民税10%） ＝ \u003cstrong\u003e約19.5万円の節税\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e55万円控除（書面e-Tax以外）との差分：10万円 × 30% ＝ \u003cstrong\u003e3万円の追加節税\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e単純計算で\u003cstrong\u003ee-Taxを使った65万円控除は、55万円控除より毎年3万円有利\u003c/strong\u003eです。\u003c/p\u003e\n\u003cp\u003eあなたの副業所得での正確な節税額は、\u003ca href=\"https://productivity-works.com/ja/tools/fukugyou-tax-calculator/\"\u003e副業税金計算ツール\u003c/a\u003e\nで無料シミュレーションできます。収入額・経費・給与所得を入力するだけで概算節税額が分かります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"65万控除の3つの条件\"\u003e65万控除の3つの条件\u003c/h2\u003e\n\u003cp\u003e青色申告65万円控除を受けるには、以下の3条件をすべて満たす必要があります。\u003c/p\u003e\n\u003ch3 id=\"条件1事業所得または不動産所得があること\"\u003e条件1：事業所得または不動産所得があること\u003c/h3\u003e\n\u003cp\u003e青色申告の対象は「事業所得」「不動産所得」「山林所得」の3種類のみです。副業収入が「雑所得」に分類されると青色申告の適用外になります。\u003c/p\u003e\n\u003cp\u003e国税庁の解釈では、\u003cstrong\u003e継続・反復・営利性\u003c/strong\u003eがあれば事業所得として認定される可能性があります。副業で年間300万円超の収入があり、帳簿をきちんと管理しているケースは事業所得と認められやすくなっています（2022年改正通達以降）。\u003c/p\u003e\n\u003ch3 id=\"条件2複式簿記で帳簿をつけること\"\u003e条件2：複式簿記で帳簿をつけること\u003c/h3\u003e\n\u003cp\u003e簡易簿記（収入・支出の一覧記録）ではなく、借方・貸方を用いた\u003cstrong\u003e複式簿記\u003c/strong\u003eでの記帳が必要です。手書きでも可ですが、freee会計のようなクラウド会計ソフトを使えば、銀行明細の取り込みで自動仕訳が行われるため実質的に手間はほぼゼロになります。\u003c/p\u003e\n\u003ch3 id=\"条件3e-taxで確定申告すること65万円控除の場合\"\u003e条件3：e-Taxで確定申告すること（65万円控除の場合）\u003c/h3\u003e\n\u003cp\u003e55万円控除は書面提出でも取れますが、\u003cstrong\u003e65万円控除にはe-Tax（電子申告）が必須\u003c/strong\u003eです。freee会計はe-Tax送信に対応しているため、ソフト内の操作だけで申告が完結します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ステップ1--開業届と青色申告承認申請書を出す\"\u003eステップ1 — 開業届と青色申告承認申請書を出す\u003c/h2\u003e\n\u003cp\u003e青色申告を始めるには、まず税務署への届出が必要です。提出書類は2点あります。\u003c/p\u003e\n\u003ch3 id=\"提出書類\"\u003e提出書類\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e個人事業の開業・廃業等届出書（開業届）\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e提出期限：事業開始日から\u003cstrong\u003e1ヶ月以内\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e提出先：納税地の所轄税務署\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e所得税の青色申告承認申請書\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e提出期限：青色申告を開始したい年の\u003cstrong\u003e3月15日まで\u003c/strong\u003e（すでにその年の1月1日以前から事業をしている場合）\u003c/li\u003e\n\u003cli\u003e新規開業の場合：\u003cstrong\u003e開業日から2ヶ月以内\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eたとえば2026年3月1日に開業した場合、開業届は2026年3月31日まで、青色申告承認申請書は2026年4月30日までが提出期限になります。\u003c/p\u003e\n\u003ch3 id=\"freee開業を使えば5分で書類が完成する\"\u003efreee開業を使えば5分で書類が完成する\u003c/h3\u003e\n\u003cp\u003e開業届と青色申告承認申請書は書式が決まっているため、知識がなくても質問に答えるだけで作れます。\u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee開業\u003c/a\u003e\nは、屋号・住所・事業内容などを入力フォームに入力するだけで、提出用PDFを自動生成してくれる無料サービスです。\u003c/p\u003e\n\u003cp\u003e手書き不要・ミス防止・提出先の税務署名も自動入力されるため、書類作成の手間を大幅に削減できます。作成した書類は税務署の窓口持参、郵送、e-Taxのいずれかで提出します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ステップ2--freee会計で複式簿記をつける\"\u003eステップ2 — freee会計で複式簿記をつける\u003c/h2\u003e\n\u003cp\u003e開業届を出したら、次は日々の帳簿付けです。青色申告65万円控除には複式簿記が必須ですが、freee会計を使えば会計の専門知識がなくても対応できます。\u003c/p\u003e\n\u003ch3 id=\"銀行口座クレジットカード連携で自動仕訳\"\u003e銀行口座・クレジットカード連携で自動仕訳\u003c/h3\u003e\n\u003cp\u003efreee会計の最大の強みは、\u003cstrong\u003eメガバンク・ネット銀行・クレジットカードとのAPI連携\u003c/strong\u003eです。口座を登録しておくと、入出金明細が自動で取り込まれ、AIが勘定科目を推測して仕訳候補を提示します。\u003c/p\u003e\n\u003cp\u003e副業収入の振込、交通費・通信費などの経費支払いが多い人ほど、この自動化の恩恵が大きくなります。月次の帳簿確認は15〜30分程度で終わるケースも多いです。\u003c/p\u003e","title":"副業フリーランスがfreeeで青色申告65万控除を最速で取る方法"},{"content":" アフィリエイト開示: 本記事には一部アフィリエイトリンクが含まれます。リンク経由でご購入いただいた場合、当サイトに手数料が発生することがありますが、読者の方への費用は一切変わりません。紹介する製品・サービスはすべて編集部が実際に検証したものに限っています。\n英語のビジネスメール、もう悩まない 「英語のメールを書くのに30分かかる」「本当にこの表現で失礼じゃないか不安」「海外クライアントからメールが来るたびにドキドキする」——\n日本のビジネスパーソンが英語のメールに費やす時間と精神的エネルギーは、想像以上に大きいものです。しかし今は、AI（人工知能）ツールを使えば、この問題を一気に解決できます。\n本記事では、ChatGPT・Gemini・Claudeなどの無料AIツールを使って、プロ品質の英語ビジネスメールを素早く作成する方法を、シーン別の具体的な例文とプロンプトテンプレートとともに解説します。\n英語ビジネスメールに使える無料AIツール一覧 ツール 運営 無料プランの制限 日本語対応 ChatGPT（GPT-4o） OpenAI 1日あたり使用制限あり 優秀 Google Gemini Google ほぼ無制限（Gemini 1.5 Flash） 優秀 Claude（claude.ai） Anthropic 1日あたり使用制限あり 優秀 Microsoft Copilot Microsoft ほぼ無制限 良好 Perplexity Perplexity AI 1日あたり制限あり 良好 どのツールも基本的な英語ビジネスメール作成には十分な性能を持っています。本記事のプロンプトはどのツールでもそのまま使えます。\nAIに英語メールを書いてもらう基本プロンプト 最もシンプルな使い方 日本語でメールの要点を伝えるだけで、AIが英語メールを書いてくれます。\n以下の内容を英語のビジネスメールにしてください。 相手：取引先の担当者（面識あり） 目的：来週の打ち合わせの日程調整 内容： - 来週月曜〜水曜のどこかで打ち合わせをしたい - オンラインでも対面でも対応可能 - 議題はQ3の予算計画について 丁寧でプロフェッショナルなトーンでお願いします。 より精度の高いメールを作るための情報の渡し方 AIへの指示に以下の情報を含めると、よりぴったりのメールになります。\n【相手との関係】長年の取引先／初めてのコンタクト／社内の外国籍同僚 【メールのトーン】フォーマル／セミフォーマル／カジュアル 【メールの長さ】短く簡潔に／詳しく丁寧に 【特別な注意点】謝罪が必要、悪いニュースを伝える、催促の必要あり シーン別：英語ビジネスメール例文集 1. 初めてコンタクトするメール（自己紹介） 日本語でAIに指示する例:\n初めて連絡する海外のサプライヤー（アメリカ企業）へのビジネスメールを作成してください。 - 自己紹介：山田太郎、株式会社〇〇の購買部マネージャー - 目的：製品カタログと価格表の請求 - 製品カテゴリ：産業用センサー - 丁寧でプロフェッショナルなトーン AIが生成する例文:\nSubject: Inquiry Regarding Product Catalog and Pricing – [Your Company Name] Dear [Recipient\u0026#39;s Name], My name is Taro Yamada, and I am the Purchasing Manager at [Company Name], a manufacturing company based in Japan. We specialize in [brief description of your company\u0026#39;s business]. I am reaching out to express our interest in your industrial sensor products. After reviewing your company\u0026#39;s profile, we believe there may be a strong potential for a mutually beneficial business relationship. Could you please send us your current product catalog and pricing information at your earliest convenience? Additionally, if you have a minimum order quantity or any other requirements for new customers, we would appreciate knowing those details as well. We look forward to hearing from you and exploring the possibility of working together. Best regards, Taro Yamada Purchasing Manager [Company Name] [Phone Number] [Email Address] 2. 打ち合わせのアポイントメント依頼 プロンプト例:\nオンライン会議のアポイントを依頼するメールを作成してください。 - 相手：既存取引先（半年ほど付き合いがある） - 目的：新製品ラインの提案プレゼンをしたい - 希望日時：来週中（できれば午前中）、30〜45分 - 使用ツール：Zoom - トーン：丁寧だがフレンドリー 例文:\nSubject: Meeting Request – Presentation on Our New Product Line Hi [Name], I hope this message finds you well! I wanted to reach out to see if we could find a time to connect next week. I\u0026#39;d love to walk you through our latest product line, which I think could be a great fit for your current needs. The session would take about 30 to 45 minutes, and I\u0026#39;m happy to work around your schedule. Would any of the following times work for you? - Monday, [Date]: 10:00–11:00 AM (JST) - Tuesday, [Date]: 9:30–10:15 AM (JST) - Wednesday, [Date]: 11:00 AM–12:00 PM (JST) If none of these work, please feel free to suggest a time that\u0026#39;s more convenient. We can connect via Zoom — I\u0026#39;ll send the link once we confirm the timing. Looking forward to chatting! Best, [Your Name] 3. 納期遅延の謝罪メール 謝罪メールは特に難しく、英語のニュアンスを間違えると相手に不誠実な印象を与えます。AIを使えば適切な表現を選べます。\nプロンプト例:\n納期遅延を謝罪する英語メールを作成してください。 - 状況：製造トラブルにより、予定の納期より2週間遅れる見込み - 新しい納期：6月末 - 相手：重要取引先の調達担当者 - トーン：誠実で丁寧、責任を明確に認める - 代替案として、一部先行納品が可能であれば提案する 例文:\nSubject: Important Update Regarding Your Order – Revised Delivery Schedule Dear [Name], I am writing to sincerely apologize for the delay in fulfilling your recent order (Order #[Number]). Due to an unexpected issue in our production process, we are unable to meet the originally scheduled delivery date. We now anticipate that your order will be ready for shipment by the end of June — approximately two weeks later than planned. I want to be transparent: this delay is entirely our responsibility, and I fully understand the inconvenience this may cause for your operations. To minimize the impact on your business, I would like to propose the following options: 1. **Partial shipment**: We can ship approximately 60% of your order by [earlier date], with the remainder to follow by June 30th. 2. **Full shipment by June 30th**: If you prefer to receive the complete order at once, we will ensure everything is shipped no later than June 30th. Please let me know which option works better for you. We are also open to discussing any adjustments that may help, including expedited shipping at our expense. Again, I deeply apologize for this situation and thank you for your patience and continued trust in us. Please do not hesitate to reach out if you have any questions. Sincerely, [Your Name] [Title] [Company Name] [Contact Information] 4. 請求書・支払いの催促メール プロンプト例:\n未払いの請求書の支払いを催促するメールを作成してください。 - 状況：支払期限から2週間が過ぎている - 請求金額：$5,000 - 請求書番号：INV-2026-042 - トーン：丁寧だがはっきりと催促する。関係を壊さないように配慮する 例文:\nSubject: Friendly Payment Reminder – Invoice #INV-2026-042 Dear [Name], I hope you are doing well. I am writing to follow up on Invoice #INV-2026-042 for $5,000.00, which was due on [Due Date]. I understand that things can get busy, and this may simply have been overlooked. If the payment has already been sent, please disregard this message and accept my thanks. If payment has not yet been processed, I would appreciate it if you could arrange it at your earliest convenience. For your reference, I have attached a copy of the original invoice. Should you have any questions or if there is an issue I can assist with, please do not hesitate to contact me directly. Thank you for your attention to this matter, and I look forward to your confirmation. Best regards, [Your Name] [Title] [Company Name] [Phone / Email] 5. 提案・見積もりへのお礼と前進メール 例文:\nSubject: Thank You for Your Proposal – Next Steps Dear [Name], Thank you for sending over the proposal and detailed quotation. We have had a chance to review everything carefully, and we are impressed with the thoroughness of your approach. We are very much interested in moving forward and would like to discuss a few points in more detail before finalizing our decision. Specifically, we have some questions regarding [topic 1] and [topic 2]. Would you be available for a brief call later this week to go over these points? Please let me know your availability, and I will do my best to accommodate. Thank you again for your time and effort. We look forward to the next steps. Best regards, [Your Name] 6. リモートワーク・国際チームへの連絡メール 例文:\nSubject: Weekly Update – [Project Name] Hi Team, I hope everyone is having a great week. Here is a quick update on where things stand with [Project Name]: **Completed this week:** - [Task 1] - [Task 2] **In progress:** - [Task 3] – On track for completion by [Date] - [Task 4] – Slight delay; new target is [Date] **Blockers / Items needing input:** - [Issue] – Input needed from [Person/Team] by [Date] **Next week\u0026#39;s focus:** - [Priority 1] - [Priority 2] Please feel free to reach out if you have any questions or if there\u0026#39;s anything I can support you with. Have a great weekend, everyone! Best, [Your Name] AIが作ったメールをチェックする際のポイント AIが作成した英語メールは、そのまま送る前に必ず以下の点を確認してください。\n1. 固有名詞・数字は必ず人間が確認 会社名、人名、金額、日付——これらはAIが間違えることがあります。必ず確認して修正します。\n2. 文化的なニュアンスを確認 アメリカ英語とイギリス英語では表現が異なります。相手の国・文化に合わせた表現になっているか確認しましょう。AIに「イギリス英語で書いてください」「アメリカのビジネスカルチャーに合わせてください」と指定するのも有効です。\n3. トーンが適切か AIに「フォーマル」と指示しても、時として過度に堅苦しい表現になることがあります。「少し柔らかくしてください」「もう少し親しみやすいトーンで書き直してください」と追加指示することで調整できます。\n4. 長さの最適化 AIは概して長めのメールを生成する傾向があります。「もっと短く簡潔にしてください（3段落以内）」と指示して短縮させるのが効果的です。\nAIで英語メールを書く際のよくある質問 Q. 「AI使用」を相手に開示する必要がありますか？ 内容の最終確認と責任は自分にあるため、一般的なビジネスメールの作成においてAI使用を開示する義務はありません。ただし、センシティブな情報をAIに入力する場合は、利用しているサービスのプライバシーポリシーを確認してください。\nQ. 機密情報をAIに入力しても大丈夫ですか？ ChatGPT（無料版）、Gemini等のAIサービスは、入力されたデータをサービス改善に使用することがあります。機密性の高い情報（個人情報、契約内容、財務情報など）は入力しないようにしましょう。代わりに「[顧客名]」「[金額]」などのプレースホルダーを使って内容を一般化してからAIに入力し、後から具体的な情報を埋める方法が安全です。\nQ. 英語が苦手でもAIのメールの品質を確認できますか？ DeepL（無料翻訳サービス）でAIが作成したメールを日本語に翻訳して確認するのが簡単です。翻訳した日本語を読んで意味がおかしければ、AIに「この部分を修正してください」と指示できます。\nAIプロンプトを使いこなすための覚えておくべきフレーズ 目的 プロンプトフレーズ トーンを調整 「もう少しフォーマルに」「もっとカジュアルに」 長さを調整 「3段落以内に短くして」「もっと詳しく説明して」 修正 「第2段落を〜という内容に書き直して」 代替案 「同じ内容で3パターン書いて」 件名 「このメールに適した件名を5つ提案して」 チェック 「このメールに失礼な表現がないか確認して」 まとめ：今日からAIで英語メールを効率化する AIを使った英語ビジネスメール作成のポイントをまとめます。\nまず日本語で要点を整理してからAIに指示する 相手との関係・トーン・目的を明確に伝える AIが生成した文章を必ずレビューして固有名詞・数字を確認する 機密情報はプレースホルダーを使用して安全に活用する うまくいったプロンプトは保存して再利用する 英語メールへの苦手意識がある方でも、本記事のプロンプトテンプレートを使えば、すぐにプロ品質のメールが書けます。まず今日、試してみてください。\n英語でのビジネスコミュニケーション力を高めて、グローバルなキャリアへのステップアップを目指すならdoda の転職エージェントサービスが役立ちます。英語スキルを活かせる求人や外資系企業の案件も豊富に取り扱い、あなたのキャリアプランに合ったポジションを紹介してくれます。\n本記事で紹介するAIツールの機能・料金は変更される場合があります。最新情報は各サービスの公式サイトをご確認ください。\n関連ツール 文字数・単語数をリアルタイムでカウント → 文字数カウンター 年収から手取りを計算 → 手取り計算シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド あわせて読みたい AI英語学習おすすめアプリ2026年版【比較ランキング・無料あり】 AI活用の英語学習法おすすめ5選【2026年版・独学で話せるようになる方法】 オンライン英会話 おすすめ2026年版！料金・講師・教材で比較 ","permalink":"https://productivity-works.com/ja/posts/ai-eigo-mail-business-reibun/","summary":"\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eアフィリエイト開示\u003c/strong\u003e: 本記事には一部アフィリエイトリンクが含まれます。リンク経由でご購入いただいた場合、当サイトに手数料が発生することがありますが、読者の方への費用は一切変わりません。紹介する製品・サービスはすべて編集部が実際に検証したものに限っています。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"英語のビジネスメールもう悩まない\"\u003e英語のビジネスメール、もう悩まない\u003c/h2\u003e\n\u003cp\u003e「英語のメールを書くのに30分かかる」「本当にこの表現で失礼じゃないか不安」「海外クライアントからメールが来るたびにドキドキする」——\u003c/p\u003e\n\u003cp\u003e日本のビジネスパーソンが英語のメールに費やす時間と精神的エネルギーは、想像以上に大きいものです。しかし今は、AI（人工知能）ツールを使えば、この問題を一気に解決できます。\u003c/p\u003e\n\u003cp\u003e本記事では、\u003cstrong\u003eChatGPT・Gemini・Claudeなどの無料AIツールを使って、プロ品質の英語ビジネスメールを素早く作成する方法\u003c/strong\u003eを、シーン別の具体的な例文とプロンプトテンプレートとともに解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"英語ビジネスメールに使える無料aiツール一覧\"\u003e英語ビジネスメールに使える無料AIツール一覧\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eツール\u003c/th\u003e\n          \u003cth\u003e運営\u003c/th\u003e\n          \u003cth\u003e無料プランの制限\u003c/th\u003e\n          \u003cth\u003e日本語対応\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eChatGPT（GPT-4o）\u003c/td\u003e\n          \u003ctd\u003eOpenAI\u003c/td\u003e\n          \u003ctd\u003e1日あたり使用制限あり\u003c/td\u003e\n          \u003ctd\u003e優秀\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eGoogle Gemini\u003c/td\u003e\n          \u003ctd\u003eGoogle\u003c/td\u003e\n          \u003ctd\u003eほぼ無制限（Gemini 1.5 Flash）\u003c/td\u003e\n          \u003ctd\u003e優秀\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eClaude（claude.ai）\u003c/td\u003e\n          \u003ctd\u003eAnthropic\u003c/td\u003e\n          \u003ctd\u003e1日あたり使用制限あり\u003c/td\u003e\n          \u003ctd\u003e優秀\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eMicrosoft Copilot\u003c/td\u003e\n          \u003ctd\u003eMicrosoft\u003c/td\u003e\n          \u003ctd\u003eほぼ無制限\u003c/td\u003e\n          \u003ctd\u003e良好\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePerplexity\u003c/td\u003e\n          \u003ctd\u003ePerplexity AI\u003c/td\u003e\n          \u003ctd\u003e1日あたり制限あり\u003c/td\u003e\n          \u003ctd\u003e良好\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eどのツールも基本的な英語ビジネスメール作成には十分な性能を持っています。本記事のプロンプトはどのツールでもそのまま使えます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"aiに英語メールを書いてもらう基本プロンプト\"\u003eAIに英語メールを書いてもらう基本プロンプト\u003c/h2\u003e\n\u003ch3 id=\"最もシンプルな使い方\"\u003e最もシンプルな使い方\u003c/h3\u003e\n\u003cp\u003e日本語でメールの要点を伝えるだけで、AIが英語メールを書いてくれます。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の内容を英語のビジネスメールにしてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e相手：取引先の担当者（面識あり）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e目的：来週の打ち合わせの日程調整\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e内容：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 来週月曜〜水曜のどこかで打ち合わせをしたい\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e オンラインでも対面でも対応可能\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 議題はQ3の予算計画について\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e丁寧でプロフェッショナルなトーンでお願いします。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"より精度の高いメールを作るための情報の渡し方\"\u003eより精度の高いメールを作るための情報の渡し方\u003c/h3\u003e\n\u003cp\u003eAIへの指示に以下の情報を含めると、よりぴったりのメールになります。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【相手との関係】長年の取引先／初めてのコンタクト／社内の外国籍同僚\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【メールのトーン】フォーマル／セミフォーマル／カジュアル\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【メールの長さ】短く簡潔に／詳しく丁寧に\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【特別な注意点】謝罪が必要、悪いニュースを伝える、催促の必要あり\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"シーン別英語ビジネスメール例文集\"\u003eシーン別：英語ビジネスメール例文集\u003c/h2\u003e\n\u003ch3 id=\"1-初めてコンタクトするメール自己紹介\"\u003e1. 初めてコンタクトするメール（自己紹介）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e日本語でAIに指示する例\u003c/strong\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e初めて連絡する海外のサプライヤー（アメリカ企業）へのビジネスメールを作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 自己紹介：山田太郎、株式会社〇〇の購買部マネージャー\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 目的：製品カタログと価格表の請求\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 製品カテゴリ：産業用センサー\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 丁寧でプロフェッショナルなトーン\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003eAIが生成する例文\u003c/strong\u003e:\u003c/p\u003e","title":"AIで英語ビジネスメールを無料で書く方法【例文・プロンプト集2026】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nFX口座おすすめ2026年版｜初心者が失敗しない口座選び FX（外国為替証拠金取引）は少額から始められる投資として人気がありますが、口座選びを間違えると、スプレッド（取引コスト）だけで年間数万円の損失になることも。\nこの記事では2026年時点で本当におすすめできるFX口座を、初心者の視点で比較します。\nFX口座を選ぶ5つの基準 基準 重要な理由 スプレッド 取引のたびにかかるコスト。狭いほど有利 最小取引単位 1,000通貨対応なら約5,000円から取引可能 取引ツール チャート分析の使いやすさが利益に直結 スワップポイント 高金利通貨の長期保有で毎日利益が発生 信頼性・安全性 金融庁登録の国内業者を選ぶことが大前提 おすすめFX口座 TOP5 FX会社 ドル円スプレッド 最小取引単位 特徴 DMM FX 0.2銭 10,000通貨 口座数No.1、使いやすいアプリ GMOクリック証券 0.2銭 1,000通貨 総合力No.1、株も取引可 SBI FXトレード 0.18銭 1通貨 業界最狭スプレッド、1通貨から みんなのFX 0.2銭 1,000通貨 スワップポイント高水準 LIGHT FX 0.2銭 1,000通貨 スワップ特化、自動売買対応 ※スプレッドは原則固定（例外あり）、2026年時点。\n各FX口座の詳細 1. DMM FX — 口座数No.1の定番 項目 内容 ドル円スプレッド 0.2銭（原則固定） 最小取引単位 10,000通貨 通貨ペア 21ペア ツール DMM FX PLUS（PC）、スマホアプリ サポート LINEで問い合わせ可能 おすすめの人: FXを本格的に始めたい方\n国内FX口座数No.1の実績。取引ツールの使いやすさとサポート体制が高評価。最小取引単位が10,000通貨（約5万円の証拠金）なので、ある程度の資金がある方向け。\n2. GMOクリック証券 — 総合力No.1 項目 内容 ドル円スプレッド 0.2銭 最小取引単位 1,000通貨 通貨ペア 20ペア ツール はっちゅう君FX+、プラチナチャート 特徴 株・CFD・投資信託も同一口座で取引可能 おすすめの人: FX以外の投資も検討している方\nFXだけでなく株式・CFD・投資信託も同じ口座で管理できる総合力が魅力。1,000通貨から取引可能で、初心者でも少額からスタートできます。\n3. SBI FXトレード — 1通貨から取引できる 項目 内容 ドル円スプレッド 0.18銭（1-1,000通貨時） 最小取引単位 1通貨（約5円から取引可能） 通貨ペア 34ペア（業界最多水準） 特徴 積立FXサービスあり おすすめの人: 超少額で練習したい初心者\n1通貨（約5円の証拠金）から取引できる唯一のFX会社。リアルマネーで練習しながらスキルを磨けます。スプレッドも業界最狭の0.18銭。積立FXで毎月定額の外貨購入も可能。\n4. みんなのFX — スワップポイントが高い 項目 内容 ドル円スプレッド 0.2銭 最小取引単位 1,000通貨 特徴 高金利通貨のスワップポイントが業界トップクラス おすすめの人: スワップポイント（金利差益）で稼ぎたい方\nメキシコペソ・トルコリラ・南アフリカランドなど高金利通貨のスワップポイントが業界最高水準。長期保有で毎日スワップ収入を得る運用スタイルに最適。\n5. LIGHT FX — スワップ特化＋自動売買 項目 内容 ドル円スプレッド 0.2銭 最小取引単位 1,000通貨 特徴 みんなのFXと同系列、自動売買（シストレ）対応 おすすめの人: 自動売買に興味がある方\nみんなのFXと同じトレイダーズ証券が運営。自動売買（みんなのシストレ）機能が搭載されており、裁量取引と自動売買を使い分けられます。\nFX初心者が知っておくべきリスク FXは元本保証のない投資です。以下のリスクを必ず理解してから始めてください。\nリスク 内容 為替変動リスク 予想と反対に動けば損失が発生 レバレッジリスク 最大25倍のレバレッジで、損失も25倍になりうる ロスカットリスク 証拠金維持率が下がると強制決済される スリッページ 急激な値動き時、注文価格と約定価格がずれることがある 初心者の鉄則:\nレバレッジは最初は3-5倍に抑える 投資資金は「なくなっても生活に困らない金額」に限定 損切りルールを決めてから取引する デモ口座で最低1ヶ月は練習する タイプ別おすすめまとめ あなたのタイプ おすすめ FX初心者・少額で始めたい SBI FXトレード（1通貨から） 本格的にFXをやりたい DMM FX（口座数No.1） FX + 株もやりたい GMOクリック証券 スワップポイントで稼ぎたい みんなのFX 自動売買を試したい LIGHT FX よくある質問（FAQ） Q1. FXは少額でも始められますか？ SBI FXトレードなら1通貨（約5円の証拠金）から取引可能。GMOクリック証券やみんなのFXは1,000通貨（約5,000円）からです。\nQ2. FXの税金はどうなりますか？ FXの利益は「先物取引に係る雑所得等」として一律20.315%（所得税15.315% + 住民税5%）が課税されます。年間利益が20万円以下なら確定申告は原則不要（給与所得者の場合）。\nQ3. 初心者にレバレッジ25倍は危険ですか？ はい。初心者はレバレッジ3-5倍から始めることを強く推奨します。10万円の証拠金でレバレッジ25倍は250万円分の取引になり、わずか4%の変動で証拠金がゼロになります。\nQ4. デモ口座は使うべきですか？ はい。最低1ヶ月はデモ口座で練習してから実取引に移ることを推奨します。ただしデモは心理的プレッシャーがないため、少額でもリアルマネーで練習する方が学びが大きいです。\nQ5. FXと株はどちらが初心者向きですか？ 長期的な資産形成には株式（特にインデックス投資）の方が初心者向きです。FXは短期売買のスキルが必要で、損失リスクも高いです。\n関連記事: 新NISAの始め方 初心者向けガイド FXの利益は確定申告が必要です。**freee会計（無料トライアルあり） **なら、FX取引の損益も含めた確定申告書を簡単に作成できます。\nまとめ FX口座選びのポイントはスプレッドの狭さ・最小取引単位・ツールの使いやすさの3つ。初心者はまずSBI FXトレード（1通貨から）で少額練習し、慣れてきたらDMM FXやGMOクリック証券に移行するのがおすすめのステップです。\nただしFXはハイリスク・ハイリターンの投資です。まずは新NISAでインデックス投資を始め、余裕資金でFXに挑戦するのが堅実な資産形成の順序です。\n関連記事: SBI証券と楽天証券を徹底比較 ※本記事は情報提供を目的としており、特定の金融商品の売買を推奨するものではありません。FXには元本割れのリスクがあります。投資判断はご自身の責任で行ってください。\n関連ツール FXの利益を計算 → FX利益計算シミュレーター 副業の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 関連テンプレート 投資・資産運用をサポートするテンプレート：\nExcel家計簿テンプレート — 収支管理で投資資金を確保 AI仕事術ガイド — AIで作業時間を節約し投資の時間を確保 ","permalink":"https://productivity-works.com/ja/posts/kaigai-fx-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"fx口座おすすめ2026年版初心者が失敗しない口座選び\"\u003eFX口座おすすめ2026年版｜初心者が失敗しない口座選び\u003c/h1\u003e\n\u003cp\u003eFX（外国為替証拠金取引）は少額から始められる投資として人気がありますが、\u003cstrong\u003e口座選びを間違えると、スプレッド（取引コスト）だけで年間数万円の損失\u003c/strong\u003eになることも。\u003c/p\u003e\n\u003cp\u003eこの記事では2026年時点で本当におすすめできるFX口座を、初心者の視点で比較します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"fx口座を選ぶ5つの基準\"\u003eFX口座を選ぶ5つの基準\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e基準\u003c/th\u003e\n          \u003cth\u003e重要な理由\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eスプレッド\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e取引のたびにかかるコスト。狭いほど有利\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e最小取引単位\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e1,000通貨対応なら約5,000円から取引可能\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e取引ツール\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eチャート分析の使いやすさが利益に直結\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eスワップポイント\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e高金利通貨の長期保有で毎日利益が発生\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e信頼性・安全性\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e金融庁登録の国内業者を選ぶことが大前提\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"おすすめfx口座-top5\"\u003eおすすめFX口座 TOP5\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eFX会社\u003c/th\u003e\n          \u003cth\u003eドル円スプレッド\u003c/th\u003e\n          \u003cth\u003e最小取引単位\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eDMM FX\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0.2銭\u003c/td\u003e\n          \u003ctd\u003e10,000通貨\u003c/td\u003e\n          \u003ctd\u003e口座数No.1、使いやすいアプリ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eGMOクリック証券\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0.2銭\u003c/td\u003e\n          \u003ctd\u003e1,000通貨\u003c/td\u003e\n          \u003ctd\u003e総合力No.1、株も取引可\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eSBI FXトレード\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0.18銭\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e1通貨\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e業界最狭スプレッド、1通貨から\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eみんなのFX\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0.2銭\u003c/td\u003e\n          \u003ctd\u003e1,000通貨\u003c/td\u003e\n          \u003ctd\u003eスワップポイント高水準\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eLIGHT FX\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0.2銭\u003c/td\u003e\n          \u003ctd\u003e1,000通貨\u003c/td\u003e\n          \u003ctd\u003eスワップ特化、自動売買対応\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※スプレッドは原則固定（例外あり）、2026年時点。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"各fx口座の詳細\"\u003e各FX口座の詳細\u003c/h2\u003e\n\u003ch3 id=\"1-dmm-fx--口座数no1の定番\"\u003e1. DMM FX — 口座数No.1の定番\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eドル円スプレッド\u003c/td\u003e\n          \u003ctd\u003e0.2銭（原則固定）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e最小取引単位\u003c/td\u003e\n          \u003ctd\u003e10,000通貨\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e通貨ペア\u003c/td\u003e\n          \u003ctd\u003e21ペア\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eツール\u003c/td\u003e\n          \u003ctd\u003eDMM FX PLUS（PC）、スマホアプリ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eサポート\u003c/td\u003e\n          \u003ctd\u003eLINEで問い合わせ可能\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e FXを本格的に始めたい方\u003c/p\u003e\n\u003cp\u003e国内FX口座数No.1の実績。取引ツールの使いやすさとサポート体制が高評価。最小取引単位が10,000通貨（約5万円の証拠金）なので、ある程度の資金がある方向け。\u003c/p\u003e","title":"FX口座 おすすめ2026年版！初心者向けに比較【少額から始められる】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nウォーターサーバーおすすめ2026年版｜コスパで選ぶ最強サーバー ペットボトルの水を毎回買うのは面倒だし、重い。ウォーターサーバーならいつでも冷水・温水がボタン一つで使えます。\n「高そう」というイメージがありますが、実は月3,000-4,000円台で利用可能。ペットボトル購入と比較しても大きな差はなく、利便性を考えるとコスパは十分です。\nウォーターサーバーを選ぶ基準 基準 重要な理由 月額料金 サーバーレンタル料 + 水代 + 電気代のトータルコスト 水の種類 天然水 vs RO水（純水）。味のこだわりで選ぶ デザイン リビングに置くなら見た目も重要 機能 エコモード・チャイルドロック・温度調節 解約条件 最低利用期間と解約金の有無 おすすめウォーターサーバー TOP5 サーバー 月額目安 水の種類 デザイン 特徴 プレミアムウォーター 3,974円〜 天然水 おしゃれ デザイン×天然水No.1 コスモウォーター 4,104円〜 天然水 スタイリッシュ 足元ボトル交換 フレシャス 3,254円〜 天然水 コンパクト 卓上モデルが人気 エブリィフレシャス 3,300円 浄水型 ミニマル 水道水を浄水・定額制 ハミングウォーター 3,300円 浄水型 シンプル 水道水補充・使い放題 ※月額は24Lあたり（2人分目安）。浄水型は定額制で水量無制限。\n各サーバーの詳細 1. プレミアムウォーター — デザイン×天然水の王道 項目 内容 月額 3,974円〜（12L×2本） 水 非加熱天然水（富士・北アルプス・金城） サーバー amadanaモデルなどデザイナーズ多数 電気代 約500円/月（エコモード使用時） 最低利用 2年（解約金10,000-20,000円） おすすめの人: おしゃれなサーバーで天然水を飲みたい方\namadana（アマダナ）やcado（カドー）とのコラボモデルはインテリアに馴染むデザイン。非加熱処理の天然水は味にこだわる方に人気。契約数No.1の実績があります。\n2. コスモウォーター — 足元ボトル交換で楽々 項目 内容 月額 4,104円〜（12L×2本） 水 天然水（静岡・京都・大分の3つの採水地） サーバー smartプラスNext（足元交換） 電気代 約474円/月（エコモード使用時） 最低利用 2年（解約金9,900円） おすすめの人: ボトル交換の重さが気になる方\n12kgのボトルを持ち上げなくて済む「足元ボトル交換」が最大の特徴。女性やシニアに特に人気。Wクリーン機能（クリーンエア・クリーンサイクル）で衛生面も安心。\n3. フレシャス — コンパクトな卓上モデル 項目 内容 月額 3,254円〜（7.2L×4パック、dewo mini） 水 天然水（富士・朝霧高原・木曽） サーバー dewo mini（卓上）、dewo（床置き） 電気代 約330円/月（dewo miniエコモード） 最低利用 2年（解約金9,900円） おすすめの人: 一人暮らし、キッチンが狭い方\n卓上モデル「dewo mini」はカウンターやテーブルに置けるコンパクトサイズ。軽量パック（7.2L）で交換も簡単。電気代も業界最安水準。\n4. エブリィフレシャス — 水道水浄水で定額制 項目 内容 月額 3,300円（定額・水量無制限） 水 水道水を浄水（フィルター交換無料） サーバー mini（卓上）、tall（床置き）、tall+cafe 電気代 約360円/月（エコモード） 最低利用 3年（解約金11,000-16,500円） おすすめの人: たくさん水を使う家庭、ボトル交換が面倒な方\n水道水を注ぐだけで美味しい浄水が飲み放題の定額制。ボトルの注文・受取・交換が一切不要。料理にも気兼ねなく使える。tall+cafeモデルはコーヒーメーカー機能付き。\n5. ハミングウォーター — シンプルに使い放題 項目 内容 月額 3,300円（定額・水量無制限） 水 水道水を浄水（2段階フィルター） サーバー flows（床置き） 電気代 約475円/月（エコモード） 最低利用 2年（解約金16,500円） おすすめの人: シンプルに安く、たくさん使いたい方\nエブリィフレシャスと同じ浄水型で月3,300円の定額制。冷水・温水・常温水の3温度対応が特徴。フィルターは6ヶ月ごとに無料配送。\n天然水型 vs 浄水型、どちらを選ぶ？ 天然水型 浄水型 水の味 ミネラル豊富で美味しい スッキリした味 月額 3,200-5,000円（水量で変動） 3,300円（定額） ボトル交換 必要（月2回配送） 不要（水道水を補充） 水量制限 あり（注文量に依存） 無制限 おすすめ 味重視・2人以下 コスパ重視・家族 結論: 2人以下で味重視なら天然水型、3人以上の家庭や料理にも使うなら浄水型がお得。\nよくある質問（FAQ） Q1. ウォーターサーバーの電気代はいくら？ 月300-800円程度。エコモード搭載モデルなら月300-500円。電気ポット（月900円前後）より安い場合が多いです。\nQ2. 一人暮らしでも必要？ 一人暮らしでも十分メリットあり。フレシャス dewo miniなら月3,254円で冷水・温水がいつでも使えます。カップ麺やコーヒーのお湯も即座に出るので時短効果大。\nQ3. 赤ちゃんのミルク作りに使える？ はい。多くのサーバーが70-80℃の温水設定が可能で、ミルク作りに最適。チャイルドロック機能付きなら安全面も安心です。\nQ4. 解約金はかかる？ 最低利用期間（多くは2年）内の解約で9,900-20,000円程度の解約金が発生。期間満了後は無料で解約可能です。\nQ5. ペットボトルとどっちが安い？ 2Lペットボトルを月20本購入（約2,000円）と比較すると、ウォーターサーバーは月3,000-4,000円でやや高め。しかし利便性（冷水・温水がすぐ出る）と重いペットボトルを運ぶ手間を考えると、十分価値があります。\nまとめ あなたのタイプ おすすめ 月額 デザイン重視 プレミアムウォーター 3,974円〜 ボトル交換が楽 コスモウォーター 4,104円〜 一人暮らし・コンパクト フレシャス dewo mini 3,254円〜 定額で使い放題 エブリィフレシャス 3,300円 シンプルに安く ハミングウォーター 3,300円 迷ったらエブリィフレシャス（定額3,300円で使い放題）かプレミアムウォーター（天然水の味にこだわるなら）がおすすめ。\n各社とも無料お試しやキャンペーンを実施中。まずは資料請求から始めてみましょう。\n※本記事は情報提供を目的としており、特定のサービスの利用を推奨するものではありません。料金は変更される場合があります。\n関連ツール ウォーターサーバー代を含めた月々の支出を見直す → 家計簿シミュレーター ウォーターサーバーの年間コストをサブスク費用と一緒に管理 → サブスク管理計算ツール 関連テンプレート 暮らしの効率化をサポートするテンプレート：\nExcel家計簿テンプレート — 固定費・水道光熱費の見える化 AI仕事術ガイド — AIで日々の家事・買い物を効率化 あわせて読みたい 光回線 おすすめ2026年版！速度・料金・キャッシュバックで比較 格安SIM おすすめ2026年版！乗り換えで月5,000円節約する方法 ネット銀行 おすすめ2026年版！金利・手数料・使いやすさで比較 ","permalink":"https://productivity-works.com/ja/posts/water-server-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"ウォーターサーバーおすすめ2026年版コスパで選ぶ最強サーバー\"\u003eウォーターサーバーおすすめ2026年版｜コスパで選ぶ最強サーバー\u003c/h1\u003e\n\u003cp\u003eペットボトルの水を毎回買うのは面倒だし、重い。ウォーターサーバーなら\u003cstrong\u003eいつでも冷水・温水がボタン一つ\u003c/strong\u003eで使えます。\u003c/p\u003e\n\u003cp\u003e「高そう」というイメージがありますが、実は\u003cstrong\u003e月3,000-4,000円台\u003c/strong\u003eで利用可能。ペットボトル購入と比較しても大きな差はなく、利便性を考えるとコスパは十分です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ウォーターサーバーを選ぶ基準\"\u003eウォーターサーバーを選ぶ基準\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e基準\u003c/th\u003e\n          \u003cth\u003e重要な理由\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e月額料金\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eサーバーレンタル料 + 水代 + 電気代のトータルコスト\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e水の種類\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e天然水 vs RO水（純水）。味のこだわりで選ぶ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eデザイン\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eリビングに置くなら見た目も重要\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e機能\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eエコモード・チャイルドロック・温度調節\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e解約条件\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e最低利用期間と解約金の有無\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"おすすめウォーターサーバー-top5\"\u003eおすすめウォーターサーバー TOP5\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eサーバー\u003c/th\u003e\n          \u003cth\u003e月額目安\u003c/th\u003e\n          \u003cth\u003e水の種類\u003c/th\u003e\n          \u003cth\u003eデザイン\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eプレミアムウォーター\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e3,974円〜\u003c/td\u003e\n          \u003ctd\u003e天然水\u003c/td\u003e\n          \u003ctd\u003eおしゃれ\u003c/td\u003e\n          \u003ctd\u003eデザイン×天然水No.1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eコスモウォーター\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e4,104円〜\u003c/td\u003e\n          \u003ctd\u003e天然水\u003c/td\u003e\n          \u003ctd\u003eスタイリッシュ\u003c/td\u003e\n          \u003ctd\u003e足元ボトル交換\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eフレシャス\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e3,254円〜\u003c/td\u003e\n          \u003ctd\u003e天然水\u003c/td\u003e\n          \u003ctd\u003eコンパクト\u003c/td\u003e\n          \u003ctd\u003e卓上モデルが人気\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eエブリィフレシャス\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e3,300円\u003c/td\u003e\n          \u003ctd\u003e浄水型\u003c/td\u003e\n          \u003ctd\u003eミニマル\u003c/td\u003e\n          \u003ctd\u003e水道水を浄水・定額制\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eハミングウォーター\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e3,300円\u003c/td\u003e\n          \u003ctd\u003e浄水型\u003c/td\u003e\n          \u003ctd\u003eシンプル\u003c/td\u003e\n          \u003ctd\u003e水道水補充・使い放題\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※月額は24Lあたり（2人分目安）。浄水型は定額制で水量無制限。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"各サーバーの詳細\"\u003e各サーバーの詳細\u003c/h2\u003e\n\u003ch3 id=\"1-プレミアムウォーター--デザイン天然水の王道\"\u003e1. プレミアムウォーター — デザイン×天然水の王道\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月額\u003c/td\u003e\n          \u003ctd\u003e3,974円〜（12L×2本）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e水\u003c/td\u003e\n          \u003ctd\u003e非加熱天然水（富士・北アルプス・金城）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eサーバー\u003c/td\u003e\n          \u003ctd\u003eamadanaモデルなどデザイナーズ多数\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e電気代\u003c/td\u003e\n          \u003ctd\u003e約500円/月（エコモード使用時）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e最低利用\u003c/td\u003e\n          \u003ctd\u003e2年（解約金10,000-20,000円）\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e おしゃれなサーバーで天然水を飲みたい方\u003c/p\u003e","title":"ウォーターサーバー おすすめ2026年版！コスパ・デザイン・機能で比較"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nAIでExcel作業を自動化する方法【マクロ不要で誰でもできる】 「毎月同じExcel作業を繰り返している」「関数が複雑すぎて使いこなせない」「VBAを勉強する時間はない」——そんな悩みを持つビジネスパーソンは多いです。\n実は、AIを使えばこれらの問題を一気に解決できます。ChatGPTにやりたいことを日本語で説明するだけで、複雑な関数もVBAマクロも自動生成してくれます。本記事では、実際のExcel業務に使える具体的な手順を解説します。\nAIとExcelを組み合わせる3つのアプローチ アプローチ1：ChatGPTで関数・マクロを生成する やりたいことを説明 → コードをコピペ → Excel上で実行\nアプローチ2：Microsoft Copilot（Excel内蔵AI）を使う Microsoft 365の有料プランに含まれるAI機能。Excel上で直接AIに指示できます。\nアプローチ3：Pythonスクリプトで自動化する より高度な自動化が必要な場合。ChatGPTでPythonコードを生成して実行します。\n本記事では、最もハードルが低い**アプローチ1（ChatGPTを使う方法）**を中心に解説します。\n基本の使い方：ChatGPTにExcel作業を依頼する 効果的な依頼の仕方 Excelで以下の作業をしたいです。 【シートの構成】A列：商品名, B列：売上金額, C列：日付 【やりたいこと】C列が先月のデータのみ、B列の合計を出したい 【使えるExcelのバージョン】Microsoft 365 数式を教えてください。 ポイントは「シートの列構成」を伝えること。これがないと、ChatGPTは汎用的な答えしか出せません。\n活用例1：複雑な関数を自動生成する XLOOKUP / VLOOKUP の代替 Excel 365で使えるXLOOKUP関数を教えてください。 A列に社員番号、B列に氏名が入っているリストがSheet2にあります。 Sheet1のA列に入力した社員番号をもとに、Sheet1のB列に氏名を自動表示したいです。 出力例（ChatGPTが生成）\n=XLOOKUP(A2,Sheet2!A:A,Sheet2!B:B,\u0026#34;該当なし\u0026#34;) 「=XLOOKUP(A2,Sheet2!A:A,Sheet2!B:B,\u0026ldquo;該当なし\u0026rdquo;)」——これを自分で調べると30分かかるかもしれませんが、ChatGPTなら数秒です。\n条件付き集計（SUMIFS / COUNTIFS） Excel関数を教えてください。 A列：担当者名、B列：案件ステータス（「完了」「進行中」「保留」のいずれか）、C列：売上金額 「担当者が鈴木で、ステータスが完了の案件の売上合計」を出したい 生成される関数：\n=SUMIFS(C:C,A:A,\u0026#34;鈴木\u0026#34;,B:B,\u0026#34;完了\u0026#34;) 活用例2：VBAマクロを自動生成する VBAを書いたことがない人でも、ChatGPTに依頼するだけでマクロを作れます。\n例：複数シートのデータを1枚に集約するマクロ Excel VBAで以下の処理をするマクロを書いてください。 【処理内容】 このブックには「1月」「2月」「3月」という名前のシートがあります。 各シートのA1:D100のデータを、「集計」という新しいシートに縦に連結してください。 各シートのデータをコピーするとき、シート名をE列に自動入力してください。 初心者でも実行できるよう、コードの各行にコメントを入れてください。 ChatGPTが完全なVBAコードを出力します。あとはExcelの「開発」タブからVBAエディタを開き、コードを貼り付けて実行するだけです。\nVBAエディタの開き方（Excel） Alt + F11 を押す 「挿入」→「標準モジュール」 生成されたコードをペースト F5（または「実行」ボタン）で実行 マクロ実行前に必ずやること ファイルをバックアップしてから実行する 初回は小さいテストデータで確認する 活用例3：データ整形・クリーニング 不規則なデータを整える 実務でよくあるのが「表記揺れ」問題。例えば「株式会社○○」「（株）○○」「㈱○○」が混在しているケースです。\nExcelのA列に会社名が入っていますが、以下のような表記揺れがあります。 ・「株式会社」「(株)」「㈱」が混在している ・全角・半角スペースが混在している これをすべて「株式会社」+社名の形式に統一するVBAを書いてください。 住所データの分割 ExcelのA列に「東京都渋谷区○○1-2-3」のような住所が入っています。 これを「都道府県」「市区町村」「町名以降」の3列に分割する方法を教えてください。 Excelの関数でできますか？VBAが必要ですか？ 活用例4：グラフ・レポートの自動作成 VBAを使えば、データ更新のたびに手動でやっていたグラフ・レポート作成も自動化できます。\n以下の処理をするVBAマクロを書いてください。 1. 「データ」シートのA1:C100を基に、月別売上の折れ線グラフを作成する 2. グラフのタイトルは「月別売上推移」 3. 「レポート」シートの指定セル（A5）にグラフを配置する 4. 既存のグラフがある場合は更新する（重複して作成しない） 活用例5：メールの一括送信（OutlookとExcelの連携） ExcelのリストからOutlookで一括メールを送るVBAも作れます。\nExcelのA列にメールアドレス、B列に名前、C列に送信内容（個別テキスト）が入っています。 VBAを使って、各行の宛先に個別のメールをOutlookで自動送信するコードを書いてください。 送信前に確認ダイアログを表示してください。 Microsoft Copilot for Excel を使う場合 Microsoft 365 Businessプランに含まれるCopilot for Excelは、Excel内で直接AIに指示できます。\nできること\n「このデータのトレンドを分析して」 「売上が前月比で下がっている行をハイライトして」 「このデータをピボットテーブルにまとめて」 自然言語で指示できるため、ChatGPTでコードを生成してコピペする手間すら省けます。ただし有料プラン（Microsoft 365 Copilot、1ユーザー月額約4,500円）が必要です。\nよくある失敗と対処法 失敗1：エラーが出てマクロが動かない 対処：エラーメッセージをそのままChatGPTに貼り付けて「このエラーの原因と修正方法を教えてください」と聞く。\n失敗2：関数が想定と違う結果を返す 対処：「こういうデータに対してこの関数を使ったら○○という結果になりましたが、正しくは○○になるべきです。何が間違っていますか？」と聞く。\n失敗3：処理が非常に遅い 対処：「このVBAコードの処理速度を改善してください。特にループ処理を効率化してください」と依頼する。\nExcelスキルをキャリアアップにつなげよう Excel×AI自動化の実務スキルは、業務効率化担当・データアナリスト・事務職など幅広い求人で高く評価されています。今のスキルを活かせる仕事を探してみませんか。dodaで求人を探す\nまとめ：Excel自動化はAIで民主化された VBAやExcel関数の専門知識がなくても、ChatGPTにやりたいことを日本語で説明するだけで、複雑な自動化が実現できる時代になりました。\n最初の一歩として、「今週一番面倒だったExcel作業」をChatGPTに相談してみてください。驚くほど簡単に解決策が出てきます。\n関連記事\nChatGPTを仕事で使う具体的な活用法10選 すぐ使えるChatGPTプロンプトテンプレート20選 ChatGPT API初心者向け完全ガイド 関連ツール JSONデータを即座に整形・検証 → JSONフォーマッター 正規表現をリアルタイムでテスト → 正規表現テスター 月々の支出バランスを見直す → 家計簿シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 安全なパスワードを即座に生成 → パスワード生成ツール 関連テンプレート この記事の内容をすぐ実践できるExcelテンプレートはこちら：\nExcel家計簿テンプレート — 自動計算・グラフ付き Excel請求書テンプレート — インボイス制度対応 OKR管理テンプレート — 信号機表示付き目標管理 KPIダッシュボード — 前月比自動計算 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/posts/ai-excel-%E8%87%AA%E5%8B%95%E5%8C%96/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"aiでexcel作業を自動化する方法マクロ不要で誰でもできる\"\u003eAIでExcel作業を自動化する方法【マクロ不要で誰でもできる】\u003c/h1\u003e\n\u003cp\u003e「毎月同じExcel作業を繰り返している」「関数が複雑すぎて使いこなせない」「VBAを勉強する時間はない」——そんな悩みを持つビジネスパーソンは多いです。\u003c/p\u003e\n\u003cp\u003e実は、AIを使えばこれらの問題を一気に解決できます。ChatGPTにやりたいことを日本語で説明するだけで、複雑な関数もVBAマクロも自動生成してくれます。本記事では、実際のExcel業務に使える具体的な手順を解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"aiとexcelを組み合わせる3つのアプローチ\"\u003eAIとExcelを組み合わせる3つのアプローチ\u003c/h2\u003e\n\u003ch3 id=\"アプローチ1chatgptで関数マクロを生成する\"\u003eアプローチ1：ChatGPTで関数・マクロを生成する\u003c/h3\u003e\n\u003cp\u003eやりたいことを説明 → コードをコピペ → Excel上で実行\u003c/p\u003e\n\u003ch3 id=\"アプローチ2microsoft-copilotexcel内蔵aiを使う\"\u003eアプローチ2：Microsoft Copilot（Excel内蔵AI）を使う\u003c/h3\u003e\n\u003cp\u003eMicrosoft 365の有料プランに含まれるAI機能。Excel上で直接AIに指示できます。\u003c/p\u003e\n\u003ch3 id=\"アプローチ3pythonスクリプトで自動化する\"\u003eアプローチ3：Pythonスクリプトで自動化する\u003c/h3\u003e\n\u003cp\u003eより高度な自動化が必要な場合。ChatGPTでPythonコードを生成して実行します。\u003c/p\u003e\n\u003cp\u003e本記事では、最もハードルが低い**アプローチ1（ChatGPTを使う方法）**を中心に解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"基本の使い方chatgptにexcel作業を依頼する\"\u003e基本の使い方：ChatGPTにExcel作業を依頼する\u003c/h2\u003e\n\u003ch3 id=\"効果的な依頼の仕方\"\u003e効果的な依頼の仕方\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eExcelで以下の作業をしたいです。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【シートの構成】A列：商品名, B列：売上金額, C列：日付\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【やりたいこと】C列が先月のデータのみ、B列の合計を出したい\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【使えるExcelのバージョン】Microsoft 365\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e数式を教えてください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eポイントは「シートの列構成」を伝えること。これがないと、ChatGPTは汎用的な答えしか出せません。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"活用例1複雑な関数を自動生成する\"\u003e活用例1：複雑な関数を自動生成する\u003c/h2\u003e\n\u003ch3 id=\"xlookup--vlookup-の代替\"\u003eXLOOKUP / VLOOKUP の代替\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eExcel 365で使えるXLOOKUP関数を教えてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eA列に社員番号、B列に氏名が入っているリストがSheet2にあります。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eSheet1のA列に入力した社員番号をもとに、Sheet1のB列に氏名を自動表示したいです。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e出力例（ChatGPTが生成）\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=XLOOKUP(A2,Sheet2!A:A,Sheet2!B:B,\u0026#34;該当なし\u0026#34;)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e「=XLOOKUP(A2,Sheet2!A:A,Sheet2!B:B,\u0026ldquo;該当なし\u0026rdquo;)」——これを自分で調べると30分かかるかもしれませんが、ChatGPTなら数秒です。\u003c/p\u003e\n\u003ch3 id=\"条件付き集計sumifs--countifs\"\u003e条件付き集計（SUMIFS / COUNTIFS）\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eExcel関数を教えてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eA列：担当者名、B列：案件ステータス（「完了」「進行中」「保留」のいずれか）、C列：売上金額\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e「担当者が鈴木で、ステータスが完了の案件の売上合計」を出したい\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e生成される関数：\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=SUMIFS(C:C,A:A,\u0026#34;鈴木\u0026#34;,B:B,\u0026#34;完了\u0026#34;)\n\u003c/code\u003e\u003c/pre\u003e\u003chr\u003e\n\u003ch2 id=\"活用例2vbaマクロを自動生成する\"\u003e活用例2：VBAマクロを自動生成する\u003c/h2\u003e\n\u003cp\u003eVBAを書いたことがない人でも、ChatGPTに依頼するだけでマクロを作れます。\u003c/p\u003e\n\u003ch3 id=\"例複数シートのデータを1枚に集約するマクロ\"\u003e例：複数シートのデータを1枚に集約するマクロ\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eExcel VBAで以下の処理をするマクロを書いてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【処理内容】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eこのブックには「1月」「2月」「3月」という名前のシートがあります。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e各シートのA1:D100のデータを、「集計」という新しいシートに縦に連結してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e各シートのデータをコピーするとき、シート名をE列に自動入力してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e初心者でも実行できるよう、コードの各行にコメントを入れてください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eChatGPTが完全なVBAコードを出力します。あとはExcelの「開発」タブからVBAエディタを開き、コードを貼り付けて実行するだけです。\u003c/p\u003e\n\u003ch3 id=\"vbaエディタの開き方excel\"\u003eVBAエディタの開き方（Excel）\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eAlt + F11 を押す\u003c/li\u003e\n\u003cli\u003e「挿入」→「標準モジュール」\u003c/li\u003e\n\u003cli\u003e生成されたコードをペースト\u003c/li\u003e\n\u003cli\u003eF5（または「実行」ボタン）で実行\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"マクロ実行前に必ずやること\"\u003eマクロ実行前に必ずやること\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eファイルをバックアップしてから実行する\u003c/li\u003e\n\u003cli\u003e初回は小さいテストデータで確認する\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"活用例3データ整形クリーニング\"\u003e活用例3：データ整形・クリーニング\u003c/h2\u003e\n\u003ch3 id=\"不規則なデータを整える\"\u003e不規則なデータを整える\u003c/h3\u003e\n\u003cp\u003e実務でよくあるのが「表記揺れ」問題。例えば「株式会社○○」「（株）○○」「㈱○○」が混在しているケースです。\u003c/p\u003e","title":"AIでExcel作業を自動化する方法【マクロ不要で誰でもできる】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nネット銀行おすすめ2026年版｜金利・手数料で選ぶ最強口座 大手銀行（三菱UFJ・三井住友・みずほ）の普通預金金利は年0.1%程度。100万円預けても利息はわずか年1,000円です。\n一方、ネット銀行なら年0.2-0.35%（条件次第で最大0.5%）。同じ100万円で年2,000-5,000円の利息。さらにATM手数料・振込手数料が無料になる回数が多く、年間1-2万円の手数料節約も実現できます。\nネット銀行とは？なぜお得なのか 大手銀行 ネット銀行 普通預金金利 0.1% 0.2-0.35%（最大100倍以上） ATM手数料 110-330円/回 月数回無料 振込手数料 220-440円/回 月数回無料 店舗 全国に支店あり なし（スマホ完結） 通帳 あり なし（アプリで管理） お得な理由: 店舗・人件費がないため、その分を金利やサービスに還元。\nおすすめネット銀行 TOP5 比較表 銀行 普通預金金利 ATM無料回数 振込無料回数 特徴 SBI新生銀行 0.30% 月5回〜 月10回〜 金利・手数料バランス最強 楽天銀行 0.18%（最大0.28%） 月最大7回 月最大3回 楽天経済圏と連携 住信SBIネット銀行 0.11%（ハイブリッド0.21%） 月最大20回 月最大20回 SBI証券との連携抜群 auじぶん銀行 0.33%（条件達成時） 月最大15回 月最大15回 au経済圏で最大金利 ソニー銀行 0.15% 月最大無制限 月最大11回 外貨預金・デビットカード ※金利・無料回数は2026年時点。ステージ・条件により変動。\n各銀行の詳細レビュー 1. SBI新生銀行 — 金利・手数料のバランス最強 項目 内容 普通預金金利 0.30%（SBI証券口座連携で） ATM手数料 セブン銀行：何回でも無料 振込手数料 月10回〜無料（ステップアッププログラム） 特徴 コンビニATM無料回数が業界最多水準 おすすめの人: メインバンクとして使いたい方\nSBI証券との口座連携で普通預金金利が0.30%に。セブン銀行ATMは回数制限なしで無料。振込手数料もステージに応じて月10-50回無料。総合力で最もおすすめのネット銀行です。\n2. 楽天銀行 — 楽天経済圏なら必須 項目 内容 普通預金金利 0.18%（楽天証券マネーブリッジで最大0.28%） ATM手数料 月最大7回無料（ハッピープログラム） 振込手数料 月最大3回無料 特徴 楽天ポイントが貯まる・使える おすすめの人: 楽天カード・楽天市場を使っている方\n楽天証券とのマネーブリッジ設定で金利が0.28%に。楽天ポイントで振込手数料を支払えるなど、楽天経済圏との連携が強力。口座数1,500万超で国内ネット銀行No.1。\n3. 住信SBIネット銀行 — SBI証券ユーザーの鉄板 項目 内容 普通預金金利 0.11%（SBIハイブリッド預金0.21%） ATM手数料 月最大20回無料（スマプロランク） 振込手数料 月最大20回無料 特徴 目的別口座が便利、デビットカード高還元 おすすめの人: SBI証券で投資している方、目的別に貯金を分けたい方\nSBI証券との連携でハイブリッド預金金利0.21%。目的別口座機能で「旅行資金」「教育費」などを分けて管理できます。ATM・振込の無料回数は業界トップクラス。\n4. auじぶん銀行 — 条件達成で最高金利 項目 内容 普通預金金利 最大0.33%（au PAY等の条件達成で） ATM手数料 月最大15回無料 振込手数料 月最大15回無料 特徴 auカブコム証券・au PAY連携で金利上乗せ おすすめの人: auユーザー、au経済圏の方\nau PAY連携（+0.05%）、auカブコム証券連携（+0.10%）、au PAYカード引落し（+0.05%）など、条件を組み合わせると普通預金金利が最大0.33%に。au経済圏ユーザーには最もお得。\n5. ソニー銀行 — 外貨と海外利用に強い 項目 内容 普通預金金利 0.15% ATM手数料 月最大無制限無料（Club Sステージ） 振込手数料 月最大11回無料 特徴 外貨預金12通貨対応、Sony Bank WALLETが高評価 おすすめの人: 海外旅行する方、外貨預金に興味がある方\nSony Bank WALLET（デビットカード）は海外での利用手数料が業界最安水準。外貨預金は12通貨に対応し、為替手数料も低コスト。海外利用が多い方に最適。\nタイプ別おすすめまとめ あなたのタイプ おすすめ ポイント 総合力で選びたい SBI新生銀行 金利0.30% + ATM無料 楽天ユーザー 楽天銀行 楽天ポイント連携 SBI証券で投資中 住信SBIネット銀行 ハイブリッド預金0.21% auユーザー auじぶん銀行 最大金利0.33% 海外利用が多い ソニー銀行 外貨・デビット最強 2行持ちしたい SBI新生 + 楽天 メイン + サブ ネット銀行の始め方（最短10分） 公式サイトから申込み — 本人確認書類（マイナンバーカード or 運転免許証）を準備 スマホで本人確認 — eKYCで最短即日開設 初回入金 — 他行から振込 or コンビニATMで入金 アプリ設定 — 通知設定・生体認証を有効化 証券口座連携（任意） — SBI証券/楽天証券との連携で金利アップ よくある質問（FAQ） Q1. ネット銀行は安全ですか？ はい。ネット銀行も預金保険制度（ペイオフ）の対象で、1,000万円+利息まで保護されます。大手銀行と同じ安全基準です。2段階認証・生体認証も標準装備。\nQ2. 給与振込口座にできますか？ はい。ほとんどのネット銀行は給与振込口座に指定できます。会社によってはネット銀行を指定できない場合がありますが、その場合は大手銀行→ネット銀行への自動振替を設定すればOKです。\nQ3. 通帳がないのは不便では？ アプリで残高・取引履歴がリアルタイムで確認でき、むしろ紙の通帳より便利です。確定申告時はCSVダウンロードで対応可能。\nQ4. 複数のネット銀行に口座を持つべきですか？ メイン1行 + サブ1行の2行がおすすめ。メインは金利・手数料重視、サブは証券連携や特定のサービス（楽天ポイント等）目的で使い分けるのが効率的です。\nQ5. 大手銀行の口座は解約すべき？ 解約の必要はありません。住宅ローンや公共料金の引落しなど、大手銀行でしかできないサービスもあります。メインをネット銀行に移し、大手銀行はサブとして残すのがベスト。\n資産運用も始めるなら**楽天証券 **がおすすめ。楽天銀行との連携で普通預金金利が最大年0.1%にアップします。\nまとめ ネット銀行への移行は金利アップ + 手数料節約で年間1-3万円のメリットがあります。\n迷ったらまずSBI新生銀行（金利0.30% + ATM無料回数最多）。楽天ユーザーなら楽天銀行。投資もするなら住信SBIネット銀行 + SBI証券の組み合わせが鉄板です。\n浮いた手数料と増えた利息を投資に回せば、資産形成がさらに加速します。\n関連記事: 新NISAの始め方 初心者向け完全ガイド2026 関連記事: SBI証券と楽天証券を徹底比較 ※本記事は情報提供を目的としており、特定の金融機関の利用を推奨するものではありません。金利・手数料は変更される場合があります。最新情報は各銀行の公式サイトでご確認ください。\n関連ツール 浮いたお金を投資に回すなら → 複利計算シミュレーター 手取りから貯蓄可能額を計算 → 手取り計算シミュレーター 理想の支出配分を計算 → 家計簿シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター 教育費の総額を計算 → 教育費シミュレーター 総資産・純資産を計算 → 資産管理シミュレーター 関連テンプレート 家計管理・資産形成をサポートするテンプレート：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで生産性を上げて収入もアップ ","permalink":"https://productivity-works.com/ja/posts/net-bank-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"ネット銀行おすすめ2026年版金利手数料で選ぶ最強口座\"\u003eネット銀行おすすめ2026年版｜金利・手数料で選ぶ最強口座\u003c/h1\u003e\n\u003cp\u003e大手銀行（三菱UFJ・三井住友・みずほ）の普通預金金利は\u003cstrong\u003e年0.1%\u003cstrong\u003e程度。100万円預けても利息はわずか\u003c/strong\u003e年1,000円\u003c/strong\u003eです。\u003c/p\u003e\n\u003cp\u003e一方、ネット銀行なら\u003cstrong\u003e年0.2-0.35%\u003c/strong\u003e（条件次第で最大0.5%）。同じ100万円で\u003cstrong\u003e年2,000-5,000円\u003c/strong\u003eの利息。さらにATM手数料・振込手数料が無料になる回数が多く、\u003cstrong\u003e年間1-2万円の手数料節約\u003c/strong\u003eも実現できます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ネット銀行とはなぜお得なのか\"\u003eネット銀行とは？なぜお得なのか\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003c/th\u003e\n          \u003cth\u003e大手銀行\u003c/th\u003e\n          \u003cth\u003eネット銀行\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e普通預金金利\u003c/td\u003e\n          \u003ctd\u003e0.1%\u003c/td\u003e\n          \u003ctd\u003e0.2-0.35%（最大100倍以上）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eATM手数料\u003c/td\u003e\n          \u003ctd\u003e110-330円/回\u003c/td\u003e\n          \u003ctd\u003e月数回無料\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e振込手数料\u003c/td\u003e\n          \u003ctd\u003e220-440円/回\u003c/td\u003e\n          \u003ctd\u003e月数回無料\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e店舗\u003c/td\u003e\n          \u003ctd\u003e全国に支店あり\u003c/td\u003e\n          \u003ctd\u003eなし（スマホ完結）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e通帳\u003c/td\u003e\n          \u003ctd\u003eあり\u003c/td\u003e\n          \u003ctd\u003eなし（アプリで管理）\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eお得な理由:\u003c/strong\u003e 店舗・人件費がないため、その分を金利やサービスに還元。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"おすすめネット銀行-top5-比較表\"\u003eおすすめネット銀行 TOP5 比較表\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e銀行\u003c/th\u003e\n          \u003cth\u003e普通預金金利\u003c/th\u003e\n          \u003cth\u003eATM無料回数\u003c/th\u003e\n          \u003cth\u003e振込無料回数\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eSBI新生銀行\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0.30%\u003c/td\u003e\n          \u003ctd\u003e月5回〜\u003c/td\u003e\n          \u003ctd\u003e月10回〜\u003c/td\u003e\n          \u003ctd\u003e金利・手数料バランス最強\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e楽天銀行\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0.18%（最大0.28%）\u003c/td\u003e\n          \u003ctd\u003e月最大7回\u003c/td\u003e\n          \u003ctd\u003e月最大3回\u003c/td\u003e\n          \u003ctd\u003e楽天経済圏と連携\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e住信SBIネット銀行\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0.11%（ハイブリッド0.21%）\u003c/td\u003e\n          \u003ctd\u003e月最大20回\u003c/td\u003e\n          \u003ctd\u003e月最大20回\u003c/td\u003e\n          \u003ctd\u003eSBI証券との連携抜群\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eauじぶん銀行\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0.33%（条件達成時）\u003c/td\u003e\n          \u003ctd\u003e月最大15回\u003c/td\u003e\n          \u003ctd\u003e月最大15回\u003c/td\u003e\n          \u003ctd\u003eau経済圏で最大金利\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eソニー銀行\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0.15%\u003c/td\u003e\n          \u003ctd\u003e月最大無制限\u003c/td\u003e\n          \u003ctd\u003e月最大11回\u003c/td\u003e\n          \u003ctd\u003e外貨預金・デビットカード\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※金利・無料回数は2026年時点。ステージ・条件により変動。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"各銀行の詳細レビュー\"\u003e各銀行の詳細レビュー\u003c/h2\u003e\n\u003ch3 id=\"1-sbi新生銀行--金利手数料のバランス最強\"\u003e1. SBI新生銀行 — 金利・手数料のバランス最強\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e普通預金金利\u003c/td\u003e\n          \u003ctd\u003e0.30%（SBI証券口座連携で）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eATM手数料\u003c/td\u003e\n          \u003ctd\u003eセブン銀行：何回でも無料\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e振込手数料\u003c/td\u003e\n          \u003ctd\u003e月10回〜無料（ステップアッププログラム）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e特徴\u003c/td\u003e\n          \u003ctd\u003eコンビニATM無料回数が業界最多水準\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e メインバンクとして使いたい方\u003c/p\u003e","title":"ネット銀行 おすすめ2026年版！金利・手数料・使いやすさで比較"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n光回線おすすめ2026年版｜スマホ別に最安の光回線を選ぶ 光回線選びの最大のポイントはスマホとのセット割です。正しく選べば毎月のスマホ代が最大1,100円割引（家族全員分）。4人家族なら年間52,800円の節約になります。\n逆に、セット割を無視して光回線を選ぶと、年間数万円を無駄にしている可能性があります。\n光回線の選び方 — スマホキャリア別 あなたのスマホ 最適な光回線 セット割引 ドコモ ドコモ光 最大1,100円/月×家族人数 au auひかり or ビッグローブ光 最大1,100円/月×家族人数 ソフトバンク ソフトバンク光 or NURO光 最大1,100円/月×家族人数 楽天モバイル 楽天ひかり 楽天ポイント還元 格安SIM GMOとくとくBB光 or NURO光 セット割なし→料金最安を選ぶ おすすめ光回線 TOP5 比較表 光回線 月額料金（戸建て） 月額料金（マンション） 速度 キャッシュバック ドコモ光 5,720円 4,400円 1Gbps 最大65,000円 auひかり 5,610円 4,180円 1Gbps 最大72,000円 NURO光 5,200円 2,090-2,750円 2Gbps 最大45,000円 ソフトバンク光 5,720円 4,180円 1Gbps 最大40,000円 GMOとくとくBB光 4,818円 3,773円 1Gbps 最大30,000円 ※料金は2026年時点、税込み。キャッシュバックは申込窓口により異なります。\n各光回線の詳細 1. ドコモ光 — ドコモユーザーの鉄板 項目 内容 月額 戸建て5,720円 / マンション4,400円 速度 1Gbps（10Gbps対応プランあり） セット割 ドコモスマホ1台あたり最大1,100円/月引き キャッシュバック GMOとくとくBB経由で最大65,000円 工事費 無料キャンペーン実施中 おすすめの人: ドコモユーザー（家族含む）\nドコモユーザーなら選択肢は実質ドコモ光一択。家族4人でドコモスマホなら年間52,800円のセット割が適用されます。プロバイダはGMOとくとくBBが速度・キャッシュバックともに最優秀。\n2. auひかり — au・UQモバイルユーザーに最適 項目 内容 月額 戸建て5,610円 / マンション4,180円 速度 1Gbps（5Gbps/10Gbpsプランあり） セット割 au/UQモバイル1台あたり最大1,100円/月引き キャッシュバック 最大72,000円（代理店経由） 特徴 KDDIの独自回線で混雑に強い おすすめの人: au・UQモバイルユーザー\nNTTの光コラボではなくKDDI独自の光ファイバーを使用するため、回線混雑時でも速度が安定しやすいのが最大の強み。キャッシュバック額も業界最高水準。\n3. NURO光 — 速度重視なら最強 項目 内容 月額 戸建て5,200円 / マンション2,090-2,750円 速度 2Gbps（標準で他社の2倍） セット割 ソフトバンク/NUROモバイル割引あり キャッシュバック 最大45,000円 注意 対応エリアが限定的 おすすめの人: 速度を最重視する方、ゲーマー、リモートワーカー\n標準プランで2Gbpsは業界唯一。実測でも他社の1.5-2倍程度出ることが多く、オンラインゲームや大容量ファイルのやり取りに最適。ただし対応エリアが関東・東海・関西・九州の一部に限定されるため、まずエリア確認が必要。\n4. ソフトバンク光 — ソフトバンク・Y!mobileユーザー向け 項目 内容 月額 戸建て5,720円 / マンション4,180円 速度 1Gbps（10Gbps対応プランあり） セット割 ソフトバンク/Y!mobile1台あたり最大1,100円/月引き キャッシュバック 最大40,000円 特徴 他社からの乗り換え違約金負担あり おすすめの人: ソフトバンク・Y!mobileユーザー（NURO光エリア外の場合）\nNURO光がエリア外のソフトバンクユーザーの最適解。他社光回線からの乗り換え時に違約金を最大10万円まで負担してくれるキャンペーンが強力。\n5. GMOとくとくBB光 — 格安SIMユーザーに最安 項目 内容 月額 戸建て4,818円 / マンション3,773円 速度 1Gbps セット割 なし（そもそも月額が安い） キャッシュバック 最大30,000円 特徴 業界最安水準の月額料金 おすすめの人: 格安SIMユーザー、セット割が不要な方\nセット割がない代わりに、月額料金が業界最安水準。格安SIM（楽天モバイル、ahamo、LINEMO、UQモバイルなど）を使っている方は、セット割を気にせず純粋に料金の安さで選ぶべき。GMOとくとくBB光が最有力候補。\n実質月額で比較（2年間） 光回線 月額 セット割 CB 実質月額（戸建て） ドコモ光（ドコモ4人） 5,720円 -4,400円 -2,708円 -1,388円 auひかり（au4人） 5,610円 -4,400円 -3,000円 -1,790円 NURO光（SB2人） 5,200円 -2,200円 -1,875円 1,125円 GMOとくとくBB光 4,818円 0円 -1,250円 3,568円 ※CB=キャッシュバック月割、セット割は家族人数で変動\n家族でキャリアスマホを使っているなら、セット割だけで光回線代がほぼ無料になる計算です。\nよくある質問（FAQ） Q1. マンションでも光回線は自分で選べますか？ マンションの設備によります。光コラボ（ドコモ光、ソフトバンク光等）はNTTフレッツ光の設備があれば利用可能。auひかり、NURO光は対応マンションが限定されます。管理会社に確認するのが確実です。\nQ2. 工事は必要ですか？ フレッツ光が導入済みなら工事不要（光コラボの場合）。新規の場合は開通工事が必要で、2-4週間かかります。工事費無料キャンペーンを活用しましょう。\nQ3. 契約期間の縛りはありますか？ 多くの光回線は2年または3年の契約期間があります。途中解約で違約金（1ヶ月分の月額程度）が発生しますが、以前より大幅に減額されています。\nQ4. WiFiルーターは自分で用意する必要がありますか？ 多くの光回線でWiFiルーターの無料レンタルが可能です。ドコモ光（GMOとくとくBB経由）は高性能ルーターが無料。自前で用意する場合はWiFi 6E対応のルーターがおすすめ。\nQ5. 光回線とポケットWiFi、どちらがいい？ 自宅メインなら光回線一択。速度・安定性・データ容量すべてで光回線が上。外出先でも使いたい一人暮らしの方はポケットWiFiやホームルーターも選択肢に入ります。\nまとめ 光回線選びはスマホキャリアで決まるのが2026年の正解です。\nドコモユーザー → ドコモ光（GMOとくとくBB経由） auユーザー → auひかり ソフトバンクユーザー → NURO光（エリア内）or ソフトバンク光 格安SIMユーザー → GMOとくとくBB光 浮いた通信費を投資に回して、さらに資産形成を加速させましょう。\n関連記事: 格安SIM おすすめ2026年版 ※本記事は情報提供を目的としており、特定の通信サービスの契約を推奨するものではありません。料金・キャンペーンは変更される場合があります。最新情報は各社公式サイトでご確認ください。\n関連ツール 通信費削減で浮いたお金を家計全体で把握する → 家計簿シミュレーター サブスク・光回線の年間コストを一括確認 → サブスク管理計算ツール 関連テンプレート 通信費見直し・家計管理をサポートするテンプレート：\nExcel家計簿テンプレート — 固定費の見える化で節約を加速 AI仕事術ガイド — AIで生産性を上げて収入もアップ ","permalink":"https://productivity-works.com/ja/posts/hikari-kaisen-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"光回線おすすめ2026年版スマホ別に最安の光回線を選ぶ\"\u003e光回線おすすめ2026年版｜スマホ別に最安の光回線を選ぶ\u003c/h1\u003e\n\u003cp\u003e光回線選びの最大のポイントは\u003cstrong\u003eスマホとのセット割\u003c/strong\u003eです。正しく選べば毎月のスマホ代が\u003cstrong\u003e最大1,100円割引\u003c/strong\u003e（家族全員分）。4人家族なら年間\u003cstrong\u003e52,800円の節約\u003c/strong\u003eになります。\u003c/p\u003e\n\u003cp\u003e逆に、セット割を無視して光回線を選ぶと、年間数万円を無駄にしている可能性があります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"光回線の選び方--スマホキャリア別\"\u003e光回線の選び方 — スマホキャリア別\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eあなたのスマホ\u003c/th\u003e\n          \u003cth\u003e最適な光回線\u003c/th\u003e\n          \u003cth\u003eセット割引\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eドコモ\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eドコモ光\u003c/td\u003e\n          \u003ctd\u003e最大1,100円/月×家族人数\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eau\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eauひかり or ビッグローブ光\u003c/td\u003e\n          \u003ctd\u003e最大1,100円/月×家族人数\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eソフトバンク\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eソフトバンク光 or NURO光\u003c/td\u003e\n          \u003ctd\u003e最大1,100円/月×家族人数\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e楽天モバイル\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e楽天ひかり\u003c/td\u003e\n          \u003ctd\u003e楽天ポイント還元\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e格安SIM\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eGMOとくとくBB光 or NURO光\u003c/td\u003e\n          \u003ctd\u003eセット割なし→料金最安を選ぶ\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"おすすめ光回線-top5-比較表\"\u003eおすすめ光回線 TOP5 比較表\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e光回線\u003c/th\u003e\n          \u003cth\u003e月額料金（戸建て）\u003c/th\u003e\n          \u003cth\u003e月額料金（マンション）\u003c/th\u003e\n          \u003cth\u003e速度\u003c/th\u003e\n          \u003cth\u003eキャッシュバック\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eドコモ光\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e5,720円\u003c/td\u003e\n          \u003ctd\u003e4,400円\u003c/td\u003e\n          \u003ctd\u003e1Gbps\u003c/td\u003e\n          \u003ctd\u003e最大65,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eauひかり\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e5,610円\u003c/td\u003e\n          \u003ctd\u003e4,180円\u003c/td\u003e\n          \u003ctd\u003e1Gbps\u003c/td\u003e\n          \u003ctd\u003e最大72,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eNURO光\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e5,200円\u003c/td\u003e\n          \u003ctd\u003e2,090-2,750円\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e2Gbps\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e最大45,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eソフトバンク光\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e5,720円\u003c/td\u003e\n          \u003ctd\u003e4,180円\u003c/td\u003e\n          \u003ctd\u003e1Gbps\u003c/td\u003e\n          \u003ctd\u003e最大40,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eGMOとくとくBB光\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e4,818円\u003c/td\u003e\n          \u003ctd\u003e3,773円\u003c/td\u003e\n          \u003ctd\u003e1Gbps\u003c/td\u003e\n          \u003ctd\u003e最大30,000円\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※料金は2026年時点、税込み。キャッシュバックは申込窓口により異なります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"各光回線の詳細\"\u003e各光回線の詳細\u003c/h2\u003e\n\u003ch3 id=\"1-ドコモ光--ドコモユーザーの鉄板\"\u003e1. ドコモ光 — ドコモユーザーの鉄板\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月額\u003c/td\u003e\n          \u003ctd\u003e戸建て5,720円 / マンション4,400円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e速度\u003c/td\u003e\n          \u003ctd\u003e1Gbps（10Gbps対応プランあり）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eセット割\u003c/td\u003e\n          \u003ctd\u003eドコモスマホ1台あたり最大1,100円/月引き\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eキャッシュバック\u003c/td\u003e\n          \u003ctd\u003eGMOとくとくBB経由で最大65,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e工事費\u003c/td\u003e\n          \u003ctd\u003e無料キャンペーン実施中\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e ドコモユーザー（家族含む）\u003c/p\u003e","title":"光回線 おすすめ2026年版！速度・料金・キャッシュバックで比較"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nAI画像生成ツールは2026年現在、クオリティ・使いやすさ・価格のどれをとっても急速に進化しています。「どのツールを選べばいいかわからない」という方のために、主要なAI画像生成ツールを用途別に徹底比較します。\nAI画像生成ツール 2026年比較一覧 ツール 月額料金 特徴 日本語プロンプト 商用利用 Midjourney $10〜$60 最高画質・アーティスティック 対応 有料プランのみ DALL-E 3（ChatGPT内） ChatGPTプランに含む 使いやすい・日本語得意 得意 可 Stable Diffusion 無料（ローカル） カスタマイズ自由・無制限 英語が得意 可（モデルによる） Adobe Firefly CC契約に含む Adobe製品連携・安全 対応 完全商用可 Leonardo.ai 無料〜$24 ゲーム・イラスト系に強い 英語が得意 可 Canva AI（Magic Media） 無料〜 非デザイナー向け・簡単 対応 可 Bing Image Creator 無料 完全無料・日本語対応 得意 個人利用推奨 各ツール詳細レビュー 1. Midjourney（ミッドジャーニー） 画質・芸術性でトップクラスのAI画像生成ツール。プロのデザイナーや写真家も使用するクオリティです。\nメリット：\n圧倒的な画質とリアリティ 独自のアーティスティックなスタイル 活発なコミュニティでヒント・プロンプトを共有できる デメリット：\nDiscordを通じた操作が初心者には難しい 無料プランがない（有料のみ） 英語プロンプトの方が精度が高い こんな方におすすめ：\nクリエイター・デザイナー・マーケター SNS用のハイクオリティビジュアルが欲しい方 ポスター・サムネイル・アート作品制作 料金：\nBasicプラン：$10/月（200生成/月） Standardプラン：$30/月（無制限ほぼ） Proプラン：$60/月（商用・高速生成） 2. DALL-E 3（ChatGPT経由） OpenAIが開発した画像生成AIで、ChatGPT PlusやProから直接利用できます。「〇〇な感じの画像を作って」と日本語で話しかけるだけで生成できる手軽さが魅力。\nメリット：\nChatGPTとの会話の流れで画像生成できる 日本語指示が非常に得意 著作権リスクが低い設計 デメリット：\nMidjourneyと比べると芸術性で劣る 1回の生成枚数が限られる 細かいスタイル調整が難しい こんな方におすすめ：\nChatGPTをすでに使っている方 ブログ・SNS投稿の挿絵を手軽に作りたい方 日本語でそのまま指示したい方 3. Stable Diffusion（スタブル・ディフュージョン） 完全無料でローカル動作できるオープンソースの画像生成AI。自分のPCにインストールして使えるため、生成枚数無制限・完全プライベートです。\nメリット：\n完全無料・生成枚数無制限 カスタムモデル（LoRA等）で特定スタイルに特化できる プライバシーが守られる デメリット：\nセットアップにある程度の技術知識が必要 高性能GPUが必要（GPU非搭載PCでは遅い） 英語プロンプトが基本 こんな方におすすめ：\nエンジニア・技術に詳しい方 大量生成が必要な方 特定のキャラクター・スタイルに特化したい方 クラウド版： 「Stability AI API」を使えばローカル環境不要で使えます。\n4. Adobe Firefly（アドビ ファイアフライ） Adobeが開発した商用利用に完全対応したAI画像生成ツール。Adobe Creative Cloud（Photoshop・Illustratorなど）に統合されており、デザインワークフローに自然に組み込めます。\nメリット：\n商用利用が完全にクリア（学習データが合法） PhotoshopやIllustratorと直接統合 テキストから画像、画像の拡張など多機能 デメリット：\nAdobe CC契約が前提 独立したツールとしての生成枚数に制限あり こんな方におすすめ：\nAdobe製品ユーザー 商用デザイン・広告制作の方 著作権リスクゼロで使いたい方 5. Leonardo.ai（レオナルド AI） ゲーム・アニメ・イラスト系に特化したAI画像生成サービス。多数のスタイルモデルを選択でき、一貫したキャラクターデザインが得意です。\nメリット：\nゲーム・アニメスタイルが得意 キャラクターの一貫性を保ちやすい 無料プランでも十分使える デメリット：\nリアル系写真には向かない UIが少し複雑 料金： 無料（150クレジット/日）〜$24/月\n6. Canva AI（Magic Media） 非デザイナー向けに最も使いやすいAI画像生成。Canvaのデザインツールと統合されており、作った画像をそのままSNS投稿やプレゼン資料に組み込めます。\nこんな方におすすめ：\nデザイン初心者 SNS運用・ブログ用の画像を手軽に作りたい方 7. Bing Image Creator（Microsoft） 完全無料でDALL-E 3ベースの高品質画像を生成できるMicrosoftのサービス。日本語プロンプトにも対応しており、コストゼロで始めたい方の最初の選択肢として最適です。\n用途別おすすめツール 用途 おすすめツール SNS・ブログのサムネイル DALL-E 3（ChatGPT）/ Canva AI プロクオリティのアート Midjourney ゲーム・アニメキャラクター Leonardo.ai 商用広告・デザイン Adobe Firefly 大量生成・完全無料 Stable Diffusion（ローカル） とにかく無料で試したい Bing Image Creator AI画像生成ツールの選び方ポイント 1. 用途と品質要件を決める 商用広告に使うか、個人ブログに使うかで必要なクオリティが変わります。個人利用なら無料ツールで十分なケースも多いです。\n2. 著作権・商用利用の確認 各ツールの利用規約を必ず確認しましょう。特にAdobe FireflyとDALL-E 3は商用利用ガイドラインが明確で安心です。\n3. 日本語プロンプト対応を確認 日本語で指示できるか、英語が必要かはツール選びの重要な基準です。初心者にはDALL-E 3やBing Image Creatorが日本語対応で使いやすいです。\n4. コストと生成量のバランス 頻繁に使うなら有料プランのコストパフォーマンスを計算しましょう。大量生成が必要ならStable Diffusionのローカル運用が最終的に安上がりです。\n2026年のAI画像生成トレンド 動画生成AIとの融合：Soraなど動画生成AIが普及し、静止画から動画への発展が加速 一貫したキャラクター生成：同じキャラクターを複数シーンで生成する技術が向上 リアルタイム生成：プロンプト入力中にリアルタイムでプレビューが変化する機能が標準化 ワークフロー統合：Adobe・Canva・Figmaなどデザインツールへのネイティブ統合が進む クリエイティブスキルで市場価値を高める AI画像生成を使いこなせるデザイナーやマーケターへの需要は急拡大中です。クリエイティブ・IT・マーケティング系の求人を一括検索できます。dodaで求人を探す\nまとめ AI画像生成ツールは用途に応じて選ぶことが大切です。\nまず試したい → Bing Image Creator（無料） ブログ・SNS運用 → DALL-E 3（ChatGPT Plus）またはCanva AI プロクオリティ → Midjourney 商用広告 → Adobe Firefly コスト重視・大量生成 → Stable Diffusion 最初は無料ツールから始めて、用途が明確になったら有料ツールへのアップグレードを検討しましょう。\n関連記事 無料AIツールおすすめ AI画像生成・無料で使える方法 ChatGPTを仕事に活用する方法 関連ツール フリーランスの適正時給を計算 → フリーランス報酬計算ツール 月々の支出バランスを見直す → 家計簿シミュレーター クリエイター向けテンプレートをBOOTHで配布中 AI画像生成をブログやSNS運用に活かすためのプロンプトテンプレート・活用ガイドをBOOTHで公開しています。\nProductivity Works BOOTHストアはこちら AI画像生成をビジネスに活用して、コンテンツ制作の工数を大幅に削減しましょう。\n本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/posts/ai-gazou-seisei-tool-hikaku-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003eAI画像生成ツールは2026年現在、クオリティ・使いやすさ・価格のどれをとっても急速に進化しています。「どのツールを選べばいいかわからない」という方のために、\u003cstrong\u003e主要なAI画像生成ツールを用途別に徹底比較\u003c/strong\u003eします。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ai画像生成ツール-2026年比較一覧\"\u003eAI画像生成ツール 2026年比較一覧\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eツール\u003c/th\u003e\n          \u003cth\u003e月額料金\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n          \u003cth\u003e日本語プロンプト\u003c/th\u003e\n          \u003cth\u003e商用利用\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eMidjourney\u003c/td\u003e\n          \u003ctd\u003e$10〜$60\u003c/td\u003e\n          \u003ctd\u003e最高画質・アーティスティック\u003c/td\u003e\n          \u003ctd\u003e対応\u003c/td\u003e\n          \u003ctd\u003e有料プランのみ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDALL-E 3（ChatGPT内）\u003c/td\u003e\n          \u003ctd\u003eChatGPTプランに含む\u003c/td\u003e\n          \u003ctd\u003e使いやすい・日本語得意\u003c/td\u003e\n          \u003ctd\u003e得意\u003c/td\u003e\n          \u003ctd\u003e可\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eStable Diffusion\u003c/td\u003e\n          \u003ctd\u003e無料（ローカル）\u003c/td\u003e\n          \u003ctd\u003eカスタマイズ自由・無制限\u003c/td\u003e\n          \u003ctd\u003e英語が得意\u003c/td\u003e\n          \u003ctd\u003e可（モデルによる）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAdobe Firefly\u003c/td\u003e\n          \u003ctd\u003eCC契約に含む\u003c/td\u003e\n          \u003ctd\u003eAdobe製品連携・安全\u003c/td\u003e\n          \u003ctd\u003e対応\u003c/td\u003e\n          \u003ctd\u003e完全商用可\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eLeonardo.ai\u003c/td\u003e\n          \u003ctd\u003e無料〜$24\u003c/td\u003e\n          \u003ctd\u003eゲーム・イラスト系に強い\u003c/td\u003e\n          \u003ctd\u003e英語が得意\u003c/td\u003e\n          \u003ctd\u003e可\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eCanva AI（Magic Media）\u003c/td\u003e\n          \u003ctd\u003e無料〜\u003c/td\u003e\n          \u003ctd\u003e非デザイナー向け・簡単\u003c/td\u003e\n          \u003ctd\u003e対応\u003c/td\u003e\n          \u003ctd\u003e可\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eBing Image Creator\u003c/td\u003e\n          \u003ctd\u003e無料\u003c/td\u003e\n          \u003ctd\u003e完全無料・日本語対応\u003c/td\u003e\n          \u003ctd\u003e得意\u003c/td\u003e\n          \u003ctd\u003e個人利用推奨\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"各ツール詳細レビュー\"\u003e各ツール詳細レビュー\u003c/h2\u003e\n\u003ch3 id=\"1-midjourneyミッドジャーニー\"\u003e1. Midjourney（ミッドジャーニー）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e画質・芸術性でトップクラス\u003c/strong\u003eのAI画像生成ツール。プロのデザイナーや写真家も使用するクオリティです。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eメリット：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e圧倒的な画質とリアリティ\u003c/li\u003e\n\u003cli\u003e独自のアーティスティックなスタイル\u003c/li\u003e\n\u003cli\u003e活発なコミュニティでヒント・プロンプトを共有できる\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eデメリット：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDiscordを通じた操作が初心者には難しい\u003c/li\u003e\n\u003cli\u003e無料プランがない（有料のみ）\u003c/li\u003e\n\u003cli\u003e英語プロンプトの方が精度が高い\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eこんな方におすすめ：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eクリエイター・デザイナー・マーケター\u003c/li\u003e\n\u003cli\u003eSNS用のハイクオリティビジュアルが欲しい方\u003c/li\u003e\n\u003cli\u003eポスター・サムネイル・アート作品制作\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e料金：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBasicプラン：$10/月（200生成/月）\u003c/li\u003e\n\u003cli\u003eStandardプラン：$30/月（無制限ほぼ）\u003c/li\u003e\n\u003cli\u003eProプラン：$60/月（商用・高速生成）\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"2-dall-e-3chatgpt経由\"\u003e2. DALL-E 3（ChatGPT経由）\u003c/h3\u003e\n\u003cp\u003eOpenAIが開発した画像生成AIで、\u003cstrong\u003eChatGPT PlusやProから直接利用\u003c/strong\u003eできます。「〇〇な感じの画像を作って」と日本語で話しかけるだけで生成できる手軽さが魅力。\u003c/p\u003e","title":"AI画像生成おすすめツール比較2026年版【無料・有料・日本語対応】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n保険相談おすすめ2026年版｜無料相談で保険料を月1万円以上節約 「保険に入りすぎている」——日本人の多くが抱える問題です。生命保険文化センターの調査によると、日本の世帯平均保険料は月額約3万円。しかし適切な見直しを行えば、月1-2万円の節約が可能なケースが非常に多いです。\n保険相談窓口を利用すれば無料で複数社の保険を比較でき、あなたに本当に必要な保障だけを選べます。\n保険相談とは？なぜ無料なのか 保険会社の営業 保険相談窓口 取扱保険会社 自社のみ 30-50社以上 費用 無料 無料 アドバイス 自社商品を勧める 複数社から最適なものを提案 相談場所 自宅・営業所 店舗・オンライン・自宅 無料の理由: 保険相談窓口は、契約が成立すると保険会社から手数料を受け取るビジネスモデル。相談者には一切費用がかかりません。\nおすすめ保険相談窓口 TOP5 サービス 取扱保険会社数 相談形式 特徴 ほけんのぜんぶ 40社以上 オンライン・訪問 FP資格保有率100%、子育て世帯に強い マネードクター 41社 店舗・オンライン・訪問 保険＋資産運用の総合相談 保険見直しラボ 39社 訪問・オンライン 業界経験平均12.1年のベテランFP 保険市場 98社 店舗・オンライン 取扱保険会社数No.1 ほけんの窓口 47社以上 店舗（全国800以上） 店舗数No.1、対面重視の方に 各サービスの詳細 1. ほけんのぜんぶ — FP資格保有率100% 項目 内容 取扱保険会社 40社以上 相談形式 オンライン、訪問（全国対応） 相談回数 何回でも無料 特典 相談でプレゼントあり 特徴 担当者全員がFP資格保有 おすすめの人: 子育て世帯、保険を初めて検討する方\n担当者全員がFP（ファイナンシャルプランナー）資格を保有。保険だけでなく家計全体を見たアドバイスが可能。子育て世帯向けの学資保険や教育費のプランニングにも強い。\n2. マネードクター — 保険＋資産運用の総合相談 項目 内容 取扱保険会社 41社 相談形式 店舗・オンライン・訪問 相談回数 何回でも無料 特徴 保険だけでなくNISA・iDeCoも相談可能 おすすめの人: 保険と投資をまとめて見直したい方\n「お金のかかりつけ医」をコンセプトに、保険に加えて資産運用（NISA、iDeCo等）の相談も可能。保険の見直しと投資の最適化を同時に行えるのが最大の強み。\n3. 保険見直しラボ — ベテランFPによる質の高い相談 項目 内容 取扱保険会社 39社 相談形式 訪問・オンライン 相談回数 何回でも無料 特徴 業界経験平均12.1年のベテラン揃い おすすめの人: 保険のプロにじっくり相談したい方\nFPの業界経験年数が平均12.1年と業界トップクラス。経験豊富なアドバイザーが、過去の事例を踏まえた実践的なアドバイスを提供。担当者が合わない場合は何度でも変更可能。\n4. 保険市場 — 取扱保険会社数No.1 項目 内容 取扱保険会社 98社（業界最多） 相談形式 店舗・オンライン 相談回数 何回でも無料 特徴 自分でも比較検索可能なWebツール おすすめの人: 最も多くの選択肢から選びたい方\n98社は業界最多。Webサイト上で自分で保険を比較検索できるツールも充実しているため、相談前に下調べしたい方にも向いています。\n5. ほけんの窓口 — 店舗数No.1 項目 内容 取扱保険会社 47社以上 相談形式 店舗（全国800以上）・オンライン 相談回数 何回でも無料 特徴 ショッピングモール内に多数出店 おすすめの人: 対面でじっくり相談したい方\n全国800以上の店舗を持つ業界最大手。ショッピングモール内にある店舗が多く、買い物ついでに気軽に立ち寄れます。対面で資料を見ながら相談したい方に最適。\n保険見直しで節約できる金額の目安 ケース 見直し前 見直し後 月額節約 30代夫婦+子1人 月35,000円 月18,000円 -17,000円 40代独身 月15,000円 月6,000円 -9,000円 50代夫婦（子独立） 月40,000円 月15,000円 -25,000円 年間10-30万円の節約は珍しくありません。 浮いたお金を投資に回せば、資産形成がさらに加速します。\nよくある質問（FAQ） Q1. 本当に無料で相談できますか？強引な勧誘はありませんか？ はい、完全無料です。保険に加入しなくても費用はかかりません。大手の保険相談窓口には「イエローカード制度」があり、強引な勧誘があった場合は担当者を変更してもらえます。\nQ2. 保険相談は何回くらい必要ですか？ 平均2-3回。1回目：ヒアリング・現状分析、2回目：プラン提案、3回目：最終確認・契約。1回で完結するケースもあります。\nQ3. オンライン相談と対面、どちらがいい？ どちらでも同じ品質のアドバイスが受けられます。小さなお子さんがいる方や忙しい方はオンラインが便利。資料を見ながらじっくり相談したい方は対面がおすすめ。\nQ4. 今の保険を解約するべきですか？ すぐに解約する必要はありません。新しい保険の加入が完了してから、古い保険を解約するのが安全です。相談時にFPがタイミングもアドバイスしてくれます。\nQ5. どんな保険の見直しが効果的ですか？ 最も効果が大きいのは「不要な特約の削除」と「保障額の適正化」。特に死亡保障が過大になっているケースが多く、ここを適正化するだけで月数千円〜1万円の節約になります。\n資産形成を始めるなら、**楽天証券 **で口座開設。NISAもiDeCoも1つの口座で管理でき、楽天ポイントでの投資も可能です。\nまとめ 保険の見直しは年間10-30万円の節約効果がある、家計改善の最優先項目です。\nまずはほけんのぜんぶ（FP資格100%）かマネードクター（保険+投資の総合相談）でオンライン無料相談を予約しましょう。相談だけなら費用ゼロ、リスクゼロです。\n浮いた保険料をNISAで投資すれば、20年後に数百万円の差になります。\n関連記事: 新NISAの始め方 初心者向け完全ガイド2026 ※本記事は情報提供を目的としており、特定の保険商品の加入を推奨するものではありません。保険の加入・見直しはご自身の判断で行ってください。\n関連ツール BMIと適正体重をチェック → BMI計算ツール 浮いた保険料を積立投資に回すと → 複利計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター iDeCoの節税効果を計算 → iDeCoシミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター 教育費の総額を計算 → 教育費シミュレーター 関連テンプレート 家計見直し・資産形成をサポートするテンプレート：\nExcel家計簿テンプレート — 保険料を含む固定費の見える化 AI仕事術ガイド — AIで効率的に情報収集・比較検討 ","permalink":"https://productivity-works.com/ja/posts/hoken-soudan-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"保険相談おすすめ2026年版無料相談で保険料を月1万円以上節約\"\u003e保険相談おすすめ2026年版｜無料相談で保険料を月1万円以上節約\u003c/h1\u003e\n\u003cp\u003e「保険に入りすぎている」——日本人の多くが抱える問題です。生命保険文化センターの調査によると、日本の世帯平均保険料は\u003cstrong\u003e月額約3万円\u003c/strong\u003e。しかし適切な見直しを行えば、\u003cstrong\u003e月1-2万円の節約\u003c/strong\u003eが可能なケースが非常に多いです。\u003c/p\u003e\n\u003cp\u003e保険相談窓口を利用すれば\u003cstrong\u003e無料で\u003c/strong\u003e複数社の保険を比較でき、あなたに本当に必要な保障だけを選べます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"保険相談とはなぜ無料なのか\"\u003e保険相談とは？なぜ無料なのか\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e\u003c/th\u003e\n          \u003cth\u003e保険会社の営業\u003c/th\u003e\n          \u003cth\u003e保険相談窓口\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e取扱保険会社\u003c/td\u003e\n          \u003ctd\u003e自社のみ\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e30-50社以上\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e費用\u003c/td\u003e\n          \u003ctd\u003e無料\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e無料\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eアドバイス\u003c/td\u003e\n          \u003ctd\u003e自社商品を勧める\u003c/td\u003e\n          \u003ctd\u003e複数社から最適なものを提案\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e相談場所\u003c/td\u003e\n          \u003ctd\u003e自宅・営業所\u003c/td\u003e\n          \u003ctd\u003e店舗・オンライン・自宅\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e無料の理由:\u003c/strong\u003e 保険相談窓口は、契約が成立すると保険会社から手数料を受け取るビジネスモデル。相談者には一切費用がかかりません。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"おすすめ保険相談窓口-top5\"\u003eおすすめ保険相談窓口 TOP5\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eサービス\u003c/th\u003e\n          \u003cth\u003e取扱保険会社数\u003c/th\u003e\n          \u003cth\u003e相談形式\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eほけんのぜんぶ\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e40社以上\u003c/td\u003e\n          \u003ctd\u003eオンライン・訪問\u003c/td\u003e\n          \u003ctd\u003eFP資格保有率100%、子育て世帯に強い\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eマネードクター\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e41社\u003c/td\u003e\n          \u003ctd\u003e店舗・オンライン・訪問\u003c/td\u003e\n          \u003ctd\u003e保険＋資産運用の総合相談\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e保険見直しラボ\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e39社\u003c/td\u003e\n          \u003ctd\u003e訪問・オンライン\u003c/td\u003e\n          \u003ctd\u003e業界経験平均12.1年のベテランFP\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e保険市場\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e98社\u003c/td\u003e\n          \u003ctd\u003e店舗・オンライン\u003c/td\u003e\n          \u003ctd\u003e取扱保険会社数No.1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eほけんの窓口\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e47社以上\u003c/td\u003e\n          \u003ctd\u003e店舗（全国800以上）\u003c/td\u003e\n          \u003ctd\u003e店舗数No.1、対面重視の方に\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"各サービスの詳細\"\u003e各サービスの詳細\u003c/h2\u003e\n\u003ch3 id=\"1-ほけんのぜんぶ--fp資格保有率100\"\u003e1. ほけんのぜんぶ — FP資格保有率100%\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e取扱保険会社\u003c/td\u003e\n          \u003ctd\u003e40社以上\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e相談形式\u003c/td\u003e\n          \u003ctd\u003eオンライン、訪問（全国対応）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e相談回数\u003c/td\u003e\n          \u003ctd\u003e何回でも無料\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e特典\u003c/td\u003e\n          \u003ctd\u003e相談でプレゼントあり\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e特徴\u003c/td\u003e\n          \u003ctd\u003e担当者全員がFP資格保有\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e 子育て世帯、保険を初めて検討する方\u003c/p\u003e\n\u003cp\u003e担当者全員がFP（ファイナンシャルプランナー）資格を保有。保険だけでなく家計全体を見たアドバイスが可能。子育て世帯向けの学資保険や教育費のプランニングにも強い。\u003c/p\u003e\n\u003ch3 id=\"2-マネードクター--保険資産運用の総合相談\"\u003e2. マネードクター — 保険＋資産運用の総合相談\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e取扱保険会社\u003c/td\u003e\n          \u003ctd\u003e41社\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e相談形式\u003c/td\u003e\n          \u003ctd\u003e店舗・オンライン・訪問\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e相談回数\u003c/td\u003e\n          \u003ctd\u003e何回でも無料\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e特徴\u003c/td\u003e\n          \u003ctd\u003e保険だけでなくNISA・iDeCoも相談可能\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e 保険と投資をまとめて見直したい方\u003c/p\u003e","title":"保険相談 おすすめ2026年版！無料で最適な保険が見つかる窓口比較"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「確定申告が怖い」から卒業する——AI活用で年間作業を10時間に圧縮 フリーランスの確定申告は、毎年2〜3月になると「あの恐怖」が戻ってきます。\n領収書が山積みになっていて整理が追いつかない 何が経費になって、何がならないのかよくわからない freeeやマネーフォワードを入れたが使いこなせていない 青色申告に切り替えたいが手続きが複雑そうで踏み出せない この悩みを持つフリーランスの方に朗報です。2026年現在、AI（ChatGPT）と会計ソフトを正しく組み合わせることで、年間の確定申告作業を10時間以下に圧縮することが可能になっています。\n本記事では、フリーランス歴5年以上の筆者が実際に使っているAI活用ワークフローを、プロンプト付きで完全公開します。\nまず理解すべき：確定申告の「3大ボトルネック」 AIを導入する前に、何がボトルネックになっているかを整理しましょう。\nボトルネック1：領収書・レシートの整理と仕訳 毎月の経費領収書を「いつ・何に・いくら使ったか」に分類する作業。これが最も時間がかかり、かつ判断に迷うポイントです。\nボトルネック2：勘定科目の判断 「この支出は『通信費』か『消耗品費』か」「Amazonで買ったUSBハブは何費か」——勘定科目の判断で毎回検索しているのは時間の無駄です。\nボトルネック3：年末の帳簿締め・申告書の最終確認 12月〜1月にかけての帳簿締め作業、控除の計算、申告書のチェック。ここに集中してしまう人が多いですが、これは日々の積み上げ不足が原因です。\nAI×確定申告 完全ワークフロー STEP 1：領収書OCRで「紙の地獄」から脱出 使うツール： スマホカメラ + freee/マネーフォワードの領収書スキャン機能\n2026年現在、freee・マネーフォワードはいずれもAI-OCR機能を内蔵しています。スマホで領収書を撮影するだけで、日付・金額・取引先が自動入力されます。\n実践ワークフロー：\n財布に入っている領収書はその日のうちにスマホでスキャン アプリが自動で日付・金額を読み取る 勘定科目の候補をAIが提示（過去の入力パターンから学習） 確認・修正して保存（作業時間：1枚30秒） 月末の整理がゼロになる黄金ルール： 「もらったその日にスキャン、捨てない」\nSTEP 2：ChatGPTで「経費かどうか」を即判断 会計ソフトがあっても「これは経費になるのか？」の判断は自分でしなければなりません。ここにChatGPTが力を発揮します。\nプロンプト1：経費判断の基本形\n私はWebデザイナーのフリーランスです。以下の支出が確定申告で経費として認められるか、勘定科目も含えて教えてください。 【支出リスト】 - Adobe Creative Cloud年間契約：72,600円 - カフェでの作業（月2〜3回、打ち合わせも含む）：合計15,000円 - 自宅Wi-Fi料金：月6,000円（自宅兼事務所として使用、仕事用80%程度） - デザイン参考書3冊：合計8,500円 - クライアントへの手土産（お菓子）：3,500円 各項目について： 1. 経費として認められるかどうか 2. 認められる場合の勘定科目 3. 注意点・但し書き をわかりやすく教えてください。 プロンプト2：家事按分の計算\n私はフリーランスのライターで、自宅の一部を事務所として使っています。 以下の条件で家事按分の計算を手伝ってください。 【住居情報】 - 家賃：月85,000円 - 間取り：2LDK（60㎡） - 仕事専用スペース：寝室の一角（約8㎡）を仕事机・PC設置に使用 - 仕事使用時間：週5日、1日8時間程度（全体の70%） 計算方法として「面積割合」と「時間割合」どちらが有利か比較して、 経費として計上できる金額を教えてください。 確定申告での申告方法も併せて。 プロンプト3：勘定科目の一覧作成\nフリーランスのITエンジニア（業務委託）が日常的に使う支出を、 勘定科目別に整理した一覧表を作成してください。 以下の支出を含めて分類してください： - GitHub Copilot、AWS、ChatGPT Plusなどのサブスク - 技術書・Udemy・オンライン学習費 - PC・モニター・キーボードなど機器 - 交通費（クライアント訪問） - 打ち合わせ時の飲食代 - スマートフォン代（仕事7割プライベート3割） - 自宅インターネット代（仕事専用） - 名刺・封筒などの消耗品 表形式（支出の例 | 勘定科目 | 備考）でまとめてください。 STEP 3：freee・マネーフォワードをAIと連携させる実践法 freeeユーザー向け：AIアシスタント機能の活用 freeeには2025年から「freee AI アシスタント」が搭載されています。チャット形式で「今月の経費合計を教えて」「売掛金の未回収一覧を出して」と話しかけると、帳簿データを元に即座に回答します。\nよく使う質問例：\n「今年の交通費の合計を月別で見せて」 「消耗品費が前年比で増えているが、何が原因か分析して」 「未入金の請求書一覧を出して」 マネーフォワード クラウド確定申告ユーザー向け マネーフォワードでは銀行口座・クレジットカードを連携することで、取引の自動仕訳が可能です。AIが過去のパターンを学習し、勘定科目を自動提案します。\n連携推奨のカード・口座：\n仕事専用のクレジットカード（楽天ビジネスカード等）を1枚持つ 事業用の銀行口座（GMOあおぞらネット銀行等）を別に持つ これらを連携するだけで毎月の仕訳の80%が自動化できる STEP 4：ChatGPTで青色申告の準備を加速 青色申告は「複式簿記」「貸借対照表の作成」などハードルが高いと思われがちですが、AIを活用すれば理解が格段に速まります。\nプロンプト4：青色申告の基礎を学ぶ\n私はフリーランス3年目で、今年から青色申告に切り替えたいと思っています。 現在は白色申告です。 以下の点について、初心者にもわかるように教えてください： 1. 青色申告のメリット（具体的な節税額のイメージも） 2. 青色申告承認申請書の提出期限と方法 3. 複式簿記とは何か（白色申告との違い） 4. freeeを使えば複式簿記の知識がなくても青色申告できるか 5. 2026年の確定申告から青色申告にするためのスケジュール 私の状況：年収400万円（売上600万、経費200万）のWebライター プロンプト5：青色申告の帳簿チェック\n私のfreeeの帳簿データをCSVで出力したところ、以下のような仕訳が含まれています。 青色申告として問題がないか確認してください。 【仕訳データ（一部抜粋）】 2026/01/15 売掛金 300,000 / 売上高 300,000（A社1月分請求） 2026/01/20 現金 300,000 / 売掛金 300,000（A社入金確認） 2026/01/25 消耗品費 8,800 / 現金 8,800（Amazonでキーボード購入） 2026/01/31 通信費 6,000 / 普通預金 6,000（インターネット代） 問題点や改善すべき点があれば指摘し、正しい仕訳の書き方を教えてください。 STEP 5：年末・確定申告直前の「AIチェックリスト」活用 プロンプト6：申告漏れ防止チェックリスト\nフリーランス（業務委託・Webデザイナー）の確定申告で見落としやすい 控除・経費の申告漏れを防ぐチェックリストを作成してください。 私の状況： - 年収：約500万円 - 青色申告（65万円控除） - 小規模企業共済加入（月70,000円） - iDeCo加入（月23,000円） - 生命保険・医療保険あり - 住宅ローンなし - 扶養家族なし（独身） 「見落としやすいのにお得な控除」を優先的に教えてください。 プロンプト7：消費税・インボイスの確認\n私はインボイス登録事業者（適格請求書発行事業者）です。 2026年の確定申告（消費税申告含む）で確認すべきポイントを教えてください。 状況： - 年間売上：480万円（消費税込み528万円） - 仕入れ税額控除の対象となる経費：約150万円 - 簡易課税制度を使うか本則課税を使うか迷っている（第5種事業・サービス業） どちらが有利か、具体的な数字で比較してください。 よくある「ChatGPTへの税務相談」での注意点 ChatGPTは税務に関する一般的な情報を提供することはできますが、個別具体的な税務判断の法的な保証はできません。\n以下のケースは必ず税理士に相談してください：\n年収が1,000万円を超えた（消費税の課税事業者判定） 法人化を検討している 不動産収入など複数の所得がある 家族を青色事業専従者として申告したい 過去の申告に誤りがあった（修正申告・更正の請求） ChatGPTは「税務の勉強と準備」に使い、最終判断と申告の責任は人間（税理士または自分）が持つことが大原則です。\n月次ルーティン：AI活用で確定申告を「年1回の地獄」から解放する 確定申告を楽にする最大のコツは「毎月少しずつやること」です。\nタイミング 作業内容 所要時間 毎日 領収書をスマホでスキャン 1〜2分 毎週 銀行・カード明細の確認・仕訳確認 15分 毎月末 freee/マネーフォワードの月次締め、売掛金確認 30分 四半期 ChatGPTで経費見直し・節税チェック 1時間 1〜2月 年次締め・控除計算・申告書作成 3〜5時間 このルーティンを守れば、1年間の合計作業時間は10〜15時間に収まります。\nまとめ：AIは「確定申告の恐怖」をなくす最強のパートナー 2026年のフリーランスにとって、確定申告は「年に一度の地獄」である必要はありません。\nスマホOCR で領収書管理をゼロ摩擦に ChatGPT で経費判断・勘定科目の迷いをゼロに freee /マネーフォワード連携 で仕訳の80%を自動化 月次ルーティン で年末の追い込みをなくす これらを組み合わせれば、確定申告は「1〜2月に数時間かけて完成するルーティン作業」になります。\nまず今月から、領収書をもらったその日にスキャンすることだけ始めてみてください。それだけで来年の確定申告が大きく変わります。\n本記事の税務情報は2026年5月時点のものです。税制は毎年変更される可能性があります。個別の税務判断は税理士等の専門家にご相談ください。\n関連ツール 副業の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター iDeCoの節税効果を計算 → iDeCoシミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連記事 副業フリーランスがfreeeで青色申告65万控除を取る方法 freee vs マネーフォワード：副業向け会計ソフト比較 NotionでフリーランスのKPI管理と確定申告準備 フリーランス確定申告のやり方：完全ガイド 副業フリーランスの確定申告のやり方2026 関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 ","permalink":"https://productivity-works.com/ja/posts/ai-kakuteishinkoku-freelance-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"確定申告が怖いから卒業するai活用で年間作業を10時間に圧縮\"\u003e「確定申告が怖い」から卒業する——AI活用で年間作業を10時間に圧縮\u003c/h2\u003e\n\u003cp\u003eフリーランスの確定申告は、毎年2〜3月になると「あの恐怖」が戻ってきます。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e領収書が山積みになっていて整理が追いつかない\u003c/li\u003e\n\u003cli\u003e何が経費になって、何がならないのかよくわからない\u003c/li\u003e\n\u003cli\u003efreeeやマネーフォワードを入れたが使いこなせていない\u003c/li\u003e\n\u003cli\u003e青色申告に切り替えたいが手続きが複雑そうで踏み出せない\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eこの悩みを持つフリーランスの方に朗報です。2026年現在、AI（ChatGPT）と会計ソフトを正しく組み合わせることで、\u003cstrong\u003e年間の確定申告作業を10時間以下に圧縮\u003c/strong\u003eすることが可能になっています。\u003c/p\u003e\n\u003cp\u003e本記事では、フリーランス歴5年以上の筆者が実際に使っているAI活用ワークフローを、プロンプト付きで完全公開します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"まず理解すべき確定申告の3大ボトルネック\"\u003eまず理解すべき：確定申告の「3大ボトルネック」\u003c/h2\u003e\n\u003cp\u003eAIを導入する前に、何がボトルネックになっているかを整理しましょう。\u003c/p\u003e\n\u003ch3 id=\"ボトルネック1領収書レシートの整理と仕訳\"\u003eボトルネック1：領収書・レシートの整理と仕訳\u003c/h3\u003e\n\u003cp\u003e毎月の経費領収書を「いつ・何に・いくら使ったか」に分類する作業。これが最も時間がかかり、かつ判断に迷うポイントです。\u003c/p\u003e\n\u003ch3 id=\"ボトルネック2勘定科目の判断\"\u003eボトルネック2：勘定科目の判断\u003c/h3\u003e\n\u003cp\u003e「この支出は『通信費』か『消耗品費』か」「Amazonで買ったUSBハブは何費か」——勘定科目の判断で毎回検索しているのは時間の無駄です。\u003c/p\u003e\n\u003ch3 id=\"ボトルネック3年末の帳簿締め申告書の最終確認\"\u003eボトルネック3：年末の帳簿締め・申告書の最終確認\u003c/h3\u003e\n\u003cp\u003e12月〜1月にかけての帳簿締め作業、控除の計算、申告書のチェック。ここに集中してしまう人が多いですが、これは日々の積み上げ不足が原因です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ai確定申告-完全ワークフロー\"\u003eAI×確定申告 完全ワークフロー\u003c/h2\u003e\n\u003ch3 id=\"step-1領収書ocrで紙の地獄から脱出\"\u003eSTEP 1：領収書OCRで「紙の地獄」から脱出\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e使うツール：\u003c/strong\u003e スマホカメラ + freee/マネーフォワードの領収書スキャン機能\u003c/p\u003e\n\u003cp\u003e2026年現在、freee・マネーフォワードはいずれもAI-OCR機能を内蔵しています。スマホで領収書を撮影するだけで、日付・金額・取引先が自動入力されます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e実践ワークフロー：\u003c/strong\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e財布に入っている領収書は\u003cstrong\u003eその日のうちに\u003c/strong\u003eスマホでスキャン\u003c/li\u003e\n\u003cli\u003eアプリが自動で日付・金額を読み取る\u003c/li\u003e\n\u003cli\u003e勘定科目の候補をAIが提示（過去の入力パターンから学習）\u003c/li\u003e\n\u003cli\u003e確認・修正して保存（作業時間：1枚30秒）\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003e月末の整理がゼロになる黄金ルール：\u003c/strong\u003e 「もらったその日にスキャン、捨てない」\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"step-2chatgptで経費かどうかを即判断\"\u003eSTEP 2：ChatGPTで「経費かどうか」を即判断\u003c/h3\u003e\n\u003cp\u003e会計ソフトがあっても「これは経費になるのか？」の判断は自分でしなければなりません。ここにChatGPTが力を発揮します。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eプロンプト1：経費判断の基本形\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e私はWebデザイナーのフリーランスです。以下の支出が確定申告で経費として認められるか、勘定科目も含えて教えてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【支出リスト】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e Adobe Creative Cloud年間契約：72,600円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e カフェでの作業（月2〜3回、打ち合わせも含む）：合計15,000円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 自宅Wi-Fi料金：月6,000円（自宅兼事務所として使用、仕事用80%程度）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e デザイン参考書3冊：合計8,500円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e クライアントへの手土産（お菓子）：3,500円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e各項目について：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e 経費として認められるかどうか\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e 認められる場合の勘定科目\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 注意点・但し書き\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eをわかりやすく教えてください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003eプロンプト2：家事按分の計算\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e私はフリーランスのライターで、自宅の一部を事務所として使っています。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の条件で家事按分の計算を手伝ってください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【住居情報】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 家賃：月85,000円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 間取り：2LDK（60㎡）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 仕事専用スペース：寝室の一角（約8㎡）を仕事机・PC設置に使用\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 仕事使用時間：週5日、1日8時間程度（全体の70%）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e計算方法として「面積割合」と「時間割合」どちらが有利か比較して、\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e経費として計上できる金額を教えてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e確定申告での申告方法も併せて。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003eプロンプト3：勘定科目の一覧作成\u003c/strong\u003e\u003c/p\u003e","title":"AI×確定申告 フリーランス完全自動化ガイド2026"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nレンタルサーバーおすすめ2026年版｜WordPress・ブログに最適なサーバー選び ブログやWebサイトを始めるなら、レンタルサーバー選びが最初の重要な決断です。サーバーの性能はサイトの表示速度に直結し、表示が1秒遅くなるとPV（ページビュー）が11%減少するというデータもあります。\n2026年時点で本当におすすめできるレンタルサーバーを、用途別に比較します。\nレンタルサーバーを選ぶ5つの基準 基準 重要な理由 表示速度 SEOの重要指標。遅いとGoogleの順位が下がる 月額料金 安さだけで選ぶと後悔する。コスパ重視 WordPress対応 簡単インストール機能があるか サポート体制 初心者はトラブル時の対応が重要 無料ドメイン サーバー契約で独自ドメインが無料になるか おすすめレンタルサーバー TOP5 サーバー 月額料金 速度 WordPress 無料ドメイン 特徴 エックスサーバー 990円〜 最速クラス 簡単インストール 2つ無料 国内シェアNo.1 ConoHa WING 678円〜 最速クラス 簡単セットアップ 2つ無料 最安で高速 ロリポップ! 220円〜 普通〜速い 簡単インストール なし とにかく安い mixhost 968円〜 速い 自動インストール 1つ無料 アダルト対応 カラフルボックス 528円〜 速い 自動インストール 1つ無料 柔軟なプラン変更 ※月額料金は12ヶ月以上契約時。2026年時点。\n各サーバーの詳細 1. エックスサーバー — 国内シェアNo.1の定番 項目 内容 月額 990円〜（スタンダードプラン） ディスク SSD 300GB 転送量 無制限 WordPress 簡単インストール、WordPressクイックスタート サポート 電話・メール・チャット 無料ドメイン 2つ永久無料 おすすめの人: 迷ったらこれ。初心者から上級者まで\n国内レンタルサーバーシェアNo.1。250万以上のサイトが稼働する実績と安定性。「WordPressクイックスタート」機能で、サーバー契約・ドメイン取得・WordPress設置・SSL設定が10分で完了します。\n2. ConoHa WING — 最安＆高速のベストバランス 項目 内容 月額 678円〜（WINGパック） ディスク SSD 300GB 転送量 無制限 WordPress かんたんセットアップ サポート 電話・メール・チャット 無料ドメイン 2つ永久無料 おすすめの人: 料金を抑えつつ速度も妥協したくない方\nGMOインターネットグループ運営。エックスサーバーと同等の速度でありながら、月額678円〜と約300円安い。国内最速をうたっており、実測でもトップクラスの表示速度。\n3. ロリポップ! — とにかく安い 項目 内容 月額 220円〜（ライトプラン）/ 550円〜（ハイスピード） ディスク SSD 200-700GB WordPress ハイスピードプラン以上で高速WordPress サポート メール・チャット（電話はスタンダード以上） 無料ドメイン ハイスピード以上で無料 おすすめの人: 最小コストで始めたい方\n月220円から始められる圧倒的な安さ。ただしWordPressで本格的なブログを運営するなら、ハイスピードプラン（月550円〜）以上を推奨。LiteSpeed搭載で速度も十分です。\n4. mixhost — アダルトサイト対応 項目 内容 月額 968円〜 ディスク SSD 無制限 WordPress 自動インストール 特徴 アダルトコンテンツOK、LiteSpeed搭載 おすすめの人: アダルトサイト運営者、ディスク容量無制限が必要な方\n大手レンタルサーバーでアダルトコンテンツが許可されている数少ないサービス。LiteSpeed搭載で速度も良好。ディスク容量無制限はコンテンツ量が多いサイトに便利。\n5. カラフルボックス — 柔軟なプラン変更 項目 内容 月額 528円〜 ディスク SSD 150-500GB WordPress 自動インストール 特徴 プランの即時アップ/ダウングレードが可能 おすすめの人: 成長に合わせてプランを柔軟に変えたい方\n他社では難しいプランのダウングレード（上位→下位への変更）が簡単にできるのが最大の特徴。まずは安いプランで始めて、アクセスが増えたらアップグレードする運用が可能。\n初心者のWordPressブログ開設手順 レンタルサーバー契約（エックスサーバーまたはConoHa WING推奨） 独自ドメイン取得（サーバー契約時に無料で取得可能） WordPressインストール（クイックスタートで10分） SSL設定（HTTPS化、多くのサーバーで自動） テーマ選択（無料テーマCocoonがおすすめ） 最初の記事を書く サーバー契約からブログ公開まで最短30分。\nよくある質問（FAQ） Q1. エックスサーバーとConoHa WING、どちらがいい？ 性能は同等。安さ重視ならConoHa WING（月678円〜）、実績・安定性重視ならエックスサーバー（月990円〜）。どちらを選んでも後悔しません。\nQ2. 無料のレンタルサーバーではダメですか？ 趣味のブログならOKですが、収益化を目指すなら有料サーバー一択。無料サーバーは広告が表示される、独自ドメインが使えない、速度が遅い、突然サービス終了のリスクがあります。\nQ3. 月額料金以外にかかる費用は？ 独自ドメイン（年1,000-2,000円程度、サーバーセットで無料の場合あり）。WordPressテーマ（無料テーマでOK、有料なら10,000-20,000円の買い切り）。合計でも年間1-2万円程度です。\nQ4. サーバーの引越しは簡単ですか？ 各社「WordPress簡単移行」機能を提供しており、以前より格段に簡単になっています。ただし手間はかかるので、最初から良いサーバーを選ぶことを推奨。\nQ5. ブログで稼ぐにはどれくらいかかりますか？ 一般的に6ヶ月〜1年で月5,000円〜1万円、1-2年で月5-10万円が目安。ただし個人差が大きく、ジャンル選びとSEO対策が重要です。\nまとめ レンタルサーバー選びのポイントは速度・料金・WordPress対応の3つ。\n迷ったら → エックスサーバー（シェアNo.1の安心感） 安さ重視 → ConoHa WING（月678円〜で最速クラス） 最小コスト → ロリポップ! ハイスピード（月550円〜） サーバー代は月700-1,000円。ブログが軌道に乗れば、1記事のアフィリエイト収入でサーバー代の数十倍を回収できます。\n独自ドメインの取得は**お名前.com **が最安水準でおすすめ。サーバー契約と同時にドメインを取得すれば、すぐにブログを始められます。\n関連記事: 副業 おすすめ 在宅でスキルなしから始める方法 ※本記事は情報提供を目的としており、特定のサービスの契約を推奨するものではありません。料金・スペックは変更される場合があります。\n関連ツール 色をHEX・RGB・HSLで変換 → カラーピッカー ブログ副業収入をもとにフリーランスの適正時給を計算 → フリーランス報酬計算ツール サーバー代など固定費を家計全体で管理する → 家計簿シミュレーター 関連テンプレート ブログ運営・副業をサポートするテンプレート：\nChatGPTプロンプト集100選 — ブログ記事作成・SEO対策プロンプト含む AI仕事術ガイド — AIでブログ運営を効率化 ","permalink":"https://productivity-works.com/ja/posts/rental-server-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"レンタルサーバーおすすめ2026年版wordpressブログに最適なサーバー選び\"\u003eレンタルサーバーおすすめ2026年版｜WordPress・ブログに最適なサーバー選び\u003c/h1\u003e\n\u003cp\u003eブログやWebサイトを始めるなら、レンタルサーバー選びが最初の重要な決断です。サーバーの性能はサイトの表示速度に直結し、\u003cstrong\u003e表示が1秒遅くなるとPV（ページビュー）が11%減少\u003c/strong\u003eするというデータもあります。\u003c/p\u003e\n\u003cp\u003e2026年時点で本当におすすめできるレンタルサーバーを、用途別に比較します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"レンタルサーバーを選ぶ5つの基準\"\u003eレンタルサーバーを選ぶ5つの基準\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e基準\u003c/th\u003e\n          \u003cth\u003e重要な理由\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e表示速度\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eSEOの重要指標。遅いとGoogleの順位が下がる\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e月額料金\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e安さだけで選ぶと後悔する。コスパ重視\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eWordPress対応\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e簡単インストール機能があるか\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eサポート体制\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e初心者はトラブル時の対応が重要\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e無料ドメイン\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eサーバー契約で独自ドメインが無料になるか\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"おすすめレンタルサーバー-top5\"\u003eおすすめレンタルサーバー TOP5\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eサーバー\u003c/th\u003e\n          \u003cth\u003e月額料金\u003c/th\u003e\n          \u003cth\u003e速度\u003c/th\u003e\n          \u003cth\u003eWordPress\u003c/th\u003e\n          \u003cth\u003e無料ドメイン\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eエックスサーバー\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e990円〜\u003c/td\u003e\n          \u003ctd\u003e最速クラス\u003c/td\u003e\n          \u003ctd\u003e簡単インストール\u003c/td\u003e\n          \u003ctd\u003e2つ無料\u003c/td\u003e\n          \u003ctd\u003e国内シェアNo.1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eConoHa WING\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e678円〜\u003c/td\u003e\n          \u003ctd\u003e最速クラス\u003c/td\u003e\n          \u003ctd\u003e簡単セットアップ\u003c/td\u003e\n          \u003ctd\u003e2つ無料\u003c/td\u003e\n          \u003ctd\u003e最安で高速\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eロリポップ!\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e220円〜\u003c/td\u003e\n          \u003ctd\u003e普通〜速い\u003c/td\u003e\n          \u003ctd\u003e簡単インストール\u003c/td\u003e\n          \u003ctd\u003eなし\u003c/td\u003e\n          \u003ctd\u003eとにかく安い\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003emixhost\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e968円〜\u003c/td\u003e\n          \u003ctd\u003e速い\u003c/td\u003e\n          \u003ctd\u003e自動インストール\u003c/td\u003e\n          \u003ctd\u003e1つ無料\u003c/td\u003e\n          \u003ctd\u003eアダルト対応\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eカラフルボックス\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e528円〜\u003c/td\u003e\n          \u003ctd\u003e速い\u003c/td\u003e\n          \u003ctd\u003e自動インストール\u003c/td\u003e\n          \u003ctd\u003e1つ無料\u003c/td\u003e\n          \u003ctd\u003e柔軟なプラン変更\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※月額料金は12ヶ月以上契約時。2026年時点。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"各サーバーの詳細\"\u003e各サーバーの詳細\u003c/h2\u003e\n\u003ch3 id=\"1-エックスサーバー--国内シェアno1の定番\"\u003e1. エックスサーバー — 国内シェアNo.1の定番\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月額\u003c/td\u003e\n          \u003ctd\u003e990円〜（スタンダードプラン）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eディスク\u003c/td\u003e\n          \u003ctd\u003eSSD 300GB\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e転送量\u003c/td\u003e\n          \u003ctd\u003e無制限\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eWordPress\u003c/td\u003e\n          \u003ctd\u003e簡単インストール、WordPressクイックスタート\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eサポート\u003c/td\u003e\n          \u003ctd\u003e電話・メール・チャット\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e無料ドメイン\u003c/td\u003e\n          \u003ctd\u003e2つ永久無料\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e 迷ったらこれ。初心者から上級者まで\u003c/p\u003e","title":"レンタルサーバー おすすめ2026年版！ブログ・サイト制作向け比較"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n会計ソフトおすすめ2026年版｜確定申告を最速で終わらせる 個人事業主・フリーランスにとって確定申告は避けて通れない業務です。しかし会計ソフトを使えば、日々の帳簿付けから確定申告書の作成までほぼ自動化できます。\n2026年はインボイス制度も定着し、適格請求書の管理機能がますます重要に。この記事では個人事業主・フリーランスに本当におすすめの会計ソフトを比較します。\n会計ソフトを選ぶ基準 基準 重要な理由 自動仕訳 銀行・クレカ連携で仕訳を自動化できるか 確定申告対応 青色申告65万円控除に対応しているか インボイス対応 適格請求書の作成・管理が可能か 料金 月額費用と機能のバランス 使いやすさ 簿記知識がなくても使えるか おすすめ会計ソフト TOP3 比較 会計ソフト 月額料金 自動仕訳 確定申告 インボイス 特徴 freee 1,480円〜 AI自動仕訳 青色申告対応 対応 簿記知識ゼロでもOK マネーフォワードクラウド 980円〜 自動仕訳 青色申告対応 対応 他サービスとの連携が強い やよいの青色申告オンライン 実質0円〜 自動仕訳 青色申告対応 対応 1年間無料、シェアNo.1 各ソフトの詳細 1. freee — 簿記知識ゼロで確定申告 項目 内容 料金 スターター1,480円/月、スタンダード2,680円/月 自動仕訳 AIが取引内容を学習し自動で仕訳 確定申告 ○×形式の質問に答えるだけで申告書完成 インボイス 適格請求書の作成・管理・消費税計算 連携 銀行3,200以上、クレカ、ECサイト おすすめの人: 簿記の知識が全くない方、初めての確定申告\nfreeeの最大の特徴は簿記の知識が不要なこと。「家賃を払った」「売上が入金された」などの日常的な表現で取引を入力でき、freeeが自動で仕訳してくれます。確定申告も○×形式の質問に答えるだけで完成。\nfreee会計を無料で試す 2. マネーフォワードクラウド確定申告 — 連携力No.1 項目 内容 料金 パーソナルミニ980円/月、パーソナル1,280円/月 自動仕訳 銀行・クレカ連携で自動取得・仕訳 確定申告 青色申告65万円控除対応 インボイス マネーフォワードクラウド請求書と連携 連携 銀行2,500以上、クレカ、電子マネー おすすめの人: マネーフォワードMEを使っている方、複数サービスを連携したい方\nマネーフォワードクラウド確定申告・請求書・経費・給与などが一つのアカウントで管理できる連携力が強み。家計簿アプリ「マネーフォワードME」のデータもそのまま活用可能。\n3. やよいの青色申告オンライン — 1年間無料でシェアNo.1 項目 内容 料金 セルフ実質0円（1年目無料）、ベーシック9,680円/年 自動仕訳 スマート取引取込で自動仕訳 確定申告 青色申告65万円控除対応、e-Tax連携 インボイス 適格請求書対応 連携 銀行・クレカ連携、レシート読取 おすすめの人: とにかく安く始めたい方、従来型の帳簿に慣れている方\n1年目は完全無料（セルフプラン） というのが最大の強み。弥生は会計ソフト20年以上の老舗で、税理士の利用率も高い。操作は従来型の帳簿に近いUIなので、簿記の基礎知識がある方には馴染みやすい。\n3社の違いを一言で ソフト 一言 freee 「簿記を知らなくても大丈夫」 マネーフォワード 「他サービスとの連携が最強」 やよい 「1年無料で老舗の安心感」 会計ソフトの始め方 無料プランまたは無料体験で試す（3社とも無料で始められる） 銀行口座・クレジットカードを連携 過去の取引が自動取込みされる AIの仕訳提案を確認・修正 確定申告時期に申告書を自動作成 まずは3社の無料プランを試して、自分に合うものを選ぶのがベスト。\nよくある質問（FAQ） Q1. 白色申告と青色申告、どちらがいい？ 年間収入が48万円を超えるなら青色申告一択。最大65万円の控除が受けられ、税金が大幅に減ります。3社とも青色申告に対応しています。\nQ2. 税理士は必要ですか？ 年間売上が500万円以下なら会計ソフトだけで十分対応可能。500万円を超えたら税理士への相談を検討しましょう。\nQ3. スマホだけで確定申告できますか？ freeeとマネーフォワードはスマホアプリだけで確定申告が完結可能。レシート撮影→自動仕訳→申告書作成→e-Tax提出まですべてスマホで完了します。\nQ4. インボイス制度への対応は？ 3社とも適格請求書の作成・管理・消費税計算に対応。インボイス登録事業者なら、請求書作成時に自動で適格請求書の要件を満たしたフォーマットで出力されます。\nQ5. 途中で他社に乗り換えられますか？ はい。各社ともデータのインポート/エクスポート機能があり、乗り換えは可能です。ただし年度途中よりも年度の区切りでの乗り換えが推奨されます。\nまとめ あなたのタイプ おすすめ 簿記知識ゼロ freee（○×形式で確定申告） 連携重視 マネーフォワード（家計簿アプリ連携） とにかく安く やよい（1年無料） 3社とも無料で試せるので、まずは登録して使い比べるのが確実。確定申告は毎年必ず来るので、早めに会計ソフトに慣れておくことが大切です。\n関連記事: 副業の確定申告やり方2026年版 関連記事: フリーランスエンジニアの年収相場 ※本記事は情報提供を目的としており、特定のソフトウェアの利用を推奨するものではありません。料金・機能は変更される場合があります。\n関連ツール フリーランスの税金を計算 → 副業税金計算シミュレーター 手取り額をシミュレーション → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 借金の返済計画を立てる → 借金返済シミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター 関連テンプレート 確定申告・経理をサポートするテンプレート：\nExcel家計簿テンプレート — 日々の経費記録を簡単に AI仕事術ガイド — AIで経理作業を効率化 ","permalink":"https://productivity-works.com/ja/posts/kaikei-soft-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"会計ソフトおすすめ2026年版確定申告を最速で終わらせる\"\u003e会計ソフトおすすめ2026年版｜確定申告を最速で終わらせる\u003c/h1\u003e\n\u003cp\u003e個人事業主・フリーランスにとって\u003cstrong\u003e確定申告は避けて通れない業務\u003c/strong\u003eです。しかし会計ソフトを使えば、日々の帳簿付けから確定申告書の作成まで\u003cstrong\u003eほぼ自動化\u003c/strong\u003eできます。\u003c/p\u003e\n\u003cp\u003e2026年はインボイス制度も定着し、適格請求書の管理機能がますます重要に。この記事では個人事業主・フリーランスに本当におすすめの会計ソフトを比較します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"会計ソフトを選ぶ基準\"\u003e会計ソフトを選ぶ基準\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e基準\u003c/th\u003e\n          \u003cth\u003e重要な理由\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e自動仕訳\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e銀行・クレカ連携で仕訳を自動化できるか\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e確定申告対応\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e青色申告65万円控除に対応しているか\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eインボイス対応\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e適格請求書の作成・管理が可能か\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e料金\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e月額費用と機能のバランス\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e使いやすさ\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e簿記知識がなくても使えるか\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"おすすめ会計ソフト-top3-比較\"\u003eおすすめ会計ソフト TOP3 比較\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e会計ソフト\u003c/th\u003e\n          \u003cth\u003e月額料金\u003c/th\u003e\n          \u003cth\u003e自動仕訳\u003c/th\u003e\n          \u003cth\u003e確定申告\u003c/th\u003e\n          \u003cth\u003eインボイス\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003efreee\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e1,480円〜\u003c/td\u003e\n          \u003ctd\u003eAI自動仕訳\u003c/td\u003e\n          \u003ctd\u003e青色申告対応\u003c/td\u003e\n          \u003ctd\u003e対応\u003c/td\u003e\n          \u003ctd\u003e簿記知識ゼロでもOK\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eマネーフォワードクラウド\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e980円〜\u003c/td\u003e\n          \u003ctd\u003e自動仕訳\u003c/td\u003e\n          \u003ctd\u003e青色申告対応\u003c/td\u003e\n          \u003ctd\u003e対応\u003c/td\u003e\n          \u003ctd\u003e他サービスとの連携が強い\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eやよいの青色申告オンライン\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e実質0円〜\u003c/td\u003e\n          \u003ctd\u003e自動仕訳\u003c/td\u003e\n          \u003ctd\u003e青色申告対応\u003c/td\u003e\n          \u003ctd\u003e対応\u003c/td\u003e\n          \u003ctd\u003e1年間無料、シェアNo.1\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"各ソフトの詳細\"\u003e各ソフトの詳細\u003c/h2\u003e\n\u003ch3 id=\"1-freee--簿記知識ゼロで確定申告\"\u003e1. freee — 簿記知識ゼロで確定申告\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e料金\u003c/td\u003e\n          \u003ctd\u003eスターター1,480円/月、スタンダード2,680円/月\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e自動仕訳\u003c/td\u003e\n          \u003ctd\u003eAIが取引内容を学習し自動で仕訳\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e確定申告\u003c/td\u003e\n          \u003ctd\u003e○×形式の質問に答えるだけで申告書完成\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eインボイス\u003c/td\u003e\n          \u003ctd\u003e適格請求書の作成・管理・消費税計算\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e連携\u003c/td\u003e\n          \u003ctd\u003e銀行3,200以上、クレカ、ECサイト\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e 簿記の知識が全くない方、初めての確定申告\u003c/p\u003e\n\u003cp\u003efreeeの最大の特徴は\u003cstrong\u003e簿記の知識が不要\u003c/strong\u003eなこと。「家賃を払った」「売上が入金された」などの日常的な表現で取引を入力でき、freeeが自動で仕訳してくれます。確定申告も○×形式の質問に答えるだけで完成。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計を無料で試す\u003c/a\u003e\n\u003c/strong\u003e\u003c/p\u003e\n\u003ch3 id=\"2-マネーフォワードクラウド確定申告--連携力no1\"\u003e2. マネーフォワードクラウド確定申告 — 連携力No.1\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e料金\u003c/td\u003e\n          \u003ctd\u003eパーソナルミニ980円/月、パーソナル1,280円/月\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e自動仕訳\u003c/td\u003e\n          \u003ctd\u003e銀行・クレカ連携で自動取得・仕訳\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e確定申告\u003c/td\u003e\n          \u003ctd\u003e青色申告65万円控除対応\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eインボイス\u003c/td\u003e\n          \u003ctd\u003eマネーフォワードクラウド請求書と連携\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e連携\u003c/td\u003e\n          \u003ctd\u003e銀行2,500以上、クレカ、電子マネー\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e マネーフォワードMEを使っている方、複数サービスを連携したい方\u003c/p\u003e","title":"会計ソフト おすすめ2026年版！個人事業主・フリーランス向け比較"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「長い記事を読む時間がない」「会議の議事録を素早くまとめたい」「英語の論文を日本語で要約したい」——AI要約ツールを使えばこれらすべてが数十秒で解決できます。\n2026年現在、AI要約ツールは急速に進化・普及しており、無料で使えるものも増えました。本記事では用途別におすすめのAI要約ツールを厳選してご紹介します。\nAI要約ツールを使うべき理由 情報過多時代の「時短」インフラ 現代人が1日に接触する情報量は、江戸時代の人の一生分と言われます。ニュース・SNS・メール・報告書・動画……情報の波に溺れず要点だけを掴む力が、仕事の生産性を左右します。\nAI要約ツールを活用することで：\n100ページのPDFを3分で要約 1時間のYouTube動画を箇条書き5点に圧縮 英語の論文を日本語で要点整理 会議の文字起こしから議事録を自動生成 これらが現実のものとなっています。\nAI要約ツールの選び方 ツールを選ぶ際のチェックポイントを整理しました。\nチェック項目 内容 対応フォーマット テキスト・PDF・URL・YouTube・音声など何に対応しているか 日本語対応 日本語の入出力が正確か 無料枠の広さ 無料でどこまで使えるか 要約の質 原文の意図を正確に保持しているか セキュリティ 機密情報を扱う場合のデータポリシー インターフェース ブラウザ・アプリ・拡張機能など使いやすさ 【用途別】おすすめAI要約ツール10選 カテゴリ①：Webページ・記事の要約 1. ChatGPT（OpenAI） 料金：無料（GPT-4oは無料枠あり）/ Plus $20/月\n最もメジャーなAIツール。URLを貼り付けるか、本文をコピーして「要約してください」と指示するだけで高品質な要約が得られます。\n強み：高い日本語対応力、柔軟な指示（「箇条書きで」「小学生にわかるように」など） 弱み：有料版で有料枠に制限あり、長文PDFは有料版が必要な場合も 活用例：「以下の記事を300字以内で要約し、重要なポイントを3つ挙げてください」\n2. Claude（Anthropic） 料金：無料（claude.ai） / Pro $20/月\n200,000トークンという業界最大級のコンテキストウィンドウを持ち、長文ドキュメントの要約が特に得意です。日本語の要約品質も高水準。\n強み：長い文書（小説1冊分）も一気に要約可能、安全性への配慮が高い 弱み：画像認識は有料版のみ（2026年時点） 活用例：長いレポートや論文全体を貼り付けて要約\n3. Perplexity AI 料金：無料 / Pro $20/月\nWebを検索しながらリアルタイムで要約・回答するAI。最新ニュースや時事情報の要約に強い。\n強み：情報ソースへのリンクが表示される、最新情報に強い 弱み：無料版は日次利用制限あり カテゴリ②：YouTube動画の要約 4. YouTube Summary with ChatGPT（Chrome拡張機能） 料金：無料\nYouTubeページに「Transcript \u0026amp; Summary」ボタンを追加するChrome拡張機能。ボタン1つで字幕テキストを取得し、ChatGPTへ送って要約できます。\n強み：YouTube視聴中にワンクリックで要約、日本語動画にも対応 弱み：字幕がない動画では使えない、別途ChatGPTアカウントが必要 5. Eightify 料金：無料（月15本まで） / 有料プランあり\nYouTubeの動画を自動的にキーポイント付きで要約するサービス。タイムスタンプ付きで「動画のどの部分か」もわかる。\n強み：UIが洗練されている、タイムスタンプで動画本体へジャンプ可 弱み：無料枠は月15本と少なめ 6. NoteGPT 料金：無料プランあり\nYouTube・Twitter/X・Webページなどのコンテンツを要約できるオールインワンツール。Chrome拡張機能も提供。\n強み：多様なコンテンツタイプに対応、ノート保存機能あり カテゴリ③：PDFや文書の要約 7. Adobe Acrobat AI Assistant 料金：Acrobat Standardに含まれる（有料）/ 単体プランあり\nAdobe公式のAI機能。PDFに対して質問したり、要約を依頼できます。\n強み：Adobe製品との親和性が高い、企業利用に安心感 弱み：有料サービス 8. PDF.ai 料金：無料（月3PDFまで） / 有料プランあり\nPDFをアップロードしてチャット形式で質問・要約できるサービス。契約書・論文・マニュアルの解析に便利。\n強み：直感的なUI、複数ページのPDFに対応 弱み：無料枠は月3件まで 活用例：賃貸契約書や保険約款のポイントを抽出してもらう\nカテゴリ④：会議・音声の要約 9. Notta（ノッタ） 料金：無料（月120分まで） / 有料プランあり（月額約1,000円〜）\n日本語に特化した文字起こし・要約サービス。会議録音・インタビュー・講義の音声をAIが文字に起こし、さらに要約してくれます。\n強み：日本語認識精度が非常に高い、Zoom・Google Meet・Teamsと連携可 弱み：無料枠は月120分まで おすすめ対象：会議が多いビジネスパーソン、インタビューをよくするライター\n10. tl;dv（テルディーブイ） 料金：無料プランあり（Zoom・Meetの録画・要約）/ 有料プランあり\nZoomやGoogle Meetの会議を自動録画・文字起こし・要約するサービス。会議の要点とアクションアイテムを自動抽出。\n強み：会議後に自動でサマリーを生成・共有、無料でも十分使える 弱み：英語UIが中心（日本語対応は限定的） ツール比較まとめ表 ツール 主な用途 無料枠 日本語対応 おすすめ度 ChatGPT テキスト全般 あり（制限あり） ★★★★★ ★★★★★ Claude 長文ドキュメント あり ★★★★★ ★★★★★ Perplexity AI Web記事・最新情報 あり ★★★★☆ ★★★★☆ YouTube Summary（拡張） YouTube動画 無料 ★★★★☆ ★★★★☆ Eightify YouTube動画 月15本 ★★★★☆ ★★★★☆ NoteGPT YouTube・Web あり ★★★☆☆ ★★★☆☆ Adobe Acrobat AI PDF 有料のみ ★★★★☆ ★★★☆☆ PDF.ai PDF 月3件 ★★★☆☆ ★★★★☆ Notta 音声・会議 月120分 ★★★★★ ★★★★★ tl;dv オンライン会議 あり ★★★☆☆ ★★★★☆ AI要約ツールの効果的な使い方 プロンプト（指示）の工夫で質が上がる AI要約ツールの出力品質は、指示（プロンプト）の書き方で大きく変わります。\n基本的な要約指示：\n以下の文章を300字以内で要約してください。 [本文をここに貼り付け] より詳しい指示の例：\n以下の文章について： 1. 3行で全体の要旨をまとめてください 2. 重要なポイントを箇条書きで5つ挙げてください 3. このトピックに関して著者が推奨していることを教えてください [本文をここに貼り付け] 対象者を指定する例：\n以下の記事を、IT知識のない50代のビジネスパーソンが理解できるよう、 わかりやすい言葉で要約してください。 [本文] 要約結果を鵜呑みにしない AI要約には限界もあります。\nハルシネーション（幻覚）：AIが存在しない情報を作り上げることがある 重要度の判断ミス：文脈によっては本質でない部分を要約する場合も ニュアンスの欠落：微妙な文脈・感情・皮肉などは失われることがある 対策：重要な文書は要約後に原文の該当箇所も確認するクセをつけましょう。\n用途別・おすすめの組み合わせ 会社員・ビジネスパーソン 日常業務（メール・資料）：ChatGPT または Claude（無料） 会議の議事録作成：Notta（日本語精度が高い） 業界ニュースの把握：Perplexity AI 学生・研究者 論文・学術PDFの理解：Claude（長文対応）＋ PDF.ai 英語文献の日本語要約：Claude または ChatGPT YouTube講義のノート作成：YouTube Summary with ChatGPT 動画クリエイター・ライター 参考動画のリサーチ：Eightify または NoteGPT 記事のリサーチ：Perplexity AI インタビュー音声の書き起こし：Notta 在宅ワーカー・副業フリーランス クライアントとの会議録：tl;dv または Notta 契約書・要件定義の確認：PDF.ai 情報収集・競合調査：Perplexity AI 2026年のAI要約トレンド マルチモーダル対応の加速 2026年時点では、テキストだけでなく画像・動画・音声・PDFを横断的に処理できるマルチモーダルAIが主流になっています。ChatGPT-4o・Claude 3.x系などがその代表です。\nブラウザ・OS統合型のAIが普及 Microsoft CopilotのWindowsへの統合、MacのSiri進化など、OSレベルでのAI要約機能が身近になっています。ブラウザ拡張機能なしでも、ページ要約がワンクリックでできる環境が広がりました。\nプライバシーへの関心の高まり ビジネス用途ではローカル処理型のAI（データがサーバーに送られない）への需要も増えています。機密情報を扱う場合はデータポリシーの確認が必須です。\n情報処理力を武器に転職を有利に AI要約ツールを駆使して業務を効率化できる人材は、コンサルティング・リサーチ・企画職での評価が高まっています。あなたのスキルを活かせる求人を確認しましょう。dodaで求人を探す\nまとめ：まず無料ツールから試してみよう AI要約ツールは今や「知る人ぞ知る便利ツール」ではなく、ビジネスパーソンの標準装備になりつつあります。\n今すぐ試せる無料ツール：\nChatGPT（無料）：手軽にはじめるなら最初の一択 Claude（無料）：長文・論文の要約ならここ Notta（無料）：会議の多いビジネスパーソンに Perplexity（無料）：Web記事・最新ニュースの要約に すべて無料枠で始められます。まずはChatGPTかClaudeに「今日のニュース記事」を貼り付けて要約を頼んでみてください。AIの威力を実感できるはずです。\n本記事の情報は2026年5月時点のものです。各ツールの料金・機能はアップデートにより変更される場合があります。各公式サイトで最新情報をご確認ください。\n関連ツール フリーランスの適正時給を計算 → フリーランス報酬計算ツール 月々の支出バランスを見直す → 家計簿シミュレーター 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\nあわせて読みたい AIで高品質な文章を作成するコツ7つ【プロが使うテクニック】 ChatGPTを仕事で使う具体的な活用法10選【2026年最新版】 無料で使えるAIツールおすすめ15選【2026年版・目的別に厳選】 ","permalink":"https://productivity-works.com/ja/posts/ai-youyaku-tool-osusume/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「長い記事を読む時間がない」「会議の議事録を素早くまとめたい」「英語の論文を日本語で要約したい」——AI要約ツールを使えばこれらすべてが数十秒で解決できます。\u003c/p\u003e\n\u003cp\u003e2026年現在、AI要約ツールは急速に進化・普及しており、無料で使えるものも増えました。本記事では\u003cstrong\u003e用途別におすすめのAI要約ツールを厳選\u003c/strong\u003eしてご紹介します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ai要約ツールを使うべき理由\"\u003eAI要約ツールを使うべき理由\u003c/h2\u003e\n\u003ch3 id=\"情報過多時代の時短インフラ\"\u003e情報過多時代の「時短」インフラ\u003c/h3\u003e\n\u003cp\u003e現代人が1日に接触する情報量は、江戸時代の人の一生分と言われます。ニュース・SNS・メール・報告書・動画……情報の波に溺れず要点だけを掴む力が、仕事の生産性を左右します。\u003c/p\u003e\n\u003cp\u003eAI要約ツールを活用することで：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e100ページのPDFを3分で要約\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e1時間のYouTube動画を箇条書き5点に圧縮\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e英語の論文を日本語で要点整理\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e会議の文字起こしから議事録を自動生成\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eこれらが現実のものとなっています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ai要約ツールの選び方\"\u003eAI要約ツールの選び方\u003c/h2\u003e\n\u003cp\u003eツールを選ぶ際のチェックポイントを整理しました。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eチェック項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e対応フォーマット\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eテキスト・PDF・URL・YouTube・音声など何に対応しているか\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e日本語対応\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e日本語の入出力が正確か\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e無料枠の広さ\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e無料でどこまで使えるか\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e要約の質\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e原文の意図を正確に保持しているか\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eセキュリティ\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e機密情報を扱う場合のデータポリシー\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eインターフェース\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eブラウザ・アプリ・拡張機能など使いやすさ\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"用途別おすすめai要約ツール10選\"\u003e【用途別】おすすめAI要約ツール10選\u003c/h2\u003e\n\u003ch3 id=\"カテゴリwebページ記事の要約\"\u003eカテゴリ①：Webページ・記事の要約\u003c/h3\u003e\n\u003ch4 id=\"1-chatgptopenai\"\u003e1. ChatGPT（OpenAI）\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e料金\u003c/strong\u003e：無料（GPT-4oは無料枠あり）/ Plus $20/月\u003c/p\u003e\n\u003cp\u003e最もメジャーなAIツール。URLを貼り付けるか、本文をコピーして「要約してください」と指示するだけで高品質な要約が得られます。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e強み\u003c/strong\u003e：高い日本語対応力、柔軟な指示（「箇条書きで」「小学生にわかるように」など）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e弱み\u003c/strong\u003e：有料版で有料枠に制限あり、長文PDFは有料版が必要な場合も\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e活用例\u003c/strong\u003e：「以下の記事を300字以内で要約し、重要なポイントを3つ挙げてください」\u003c/p\u003e\n\u003ch4 id=\"2-claudeanthropic\"\u003e2. Claude（Anthropic）\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e料金\u003c/strong\u003e：無料（claude.ai） / Pro $20/月\u003c/p\u003e\n\u003cp\u003e200,000トークンという業界最大級のコンテキストウィンドウを持ち、\u003cstrong\u003e長文ドキュメントの要約が特に得意\u003c/strong\u003eです。日本語の要約品質も高水準。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e強み\u003c/strong\u003e：長い文書（小説1冊分）も一気に要約可能、安全性への配慮が高い\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e弱み\u003c/strong\u003e：画像認識は有料版のみ（2026年時点）\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e活用例\u003c/strong\u003e：長いレポートや論文全体を貼り付けて要約\u003c/p\u003e\n\u003ch4 id=\"3-perplexity-ai\"\u003e3. Perplexity AI\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e料金\u003c/strong\u003e：無料 / Pro $20/月\u003c/p\u003e\n\u003cp\u003eWebを検索しながらリアルタイムで要約・回答するAI。最新ニュースや時事情報の要約に強い。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e強み\u003c/strong\u003e：情報ソースへのリンクが表示される、最新情報に強い\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e弱み\u003c/strong\u003e：無料版は日次利用制限あり\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch3 id=\"カテゴリyoutube動画の要約\"\u003eカテゴリ②：YouTube動画の要約\u003c/h3\u003e\n\u003ch4 id=\"4-youtube-summary-with-chatgptchrome拡張機能\"\u003e4. YouTube Summary with ChatGPT（Chrome拡張機能）\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e料金\u003c/strong\u003e：無料\u003c/p\u003e\n\u003cp\u003eYouTubeページに「Transcript \u0026amp; Summary」ボタンを追加するChrome拡張機能。ボタン1つで字幕テキストを取得し、ChatGPTへ送って要約できます。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e強み\u003c/strong\u003e：YouTube視聴中にワンクリックで要約、日本語動画にも対応\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e弱み\u003c/strong\u003e：字幕がない動画では使えない、別途ChatGPTアカウントが必要\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"5-eightify\"\u003e5. Eightify\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e料金\u003c/strong\u003e：無料（月15本まで） / 有料プランあり\u003c/p\u003e","title":"AI要約ツール おすすめ無料10選【2026年版】用途別に徹底比較"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nオンライン英会話おすすめ2026年版｜毎日25分で英語が話せるようになる 「英語を話せるようになりたい」——社会人の学び直し人気No.1のスキルです。しかし通学型の英会話スクールは月2-4万円が相場。オンライン英会話なら月6,000-13,000円で毎日レッスンが受けられます。\nこの記事では2026年に本当におすすめできるオンライン英会話を、目的別に比較します。\nオンライン英会話を選ぶ5つの基準 基準 重要な理由 料金 毎日25分の月額が6,000-13,000円が相場 講師の質 フィリピン人講師が主流。ネイティブ講師は追加料金 教材の充実度 日常英会話・ビジネス・試験対策等の幅広さ 予約の取りやすさ 人気講師の予約が取れるか レッスン時間 早朝〜深夜対応か、24時間対応か おすすめオンライン英会話 TOP5 サービス 月額料金（毎日1回） 講師 レッスン時間 特徴 DMM英会話 6,980円 世界120カ国以上 24時間 教材数No.1 レアジョブ英会話 7,980円 フィリピン人 6:00-25:00 ビジネス英語に強い ネイティブキャンプ 6,480円 世界130カ国以上 24時間 回数無制限 Bizmates 13,200円 フィリピン人（ビジネス経験者） 5:00-25:00 ビジネス特化 Cambly 11,290円〜 ネイティブのみ 24時間 ネイティブ講師特化 各サービスの詳細 1. DMM英会話 — 教材数・コスパNo.1 項目 内容 料金 スタンダード6,980円/月、プラスネイティブ19,880円/月 講師 世界120カ国以上、10,000人以上 レッスン時間 24時間365日 教材 13,000以上の教材が無料（英検・TOEIC対応） 特典 iKnow!（英語学習アプリ）が無料 おすすめの人: 迷ったらこれ。幅広い教材で様々なレベルに対応\n24時間対応、13,000以上の無料教材、120カ国の講師陣と、すべてのバランスが高水準。月6,980円で毎日25分のレッスンは業界最安水準。英語学習アプリiKnow!（通常1,510円/月）が無料で使えるのも大きな特典。\n2. レアジョブ英会話 — ビジネス英語の老舗 項目 内容 料金 日常英会話7,980円/月、ビジネス英会話12,980円/月 講師 フィリピン人6,000人以上（採用率1%） レッスン時間 6:00-25:00 教材 ビジネス英会話教材が特に充実 特徴 上場企業、法人導入3,400社以上 おすすめの人: ビジネスで英語が必要な方\n法人導入3,400社以上の実績を持つ業界大手。ビジネス英会話コースは、会議・プレゼン・交渉などビジネスシーン別の教材が充実。講師の採用率が1%と厳選されており、質が安定しています。\n3. ネイティブキャンプ — 回数無制限で話し放題 項目 内容 料金 プレミアム6,480円/月 講師 世界130カ国以上 レッスン時間 24時間365日 特徴 1日の回数制限なし、予約不要（今すぐレッスン） 注意 予約なしでレッスン開始（「今すぐレッスン」機能） おすすめの人: とにかくたくさん話したい方、予約が面倒な方\n月6,480円で何回でもレッスン可能は業界唯一。予約不要の「今すぐレッスン」機能で、空いている講師とすぐにレッスンを開始できます。1日5回・10回受けても追加料金なし。量をこなしたい方に最適。\n4. Bizmates — ビジネス英語特化 項目 内容 料金 毎日25分13,200円/月、毎日50分19,800円/月 講師 全員がビジネス経験を持つフィリピン人講師 レッスン時間 5:00-25:00 特徴 ビジネス経験のある講師のみ、実践的なカリキュラム おすすめの人: 仕事で英語が必要な中級者以上\n講師全員がビジネス経験者（元経営者、エンジニア、マーケター等）。自分の業界に近い経験を持つ講師を選べるため、実践的なビジネス英会話が学べます。料金は高めですが、ビジネス英語の質では業界トップ。\n5. Cambly — ネイティブ講師のみ 項目 内容 料金 週3回30分11,290円/月〜 講師 全員英語ネイティブ（アメリカ、イギリス、オーストラリア等） レッスン時間 24時間365日 特徴 ネイティブの自然な発音・表現が学べる おすすめの人: ネイティブの英語に触れたい中上級者\n講師が全員ネイティブスピーカーなのがCamblyの最大の特徴。自然な発音、スラング、文化的なニュアンスが学べます。録画機能でレッスンを後から復習可能。\nタイプ別おすすめまとめ あなたのタイプ おすすめ 月額 初心者・コスパ重視 DMM英会話 6,980円 たくさん話したい ネイティブキャンプ 6,480円 ビジネス英語 レアジョブ or Bizmates 7,980-13,200円 ネイティブ講師がいい Cambly 11,290円〜 まず無料で試したい 各社無料体験レッスンあり 0円 よくある質問（FAQ） Q1. 英語が全く話せなくても大丈夫ですか？ はい。各社とも初心者向けの教材・カリキュラムが充実しています。DMM英会話やネイティブキャンプは日本語が話せる講師も在籍しており、初心者でも安心です。\nQ2. 毎日レッスンを受ける必要がありますか？ 理想は毎日25分ですが、週3-4回でも十分効果があります。大切なのは継続すること。無理のないペースで始めましょう。\nQ3. TOEICや英検の対策もできますか？ DMM英会話はTOEIC・英検対応の教材が豊富。レアジョブもTOEIC対策レッスンがあります。試験対策には教材の充実度で選ぶのがポイント。\nQ4. 子供でも受けられますか？ DMM英会話、ネイティブキャンプは子供向けコースあり。3歳から受講可能なサービスもあります。\nQ5. 効果が出るまでどれくらいかかりますか？ 毎日25分を3ヶ月続けると、簡単な会話ができるレベルに。6ヶ月で日常会話がスムーズに。1年でビジネスレベルの英語力が身につく方が多いです。\n英語力を活かしてキャリアアップを目指すなら、**doda **で外資系・グローバル企業の求人をチェック。英語力が年収アップに直結します。\nまとめ オンライン英会話は月6,000-7,000円で毎日レッスンが受けられる、最もコスパの高い英語学習法です。\n迷ったらまずDMM英会話（バランス最強）かネイティブキャンプ（回数無制限）の無料体験から。どちらも2回の無料レッスンが体験できます。\n英語力は転職・昇給・副業すべてに直結するスキル。投資対効果は抜群です。\n関連記事: 転職サイト おすすめ2026年版 ※本記事は情報提供を目的としており、特定のサービスの利用を推奨するものではありません。料金は変更される場合があります。\n関連ツール 月々の英会話費用を家計全体で見直す → 家計簿シミュレーター オンライン英会話など複数サブスクの年間コストを確認 → サブスク管理計算ツール 関連テンプレート 英語学習・スキルアップをサポートするテンプレート：\nChatGPTプロンプト集100選 — 英語学習・翻訳プロンプト含む AI仕事術ガイド — AIで英語学習を効率化 ","permalink":"https://productivity-works.com/ja/posts/online-eikaiwa-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"オンライン英会話おすすめ2026年版毎日25分で英語が話せるようになる\"\u003eオンライン英会話おすすめ2026年版｜毎日25分で英語が話せるようになる\u003c/h1\u003e\n\u003cp\u003e「英語を話せるようになりたい」——社会人の学び直し人気No.1のスキルです。しかし通学型の英会話スクールは月2-4万円が相場。オンライン英会話なら\u003cstrong\u003e月6,000-13,000円で毎日レッスン\u003c/strong\u003eが受けられます。\u003c/p\u003e\n\u003cp\u003eこの記事では2026年に本当におすすめできるオンライン英会話を、目的別に比較します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"オンライン英会話を選ぶ5つの基準\"\u003eオンライン英会話を選ぶ5つの基準\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e基準\u003c/th\u003e\n          \u003cth\u003e重要な理由\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e料金\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e毎日25分の月額が6,000-13,000円が相場\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e講師の質\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eフィリピン人講師が主流。ネイティブ講師は追加料金\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e教材の充実度\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e日常英会話・ビジネス・試験対策等の幅広さ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e予約の取りやすさ\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e人気講師の予約が取れるか\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eレッスン時間\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e早朝〜深夜対応か、24時間対応か\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"おすすめオンライン英会話-top5\"\u003eおすすめオンライン英会話 TOP5\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eサービス\u003c/th\u003e\n          \u003cth\u003e月額料金（毎日1回）\u003c/th\u003e\n          \u003cth\u003e講師\u003c/th\u003e\n          \u003cth\u003eレッスン時間\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eDMM英会話\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e6,980円\u003c/td\u003e\n          \u003ctd\u003e世界120カ国以上\u003c/td\u003e\n          \u003ctd\u003e24時間\u003c/td\u003e\n          \u003ctd\u003e教材数No.1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eレアジョブ英会話\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e7,980円\u003c/td\u003e\n          \u003ctd\u003eフィリピン人\u003c/td\u003e\n          \u003ctd\u003e6:00-25:00\u003c/td\u003e\n          \u003ctd\u003eビジネス英語に強い\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eネイティブキャンプ\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e6,480円\u003c/td\u003e\n          \u003ctd\u003e世界130カ国以上\u003c/td\u003e\n          \u003ctd\u003e24時間\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e回数無制限\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eBizmates\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e13,200円\u003c/td\u003e\n          \u003ctd\u003eフィリピン人（ビジネス経験者）\u003c/td\u003e\n          \u003ctd\u003e5:00-25:00\u003c/td\u003e\n          \u003ctd\u003eビジネス特化\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eCambly\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e11,290円〜\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003eネイティブのみ\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e24時間\u003c/td\u003e\n          \u003ctd\u003eネイティブ講師特化\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"各サービスの詳細\"\u003e各サービスの詳細\u003c/h2\u003e\n\u003ch3 id=\"1-dmm英会話--教材数コスパno1\"\u003e1. DMM英会話 — 教材数・コスパNo.1\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e料金\u003c/td\u003e\n          \u003ctd\u003eスタンダード6,980円/月、プラスネイティブ19,880円/月\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e講師\u003c/td\u003e\n          \u003ctd\u003e世界120カ国以上、10,000人以上\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eレッスン時間\u003c/td\u003e\n          \u003ctd\u003e24時間365日\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e教材\u003c/td\u003e\n          \u003ctd\u003e13,000以上の教材が無料（英検・TOEIC対応）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e特典\u003c/td\u003e\n          \u003ctd\u003eiKnow!（英語学習アプリ）が無料\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e 迷ったらこれ。幅広い教材で様々なレベルに対応\u003c/p\u003e\n\u003cp\u003e24時間対応、13,000以上の無料教材、120カ国の講師陣と、すべてのバランスが高水準。月6,980円で毎日25分のレッスンは業界最安水準。英語学習アプリiKnow!（通常1,510円/月）が無料で使えるのも大きな特典。\u003c/p\u003e\n\u003ch3 id=\"2-レアジョブ英会話--ビジネス英語の老舗\"\u003e2. レアジョブ英会話 — ビジネス英語の老舗\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e料金\u003c/td\u003e\n          \u003ctd\u003e日常英会話7,980円/月、ビジネス英会話12,980円/月\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e講師\u003c/td\u003e\n          \u003ctd\u003eフィリピン人6,000人以上（採用率1%）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eレッスン時間\u003c/td\u003e\n          \u003ctd\u003e6:00-25:00\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e教材\u003c/td\u003e\n          \u003ctd\u003eビジネス英会話教材が特に充実\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e特徴\u003c/td\u003e\n          \u003ctd\u003e上場企業、法人導入3,400社以上\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e ビジネスで英語が必要な方\u003c/p\u003e","title":"オンライン英会話 おすすめ2026年版！料金・講師・教材で比較"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nWiFiルーターおすすめ2026年版｜用途別に最適な機種を選ぶ 「WiFiが遅い」「部屋によって電波が届かない」——その原因の多くはルーターの性能不足です。5年以上前のルーターを使っている場合、最新機種に買い替えるだけで速度が2-5倍になることも珍しくありません。\n2026年はWiFi 7対応機種が本格普及。この記事では用途別に最適なWiFiルーターを比較します。\nWiFi規格の違い 規格 最大速度 発売年 特徴 WiFi 7 (802.11be) 46Gbps 2024年〜 最新・最速、MLO対応 WiFi 6E (802.11ax) 9.6Gbps 2022年〜 6GHz帯対応、コスパ良好 WiFi 6 (802.11ax) 9.6Gbps 2020年〜 普及済み、価格下落中 WiFi 5 (802.11ac) 6.9Gbps 2014年〜 古い、買い替え推奨 2026年のおすすめ: WiFi 6E以上。WiFi 7は将来性があるが対応デバイスがまだ少ない。\nおすすめWiFiルーター TOP5 機種 規格 最大速度 間取り目安 価格帯 特徴 バッファロー WXR-11000XE12 WiFi 7 11,520Mbps 4LDK 35,000円〜 WiFi 7最強コスパ TP-Link Archer AXE75 WiFi 6E 5,400Mbps 3LDK 12,000円〜 コスパ最強 NEC Aterm WX5400HP WiFi 6 4,804Mbps 3LDK 10,000円〜 安定性の定番 ASUS RT-BE88U WiFi 7 10,000Mbps 4LDK 45,000円〜 ゲーマー向け最強 Google Nest Wifi Pro WiFi 6E 4,200Mbps メッシュ対応 22,000円〜 メッシュWiFi最強 各機種の詳細 1. バッファロー WXR-11000XE12 — WiFi 7コスパ最強 項目 内容 規格 WiFi 7（トライバンド） 最大速度 11,520Mbps 間取り目安 4LDK / 3階建て 有線ポート 10Gbps × 1 + 1Gbps × 4 価格 35,000円前後 おすすめの人: 最新WiFi 7をコスパよく導入したい方\n国内メーカーのWiFi 7対応機として最もバランスが良い。10Gbps有線ポート搭載で、光回線の10Gbpsプランにも対応。バッファローの「メッシュ中継」機能で広い家でも安定。\n2. TP-Link Archer AXE75 — 1万円台でWiFi 6E 項目 内容 規格 WiFi 6E（トライバンド） 最大速度 5,400Mbps 間取り目安 3LDK 有線ポート 1Gbps × 4 価格 12,000円前後 おすすめの人: コスパ重視で十分な速度が欲しい方\n1万円台でWiFi 6E（6GHz帯）に対応するコスパモンスター。一般家庭の3LDKなら十分なカバー範囲。TP-Linkのアプリで簡単にセットアップ・管理可能。\n3. NEC Aterm WX5400HP — 安定性の国産定番 項目 内容 規格 WiFi 6 最大速度 4,804Mbps 間取り目安 3LDK 有線ポート 1Gbps × 4 価格 10,000円前後 おすすめの人: 安定性重視、国産メーカーが安心な方\nNEC Atermシリーズは「とにかく安定して動く」で定評あり。WiFi 6ながら実用上は十分な速度。国内ISPとの互換性検証が充実しており、相性問題が少ない。\n4. ASUS RT-BE88U — ゲーマー向け最強 項目 内容 規格 WiFi 7（デュアルバンド） 最大速度 10,000Mbps 間取り目安 4LDK 有線ポート 10Gbps × 2 + 2.5Gbps × 4 価格 45,000円前後 おすすめの人: オンラインゲーマー、ストリーマー\nゲームに特化した機能（アダプティブQoS、ゲームアクセラレーター、OpenNAT）を搭載。10Gbpsポートが2つあり、NASやゲーミングPCとの有線接続も超高速。\n5. Google Nest Wifi Pro — メッシュWiFi最強 項目 内容 規格 WiFi 6E 最大速度 4,200Mbps カバー範囲 1台120㎡、3台セットで360㎡ セットアップ Google Homeアプリで簡単 価格 1台22,000円 / 3台セット55,000円 おすすめの人: 広い家でどこでも安定したWiFiが欲しい方\nメッシュWiFiなら家のどこにいても安定した速度。3台セットで360㎡をカバーし、部屋間の移動でも接続が途切れない。Googleアシスタント内蔵でスマートホームのハブとしても使用可能。\n選び方ガイド あなたの状況 おすすめ 予算 1-2人、1LDK-2LDK TP-Link Archer AXE75 12,000円 3-4人家族、3LDK NEC Aterm WX5400HP 10,000円 広い家・3階建て バッファロー WXR-11000XE12 35,000円 ゲーム・配信 ASUS RT-BE88U 45,000円 メッシュで全部屋カバー Google Nest Wifi Pro 22,000円〜 よくある質問（FAQ） Q1. WiFi 7対応ルーターは買うべき？ 将来性はありますが、2026年時点でWiFi 7対応デバイスはまだ少数。スマホ（iPhone 16 Pro以降）やPC（最新モデル）がWiFi 7対応なら投資価値あり。そうでなければWiFi 6Eで十分です。\nQ2. ルーターの寿命はどれくらい？ 目安は4-5年。ファームウェアアップデートが提供されなくなったら買い替え時。セキュリティリスクを避けるためにも古すぎるルーターは交換しましょう。\nQ3. ルーターの置き場所はどこが最適？ 家の中心、床から1-1.5mの高さが理想。壁や金属、電子レンジの近くは避ける。2階建ての場合は1階と2階の境目付近に設置するのが効果的。\nQ4. ISPのレンタルルーターと市販ルーター、どちらがいい？ 性能は市販ルーターが圧倒的に上。ISPレンタルは月500円前後かかるため、1万円の市販ルーターなら20ヶ月で元が取れます。\nQ5. メッシュWiFiは必要？ 3LDK以上、特に2階建て・3階建ての場合はメッシュWiFiを強く推奨。1ルーターでは電波が届かない部屋がある場合、中継機よりメッシュの方が速度劣化が少なく安定します。\nまとめ WiFiルーター選びは規格（WiFi 6E以上）と間取りのマッチングが重要。\nコスパ最強 → TP-Link Archer AXE75（12,000円でWiFi 6E） 安定性重視 → NEC Aterm WX5400HP（10,000円の国産定番） 広い家 → Google Nest Wifi Pro（メッシュで全部屋カバー） 最新WiFi 7 → バッファロー WXR-11000XE12（35,000円） レンタルルーターから市販ルーターへの切り替えで、年間6,000円の節約 + 速度アップが実現できます。\n関連記事: 光回線 おすすめ2026年版 ※本記事は情報提供を目的としており、特定の製品の購入を推奨するものではありません。価格・スペックは変更される場合があります。\n関連ツール WiFiルーター代など通信費を家計全体で把握する → 家計簿シミュレーター レンタルルーター代を含む月額サービスの年間コストを確認 → サブスク管理計算ツール 関連テンプレート ガジェット選び・節約をサポートするテンプレート：\nExcel家計簿テンプレート — 固定費・通信費の見える化 AI仕事術ガイド — AIで製品比較を効率化 ","permalink":"https://productivity-works.com/ja/posts/wifi-router-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"wifiルーターおすすめ2026年版用途別に最適な機種を選ぶ\"\u003eWiFiルーターおすすめ2026年版｜用途別に最適な機種を選ぶ\u003c/h1\u003e\n\u003cp\u003e「WiFiが遅い」「部屋によって電波が届かない」——その原因の多くは\u003cstrong\u003eルーターの性能不足\u003c/strong\u003eです。5年以上前のルーターを使っている場合、最新機種に買い替えるだけで\u003cstrong\u003e速度が2-5倍\u003c/strong\u003eになることも珍しくありません。\u003c/p\u003e\n\u003cp\u003e2026年はWiFi 7対応機種が本格普及。この記事では用途別に最適なWiFiルーターを比較します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"wifi規格の違い\"\u003eWiFi規格の違い\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e規格\u003c/th\u003e\n          \u003cth\u003e最大速度\u003c/th\u003e\n          \u003cth\u003e発売年\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eWiFi 7 (802.11be)\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e46Gbps\u003c/td\u003e\n          \u003ctd\u003e2024年〜\u003c/td\u003e\n          \u003ctd\u003e最新・最速、MLO対応\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eWiFi 6E (802.11ax)\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e9.6Gbps\u003c/td\u003e\n          \u003ctd\u003e2022年〜\u003c/td\u003e\n          \u003ctd\u003e6GHz帯対応、コスパ良好\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eWiFi 6 (802.11ax)\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e9.6Gbps\u003c/td\u003e\n          \u003ctd\u003e2020年〜\u003c/td\u003e\n          \u003ctd\u003e普及済み、価格下落中\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eWiFi 5 (802.11ac)\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e6.9Gbps\u003c/td\u003e\n          \u003ctd\u003e2014年〜\u003c/td\u003e\n          \u003ctd\u003e古い、買い替え推奨\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e2026年のおすすめ:\u003c/strong\u003e WiFi 6E以上。WiFi 7は将来性があるが対応デバイスがまだ少ない。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"おすすめwifiルーター-top5\"\u003eおすすめWiFiルーター TOP5\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e機種\u003c/th\u003e\n          \u003cth\u003e規格\u003c/th\u003e\n          \u003cth\u003e最大速度\u003c/th\u003e\n          \u003cth\u003e間取り目安\u003c/th\u003e\n          \u003cth\u003e価格帯\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eバッファロー WXR-11000XE12\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eWiFi 7\u003c/td\u003e\n          \u003ctd\u003e11,520Mbps\u003c/td\u003e\n          \u003ctd\u003e4LDK\u003c/td\u003e\n          \u003ctd\u003e35,000円〜\u003c/td\u003e\n          \u003ctd\u003eWiFi 7最強コスパ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eTP-Link Archer AXE75\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eWiFi 6E\u003c/td\u003e\n          \u003ctd\u003e5,400Mbps\u003c/td\u003e\n          \u003ctd\u003e3LDK\u003c/td\u003e\n          \u003ctd\u003e12,000円〜\u003c/td\u003e\n          \u003ctd\u003eコスパ最強\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eNEC Aterm WX5400HP\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eWiFi 6\u003c/td\u003e\n          \u003ctd\u003e4,804Mbps\u003c/td\u003e\n          \u003ctd\u003e3LDK\u003c/td\u003e\n          \u003ctd\u003e10,000円〜\u003c/td\u003e\n          \u003ctd\u003e安定性の定番\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eASUS RT-BE88U\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eWiFi 7\u003c/td\u003e\n          \u003ctd\u003e10,000Mbps\u003c/td\u003e\n          \u003ctd\u003e4LDK\u003c/td\u003e\n          \u003ctd\u003e45,000円〜\u003c/td\u003e\n          \u003ctd\u003eゲーマー向け最強\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eGoogle Nest Wifi Pro\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eWiFi 6E\u003c/td\u003e\n          \u003ctd\u003e4,200Mbps\u003c/td\u003e\n          \u003ctd\u003eメッシュ対応\u003c/td\u003e\n          \u003ctd\u003e22,000円〜\u003c/td\u003e\n          \u003ctd\u003eメッシュWiFi最強\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"各機種の詳細\"\u003e各機種の詳細\u003c/h2\u003e\n\u003ch3 id=\"1-バッファロー-wxr-11000xe12--wifi-7コスパ最強\"\u003e1. バッファロー WXR-11000XE12 — WiFi 7コスパ最強\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e規格\u003c/td\u003e\n          \u003ctd\u003eWiFi 7（トライバンド）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e最大速度\u003c/td\u003e\n          \u003ctd\u003e11,520Mbps\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e間取り目安\u003c/td\u003e\n          \u003ctd\u003e4LDK / 3階建て\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e有線ポート\u003c/td\u003e\n          \u003ctd\u003e10Gbps × 1 + 1Gbps × 4\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e価格\u003c/td\u003e\n          \u003ctd\u003e35,000円前後\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめの人:\u003c/strong\u003e 最新WiFi 7をコスパよく導入したい方\u003c/p\u003e","title":"WiFiルーター おすすめ2026年版！速度・範囲・価格で選ぶ最強機種"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nAIを使ったブログ記事の書き方入門【2026年版・SEOで上位表示を狙う方法】 「AIを使えばブログ記事を楽に書けると聞いたけど、実際どうやるの？」「AIで書いた記事はGoogleに評価されないって本当？」\nこの2つの疑問を持っている人が多いと思います。結論から言えば、AIを正しく使えばSEOで上位表示される記事を効率よく書けます。ただし「AIが書いた文章をそのまま公開する」だけでは評価されません。\n本記事では、SEOとアドセンス・アフィリエイト収益の両方を意識したAIブログ記事の作り方を、手順を追って解説します。\n大前提：GoogleはAI記事を嫌いじゃない よく誤解されますが、Googleは「AI生成コンテンツ自体」を否定していません。Googleが評価しないのは「低品質なコンテンツ」です。\nGoogleの公式見解（Search Central）をシンプルにまとめると：\nE-E-A-T（経験・専門性・権威性・信頼性）を満たしているかが重要 AIで書いたかどうかより、読者にとって価値があるかどうかが判断基準 AI生成の低品質スパムは否定するが、AIを活用した高品質コンテンツは問題なし つまり、AIはあくまで「書くスピードを上げるツール」として使いながら、人間が品質とオリジナリティを担保することが必要です。\nAIブログ記事作成のワークフロー（全5ステップ） Step1: キーワード選定 ↓ Step2: 記事の構成（アウトライン）作成 ↓ Step3: AIで本文ドラフトを生成 ↓ Step4: 人間による編集・価値追加 ↓ Step5: SEO最終チェック・公開 Step1：キーワード選定 どんなに良い記事を書いても、検索されないキーワードで書けばアクセスは来ません。\n無料のキーワード調査ツール Googleサーチコンソール（既にサイトがある場合） 自分のサイトにどんなキーワードでアクセスが来ているかを確認できます。\nGoogleサジェスト 検索バーにキーワードを入力すると表示されるサジェストが、実際に検索されているフレーズです。\nUbersuggest（無料枠あり） キーワードの月間検索ボリュームと競合の強さを確認できます。\n初心者が狙うべきキーワードの条件 月間検索ボリューム：100〜1,000前後（大きすぎると競合に勝てない） ロングテールキーワード（3〜4語以上の複合キーワード） 商業的意図があるキーワード（「おすすめ」「比較」「方法」「料金」が含まれるもの） 例：\nNG：「ChatGPT」（月間検索数が多すぎ、大手メディアに勝てない） OK：「ChatGPT 議事録 自動化 方法」（検索意図が明確、競合が少ない） Step2：記事の構成をAIで作る キーワードが決まったら、まずAIに構成を作らせます。\n構成作成プロンプト 以下の条件でSEOを意識したブログ記事の構成を作ってください。 【ターゲットキーワード】ChatGPT 議事録 自動化 方法 【想定読者】会議の議事録作成に時間がかかっている会社員・管理職 【検索意図】ChatGPTを使って議事録を楽に作りたい 【記事の目的】読んだ人が実際に試せるよう、具体的な手順を提供する 【文字数目安】2,500〜3,000字 H1タイトル1案と、H2・H3の構成、各セクションで書くべき内容（3点ずつ）を出してください。 記事の冒頭（リード文）のアイデアも50字程度で教えてください。 構成を自分で調整する AIが出した構成を必ず見直してください。\n確認ポイント\nキーワードがH1・H2に自然に含まれているか 読者の疑問に答える順番になっているか 競合記事にない独自の視点・情報を追加できる箇所はどこか 構成の段階で手を入れておくことが、最終的な品質を大きく左右します。\nStep3：AIで本文ドラフトを生成する 構成が決まったら、セクションごとにAIに執筆を依頼します。一気に全文を書かせるより、H2ごとに書かせる方がコントロールしやすいです。\n執筆プロンプト（セクション単位） 以下のブログ記事のセクションを書いてください。 【記事全体のテーマ】ChatGPTで議事録を自動化する方法 【対象読者】IT知識は普通レベルのビジネスパーソン 【このセクションのH2タイトル】ChatGPTで議事録を作る基本の手順 【このセクションで伝えること】 1. 会議音声の文字起こし方法（Zoomの自動文字起こし機能） 2. 文字起こしテキストをChatGPTに渡すときの最適なプロンプト 3. 出力された議事録の確認ポイント 【条件】 - 700〜900字 - 具体的なプロンプト例を1つ本文中に含める - 「ですます」調で書く - 「いかがでしたか」「まとめると」のような定型フレーズは使わない Step4：人間による編集・価値追加（最重要） ここが最もGoogleの評価と読者の満足度を左右するステップです。\n必ず人間が追加すべき要素 1. 実体験・具体的なエピソード AIには実体験がありません。「実際に試してみたら○○だった」という一人称の体験談は、記事の信頼性を大きく高めます。\n2. 最新の数字・データ AIの学習データには最新情報が含まれていない場合があります。統計数字・料金・スペック情報は公式サイトで必ず確認・更新してください。\n3. 競合記事にない独自の視点 「他の記事と同じことを、より詳しく書く」だけでは差別化になりません。「この視点で書いた記事は他にない」という要素を意識して追加してください。\n4. 内部リンク・外部リンク 関連する自分の記事へのリンク（内部リンク）と、権威あるサイトへの参照（外部リンク）を追加します。\n編集チェックリスト ファクトチェック完了（数字・固有名詞・会社名） 独自の体験・情報を最低1か所追加 AIっぽい定型フレーズを削除 読者が求める情報に答えられているか確認 内部リンクを2〜3か所設置 画像・図表を適切に配置（alt属性も設定） Step5：SEO最終チェック 公開前に以下を確認します。\nタイトル（H1）の最適化 ターゲットキーワードを含む 32文字以内が理想（Googleの検索結果でカットされない） 「具体的な数字」「年号」「感情に訴える言葉」を含めると CTR（クリック率）が上がりやすい メタディスクリプションの設定 120〜160文字以内 キーワードを自然に含む 記事を読む理由（メリット）を明記 CTAを含める（「詳しくは記事内で解説」など） 本文中のキーワード密度 キーワードを詰め込みすぎない（1〜2%が目安） 関連語・同義語を自然に散りばめる AI記事で収益を上げるための追加ポイント AdSense収益を上げるには 1記事1,500字以上（短すぎると承認されにくい・収益が出にくい） 月間20〜30記事を継続的に公開できる体制を作る 特定ニッチに特化することで RPM（1,000表示あたりの収益）が上がる アフィリエイト収益を上げるには 「比較記事」「おすすめ記事」「方法記事」は購買意図が高くアフィリエイト向き ツールを紹介する場合、自分が実際に使ったものに限定する（E-E-A-Tの観点） ASPへの登録：A8.net、楽天アフィリエイト、バリューコマースなど AIブログ記事作成の時間目安 慣れてくれば以下の時間で作成できます。\nステップ 初回 慣れた後 キーワード選定 30分 15分 構成作成（AI+自分） 20分 10分 本文生成（AI） 15分 10分 編集・価値追加 60分 40分 SEO最終確認 20分 10分 合計 約2.5時間 約1.5時間 1記事1.5〜2.5時間で書けるようになると、副業としても現実的なペースで記事を積み上げられます。\nまとめ：AIは「書く速度」を上げ、人間は「価値」を入れる AIブログ記事の本質は、AIと人間の分業です。\nAIが担当：構成の設計、本文の下書き、表現の候補出し 人間が担当：実体験の追加、事実確認、独自視点の挿入、読者目線での編集 この役割分担を守れば、高品質な記事を従来の半分以下の時間で作れます。まず1記事、このワークフローで書いてみてください。\nブログを本格的に始めるなら、まず独自ドメインを取得しましょう。お名前.com なら希望のドメインを低コストで取得でき、WordPressとの連携も簡単です。ブログ収益が発生し始めたら、副業・フリーランスの収入管理にはfreee会計 が便利です。アフィリエイト収入の記録から確定申告書類の作成まで、ガイドに沿って完結させることができます。\n関連記事\nAIで高品質な文章を作成するコツ7つ すぐ使えるChatGPTプロンプトテンプレート20選 AIを使った副業の始め方完全ガイド 関連ツール 色をHEX・RGB・HSLで変換 → カラーピッカー 文字数・単語数をリアルタイムでカウント → 文字数カウンター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 副業収入の税金を計算 → 副業税金計算ツール マークダウンエディターが必要？ → マークダウンプレビュー — リアルタイムでプレビュー\nブログのアイキャッチ画像をリサイズ → 画像リサイズツール ブログURL・SNSリンクのQRコードを作成 → QRコードジェネレーター 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド ","permalink":"https://productivity-works.com/ja/posts/ai-%E3%83%96%E3%83%AD%E3%82%B0-%E6%9B%B8%E3%81%8D%E6%96%B9/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"aiを使ったブログ記事の書き方入門2026年版seoで上位表示を狙う方法\"\u003eAIを使ったブログ記事の書き方入門【2026年版・SEOで上位表示を狙う方法】\u003c/h1\u003e\n\u003cp\u003e「AIを使えばブログ記事を楽に書けると聞いたけど、実際どうやるの？」「AIで書いた記事はGoogleに評価されないって本当？」\u003c/p\u003e\n\u003cp\u003eこの2つの疑問を持っている人が多いと思います。結論から言えば、AIを正しく使えばSEOで上位表示される記事を効率よく書けます。ただし「AIが書いた文章をそのまま公開する」だけでは評価されません。\u003c/p\u003e\n\u003cp\u003e本記事では、SEOとアドセンス・アフィリエイト収益の両方を意識したAIブログ記事の作り方を、手順を追って解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"大前提googleはai記事を嫌いじゃない\"\u003e大前提：GoogleはAI記事を嫌いじゃない\u003c/h2\u003e\n\u003cp\u003eよく誤解されますが、Googleは「AI生成コンテンツ自体」を否定していません。Googleが評価しないのは「低品質なコンテンツ」です。\u003c/p\u003e\n\u003cp\u003eGoogleの公式見解（Search Central）をシンプルにまとめると：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eE-E-A-T（経験・専門性・権威性・信頼性）を満たしているか\u003c/strong\u003eが重要\u003c/li\u003e\n\u003cli\u003eAIで書いたかどうかより、読者にとって価値があるかどうかが判断基準\u003c/li\u003e\n\u003cli\u003eAI生成の低品質スパムは否定するが、AIを活用した高品質コンテンツは問題なし\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eつまり、AIはあくまで「書くスピードを上げるツール」として使いながら、人間が品質とオリジナリティを担保することが必要です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"aiブログ記事作成のワークフロー全5ステップ\"\u003eAIブログ記事作成のワークフロー（全5ステップ）\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eStep1: キーワード選定\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e   ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eStep2: 記事の構成（アウトライン）作成\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e   ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eStep3: AIで本文ドラフトを生成\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e   ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eStep4: 人間による編集・価値追加\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e   ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eStep5: SEO最終チェック・公開\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"step1キーワード選定\"\u003eStep1：キーワード選定\u003c/h2\u003e\n\u003cp\u003eどんなに良い記事を書いても、検索されないキーワードで書けばアクセスは来ません。\u003c/p\u003e\n\u003ch3 id=\"無料のキーワード調査ツール\"\u003e無料のキーワード調査ツール\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eGoogleサーチコンソール（既にサイトがある場合）\u003c/strong\u003e\n自分のサイトにどんなキーワードでアクセスが来ているかを確認できます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eGoogleサジェスト\u003c/strong\u003e\n検索バーにキーワードを入力すると表示されるサジェストが、実際に検索されているフレーズです。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eUbersuggest（無料枠あり）\u003c/strong\u003e\nキーワードの月間検索ボリュームと競合の強さを確認できます。\u003c/p\u003e\n\u003ch3 id=\"初心者が狙うべきキーワードの条件\"\u003e初心者が狙うべきキーワードの条件\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e月間検索ボリューム：\u003cstrong\u003e100〜1,000前後\u003c/strong\u003e（大きすぎると競合に勝てない）\u003c/li\u003e\n\u003cli\u003eロングテールキーワード（3〜4語以上の複合キーワード）\u003c/li\u003e\n\u003cli\u003e商業的意図があるキーワード（「おすすめ」「比較」「方法」「料金」が含まれるもの）\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNG：「ChatGPT」（月間検索数が多すぎ、大手メディアに勝てない）\u003c/li\u003e\n\u003cli\u003eOK：「ChatGPT 議事録 自動化 方法」（検索意図が明確、競合が少ない）\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"step2記事の構成をaiで作る\"\u003eStep2：記事の構成をAIで作る\u003c/h2\u003e\n\u003cp\u003eキーワードが決まったら、まずAIに構成を作らせます。\u003c/p\u003e\n\u003ch3 id=\"構成作成プロンプト\"\u003e構成作成プロンプト\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の条件でSEOを意識したブログ記事の構成を作ってください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【ターゲットキーワード】ChatGPT 議事録 自動化 方法\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【想定読者】会議の議事録作成に時間がかかっている会社員・管理職\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【検索意図】ChatGPTを使って議事録を楽に作りたい\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【記事の目的】読んだ人が実際に試せるよう、具体的な手順を提供する\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【文字数目安】2,500〜3,000字\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eH1タイトル1案と、H2・H3の構成、各セクションで書くべき内容（3点ずつ）を出してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e記事の冒頭（リード文）のアイデアも50字程度で教えてください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"構成を自分で調整する\"\u003e構成を自分で調整する\u003c/h3\u003e\n\u003cp\u003eAIが出した構成を必ず見直してください。\u003c/p\u003e","title":"AIを使ったブログ記事の書き方入門【2026年版・SEOで上位表示を狙う方法】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nAIを使った副業の始め方完全ガイド【2026年版・月3万〜10万円を目指す】 「副業を始めたいけど、特別なスキルがない」「時間が限られている」——そんな人にとって、AIは今の時代における最大のレバレッジツールです。\n2026年現在、AIを使いこなすことで、以前なら習得に数年かかっていたスキルが数週間でビジネスレベルに到達できるケースが増えています。本記事では、AI活用型の副業を現実的に始めるための完全ガイドをお届けします。\nAI副業が今「チャンス」な理由 参入障壁が下がった ライティング、デザイン、プログラミング——いずれもAIの登場で、素人でも一定の品質の成果物を短時間で作れるようになりました。\n需要が急増している 企業側でもAIを活用したコンテンツ制作・業務効率化の需要が爆発的に増えており、「AIを使ってくれる外注先」を積極的に探しています。\n時間対収益が良い AIで作業時間が短縮されるため、従来の副業より時間効率が高い案件に取り組めます。\nAI副業の種類と月収目安 副業の種類 月収目安（副業） 難易度 始めるまでの期間 AIライティング 3〜15万円 低〜中 1〜2週間 AI画像・デザイン制作 2〜10万円 低〜中 1〜3週間 AIを使ったWebサイト制作 5〜30万円/件 中 1〜2ヶ月 動画編集（AI補助） 3〜20万円 中 2〜4週間 AIプロンプトエンジニアリング 5〜20万円 中〜高 1〜2ヶ月 AIコンサルティング 10〜50万円 高 3〜6ヶ月 副業1：AIライティング（最も始めやすい） 仕事内容 企業のブログ記事、LP文章、商品説明文、メルマガなどを執筆します。AIで下書きを作り、自分で編集・品質チェックして納品します。\n始め方 ステップ1：クラウドソーシングに登録\nクラウドワークス（crowdworks.jp） ランサーズ（lancers.jp） ココナラ（coconala.com） ステップ2：プロフィールを整える 「AIライティングツールを活用した高速・高品質な記事作成が得意」という特徴を明示します。\nステップ3：最初の3件は格安で受ける 実績・レビューゼロから始める場合、最初の数件は相場の半額程度で受けて実績を積みます。\n単価の目安 SEO記事（1,000〜2,000字）：2,000〜5,000円 LP・セールス文章：10,000〜50,000円 専門性の高い技術記事：5,000〜15,000円/本 注意点 AIの出力をそのまま納品するのはNG。必ずファクトチェック、独自性の追加、表現の最終調整を行ってください。クライアントからの信頼がすべての副業です。\n副業2：AI画像・デザイン制作 仕事内容 Midjourney、DALL-E、Stable Diffusionなどを使い、ブログのサムネイル、SNS投稿画像、商品画像などを制作します。\n強みになるスキルの組み合わせ AI画像生成 + Canvaでの編集・仕上げ AI生成 + Photoshopでの後処理 AIで複数案を作り、クライアントに選ばせる 始め方 Midjourneyの無料トライアルまたは月額10ドルプランで練習 ポートフォリオとして10〜20点の作品を作る ランサーズ・ococonaラでサービスを出品 稼ぎ方のポイント 「アイコン制作」「YouTube サムネイル」「プロフィール画像」など、ニーズが明確で小規模な案件から始めると受注しやすいです。\n副業3：AIを使ったWebサイト制作 現在の状況 ChatGPTやGitHub Copilotの登場で、プログラミング経験が少ない人でもシンプルなWebサイトなら作れるようになりました。さらに、NoCodeツール（Wix、Squarespace、Framer）とAIを組み合わせると、コーディング不要でプロ品質のサイトが作れます。\nおすすめの入り口 Framer + ChatGPT デザインの美しさに定評あるFramer（framer.com）は、コーディングなしで洗練されたサイトが作れます。ChatGPTでコピーライティングをし、Framerでデザインを組む流れが効率的です。\n単価目安 個人・小規模事業者のHP：50,000〜150,000円 LPのみ：30,000〜80,000円 リニューアル：50,000〜200,000円 副業4：動画編集（AI補助） AIで効率化できる工程 自動文字起こし（Whisper / Otter.ai） BGM生成（Suno） 動画の不要部分のカット提案（Descript） サムネイル作成（Canva AI / DALL-E） 動画編集そのものはCapCut（無料）やPremiere Proなどを使いますが、AI補助ツールを活用することで編集速度が大幅に向上します。\n副業5：AIコンテンツ翻訳 DeepLやChatGPTを使って、英語→日本語、日本語→英語の翻訳副業も有望です。AIが下訳し、人間がニュアンスを修正する「ポストエディット」の需要が高まっています。\n特に技術文書・法律文書・マーケティングコピーなど、専門知識が必要な分野はAI翻訳のままでは品質が不十分なため、人間のチェックに対する報酬が高くなります。\n副業を始める前に確認すること 1. 本業の就業規則を確認する 副業禁止の会社もあります。まず就業規則を確認してください。\n2. 確定申告の準備をする 副業収入が年間20万円を超える場合、確定申告が必要です。収入・支出の記録はfreeやMFクラウドで管理しておきましょう。\n3. 使用ツールの商用利用規約を確認する ChatGPT、Midjourney等のAIツールは、商用利用が許可されているかどうか各規約で確認が必要です。多くは商用利用OKですが、出力の著作権についての取り扱いは異なります。\n最初の1ヶ月でやること Week1: 目指す副業ジャンルを1つに絞り、使うAIツールを決める Week2: ポートフォリオ用のサンプルを3〜5点作る Week3: クラウドワークスやランサーズに登録・プロフィールを充実させる Week4: 最初の1件を受注する（格安でもOK。実績が最重要） 副業の確定申告には**freee会計（無料トライアルあり） **がおすすめ。スマホで簡単に確定申告書が作成できます。\nまとめ：AIは「スキルのレバレッジ」 AI副業で成功する人の共通点は、「AIを使いこなす人間のスキル」を磨き続けていることです。AIはツールであり、使う人間の判断力・コミュニケーション力・ビジネス理解が最終的な差になります。\nまずは1つのジャンルを選び、今月中に最初の一歩を踏み出してください。\n関連ツール 副業収入の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 安全なパスワードを即座に生成 → パスワード生成ツール 関連記事\n無料で使えるAIツールおすすめ15選 ChatGPTを仕事で使う具体的な活用法10選 AIを使ったブログ記事の書き方入門 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド ","permalink":"https://productivity-works.com/ja/posts/ai-%E5%89%AF%E6%A5%AD-%E5%A7%8B%E3%82%81%E6%96%B9/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"aiを使った副業の始め方完全ガイド2026年版月3万10万円を目指す\"\u003eAIを使った副業の始め方完全ガイド【2026年版・月3万〜10万円を目指す】\u003c/h1\u003e\n\u003cp\u003e「副業を始めたいけど、特別なスキルがない」「時間が限られている」——そんな人にとって、AIは今の時代における最大のレバレッジツールです。\u003c/p\u003e\n\u003cp\u003e2026年現在、AIを使いこなすことで、以前なら習得に数年かかっていたスキルが数週間でビジネスレベルに到達できるケースが増えています。本記事では、AI活用型の副業を現実的に始めるための完全ガイドをお届けします。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ai副業が今チャンスな理由\"\u003eAI副業が今「チャンス」な理由\u003c/h2\u003e\n\u003ch3 id=\"参入障壁が下がった\"\u003e参入障壁が下がった\u003c/h3\u003e\n\u003cp\u003eライティング、デザイン、プログラミング——いずれもAIの登場で、素人でも一定の品質の成果物を短時間で作れるようになりました。\u003c/p\u003e\n\u003ch3 id=\"需要が急増している\"\u003e需要が急増している\u003c/h3\u003e\n\u003cp\u003e企業側でもAIを活用したコンテンツ制作・業務効率化の需要が爆発的に増えており、「AIを使ってくれる外注先」を積極的に探しています。\u003c/p\u003e\n\u003ch3 id=\"時間対収益が良い\"\u003e時間対収益が良い\u003c/h3\u003e\n\u003cp\u003eAIで作業時間が短縮されるため、従来の副業より時間効率が高い案件に取り組めます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ai副業の種類と月収目安\"\u003eAI副業の種類と月収目安\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e副業の種類\u003c/th\u003e\n          \u003cth\u003e月収目安（副業）\u003c/th\u003e\n          \u003cth\u003e難易度\u003c/th\u003e\n          \u003cth\u003e始めるまでの期間\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAIライティング\u003c/td\u003e\n          \u003ctd\u003e3〜15万円\u003c/td\u003e\n          \u003ctd\u003e低〜中\u003c/td\u003e\n          \u003ctd\u003e1〜2週間\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAI画像・デザイン制作\u003c/td\u003e\n          \u003ctd\u003e2〜10万円\u003c/td\u003e\n          \u003ctd\u003e低〜中\u003c/td\u003e\n          \u003ctd\u003e1〜3週間\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAIを使ったWebサイト制作\u003c/td\u003e\n          \u003ctd\u003e5〜30万円/件\u003c/td\u003e\n          \u003ctd\u003e中\u003c/td\u003e\n          \u003ctd\u003e1〜2ヶ月\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e動画編集（AI補助）\u003c/td\u003e\n          \u003ctd\u003e3〜20万円\u003c/td\u003e\n          \u003ctd\u003e中\u003c/td\u003e\n          \u003ctd\u003e2〜4週間\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAIプロンプトエンジニアリング\u003c/td\u003e\n          \u003ctd\u003e5〜20万円\u003c/td\u003e\n          \u003ctd\u003e中〜高\u003c/td\u003e\n          \u003ctd\u003e1〜2ヶ月\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAIコンサルティング\u003c/td\u003e\n          \u003ctd\u003e10〜50万円\u003c/td\u003e\n          \u003ctd\u003e高\u003c/td\u003e\n          \u003ctd\u003e3〜6ヶ月\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"副業1aiライティング最も始めやすい\"\u003e副業1：AIライティング（最も始めやすい）\u003c/h2\u003e\n\u003ch3 id=\"仕事内容\"\u003e仕事内容\u003c/h3\u003e\n\u003cp\u003e企業のブログ記事、LP文章、商品説明文、メルマガなどを執筆します。AIで下書きを作り、自分で編集・品質チェックして納品します。\u003c/p\u003e\n\u003ch3 id=\"始め方\"\u003e始め方\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eステップ1：クラウドソーシングに登録\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eクラウドワークス（crowdworks.jp）\u003c/li\u003e\n\u003cli\u003eランサーズ（lancers.jp）\u003c/li\u003e\n\u003cli\u003eココナラ（coconala.com）\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eステップ2：プロフィールを整える\u003c/strong\u003e\n「AIライティングツールを活用した高速・高品質な記事作成が得意」という特徴を明示します。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eステップ3：最初の3件は格安で受ける\u003c/strong\u003e\n実績・レビューゼロから始める場合、最初の数件は相場の半額程度で受けて実績を積みます。\u003c/p\u003e\n\u003ch3 id=\"単価の目安\"\u003e単価の目安\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSEO記事（1,000〜2,000字）：2,000〜5,000円\u003c/li\u003e\n\u003cli\u003eLP・セールス文章：10,000〜50,000円\u003c/li\u003e\n\u003cli\u003e専門性の高い技術記事：5,000〜15,000円/本\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"注意点\"\u003e注意点\u003c/h3\u003e\n\u003cp\u003eAIの出力をそのまま納品するのはNG。必ずファクトチェック、独自性の追加、表現の最終調整を行ってください。クライアントからの信頼がすべての副業です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"副業2ai画像デザイン制作\"\u003e副業2：AI画像・デザイン制作\u003c/h2\u003e\n\u003ch3 id=\"仕事内容-1\"\u003e仕事内容\u003c/h3\u003e\n\u003cp\u003eMidjourney、DALL-E、Stable Diffusionなどを使い、ブログのサムネイル、SNS投稿画像、商品画像などを制作します。\u003c/p\u003e\n\u003ch3 id=\"強みになるスキルの組み合わせ\"\u003e強みになるスキルの組み合わせ\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAI画像生成 + Canvaでの編集・仕上げ\u003c/li\u003e\n\u003cli\u003eAI生成 + Photoshopでの後処理\u003c/li\u003e\n\u003cli\u003eAIで複数案を作り、クライアントに選ばせる\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"始め方-1\"\u003e始め方\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eMidjourneyの無料トライアルまたは月額10ドルプランで練習\u003c/li\u003e\n\u003cli\u003eポートフォリオとして10〜20点の作品を作る\u003c/li\u003e\n\u003cli\u003eランサーズ・ococonaラでサービスを出品\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"稼ぎ方のポイント\"\u003e稼ぎ方のポイント\u003c/h3\u003e\n\u003cp\u003e「アイコン制作」「YouTube サムネイル」「プロフィール画像」など、ニーズが明確で小規模な案件から始めると受注しやすいです。\u003c/p\u003e","title":"AIを使った副業の始め方完全ガイド【2026年版・月3万〜10万円を目指す】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nAI 副業 稼ぐ 方法完全ガイド【2026年最新版】 「AIを使って副業で稼ぐ」——2年前まではSF的な話でしたが、2026年現在これは現実です。ChatGPT・Claude・Gemini・Midjourneyなどの生成AIの急速な進化により、AIツールを活用した副業の市場は爆発的に拡大しています。\n重要なのは、**「AIに仕事を奪われる」のではなく「AIを使いこなす人間が市場価値を高める」**という視点です。AI活用スキルを持つフリーランスは、持たない人と比べて作業効率が3〜10倍になり、同じ時間でより多くの収入を得られます。\nこの記事でわかること：\n2026年最新のAI副業ジャンル15選と月収目安 ChatGPT・Claude・Midjourneyの具体的な活用法 AI副業で稼ぐためのスキル習得ロードマップ AI副業の注意点（著作権・倫理・品質管理） 初心者が最初に試すべきAI副業TOP3 AI副業とは？基本を理解する 定義・仕組み AI副業とは、ChatGPT・Claude・Gemini（テキスト生成AI）、Midjourney・DALL-E（画像生成AI）、Suno・Udio（音楽生成AI）、Runway・Pika（動画生成AI）などの生成AIツールを活用して、成果物を作成・販売・提供する副業の総称です。\n2026年現在の主なAIツールカテゴリー：\nAIカテゴリー 代表ツール 活用副業 テキスト生成 ChatGPT、Claude、Gemini ライティング、コンテンツ制作、要約、翻訳 画像生成 Midjourney、DALL-E 3、Stable Diffusion イラスト販売、バナー制作、商品画像 動画生成 Runway Gen-3、Pika、Sora 動画制作、広告動画 音楽生成 Suno、Udio BGM販売、効果音制作 コード生成 GitHub Copilot、Cursor、Claude アプリ開発、自動化ツール 音声合成 ElevenLabs、VOICEVOX ナレーション、Podcast メリット・デメリット AI副業のメリット\n作業効率が劇的に上がる: 従来10時間かかった作業が1〜2時間で完了 専門スキルなしで高品質な成果物を作れる: デザイン経験がなくてもAIが代替 スケールしやすい: 一度仕組みを作ればレバレッジが効く 市場が急成長中: AI活用案件の需要は2026年も前年比150%以上で増加中 参入障壁が低い: 月数千円〜1万円のAIツール費用で始められる AI副業のデメリット・注意点\nAIの出力そのままでは品質が不安定: 必ず人間によるレビュー・編集が必要 著作権の問題がある: 生成された画像・テキストの著作権は未整備な部分がある 競合が増えている: 参入しやすい分、差別化が重要 ツールコストが発生する: ChatGPT Plus(月3,000円)、Midjourney(月約3,500円)等 AI出力の事実確認が必要: ハルシネーション（誤情報生成）に注意 AI副業 おすすめ15選 月収目安付き カテゴリー1：コンテンツ制作系AI副業 AI副業 月収目安 必要ツール 難易度 AIライティング代行 5万〜30万円 ChatGPT/Claude ★★★☆☆ AIブログ記事制作・納品 3万〜20万円 ChatGPT/Claude ★★☆☆☆ AI翻訳・ローカライゼーション 3万〜15万円 DeepL/ChatGPT ★★☆☆☆ AIプレゼン資料作成 5万〜20万円 ChatGPT + Gamma ★★★☆☆ AI動画スクリプト作成 3万〜15万円 ChatGPT ★★☆☆☆ AIライティング代行は最も需要が多いAI副業です。クライアントから記事テーマ・キーワードを受け取り、AI（ChatGPT・Claude）で構成・下書きを作成し、人間が事実確認・編集・リライトして納品します。AIなしのライターと比べて1記事の作業時間を70〜80%削減できます。\nカテゴリー2：画像・デザイン系AI副業 AI副業 月収目安 必要ツール 難易度 AI画像生成・販売（ストックフォト） 1万〜10万円 Midjourney/DALL-E ★★☆☆☆ AIイラスト・キャラクター制作 5万〜30万円 Midjourney/SD ★★★☆☆ AIバナー・広告画像制作 5万〜25万円 Midjourney + Canva ★★★☆☆ AIアバター・プロフィール画像 3万〜15万円 Midjourney ★★☆☆☆ BOOTH・Creemaでのデジタル素材販売 1万〜20万円 Midjourney/SD ★★☆☆☆ BOOTH・Creemaでのデジタル素材販売は、Midjourneyで生成した画像素材・パターン・テクスチャを1セット数百〜数千円でデジタル販売する副業です。一度作成すれば何度でも販売できるストック型ビジネスで、寝ている間も収入が入る「資産型」副業です。\n詳しくはこちら カテゴリー3：AIシステム・ツール系副業 AI副業 月収目安 必要ツール 難易度 AIプロンプトエンジニアリング 5万〜50万円 ChatGPT/Claude API ★★★★☆ ChatGPTカスタマイズ・GPTs構築 10万〜60万円 ChatGPT Plus ★★★★☆ AI業務自動化（RPA×AI） 15万〜100万円 Python+LLM API ★★★★★ AIチャットボット構築・販売 10万〜80万円 ChatGPT API ★★★★☆ AI活用コンサルティング 20万〜150万円 各種AI ★★★★★ AIプロンプトエンジニアリングは2026年最も注目されているAI副業の一つです。企業がAIを業務に活用する際に「どんなプロンプト（指示文）を与えれば望む結果が得られるか」を設計・最適化する専門職です。ChatGPTやClaudeの使いこなし経験があれば参入できます。\nカテゴリー4：教育・情報販売系AI副業 AI副業 月収目安 必要ツール 難易度 AI活用セミナー・オンライン講座 10万〜100万円 各種AI ★★★★☆ AIツール解説ブログ・YouTube 1万〜30万円 各種AI ★★★☆☆ AI活用マニュアル・テンプレート販売 1万〜20万円 ChatGPT ★★★☆☆ AI副業を始めるためのロードマップ 初心者向け：最初に試すべきAI副業TOP3 第1位：AIライティング（記事・コンテンツ制作）\n必要投資：ChatGPT Plus 月3,000円 収益化まで：2〜4週間 手順：1) ChatGPT Plusに登録 → 2) クラウドワークス/ランサーズでライティング案件に応募 → 3) AIで下書き作成・人間でリライト・納品 第2位：AIバナー・SNS画像制作（Canva AI）\n必要投資：Canva Pro 月1,500円（AI機能含む） 収益化まで：1〜2週間 手順：1) Canva Proに登録 → 2) クラウドワークスでバナー制作案件に応募 → 3) Canva AIで画像生成・編集・納品 第3位：AIプロンプト・テンプレート販売（BOOTH）\n必要投資：ChatGPT Plus 月3,000円 + BOOTH出店（無料） 収益化まで：1〜4週間 手順：1) ChatGPTでビジネス向けプロンプトセットを作成 → 2) BOOTHでデジタル商品として出品 → 3) SNSで告知 スキル習得ロードマップ（3ヶ月計画） 1ヶ月目：AIツールの基本習得\nChatGPT Plusに登録し毎日使う プロンプトの基本（役割設定・条件設定・出力形式の指定）を学ぶ Midjourneyの基本コマンドを習得 2ヶ月目：初収益を上げる\nクラウドワークスでAI活用案件に応募（AIライティング・バナー制作） BOOTHでプロンプトセットを出品 初月収1万〜3万円を目標にする 3ヶ月目：専門特化と単価アップ\n得意ジャンル（法律・医療・IT・マーケティング等）に特化したAIライティングへ移行 ChatGPT APIを使った簡単な自動化ツールを学ぶ 月収5万〜10万円を目標にする AI副業の注意点 チェックポイント AI副業で必ず理解しておくべき注意点：\n著作権について\n日本では現時点でAI生成コンテンツの著作権保護は人間の創作物と異なる扱い 納品物にAIを使ったことをクライアントに開示するかどうかを事前に確認 Midjourneyなど一部ツールでは利用規約で商用利用の条件あり（必ず規約を確認） 品質管理について\nAI出力を事実確認なしでそのまま納品しない（ハルシネーション対策） 専門知識が必要な分野（医療・法律・金融）では専門家に確認を取る クライアントが求める品質水準を事前に明確にする AIツールのコスト管理\nツール 月額コスト（2026年5月時点） ChatGPT Plus 約3,000円 Claude Pro 約3,000円 Midjourney Standard 約3,500円 Canva Pro 約1,500円 Notion AI 約1,500円（Notion Plus含む） 合計（フル活用） 月約12,500円 副業収入がAIツール費用を上回るよう、費用対効果を月次で確認しましょう。\nよくある失敗 失敗例1: AI出力をそのまま納品する\nChatGPTの出力を全く編集せずに納品すると、クライアントからの評価が下がり、後にAI生成であることが発覚して返金・トラブルになることがあります。必ず人間の目でレビューし、事実確認・文体調整・オリジナリティ追加を行いましょう。\n失敗例2: 全てのAIツールを一度に使おうとする\n最初から多数のAIツールを試しすぎると、どれも中途半端になります。まずChatGPT一つを完全に使いこなすことから始めましょう。\n失敗例3: AI副業の倫理・透明性を軽視する\n「AIを使ったことを隠せば高く売れる」という考えは長期的に信頼を損ないます。AI活用を強みとして正直に伝え、「AIを使いこなして高品質・高速納品できる」というポジショニングをとる方が持続的に稼げます。\nよくある質問（FAQ） Q1. AIを使えば副業初心者でも月10万円稼げますか？\nA. 可能ですが、3〜6ヶ月の習得期間と継続的な努力が必要です。AIはツールであり、それを活用するための基本的なライティング・デザイン・プロジェクト管理スキルも必要です。\nQ2. プログラミング知識がなくてもAI副業はできますか？\nA. はい、ほとんどのAI副業はプログラミング不要です。AIライティング・画像生成・プロンプト販売はノーコードで始められます。\nQ3. AI生成コンテンツを売っても法律的に問題ありませんか？\nA. 現時点の日本の法律では、AI生成コンテンツの販売自体は違法ではありません。ただし、利用したAIツールの利用規約（商用利用の可否）を必ず確認してください。\nQ4. どのAIツールから始めればいいですか？\nA. テキスト系副業を目指すなら「ChatGPT Plus」、画像系なら「Midjourney」から始めることをおすすめします。両方とも月3,000〜3,500円で試すことができます。\nQ5. AIを使ったWebライティングは検索エンジン（Google）にバレますか？\nA. GoogleはAI生成コンテンツを自動的に排除しているわけではありませんが、価値・独自性のないコンテンツは評価されません。AIの出力に人間の経験・専門知識・独自の視点を加えることが、SEO上も品質上も重要です。\nQ6. AI副業で稼いだ場合、確定申告は必要ですか？\nA. 副業所得が年間20万円を超える場合、確定申告が必要です。AIツール費用（ChatGPT Plus等）は経費として計上できます。\nQ7. 2026年以降もAI副業の需要は続きますか？\nA. 生成AIの普及が進むほど、「AIを使いこなして成果物を作れる人材」への需要はむしろ増加します。2026〜2030年は特にAIエージェント活用・マルチモーダルAI活用のスキルを持つフリーランスへの需要が急増すると予測されています。\nAI副業で得た収入の確定申告には**freee会計（無料トライアルあり） **が便利。収支管理から申告書作成まで一括対応できます。\nまとめ・行動の呼びかけ AI副業は2026年最も成長しているフリーランス市場の一つです。ChatGPT Plusに登録し、まず「AIライティング」か「AI画像生成」のどちらかで初収益を上げることから始めましょう。AIを「仕事の相棒」として使いこなすスキルは、これからの時代の最も強力な武器になります。今日がそのスタートの日です。\n副業の始め方をもっと詳しく知りたい方は「副業完全ガイド2026年版 」をチェック！AI副業・確定申告・税金対策から副業プラットフォーム選びまで一冊で完結します（¥1,280）。詳しくはこちら フリーランスとして独立を考えている方は「フリーランス完全スタートキット 」がおすすめです。開業届・税務・単価交渉・AI活用まで独立に必要なすべてが詰まっています（¥980）。\n転職でキャリアを変えることも考えている方は「転職面接完全対策キット 」もぜひご覧ください。AI時代の転職に必要な自己PRから面接対策まで網羅しています（¥1,280）。\n※本記事は情報提供を目的としています。税務に関する判断は税理士等の専門家にご相談ください。AIツールの利用規約は各サービスのウェブサイトで必ずご確認ください。\n※本記事にはアフィリエイト広告が含まれています。\n関連ツール 副業収入の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド あわせて読みたい AIを使った副業の始め方完全ガイド【2026年版・月3万〜10万円を目指す】 副業おすすめ在宅スキルなし完全ガイド2026年版 副業始め方 初心者向け完全ガイド2026年最新版 ","permalink":"https://productivity-works.com/ja/posts/ai-%E5%89%AF%E6%A5%AD-%E7%A8%BC%E3%81%90-%E6%96%B9%E6%B3%95-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"ai-副業-稼ぐ-方法完全ガイド2026年最新版\"\u003eAI 副業 稼ぐ 方法完全ガイド【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「AIを使って副業で稼ぐ」——2年前まではSF的な話でしたが、2026年現在これは現実です。ChatGPT・Claude・Gemini・Midjourneyなどの生成AIの急速な進化により、AIツールを活用した副業の市場は爆発的に拡大しています。\u003c/p\u003e\n\u003cp\u003e重要なのは、**「AIに仕事を奪われる」のではなく「AIを使いこなす人間が市場価値を高める」**という視点です。AI活用スキルを持つフリーランスは、持たない人と比べて作業効率が3〜10倍になり、同じ時間でより多くの収入を得られます。\u003c/p\u003e\n\u003cp\u003eこの記事でわかること：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e2026年最新のAI副業ジャンル15選と月収目安\u003c/li\u003e\n\u003cli\u003eChatGPT・Claude・Midjourneyの具体的な活用法\u003c/li\u003e\n\u003cli\u003eAI副業で稼ぐためのスキル習得ロードマップ\u003c/li\u003e\n\u003cli\u003eAI副業の注意点（著作権・倫理・品質管理）\u003c/li\u003e\n\u003cli\u003e初心者が最初に試すべきAI副業TOP3\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"ai副業とは基本を理解する\"\u003eAI副業とは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003eAI副業とは、ChatGPT・Claude・Gemini（テキスト生成AI）、Midjourney・DALL-E（画像生成AI）、Suno・Udio（音楽生成AI）、Runway・Pika（動画生成AI）などの生成AIツールを活用して、成果物を作成・販売・提供する副業の総称です。\u003c/p\u003e\n\u003cp\u003e2026年現在の主なAIツールカテゴリー：\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eAIカテゴリー\u003c/th\u003e\n          \u003cth\u003e代表ツール\u003c/th\u003e\n          \u003cth\u003e活用副業\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eテキスト生成\u003c/td\u003e\n          \u003ctd\u003eChatGPT、Claude、Gemini\u003c/td\u003e\n          \u003ctd\u003eライティング、コンテンツ制作、要約、翻訳\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e画像生成\u003c/td\u003e\n          \u003ctd\u003eMidjourney、DALL-E 3、Stable Diffusion\u003c/td\u003e\n          \u003ctd\u003eイラスト販売、バナー制作、商品画像\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e動画生成\u003c/td\u003e\n          \u003ctd\u003eRunway Gen-3、Pika、Sora\u003c/td\u003e\n          \u003ctd\u003e動画制作、広告動画\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e音楽生成\u003c/td\u003e\n          \u003ctd\u003eSuno、Udio\u003c/td\u003e\n          \u003ctd\u003eBGM販売、効果音制作\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eコード生成\u003c/td\u003e\n          \u003ctd\u003eGitHub Copilot、Cursor、Claude\u003c/td\u003e\n          \u003ctd\u003eアプリ開発、自動化ツール\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e音声合成\u003c/td\u003e\n          \u003ctd\u003eElevenLabs、VOICEVOX\u003c/td\u003e\n          \u003ctd\u003eナレーション、Podcast\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eAI副業のメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e作業効率が劇的に上がる\u003c/strong\u003e: 従来10時間かかった作業が1〜2時間で完了\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e専門スキルなしで高品質な成果物を作れる\u003c/strong\u003e: デザイン経験がなくてもAIが代替\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eスケールしやすい\u003c/strong\u003e: 一度仕組みを作ればレバレッジが効く\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e市場が急成長中\u003c/strong\u003e: AI活用案件の需要は2026年も前年比150%以上で増加中\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e参入障壁が低い\u003c/strong\u003e: 月数千円〜1万円のAIツール費用で始められる\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAI副業のデメリット・注意点\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eAIの出力そのままでは品質が不安定\u003c/strong\u003e: 必ず人間によるレビュー・編集が必要\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e著作権の問題がある\u003c/strong\u003e: 生成された画像・テキストの著作権は未整備な部分がある\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e競合が増えている\u003c/strong\u003e: 参入しやすい分、差別化が重要\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eツールコストが発生する\u003c/strong\u003e: ChatGPT Plus(月3,000円)、Midjourney(月約3,500円)等\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAI出力の事実確認が必要\u003c/strong\u003e: ハルシネーション（誤情報生成）に注意\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"ai副業-おすすめ15選-月収目安付き\"\u003eAI副業 おすすめ15選 月収目安付き\u003c/h2\u003e\n\u003ch3 id=\"カテゴリー1コンテンツ制作系ai副業\"\u003eカテゴリー1：コンテンツ制作系AI副業\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eAI副業\u003c/th\u003e\n          \u003cth\u003e月収目安\u003c/th\u003e\n          \u003cth\u003e必要ツール\u003c/th\u003e\n          \u003cth\u003e難易度\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAIライティング代行\u003c/td\u003e\n          \u003ctd\u003e5万〜30万円\u003c/td\u003e\n          \u003ctd\u003eChatGPT/Claude\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAIブログ記事制作・納品\u003c/td\u003e\n          \u003ctd\u003e3万〜20万円\u003c/td\u003e\n          \u003ctd\u003eChatGPT/Claude\u003c/td\u003e\n          \u003ctd\u003e★★☆☆☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAI翻訳・ローカライゼーション\u003c/td\u003e\n          \u003ctd\u003e3万〜15万円\u003c/td\u003e\n          \u003ctd\u003eDeepL/ChatGPT\u003c/td\u003e\n          \u003ctd\u003e★★☆☆☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAIプレゼン資料作成\u003c/td\u003e\n          \u003ctd\u003e5万〜20万円\u003c/td\u003e\n          \u003ctd\u003eChatGPT + Gamma\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAI動画スクリプト作成\u003c/td\u003e\n          \u003ctd\u003e3万〜15万円\u003c/td\u003e\n          \u003ctd\u003eChatGPT\u003c/td\u003e\n          \u003ctd\u003e★★☆☆☆\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eAIライティング代行\u003c/strong\u003eは最も需要が多いAI副業です。クライアントから記事テーマ・キーワードを受け取り、AI（ChatGPT・Claude）で構成・下書きを作成し、人間が事実確認・編集・リライトして納品します。AIなしのライターと比べて1記事の作業時間を70〜80%削減できます。\u003c/p\u003e","title":"AI副業で稼ぐ方法2026年最新完全ガイド"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nAIで高品質な文章を作成するコツ7つ【プロが使うテクニック】 「AIに書かせると、なんとなく薄い文章しか出てこない」「ちゃんと使いたいのに、イマイチな結果になる」——そういった悩みを持っている人は多いです。\n原因のほとんどは、AIの使い方ではなく「指示の出し方」にあります。適切な指示を出すだけで、AIが書く文章のクオリティは劇的に変わります。本記事では、すぐに使えるコツを7つに絞って解説します。\nなぜAIの文章は「それっぽいだけ」になるのか AIは「確率的に次の言葉を予測する」仕組みで動いています。指示が曖昧だと、もっとも「無難な」文章を生成しようとします。結果、当たり障りのない内容になりがちです。\nコツは、AIが「無難な答え」を出す余地をなくすこと。具体的な情報や制約を与えるほど、出力の質は上がります。\nコツ1：読者像を具体的に指定する 最も効果が高いコツは「誰のための文章か」を明確にすることです。\n比較してみましょう\nNG指示：「ダイエットについての記事を書いてください」\nOK指示：「30代の働く女性で、運動が苦手でも続けられる食事制限の方法を知りたい人向けに、記事を書いてください」\n読者像が明確になるだけで、文章のトーン、選ぶ言葉、例示の内容がすべて変わります。\n指定できる読者属性の例\n年齢・性別・職業 知識レベル（初心者 / 中級者 / 専門家） 悩みや目的 読む文脈（スマホで通勤中 / 仕事の合間に） コツ2：文章の目的と求めるアクションを明示する 文章にはすべて「目的」があります。AIにもそれを伝えましょう。\n「読んだ人に○○を試してもらうための記事」 「サービスへの申し込みを促すランディングページ」 「不安を解消して購入を後押しするメール」 目的が明確であれば、AIは逆算して適切な文章構成を選んでくれます。「読んだあとに何をしてほしいか」を最初に伝えるのがポイントです。\nコツ3：文章のトーンとスタイルを指定する 「丁寧に書いて」だけでは不十分です。以下のような形で具体的に指定しましょう。\nトーンの指定例\n「フレンドリーだが、軽すぎない丁寧語で」 「専門用語は使わず、中学生でも理解できる言葉で」 「具体的なデータや数字を積極的に使い、説得力を持たせて」 さらに「参考にしてほしい文体のサンプル」を貼り付けると精度が上がります。例えば既存の記事の一節を見せて「このトーンに合わせて書いてください」と言うだけで、トーンが揃います。\nコツ4：構成（アウトライン）を先に作らせる 長い文章を一発で書かせようとすると、後半が雑になったり、構成がバラバラになったりします。\n2ステップ方式が効果的\nステップ1：「まず記事の構成（見出しのみ）を作ってください」 ステップ2：構成を確認・修正したあとで「では各セクションを書いてください」\n構成の段階で「このH2は不要」「ここにH3を追加したい」と調整できるので、最終的な完成度が上がります。全部一気に書かせるより、結果的に速いです。\nコツ5：禁止事項を指定する 「やってほしいこと」だけでなく「やってほしくないこと」も明示すると、出力が締まります。\nよく使う禁止指定\n「結論をぼかさないでください」 「『〜と言えるでしょう』のような曖昧な表現は使わないでください」 「箇条書きだけで済ませず、各項目に説明文をつけてください」 「AIが書いたと分かるような定型文（例：『本記事では』『いかがでしたか』）は使わないでください」 特に最後の指定は効果大です。AIの定型フレーズを排除するだけで、文章の印象がガラリと変わります。\nコツ6：事実・データ・体験談を自分で補足する AIは独自の情報を持っていません。出てくるのは「それらしい一般論」です。\n文章に説得力とオリジナリティを持たせるには、以下を自分で追加することが不可欠です。\n実際の数字・統計データ（一次ソースから引用） 自分や顧客の体験談・事例 競合との具体的な比較 地域・業界特有の事情 AIに骨格を作らせて、自分が肉を付ける——この役割分担が、高品質な文章を効率よく作るための基本形です。\nコツ7：一度に完成させようとしない 「完璧な文章を一発で出してもらおう」という考え方を捨てましょう。\nプロのライターでも、初稿は粗く書いて、編集で磨きます。AIも同じです。最初の出力はドラフト。そこから以下のプロセスで磨きます。\n全体構成の確認・修正 セクションごとのブラッシュアップ（「ここをもっと具体的に」「この段落を短くして」等） 自分でファクトチェック・情報補完 語尾・表現の最終調整 AIとの「対話的な編集」に慣れると、従来の文章作成の2〜3倍の速度で高品質な文章が作れるようになります。\nライティングスキルで副業・転職の選択肢を広げる AIを活用した文章作成力は、Webライター・コンテンツマーケター・広報など多くの職種で即戦力として評価されます。新しいキャリアの可能性を探してみましょう。dodaで求人を探す\nまとめ：AIは「指示を磨くほど賢くなる」 AIの文章クオリティは、プロンプトで決まります。読者像・目的・トーン・構成・禁止事項——この5つを指定するだけで、出力は別物になります。\n最初は手間に感じるかもしれませんが、一度良いプロンプトを作ってしまえばテンプレートとして使い回せます。文章作成の型を持つことが、AI時代の生産性向上の鍵です。\n関連記事\nすぐ使えるChatGPTプロンプトテンプレート20選 ChatGPTを仕事で使う具体的な活用法10選 AIを使ったブログ記事の書き方入門 関連ツール 文字数・単語数をリアルタイムでカウント → 文字数カウンター テキストの差分を検出 → テキスト比較ツール フリーランスの適正時給を計算 → フリーランス報酬計算ツール 月々の支出バランスを見直す → 家計簿シミュレーター マークダウンエディターが必要？ → マークダウンプレビュー — リアルタイムでプレビュー\n関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/posts/ai-%E6%96%87%E7%AB%A0%E4%BD%9C%E6%88%90-%E3%82%B3%E3%83%84/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"aiで高品質な文章を作成するコツ7つプロが使うテクニック\"\u003eAIで高品質な文章を作成するコツ7つ【プロが使うテクニック】\u003c/h1\u003e\n\u003cp\u003e「AIに書かせると、なんとなく薄い文章しか出てこない」「ちゃんと使いたいのに、イマイチな結果になる」——そういった悩みを持っている人は多いです。\u003c/p\u003e\n\u003cp\u003e原因のほとんどは、AIの使い方ではなく「指示の出し方」にあります。適切な指示を出すだけで、AIが書く文章のクオリティは劇的に変わります。本記事では、すぐに使えるコツを7つに絞って解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"なぜaiの文章はそれっぽいだけになるのか\"\u003eなぜAIの文章は「それっぽいだけ」になるのか\u003c/h2\u003e\n\u003cp\u003eAIは「確率的に次の言葉を予測する」仕組みで動いています。指示が曖昧だと、もっとも「無難な」文章を生成しようとします。結果、当たり障りのない内容になりがちです。\u003c/p\u003e\n\u003cp\u003eコツは、AIが「無難な答え」を出す余地をなくすこと。具体的な情報や制約を与えるほど、出力の質は上がります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"コツ1読者像を具体的に指定する\"\u003eコツ1：読者像を具体的に指定する\u003c/h2\u003e\n\u003cp\u003e最も効果が高いコツは「誰のための文章か」を明確にすることです。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e比較してみましょう\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eNG指示：「ダイエットについての記事を書いてください」\u003c/p\u003e\n\u003cp\u003eOK指示：「30代の働く女性で、運動が苦手でも続けられる食事制限の方法を知りたい人向けに、記事を書いてください」\u003c/p\u003e\n\u003cp\u003e読者像が明確になるだけで、文章のトーン、選ぶ言葉、例示の内容がすべて変わります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e指定できる読者属性の例\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e年齢・性別・職業\u003c/li\u003e\n\u003cli\u003e知識レベル（初心者 / 中級者 / 専門家）\u003c/li\u003e\n\u003cli\u003e悩みや目的\u003c/li\u003e\n\u003cli\u003e読む文脈（スマホで通勤中 / 仕事の合間に）\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"コツ2文章の目的と求めるアクションを明示する\"\u003eコツ2：文章の目的と求めるアクションを明示する\u003c/h2\u003e\n\u003cp\u003e文章にはすべて「目的」があります。AIにもそれを伝えましょう。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e「読んだ人に○○を試してもらうための記事」\u003c/li\u003e\n\u003cli\u003e「サービスへの申し込みを促すランディングページ」\u003c/li\u003e\n\u003cli\u003e「不安を解消して購入を後押しするメール」\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e目的が明確であれば、AIは逆算して適切な文章構成を選んでくれます。「読んだあとに何をしてほしいか」を最初に伝えるのがポイントです。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"コツ3文章のトーンとスタイルを指定する\"\u003eコツ3：文章のトーンとスタイルを指定する\u003c/h2\u003e\n\u003cp\u003e「丁寧に書いて」だけでは不十分です。以下のような形で具体的に指定しましょう。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eトーンの指定例\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e「フレンドリーだが、軽すぎない丁寧語で」\u003c/li\u003e\n\u003cli\u003e「専門用語は使わず、中学生でも理解できる言葉で」\u003c/li\u003e\n\u003cli\u003e「具体的なデータや数字を積極的に使い、説得力を持たせて」\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eさらに「参考にしてほしい文体のサンプル」を貼り付けると精度が上がります。例えば既存の記事の一節を見せて「このトーンに合わせて書いてください」と言うだけで、トーンが揃います。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"コツ4構成アウトラインを先に作らせる\"\u003eコツ4：構成（アウトライン）を先に作らせる\u003c/h2\u003e\n\u003cp\u003e長い文章を一発で書かせようとすると、後半が雑になったり、構成がバラバラになったりします。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2ステップ方式が効果的\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eステップ1：「まず記事の構成（見出しのみ）を作ってください」\nステップ2：構成を確認・修正したあとで「では各セクションを書いてください」\u003c/p\u003e\n\u003cp\u003e構成の段階で「このH2は不要」「ここにH3を追加したい」と調整できるので、最終的な完成度が上がります。全部一気に書かせるより、結果的に速いです。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"コツ5禁止事項を指定する\"\u003eコツ5：禁止事項を指定する\u003c/h2\u003e\n\u003cp\u003e「やってほしいこと」だけでなく「やってほしくないこと」も明示すると、出力が締まります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eよく使う禁止指定\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e「結論をぼかさないでください」\u003c/li\u003e\n\u003cli\u003e「『〜と言えるでしょう』のような曖昧な表現は使わないでください」\u003c/li\u003e\n\u003cli\u003e「箇条書きだけで済ませず、各項目に説明文をつけてください」\u003c/li\u003e\n\u003cli\u003e「AIが書いたと分かるような定型文（例：『本記事では』『いかがでしたか』）は使わないでください」\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e特に最後の指定は効果大です。AIの定型フレーズを排除するだけで、文章の印象がガラリと変わります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"コツ6事実データ体験談を自分で補足する\"\u003eコツ6：事実・データ・体験談を自分で補足する\u003c/h2\u003e\n\u003cp\u003eAIは独自の情報を持っていません。出てくるのは「それらしい一般論」です。\u003c/p\u003e\n\u003cp\u003e文章に説得力とオリジナリティを持たせるには、以下を自分で追加することが不可欠です。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e実際の数字・統計データ（一次ソースから引用）\u003c/li\u003e\n\u003cli\u003e自分や顧客の体験談・事例\u003c/li\u003e\n\u003cli\u003e競合との具体的な比較\u003c/li\u003e\n\u003cli\u003e地域・業界特有の事情\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAIに骨格を作らせて、自分が肉を付ける——この役割分担が、高品質な文章を効率よく作るための基本形です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"コツ7一度に完成させようとしない\"\u003eコツ7：一度に完成させようとしない\u003c/h2\u003e\n\u003cp\u003e「完璧な文章を一発で出してもらおう」という考え方を捨てましょう。\u003c/p\u003e\n\u003cp\u003eプロのライターでも、初稿は粗く書いて、編集で磨きます。AIも同じです。最初の出力はドラフト。そこから以下のプロセスで磨きます。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e全体構成の確認・修正\u003c/li\u003e\n\u003cli\u003eセクションごとのブラッシュアップ（「ここをもっと具体的に」「この段落を短くして」等）\u003c/li\u003e\n\u003cli\u003e自分でファクトチェック・情報補完\u003c/li\u003e\n\u003cli\u003e語尾・表現の最終調整\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eAIとの「対話的な編集」に慣れると、従来の文章作成の2〜3倍の速度で高品質な文章が作れるようになります。\u003c/p\u003e\n\u003chr\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eライティングスキルで副業・転職の選択肢を広げる\u003c/strong\u003e  AIを活用した文章作成力は、Webライター・コンテンツマーケター・広報など多くの職種で即戦力として評価されます。新しいキャリアの可能性を探してみましょう。\u003ca href=\"https://px.a8.net/svt/ejp?a8mat=3ZD3R9+DPXS1E+GDO+C03K1\" rel=\"nofollow\"\u003edodaで求人を探す\u003c/a\u003e\u003cimg border=\"0\" width=\"1\" height=\"1\" src=\"https://www12.a8.net/0.gif?a8mat=3ZD3R9+DPXS1E+GDO+C03K1\" alt=\"\"\u003e\u003c/p\u003e\u003c/blockquote\u003e\n\u003ch2 id=\"まとめaiは指示を磨くほど賢くなる\"\u003eまとめ：AIは「指示を磨くほど賢くなる」\u003c/h2\u003e\n\u003cp\u003eAIの文章クオリティは、プロンプトで決まります。読者像・目的・トーン・構成・禁止事項——この5つを指定するだけで、出力は別物になります。\u003c/p\u003e","title":"AIで高品質な文章を作成するコツ7つ【プロが使うテクニック】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n無料AI画像生成ツール比較2026年版【目的別おすすめランキング】 「AI画像生成を試してみたいけど、お金をかけたくない」「無料で使えるツールがいくつかあるけど、どれが一番使えるの？」\n2026年現在、AI画像生成ツールは急速に増え、品質も向上しています。本記事では、実際に各ツールを試したうえで、無料で使える主要ツールを徹底比較します。\n比較するAI画像生成ツール（2026年版） 今回比較するのは以下の7ツールです。\nAdobe Firefly DALL-E 3（ChatGPT経由） Stable Diffusion（AUTOMATIC1111 / ComfyUI） Bing Image Creator（Microsoft Designer） Canva AI（Magic Media） Leonardo.ai Playground AI 一覧比較表 ツール 無料枠 品質 日本語対応 商用利用 難易度 Adobe Firefly 月25クレジット ★★★★☆ ○ ○（要確認） 低 DALL-E 3 制限あり ★★★★☆ ○ ○ 低 Stable Diffusion 完全無料（ローカル） ★★★★★ △ ○ 高 Bing Image Creator 制限あり ★★★☆☆ ○ △ 低 Canva AI 月50回 ★★★☆☆ ○ ○ 低 Leonardo.ai 月150クレジット ★★★★☆ △ ○ 中 Playground AI 月500枚 ★★★☆☆ △ ○ 低〜中 各ツール詳細レビュー 1. Adobe Firefly こんな人におすすめ： ブログ・商用コンテンツに安心して使いたい人\nAdobeが提供するAI画像生成サービス。最大の特徴は「商用利用に配慮した学習データ」を使用している点です。著作権トラブルへの懸念が少なく、企業でも安心して使えます。\n主な機能\nテキストから画像生成（Text to Image） 既存画像への要素追加（Generative Fill） テキストエフェクト（文字に質感を与える） 無料枠の詳細 Adobeアカウントがあれば月25クレジットまで無料。Creative Cloudサブスクライバーは追加クレジットあり。\n使用感 プロンプトは英語の方が精度が高いですが、日本語でも一定程度通ります。Photoshopとの統合が進んでおり、生成後の編集がシームレスです。\n2. DALL-E 3（ChatGPT経由） こんな人におすすめ： ChatGPTユーザーで手軽に試したい人\nOpenAIが開発したDALL-E 3は、ChatGPTのインターフェース経由で利用できます。プロンプトの言語理解力が高く、複雑な指示も正確に反映してくれます。\n強み\nテキストの指示通りに生成される精度が高い 複数オブジェクトの関係性（「Aの左にBがいる」など）を理解できる 日本語プロンプトで直接指示できる 制限 無料版ChatGPTでは1日に生成できる枚数に上限があります。大量に使いたい場合はChatGPT Plus（月20ドル）が必要です。\n3. Stable Diffusion（ローカル実行） こんな人におすすめ： 技術的なセットアップができる人、大量生成したい人\nオープンソースのAI画像生成モデル。自分のパソコン上で動かすため、生成枚数は完全に無制限です。\n圧倒的な強み\n生成枚数に制限なし カスタムモデルで特定のスタイルに特化できる 最も高い自由度（NSFW設定含む） デメリット\nセットアップにある程度の技術知識が必要 GPUを搭載したPC推奨（VRAM 8GB以上） Google Colabなどクラウドで動かす選択肢もあるが、操作が複雑 初心者向けには、ブラウザ上で使えるStable Diffusion系のサービス（後述のPlayground AI等）を利用するのが現実的です。\n4. Bing Image Creator（Microsoft Designer） こんな人におすすめ： Windowsユーザー、手軽に試したい入門者\nMicrosoftが提供する無料画像生成ツール。DALL-E 3を基盤としており、MicrosoftアカウントとBingにアクセスするだけで使えます。\n特徴\nセットアップ不要で最も手軽に試せる DALL-E 3ベースなので品質は高め 商用利用については規約の確認が必要 制限 最初に付与される「Boosts」がなくなると生成速度が遅くなります（毎月追加あり）。\n5. Canva AI（Magic Media） こんな人におすすめ： SNS投稿やデザイン素材を効率よく作りたい人\nCanvaのデザインエディタに統合されたAI画像生成機能。生成した画像をそのままCanvaのデザインに組み込めるため、SNS投稿やプレゼン資料の作成効率が高いです。\n強み\n画像生成とデザイン編集がシームレス SNSサイズの自動設定あり チームでの共有・編集が簡単 向いていない用途 写真のようなリアルな画像の生成や、複雑なプロンプトへの対応は他ツールに劣ります。\n6. Leonardo.ai こんな人におすすめ： ゲーム・アニメ系のイラストを作りたい人\nアニメ・ゲーム系のビジュアルに強いAI画像生成ツール。複数のモデルを切り替えられるため、求めるスタイルに合わせた調整ができます。\n無料枠 毎日150クレジットが付与され、リセットされます（毎日使えば月4,500クレジット相当）。これは他ツールと比較してかなり充実した無料枠です。\n7. Playground AI こんな人におすすめ： コストをかけずに大量生成したい人\n月500枚まで無料で生成できる太っ腹な無料枠が特徴。Stable DiffusionベースのモデルとDALL-Eモデルの両方を試せます。\n目的別おすすめツール ブログ・ビジネス用途（商用利用重視） 1位：Adobe Firefly → 2位：DALL-E 3 商用利用への配慮があり、品質も高い。\nSNS投稿・デザイン素材 1位：Canva AI → 2位：Leonardo.ai デザインツールとの一体化で作業が速い。\n大量生成・コスト最重視 1位：Stable Diffusion（ローカル） → 2位：Leonardo.ai\n初心者が最初に試す 1位：Bing Image Creator → 2位：DALL-E 3（ChatGPT経由） セットアップ不要ですぐ試せる。\nプロンプトの書き方：品質を上げる基本 どのツールを使うにしても、プロンプトの書き方で品質は大きく変わります。\n基本構造（英語推奨）\n[被写体の説明], [スタイル・画風], [照明・雰囲気], [カメラ設定], [品質指定] 例：ビジネス向けのプロフェッショナルな写真\nprofessional businesswoman working at a modern office desk, soft natural lighting, confident expression, high quality photography, 4k resolution, clean background, corporate style 日本語でも通るツールが増えましたが、英語の方が解釈の精度が高いツールが多いです。\nまとめ：まずFireflyかDALL-E 3から試す 商用利用を考えているならAdobe Firefly、手軽さ重視なら**Bing Image Creator（DALL-E 3）**から試すのがおすすめです。\n使い込むにつれてプロンプトの書き方が上達し、出力の質も向上します。最初の数枚が期待外れでも、試行錯誤を続けてください。\nAI画像生成を副業やフリーランスの仕事に活用する方が増えています。副業収入が発生したら、確定申告の準備も忘れずに。freee会計 なら副業・フリーランスの収入・経費を自動で記録し、青色申告・白色申告の書類もガイドに沿って簡単に作成できます。\n関連記事\n無料で使えるAIツールおすすめ15選 AIを使った副業の始め方完全ガイド AIで高品質な文章を作成するコツ7つ 関連ツール フリーランスの適正時給を計算 → フリーランス報酬計算ツール 月々の支出バランスを見直す → 家計簿シミュレーター 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド ","permalink":"https://productivity-works.com/ja/posts/ai-%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90-%E7%84%A1%E6%96%99/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"無料ai画像生成ツール比較2026年版目的別おすすめランキング\"\u003e無料AI画像生成ツール比較2026年版【目的別おすすめランキング】\u003c/h1\u003e\n\u003cp\u003e「AI画像生成を試してみたいけど、お金をかけたくない」「無料で使えるツールがいくつかあるけど、どれが一番使えるの？」\u003c/p\u003e\n\u003cp\u003e2026年現在、AI画像生成ツールは急速に増え、品質も向上しています。本記事では、実際に各ツールを試したうえで、無料で使える主要ツールを徹底比較します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"比較するai画像生成ツール2026年版\"\u003e比較するAI画像生成ツール（2026年版）\u003c/h2\u003e\n\u003cp\u003e今回比較するのは以下の7ツールです。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eAdobe Firefly\u003c/li\u003e\n\u003cli\u003eDALL-E 3（ChatGPT経由）\u003c/li\u003e\n\u003cli\u003eStable Diffusion（AUTOMATIC1111 / ComfyUI）\u003c/li\u003e\n\u003cli\u003eBing Image Creator（Microsoft Designer）\u003c/li\u003e\n\u003cli\u003eCanva AI（Magic Media）\u003c/li\u003e\n\u003cli\u003eLeonardo.ai\u003c/li\u003e\n\u003cli\u003ePlayground AI\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"一覧比較表\"\u003e一覧比較表\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eツール\u003c/th\u003e\n          \u003cth\u003e無料枠\u003c/th\u003e\n          \u003cth\u003e品質\u003c/th\u003e\n          \u003cth\u003e日本語対応\u003c/th\u003e\n          \u003cth\u003e商用利用\u003c/th\u003e\n          \u003cth\u003e難易度\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAdobe Firefly\u003c/td\u003e\n          \u003ctd\u003e月25クレジット\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n          \u003ctd\u003e○\u003c/td\u003e\n          \u003ctd\u003e○（要確認）\u003c/td\u003e\n          \u003ctd\u003e低\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eDALL-E 3\u003c/td\u003e\n          \u003ctd\u003e制限あり\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n          \u003ctd\u003e○\u003c/td\u003e\n          \u003ctd\u003e○\u003c/td\u003e\n          \u003ctd\u003e低\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eStable Diffusion\u003c/td\u003e\n          \u003ctd\u003e完全無料（ローカル）\u003c/td\u003e\n          \u003ctd\u003e★★★★★\u003c/td\u003e\n          \u003ctd\u003e△\u003c/td\u003e\n          \u003ctd\u003e○\u003c/td\u003e\n          \u003ctd\u003e高\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eBing Image Creator\u003c/td\u003e\n          \u003ctd\u003e制限あり\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n          \u003ctd\u003e○\u003c/td\u003e\n          \u003ctd\u003e△\u003c/td\u003e\n          \u003ctd\u003e低\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eCanva AI\u003c/td\u003e\n          \u003ctd\u003e月50回\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n          \u003ctd\u003e○\u003c/td\u003e\n          \u003ctd\u003e○\u003c/td\u003e\n          \u003ctd\u003e低\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eLeonardo.ai\u003c/td\u003e\n          \u003ctd\u003e月150クレジット\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n          \u003ctd\u003e△\u003c/td\u003e\n          \u003ctd\u003e○\u003c/td\u003e\n          \u003ctd\u003e中\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePlayground AI\u003c/td\u003e\n          \u003ctd\u003e月500枚\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n          \u003ctd\u003e△\u003c/td\u003e\n          \u003ctd\u003e○\u003c/td\u003e\n          \u003ctd\u003e低〜中\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"各ツール詳細レビュー\"\u003e各ツール詳細レビュー\u003c/h2\u003e\n\u003ch3 id=\"1-adobe-firefly\"\u003e1. Adobe Firefly\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eこんな人におすすめ：\u003c/strong\u003e ブログ・商用コンテンツに安心して使いたい人\u003c/p\u003e","title":"無料AI画像生成ツール比較2026年版【目的別おすすめランキング】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nAI活用の英語学習法おすすめ5選【2026年版・独学で話せるようになる方法】 英語学習にAIを使うのは、もはや「テクノロジー好きの趣味」ではありません。2026年現在、AIを英語学習に組み込むことは、最も効果的な独学法のひとつとなっています。\n従来の英語学習の最大の壁は「アウトプットの機会の少なさ」でした。英会話スクールは高い、外国人の友人は作りにくい——そういった問題を、AIは完全に解決します。本記事では、具体的なAI英語学習法を5つ紹介します。\nAIで英語学習が変わった3つのこと 1. いつでも英会話の練習相手になってくれる ChatGPTやAI音声ツールは24時間利用可能。恥ずかしさゼロで、何度でも話せます。\n2. 自分のレベルに合わせてくれる 「TOEIC 500点レベル向けに話しかけてください」と指定するだけで、難易度を調整してくれます。\n3. 即座にフィードバックをもらえる 作文した英文を見せると、文法の誤りや不自然な表現を即座に指摘してくれます。\n学習法1：ChatGPTを英会話相手にする 最も手軽で効果的な方法です。ChatGPTにシナリオを設定して、英会話の練習を行います。\n基本の設定プロンプト Let\u0026#39;s have a conversation in English. Please follow these rules: 1. Respond only in English 2. Use vocabulary suitable for an intermediate level (TOEIC 600-700) 3. If I make a grammar mistake, correct me politely after your response 4. Keep your responses to 2-3 sentences so I can follow along Let\u0026#39;s talk about [topic]. Please start the conversation. おすすめシナリオ別プロンプト ビジネス英会話の練習\nPlease role-play as my colleague at an international company. We need to discuss the quarterly sales results. Start the meeting. Correct my English mistakes after each exchange. 空港・ホテルでの会話練習\nYou are a hotel receptionist. I\u0026#39;m checking in. Please use formal, polite English. My level is beginner-intermediate (TOEIC 500). Speak slowly and clearly. 日常会話の練習\nLet\u0026#39;s have a casual conversation about weekend activities. Use natural, everyday English like you\u0026#39;d use with a friend. If I use unnatural expressions, suggest more natural alternatives. 効果を高めるコツ 1回のセッションを15〜30分に集中して行う 会話後に「今日の会話で私が犯した文法ミスを全部リストアップしてください」と振り返りを行う 同じシナリオを繰り返し練習して、スムーズに話せるまで体に染み込ませる 学習法2：英文添削でライティング力を鍛える 書いた英文をChatGPTに添削してもらうことで、ライティング力と文法力が同時に上がります。\n添削依頼の例 基本添削\nPlease correct the following English text. After the correction, explain: 1. What mistakes I made and why they are wrong 2. More natural expressions I could use 3. Any vocabulary suggestions My text: [英文を貼り付ける] ビジネスメール添削\nI wrote the following business email to a client. Please: 1. Correct any grammar or vocabulary errors 2. Make it sound more professional 3. Suggest a better subject line [メール文を貼り付ける] 学習の深め方 添削されたら「なぜこの表現の方が自然なのですか？」と深掘りしてください。ルールを理解することで、同じ間違いを繰り返さなくなります。\n学習法3：AI音声ツールで発音・リスニング練習 文字だけでなく「音」の学習にはAI音声ツールが必要です。\nおすすめツール ELSA Speak（発音特化） URLはelsaspeak.com。AIがリアルタイムで発音を分析し、音素レベルでフィードバックを返します。日本人が間違えやすい「L/R」「V/B」「TH」などの音に特化したトレーニングが充実しています。\n無料プランでも基本機能は使えますが、本格的に使うなら有料プラン（月額約1,200円〜）が必要です。\nSpeechling（スピーキング練習） URLはspeechling.com。AIに加えて、人間のコーチによるフィードバックも受けられます（無料プランは月30回まで）。\nChatGPTの音声機能（Advanced Voice Mode） ChatGPT Plusに含まれる音声会話機能。ネイティブに近い自然な英語音声で会話できます。スピーキングとリスニングを同時に練習できる最もコストパフォーマンスの高い選択肢です。\n学習法4：英語コンテンツをAIで理解を深める 「英語を使って英語を学ぶ」インプット学習にもAIが役立ちます。\n英語記事をChatGPTで読み解く 気になる英語の記事・動画スクリプトをコピーして、ChatGPTに以下のように依頼します。\nPlease help me understand this English article. 1. Summarize the main points in simple English 2. Explain these words/phrases I don\u0026#39;t understand: [不明な語句] 3. Give me 3 questions to test my comprehension 4. Suggest similar articles I could read next Article: [記事内容を貼り付ける] 洋画・海外ドラマで学ぶ場合 気になったセリフや表現をChatGPTに聞きます。\nI heard this phrase in an American TV show: \u0026#34;[セリフ]\u0026#34; 1. What does it mean? 2. In what situations is it used? 3. Give me 3 similar expressions 4. Is it formal or informal? 学習法5：AI活用の語彙・文法学習 スペースドリピティション（間隔反復学習） Ankiというフラッシュカードアプリ（無料）にChatGPTで作成した単語カードをインポートする方法が効果的です。\nChatGPTでAnki用カードを作成する\nCreate 20 Anki flashcards for English vocabulary related to business meetings. Format: Front (English word/phrase) | Back (Japanese definition + example sentence in English) Level: Intermediate (TOEIC 600-750) ChatGPTが表形式でカードを生成します。これをAnkiにインポートすると、科学的に効果が実証された間隔反復学習が自動化されます。\n自分専用の例文集を作る 単語帳を作るより、「自分が実際に使う文脈での例文」を作る方が記憶に残ります。\nI want to learn the word \u0026#34;leverage\u0026#34; for business use. Please create: 1. 5 example sentences I might actually use at work 2. Common collocations (words often used with \u0026#34;leverage\u0026#34;) 3. Formal vs. informal usage differences 4. Similar words and when to use each 1週間のAI英語学習スケジュール（例） 曜日 内容 時間 月 ChatGPTで英会話練習（ビジネス場面） 20分 火 英文ライティング → ChatGPTに添削依頼 20分 水 ELSA Speakで発音練習 15分 木 英語記事をChatGPTと読む 20分 金 ChatGPTで英会話練習（日常会話） 20分 土 Ankiで語彙復習 15分 日 振り返り・その週の間違いの復習 15分 合計：週2時間弱。継続できる量に設定することが最重要です。\n注意点：AIだけでは越えられない壁 AIを使った英語学習は非常に効率的ですが、いくつかの限界もあります。\n実際の人間とのコミュニケーション感覚は、リアルな会話でしか身につかない 雑音の中での聴き取り力は、実生活のリスニングが必要 文化的背景の理解は、人間との交流から学ぶ部分が多い AIを「基礎力を効率よく積む」ツールとして使いながら、英会話スクールやオンライン英会話（Cambly、NativeCampなど）を月2〜4回組み合わせるのが現実的な最強の組み合わせです。\n英語力×AIスキルで外資・グローバル企業へ 英語とAIを組み合わせたスキルは、外資系企業・グローバルIT・翻訳関連職で特に需要が高まっています。英語力を活かした求人を探してみましょう。dodaで求人を探す\nまとめ：まずChatGPTで15分の英会話から AI英語学習を今日から始めるなら、最初のステップはシンプルです。ChatGPTを開き、上で紹介した英会話プロンプトを使って15分間英語で話してみてください。\n間違いを恐れなくていい。判断されない。何度やり直してもいい——そのメンタルの自由さが、英語学習の最大の壁である「話すことへの恐怖」を取り除いてくれます。\n関連記事\n無料で使えるAIツールおすすめ15選 ChatGPTを仕事で使う具体的な活用法10選 AIを使った副業の始め方完全ガイド 関連ツール 月々の支出バランスを見直す → 家計簿シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/posts/ai-%E8%8B%B1%E8%AA%9E%E5%AD%A6%E7%BF%92-%E3%81%8A%E3%81%99%E3%81%99%E3%82%81/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"ai活用の英語学習法おすすめ5選2026年版独学で話せるようになる方法\"\u003eAI活用の英語学習法おすすめ5選【2026年版・独学で話せるようになる方法】\u003c/h1\u003e\n\u003cp\u003e英語学習にAIを使うのは、もはや「テクノロジー好きの趣味」ではありません。2026年現在、AIを英語学習に組み込むことは、最も効果的な独学法のひとつとなっています。\u003c/p\u003e\n\u003cp\u003e従来の英語学習の最大の壁は「アウトプットの機会の少なさ」でした。英会話スクールは高い、外国人の友人は作りにくい——そういった問題を、AIは完全に解決します。本記事では、具体的なAI英語学習法を5つ紹介します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"aiで英語学習が変わった3つのこと\"\u003eAIで英語学習が変わった3つのこと\u003c/h2\u003e\n\u003ch3 id=\"1-いつでも英会話の練習相手になってくれる\"\u003e1. いつでも英会話の練習相手になってくれる\u003c/h3\u003e\n\u003cp\u003eChatGPTやAI音声ツールは24時間利用可能。恥ずかしさゼロで、何度でも話せます。\u003c/p\u003e\n\u003ch3 id=\"2-自分のレベルに合わせてくれる\"\u003e2. 自分のレベルに合わせてくれる\u003c/h3\u003e\n\u003cp\u003e「TOEIC 500点レベル向けに話しかけてください」と指定するだけで、難易度を調整してくれます。\u003c/p\u003e\n\u003ch3 id=\"3-即座にフィードバックをもらえる\"\u003e3. 即座にフィードバックをもらえる\u003c/h3\u003e\n\u003cp\u003e作文した英文を見せると、文法の誤りや不自然な表現を即座に指摘してくれます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"学習法1chatgptを英会話相手にする\"\u003e学習法1：ChatGPTを英会話相手にする\u003c/h2\u003e\n\u003cp\u003e最も手軽で効果的な方法です。ChatGPTにシナリオを設定して、英会話の練習を行います。\u003c/p\u003e\n\u003ch3 id=\"基本の設定プロンプト\"\u003e基本の設定プロンプト\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eLet\u0026#39;s have a conversation in English. Please follow these rules:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e Respond only in English\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e Use vocabulary suitable for an intermediate level (TOEIC 600-700)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e If I make a grammar mistake, correct me politely after your response\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e Keep your responses to 2-3 sentences so I can follow along\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eLet\u0026#39;s talk about [topic]. Please start the conversation.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"おすすめシナリオ別プロンプト\"\u003eおすすめシナリオ別プロンプト\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eビジネス英会話の練習\u003c/strong\u003e\u003c/p\u003e","title":"AI活用の英語学習法おすすめ5選【2026年版・独学で話せるようになる方法】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nChatGPT API初心者向け完全ガイド【2026年版・コピペで動くサンプルコード付き】 「ChatGPTをプログラムから使いたい」「自分のサービスにAIを組み込みたい」——そう思ったときに必要なのがChatGPT APIです。\nAPIと聞くと難しそうに感じるかもしれませんが、基本的な使い方は意外とシンプルです。本記事では、プログラミング経験が少ない方でも理解できるよう、ステップバイステップで解説します。\nChatGPT APIとは何か APIとは「Application Programming Interface」の略で、ソフトウェア同士が通信するための接続口です。\nChatGPT APIを使うと：\n自分のPythonプログラムからChatGPTに質問できる Webアプリ・Slackbot・業務ツールにAIを組み込める ChatGPTの画面を使わず、自動的に大量の処理ができる つまり、**「ChatGPTを自分のプログラムの部品として使える」**ようになります。\n料金の仕組みを先に理解する ChatGPT APIは使った量に応じて課金される「従量課金制」です。\n2026年現在の主な料金 モデル 入力（1Mトークン） 出力（1Mトークン） GPT-4o mini 約$0.15 約$0.60 GPT-4o 約$5.00 約$15.00 GPT-4 Turbo 約$10.00 約$30.00 ※料金は変更される可能性があります。最新情報はopenai.com/pricing で確認してください。\nトークンとは： 英語なら単語の一部、日本語なら数文字に相当する単位。「こんにちは」は約5〜7トークン程度。\n初心者が知っておくべき金額感： 個人で試す程度なら月数百円〜1,000円以内に収まることがほとんどです。まず$5〜10のクレジットを購入して試してみましょう。\nステップ1：APIキーを取得する 1. OpenAIアカウントを作成する platform.openai.com にアクセス 「Sign up」からアカウントを作成（メールアドレスかGoogleアカウントで登録） 電話番号認証を完了させる 2. 支払い方法を設定する ダッシュボードの「Billing」→「Add payment method」 クレジットカードを登録 「Add credit」から最初のクレジットを購入（$5から） 3. APIキーを発行する ダッシュボードの「API Keys」→「Create new secret key」 キーの名前を入力して作成 表示されたキーをすぐコピーしてメモする（一度しか表示されない） APIキーはsk-...から始まる長い文字列です。このキーは他人に見せないでください。GitHubに公開するコードに直接書き込むのはNGです。\nステップ2：Pythonの開発環境を準備する Pythonのインストール Pythonが入っていない場合はpython.orgから3.10以上をインストールします。\nOpenAIライブラリのインストール ターミナル（コマンドプロンプト）で以下を実行：\npip install openai 環境変数にAPIキーを設定する APIキーをコードに直接書かず、環境変数として設定します。\nMac/Linux:\nexport OPENAI_API_KEY=\u0026#34;sk-あなたのAPIキー\u0026#34; Windows（コマンドプロンプト）:\nset OPENAI_API_KEY=sk-あなたのAPIキー ステップ3：最初のAPIリクエストを送る 以下のコードをコピーしてhello_gpt.pyとして保存し、実行してみてください。\nfrom openai import OpenAI # クライアントを初期化（APIキーは環境変数から自動読み込み） client = OpenAI() # ChatGPTにメッセージを送る response = client.chat.completions.create( model=\u0026#34;gpt-4o-mini\u0026#34;, # 低コストなモデルを使用 messages=[ { \u0026#34;role\u0026#34;: \u0026#34;user\u0026#34;, \u0026#34;content\u0026#34;: \u0026#34;こんにちは！AIについて一言で説明してください。\u0026#34; } ] ) # 返答を表示する print(response.choices[0].message.content) 実行コマンド:\npython hello_gpt.py ChatGPTからの返答がターミナルに表示されれば成功です。\nステップ4：応用サンプルコード集 サンプル1：会話の文脈を保持するチャット from openai import OpenAI client = OpenAI() def chat_with_gpt(conversation_history, user_message): \u0026#34;\u0026#34;\u0026#34;会話履歴を維持しながらChatGPTと対話する関数\u0026#34;\u0026#34;\u0026#34; # ユーザーのメッセージを履歴に追加 conversation_history.append({ \u0026#34;role\u0026#34;: \u0026#34;user\u0026#34;, \u0026#34;content\u0026#34;: user_message }) # APIリクエスト response = client.chat.completions.create( model=\u0026#34;gpt-4o-mini\u0026#34;, messages=conversation_history ) # AIの返答を取得して履歴に追加 assistant_message = response.choices[0].message.content conversation_history.append({ \u0026#34;role\u0026#34;: \u0026#34;assistant\u0026#34;, \u0026#34;content\u0026#34;: assistant_message }) return assistant_message # 会話を開始 history = [ {\u0026#34;role\u0026#34;: \u0026#34;system\u0026#34;, \u0026#34;content\u0026#34;: \u0026#34;あなたは親切なアシスタントです。日本語で答えてください。\u0026#34;} ] print(\u0026#34;ChatGPTと話してみましょう（終了するには \u0026#39;exit\u0026#39; と入力）\u0026#34;) while True: user_input = input(\u0026#34;\\nあなた: \u0026#34;) if user_input.lower() == \u0026#34;exit\u0026#34;: break reply = chat_with_gpt(history, user_input) print(f\u0026#34;\\nChatGPT: {reply}\u0026#34;) サンプル2：テキストファイルの要約ツール from openai import OpenAI client = OpenAI() def summarize_file(file_path, max_length=300): \u0026#34;\u0026#34;\u0026#34;テキストファイルを読み込んで要約する関数\u0026#34;\u0026#34;\u0026#34; # ファイルを読み込む with open(file_path, \u0026#39;r\u0026#39;, encoding=\u0026#39;utf-8\u0026#39;) as f: content = f.read() print(f\u0026#34;元のテキスト: {len(content)}文字\u0026#34;) # ChatGPTに要約を依頼 response = client.chat.completions.create( model=\u0026#34;gpt-4o-mini\u0026#34;, messages=[ { \u0026#34;role\u0026#34;: \u0026#34;system\u0026#34;, \u0026#34;content\u0026#34;: f\u0026#34;以下のテキストを{max_length}字以内で要約してください。重要なポイントを3つ箇条書きで示した後、全体の要約を記載してください。\u0026#34; }, { \u0026#34;role\u0026#34;: \u0026#34;user\u0026#34;, \u0026#34;content\u0026#34;: content } ] ) return response.choices[0].message.content # 使用例 result = summarize_file(\u0026#34;sample.txt\u0026#34;) print(result) サンプル3：CSVデータの分析・コメント生成 import csv from openai import OpenAI client = OpenAI() def analyze_sales_data(csv_file_path): \u0026#34;\u0026#34;\u0026#34;売上CSVデータをAIで分析してコメントを生成する関数\u0026#34;\u0026#34;\u0026#34; # CSVを読み込んでテキスト形式に変換 rows = [] with open(csv_file_path, \u0026#39;r\u0026#39;, encoding=\u0026#39;utf-8\u0026#39;) as f: reader = csv.reader(f) for row in reader: rows.append(\u0026#39;, \u0026#39;.join(row)) csv_text = \u0026#39;\\n\u0026#39;.join(rows) # AIに分析を依頼 response = client.chat.completions.create( model=\u0026#34;gpt-4o\u0026#34;, # 分析タスクにはより高性能なモデルを使用 messages=[ { \u0026#34;role\u0026#34;: \u0026#34;system\u0026#34;, \u0026#34;content\u0026#34;: \u0026#34;あなたはデータアナリストです。売上データを見て、重要な傾向・問題点・改善提案を日本語で報告書形式でまとめてください。\u0026#34; }, { \u0026#34;role\u0026#34;: \u0026#34;user\u0026#34;, \u0026#34;content\u0026#34;: f\u0026#34;以下の売上データを分析してください:\\n\\n{csv_text}\u0026#34; } ] ) return response.choices[0].message.content # 使用例 analysis = analyze_sales_data(\u0026#34;sales_data.csv\u0026#34;) print(analysis) ステップ5：コストを管理する 使用量のモニタリング OpenAIのダッシュボード（platform.openai.com）の「Usage」ページで、API利用量と費用をリアルタイムで確認できます。\n支出上限を設定する ダッシュボードの「Billing」→「Usage limits」で月次の上限金額を設定できます。予期せぬ課金を防ぐため、最初は低い上限（例：$10）を設定しておきましょう。\nコスト削減のポイント モデルの使い分け： 単純なタスクはgpt-4o-miniを使う。gpt-4oより10〜30倍安い システムプロンプトを短くする： 毎回のリクエストに含まれるため、長すぎるとコストに響く 不要な会話履歴を削る： 長い会話ではトークン数が増えるため、古い履歴を削除する仕組みを作る よくあるエラーと対処法 AuthenticationError APIキーが間違っているか、環境変数が読み込まれていません。キーを再確認してください。\nRateLimitError 短時間にリクエストを送りすぎています。リクエスト間に少し間隔を空けてください（time.sleep(1)など）。\nBadRequestError: maximum context length exceeded 送信しているテキストが長すぎます。長いテキストは分割して送るか、要約してからAPIに渡してください。\nAPI開発スキルでエンジニア市場価値を高める ChatGPT APIを扱えるエンジニアへの求人需要は急増しています。AI組み込み開発・バックエンド・プロダクト開発など、技術スキルを活かした転職先を確認してみましょう。dodaで求人を探す\nまとめ：APIを使えばAIアプリが作れる ChatGPT APIを使いこなせるようになると、ビジネスの可能性が大きく広がります。\n社内の文書自動要約ツール 顧客メールの自動分類・返信案生成 商品説明文の一括生成 ChatbotやFAQシステム 最初のステップは「hello_gpt.py」を実行すること。それだけです。一度動く実感を得れば、次のアイデアは自然と生まれてきます。\n関連記事\nChatGPTを仕事で使う具体的な活用法10選 すぐ使えるChatGPTプロンプトテンプレート20選 AIでExcel作業を自動化する方法 関連ツール JSONデータを即座に整形・検証 → JSONフォーマッター 正規表現をリアルタイムでテスト → 正規表現テスター Base64のエンコード・デコード → Base64エンコーダー フリーランスの適正時給を計算 → フリーランス報酬計算ツール 月々の支出バランスを見直す → 家計簿シミュレーター 安全なパスワードを即座に生成 → パスワード生成ツール 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/posts/chatgpt-api-%E4%BD%BF%E3%81%84%E6%96%B9-%E5%88%9D%E5%BF%83%E8%80%85/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"chatgpt-api初心者向け完全ガイド2026年版コピペで動くサンプルコード付き\"\u003eChatGPT API初心者向け完全ガイド【2026年版・コピペで動くサンプルコード付き】\u003c/h1\u003e\n\u003cp\u003e「ChatGPTをプログラムから使いたい」「自分のサービスにAIを組み込みたい」——そう思ったときに必要なのがChatGPT APIです。\u003c/p\u003e\n\u003cp\u003eAPIと聞くと難しそうに感じるかもしれませんが、基本的な使い方は意外とシンプルです。本記事では、プログラミング経験が少ない方でも理解できるよう、ステップバイステップで解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"chatgpt-apiとは何か\"\u003eChatGPT APIとは何か\u003c/h2\u003e\n\u003cp\u003eAPIとは「Application Programming Interface」の略で、ソフトウェア同士が通信するための接続口です。\u003c/p\u003e\n\u003cp\u003eChatGPT APIを使うと：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e自分のPythonプログラムからChatGPTに質問できる\u003c/li\u003e\n\u003cli\u003eWebアプリ・Slackbot・業務ツールにAIを組み込める\u003c/li\u003e\n\u003cli\u003eChatGPTの画面を使わず、自動的に大量の処理ができる\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eつまり、**「ChatGPTを自分のプログラムの部品として使える」**ようになります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"料金の仕組みを先に理解する\"\u003e料金の仕組みを先に理解する\u003c/h2\u003e\n\u003cp\u003eChatGPT APIは使った量に応じて課金される「従量課金制」です。\u003c/p\u003e\n\u003ch3 id=\"2026年現在の主な料金\"\u003e2026年現在の主な料金\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eモデル\u003c/th\u003e\n          \u003cth\u003e入力（1Mトークン）\u003c/th\u003e\n          \u003cth\u003e出力（1Mトークン）\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eGPT-4o mini\u003c/td\u003e\n          \u003ctd\u003e約$0.15\u003c/td\u003e\n          \u003ctd\u003e約$0.60\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eGPT-4o\u003c/td\u003e\n          \u003ctd\u003e約$5.00\u003c/td\u003e\n          \u003ctd\u003e約$15.00\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eGPT-4 Turbo\u003c/td\u003e\n          \u003ctd\u003e約$10.00\u003c/td\u003e\n          \u003ctd\u003e約$30.00\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※料金は変更される可能性があります。最新情報はopenai.com/pricing で確認してください。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eトークンとは：\u003c/strong\u003e 英語なら単語の一部、日本語なら数文字に相当する単位。「こんにちは」は約5〜7トークン程度。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e初心者が知っておくべき金額感：\u003c/strong\u003e 個人で試す程度なら月数百円〜1,000円以内に収まることがほとんどです。まず$5〜10のクレジットを購入して試してみましょう。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ステップ1apiキーを取得する\"\u003eステップ1：APIキーを取得する\u003c/h2\u003e\n\u003ch3 id=\"1-openaiアカウントを作成する\"\u003e1. OpenAIアカウントを作成する\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eplatform.openai.com にアクセス\u003c/li\u003e\n\u003cli\u003e「Sign up」からアカウントを作成（メールアドレスかGoogleアカウントで登録）\u003c/li\u003e\n\u003cli\u003e電話番号認証を完了させる\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"2-支払い方法を設定する\"\u003e2. 支払い方法を設定する\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eダッシュボードの「Billing」→「Add payment method」\u003c/li\u003e\n\u003cli\u003eクレジットカードを登録\u003c/li\u003e\n\u003cli\u003e「Add credit」から最初のクレジットを購入（$5から）\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"3-apiキーを発行する\"\u003e3. APIキーを発行する\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eダッシュボードの「API Keys」→「Create new secret key」\u003c/li\u003e\n\u003cli\u003eキーの名前を入力して作成\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e表示されたキーをすぐコピーしてメモする（一度しか表示されない）\u003c/strong\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eAPIキーは\u003ccode\u003esk-...\u003c/code\u003eから始まる長い文字列です。このキーは他人に見せないでください。GitHubに公開するコードに直接書き込むのはNGです。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ステップ2pythonの開発環境を準備する\"\u003eステップ2：Pythonの開発環境を準備する\u003c/h2\u003e\n\u003ch3 id=\"pythonのインストール\"\u003ePythonのインストール\u003c/h3\u003e\n\u003cp\u003ePythonが入っていない場合はpython.orgから3.10以上をインストールします。\u003c/p\u003e","title":"ChatGPT API初心者向け完全ガイド【2026年版・サンプルコード付き】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n不動産営業×ChatGPTで、あなたの生産性は3倍になる 不動産営業の仕事は「文章力」と「スピード」で決まります。魅力的な物件紹介文を素早く書けるか、顧客への返信を的確かつ温かみのある言葉で届けられるか——それが成約率に直結します。\nところが多くの営業担当者は、1件の物件紹介文を書くのに30分以上かけ、メール返信にも頭を抱えています。ChatGPTを正しく使えば、その時間を5〜10分に短縮しながら、品質を上げることができます。\n本記事では、不動産営業の現場で即使えるChatGPTプロンプトを12個厳選してご紹介します。全てコピペして、カスタマイズするだけで使えます。\nなぜ不動産営業にChatGPTが特に有効なのか 不動産営業の業務には「型がある」文章が多く存在します。\n物件紹介文（SUUMOやathomeへの掲載文） 顧客へのお礼メール・フォローメール 内見後のヒアリングシート整理 重要事項説明の補足資料 管理会社への問い合わせ文 これらは毎回ゼロから書く必要はなく、入力する情報を変えるだけで高品質な文章が生成できます。ChatGPTはこうした「型のある文章生成」に最も力を発揮するAIです。\n【プロンプト集】不動産営業の業務別ChatGPT活用術 1. 物件紹介文の作成（賃貸マンション向け） 使用場面： SUUMOやathomeへの掲載文作成、物件チラシ作成\nプロンプト：\n以下の物件情報をもとに、賃貸マンションの魅力的な紹介文を作成してください。 【物件情報】 - 物件名：〇〇マンション - 所在地：東京都渋谷区〇〇 - 築年数：10年 - 間取り：1LDK（45㎡） - 賃料：12万円（管理費5,000円） - 最寄り駅：渋谷駅徒歩8分 - 特徴：南向き、角部屋、オートロック、宅配ボックス、ペット可（小型犬・猫）、フローリング全室、独立洗面台 【条件】 - ターゲット：20〜30代の働く独身女性または共働きカップル - 文字数：300〜400字 - トーン：温かみがあり、生活のイメージが湧くように - SUUMOの掲載文として使える形式で 活用ポイント： ターゲットとトーンを変えるだけで、ファミリー向け・シニア向けなど異なるバージョンを素早く作れます。\n2. 物件紹介文の作成（売買マンション向け） 使用場面： 高額物件の購入検討者向け詳細資料作成\nプロンプト：\n以下の売買物件について、購入検討者の心を動かす物件紹介文を作成してください。 【物件情報】 - 物件名：〇〇レジデンス - 所在地：東京都港区〇〇 - 築年数：3年（新築同様のリフォーム済み） - 間取り：3LDK（85㎡） - 価格：8,500万円 - 最寄り駅：六本木駅徒歩5分、麻布十番駅徒歩7分 - 特徴：タワーマンション24階、眺望良好（富士山ビュー）、管理費・修繕積立金合計38,000円/月、24時間コンシェルジュ、駐車場あり（月額3万円） 【条件】 - ターゲット：40〜50代の経営者・専門職。資産価値と生活品質を重視 - 文字数：500字程度 - 価格に見合う価値と希少性を強調すること - 内見への誘導文も最後に含めること 3. 顧客へのお問い合わせ返信メール（初回接触） 使用場面： SUUMOやathomeからのメール問い合わせへの返信\nプロンプト：\n不動産賃貸の問い合わせに対する返信メールを作成してください。 【状況】 - 顧客名：田中様（30代男性、転勤で東京に引越し予定） - 問い合わせ内容：「渋谷区で1LDK、予算12万円以内の物件を探しています」 - 現在の状況：ご要望に合う物件が3件あり、内見の案内をしたい 【メールの要件】 - 件名も含めて作成 - お礼→物件のご提案→内見の提案 の流れで - 3件の物件名は「〇〇マンション」「△△アパート」「□□レジデンス」とする - 親切丁寧、かつ押しつけがましくないトーンで - 署名欄は「〇〇不動産 営業部 鈴木〇〇」とする - 文字数：400字以内 4. 内見後のサンキューメール・フォロー 使用場面： 内見後24時間以内に送る御礼・フォローメール\nプロンプト：\n不動産の内見後に送るフォローメールを作成してください。 【状況】 - 顧客名：佐藤様ご夫婦 - 内見物件：〇〇マンション 203号室（3LDK、6,800万円） - 内見の感想：日当たりが良いと喜んでいた。価格についてはもう少し考えたいとのこと - 次のステップ：1週間後に再度連絡する予定 【メールの要件】 - 件名も含めて作成 - 感謝→物件の良い点の再確認→検討のサポートを申し出る→次のアクション の流れで - 「無理に決断を急かさない」温かみのあるトーンで - 不安点（価格）を逆手に取って、ローンシミュレーションの提案を含める - 文字数：350字以内 5. 物件比較表の文章説明作成 使用場面： 複数物件を検討している顧客への比較資料\nプロンプト：\n以下の3物件を比較する説明文を作成してください。顧客が自分に合った物件を選びやすいように、それぞれの「こんな人におすすめ」ポイントを含めてください。 【物件A】〇〇マンション - 家賃：10万円 - 最寄り駅：新宿駅徒歩10分 - 広さ：35㎡（1K） - 特徴：オートロック、システムキッチン、築5年 【物件B】△△ハイツ - 家賃：8.5万円 - 最寄り駅：新宿駅徒歩15分（バス5分） - 広さ：40㎡（1DK） - 特徴：バス・トイレ別、ロフトあり、築15年リフォーム済み 【物件C】□□アパート - 家賃：9万円 - 最寄り駅：代々木駅徒歩5分 - 広さ：30㎡（1K） - 特徴：デザイナーズ、コンクリート打ちっ放し、ペット可 【顧客情報】 - 単身男性、30代、デザイン系フリーランス、在宅ワーク多め 各物件200字程度で、メリット・デメリット・おすすめタイプをまとめてください。 6. 重要事項説明の補足資料（下書き） 使用場面： 重要事項説明書の内容を顧客にわかりやすく伝えるための補足文書作成\nプロンプト：\n不動産の重要事項説明の内容を、購入者（不動産初心者）にわかりやすく説明するための補足文書を作成してください。 【説明すべき項目】 1. 建ぺい率・容積率とは何か 2. 抵当権とは何か、抹消とはどういう意味か 3. 管理費・修繕積立金の違いと用途 4. 瑕疵担保責任（契約不適合責任）とは何か 【条件】 - 法律・専門用語は必ずわかりやすい言葉で説明 - 各項目に「例えば…」という具体例を入れること - 不安を煽らず、安心感を与えるトーンで - 各項目200字以内 注意： このプロンプトで生成した内容は必ず専門家（宅地建物取引士）が確認・修正してから使用してください。法的な正確性の最終責任は人間が負います。\n7. 管理会社への問い合わせ文書 使用場面： 入居者からのクレームや修繕依頼を管理会社に伝える際\nプロンプト：\n以下の状況について、不動産管理会社への問い合わせ・依頼文を作成してください。 【状況】 - 依頼者：〇〇マンション 302号室 入居者 山田様 - 問題内容：エアコンから水漏れが発生している（3日前から）。天井のシミも拡大中 - 緊急度：高い（生活に支障あり） - 求める対応：至急現場確認と修繕手配 【条件】 - 私（〇〇不動産 担当：鈴木）が管理会社に送るメールとして作成 - 件名を含めて - 事実を正確に伝え、対応期限（3営業日以内）を明記 - 入居者の不満を代弁しつつ、管理会社との関係を壊さない丁寧なトーンで 8. 賃貸更新案内レター 使用場面： 契約更新時期が近い入居者への案内文作成\nプロンプト：\n賃貸契約の更新案内レターを作成してください。 【情報】 - 入居者名：木村様 - 現在の契約期間：2024年7月1日〜2026年6月30日 - 更新期限：2026年5月31日までに意思表示 - 更新後の契約期間：2026年7月1日〜2028年6月30日（2年間） - 更新料：賃料1ヶ月分（100,000円） - 更新手続き：同封の書類に署名・捺印の上、返送 【条件】 - A4一枚に収まる形式（見出し・本文・手続き案内の構成） - 感謝の気持ちを込めつつ、手続きの案内を明確に - 問い合わせ先：〇〇不動産 03-XXXX-XXXX 9. SNS投稿文（Instagram・X向け物件紹介） 使用場面： 物件のSNS投稿でフォロワーに届ける\nプロンプト：\nInstagramに投稿する物件紹介文を作成してください。 【物件情報】 - 渋谷区の1LDK、45㎡ - 賃料12万円 - 南向き角部屋、ペット可、オートロック - 渋谷駅徒歩8分 【条件】 - インスタらしいテンポの良い文章（改行多め） - 「こんな人に向いている物件」を冒頭で伝える - ハッシュタグを10個含める（不動産関連） - 最後に「気になる方はDMへ」の誘導 - 絵文字を適切に使用 - 文字数：250字以内（ハッシュタグ除く） 10. クレーム対応のお詫びメール 使用場面： 物件の説明不足や手続きミスなどクレーム発生時\nプロンプト：\n不動産会社として顧客からのクレームに対するお詫びと対応策を伝えるメールを作成してください。 【状況】 - 顧客名：高橋様 - クレーム内容：契約時に「ペット可」と説明を受けたが、実際の契約書には「ペット不可」と記載されていた。すでに入居済みで飼い猫がいる - 当社の問題：担当者の説明ミス - 対応方針：管理会社に交渉し、特別承認を得る方向で動いている（解決まで1週間程度） 【条件】 - 件名含めて作成 - 誠実な謝罪→事実の確認→対応方針→今後の連絡スケジュール の流れで - 言い訳がましくなく、会社として責任を取る姿勢を示す - 感情的にならない、落ち着いたプロのトーン 11. 顧客ヒアリングシートの整理・要約 使用場面： 初回面談後のメモを整理して社内共有資料を作る\nプロンプト：\n以下の顧客ヒアリングメモを整理して、営業チームが共有できる「顧客プロファイルシート」を作成してください。 【ヒアリングメモ（箇条書き）】 - 30代後半の夫婦、子供2人（小学生） - 現在は埼玉県在住、子供の中学受験に向けて都内移住検討 - 夫は会社員（年収900万）、妻はパート - 予算は購入で6,000〜7,000万、頭金2,000万準備済み - 希望エリア：文京区・豊島区・世田谷区のいずれか - 間取り：3LDK以上、収納多め - 駅徒歩10分以内、小学校区も重要 - 入居希望時期：2026年9月〜10月 【条件】 - 「基本情報」「希望条件（必須）」「希望条件（できれば）」「検討課題」「次回アクション」のセクションに整理 - 担当者が次回面談前に見返せる簡潔な形式で 12. 反響分析レポートの下書き（月次） 使用場面： 月末に上司や支店長に提出する営業活動報告\nプロンプト：\n以下のデータをもとに、不動産営業の月次反響分析レポートの下書きを作成してください。 【データ】 - 対象月：2026年4月 - 掲載物件数：28件 - 総反響数：142件（SUUMO：89件、athome：31件、自社サイト：22件） - 内見実施数：47件（反響→内見転換率：33.1%） - 成約数：8件（内見→成約転換率：17%） - 先月比：成約数+2件、転換率+3pt 【条件】 - 「総括」「チャネル別分析」「転換率の考察」「翌月の重点施策」の4セクションで - 箇条書きと文章を組み合わせた読みやすい形式 - ポジティブな成果とともに、改善余地も明示する客観的なトーン ChatGPTプロンプトを使いこなすための3つのコツ コツ1：「条件」セクションを必ず入れる プロンプトに「条件」を追加することで、生成される文章のトーン・文字数・構成を制御できます。条件なしでは汎用的すぎる文章になりがちです。\nコツ2：実際の数字・固有名詞を入れる 「良い物件」ではなく「渋谷駅徒歩8分、45㎡、12万円」と具体的に入力するほど、リアルで使える文章が生成されます。固有名詞や実際の数字が「質の鍵」です。\nコツ3：一発で完璧を求めない——「続けて改善して」を使う 最初の出力が完璧でなくても大丈夫です。「もっと感情に訴える表現に変えて」「より簡潔に100字以内にして」と追加指示を重ねることで、理想の文章に近づけられます。これを「プロンプトの反復改善」と呼びます。\nよくある質問 Q：ChatGPTで作った文章は著作権は誰のものですか？\nA：現時点（2026年）では、ChatGPTの出力をそのまま使った文章に明確な著作権は発生しないとされています。ただし、最終的な内容の責任は使用者（あなた）にあります。特に重要事項説明など法的効力を持つ文書は、必ず専門家が確認してください。\nQ：顧客の個人情報をChatGPTに入力しても大丈夫ですか？\nA：OpenAIの規約では入力データは学習に使われない設定（API版・ChatGPT Team/Enterprise版）があります。無料版・Plus版のデフォルト設定では学習に使われる可能性があるため、実際の顧客氏名・住所・電話番号などの個人情報は入力しないでください。本記事のプロンプトのように「〇〇様」「△△マンション」と仮名・仮称を使うことを推奨します。\nQ：ChatGPTが出力した内容が間違っていることはありますか？\nA：あります。特に法律・税制・ローン計算などの専門的な内容は誤りが含まれる場合があります。生成された内容は必ず人間が確認・修正した上で使用してください。\nまとめ：今すぐ1つのプロンプトから始めよう 本記事では不動産営業に特化した12のChatGPTプロンプトをご紹介しました。\n今日から始めるなら、まずプロンプト3（初回返信メール）を試してみてください。 問い合わせが来たら、顧客情報を入れてChatGPTに送るだけ。5分で返信が完成します。\nAIは「仕事を奪うもの」ではなく「あなたの時間を作り出すもの」です。できた時間を顧客との対話や物件調査に使うことで、成約率を高める好循環が生まれます。\nまずは1つ試して、その効果を実感してみてください。\n不動産営業の経験を活かしてキャリアアップを目指すなら、doda の転職エージェントサービスがおすすめです。不動産・建設・住宅業界に強いキャリアアドバイザーが、あなたの実績と強みを活かした非公開求人を紹介してくれます。\n本記事のプロンプトは2026年5月時点のChatGPT（GPT-4o）での動作を確認しています。AIの仕様変更により出力が変わる場合があります。\n関連ツール 住宅ローンの月額返済額を計算 → 住宅ローンシミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 関連テンプレート 不動産営業の業務効率化テンプレートはこちら：\n不動産営業向けChatGPTプロンプト集 — 物件紹介・顧客対応・内見フォローまで網羅 ChatGPTプロンプト集100選 — ビジネス全般で使えるプロンプト集 あわせて読みたい 不動産営業 ChatGPTで物件紹介メールを3分で作成する方法 ChatGPTプロンプトの書き方コツ【2026年版】すぐ使える例文テンプレート付き ChatGPTを仕事で使う具体的な活用法10選【2026年最新版】 ","permalink":"https://productivity-works.com/ja/posts/chatgpt-fudosan-eigyo-prompt/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"不動産営業chatgptであなたの生産性は3倍になる\"\u003e不動産営業×ChatGPTで、あなたの生産性は3倍になる\u003c/h2\u003e\n\u003cp\u003e不動産営業の仕事は「文章力」と「スピード」で決まります。魅力的な物件紹介文を素早く書けるか、顧客への返信を的確かつ温かみのある言葉で届けられるか——それが成約率に直結します。\u003c/p\u003e\n\u003cp\u003eところが多くの営業担当者は、1件の物件紹介文を書くのに30分以上かけ、メール返信にも頭を抱えています。ChatGPTを正しく使えば、その時間を\u003cstrong\u003e5〜10分に短縮\u003c/strong\u003eしながら、品質を上げることができます。\u003c/p\u003e\n\u003cp\u003e本記事では、不動産営業の現場で即使えるChatGPTプロンプトを\u003cstrong\u003e12個\u003c/strong\u003e厳選してご紹介します。全てコピペして、カスタマイズするだけで使えます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"なぜ不動産営業にchatgptが特に有効なのか\"\u003eなぜ不動産営業にChatGPTが特に有効なのか\u003c/h2\u003e\n\u003cp\u003e不動産営業の業務には「型がある」文章が多く存在します。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e物件紹介文（SUUMOやathomeへの掲載文）\u003c/li\u003e\n\u003cli\u003e顧客へのお礼メール・フォローメール\u003c/li\u003e\n\u003cli\u003e内見後のヒアリングシート整理\u003c/li\u003e\n\u003cli\u003e重要事項説明の補足資料\u003c/li\u003e\n\u003cli\u003e管理会社への問い合わせ文\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eこれらは毎回ゼロから書く必要はなく、\u003cstrong\u003e入力する情報を変えるだけで高品質な文章が生成\u003c/strong\u003eできます。ChatGPTはこうした「型のある文章生成」に最も力を発揮するAIです。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"プロンプト集不動産営業の業務別chatgpt活用術\"\u003e【プロンプト集】不動産営業の業務別ChatGPT活用術\u003c/h2\u003e\n\u003ch3 id=\"1-物件紹介文の作成賃貸マンション向け\"\u003e1. 物件紹介文の作成（賃貸マンション向け）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e使用場面：\u003c/strong\u003e SUUMOやathomeへの掲載文作成、物件チラシ作成\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eプロンプト：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の物件情報をもとに、賃貸マンションの魅力的な紹介文を作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【物件情報】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 物件名：〇〇マンション\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 所在地：東京都渋谷区〇〇\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 築年数：10年\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 間取り：1LDK（45㎡）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 賃料：12万円（管理費5,000円）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 最寄り駅：渋谷駅徒歩8分\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 特徴：南向き、角部屋、オートロック、宅配ボックス、ペット可（小型犬・猫）、フローリング全室、独立洗面台\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【条件】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e ターゲット：20〜30代の働く独身女性または共働きカップル\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 文字数：300〜400字\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e トーン：温かみがあり、生活のイメージが湧くように\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e SUUMOの掲載文として使える形式で\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e活用ポイント：\u003c/strong\u003e ターゲットとトーンを変えるだけで、ファミリー向け・シニア向けなど異なるバージョンを素早く作れます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"2-物件紹介文の作成売買マンション向け\"\u003e2. 物件紹介文の作成（売買マンション向け）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e使用場面：\u003c/strong\u003e 高額物件の購入検討者向け詳細資料作成\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eプロンプト：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の売買物件について、購入検討者の心を動かす物件紹介文を作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【物件情報】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 物件名：〇〇レジデンス\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 所在地：東京都港区〇〇\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 築年数：3年（新築同様のリフォーム済み）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 間取り：3LDK（85㎡）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 価格：8,500万円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 最寄り駅：六本木駅徒歩5分、麻布十番駅徒歩7分\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 特徴：タワーマンション24階、眺望良好（富士山ビュー）、管理費・修繕積立金合計38,000円/月、24時間コンシェルジュ、駐車場あり（月額3万円）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【条件】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e ターゲット：40〜50代の経営者・専門職。資産価値と生活品質を重視\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 文字数：500字程度\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 価格に見合う価値と希少性を強調すること\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 内見への誘導文も最後に含めること\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"3-顧客へのお問い合わせ返信メール初回接触\"\u003e3. 顧客へのお問い合わせ返信メール（初回接触）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e使用場面：\u003c/strong\u003e SUUMOやathomeからのメール問い合わせへの返信\u003c/p\u003e","title":"不動産営業向けChatGPTプロンプト集 完全ガイド2026"},{"content":" アフィリエイト開示: 本記事には一部アフィリエイトリンクが含まれます。リンク経由でご購入いただいた場合、当サイトに手数料が発生することがありますが、読者の方への費用は一切変わりません。紹介する製品・サービスはすべて編集部が実際に検証したものに限っています。\n「議事録、誰が書くの？」問題を終わらせる 会議が終わった後、最も嫌われる作業のひとつが「議事録作成」です。1時間の会議を正確にまとめるのに30分〜1時間かかることも珍しくなく、本来の業務に割ける時間が削られていきます。\nしかし今は、ChatGPTを使えばこの作業を劇的に短縮できます。本記事では、音声録音から完成した議事録まで、ChatGPTをフル活用して議事録作成を自動化する方法を、コピペして使えるプロンプトテンプレートとともに解説します。\nChatGPTで議事録を自動作成する全体フロー ChatGPTを使った議事録作成は、大きく3つのステップで完結します。\nSTEP 1: 会議を録音する ↓ STEP 2: 音声をテキストに変換する（文字起こし） ↓ STEP 3: ChatGPTで議事録に整形する それぞれのステップを詳しく見ていきましょう。\nSTEP 1：会議の録音方法 オンライン会議の場合 Zoom、Google Meet、Microsoft Teamsなどのオンライン会議ツールには録音機能が内蔵されています。\nZoom: 「録音」ボタンをクリックするだけ。クラウド録音（有料プラン）またはローカル録音（無料プランでも可）が選べます。 Google Meet: Google Workspaceの有料プランで録音機能が使えます。 Microsoft Teams: チャンネル会議では録音機能が標準搭載。 対面会議の場合 スマートフォンのボイスメモアプリで録音するのが最もシンプルです。iPhoneなら「ボイスメモ」、Androidなら「レコーダー」アプリが標準搭載されています。\n録音の品質を高めるポイント：\n参加者の近くにスマートフォンを置く 会議室の環境音（空調など）が入らないよう注意 全員が発言する前に「録音しています」と周知する STEP 2：音声をテキストに変換する 録音したデータをChatGPTに入力するには、まずテキストに変換する必要があります。\n方法1：ChatGPT（GPT-4o）の音声入力機能を直接使う ChatGPTのウェブ版またはアプリ版では、音声ファイルを直接アップロードして文字起こしを依頼できます（GPT-4oのファイル添付機能）。\n手順：\nChatGPTのプロンプト入力欄の「+」ボタンをクリック 録音ファイルを添付 「この音声を文字起こしてください」と入力して送信 この方法は非常にシンプルですが、長時間の録音（1時間超）には向いていない場合があります。\n方法2：OpenAIのWhisper APIを使う OpenAIが提供するWhisperは、世界最高水準の音声認識精度を持つモデルです。APIを使えば長時間の音声ファイルも高精度で文字起こしできます。\n無料で試す方法： Whisperを手軽に試せるサービスとして以下が利用できます。\nRiverside.fm：録音から文字起こしまで一括対応 Otter.ai：会議録音・文字起こし・要約を自動化 Notta：日本語対応の文字起こしサービス 方法3：Googleドキュメントの音声入力 Google Chromeを使っている場合、Googleドキュメントの「ツール」→「音声入力」から音声を直接テキスト化できます。\nSTEP 3：ChatGPTで議事録に整形するプロンプトテンプレート 文字起こしデータができたら、いよいよChatGPTで議事録に整形します。ここからが本記事の核心部分です。\n基本テンプレート（汎用） 以下のプロンプトをそのままコピーして使えます。[文字起こしテキストをここに貼り付ける]の部分を実際の文字起こしデータに置き換えてください。\n以下は会議の文字起こしデータです。これを元に、以下の形式で議事録を作成してください。 【出力形式】 # 議事録 --- ## 基本情報 - 日時： - 参加者： - 会議の目的： --- ## 決定事項 （箇条書きで、明確に決まったことだけを記載） --- ## 議論のポイント （主な議論の流れを簡潔にまとめる） --- ## アクションアイテム | 担当者 | タスク内容 | 期限 | |--------|------------|------| --- ## 次回会議 - 日時： - 議題（案）： --- 【文字起こしデータ】 [文字起こしテキストをここに貼り付ける] ※文字起こしに誤字・脱字がある可能性がありますが、文脈から判断して補正してください。 ※固有名詞や数値は特に正確に記載してください。 プロジェクト会議向けテンプレート 以下の会議音声の文字起こしを、プロジェクト管理に適した議事録形式にまとめてください。 【出力形式】 # 議事録：[プロジェクト名] --- ## 開催情報 - 日時： - 場所/形式： - ファシリテーター： - 参加者： - 書記： --- ## 前回議事録の確認 - 完了したアクションアイテム： - 未完了のアクションアイテム： --- ## 今回の議題と内容 ### 議題1：[タイトル] #### 議論内容 #### 結論・決定事項 ### 議題2：[タイトル] ...（必要に応じて繰り返し） --- ## 今回の決定事項まとめ 1. 2. --- ## 次回へのアクションアイテム | # | 担当者 | タスク | 期限 | 優先度 | |---|--------|--------|------|--------| --- ## リスク・懸念事項 （会議中で挙がった問題点・懸念事項を記載） --- ## 次回会議 - 予定日時： - 必須参加者： - 事前準備事項： --- 【文字起こしデータ】 [ここに貼り付け] 営業・クライアント打ち合わせ向けテンプレート 以下は営業・クライアント打ち合わせの文字起こしです。社内共有用の議事録と、クライアントへの送付用サマリーの2種類を作成してください。 【社内共有用議事録】 # 打ち合わせ議事録（社内用） --- ## 打ち合わせ概要 - 日時・場所： - 自社参加者： - クライアント参加者（役職含む）： - 目的： --- ## クライアントの状況・ニーズ （ヒアリングで判明した課題・要望を整理） --- ## 提案内容と反応 （何を提案して、クライアントがどう反応したか） --- ## クライアントの懸念点 （クライアントが気にしていた点・質問） --- ## 合意事項 --- ## 次のステップ（社内タスク） | 担当者 | タスク | 期限 | |--------|--------|------| --- ## 商談評価 - 温度感（1〜10）： - 想定クローズ時期： - 次回アポ： --- 【クライアント送付用サマリー】 # 本日の打ち合わせご確認事項 （クライアントへの御礼、本日の合意事項の確認、次回のスケジュールを丁寧な敬語で記載） --- 【文字起こしデータ】 [ここに貼り付け] 経営会議・取締役会向けテンプレート 以下の経営会議の文字起こしを、正式な議事録として整形してください。機密性の高い内容が含まれる可能性があるため、事実と意見を明確に区別し、誰が何を発言したかを特定できる形式にしてください。 【出力形式】 # 第○回 取締役会議事録（案） --- ## 開催概要 - 開催日時： - 開催場所： - 出席者：（役職・氏名） - 欠席者： - 議長： - 議事録作成者： --- ## 議題 ### 第1号議案：○○について #### 説明・報告内容 #### 質疑応答の要点 #### 採決結果 （以降、議案ごとに繰り返し） --- ## 決議事項一覧 --- ## 報告事項 --- ## 次回会議予定 --- 【文字起こしデータ】 [ここに貼り付け] 議事録クオリティを上げる追加プロンプト 基本テンプレートで作成した議事録に対して、さらに以下のプロンプトで改善できます。\nアクションアイテムだけ抽出する 上記の議事録から、アクションアイテム（誰が、何を、いつまでに）だけを抽出して、Slack投稿用の短いメッセージ形式にしてください。 英語版も作成する 上記の議事録を英語に翻訳してください。専門用語は適切なビジネス英語を使用してください。 要約を作成する 上記の議事録を3〜5行の要約にしてください。参加できなかった人が1分以内で把握できる内容にしてください。 ChatGPTに精度の高い議事録を作らせるコツ コツ1：話者ラベルをつけてから入力する 文字起こしデータに「田中：○○と思います。鈴木：それについては\u0026hellip;」のように話者ラベルをつけてからChatGPTに入力すると、誰が何を言ったかが明確な議事録になります。\nWhisperを使った場合は話者分離（diarization）機能で自動的にラベルをつけられるサービスもあります。\nコツ2：会議の種類・目的を最初に伝える プロンプトの冒頭に「この会議はXXプロジェクトのキックオフ会議です」「これはクライアントへの提案プレゼン後の質疑応答です」など、会議の文脈を説明すると、議事録の精度が上がります。\nコツ3：固有名詞リストを事前に渡す 会社名・製品名・人名など、文字起こしで誤変換されやすい固有名詞のリストをプロンプトに含めると誤変換を防げます。\n以下の固有名詞は正確に記載してください： - 株式会社○○（誤変換例：○○） - ○○システム（製品名） - ○○ 部長（担当者名） コツ4：分割して入力する 長い文字起こしデータをChatGPTに一度に渡すと、後半が薄くなることがあります。1時間以上の会議は30分ずつに分割して処理し、最後に「以上2つの議事録を統合して1つにまとめてください」と依頼するのが効果的です。\nおすすめの議事録作成ツール（ChatGPT以外） ツール 特徴 料金 Otter.ai 英語に強い、Zoom連携 無料プランあり Notta 日本語に強い 無料プランあり tl;dv Zoom・Teamsに特化 無料プランあり Fireflies.ai 多機能・CRM連携 無料プランあり Google Meet文字起こし Workspaceユーザーは無料 Workspace必要 これらのツールを使えば、文字起こしとある程度の要約まで自動化できますが、最終的な議事録の品質を高めるためのカスタマイズには、本記事のChatGPTプロンプトが役立ちます。\n議事録自動作成を業務に定着させるための運用ルール 技術的な方法を知るだけでは、業務は変わりません。チームに定着させるためのルールを決めましょう。\n運用ルール例 録音担当を輪番で決める: 毎回の会議で録音担当者をローテーション 文字起こし→議事録作成は当日中: 記憶が新しいうちに処理する 確認は24時間以内: 参加者への議事録送付後、24時間以内に確認・修正依頼 テンプレートを標準化: チームで使うテンプレートを統一して、確認作業を効率化 議事録の保存場所を統一: Notion、Confluence、Googleドライブなど、チームで統一した場所に保存 業務効率化スキルを次のキャリアに活かす AI議事録作成などの業務効率化を推進できる人材は、マネージャー・プロジェクトリーダー・DX推進担当として市場価値が高まっています。キャリアアップを検討してみませんか。dodaで求人を探す\nまとめ：議事録作成の時間を90%削減する ChatGPTを活用した議事録作成フローをまとめます。\n会議を録音する（Zoom録音機能またはスマートフォン） 文字起こしする（Whisper、Notta、Otter.aiなど） ChatGPTに貼り付けて議事録化する（本記事のテンプレートを使用） アクションアイテムをSlackなどで共有 この流れを定着させれば、従来30〜60分かかっていた議事録作成が5〜10分に短縮されます。まずは次の会議から試してみてください。本記事のプロンプトテンプレートをブックマークして、すぐ使えるようにしておくのがおすすめです。\n本記事で紹介するAIツールの仕様は変更される場合があります。最新情報は各サービスの公式サイトをご確認ください。\n関連ツール 月々の支出バランスを見直す → 家計簿シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\nあわせて読みたい ChatGPTを仕事で使う具体的な活用法10選【2026年最新版】 ChatGPTプロンプトの書き方コツ【2026年版】すぐ使える例文テンプレート付き リモートワーク生産性を上げる方法15選【在宅勤務のコツ・ツール・環境構築】 ","permalink":"https://productivity-works.com/ja/posts/chatgpt-gijiroku-template/","summary":"\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eアフィリエイト開示\u003c/strong\u003e: 本記事には一部アフィリエイトリンクが含まれます。リンク経由でご購入いただいた場合、当サイトに手数料が発生することがありますが、読者の方への費用は一切変わりません。紹介する製品・サービスはすべて編集部が実際に検証したものに限っています。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"議事録誰が書くの問題を終わらせる\"\u003e「議事録、誰が書くの？」問題を終わらせる\u003c/h2\u003e\n\u003cp\u003e会議が終わった後、最も嫌われる作業のひとつが「議事録作成」です。1時間の会議を正確にまとめるのに30分〜1時間かかることも珍しくなく、本来の業務に割ける時間が削られていきます。\u003c/p\u003e\n\u003cp\u003eしかし今は、ChatGPTを使えばこの作業を劇的に短縮できます。本記事では、\u003cstrong\u003e音声録音から完成した議事録まで、ChatGPTをフル活用して議事録作成を自動化する方法\u003c/strong\u003eを、コピペして使えるプロンプトテンプレートとともに解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"chatgptで議事録を自動作成する全体フロー\"\u003eChatGPTで議事録を自動作成する全体フロー\u003c/h2\u003e\n\u003cp\u003eChatGPTを使った議事録作成は、大きく3つのステップで完結します。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eSTEP 1: 会議を録音する\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eSTEP 2: 音声をテキストに変換する（文字起こし）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eSTEP 3: ChatGPTで議事録に整形する\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eそれぞれのステップを詳しく見ていきましょう。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"step-1会議の録音方法\"\u003eSTEP 1：会議の録音方法\u003c/h2\u003e\n\u003ch3 id=\"オンライン会議の場合\"\u003eオンライン会議の場合\u003c/h3\u003e\n\u003cp\u003eZoom、Google Meet、Microsoft Teamsなどのオンライン会議ツールには録音機能が内蔵されています。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eZoom\u003c/strong\u003e: 「録音」ボタンをクリックするだけ。クラウド録音（有料プラン）またはローカル録音（無料プランでも可）が選べます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGoogle Meet\u003c/strong\u003e: Google Workspaceの有料プランで録音機能が使えます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMicrosoft Teams\u003c/strong\u003e: チャンネル会議では録音機能が標準搭載。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"対面会議の場合\"\u003e対面会議の場合\u003c/h3\u003e\n\u003cp\u003eスマートフォンのボイスメモアプリで録音するのが最もシンプルです。iPhoneなら「ボイスメモ」、Androidなら「レコーダー」アプリが標準搭載されています。\u003c/p\u003e\n\u003cp\u003e録音の品質を高めるポイント：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e参加者の近くにスマートフォンを置く\u003c/li\u003e\n\u003cli\u003e会議室の環境音（空調など）が入らないよう注意\u003c/li\u003e\n\u003cli\u003e全員が発言する前に「録音しています」と周知する\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"step-2音声をテキストに変換する\"\u003eSTEP 2：音声をテキストに変換する\u003c/h2\u003e\n\u003cp\u003e録音したデータをChatGPTに入力するには、まずテキストに変換する必要があります。\u003c/p\u003e\n\u003ch3 id=\"方法1chatgptgpt-4oの音声入力機能を直接使う\"\u003e方法1：ChatGPT（GPT-4o）の音声入力機能を直接使う\u003c/h3\u003e\n\u003cp\u003eChatGPTのウェブ版またはアプリ版では、音声ファイルを直接アップロードして文字起こしを依頼できます（GPT-4oのファイル添付機能）。\u003c/p\u003e\n\u003cp\u003e手順：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eChatGPTのプロンプト入力欄の「+」ボタンをクリック\u003c/li\u003e\n\u003cli\u003e録音ファイルを添付\u003c/li\u003e\n\u003cli\u003e「この音声を文字起こしてください」と入力して送信\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eこの方法は非常にシンプルですが、長時間の録音（1時間超）には向いていない場合があります。\u003c/p\u003e\n\u003ch3 id=\"方法2openaiのwhisper-apiを使う\"\u003e方法2：OpenAIのWhisper APIを使う\u003c/h3\u003e\n\u003cp\u003eOpenAIが提供するWhisperは、世界最高水準の音声認識精度を持つモデルです。APIを使えば長時間の音声ファイルも高精度で文字起こしできます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e無料で試す方法\u003c/strong\u003e：\nWhisperを手軽に試せるサービスとして以下が利用できます。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRiverside.fm\u003c/strong\u003e：録音から文字起こしまで一括対応\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eOtter.ai\u003c/strong\u003e：会議録音・文字起こし・要約を自動化\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNotta\u003c/strong\u003e：日本語対応の文字起こしサービス\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"方法3googleドキュメントの音声入力\"\u003e方法3：Googleドキュメントの音声入力\u003c/h3\u003e\n\u003cp\u003eGoogle Chromeを使っている場合、Googleドキュメントの「ツール」→「音声入力」から音声を直接テキスト化できます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"step-3chatgptで議事録に整形するプロンプトテンプレート\"\u003eSTEP 3：ChatGPTで議事録に整形するプロンプトテンプレート\u003c/h2\u003e\n\u003cp\u003e文字起こしデータができたら、いよいよChatGPTで議事録に整形します。ここからが本記事の核心部分です。\u003c/p\u003e\n\u003ch3 id=\"基本テンプレート汎用\"\u003e基本テンプレート（汎用）\u003c/h3\u003e\n\u003cp\u003e以下のプロンプトをそのままコピーして使えます。\u003ccode\u003e[文字起こしテキストをここに貼り付ける]\u003c/code\u003eの部分を実際の文字起こしデータに置き換えてください。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下は会議の文字起こしデータです。これを元に、以下の形式で議事録を作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【出力形式】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e# 議事録\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 基本情報\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 日時：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 参加者：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 会議の目的：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 決定事項\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e（箇条書きで、明確に決まったことだけを記載）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 議論のポイント\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e（主な議論の流れを簡潔にまとめる）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## アクションアイテム\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e| 担当者 | タスク内容 | 期限 |\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e|--------|------------|------|\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 次回会議\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 日時：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 議題（案）：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【文字起こしデータ】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[文字起こしテキストをここに貼り付ける]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e※文字起こしに誤字・脱字がある可能性がありますが、文脈から判断して補正してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e※固有名詞や数値は特に正確に記載してください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"プロジェクト会議向けテンプレート\"\u003eプロジェクト会議向けテンプレート\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の会議音声の文字起こしを、プロジェクト管理に適した議事録形式にまとめてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【出力形式】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e# 議事録：[プロジェクト名]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 開催情報\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 日時：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 場所/形式：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e ファシリテーター：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 参加者：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 書記：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 前回議事録の確認\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 完了したアクションアイテム：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 未完了のアクションアイテム：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 今回の議題と内容\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e### 議題1：[タイトル]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#### 議論内容\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#### 結論・決定事項\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e### 議題2：[タイトル]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e...（必要に応じて繰り返し）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 今回の決定事項まとめ\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e1.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e2.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 次回へのアクションアイテム\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e| # | 担当者 | タスク | 期限 | 優先度 |\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e|---|--------|--------|------|--------|\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## リスク・懸念事項\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e（会議中で挙がった問題点・懸念事項を記載）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 次回会議\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 予定日時：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 必須参加者：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 事前準備事項：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【文字起こしデータ】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[ここに貼り付け]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"営業クライアント打ち合わせ向けテンプレート\"\u003e営業・クライアント打ち合わせ向けテンプレート\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下は営業・クライアント打ち合わせの文字起こしです。社内共有用の議事録と、クライアントへの送付用サマリーの2種類を作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【社内共有用議事録】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e# 打ち合わせ議事録（社内用）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 打ち合わせ概要\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 日時・場所：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 自社参加者：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e クライアント参加者（役職含む）：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 目的：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## クライアントの状況・ニーズ\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e（ヒアリングで判明した課題・要望を整理）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 提案内容と反応\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e（何を提案して、クライアントがどう反応したか）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## クライアントの懸念点\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e（クライアントが気にしていた点・質問）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 合意事項\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 次のステップ（社内タスク）\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e| 担当者 | タスク | 期限 |\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e|--------|--------|------|\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 商談評価\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 温度感（1〜10）：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 想定クローズ時期：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 次回アポ：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【クライアント送付用サマリー】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e# 本日の打ち合わせご確認事項\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e（クライアントへの御礼、本日の合意事項の確認、次回のスケジュールを丁寧な敬語で記載）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【文字起こしデータ】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[ここに貼り付け]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"経営会議取締役会向けテンプレート\"\u003e経営会議・取締役会向けテンプレート\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の経営会議の文字起こしを、正式な議事録として整形してください。機密性の高い内容が含まれる可能性があるため、事実と意見を明確に区別し、誰が何を発言したかを特定できる形式にしてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【出力形式】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e# 第○回 取締役会議事録（案）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 開催概要\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 開催日時：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 開催場所：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 出席者：（役職・氏名）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 欠席者：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 議長：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 議事録作成者：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 議題\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e### 第1号議案：○○について\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#### 説明・報告内容\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#### 質疑応答の要点\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#### 採決結果\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e（以降、議案ごとに繰り返し）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 決議事項一覧\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 報告事項\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e## 次回会議予定\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【文字起こしデータ】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[ここに貼り付け]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"議事録クオリティを上げる追加プロンプト\"\u003e議事録クオリティを上げる追加プロンプト\u003c/h2\u003e\n\u003cp\u003e基本テンプレートで作成した議事録に対して、さらに以下のプロンプトで改善できます。\u003c/p\u003e","title":"ChatGPTで議事録を自動作成する方法【コピペOKテンプレート付き】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「ChatGPTの有料版って本当に必要？」「無料でも十分？」——毎月月額料金を払う価値があるのか迷っている方は多いはず。本記事では2026年最新のプラン構成をもとに、無料版と有料版の違いを徹底比較します。あなたの用途に合ったプランを選ぶための判断基準も解説するので、ぜひ最後まで読んでみてください。\nChatGPT 2026年のプラン構成 OpenAIは2026年時点で以下のプランを提供しています。\nプラン名 月額料金 主な対象ユーザー Free（無料） 0円 試しに使いたい方・ライトユーザー Plus 約3,000円 ヘビーユーザー・ビジネス利用 Pro 約20,000円 研究者・AIを本格活用したい方 Team 約4,000円/人 チーム・法人利用 無料版と有料版の主な違い一覧 使えるAIモデルの差 これが最も重要な違いです。\n機能 無料版 Plus Pro GPT-4o 制限付き利用可 優先アクセス・制限緩和 無制限 o1 / o3モデル 一部のみ 利用可 無制限 GPT-4o mini 無制限 無制限 無制限 画像生成（DALL-E） 制限あり 利用可 高優先度 音声会話モード 基本のみ 高度な音声モード フル機能 カスタムGPTs 利用可（作成不可） 作成・利用可 作成・利用可 利用制限の差 無料版ではGPT-4oなどの高性能モデルは一定メッセージ数を超えると自動的に低性能モデルへ切り替わります。ピーク時間帯はさらに制限が強くなることもあります。\nPlusでは制限がほぼなくなり、混雑時も優先的にリソースが割り当てられます。\nファイル添付・分析機能の差 機能 無料版 Plus以上 PDFファイル読み込み 制限あり 高い上限 Excelデータ分析 制限あり 利用可 画像アップロード分析 利用可 制限緩和 Web検索（Browsing） 利用可 高優先度 無料版で十分なケース 以下に当てはまる方は無料版で十分です。\n週に数回、軽い文章作成や質問に使う AIの基本機能をお試しで触ってみたい 英語学習や日常的な翻訳に使う 副業の一部として軽く活用する 無料版のGPT-4o miniでも、日常的なタスクならかなりの精度で対応できます。メールの下書き、ブログのアイデア出し、簡単なコード補助なら十分です。\n有料版（Plus）が必要なケース 以下に当てはまる方はPlusへのアップグレードを強く推奨します。\n1. 毎日業務でフル活用している ライターやマーケターが毎日大量の文章生成をする場合、無料版では制限に引っかかりやすくなります。Plusなら思う存分使えます。\n2. 高精度な推論・複雑なタスクが必要 ビジネス文書の作成、コードのデバッグ、複雑なデータ分析など、GPT-4oやo1モデルの真価が発揮される作業では有料版の差が明確に出ます。\n3. カスタムGPTsを作りたい 業務に特化したAIアシスタントを自分で作って効率化したい場合はPlus以上が必要です。\n4. 高度な音声モードを使いたい 英語スピーキング練習やリアルタイム会議補助など、音声機能をフル活用したい方はPlusが必須です。\nProプランはどんな人向け？ 月額約20,000円のProは、以下のような方向けです。\nAIを使った研究・論文執筆を行う研究者 大量のコードを毎日生成するエンジニア AIを事業の中核として使う起業家・経営者 一般ユーザーにはオーバースペックですが、AIで稼いでいる方にとっては月20,000円でも十分元が取れます。\nコストパフォーマンス比較 Plusの元を取る目安 月3,000円のPlusを「元を取った」と感じるには、以下の作業に換算できます。\n活用例 節約できる時間 時給換算での価値 毎日30分のメール作成自動化 月15時間 時給2,000円なら30,000円相当 ブログ記事3本の下書き生成 月6時間 時給2,000円なら12,000円相当 Excelデータ分析の自動化 月5時間 時給2,000円なら10,000円相当 毎日少しでも業務に使えば、月3,000円の元は十分取れます。\nChatGPTと他AIツールの比較 ChatGPT以外にも主要なAIアシスタントがあります。\nツール 無料版 有料版 特徴 ChatGPT あり Plus 3,000円/月 総合力最高水準 Claude（Anthropic） あり Pro 約3,000円/月 長文処理・安全性重視 Gemini（Google） あり Advanced 約2,900円/月 Google連携強み Copilot（Microsoft） あり Pro 約3,200円/月 Office統合 用途によっては複数を使い分けるのが最も効率的です。\n有料版への切り替え方 ChatGPT公式サイト にログイン 左下のプロフィールアイコンをクリック 「プランをアップグレード」を選択 クレジットカード情報を入力して完了 月単位での契約なので、必要なときだけ有料にして不要なら解約という使い方も可能です。\nChatGPTを使いこなす人材が求められる時代 AIツールを業務に組み込んで成果を出せる人材は、IT・マーケティング・企画・営業など多くの職種で引く手あまたです。AIスキルを評価してくれる転職先を探しましょう。dodaで求人を探す\nまとめ：どちらを選ぶべきか こんな方には 推奨プラン 週数回の軽い利用 無料版 毎日業務で活用・制限が気になる Plus AIを本業・副業の柱にしたい Plus or Pro チームで使いたい Team まず無料版を使ってみて、制限が気になり始めたらPlusへの移行を検討しましょう。「制限に引っかかってストレスを感じた瞬間」がアップグレードの最良のタイミングです。\n関連記事・おすすめリソース ChatGPTプロンプトテンプレート集 ChatGPTを仕事に活用する方法2026 AI副業の始め方 関連ツール 月々の支出バランスを見直す → 家計簿シミュレーター サブスクの年間コストを計算 → サブスク管理計算ツール Productivity Worksのテンプレート・ツールも活用しよう ChatGPTをより効率的に使いこなすためのプロンプトテンプレートや業務効率化ツールをBOOTHで販売中です。\nProductivity Works BOOTHストアはこちら ChatGPTの有料プランと組み合わせることで、作業効率を最大化できます。ぜひチェックしてみてください。\n本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/posts/chatgpt-muryou-yuryou-chigai-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「ChatGPTの有料版って本当に必要？」「無料でも十分？」——毎月月額料金を払う価値があるのか迷っている方は多いはず。本記事では2026年最新のプラン構成をもとに、\u003cstrong\u003e無料版と有料版の違いを徹底比較\u003c/strong\u003eします。あなたの用途に合ったプランを選ぶための判断基準も解説するので、ぜひ最後まで読んでみてください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"chatgpt-2026年のプラン構成\"\u003eChatGPT 2026年のプラン構成\u003c/h2\u003e\n\u003cp\u003eOpenAIは2026年時点で以下のプランを提供しています。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eプラン名\u003c/th\u003e\n          \u003cth\u003e月額料金\u003c/th\u003e\n          \u003cth\u003e主な対象ユーザー\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eFree（無料）\u003c/td\u003e\n          \u003ctd\u003e0円\u003c/td\u003e\n          \u003ctd\u003e試しに使いたい方・ライトユーザー\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePlus\u003c/td\u003e\n          \u003ctd\u003e約3,000円\u003c/td\u003e\n          \u003ctd\u003eヘビーユーザー・ビジネス利用\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePro\u003c/td\u003e\n          \u003ctd\u003e約20,000円\u003c/td\u003e\n          \u003ctd\u003e研究者・AIを本格活用したい方\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTeam\u003c/td\u003e\n          \u003ctd\u003e約4,000円/人\u003c/td\u003e\n          \u003ctd\u003eチーム・法人利用\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"無料版と有料版の主な違い一覧\"\u003e無料版と有料版の主な違い一覧\u003c/h2\u003e\n\u003ch3 id=\"使えるaiモデルの差\"\u003e使えるAIモデルの差\u003c/h3\u003e\n\u003cp\u003eこれが最も重要な違いです。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e機能\u003c/th\u003e\n          \u003cth\u003e無料版\u003c/th\u003e\n          \u003cth\u003ePlus\u003c/th\u003e\n          \u003cth\u003ePro\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eGPT-4o\u003c/td\u003e\n          \u003ctd\u003e制限付き利用可\u003c/td\u003e\n          \u003ctd\u003e優先アクセス・制限緩和\u003c/td\u003e\n          \u003ctd\u003e無制限\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eo1 / o3モデル\u003c/td\u003e\n          \u003ctd\u003e一部のみ\u003c/td\u003e\n          \u003ctd\u003e利用可\u003c/td\u003e\n          \u003ctd\u003e無制限\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eGPT-4o mini\u003c/td\u003e\n          \u003ctd\u003e無制限\u003c/td\u003e\n          \u003ctd\u003e無制限\u003c/td\u003e\n          \u003ctd\u003e無制限\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e画像生成（DALL-E）\u003c/td\u003e\n          \u003ctd\u003e制限あり\u003c/td\u003e\n          \u003ctd\u003e利用可\u003c/td\u003e\n          \u003ctd\u003e高優先度\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e音声会話モード\u003c/td\u003e\n          \u003ctd\u003e基本のみ\u003c/td\u003e\n          \u003ctd\u003e高度な音声モード\u003c/td\u003e\n          \u003ctd\u003eフル機能\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eカスタムGPTs\u003c/td\u003e\n          \u003ctd\u003e利用可（作成不可）\u003c/td\u003e\n          \u003ctd\u003e作成・利用可\u003c/td\u003e\n          \u003ctd\u003e作成・利用可\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"利用制限の差\"\u003e利用制限の差\u003c/h3\u003e\n\u003cp\u003e無料版ではGPT-4oなどの高性能モデルは\u003cstrong\u003e一定メッセージ数を超えると自動的に低性能モデルへ切り替わります\u003c/strong\u003e。ピーク時間帯はさらに制限が強くなることもあります。\u003c/p\u003e\n\u003cp\u003ePlusでは制限がほぼなくなり、混雑時も優先的にリソースが割り当てられます。\u003c/p\u003e\n\u003ch3 id=\"ファイル添付分析機能の差\"\u003eファイル添付・分析機能の差\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e機能\u003c/th\u003e\n          \u003cth\u003e無料版\u003c/th\u003e\n          \u003cth\u003ePlus以上\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePDFファイル読み込み\u003c/td\u003e\n          \u003ctd\u003e制限あり\u003c/td\u003e\n          \u003ctd\u003e高い上限\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eExcelデータ分析\u003c/td\u003e\n          \u003ctd\u003e制限あり\u003c/td\u003e\n          \u003ctd\u003e利用可\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e画像アップロード分析\u003c/td\u003e\n          \u003ctd\u003e利用可\u003c/td\u003e\n          \u003ctd\u003e制限緩和\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eWeb検索（Browsing）\u003c/td\u003e\n          \u003ctd\u003e利用可\u003c/td\u003e\n          \u003ctd\u003e高優先度\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"無料版で十分なケース\"\u003e無料版で十分なケース\u003c/h2\u003e\n\u003cp\u003e以下に当てはまる方は\u003cstrong\u003e無料版で十分\u003c/strong\u003eです。\u003c/p\u003e","title":"ChatGPT無料版と有料版の違い2026年完全比較【どっちを選ぶべき？】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「ChatGPTに聞いてみたけど、なんか微妙な回答しか返ってこない」——それはプロンプト（指示文）の書き方が原因かもしれません。同じChatGPTを使っても、プロンプトの質で回答の質は大きく変わります。本記事では、すぐに実践できるプロンプトの書き方のコツと、コピペして使えるテンプレートをまとめました。\nプロンプトとは？なぜ重要なのか プロンプトとはChatGPTへの「指示文」のことです。AIは指示を忠実に実行しようとしますが、指示が曖昧だと期待外れの回答が返ってきます。\nNG例：\nブログ記事を書いて\nOK例：\nあなたはSEOライターです。「在宅ワーク 始め方」というキーワードで、30代の会社員が副業を始めるための記事を書いてください。見出し（H2/H3）構成あり、文字数2000字程度、です・ます調で書いてください。\n高品質な回答を引き出す5つの法則 法則1：「役割」を与える（ロールプロンプティング） ChatGPTに専門家の役割を与えることで、回答の質が大幅に向上します。\n書き方：\nあなたは〇〇の専門家です。 あなたは10年以上の経験を持つ〇〇です。 例：\nあなたはプロの税理士です。個人事業主の確定申告について、 初心者向けにわかりやすく説明してください。 法則2：「出力形式」を指定する どんな形式で回答してほしいか明確に伝えましょう。\n形式の指定例：\n箇条書きで5つ 表形式で比較 ステップバイステップで番号付きで 500文字以内で Markdown形式で 例：\n以下の5つのAIツールを表形式で比較してください。 比較項目：価格、主な機能、対象ユーザー、日本語対応 ツール：ChatGPT, Claude, Gemini, Copilot, Perplexity 法則3：「ターゲット・コンテキスト」を明示する 誰向けに、どんな目的で、という文脈を伝えると回答の的確さが上がります。\n例：\n対象読者：副業に興味がある30代の会社員 目的：副業でクラウドソーシングを始めるための入門記事 文体：です・ます調、専門用語は使わない 法則4：「制約・条件」を設ける 回答の方向性を絞ることで、的外れな回答を防げます。\n制約の例：\n〇〇は含めないで 〇〇の観点から 日本の法律・慣習に基づいて 2025年以降の情報で 例：\n中小企業向けのAI導入メリットを説明してください。 条件： - コスト削減の観点から - 具体的な金額・数値を含める - 初期費用が少ないツールを優先 - 箇条書きで5つ 法則5：「例示・サンプル」を提供する 出力のサンプルや例を見せることで、期待する形式に近づけられます（Few-shotプロンプティング）。\n例：\n以下の形式でメール件名を10個考えてください。 例： - 【重要】〇〇について（緊急対応のお願い） - 【ご確認】〇〇の件につきまして - 〇〇のご提案｜株式会社〇〇 テーマ：新製品のオンラインセミナー開催のご案内 職種別：すぐ使えるプロンプトテンプレート ビジネス文書・メール系 メール下書き作成：\n以下の条件でビジネスメールの文章を作成してください。 宛先：取引先の担当者（30代・男性） 目的：先日の打ち合わせのお礼と次回アポイントのお願い トーン：丁寧・ビジネス的 文字数：300字以内 署名は不要 議事録作成：\n以下のメモをもとに、ビジネス会議の議事録を作成してください。 ・日時：2026年5月14日 14:00〜15:00 ・参加者：田中（営業）、鈴木（マーケ）、佐藤（PM） ・議題：新製品ローンチ計画 [メモの内容をここに貼り付ける] 形式： - 決定事項 - アクションアイテム（担当者・期限付き） - 次回会議の議題候補 ライター・ブロガー系 SEO記事の構成作成：\n以下のキーワードでSEO記事の構成を作成してください。 キーワード：「副業 確定申告 やり方」 検索意図：会社員が副業を始めて確定申告のやり方を知りたい ターゲット：副業初心者の会社員 文字数：3,000〜5,000字の記事構成 出力形式：H2・H3の見出し一覧と各見出しの要点メモ SNS投稿文の作成：\n以下の内容でX（旧Twitter）の投稿を5パターン作成してください。 内容：新NISAを始めたばかりの人向けの投資アドバイス 文字数：各140文字以内 条件： - 絵文字を1〜2個使う - 実践的なアドバイスを含める - リツイートされやすいフック（書き出し）を意識する エンジニア・プログラマー系 コードのレビュー・改善：\n以下のPythonコードをレビューして、改善点を指摘してください。 改善の観点： - バグのリスク - 可読性 - パフォーマンス - Pythonのベストプラクティス [コードをここに貼り付ける] エラーの解決：\n以下のエラーメッセージの原因と解決策を教えてください。 使用言語：Python 3.11 エラー内容：[エラーメッセージをここに貼り付け] 実行したコード：[コードをここに貼り付け] 解決策は初心者でもわかるように段階的に説明してください。 マーケター系 キャッチコピー作成：\n以下の商品のキャッチコピーを10個作成してください。 商品：AIを活用した業務効率化ツール（Notionテンプレート） ターゲット：残業が多い会社員（30〜40代） 訴求点：時間短縮・作業自動化・使いやすさ 文字数：各30文字以内 トーン：親しみやすい・共感を呼ぶ 競合分析レポート：\n以下の企業の競合分析を行い、表形式でまとめてください。 分析対象：[企業名] 比較軸： 1. 主力製品・サービス 2. ターゲット顧客 3. 価格帯 4. 強み 5. 弱み（推定） 6. 差別化ポイント 競合他社：[競合A], [競合B], [競合C] よくある失敗パターンとその改善策 失敗1：一度の指示が長すぎる 一つのプロンプトに複数の複雑なタスクを詰め込みすぎると、回答が散漫になります。\n改善： タスクを分割して、ステップごとに対話する。\n失敗2：「いい感じに」「適切に」などの曖昧な指示 「プロらしく書いて」「わかりやすくして」は非常に主観的です。\n改善： 「です・ます調」「専門用語なし」「500字以内」など具体的に指定する。\n失敗3：フィードバックを与えない 最初の回答が微妙でもそこで諦めず、追加指示を出しましょう。\nフィードバック例：\n回答はよかったですが、以下を修正してください： - 全体的にもっとカジュアルなトーンに - 第3項目をもっと具体的に（数字や事例を追加） - 文字数を半分程度に削減 失敗4：最新情報が必要なのに確認しない ChatGPTの知識には更新日があります。最新データが必要な場合は「最新の情報を提供してください。ただし、不確かな場合はその旨を明示してください」と明示しましょう。\nプロンプトの精度を上げる追加テクニック チェーン・オブ・ソート（思考の連鎖） 「段階的に考えてから回答してください」 「なぜそう考えるか理由も含めて説明してください」 これだけで複雑な問題への回答精度が大きく上がります。\nペルソナの設定 「あなたは厳格な編集者です。私が書いた文章を赤ペン先生のように 厳しくレビューして、具体的な改善点を指摘してください」 逆質問させる 「私の指示が曖昧な部分があれば、回答の前に質問してください」 これにより、ChatGPT側から確認してくれるため、ミスマッチが減ります。\nまとめ：プロンプトの書き方5原則 役割を与える（「あなたは〇〇の専門家です」） 出力形式を指定する（箇条書き・表・文字数） コンテキストを明示する（誰向け・何のため） 制約・条件を設ける（含めない情報・観点） 例示する（期待する出力のサンプル） プロンプトは一発で完璧を目指さず、対話しながら改善していくものです。まずは試して、フィードバックして、精度を上げていく練習を繰り返しましょう。\nプロンプト力が上がり、副業やフリーランスの仕事でChatGPTを活用する機会が増えてきたら、収入管理・確定申告もデジタル化しておきましょう。freee会計 なら副業収入の記録から青色申告書類の作成まで、ガイドに沿ってスムーズに完結できます。\n関連記事 ChatGPTプロンプトテンプレート集 ChatGPTを仕事に活用する方法2026 ChatGPT無料版と有料版の違い2026 関連ツール フリーランスの適正時給を計算 → フリーランス報酬計算ツール 月々の支出バランスを見直す → 家計簿シミュレーター 厳選プロンプトテンプレート集をBOOTHで販売中 業種別・用途別に整理されたすぐ使えるChatGPTプロンプトテンプレート集をBOOTHで販売しています。ブログライター・マーケター・エンジニア・営業職向けのプロンプトを100本以上収録。\nProductivity Works BOOTHストアはこちら プロンプト設計から解放されて、アウトプットの質と量を同時に上げましょう。\n","permalink":"https://productivity-works.com/ja/posts/chatgpt-prompt-kakikata-kotsu/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「ChatGPTに聞いてみたけど、なんか微妙な回答しか返ってこない」——それはプロンプト（指示文）の書き方が原因かもしれません。同じChatGPTを使っても、\u003cstrong\u003eプロンプトの質で回答の質は大きく変わります\u003c/strong\u003e。本記事では、すぐに実践できるプロンプトの書き方のコツと、コピペして使えるテンプレートをまとめました。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"プロンプトとはなぜ重要なのか\"\u003eプロンプトとは？なぜ重要なのか\u003c/h2\u003e\n\u003cp\u003eプロンプトとはChatGPTへの「指示文」のことです。AIは指示を忠実に実行しようとしますが、指示が曖昧だと期待外れの回答が返ってきます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eNG例：\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eブログ記事を書いて\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003eOK例：\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eあなたはSEOライターです。「在宅ワーク 始め方」というキーワードで、30代の会社員が副業を始めるための記事を書いてください。見出し（H2/H3）構成あり、文字数2000字程度、です・ます調で書いてください。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"高品質な回答を引き出す5つの法則\"\u003e高品質な回答を引き出す5つの法則\u003c/h2\u003e\n\u003ch3 id=\"法則1役割を与えるロールプロンプティング\"\u003e法則1：「役割」を与える（ロールプロンプティング）\u003c/h3\u003e\n\u003cp\u003eChatGPTに\u003cstrong\u003e専門家の役割\u003c/strong\u003eを与えることで、回答の質が大幅に向上します。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e書き方：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eあなたは〇〇の専門家です。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eあなたは10年以上の経験を持つ〇〇です。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eあなたはプロの税理士です。個人事業主の確定申告について、\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e初心者向けにわかりやすく説明してください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"法則2出力形式を指定する\"\u003e法則2：「出力形式」を指定する\u003c/h3\u003e\n\u003cp\u003eどんな形式で回答してほしいか明確に伝えましょう。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e形式の指定例：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e箇条書きで5つ\u003c/li\u003e\n\u003cli\u003e表形式で比較\u003c/li\u003e\n\u003cli\u003eステップバイステップで番号付きで\u003c/li\u003e\n\u003cli\u003e500文字以内で\u003c/li\u003e\n\u003cli\u003eMarkdown形式で\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の5つのAIツールを表形式で比較してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e比較項目：価格、主な機能、対象ユーザー、日本語対応\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eツール：ChatGPT, Claude, Gemini, Copilot, Perplexity\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"法則3ターゲットコンテキストを明示する\"\u003e法則3：「ターゲット・コンテキスト」を明示する\u003c/h3\u003e\n\u003cp\u003e誰向けに、どんな目的で、という文脈を伝えると回答の的確さが上がります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e対象読者：副業に興味がある30代の会社員\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e目的：副業でクラウドソーシングを始めるための入門記事\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e文体：です・ます調、専門用語は使わない\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"法則4制約条件を設ける\"\u003e法則4：「制約・条件」を設ける\u003c/h3\u003e\n\u003cp\u003e回答の方向性を絞ることで、的外れな回答を防げます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e制約の例：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e〇〇は含めないで\u003c/li\u003e\n\u003cli\u003e〇〇の観点から\u003c/li\u003e\n\u003cli\u003e日本の法律・慣習に基づいて\u003c/li\u003e\n\u003cli\u003e2025年以降の情報で\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e中小企業向けのAI導入メリットを説明してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e条件：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e コスト削減の観点から\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 具体的な金額・数値を含める\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 初期費用が少ないツールを優先\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 箇条書きで5つ\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"法則5例示サンプルを提供する\"\u003e法則5：「例示・サンプル」を提供する\u003c/h3\u003e\n\u003cp\u003e出力のサンプルや例を見せることで、期待する形式に近づけられます（Few-shotプロンプティング）。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の形式でメール件名を10個考えてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e例：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 【重要】〇〇について（緊急対応のお願い）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 【ご確認】〇〇の件につきまして\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 〇〇のご提案｜株式会社〇〇\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eテーマ：新製品のオンラインセミナー開催のご案内\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"職種別すぐ使えるプロンプトテンプレート\"\u003e職種別：すぐ使えるプロンプトテンプレート\u003c/h2\u003e\n\u003ch3 id=\"ビジネス文書メール系\"\u003eビジネス文書・メール系\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eメール下書き作成：\u003c/strong\u003e\u003c/p\u003e","title":"ChatGPTプロンプトの書き方コツ【2026年版】すぐ使える例文テンプレート付き"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nすぐ使えるChatGPTプロンプトテンプレート20選【コピペOK】 ChatGPTを使い始めて「どう指示すれば良い結果が出るか分からない」という段階は、誰もが通る道です。\n良いプロンプトと悪いプロンプトの差は大きく、同じChatGPTでも出力の質が数倍変わることがあります。本記事では、ビジネスから学習まで幅広く使える厳選20テンプレートを紹介します。カスタマイズして自分用に育ててください。\nプロンプトの基本構造 効果的なプロンプトには以下の要素が含まれています。\n[役割設定] あなたは〇〇の専門家です。 [状況説明] 現在〇〇という状況です。 [具体的な依頼] 〇〇をしてください。 [制約・条件] 〇〇の形式で、〇〇文字以内で。 [出力形式] 箇条書き / 表 / 段落形式で出力してください。 全要素を毎回入れる必要はありませんが、意識するだけで出力の質が上がります。\nビジネス文書・メール系（5選） テンプレート1：ビジネスメール作成 以下の条件でビジネスメールを作成してください。 【宛先】[取引先名・担当者名] 【目的】[メールの目的を一文で] 【伝えたい内容】 - [ポイント1] - [ポイント2] 【トーン】丁寧、しかし簡潔に 【その他条件】件名も一緒に考えてください テンプレート2：断りメール 以下の状況で、相手との関係を壊さず丁寧に断るメールを書いてください。 【断る内容】[依頼内容・案件名] 【断る理由】[理由。書きたくなければ「理由は書かずに」と指定] 【今後の関係】[今後も関係を続けたい / 今後の機会につなげたい] テンプレート3：議事録作成 以下の会議の文字起こしを議事録にまとめてください。 【フォーマット】 1. 会議概要（日時・参加者・目的） 2. 議題と議論の要点 3. 決定事項（箇条書き） 4. アクションアイテム（担当者・期日つき） 5. 次回予定 【文字起こし内容】 [ここに文字起こし内容を貼り付ける] テンプレート4：企画書の構成作成 以下の企画の内容で、経営層向けの提案資料の構成（章立て）を作成してください。 各章に含めるべき内容のポイントも3点ずつ挙げてください。 【企画名】[企画名] 【目的・背景】[簡単に説明] 【対象読者】[役職・部署] 【伝えたい核心メッセージ】[一文で] テンプレート5：上司・クライアントへの報告文 以下の内容を、簡潔で読みやすい進捗報告文にしてください。 【報告する相手】[上司/クライアント/経営層] 【報告内容の骨子】 - 現状：[現在の状況] - 課題：[直面している問題] - 対応策：[取っている/取る予定の対応] - 依頼事項：[相手に判断・行動を求めること] 【制約】300字以内で コンテンツ・ライティング系（5選） テンプレート6：ブログ記事の構成作成 以下のテーマで、SEOを意識したブログ記事の構成を作成してください。 【テーマ】[記事テーマ] 【ターゲットキーワード】[メインKW] + [サブKW] 【想定読者】[読者像を具体的に] 【記事の目的】[情報提供 / 購買促進 / 問い合わせ獲得] 【文字数目安】[2,000〜3,000字 など] H1・H2・H3の構成と、各セクションに書くべき内容のポイントをリストアップしてください。 テンプレート7：SNS投稿（X/Twitter用） 以下のコンテンツを、X（Twitter）の投稿文3パターンに変換してください。 【元のコンテンツ】[記事・情報・アイデアの内容] 【投稿の目的】[認知拡大 / エンゲージメント / フォロワー増加] 【トーン】[カジュアル / 専門的 / 共感型] 各パターンは140字以内で、スレッド形式（3〜5ツイート）も1案含めてください。 テンプレート8：商品・サービスの説明文 以下の商品/サービスのLP（ランディングページ）向けキャッチコピーと説明文を作成してください。 【商品・サービス名】[名前] 【特徴・強み】[箇条書きで3〜5点] 【ターゲット顧客】[どんな人が買うか] 【競合との違い】[差別化ポイント] 【価格帯】[任意] キャッチコピー3案 + 200字以内の説明文1案を出してください。 テンプレート9：メルマガ・ニュースレター 以下のテーマで、読者が読み続けたくなるメルマガ1通を書いてください。 【テーマ】[今回伝えたいこと] 【読者との関係性】[登録してどのくらい / 関心領域] 【本文のゴール】[クリックしてほしいURL / 行動してほしいこと] 【文字数】400〜600字 【トーン】親しみやすく、でも価値ある情報を届ける感じで テンプレート10：要約（長文→短文） 以下の文章を[200字以内]に要約してください。 【要約の目的】[誰かに説明する / SNSに投稿する / 社内共有する] 【重要ポイント】必ず含めてほしい要素があれば書く 【文体】[です・ます調 / 箇条書き] [要約したい文章を貼り付ける] 学習・リサーチ系（5選） テンプレート11：わかりやすい解説を求める [専門用語・概念]を、[対象者（例：高校生 / IT未経験の営業職）]にも理解できるように説明してください。 【説明スタイル】 - 難しい言葉を使わない - 具体的な例え話を1〜2個使う - 図解が有効な場合はASCIIアートや箇条書きで表現する - 最後に「よくある誤解」を1つ指摘する テンプレート12：比較・検討 以下の選択肢を比較してください。 【比較対象】[A] vs [B] vs [C]（必要な数だけ） 【比較軸】 1. [比較したい観点1] 2. [比較したい観点2] 3. [比較したい観点3] 【私の状況】[どんな人 / 用途 / 予算など] 最後に、私の状況を踏まえたおすすめを一言添えてください。 テンプレート13：学習計画の作成 以下のスキルを習得するための学習計画を作成してください。 【習得したいスキル】[スキル名] 【現在のレベル】[ゼロ / 基礎知識あり / 中級] 【利用可能な学習時間】[1日〇時間、週〇日] 【目標期間】[〇ヶ月以内に] 【目標レベル】[どこまでできるようになりたいか] 週ごとのスケジュールと、各フェーズで使う無料・有料リソースも提案してください。 テンプレート14：壁打ち・アイデア出し 私は今[課題・テーマ]について考えています。 以下の観点からアイデアや視点を提供してください。 【求めること】 - まず私が見落としているかもしれない観点を3〜5個指摘してください - それぞれに対して具体的なアクションアイデアを1〜2個 - 最後に「もし私が〇〇だったらこう考える」という形で総括してください 【私の現状・前提】 [背景情報を書く] テンプレート15：英文メールの返信 以下の英文メールに対する返信を書いてください。 【返信の要点】 - [伝えたいこと1] - [伝えたいこと2] 【トーン】[フォーマル / セミフォーマル] 【相手との関係】[初対面 / 取引先 / 協力会社] [受け取ったメール原文を貼り付ける] コーディング・技術系（5選） テンプレート16：コードの説明を求める 以下のコードを初心者にも分かるように説明してください。 【説明の形式】 1. このコード全体が何をするものか（1〜2文） 2. 行ごと・ブロックごとのコメント付き解説 3. 初心者が混乱しやすいポイントの補足 [コードを貼り付ける] テンプレート17：エラー解決 以下のエラーが発生しています。原因と解決策を教えてください。 【使用言語/環境】[Python 3.11 / Node.js 20 など] 【エラーメッセージ】 [エラーメッセージをそのままコピー] 【該当コード】 [エラーが出ているコードを貼り付ける] 【試したこと】[すでに試した解決策があれば] テンプレート18：コードレビュー 以下のコードをレビューしてください。 【観点】 1. バグ・潜在的なエラー 2. パフォーマンス改善の余地 3. 可読性・保守性 4. セキュリティ上の懸念点（あれば） 改善箇所は修正後のコードも示してください。 [コードを貼り付ける] テンプレート19：関数/スクリプトの作成 以下の機能を持つ[言語名]の関数を書いてください。 【機能】[何をする関数か] 【入力】[引数の型と説明] 【出力】[戻り値の型と説明] 【考慮事項】[エラーハンドリング / 特殊ケース / パフォーマンス要件] コードとともに、使用例（サンプル入出力）も示してください。 テンプレート20：ツールの選定相談 以下の要件を満たす技術スタックを提案してください。 【作りたいもの】[プロダクト・機能の概要] 【チームのスキルセット】[使える言語・フレームワーク] 【規模感】[ユーザー数・データ量の想定] 【予算感】[無料優先 / ある程度投資できる] 【優先事項】[開発スピード / スケーラビリティ / 保守性] 選定理由とトレードオフも一緒に教えてください。 まとめ：テンプレートは育てるもの 紹介したテンプレートはそのまま使えますが、使ううちに「自分の用途に合った形」にカスタマイズしていくことが重要です。\n特に「役割設定」「読者像」「禁止事項」の3つを自分のケースに合わせてチューニングするだけで、出力の質が一段上がります。良いプロンプトは、自分だけのテンプレートライブラリとして蓄積してください。\nChatGPTを使いこなして副業やフリーランス収入が生じたら、確定申告の準備を早めに始めましょう。freee会計 は銀行口座・クレジットカードと自動連携して収入・経費を記録し、確定申告書類の作成までガイドに沿って進められます。副業初心者でも安心して使えます。\n関連記事\nAIで高品質な文章を作成するコツ7つ ChatGPTを仕事で使う具体的な活用法10選 ChatGPT API初心者向け完全ガイド 関連ツール 文字数・単語数をリアルタイムでカウント → 文字数カウンター テキストの差分を検出 → テキスト比較ツール 正規表現をリアルタイムでテスト → 正規表現テスター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 月々の支出バランスを見直す → 家計簿シミュレーター 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド ","permalink":"https://productivity-works.com/ja/posts/chatgpt-%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88-%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"すぐ使えるchatgptプロンプトテンプレート20選コピペok\"\u003eすぐ使えるChatGPTプロンプトテンプレート20選【コピペOK】\u003c/h1\u003e\n\u003cp\u003eChatGPTを使い始めて「どう指示すれば良い結果が出るか分からない」という段階は、誰もが通る道です。\u003c/p\u003e\n\u003cp\u003e良いプロンプトと悪いプロンプトの差は大きく、同じChatGPTでも出力の質が数倍変わることがあります。本記事では、ビジネスから学習まで幅広く使える厳選20テンプレートを紹介します。カスタマイズして自分用に育ててください。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"プロンプトの基本構造\"\u003eプロンプトの基本構造\u003c/h2\u003e\n\u003cp\u003e効果的なプロンプトには以下の要素が含まれています。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[役割設定] あなたは〇〇の専門家です。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[状況説明] 現在〇〇という状況です。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[具体的な依頼] 〇〇をしてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[制約・条件] 〇〇の形式で、〇〇文字以内で。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[出力形式] 箇条書き / 表 / 段落形式で出力してください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e全要素を毎回入れる必要はありませんが、意識するだけで出力の質が上がります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ビジネス文書メール系5選\"\u003eビジネス文書・メール系（5選）\u003c/h2\u003e\n\u003ch3 id=\"テンプレート1ビジネスメール作成\"\u003eテンプレート1：ビジネスメール作成\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の条件でビジネスメールを作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【宛先】[取引先名・担当者名]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【目的】[メールの目的を一文で]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【伝えたい内容】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e [ポイント1]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e [ポイント2]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【トーン】丁寧、しかし簡潔に\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【その他条件】件名も一緒に考えてください\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート2断りメール\"\u003eテンプレート2：断りメール\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の状況で、相手との関係を壊さず丁寧に断るメールを書いてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【断る内容】[依頼内容・案件名]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【断る理由】[理由。書きたくなければ「理由は書かずに」と指定]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【今後の関係】[今後も関係を続けたい / 今後の機会につなげたい]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート3議事録作成\"\u003eテンプレート3：議事録作成\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の会議の文字起こしを議事録にまとめてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【フォーマット】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e 会議概要（日時・参加者・目的）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e 議題と議論の要点\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 決定事項（箇条書き）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e アクションアイテム（担当者・期日つき）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e5.\u003c/span\u003e 次回予定\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【文字起こし内容】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[ここに文字起こし内容を貼り付ける]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート4企画書の構成作成\"\u003eテンプレート4：企画書の構成作成\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の企画の内容で、経営層向けの提案資料の構成（章立て）を作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e各章に含めるべき内容のポイントも3点ずつ挙げてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【企画名】[企画名]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【目的・背景】[簡単に説明]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【対象読者】[役職・部署]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【伝えたい核心メッセージ】[一文で]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート5上司クライアントへの報告文\"\u003eテンプレート5：上司・クライアントへの報告文\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の内容を、簡潔で読みやすい進捗報告文にしてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【報告する相手】[上司/クライアント/経営層]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【報告内容の骨子】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 現状：[現在の状況]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 課題：[直面している問題]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 対応策：[取っている/取る予定の対応]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 依頼事項：[相手に判断・行動を求めること]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【制約】300字以内で\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"コンテンツライティング系5選\"\u003eコンテンツ・ライティング系（5選）\u003c/h2\u003e\n\u003ch3 id=\"テンプレート6ブログ記事の構成作成\"\u003eテンプレート6：ブログ記事の構成作成\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下のテーマで、SEOを意識したブログ記事の構成を作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【テーマ】[記事テーマ]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【ターゲットキーワード】[メインKW] + [サブKW]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【想定読者】[読者像を具体的に]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【記事の目的】[情報提供 / 購買促進 / 問い合わせ獲得]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【文字数目安】[2,000〜3,000字 など]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eH1・H2・H3の構成と、各セクションに書くべき内容のポイントをリストアップしてください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート7sns投稿xtwitter用\"\u003eテンプレート7：SNS投稿（X/Twitter用）\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下のコンテンツを、X（Twitter）の投稿文3パターンに変換してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【元のコンテンツ】[記事・情報・アイデアの内容]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【投稿の目的】[認知拡大 / エンゲージメント / フォロワー増加]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【トーン】[カジュアル / 専門的 / 共感型]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e各パターンは140字以内で、スレッド形式（3〜5ツイート）も1案含めてください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート8商品サービスの説明文\"\u003eテンプレート8：商品・サービスの説明文\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の商品/サービスのLP（ランディングページ）向けキャッチコピーと説明文を作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【商品・サービス名】[名前]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【特徴・強み】[箇条書きで3〜5点]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【ターゲット顧客】[どんな人が買うか]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【競合との違い】[差別化ポイント]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【価格帯】[任意]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eキャッチコピー3案 + 200字以内の説明文1案を出してください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート9メルマガニュースレター\"\u003eテンプレート9：メルマガ・ニュースレター\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下のテーマで、読者が読み続けたくなるメルマガ1通を書いてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【テーマ】[今回伝えたいこと]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【読者との関係性】[登録してどのくらい / 関心領域]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【本文のゴール】[クリックしてほしいURL / 行動してほしいこと]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【文字数】400〜600字\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【トーン】親しみやすく、でも価値ある情報を届ける感じで\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート10要約長文短文\"\u003eテンプレート10：要約（長文→短文）\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の文章を[200字以内]に要約してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【要約の目的】[誰かに説明する / SNSに投稿する / 社内共有する]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【重要ポイント】必ず含めてほしい要素があれば書く\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【文体】[です・ます調 / 箇条書き]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[要約したい文章を貼り付ける]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"学習リサーチ系5選\"\u003e学習・リサーチ系（5選）\u003c/h2\u003e\n\u003ch3 id=\"テンプレート11わかりやすい解説を求める\"\u003eテンプレート11：わかりやすい解説を求める\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[専門用語・概念]を、[対象者（例：高校生 / IT未経験の営業職）]にも理解できるように説明してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【説明スタイル】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 難しい言葉を使わない\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 具体的な例え話を1〜2個使う\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 図解が有効な場合はASCIIアートや箇条書きで表現する\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 最後に「よくある誤解」を1つ指摘する\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート12比較検討\"\u003eテンプレート12：比較・検討\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の選択肢を比較してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【比較対象】[A] vs [B] vs [C]（必要な数だけ）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【比較軸】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e [比較したい観点1]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e [比較したい観点2]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e [比較したい観点3]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【私の状況】[どんな人 / 用途 / 予算など]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e最後に、私の状況を踏まえたおすすめを一言添えてください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート13学習計画の作成\"\u003eテンプレート13：学習計画の作成\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下のスキルを習得するための学習計画を作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【習得したいスキル】[スキル名]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【現在のレベル】[ゼロ / 基礎知識あり / 中級]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【利用可能な学習時間】[1日〇時間、週〇日]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【目標期間】[〇ヶ月以内に]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【目標レベル】[どこまでできるようになりたいか]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e週ごとのスケジュールと、各フェーズで使う無料・有料リソースも提案してください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート14壁打ちアイデア出し\"\u003eテンプレート14：壁打ち・アイデア出し\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e私は今[課題・テーマ]について考えています。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の観点からアイデアや視点を提供してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【求めること】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e まず私が見落としているかもしれない観点を3〜5個指摘してください\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e それぞれに対して具体的なアクションアイデアを1〜2個\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 最後に「もし私が〇〇だったらこう考える」という形で総括してください\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【私の現状・前提】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[背景情報を書く]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート15英文メールの返信\"\u003eテンプレート15：英文メールの返信\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の英文メールに対する返信を書いてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【返信の要点】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e [伝えたいこと1]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e [伝えたいこと2]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【トーン】[フォーマル / セミフォーマル]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【相手との関係】[初対面 / 取引先 / 協力会社]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[受け取ったメール原文を貼り付ける]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"コーディング技術系5選\"\u003eコーディング・技術系（5選）\u003c/h2\u003e\n\u003ch3 id=\"テンプレート16コードの説明を求める\"\u003eテンプレート16：コードの説明を求める\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下のコードを初心者にも分かるように説明してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【説明の形式】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e このコード全体が何をするものか（1〜2文）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e 行ごと・ブロックごとのコメント付き解説\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 初心者が混乱しやすいポイントの補足\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[コードを貼り付ける]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート17エラー解決\"\u003eテンプレート17：エラー解決\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下のエラーが発生しています。原因と解決策を教えてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【使用言語/環境】[Python 3.11 / Node.js 20 など]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【エラーメッセージ】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[エラーメッセージをそのままコピー]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【該当コード】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[エラーが出ているコードを貼り付ける]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【試したこと】[すでに試した解決策があれば]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート18コードレビュー\"\u003eテンプレート18：コードレビュー\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下のコードをレビューしてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【観点】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e バグ・潜在的なエラー\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e パフォーマンス改善の余地\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 可読性・保守性\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e セキュリティ上の懸念点（あれば）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e改善箇所は修正後のコードも示してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[コードを貼り付ける]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート19関数スクリプトの作成\"\u003eテンプレート19：関数/スクリプトの作成\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の機能を持つ[言語名]の関数を書いてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【機能】[何をする関数か]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【入力】[引数の型と説明]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【出力】[戻り値の型と説明]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【考慮事項】[エラーハンドリング / 特殊ケース / パフォーマンス要件]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eコードとともに、使用例（サンプル入出力）も示してください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"テンプレート20ツールの選定相談\"\u003eテンプレート20：ツールの選定相談\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の要件を満たす技術スタックを提案してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【作りたいもの】[プロダクト・機能の概要]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【チームのスキルセット】[使える言語・フレームワーク]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【規模感】[ユーザー数・データ量の想定]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【予算感】[無料優先 / ある程度投資できる]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【優先事項】[開発スピード / スケーラビリティ / 保守性]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e選定理由とトレードオフも一緒に教えてください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"まとめテンプレートは育てるもの\"\u003eまとめ：テンプレートは育てるもの\u003c/h2\u003e\n\u003cp\u003e紹介したテンプレートはそのまま使えますが、使ううちに「自分の用途に合った形」にカスタマイズしていくことが重要です。\u003c/p\u003e","title":"すぐ使えるChatGPTプロンプトテンプレート20選【コピペOK】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nChatGPTを仕事で使う具体的な活用法10選【2026年最新版】 「ChatGPTが便利だと聞くけど、実際に仕事でどう使えばいいのか分からない」——そんな声をよく耳にします。\n2026年現在、ChatGPTはもはや「試してみた」段階を超え、日常業務に組み込んで当たり前の時代になっています。本記事では、実際にビジネス現場で使える具体的な活用法を10個、惜しみなく紹介します。\nChatGPT 仕事活用シーン 10選 ✉️ メール作成 ゼロから即完成 📝 議事録作成 5分で共有 📊 企画書ドラフト 叩き台を即作成 🔍 リサーチ補助 情報整理を効率化 📉 Excel関数作成 即答・即コード 📱 SNS投稿文 複数媒体対応 🌐 英語メール翻訳 ニュアンス解説も 🛠️ コードデバッグ エラー即解決 🖥️ プレゼン構成 論理的に整理 📋 業務マニュアル 属人化を解消 「今日一番面倒な作業」からChatGPTに任せてみましょう → まず1つ試すだけで、使い方が自然に見えてきます ChatGPT仕事活用の前提：何が得意で何が苦手か 活用法に入る前に、ChatGPTの特性を押さえておきましょう。\n得意なこと\nテキストの生成・要約・翻訳 構造化（箇条書き、表形式への変換） アイデアの洗い出し・ブレスト コードの生成・デバッグ 苦手なこと（注意が必要なこと）\n最新情報（学習データに限界あり） 数値計算の正確性（必ず検算を） 機密情報の取り扱い（社内規定を確認） この特性を理解したうえで、以下の活用法を試してください。\n活用法1：ビジネスメールの文章作成 メール作成は、ChatGPTが最も威力を発揮する用途のひとつです。\n使い方の例\n以下の内容をビジネスメールとして丁寧に書いてください。 ・宛先：取引先のA社担当者 ・目的：先日の打ち合わせのお礼と、次回日程の提案 ・トーン：丁寧だが堅すぎない ・次回候補日：5月20日（火）14時、5月22日（木）10時 このように「誰に」「何を」「どんなトーンで」を指定するだけで、そのまま使えるレベルの文章が出てきます。ゼロから書く時間が半分以下になります。\n応用：返信文の作成 受け取ったメールをコピペして「この内容に対する返信を書いてください」と指示するだけでOK。断りのメールや催促メールなど、書きにくい文章こそ積極的に使いましょう。\n活用法2：会議の議事録作成 会議の録音や文字起こしをChatGPTに渡すと、構造化された議事録に整えてくれます。\nプロンプト例\n以下の会議の文字起こしを、議事録の形式にまとめてください。 ・日時・参加者・決定事項・アクションアイテム（担当者と期日）の形式で ・重要なポイントは太字で強調 [文字起こし内容をここに貼り付け] Zoom等の自動文字起こし機能と組み合わせれば、会議終了から5分以内に議事録を共有できます。\n活用法3：企画書・提案書のドラフト作成 「ゼロから企画書を書く」のは精神的にも時間的にも重労働です。ChatGPTに叩き台を作らせてから肉付けするアプローチが効果的です。\n使い方\n企画の概要を箇条書きでChatGPTに伝える 「この内容を企画書の構成に整理してください」と依頼 出てきた構成をベースに、数字や具体例を自分で追記 完成物の質は本人次第ですが、「白紙から考える」消耗がなくなるだけで生産性が大きく変わります。\n活用法4：資料作成のためのリサーチ補助 「○○について初心者向けに説明してください」「○○のメリット・デメリットを比較してください」という形で情報収集に使えます。\nただし、最新の数値データや事実確認が必要な情報は、必ず一次ソースで確認してください。ChatGPTはあくまで「たたき台」として活用するのが鉄則です。\n活用法5：スプレッドシート関数の作成 Excelやスプレッドシートの関数が分からないとき、ChatGPTに聞くと即答してくれます。\n例\nExcelでA列の商品名のうち、B列に「完了」と書いてある行だけを 別シートに抽出したいです。どんな関数を使えばいいですか？ VBAマクロの作成も得意です。「〇〇を自動化するVBAを書いてください」と依頼すると、そのまま貼り付けて使えるコードを出してくれることが多いです。\n活用法6：SNS投稿文の作成 X（旧Twitter）やLinkedIn、社内SlackなどのSNS投稿文作成も得意分野です。\n同じ内容でも、媒体に合わせたトーンやフォーマットで複数バージョンを作ってもらえます。「ブログ記事の要点を3つのSNS投稿にしてください」という使い方も便利です。\n活用法7：外国語メールの翻訳・作成 英語や中国語などのビジネスメールを読む・書く作業もChatGPTで大幅に効率化できます。\n翻訳ツールとの違いは、「このメールのニュアンスはどういう意味ですか？」と背景を聞けること。微妙なビジネス英語の表現も解説してくれます。\n活用法8：コードのデバッグとレビュー エンジニアはもちろん、Python等を使う非エンジニアにとっても強力な味方です。エラーメッセージをそのまま貼り付けて「このエラーの原因と修正方法を教えてください」と聞くだけで、多くの場合即解決します。\n活用法9：プレゼン資料のスライド構成 「○○についてのプレゼン資料のスライド構成を考えてください。対象は経営層で、10枚以内に収めたい」のように伝えると、論理的なスライド構成を提案してくれます。\n各スライドに入れるべき内容の要点まで出してくれるので、あとは肉付けするだけです。\n活用法10：業務マニュアルの作成 属人化している業務の手順を口頭で説明するような感覚でChatGPTに話しかけると、整理されたマニュアルに仕上げてくれます。\n以下の業務手順を、新入社員でも分かるようにマニュアル化してください。 [手順をざっくり説明する] チームの生産性向上に直結する使い方です。\nまとめ：まず1つだけ試してみる 10個の活用法を紹介しましたが、一度に全部やろうとする必要はありません。まず「今日の仕事で一番面倒な作業」をChatGPTに任せてみてください。\n最初の1回がうまくいくと、自然と使いどころが見えてきます。プロンプトの書き方も、使えば使うほど上達します。\nChatGPTを「検索エンジンの代わり」ではなく「仕事上のアシスタント」として使いこなすことで、あなたの可処分時間は確実に増えていきます。\nChatGPTで仕事の効率が上がったら、空いた時間を副業やキャリアアップに活かしましょう。副業収入が生じた場合の確定申告にはfreee会計 が便利です。また、AI活用スキルを武器に転職・年収アップを目指すならdoda の転職エージェントサービスもご活用ください。\n関連記事 すぐ使えるChatGPTプロンプトテンプレート20選【コピペOK】 AIで高品質な文章を作成するコツ7つ AIを使った副業の始め方完全ガイド【2026年版・月3万〜10万円を目指す】 ChatGPT無料版と有料版の違い2026年完全比較【どっちを選ぶべき？】 AI副業で稼ぐ方法2026年最新完全ガイド 関連ツール フリーランスとしてAIを活用して副業収入が増えたら → フリーランス報酬計算ツール 副業収入が生じた場合の税金を把握する → 副業税金計算ツール ポモドーロテクニックで集中力アップ → ポモドーロタイマー 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド ","permalink":"https://productivity-works.com/ja/posts/chatgpt-%E4%BB%95%E4%BA%8B-%E6%B4%BB%E7%94%A8%E6%B3%95-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"chatgptを仕事で使う具体的な活用法10選2026年最新版\"\u003eChatGPTを仕事で使う具体的な活用法10選【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「ChatGPTが便利だと聞くけど、実際に仕事でどう使えばいいのか分からない」——そんな声をよく耳にします。\u003c/p\u003e\n\u003cp\u003e2026年現在、ChatGPTはもはや「試してみた」段階を超え、日常業務に組み込んで当たり前の時代になっています。本記事では、実際にビジネス現場で使える具体的な活用法を10個、惜しみなく紹介します。\u003c/p\u003e\n\u003cdiv style=\"max-width:620px;margin:1.8em auto;text-align:center;\"\u003e\n\u003csvg viewBox=\"0 0 620 280\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:100%;height:auto;\" aria-label=\"ChatGPT仕事活用シーン10選\"\u003e\n  \u003cstyle\u003etext { font-family: 'Noto Sans JP', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', sans-serif; }\u003c/style\u003e\n  \u003crect width=\"620\" height=\"280\" rx=\"12\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"26\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"14\" font-weight=\"bold\"\u003eChatGPT 仕事活用シーン 10選\u003c/text\u003e\n  \u003c!-- アイコングリッド 2行×5列 --\u003e\n  \u003c!-- 行1 --\u003e\n  \u003c!-- メール作成 --\u003e\n  \u003crect x=\"20\" y=\"40\" width=\"108\" height=\"80\" rx=\"10\" fill=\"white\" stroke=\"#4a9eff\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"74\" y=\"70\" text-anchor=\"middle\" font-size=\"22\"\u003e✉️\u003c/text\u003e\n \u003ctext x=\"74\" y=\"90\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"10\" font-weight=\"bold\"\u003eメール作成\u003c/text\u003e\n \u003ctext x=\"74\" y=\"106\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003eゼロから即完成\u003c/text\u003e\n  \u003c!-- 議事録 --\u003e\n  \u003crect x=\"138\" y=\"40\" width=\"108\" height=\"80\" rx=\"10\" fill=\"white\" stroke=\"#4a9eff\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"192\" y=\"70\" text-anchor=\"middle\" font-size=\"22\"\u003e📝\u003c/text\u003e\n \u003ctext x=\"192\" y=\"90\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"10\" font-weight=\"bold\"\u003e議事録作成\u003c/text\u003e\n \u003ctext x=\"192\" y=\"106\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003e5分で共有\u003c/text\u003e\n  \u003c!-- 企画書 --\u003e\n  \u003crect x=\"256\" y=\"40\" width=\"108\" height=\"80\" rx=\"10\" fill=\"white\" stroke=\"#10b981\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"310\" y=\"70\" text-anchor=\"middle\" font-size=\"22\"\u003e📊\u003c/text\u003e\n \u003ctext x=\"310\" y=\"90\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"10\" font-weight=\"bold\"\u003e企画書ドラフト\u003c/text\u003e\n \u003ctext x=\"310\" y=\"106\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003e叩き台を即作成\u003c/text\u003e\n  \u003c!-- リサーチ --\u003e\n  \u003crect x=\"374\" y=\"40\" width=\"108\" height=\"80\" rx=\"10\" fill=\"white\" stroke=\"#10b981\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"428\" y=\"70\" text-anchor=\"middle\" font-size=\"22\"\u003e🔍\u003c/text\u003e\n \u003ctext x=\"428\" y=\"90\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"10\" font-weight=\"bold\"\u003eリサーチ補助\u003c/text\u003e\n \u003ctext x=\"428\" y=\"106\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003e情報整理を効率化\u003c/text\u003e\n  \u003c!-- 関数作成 --\u003e\n  \u003crect x=\"492\" y=\"40\" width=\"108\" height=\"80\" rx=\"10\" fill=\"white\" stroke=\"#f59e0b\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"546\" y=\"70\" text-anchor=\"middle\" font-size=\"22\"\u003e📉\u003c/text\u003e\n \u003ctext x=\"546\" y=\"90\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"10\" font-weight=\"bold\"\u003eExcel関数作成\u003c/text\u003e\n \u003ctext x=\"546\" y=\"106\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003e即答・即コード\u003c/text\u003e\n  \u003c!-- 行2 --\u003e\n  \u003c!-- SNS投稿 --\u003e\n  \u003crect x=\"20\" y=\"136\" width=\"108\" height=\"80\" rx=\"10\" fill=\"white\" stroke=\"#f59e0b\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"74\" y=\"166\" text-anchor=\"middle\" font-size=\"22\"\u003e📱\u003c/text\u003e\n \u003ctext x=\"74\" y=\"186\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"10\" font-weight=\"bold\"\u003eSNS投稿文\u003c/text\u003e\n \u003ctext x=\"74\" y=\"202\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003e複数媒体対応\u003c/text\u003e\n  \u003c!-- 翻訳 --\u003e\n  \u003crect x=\"138\" y=\"136\" width=\"108\" height=\"80\" rx=\"10\" fill=\"white\" stroke=\"#4a9eff\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"192\" y=\"166\" text-anchor=\"middle\" font-size=\"22\"\u003e🌐\u003c/text\u003e\n \u003ctext x=\"192\" y=\"186\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"10\" font-weight=\"bold\"\u003e英語メール翻訳\u003c/text\u003e\n \u003ctext x=\"192\" y=\"202\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003eニュアンス解説も\u003c/text\u003e\n  \u003c!-- デバッグ --\u003e\n  \u003crect x=\"256\" y=\"136\" width=\"108\" height=\"80\" rx=\"10\" fill=\"white\" stroke=\"#10b981\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"310\" y=\"166\" text-anchor=\"middle\" font-size=\"22\"\u003e🛠️\u003c/text\u003e\n \u003ctext x=\"310\" y=\"186\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"10\" font-weight=\"bold\"\u003eコードデバッグ\u003c/text\u003e\n \u003ctext x=\"310\" y=\"202\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003eエラー即解決\u003c/text\u003e\n  \u003c!-- プレゼン --\u003e\n  \u003crect x=\"374\" y=\"136\" width=\"108\" height=\"80\" rx=\"10\" fill=\"white\" stroke=\"#10b981\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"428\" y=\"166\" text-anchor=\"middle\" font-size=\"22\"\u003e🖥️\u003c/text\u003e\n \u003ctext x=\"428\" y=\"186\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"10\" font-weight=\"bold\"\u003eプレゼン構成\u003c/text\u003e\n \u003ctext x=\"428\" y=\"202\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003e論理的に整理\u003c/text\u003e\n  \u003c!-- マニュアル --\u003e\n  \u003crect x=\"492\" y=\"136\" width=\"108\" height=\"80\" rx=\"10\" fill=\"white\" stroke=\"#f59e0b\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"546\" y=\"166\" text-anchor=\"middle\" font-size=\"22\"\u003e📋\u003c/text\u003e\n \u003ctext x=\"546\" y=\"186\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"10\" font-weight=\"bold\"\u003e業務マニュアル\u003c/text\u003e\n \u003ctext x=\"546\" y=\"202\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003e属人化を解消\u003c/text\u003e\n\u003cp\u003e\u003ctext x=\"310\" y=\"254\" text-anchor=\"middle\" fill=\"#cbd5e1\" font-size=\"11\"\u003e「今日一番面倒な作業」からChatGPTに任せてみましょう\u003c/text\u003e\n\u003ctext x=\"310\" y=\"270\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"11\" font-weight=\"bold\"\u003e→ まず1つ試すだけで、使い方が自然に見えてきます\u003c/text\u003e\n\u003c/svg\u003e\u003c/p\u003e","title":"ChatGPTを仕事で使う具体的な活用法10選【2026年最新版】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nアフィリエイト開示: 本記事には一部アフィリエイトリンクが含まれます。リンク経由でご購入いただいた場合、当サイトに手数料が発生することがありますが、読者の方への費用は一切変わりません。紹介する製品・サービスはすべて編集部が実際に検証したものに限っています。\n共働き家計、うまく管理できていますか？ 「二人で働いているのに、なぜかお金が貯まらない」「夫婦でどちらが何を払うか毎回もめる」「月末になると急に口座残高が不安になる」——\n共働き夫婦の家計管理には、専業主婦（主夫）家庭とは異なる特有の難しさがあります。収入が2本あるぶん管理が複雑になり、「どちらがいくら払うか」という役割分担の問題も生じます。\nこの記事では、Excelを使って共働き夫婦専用の家計簿を作る方法を、具体的な数式・シート構成・運用ルールとともに解説します。\n共働き家計管理の3つのモデル 家計管理の方法を決める前に、共働き夫婦の家計管理モデルを3つ整理します。\nモデル1：完全合算型 2人の収入をすべて合算して、そこから生活費・貯蓄・個人のお小遣いを配分するモデル。\nメリット: 家計の全体像が見えやすく、貯蓄効率が高い デメリット: 個人の自由なお金が制限される感覚になりやすい\nモデル2：費用分担型 生活費の項目ごとに「夫が家賃・光熱費担当、妻が食費・保険担当」のように役割を決めるモデル。\nメリット: シンプルでわかりやすい デメリット: 収入格差があると不公平感が生まれやすい\nモデル3：割合負担型 収入の比率に応じて生活費を負担するモデル（例：夫収入60万、妻収入40万なら、夫6割・妻4割を生活費に拠出）。\nメリット: 収入差があっても公平感がある デメリット: 計算が複雑になる\n本記事では、モデル1（完全合算型）をベースにしながら、個人のお小遣い（自由費）を確保する方法でExcel家計簿を構築します。最も透明性が高く、貯蓄に向いているモデルです。\nExcel家計簿のシート構成 共働き夫婦向けのExcel家計簿は、以下の4つのシートで構成します。\nシート名 内容 ①ダッシュボード 月次サマリー・貯蓄進捗を一覧表示 ②収入シート 2人の収入を入力・管理 ③支出シート 支出を日付・カテゴリ別に記録 ④年間推移シート 月別の収支・貯蓄推移グラフ シート①：ダッシュボードの作り方 ダッシュボードは毎月の家計の「健康診断書」です。他のシートから数値を引っ張ってきて、一目で家計の状況がわかるように表示します。\nダッシュボードの構成要素 上部：月次サマリー\n【2026年5月の家計サマリー】 税引き後合計収入： ¥___,___ 合計支出： ¥___,___ 今月の黒字/赤字： ¥___,___ 今月の貯蓄額： ¥___,___ 貯蓄率： ___% 中部：カテゴリ別支出内訳\n横棒グラフで、カテゴリ別の支出金額と予算の比較を表示。\n下部：年間貯蓄目標の進捗\n年間貯蓄目標： ¥1,000,000 今年の貯蓄累計： ¥___,___ 達成率： ___% 残り： ¥___,___ 必要な数式（ダッシュボード） ダッシュボードのセルは、他のシートから値を参照する数式で構成します。例えば収入合計は：\n=収入シート!B25+収入シート!C25 支出合計は：\n=SUMIF(支出シート!D:D,\u0026#34;\u0026lt;=2026/5/31\u0026#34;,支出シート!G:G)-SUMIF(支出シート!D:D,\u0026#34;\u0026lt;=2026/4/30\u0026#34;,支出シート!G:G) または、月を選択するドロップダウンリストを作成して、SUMIFS関数で動的に集計する方法が便利です。\nシート②：収入シートの作り方 基本構成 行 項目 夫 妻 合計 3 給与（額面） 4 所得税・住民税 5 社会保険料 6 手取り収入 7 副業・その他収入 8 今月の合計収入 手取り収入の数式 =B3-B4-B5 （夫の手取り = 額面 - 所得税住民税 - 社会保険料） 配分の計算（モデル1：合算型の場合） 項目 金額 計算式 今月の合計収入 =D8 生活費・固定費に使う金額 固定費合計を参照 今月の貯蓄目標額 年間目標÷12 夫のお小遣い 固定額または収入の○% 妻のお小遣い 固定額または収入の○% 残り（余剰金） 収入−支出−貯蓄−お小遣い シート③：支出シートの作り方 カテゴリの設定 共働き夫婦の支出カテゴリは以下を基本に設定します。\n固定費（毎月ほぼ変わらない）\n住居費（家賃または住宅ローン） 水道光熱費（電気・ガス・水道） 通信費（スマートフォン・インターネット） 保険料（生命保険・損害保険） サブスクリプション（動画配信、音楽、ソフト等） 駐車場代・車維持費 変動費（月ごとに変わる）\n食費（スーパー・コンビニ等） 外食費 日用品・消耗品 医療費・薬代 衣服・美容 交通費 個人費（夫婦それぞれ）\n夫のお小遣い内の支出 妻のお小遣い内の支出 特別費（不定期）\n旅行・レジャー 家電・家具の購入 冠婚葬祭 自動車保険更新・車検 支出シートの列構成 列 項目 説明 A 連番 自動採番 B 日付 支出が発生した日 C 内容 何を買ったか D カテゴリ 上記のカテゴリから選択 E 支払者 夫/妻/共同口座 F 支払方法 現金/クレカ/電子マネー等 G 金額 支出金額 H メモ 任意メモ カテゴリのドロップダウンリストを設定する D列にカテゴリのドロップダウンリストを設定すると、入力が速くなり集計も正確になります。\nD列を選択 「データ」タブ→「データの入力規則」 「リスト」を選択して、カテゴリ一覧を入力 月別集計の数式 特定の月・カテゴリの支出を集計するにはSUMIFS関数を使います。\n=SUMIFS(支出シート!G:G, 支出シート!B:B, \u0026#34;\u0026gt;=\u0026#34;\u0026amp;DATE(2026,5,1), 支出シート!B:B, \u0026#34;\u0026lt;=\u0026#34;\u0026amp;DATE(2026,5,31), 支出シート!D:D, \u0026#34;食費\u0026#34;) この数式は「2026年5月の食費合計」を計算します。カテゴリ名を変えれば他のカテゴリも同様に集計できます。\nシート④：年間推移シートとグラフ 年間推移シートは、1月〜12月の各月の収支・貯蓄を一覧にして、折れ線グラフで推移を可視化します。\n年間推移表の構成 月 収入合計 支出合計 収支差額 今月貯蓄 貯蓄累計 1月 2月 \u0026hellip; 12月 合計 貯蓄推移グラフの作成 貯蓄累計の列を選択して折れ線グラフを作成し、年間目標ラインを赤い点線で追加すると、目標に対する達成度が視覚的にわかります。\n共働き家計簿の運用ルール Excelテンプレートを作るだけでは家計は改善しません。夫婦で運用ルールを決めて継続することが重要です。\nルール1：支出の記録担当を決める 「夫が立て替えた支出は夫が入力」「妻が立て替えた支出は妻が入力」のように担当を決めます。または週末にまとめてどちらかが入力するのでも構いません。\nルール2：月に一度の「家計会議」を開く 月末に30分の家計会議を設定します。議題は：\n今月の収支の振り返り 予算オーバーしたカテゴリの確認 来月の特別な支出（旅行、大型出費）の確認 貯蓄目標の進捗確認 この会議を継続するだけで、家計への意識が劇的に変わります。\nルール3：お小遣い制を徹底する 共働き夫婦の家計管理で最ももめやすいのは「個人の自由な使い道」です。あらかじめ「夫〇円・妻〇円」のお小遣い額を決めて、その範囲内は自由に使えるルールにすると、家計管理のストレスが大幅に減ります。\nルール4：固定費は自動化する 家賃・光熱費・保険料など固定費は、銀行の自動引き落としやクレジットカードの自動決済に設定して、記録の手間を最小化します。クレジットカードは毎月の明細を確認することで支出の記録がほぼ自動化されます。\nルール5：年に2回は家計の大掃除 固定費（スマートフォン料金、保険、サブスクリプション等）は毎年見直します。特に年度変わり（4月）と年末（12月）に、不要なサブスクを解約・プランを見直すことで、年間数万円の節約になることもあります。\n共働き夫婦の家計管理でよくある失敗と対策 失敗1：クレカの使い分けが複雑すぎる 問題: カードが多すぎて、どのカードでいくら使ったか把握できない 対策: 夫婦でメインカードを1〜2枚に絞る。ポイント目的でカードを増やしすぎない\n失敗2：特別費の積み立てを忘れる 問題: 年に一度の車検・旅行・家電買い替えで家計が一時的に大赤字になる 対策: 「特別費積立」として毎月一定額を別口座に積み立てる。Excelで年間の特別費スケジュールを作っておく\n失敗3：育休中の収入ダウンに備えていない 問題: 育休取得で収入が激減し、家計が破綻寸前になる 対策: 育休取得前から「育休想定家計」をシミュレーション。育休中は「妻の収入ゼロ」または「育休給付金のみ」でもやっていける生活費水準を事前に確認しておく\n失敗4：記録が続かない 問題: 最初は続いたが、1〜2ヶ月で家計簿をつけなくなる 対策: 記録のハードルを下げる。完璧に記録しなくてもよいルールにする（例：1000円未満の現金支出は記録しない）\n家計管理アプリとExcelの使い分け 家計管理には家計アプリ（Money Forward ME、Zaim等）も人気ですが、Excelとの使い分けを考えてみましょう。\n比較項目 Excel家計簿 家計管理アプリ 自動連携（銀行・カード） なし あり（アプリに強み） カスタマイズ性 高い 低〜中 グラフ・分析 自由に作れる 決まった形式 コスト 無料（Excel所有前提） 無料〜月数百円 操作の学習コスト やや高い 低い プライバシー（口座連携） 不要 口座情報を渡す必要がある おすすめの組み合わせ: 自動連携の便利さを活かしてアプリで日々の支出を記録し、月次の分析・グラフ化・目標管理はExcelで行う。\n家計管理で生まれた余剰資金は**楽天証券 **でNISA積立がおすすめ。毎月100円から始められます。\nまとめ：共働きExcel家計簿を今すぐ始める 共働き夫婦の家計管理は、仕組みを作るのに少し手間がかかりますが、一度構築してしまえば毎月の管理が格段に楽になります。\n今すぐ始めるための3ステップ:\nまず収入シートだけ作って、今月の手取り合計を計算する 支出シートを作って、今月の固定費だけ入力する 来月から変動費も記録して、家計会議を開始する 完璧なシステムを一気に作ろうとせず、シンプルな状態から始めて徐々に改善するのがコツです。共働きの2人の収入を最大限に活かして、着実に貯蓄を増やしていきましょう。\n本記事の税制・制度情報は2026年5月時点のものです。家計管理の方法は各家庭の事情に合わせてアレンジしてください。\n関連ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール 手取り月収から理想の支出配分を計算 → 家計簿シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター リボ払い・ローンの返済を計画 → 借金返済シミュレーター 毎月の積立で資産がどう増えるか → 複利計算シミュレーター 関連テンプレート この記事の内容をすぐ実践できるExcelテンプレートはこちら：\nExcel家計簿テンプレート — 自動計算・グラフ付き Excel請求書テンプレート — インボイス制度対応 OKR管理テンプレート — 信号機表示付き目標管理 KPIダッシュボード — 前月比自動計算 あわせて読みたい 家計簿アプリから卒業：収入が月10万円超えたらfreeeに切り替える理由 freeeとマネーフォワードどっちが副業向き？実際の費用と機能を徹底比較 飲食店経営Excel管理テンプレート活用ガイド2026 ","permalink":"https://productivity-works.com/ja/posts/excel-kakeibo-tomobataraki-template/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eアフィリエイト開示\u003c/strong\u003e: 本記事には一部アフィリエイトリンクが含まれます。リンク経由でご購入いただいた場合、当サイトに手数料が発生することがありますが、読者の方への費用は一切変わりません。紹介する製品・サービスはすべて編集部が実際に検証したものに限っています。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"共働き家計うまく管理できていますか\"\u003e共働き家計、うまく管理できていますか？\u003c/h2\u003e\n\u003cp\u003e「二人で働いているのに、なぜかお金が貯まらない」「夫婦でどちらが何を払うか毎回もめる」「月末になると急に口座残高が不安になる」——\u003c/p\u003e\n\u003cp\u003e共働き夫婦の家計管理には、専業主婦（主夫）家庭とは異なる特有の難しさがあります。収入が2本あるぶん管理が複雑になり、「どちらがいくら払うか」という役割分担の問題も生じます。\u003c/p\u003e\n\u003cp\u003eこの記事では、Excelを使って共働き夫婦専用の家計簿を作る方法を、具体的な数式・シート構成・運用ルールとともに解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"共働き家計管理の3つのモデル\"\u003e共働き家計管理の3つのモデル\u003c/h2\u003e\n\u003cp\u003e家計管理の方法を決める前に、共働き夫婦の家計管理モデルを3つ整理します。\u003c/p\u003e\n\u003ch3 id=\"モデル1完全合算型\"\u003eモデル1：完全合算型\u003c/h3\u003e\n\u003cp\u003e2人の収入をすべて合算して、そこから生活費・貯蓄・個人のお小遣いを配分するモデル。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eメリット\u003c/strong\u003e: 家計の全体像が見えやすく、貯蓄効率が高い\n\u003cstrong\u003eデメリット\u003c/strong\u003e: 個人の自由なお金が制限される感覚になりやすい\u003c/p\u003e\n\u003ch3 id=\"モデル2費用分担型\"\u003eモデル2：費用分担型\u003c/h3\u003e\n\u003cp\u003e生活費の項目ごとに「夫が家賃・光熱費担当、妻が食費・保険担当」のように役割を決めるモデル。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eメリット\u003c/strong\u003e: シンプルでわかりやすい\n\u003cstrong\u003eデメリット\u003c/strong\u003e: 収入格差があると不公平感が生まれやすい\u003c/p\u003e\n\u003ch3 id=\"モデル3割合負担型\"\u003eモデル3：割合負担型\u003c/h3\u003e\n\u003cp\u003e収入の比率に応じて生活費を負担するモデル（例：夫収入60万、妻収入40万なら、夫6割・妻4割を生活費に拠出）。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eメリット\u003c/strong\u003e: 収入差があっても公平感がある\n\u003cstrong\u003eデメリット\u003c/strong\u003e: 計算が複雑になる\u003c/p\u003e\n\u003cp\u003e本記事では、\u003cstrong\u003eモデル1（完全合算型）をベースにしながら、個人のお小遣い（自由費）を確保する方法\u003c/strong\u003eでExcel家計簿を構築します。最も透明性が高く、貯蓄に向いているモデルです。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"excel家計簿のシート構成\"\u003eExcel家計簿のシート構成\u003c/h2\u003e\n\u003cp\u003e共働き夫婦向けのExcel家計簿は、以下の4つのシートで構成します。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eシート名\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e①ダッシュボード\u003c/td\u003e\n          \u003ctd\u003e月次サマリー・貯蓄進捗を一覧表示\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e②収入シート\u003c/td\u003e\n          \u003ctd\u003e2人の収入を入力・管理\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e③支出シート\u003c/td\u003e\n          \u003ctd\u003e支出を日付・カテゴリ別に記録\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e④年間推移シート\u003c/td\u003e\n          \u003ctd\u003e月別の収支・貯蓄推移グラフ\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"シートダッシュボードの作り方\"\u003eシート①：ダッシュボードの作り方\u003c/h2\u003e\n\u003cp\u003eダッシュボードは毎月の家計の「健康診断書」です。他のシートから数値を引っ張ってきて、一目で家計の状況がわかるように表示します。\u003c/p\u003e\n\u003ch3 id=\"ダッシュボードの構成要素\"\u003eダッシュボードの構成要素\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e上部：月次サマリー\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【2026年5月の家計サマリー】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e税引き後合計収入：  ¥___,___\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e合計支出：          ¥___,___\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e今月の黒字/赤字：   ¥___,___\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e今月の貯蓄額：      ¥___,___\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e貯蓄率：             ___%\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e中部：カテゴリ別支出内訳\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e横棒グラフで、カテゴリ別の支出金額と予算の比較を表示。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e下部：年間貯蓄目標の進捗\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e年間貯蓄目標：   ¥1,000,000\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e今年の貯蓄累計：  ¥___,___\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e達成率：           ___%\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e残り：             ¥___,___\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"必要な数式ダッシュボード\"\u003e必要な数式（ダッシュボード）\u003c/h3\u003e\n\u003cp\u003eダッシュボードのセルは、他のシートから値を参照する数式で構成します。例えば収入合計は：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=収入シート!B25+収入シート!C25\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e支出合計は：\u003c/p\u003e","title":"共働き夫婦のExcel家計簿のつけ方【無料テンプレート付き・2026年版】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「Excelで使える関数が多すぎてどれを覚えればいいかわからない」という方のために、仕事で本当によく使うExcel関数を50個厳選して一覧化しました。コピペしてすぐ使えるよう、書式と実例をセットで解説します。\nExcel関数カテゴリ別一覧 カテゴリ1：検索・参照系関数（必須中の必須） ビジネスで最もよく使われるカテゴリです。\nVLOOKUP（縦方向の検索） =VLOOKUP(検索値, 範囲, 列番号, 検索方法) 例： 社員番号から氏名を取得\n=VLOOKUP(A2, 社員マスタ!A:D, 2, FALSE) 使用頻度：★★★★★　最重要関数。まずこれをマスターしましょう。\nXLOOKUP（VLOOKUPの進化版 ※Excel 2019以降） =XLOOKUP(検索値, 検索範囲, 返す範囲, 見つからない場合) 例：\n=XLOOKUP(A2, 社員マスタ!A:A, 社員マスタ!B:B, \u0026#34;該当なし\u0026#34;) VLOOKUPより柔軟で、左方向の検索もできます。\nINDEX + MATCH（最強の組み合わせ） =INDEX(返す範囲, MATCH(検索値, 検索範囲, 0)) 例： 商品名から価格を取得\n=INDEX(B:B, MATCH(D2, A:A, 0)) VLOOKUPが使えない状況や複雑な参照に使います。\nHLOOKUP（横方向の検索） =HLOOKUP(検索値, 範囲, 行番号, 検索方法) 横並びのデータから検索する場合に使用。\nカテゴリ2：条件判定・分岐系関数 IF（条件分岐の基本） =IF(条件, 真の場合, 偽の場合) 例： 60点以上を「合格」、未満を「不合格」\n=IF(B2\u0026gt;=60, \u0026#34;合格\u0026#34;, \u0026#34;不合格\u0026#34;) IFS（複数条件の分岐） =IFS(条件1, 値1, 条件2, 値2, ...) 例： 成績をランク分け\n=IFS(B2\u0026gt;=90,\u0026#34;A\u0026#34;, B2\u0026gt;=70,\u0026#34;B\u0026#34;, B2\u0026gt;=60,\u0026#34;C\u0026#34;, TRUE,\u0026#34;D\u0026#34;) ネストしたIFよりずっと読みやすくなります。\nIF + AND / OR の組み合わせ =IF(AND(B2\u0026gt;=60, C2\u0026gt;=80), \u0026#34;合格\u0026#34;, \u0026#34;不合格\u0026#34;) =IF(OR(B2\u0026gt;=90, C2\u0026gt;=90), \u0026#34;優秀\u0026#34;, \u0026#34;普通\u0026#34;) IFERROR（エラー時の代替値） =IFERROR(数式, エラー時の値) 例：\n=IFERROR(VLOOKUP(A2, マスタ!A:B, 2, FALSE), \u0026#34;データなし\u0026#34;) #N/Aや#DIV/0!などのエラーを非表示にしたいときに必須。\nカテゴリ3：集計・合計系関数 SUM（合計） =SUM(A1:A100) =SUM(A1,B1,C1) SUMIF（条件付き合計） =SUMIF(条件範囲, 条件, 合計範囲) 例： 部署が「営業部」の売上合計\n=SUMIF(B:B, \u0026#34;営業部\u0026#34;, C:C) SUMIFS（複数条件の合計） =SUMIFS(合計範囲, 条件範囲1, 条件1, 条件範囲2, 条件2) 例： 2026年1月の営業部売上合計\n=SUMIFS(C:C, B:B, \u0026#34;営業部\u0026#34;, D:D, \u0026#34;2026/1\u0026#34;) SUBTOTAL（フィルター後の集計） =SUBTOTAL(9, A1:A100) ※9=SUM フィルターで絞り込んだデータだけを合計できます。通常のSUMはフィルター非表示行も合計してしまうため要注意。\nカテゴリ4：カウント系関数 COUNT（数値のカウント） =COUNT(A1:A100) COUNTA（空白以外のカウント） =COUNTA(A1:A100) 文字列も含めてカウントしたい場合はCOUNTA。\nCOUNTIF（条件付きカウント） =COUNTIF(範囲, 条件) 例： 「合格」の数をカウント\n=COUNTIF(B:B, \u0026#34;合格\u0026#34;) COUNTIFS（複数条件のカウント） =COUNTIFS(範囲1, 条件1, 範囲2, 条件2) 例： 営業部で売上100万以上の件数\n=COUNTIFS(B:B, \u0026#34;営業部\u0026#34;, C:C, \u0026#34;\u0026gt;=1000000\u0026#34;) カテゴリ5：文字列操作系関数 LEFT / RIGHT / MID（文字列の切り出し） =LEFT(A1, 3) ※左から3文字 =RIGHT(A1, 4) ※右から4文字 =MID(A1, 3, 5) ※3文字目から5文字 例： 郵便番号の上3桁を取得\n=LEFT(A2, 3) LEN（文字数カウント） =LEN(A1) FIND / SEARCH（文字列の位置検索） =FIND(\u0026#34;@\u0026#34;, A1) ※大文字小文字区別あり =SEARCH(\u0026#34;@\u0026#34;, A1) ※区別なし メールアドレスからドメインを抽出するときなどに使います。\nSUBSTITUTE（文字列置換） =SUBSTITUTE(A1, \u0026#34;旧文字\u0026#34;, \u0026#34;新文字\u0026#34;) 例： スペースをすべて削除\n=SUBSTITUTE(A1, \u0026#34; \u0026#34;, \u0026#34;\u0026#34;) TRIM（前後のスペース削除） =TRIM(A1) 外部データ取り込み時のスペース問題を解決します。\nCONCAT / TEXTJOIN（文字列の結合） =CONCAT(A1, \u0026#34; \u0026#34;, B1) =TEXTJOIN(\u0026#34;, \u0026#34;, TRUE, A1:A10) TEXTJOINは区切り文字を指定して範囲内の文字列をまとめて結合できます。\nTEXT（数値を文字列に変換） =TEXT(A1, \u0026#34;yyyy/mm/dd\u0026#34;) =TEXT(B1, \u0026#34;#,##0\u0026#34;) 日付や数値を指定フォーマットで文字列化する際に必須。\nカテゴリ6：日付・時刻系関数 TODAY / NOW（現在の日付・時刻） =TODAY() ※今日の日付 =NOW() ※現在の日時 YEAR / MONTH / DAY（年月日の抽出） =YEAR(A1) =MONTH(A1) =DAY(A1) DATEDIF（日数・月数・年数の計算） =DATEDIF(開始日, 終了日, \u0026#34;D\u0026#34;) ※日数 =DATEDIF(開始日, 終了日, \u0026#34;M\u0026#34;) ※月数 =DATEDIF(開始日, 終了日, \u0026#34;Y\u0026#34;) ※年数 例： 入社日から勤続年数を計算\n=DATEDIF(B2, TODAY(), \u0026#34;Y\u0026#34;) NETWORKDAYS（営業日数の計算） =NETWORKDAYS(開始日, 終了日, 祝日リスト) 土日・祝日を除いた営業日数を計算します。\nEOMONTH（月末日の取得） =EOMONTH(A1, 0) ※A1の月の月末 =EOMONTH(A1, 1) ※翌月末 カテゴリ7：統計・数学系関数 AVERAGE（平均） =AVERAGE(A1:A100) AVERAGEIF（条件付き平均） =AVERAGEIF(範囲, 条件, 平均範囲) MAX / MIN（最大値・最小値） =MAX(A1:A100) =MIN(A1:A100) LARGE / SMALL（上位・下位N番目の値） =LARGE(A1:A100, 3) ※3番目に大きい値 =SMALL(A1:A100, 2) ※2番目に小さい値 RANK（順位付け） =RANK(A2, A:A, 0) ※0=降順 ROUND / ROUNDUP / ROUNDDOWN（四捨五入・切り上げ・切り捨て） =ROUND(A1, 2) ※小数点2桁で四捨五入 =ROUNDUP(A1, 0) ※整数に切り上げ =ROUNDDOWN(A1, 0) ※整数に切り捨て カテゴリ8：便利な新関数（Excel 365・2021以降） FILTER（条件でデータを抽出） =FILTER(配列, 条件, 空の場合) 例： 売上が100万以上の行を抽出\n=FILTER(A2:D100, C2:C100\u0026gt;=1000000, \u0026#34;該当なし\u0026#34;) SORT（データを並び替え） =SORT(配列, 並び替え列, 順序) UNIQUE（重複を除いてリスト化） =UNIQUE(A1:A100) SEQUENCE（連番を自動生成） =SEQUENCE(10) ※1〜10 =SEQUENCE(5, 3) ※5行3列の連番 覚えておくべき関数 優先度ランキング 優先度 関数 理由 ★★★★★ VLOOKUP / XLOOKUP 最も使用頻度が高い ★★★★★ IF / IFS 条件分岐は必須 ★★★★★ SUMIF / SUMIFS 集計作業に必須 ★★★★★ COUNTIF / COUNTIFS データ集計に必須 ★★★★★ IFERROR エラー対策に必須 ★★★★☆ INDEX + MATCH VLOOKUP の上位互換 ★★★★☆ TRIM / SUBSTITUTE データクレンジングに重要 ★★★★☆ TEXT 日付・数値の書式変換 ★★★☆☆ DATEDIF 日数計算でよく使う ★★★☆☆ FILTER / UNIQUE 365ユーザーなら必須 よくある失敗と対処法 失敗1：VLOOKUPで#N/Aが出る 検索値に余分なスペースが入っている → TRIMで解決 検索値のデータ型が違う（数値vs文字列）→ VALUE()またはTEXT()で変換 失敗2：SUMIFが0になる 条件の記述ミス。文字列条件は\u0026quot;（ダブルクォーテーション）で囲む 合計範囲がズレている → 範囲の確認を 失敗3：日付が数値として表示される セルの書式設定が「数値」になっている → 「日付」に変更 TEXT関数で書式を指定する Excelスキルを強みに仕事の幅を広げる ExcelやデータスキルはOA事務・営業・経営企画・会計など多くの職種で求められる基本スキルです。スキルアップを機に求人市場を確認してみましょう。dodaで求人を探す\nまとめ Excelの関数は500種類以上ありますが、実務で使うのは30〜50種類程度です。まずはこの記事の優先度★★★★★の5関数から完全マスターして、徐々に範囲を広げていきましょう。\n関連ツール 月収から理想の支出配分を計算 → 家計簿シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 関連記事 AI×Excelで自動化する方法 飲食業向けExcel原価計算2026 Excel業務効率化テンプレートをBOOTHで配布中 よく使う関数をあらかじめ組み込んだ業務用ExcelテンプレートをBOOTHで販売・配布しています。集計・分析・管理に即使えるテンプレートで、Excel作業時間を大幅に削減できます。\nProductivity Works BOOTHストアはこちら 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/posts/excel-kansu-yoku-tsukau-ichiran/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「Excelで使える関数が多すぎてどれを覚えればいいかわからない」という方のために、\u003cstrong\u003e仕事で本当によく使うExcel関数を50個厳選して一覧化\u003c/strong\u003eしました。コピペしてすぐ使えるよう、書式と実例をセットで解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"excel関数カテゴリ別一覧\"\u003eExcel関数カテゴリ別一覧\u003c/h2\u003e\n\u003ch3 id=\"カテゴリ1検索参照系関数必須中の必須\"\u003eカテゴリ1：検索・参照系関数（必須中の必須）\u003c/h3\u003e\n\u003cp\u003eビジネスで最もよく使われるカテゴリです。\u003c/p\u003e\n\u003ch4 id=\"vlookup縦方向の検索\"\u003eVLOOKUP（縦方向の検索）\u003c/h4\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=VLOOKUP(検索値, 範囲, 列番号, 検索方法)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e 社員番号から氏名を取得\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=VLOOKUP(A2, 社員マスタ!A:D, 2, FALSE)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e使用頻度：★★★★★　最重要関数。まずこれをマスターしましょう。\u003c/p\u003e\n\u003ch4 id=\"xlookupvlookupの進化版-excel-2019以降\"\u003eXLOOKUP（VLOOKUPの進化版 ※Excel 2019以降）\u003c/h4\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=XLOOKUP(検索値, 検索範囲, 返す範囲, 見つからない場合)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=XLOOKUP(A2, 社員マスタ!A:A, 社員マスタ!B:B, \u0026#34;該当なし\u0026#34;)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eVLOOKUPより柔軟で、左方向の検索もできます。\u003c/p\u003e\n\u003ch4 id=\"index--match最強の組み合わせ\"\u003eINDEX + MATCH（最強の組み合わせ）\u003c/h4\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=INDEX(返す範囲, MATCH(検索値, 検索範囲, 0))\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e 商品名から価格を取得\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=INDEX(B:B, MATCH(D2, A:A, 0))\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eVLOOKUPが使えない状況や複雑な参照に使います。\u003c/p\u003e\n\u003ch4 id=\"hlookup横方向の検索\"\u003eHLOOKUP（横方向の検索）\u003c/h4\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=HLOOKUP(検索値, 範囲, 行番号, 検索方法)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e横並びのデータから検索する場合に使用。\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"カテゴリ2条件判定分岐系関数\"\u003eカテゴリ2：条件判定・分岐系関数\u003c/h3\u003e\n\u003ch4 id=\"if条件分岐の基本\"\u003eIF（条件分岐の基本）\u003c/h4\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=IF(条件, 真の場合, 偽の場合)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e 60点以上を「合格」、未満を「不合格」\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=IF(B2\u0026gt;=60, \u0026#34;合格\u0026#34;, \u0026#34;不合格\u0026#34;)\n\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"ifs複数条件の分岐\"\u003eIFS（複数条件の分岐）\u003c/h4\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=IFS(条件1, 値1, 条件2, 値2, ...)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e 成績をランク分け\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=IFS(B2\u0026gt;=90,\u0026#34;A\u0026#34;, B2\u0026gt;=70,\u0026#34;B\u0026#34;, B2\u0026gt;=60,\u0026#34;C\u0026#34;, TRUE,\u0026#34;D\u0026#34;)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eネストしたIFよりずっと読みやすくなります。\u003c/p\u003e","title":"Excel関数よく使うもの一覧【2026年版・コピペ即使える】仕事で役立つ厳選50選"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n確定申告の経費仕訳、どれだけ時間がかかっていますか？ 毎年1月〜3月、フリーランスの方々を悩ませる確定申告。なかでも「経費の仕訳」は、時間がかかるうえに間違いも起きやすい作業です。\n「この支出は何の勘定科目？」「按分はどうすればいい？」「これは経費として認められる？」——こうした疑問が次々と湧いてきて、気づけば数時間が経過していた、という経験をお持ちの方も多いでしょう。\n2026年現在、ChatGPTをはじめとするAIツールを活用すれば、こうした仕訳作業を大幅に効率化できます。この記事では、フリーランスが経費仕訳にAIを活用する具体的な手順を、実際に使えるプロンプトとともに解説します。\n確定申告全体の効率化については、AIを使ったフリーランス確定申告完全ガイド2026 も参考にしてください。\n経費仕訳にAIを使うことの3つのメリット 1. 勘定科目の判断が即座にできる 「ソフトウェア購入費は消耗品費か？ソフトウェア資産か？」といった判断に迷ったとき、ChatGPTに聞けば即座に回答が得られます。税理士に相談するほどでもない細かい疑問を、24時間いつでも解決できます。\n2. 大量の仕訳を一括処理できる クレジットカードの明細データをCSV形式でChatGPTに貼り付けると、各支出の勘定科目を一括で提案してもらえます。1件ずつ手作業で分類する必要がなくなります。\n3. 按分の計算ロジックを整理できる 自宅兼事務所の家賃、スマートフォンの通信費など、事業用と私用が混在する経費の按分計算も、ChatGPTに考え方を整理してもらいながら進められます。\n基本：ChatGPTに経費を判定させるプロンプト 単一経費の勘定科目を確認するプロンプト あなたは税務に詳しいアシスタントです。 フリーランスのWebデザイナーとして活動しています。 以下の支出の勘定科目と、確定申告での取り扱いを教えてください。 【支出内容】 ・Adobe Creative Cloudの年間サブスクリプション：72,000円 ・支払い日：2025年4月15日 ・用途：仕事で使うデザインツール（Photoshop、Illustratorなど） 【確認したいこと】 1. 適切な勘定科目は何か 2. 全額経費として計上できるか 3. 仕訳の借方・貸方の書き方 4. 注意事項があれば教えてください このプロンプトで得られる回答例：\n勘定科目：「通信費」または「消耗品費」（ソフトウェアのサブスクリプションは通信費に分類するケースが多い） 全額経費計上可（業務専用利用の場合） 仕訳例：借方：通信費 72,000円 / 貸方：普通預金 72,000円 複数経費をまとめて分類するプロンプト 月のクレジットカード明細から経費候補をまとめて判定させる方法です。\nフリーランスのライターです。 以下の2025年12月の支出を確定申告用に分類してください。 事業用/私用の判断と、事業用の場合は勘定科目を教えてください。 【支出一覧】 1. Amazonで書籍購入（取材のための参考書）：3,850円 2. コンビニでコーヒー（打ち合わせ前に購入）：220円 3. Zoomの月額プラン（クライアントとの打ち合わせ用）：2,000円 4. ジムの月会費（健康維持のため）：8,000円 5. 文房具（ノート・ペン類）：1,200円 6. 電車代（取材先への往復）：1,640円 7. ランチ代（1人で食事）：950円 8. クライアントへの手土産：2,500円 9. Netflixの月額料金：1,490円 10. 外付けSSD購入（データ保存用）：12,800円 各項目について： ・事業用/私用の判断 ・事業用なら勘定科目 ・按分が必要なら按分の考え方 を表形式で整理してください。 実践：CSVからの一括仕訳処理 ステップ1：銀行・クレカ明細をCSV形式でエクスポート 多くのネット銀行やクレジットカード会社は、明細をCSV形式でダウンロードできます。\n楽天銀行：「明細ダウンロード」→ CSV形式 三菱UFJ銀行：「インターネットバンキング」→ 「入出金明細」→ CSV 楽天カード：「利用明細」→ 「CSV形式でダウンロード」 ステップ2：CSVデータをテキスト形式に変換してChatGPTに貼り付け CSVをそのまま貼り付けると読みにくい場合があります。Excelで開いてから、必要な列（日付・摘要・金額）だけをコピーして貼り付けるのが効果的です。\n以下はフリーランスエンジニアのクレジットカード明細です。 確定申告用に経費仕訳の分類をしてください。 職業：フリーランスのシステムエンジニア（在宅勤務） 事業形態：個人事業主、青色申告 【明細データ】 2025-10-03, AWS（Amazon Web Services）, 4,320円 2025-10-07, ビックカメラ, 89,800円（ノートPC購入） 2025-10-12, Slack Pro月額, 1,050円 2025-10-15, スターバックス, 650円（クライアントとの打ち合わせ） 2025-10-18, GitHub Copilot月額, 1,265円 2025-10-22, 本屋（技術書購入）, 4,180円 2025-10-25, 自宅インターネット回線（月額）, 5,500円 2025-10-28, 電車代, 820円（クライアント先への交通費） 以下の形式で出力してください： | 日付 | 摘要 | 金額 | 勘定科目 | 事業用率 | 経費計上額 | 備考 | ステップ3：出力結果を会計ソフトにインポート ChatGPTが出力した仕訳データを、freee ・マネーフォワード・弥生会計などの会計ソフトに手入力またはインポートします。freeeなら無料トライアルがあり、CSVインポートも簡単です。\nChatGPTに「freee用のCSVインポート形式で出力してください」と追加指示すると、会計ソフトに直接取り込める形式で出力してくれる場合もあります。\n勘定科目の自動分類：よく迷うケース別ガイド ケース1：自宅兼事務所の経費按分 フリーランスとして自宅で仕事をしています。 以下の費用の確定申告での按分方法を教えてください。 【条件】 ・自宅：3LDK（75平米） ・仕事専用スペース：6畳の書斎（約10平米） ・月額家賃：12万円 ・月額電気代：約8,000円 ・月額インターネット代：5,500円 ・仕事で使用する時間の割合：1日の約60% 適切な按分比率と、その計算根拠を教えてください。 また、税務署に認められやすい按分の考え方も教えてください。 ケース2：スマートフォンの通信費按分 個人事業主です。スマートフォンを仕事とプライベートの 両方で使用しています。 ・月額通信費：9,000円 ・仕事での使用割合：約70%（クライアントとの連絡、 業務アプリの利用、取材時の録音など） ・プライベートでの使用割合：約30% この場合の按分方法と仕訳の書き方を教えてください。 また、どのような記録を残しておくと税務調査の際に 有利になりますか？ ケース3：車両費の按分 フリーランスのカメラマンです。 自家用車を取材・撮影の移動に使用しています。 ・月間走行距離：約1,200km ・うち仕事での走行：約800km ・月間ガソリン代：15,000円 ・車検費用（年間）：120,000円 ・自動車保険（年間）：80,000円 事業用と私用の按分、勘定科目の分類、 年間を通じた管理方法を教えてください。 減価償却の自動計算もAIに任せる 10万円以上の高額な備品・機器類は、「減価償却」として複数年に分けて経費計上します。この計算もChatGPTに任せましょう。\nフリーランスのビデオグラファーです。 以下の機材を購入しました。減価償却の計算を教えてください。 【購入品目】 ・ソニー α7IV（カメラボディ）：358,000円（2025年6月購入） ・レンズ2本：計180,000円（2025年6月購入） ・MacBook Pro 14インチ：248,000円（2025年4月購入） 【確認したいこと】 1. 各機材の法定耐用年数 2. 定額法・定率法それぞれの年間償却額 3. 2025年分の確定申告で計上できる金額 4. 少額減価償却資産の特例（30万円未満）の適用可否 青色申告の個人事業主です。 AI活用の注意点：必ず確認すべきこと ChatGPTは税務の専門家ではないため、以下の点に注意が必要です。\n注意点1：最新の税制に対応できない場合がある\n税法は毎年改正されます。ChatGPTの知識には学習データのカットオフ日があるため、最新の税制変更には対応できていない場合があります。重要な判断は税理士や国税庁のWebサイトで確認しましょう。\n注意点2：グレーゾーンの経費は慎重に\n接待交際費、旅費交通費、福利厚生費などは、事業との関連性の証明が求められる場合があります。ChatGPTの回答をそのまま採用するのではなく、領収書の保管や利用目的の記録を徹底しましょう。\n注意点3：金額の計算は必ず自分で確認する\nChatGPTは計算を間違える場合があります。特に減価償却の計算や消費税の処理は、必ず自分で検算するかExcelで確認してください。\n年間を通じた経費管理のベストプラクティス 確定申告を楽にするには、年間を通じた管理習慣が重要です。\n月次でやること\n月末にクレカ明細をダウンロード ChatGPTで勘定科目を一括分類 会計ソフトに入力して締める 領収書の管理\nスマホで撮影してクラウド保存（Google Drive等） ファイル名：「YYYYMMDD_金額_摘要」の形式で統一 領収書がない場合は出金伝票を作成 ChatGPTとの「セッション」を活用する\n月次の仕訳作業をするとき、最初に「私はフリーランスの〇〇です。今月の経費分類をします」と職業・業種を説明してからセッションを開始すると、より精度の高い回答が得られます。\nまとめ：AIで経費仕訳の「億劫さ」をなくす 確定申告の経費仕訳がこれまで面倒だった理由の多くは、「どの勘定科目か分からない」「いちいち調べなければいけない」という手間でした。ChatGPTを活用することで、この手間を大幅に削減できます。\n今すぐできることから始めましょう：\n今月の支出をリストアップする この記事のプロンプトをコピーして試してみる 月次の仕訳習慣をつける 確定申告全体の流れや、AIを活用したその他の申告業務の効率化については、AIを使ったフリーランス確定申告完全ガイド2026 で詳しく解説しています。\n関連ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール 副業の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連テンプレート 確定申告の経費仕訳をさらにスムーズに進めたい方には、実践的なテンプレートセットをご用意しています:\nAI×確定申告テンプレート集 — 経費分類プロンプト・勘定科目チートシート・按分計算シートなど、フリーランスの確定申告に特化したテンプレート一式 ","permalink":"https://productivity-works.com/ja/posts/freelance-kakuteishinkoku-ai-keihi-shiwake/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"確定申告の経費仕訳どれだけ時間がかかっていますか\"\u003e確定申告の経費仕訳、どれだけ時間がかかっていますか？\u003c/h2\u003e\n\u003cp\u003e毎年1月〜3月、フリーランスの方々を悩ませる確定申告。なかでも「経費の仕訳」は、時間がかかるうえに間違いも起きやすい作業です。\u003c/p\u003e\n\u003cp\u003e「この支出は何の勘定科目？」「按分はどうすればいい？」「これは経費として認められる？」——こうした疑問が次々と湧いてきて、気づけば数時間が経過していた、という経験をお持ちの方も多いでしょう。\u003c/p\u003e\n\u003cp\u003e2026年現在、ChatGPTをはじめとするAIツールを活用すれば、こうした仕訳作業を大幅に効率化できます。この記事では、\u003cstrong\u003eフリーランスが経費仕訳にAIを活用する具体的な手順\u003c/strong\u003eを、実際に使えるプロンプトとともに解説します。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e確定申告全体の効率化については、\u003ca href=\"https://productivity-works.com/ja/posts/ai-kakuteishinkoku-freelance-2026/\"\u003eAIを使ったフリーランス確定申告完全ガイド2026\u003c/a\u003e\nも参考にしてください。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"経費仕訳にaiを使うことの3つのメリット\"\u003e経費仕訳にAIを使うことの3つのメリット\u003c/h2\u003e\n\u003ch3 id=\"1-勘定科目の判断が即座にできる\"\u003e1. 勘定科目の判断が即座にできる\u003c/h3\u003e\n\u003cp\u003e「ソフトウェア購入費は消耗品費か？ソフトウェア資産か？」といった判断に迷ったとき、ChatGPTに聞けば即座に回答が得られます。税理士に相談するほどでもない細かい疑問を、24時間いつでも解決できます。\u003c/p\u003e\n\u003ch3 id=\"2-大量の仕訳を一括処理できる\"\u003e2. 大量の仕訳を一括処理できる\u003c/h3\u003e\n\u003cp\u003eクレジットカードの明細データをCSV形式でChatGPTに貼り付けると、各支出の勘定科目を一括で提案してもらえます。1件ずつ手作業で分類する必要がなくなります。\u003c/p\u003e\n\u003ch3 id=\"3-按分の計算ロジックを整理できる\"\u003e3. 按分の計算ロジックを整理できる\u003c/h3\u003e\n\u003cp\u003e自宅兼事務所の家賃、スマートフォンの通信費など、事業用と私用が混在する経費の按分計算も、ChatGPTに考え方を整理してもらいながら進められます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"基本chatgptに経費を判定させるプロンプト\"\u003e基本：ChatGPTに経費を判定させるプロンプト\u003c/h2\u003e\n\u003ch3 id=\"単一経費の勘定科目を確認するプロンプト\"\u003e単一経費の勘定科目を確認するプロンプト\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eあなたは税務に詳しいアシスタントです。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eフリーランスのWebデザイナーとして活動しています。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の支出の勘定科目と、確定申告での取り扱いを教えてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【支出内容】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・Adobe Creative Cloudの年間サブスクリプション：72,000円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・支払い日：2025年4月15日\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・用途：仕事で使うデザインツール（Photoshop、Illustratorなど）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【確認したいこと】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e 適切な勘定科目は何か\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e 全額経費として計上できるか\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 仕訳の借方・貸方の書き方\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e 注意事項があれば教えてください\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eこのプロンプトで得られる回答例：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e勘定科目：「通信費」または「消耗品費」（ソフトウェアのサブスクリプションは通信費に分類するケースが多い）\u003c/li\u003e\n\u003cli\u003e全額経費計上可（業務専用利用の場合）\u003c/li\u003e\n\u003cli\u003e仕訳例：借方：通信費 72,000円 / 貸方：普通預金 72,000円\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch3 id=\"複数経費をまとめて分類するプロンプト\"\u003e複数経費をまとめて分類するプロンプト\u003c/h3\u003e\n\u003cp\u003e月のクレジットカード明細から経費候補をまとめて判定させる方法です。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eフリーランスのライターです。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e以下の2025年12月の支出を確定申告用に分類してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e事業用/私用の判断と、事業用の場合は勘定科目を教えてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【支出一覧】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e Amazonで書籍購入（取材のための参考書）：3,850円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e コンビニでコーヒー（打ち合わせ前に購入）：220円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e Zoomの月額プラン（クライアントとの打ち合わせ用）：2,000円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e ジムの月会費（健康維持のため）：8,000円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e5.\u003c/span\u003e 文房具（ノート・ペン類）：1,200円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e6.\u003c/span\u003e 電車代（取材先への往復）：1,640円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e7.\u003c/span\u003e ランチ代（1人で食事）：950円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e8.\u003c/span\u003e クライアントへの手土産：2,500円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e9.\u003c/span\u003e Netflixの月額料金：1,490円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e10.\u003c/span\u003e 外付けSSD購入（データ保存用）：12,800円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e各項目について：\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・事業用/私用の判断\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・事業用なら勘定科目\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・按分が必要なら按分の考え方\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eを表形式で整理してください。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"実践csvからの一括仕訳処理\"\u003e実践：CSVからの一括仕訳処理\u003c/h2\u003e\n\u003ch3 id=\"ステップ1銀行クレカ明細をcsv形式でエクスポート\"\u003eステップ1：銀行・クレカ明細をCSV形式でエクスポート\u003c/h3\u003e\n\u003cp\u003e多くのネット銀行やクレジットカード会社は、明細をCSV形式でダウンロードできます。\u003c/p\u003e","title":"フリーランス確定申告 AIで経費仕訳を自動化する具体的手順"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「フリーランスになりたいけど、何から始めればいいかわからない」——そんな方のために、副業スタートから本格的なフリーランス独立までのロードマップを完全解説します。2026年のフリーランス市場の最新情報も交えながら、実践的な手順をお伝えします。\nフリーランスとは？2026年の市場動向 フリーランスとは、特定の企業に雇用されず、個人として案件ごとに契約して働く働き方です。\n2026年のフリーランス市場 フリーランス人口：約460万人（2025年時点） フリーランス市場規模：約28兆円 リモートワーク普及により、地方在住でも都市部の案件を受注しやすくなった AI活用スキルを持つフリーランスの需要が急増中 フリーランスになるまでのロードマップ フェーズ1：準備期間（0〜3ヶ月） まず会社員のうちにスキルと土台を作ります。\nスキルの棚卸しと選定 フリーランスで活躍できる職種は多岐にわたります。\n職種 月収目安 必要スキル 難易度 Webライター 10〜50万円 文章力・SEO知識 低 Webデザイナー 20〜80万円 Figma・Photoshop 中 エンジニア 50〜150万円 プログラミング 高 動画編集 15〜60万円 Premiere Pro等 中 SNS運用代行 10〜40万円 SNSマーケ知識 低〜中 コンサルタント 50〜200万円 業界知識・経験 高 Webマーケター 30〜100万円 SEO・広告・分析 中 翻訳・通訳 20〜80万円 語学力 中 初心者に最もおすすめの入門職種：Webライター・動画編集・SNS運用代行\nこの3つは習得が比較的早く、需要も安定しています。\nポートフォリオの作成 実績がない段階でも、以下の方法でポートフォリオを作れます。\n自分のブログ記事をライターのサンプルとして 架空のデザイン案件をデザインのポートフォリオとして 個人プロジェクトのコードをエンジニアのGitHubとして フェーズ2：副業スタート期（3〜6ヶ月） 会社員を続けながら副業でフリーランス収入を作り始めます。\nクラウドソーシングで実績を積む クラウドワークス（CrowdWorks）\n日本最大のクラウドソーシングサービス。登録者数200万人以上。\nライター・デザイン・IT・事務など幅広い職種 初心者でも受注しやすい小規模案件が多い 実績を積むと単価が上がりやすい クラウドワークスに登録する ランサーズ（Lancers）\nクラウドワークスと並ぶ二大クラウドソーシング。\n企業からの直接依頼案件が多い 認定ランサー制度で信頼性のアピールができる 時給型の継続案件も充実 ランサーズに登録する 最初の3ヶ月で目指す目標：\nプロフィールを完成させる 単価が低くても5〜10件の実績を作る クライアントから高評価をもらう 月5万円稼げたらフリーランスの感触が掴めてきたサイン 副業で月5万円の収入が安定してきたら、フリーランスとしての市場価値が証明されています。このタイミングで独立を検討し始めましょう。\nフェーズ3：収入安定期（6〜12ヶ月） 副業収入を月20〜30万円まで伸ばし、独立の準備を整えます。\n単価を上げる戦略 戦略 具体的な方法 専門性を深める 特定業界・ツールのスペシャリストになる ポートフォリオ充実 実績件数・クオリティを上げる 直接営業 クラウドソーシング外でのSNS・紹介営業 コンテンツ発信 Twitter/X・noteで専門知識を発信 継続契約を増やす 単発より月次継続の案件を優先する 直接営業（クラウドソーシング外） クラウドソーシングは競合が多く手数料も高いため（20%前後）、直接営業で高単価案件を取ることが収入アップの鍵です。\n直接案件の獲得方法：\nTwitter/X・LinkedInで専門知識を発信して問い合わせを受ける 知人・元同僚への紹介依頼 業界コミュニティへの参加（オンラインサロン・Slack等） note・ブログで実績・事例を公開する フェーズ4：独立準備期（独立の3ヶ月前〜） 副業収入が月30万円以上安定したら、独立の具体的な準備を始めます。\n独立前のチェックリスト 月収が30万円以上、3ヶ月連続で安定している 生活費6ヶ月分の貯蓄がある 2〜3社の継続クライアントがいる 社会保険・年金の切り替えを理解している 開業届の準備ができている 開業届の提出 独立が決まったら税務署に開業届を提出します。\n開業届提出のメリット：\n青色申告が使えるようになる（最大65万円の控除） 屋号でビジネス銀行口座が開設できる 補助金・助成金の申請資格を得られることがある 詳しくはフリーランス開業届書き方 をご参照ください。\nフリーランスになった後の必須知識 税金・確定申告 フリーランスは自分で確定申告をする必要があります。\n所得税：売上-経費=所得に課税 消費税：売上1,000万円超で課税事業者に（2年後から） 住民税：前年の所得に基づいて課税 国民健康保険・年金：会社員時代より高くなることが多い 経費を適切に計上すれば手取りが大きく変わります。フリーランス確定申告のやり方 も必読です。\n社会保険の切り替え 項目 会社員時代 フリーランス後 健康保険 会社が半額負担 国民健康保険（全額自己負担） 年金 厚生年金（会社負担あり） 国民年金（月約16,590円） 傷病手当 あり なし（民間保険で対応） 退職前に国民健康保険料の試算をしておきましょう。前年の所得が高いと保険料が高くなります。\nフリーランス保護新法（2024年〜） 2024年11月から施行されたフリーランス保護新法により、発注企業には以下の義務が生じました。\n取引条件の書面明示 報酬の60日以内の支払い ハラスメント防止措置 フリーランスとして働く際はこの権利を把握しておきましょう。\nフリーランスの年収アップロードマップ ステージ 月収目安 主な案件源 副業スタート 0〜5万円 クラウドワークス・ランサーズ 副業成長期 5〜20万円 CS＋SNS発信での問い合わせ 独立初期 20〜50万円 直接営業・紹介 軌道乗り期 50〜100万円 継続契約・単価交渉 専門家フェーズ 100万円〜 コンサル・顧問契約・講師 よくある失敗と対策 失敗1：「実績がないから」とスタートを先延ばしにする 実績は作りながら育てるものです。まずは単価が低くても受注して、ポートフォリオを積み重ねましょう。\n失敗2：1社の依存が高くなる クライアントが1社しかいない状態は非常にリスクが高いです。最低3社以上から収入を得る分散を意識しましょう。\n失敗3：独立後に案件が途切れる 独立前に継続クライアントを2〜3社確保するのが鉄則です。「会社を辞めてから案件を探す」は資金が底をつくリスクがあります。\n失敗4：経費管理・税金の準備をしない 毎月の収入から30%程度を税金分として別口座に積み立てておきましょう。確定申告の時期に「税金が払えない」という事態を防げます。\nフリーランスの経理・確定申告には**freee会計（無料トライアルあり） **がおすすめ。開業届の作成から日々の帳簿管理まで、フリーランスに必要な機能が揃っています。\nまとめ：フリーランスへのロードマップ 今すぐスキルを棚卸しして副業可能な職種を決める 今月中にクラウドワークス・ランサーズに登録・プロフィール完成 3ヶ月以内に初案件を受注して実績を作る 6〜12ヶ月で月20〜30万円の副業収入を安定させる 継続クライアント確保後に独立を検討する フリーランスは「自分の価値を市場で試せる働き方」です。まず副業から小さく始めて、リスクをコントロールしながら独立を目指しましょう。\n関連ツール・記事 文字数・単語数をリアルタイムでカウント → 文字数カウンター BMIと適正体重をチェック → BMI計算ツール フリーランスの税金を計算 → 副業税金計算ツール 手取り額をシミュレーション → 手取り計算ツール 転職・独立後の年収を比較 → 転職年収シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール クライアントへのプロ品質な請求書を無料作成 → 請求書作成ツール ポートフォリオや支払いリンクのQRコードを生成 → QRコードジェネレーター 時給と年収を換算 → 時給換算ツール クラウドワークスで稼ぐ方法初心者 ランサーズとクラウドワークスの比較 フリーランスエンジニアの年収相場 副業の確定申告やり方2026 フリーランス独立準備テンプレートをBOOTHで配布中 案件管理シート・収支記録テンプレート・クライアント提案書ひな形など、フリーランスが独立初期に必要なExcelテンプレートセットをBOOTHで販売しています。\nProductivity Works BOOTHストアはこちら 独立直後の混乱を最小限に抑えて、すぐに仕事に集中できる環境を整えましょう。\n","permalink":"https://productivity-works.com/ja/posts/freelance-narikata-roadmap-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「フリーランスになりたいけど、何から始めればいいかわからない」——そんな方のために、\u003cstrong\u003e副業スタートから本格的なフリーランス独立まで\u003c/strong\u003eのロードマップを完全解説します。2026年のフリーランス市場の最新情報も交えながら、実践的な手順をお伝えします。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"フリーランスとは2026年の市場動向\"\u003eフリーランスとは？2026年の市場動向\u003c/h2\u003e\n\u003cp\u003eフリーランスとは、特定の企業に雇用されず、個人として案件ごとに契約して働く働き方です。\u003c/p\u003e\n\u003ch3 id=\"2026年のフリーランス市場\"\u003e2026年のフリーランス市場\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eフリーランス人口：約460万人（2025年時点）\u003c/li\u003e\n\u003cli\u003eフリーランス市場規模：約28兆円\u003c/li\u003e\n\u003cli\u003eリモートワーク普及により、地方在住でも都市部の案件を受注しやすくなった\u003c/li\u003e\n\u003cli\u003eAI活用スキルを持つフリーランスの需要が急増中\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"フリーランスになるまでのロードマップ\"\u003eフリーランスになるまでのロードマップ\u003c/h2\u003e\n\u003ch3 id=\"フェーズ1準備期間03ヶ月\"\u003eフェーズ1：準備期間（0〜3ヶ月）\u003c/h3\u003e\n\u003cp\u003eまず会社員のうちにスキルと土台を作ります。\u003c/p\u003e\n\u003ch4 id=\"スキルの棚卸しと選定\"\u003eスキルの棚卸しと選定\u003c/h4\u003e\n\u003cp\u003eフリーランスで活躍できる職種は多岐にわたります。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e職種\u003c/th\u003e\n          \u003cth\u003e月収目安\u003c/th\u003e\n          \u003cth\u003e必要スキル\u003c/th\u003e\n          \u003cth\u003e難易度\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eWebライター\u003c/td\u003e\n          \u003ctd\u003e10〜50万円\u003c/td\u003e\n          \u003ctd\u003e文章力・SEO知識\u003c/td\u003e\n          \u003ctd\u003e低\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eWebデザイナー\u003c/td\u003e\n          \u003ctd\u003e20〜80万円\u003c/td\u003e\n          \u003ctd\u003eFigma・Photoshop\u003c/td\u003e\n          \u003ctd\u003e中\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eエンジニア\u003c/td\u003e\n          \u003ctd\u003e50〜150万円\u003c/td\u003e\n          \u003ctd\u003eプログラミング\u003c/td\u003e\n          \u003ctd\u003e高\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e動画編集\u003c/td\u003e\n          \u003ctd\u003e15〜60万円\u003c/td\u003e\n          \u003ctd\u003ePremiere Pro等\u003c/td\u003e\n          \u003ctd\u003e中\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSNS運用代行\u003c/td\u003e\n          \u003ctd\u003e10〜40万円\u003c/td\u003e\n          \u003ctd\u003eSNSマーケ知識\u003c/td\u003e\n          \u003ctd\u003e低〜中\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eコンサルタント\u003c/td\u003e\n          \u003ctd\u003e50〜200万円\u003c/td\u003e\n          \u003ctd\u003e業界知識・経験\u003c/td\u003e\n          \u003ctd\u003e高\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eWebマーケター\u003c/td\u003e\n          \u003ctd\u003e30〜100万円\u003c/td\u003e\n          \u003ctd\u003eSEO・広告・分析\u003c/td\u003e\n          \u003ctd\u003e中\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e翻訳・通訳\u003c/td\u003e\n          \u003ctd\u003e20〜80万円\u003c/td\u003e\n          \u003ctd\u003e語学力\u003c/td\u003e\n          \u003ctd\u003e中\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e初心者に最もおすすめの入門職種：Webライター・動画編集・SNS運用代行\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eこの3つは習得が比較的早く、需要も安定しています。\u003c/p\u003e\n\u003ch4 id=\"ポートフォリオの作成\"\u003eポートフォリオの作成\u003c/h4\u003e\n\u003cp\u003e実績がない段階でも、以下の方法でポートフォリオを作れます。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e自分のブログ記事\u003c/strong\u003eをライターのサンプルとして\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e架空のデザイン案件\u003c/strong\u003eをデザインのポートフォリオとして\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e個人プロジェクトのコード\u003c/strong\u003eをエンジニアのGitHubとして\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"フェーズ2副業スタート期36ヶ月\"\u003eフェーズ2：副業スタート期（3〜6ヶ月）\u003c/h3\u003e\n\u003cp\u003e会社員を続けながら副業でフリーランス収入を作り始めます。\u003c/p\u003e\n\u003ch4 id=\"クラウドソーシングで実績を積む\"\u003eクラウドソーシングで実績を積む\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003eクラウドワークス（CrowdWorks）\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e日本最大のクラウドソーシングサービス。登録者数200万人以上。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eライター・デザイン・IT・事務など幅広い職種\u003c/li\u003e\n\u003cli\u003e初心者でも受注しやすい小規模案件が多い\u003c/li\u003e\n\u003cli\u003e実績を積むと単価が上がりやすい\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://crowdworks.jp/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eクラウドワークスに登録する\u003c/a\u003e\n\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eランサーズ（Lancers）\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eクラウドワークスと並ぶ二大クラウドソーシング。\u003c/p\u003e","title":"フリーランスなり方ロードマップ2026年版【副業から独立まで完全ガイド】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n不動産営業のメール作成に毎日どれだけ時間を使っていますか？ 不動産営業の現場では、1日に何十通ものメールを送ることが珍しくありません。物件紹介メール、問い合わせへの返信、内見後のフォロー、契約前の確認連絡……これらをすべて手作業で書いていると、営業活動の本質的な部分に集中できなくなってしまいます。\nある調査によると、不動産営業担当者は1日の業務時間のうち約25〜30%をメール作成や返信に費やしているとされています。仮に1日8時間働くとすれば、2〜2.5時間がメール作業です。これをChatGPTで半分以下に削減できれば、その時間をお客様との商談や物件の下見に使えます。\nこの記事では、ChatGPTを使って物件紹介メールをはじめとする営業メールを3分以内に作成する具体的な方法を、実際に使えるプロンプト例とともに解説します。\nなぜ不動産営業メールにChatGPTが効くのか ChatGPTが不動産営業のメール作成に特に効果を発揮する理由は3つあります。\n1. 型が決まっているから\n不動産の営業メールには、ある程度決まった構成があります。物件のスペック（広さ・価格・立地）を伝え、お客様のニーズとの合致点を説明し、次のアクション（内見の提案など）につなげる——この流れさえ押さえれば、あとはChatGPTが自然な文章で肉付けしてくれます。\n2. 情報を与えるだけで文章化できるから\n「駅徒歩5分、2LDK、家賃12万円、ペット可」という箇条書きの情報を渡すだけで、ChatGPTはそれを読みやすいメール文に変換します。ゼロから文章を考える必要がなくなります。\n3. トーンの調整が簡単だから\n「丁寧なビジネス文体で」「少し親しみやすいトーンで」「簡潔に3行でまとめて」といった指示を一言添えるだけで、同じ情報をさまざまなスタイルに変えることができます。\n実践：物件紹介メールを3分で作る手順 ステップ1：物件情報を箇条書きでまとめる（1分） まず、紹介したい物件の情報をメモ帳などに箇条書きします。\n・物件名：グリーンコート渋谷 ・所在地：東京都渋谷区 ・最寄り駅：渋谷駅から徒歩8分 ・間取り：2LDK（55平米） ・賃料：月額18万円（管理費込み） ・特徴：南向き・角部屋・2024年築・宅配ボックスあり ・ペット：相談可 ・お客様のニーズ：通勤重視、2人暮らし、子ども予定あり ステップ2：ChatGPTにプロンプトを入力する（30秒） 以下のプロンプトを使います。\nあなたは不動産営業のプロです。以下の物件情報をもとに、 見込み客に送る物件紹介メールを作成してください。 【物件情報】 ・物件名：グリーンコート渋谷 ・所在地：東京都渋谷区 ・最寄り駅：渋谷駅から徒歩8分 ・間取り：2LDK（55平米） ・賃料：月額18万円（管理費込み） ・特徴：南向き・角部屋・2024年築・宅配ボックスあり ・ペット：相談可 【お客様情報】 ・2人暮らし予定（将来的に子どもあり） ・渋谷周辺で通勤できる場所を希望 ・明るくて広い部屋を重視 【条件】 ・丁寧かつ親しみやすいトーンで ・300〜400文字程度 ・内見のご提案を含める ・件名も一緒に作成すること ステップ3：出力を確認して微調整する（1〜2分） ChatGPTが生成した文章を読み、必要に応じて数カ所を手直しします。担当者名や会社名、電話番号などの署名情報を加えれば完成です。\n具体例5つ：シーン別テンプレートプロンプト 例1：初回の物件紹介メール シナリオ： 先日問い合わせがあったお客様に、条件に合う物件を提案する。\nプロンプト：\n不動産営業として、初めてお問い合わせいただいたお客様に 物件を提案するメールを書いてください。 【お客様情報】 ・先日SUUMOから問い合わせがあった田中様 ・希望：都内2LDK、予算15万円以内、駅徒歩10分以内 【提案物件】 ・物件名：サンシャインパレス中野 ・賃料：14.5万円 ・間取り：2LDK（50平米） ・最寄り駅：中野駅から徒歩7分 ・特徴：築5年、リノベーション済み、オートロック 【条件】 ・初めてのやり取りなので丁寧なトーンで ・物件の魅力を2〜3点具体的にアピールして ・内見の日程調整を促す文を入れる ・200〜300文字程度 例2：問い合わせへの反響返信メール シナリオ： ポータルサイトから問い合わせがあった直後に送る自動返信ではなく、担当者からの個別返信。\nプロンプト：\n以下の状況に合う反響返信メールを作成してください。 【状況】 ・昨日夕方にHOME\u0026#39;Sから物件Aへの問い合わせを受けた ・お客様名：佐藤様 ・問い合わせ内容：「ペット（小型犬）を飼っているが入居可能か確認したい」 ・物件の状況：ペット可（小型犬のみ、要敷金1ヶ月追加） 【条件】 ・親切で迅速な印象を与えるトーンで ・ペット条件の詳細を正確に伝える ・追加で条件に合う類似物件があることも触れる ・内見または電話相談の提案を含める 例3：内見後のフォローメール シナリオ： 内見から2日後、まだ返答がないお客様へのフォロー。\nプロンプト：\n内見後のフォローメールを作成してください。 【状況】 ・2日前に物件Bの内見を実施 ・お客様：山本様（30代夫婦） ・内見時の反応：「収納が少し気になる」と言っていた ・物件の状況：収納スペースの追加設置が交渉可能 【条件】 ・押しつけがましくなく、自然にフォローするトーン ・内見時に気になっていた収納の課題に対して 解決策（追加収納設置の可能性）を提示する ・返答を急かさず、でも決断を後押しする表現を使う ・署名前に「何かご不明な点があればいつでもご連絡ください」 という一文を入れる 例4：価格交渉後の結果連絡メール シナリオ： お客様の希望で賃料交渉をオーナーに行い、その結果を報告する。\nプロンプト：\n賃料交渉の結果をお客様に報告するメールを書いてください。 【状況】 ・お客様：鈴木様 ・元の賃料：16万円 ・希望交渉額：14万円 ・オーナーの回答：15万円（管理費込みに変更）で合意 【条件】 ・交渉が完全には通らなかったが、一部成果があったことを 前向きに伝える ・管理費込みになったことのメリットを説明する ・次のステップ（申し込み手続き）への誘導を含める ・300文字程度 例5：成約後の御礼・入居前確認メール シナリオ： 契約締結後、入居日が近づいてきたお客様への連絡。\nプロンプト：\n成約後の御礼と入居前確認事項をまとめたメールを作成してください。 【状況】 ・お客様：高橋様 ・入居予定日：2週間後 ・確認事項： - 引越し日時の連絡（管理会社への届け出のため） - 駐車場利用の有無の最終確認 - 入居前内覧の希望確認 【条件】 ・御礼の気持ちを込めた温かみのあるトーンで ・箇条書きを使って確認事項を見やすく整理する ・今後もサポートする姿勢を最後に伝える ChatGPTメール作成の精度を上げる3つのコツ コツ1：お客様の「言葉」を使う 内見時や電話でお客様が発した言葉（「子どもが走り回れる広さが欲しい」「在宅ワークなので静かな環境が重要」など）をそのままプロンプトに入力すると、よりパーソナライズされたメールが生成されます。\nコツ2：ネガティブな要素も正直に伝える指示を入れる 「デメリットも正直に伝えつつ、それを上回るメリットを強調してください」という指示を加えると、信頼感のある文章になります。お客様に誠実な印象を与え、長期的な関係構築につながります。\nコツ3：複数バリエーションを生成して選ぶ プロンプトの最後に「3つのバリエーションを作成してください」と追加するだけで、トーンや切り口の違う3パターンが一度に生成されます。その中から最適なものを選んで送ればOKです。\nよくある失敗と対処法 失敗1：生成された文章が堅すぎる → 「もう少しカジュアルで親しみやすい表現に変えてください」と追加指示を出す。\n失敗2：物件の特徴が羅列になってしまう → 「お客様のニーズ（〇〇）に合わせて、この物件が最適な理由を伝える構成にしてください」と目的を明確にする。\n失敗3：文章が長すぎてメールに向かない → プロンプトに「スマートフォンで読みやすい長さ（200文字以内）で」と文字数制限を設ける。\n失敗4：毎回同じような文章になる → 「前回とは違うアプローチで」「キャッチコピーから始めて」など、バリエーション指示を追加する。\n時短効果のシミュレーション 1通のメール作成にかかる時間を比較してみましょう。\n作業 従来の方法 ChatGPT活用 物件情報の整理 5分 2分 文章作成 10〜15分 1〜2分 見直し・微調整 5分 2〜3分 合計 約20〜25分 約5〜7分 1日10通のメールを送る場合、従来は3.5〜4時間かかっていたものが、ChatGPT活用で1時間以内に短縮できる計算になります。月間換算では約60〜70時間の削減効果です。\nさらに深く活用したい方へ この記事では物件紹介メールに特化して解説しましたが、ChatGPTは他にも多くの不動産営業業務に応用できます。物件リスト作成、SNS投稿文、物件説明会のトークスクリプトなど、より体系的なプロンプト集をまとめた記事も参考にしてください。\nさらに詳しいプロンプトは不動産営業向けChatGPTプロンプト集 完全ガイド をご覧ください。\n不動産営業でのAI活用スキルを武器に、年収アップや働きやすい環境への転職を検討している方にはdoda がおすすめです。不動産・建設業界に精通した転職エージェントが、あなたの営業実績を最大限に評価してくれる求人を無料で紹介してくれます。\n関連ツール 住宅ローンの月額返済額を計算 → 住宅ローンシミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 関連テンプレート 不動産営業のメール作成をさらに効率化したい方は、厳選されたプロンプト集をぜひご活用ください:\n不動産営業向けChatGPTプロンプト集 — 物件紹介・反響返信・クロージングまで50以上のプロンプトを収録。すぐに使えるコピペ形式で提供 ","permalink":"https://productivity-works.com/ja/posts/fudosan-eigyo-chatgpt-bukken-shoukai-mail/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"不動産営業のメール作成に毎日どれだけ時間を使っていますか\"\u003e不動産営業のメール作成に毎日どれだけ時間を使っていますか？\u003c/h2\u003e\n\u003cp\u003e不動産営業の現場では、1日に何十通ものメールを送ることが珍しくありません。物件紹介メール、問い合わせへの返信、内見後のフォロー、契約前の確認連絡……これらをすべて手作業で書いていると、営業活動の本質的な部分に集中できなくなってしまいます。\u003c/p\u003e\n\u003cp\u003eある調査によると、不動産営業担当者は1日の業務時間のうち約25〜30%をメール作成や返信に費やしているとされています。仮に1日8時間働くとすれば、2〜2.5時間がメール作業です。これをChatGPTで半分以下に削減できれば、その時間をお客様との商談や物件の下見に使えます。\u003c/p\u003e\n\u003cp\u003eこの記事では、ChatGPTを使って物件紹介メールをはじめとする営業メールを\u003cstrong\u003e3分以内に作成する具体的な方法\u003c/strong\u003eを、実際に使えるプロンプト例とともに解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"なぜ不動産営業メールにchatgptが効くのか\"\u003eなぜ不動産営業メールにChatGPTが効くのか\u003c/h2\u003e\n\u003cp\u003eChatGPTが不動産営業のメール作成に特に効果を発揮する理由は3つあります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1. 型が決まっているから\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e不動産の営業メールには、ある程度決まった構成があります。物件のスペック（広さ・価格・立地）を伝え、お客様のニーズとの合致点を説明し、次のアクション（内見の提案など）につなげる——この流れさえ押さえれば、あとはChatGPTが自然な文章で肉付けしてくれます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2. 情報を与えるだけで文章化できるから\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e「駅徒歩5分、2LDK、家賃12万円、ペット可」という箇条書きの情報を渡すだけで、ChatGPTはそれを読みやすいメール文に変換します。ゼロから文章を考える必要がなくなります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e3. トーンの調整が簡単だから\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e「丁寧なビジネス文体で」「少し親しみやすいトーンで」「簡潔に3行でまとめて」といった指示を一言添えるだけで、同じ情報をさまざまなスタイルに変えることができます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"実践物件紹介メールを3分で作る手順\"\u003e実践：物件紹介メールを3分で作る手順\u003c/h2\u003e\n\u003ch3 id=\"ステップ1物件情報を箇条書きでまとめる1分\"\u003eステップ1：物件情報を箇条書きでまとめる（1分）\u003c/h3\u003e\n\u003cp\u003eまず、紹介したい物件の情報をメモ帳などに箇条書きします。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・物件名：グリーンコート渋谷\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・所在地：東京都渋谷区\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・最寄り駅：渋谷駅から徒歩8分\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・間取り：2LDK（55平米）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・賃料：月額18万円（管理費込み）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・特徴：南向き・角部屋・2024年築・宅配ボックスあり\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・ペット：相談可\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・お客様のニーズ：通勤重視、2人暮らし、子ども予定あり\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"ステップ2chatgptにプロンプトを入力する30秒\"\u003eステップ2：ChatGPTにプロンプトを入力する（30秒）\u003c/h3\u003e\n\u003cp\u003e以下のプロンプトを使います。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eあなたは不動産営業のプロです。以下の物件情報をもとに、\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e見込み客に送る物件紹介メールを作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【物件情報】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・物件名：グリーンコート渋谷\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・所在地：東京都渋谷区\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・最寄り駅：渋谷駅から徒歩8分\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・間取り：2LDK（55平米）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・賃料：月額18万円（管理費込み）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・特徴：南向き・角部屋・2024年築・宅配ボックスあり\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・ペット：相談可\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【お客様情報】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・2人暮らし予定（将来的に子どもあり）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・渋谷周辺で通勤できる場所を希望\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・明るくて広い部屋を重視\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【条件】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・丁寧かつ親しみやすいトーンで\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・300〜400文字程度\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・内見のご提案を含める\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・件名も一緒に作成すること\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"ステップ3出力を確認して微調整する12分\"\u003eステップ3：出力を確認して微調整する（1〜2分）\u003c/h3\u003e\n\u003cp\u003eChatGPTが生成した文章を読み、必要に応じて数カ所を手直しします。担当者名や会社名、電話番号などの署名情報を加えれば完成です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"具体例5つシーン別テンプレートプロンプト\"\u003e具体例5つ：シーン別テンプレートプロンプト\u003c/h2\u003e\n\u003ch3 id=\"例1初回の物件紹介メール\"\u003e例1：初回の物件紹介メール\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eシナリオ：\u003c/strong\u003e 先日問い合わせがあったお客様に、条件に合う物件を提案する。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eプロンプト：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e不動産営業として、初めてお問い合わせいただいたお客様に\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e物件を提案するメールを書いてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【お客様情報】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・先日SUUMOから問い合わせがあった田中様\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・希望：都内2LDK、予算15万円以内、駅徒歩10分以内\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【提案物件】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・物件名：サンシャインパレス中野\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・賃料：14.5万円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・間取り：2LDK（50平米）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・最寄り駅：中野駅から徒歩7分\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・特徴：築5年、リノベーション済み、オートロック\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【条件】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・初めてのやり取りなので丁寧なトーンで\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・物件の魅力を2〜3点具体的にアピールして\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・内見の日程調整を促す文を入れる\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・200〜300文字程度\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch3 id=\"例2問い合わせへの反響返信メール\"\u003e例2：問い合わせへの反響返信メール\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eシナリオ：\u003c/strong\u003e ポータルサイトから問い合わせがあった直後に送る自動返信ではなく、担当者からの個別返信。\u003c/p\u003e","title":"不動産営業 ChatGPTで物件紹介メールを3分で作成する方法"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「副業を始めたけど確定申告って必要？」「どうやってやるの？」——会社員が副業を始めると必ず直面するのが確定申告の問題です。やり方を間違えると追徴課税や延滞税が発生することも。本記事では2026年の最新情報をもとに、副業の確定申告のやり方を初心者向けに完全解説します。\n副業確定申告の流れ（会計ソフト活用版） Step 1 収入・経費 を整理する 領収書・明細を アプリで記録 Step 2 会計ソフトを 選ぶ freee or マネーフォワード Step 3 申告書を 自動作成 入力するだけで 書類が完成 Step 4 e-Taxで 電子申告 マイナンバー カードで送信 Step 5 納税 3月15日 までに 支払い freee のポイント ・質問形式で申告書が完成 ・銀行口座・カード自動連携 節税のカギ ・経費を漏れなく計上する ・青色申告で最大65万円控除 ⚠ 住民税は「自分で納付」を選択 → 副業を会社にバレにくくする そもそも副業の確定申告は必要？ 基本ルール：副業収入が年間20万円超なら必須 会社員（給与所得者）が副業をしている場合、副業の所得が年間20万円を超えたら確定申告が必要です。\n副業所得 確定申告の要否 20万円以下 原則不要（住民税申告は必要な場合あり） 20万円超 必須 複数の副業合計で20万円超 必須 注意：「収入」ではなく「所得」です。 所得 = 収入 - 経費　なので、収入が25万円でも経費が10万円なら所得15万円で申告不要になります。\n20万円以下でも住民税申告が必要なケース 副業所得が20万円以下でも、住民税の申告が別途必要な場合があります。お住まいの市区町村の窓口または確定申告と同時に対応できます。\n確定申告の種類：白色申告と青色申告の違い 項目 白色申告 青色申告（10万控除） 青色申告（65万控除） 記帳方法 簡易 簡易 複式簿記 控除額 なし 10万円 65万円 事前申請 不要 必要（開業届+青色申告承認申請書） 必要 難易度 低い 中 高い（ソフト推奨） 副業初年度は白色申告で十分ですが、副業が軌道に乗ってきたら青色申告へ切り替えると節税効果が大きくなります。\n副業の確定申告：ステップバイステップ Step 1：収入と経費を整理する まず1年分（1月1日〜12月31日）の副業収入と経費をすべてリストアップします。\n副業収入の例：\nクラウドソーシングの報酬 アフィリエイト収入 フリーランス案件の報酬 ネットショップの売上 YouTube・ブログ広告収入 経費として認められるものの例：\n経費の種類 具体例 通信費 インターネット代（副業使用分） 消耗品費 PC周辺機器、文房具 ソフトウェア費 Adobe CC、各種ツール代 書籍・研修費 業務関連の書籍、セミナー費 交通費 打ち合わせ等の交通費 家賃（按分） 自宅作業スペースの家賃按分 Step 2：確定申告ソフトを選ぶ 2026年現在、最も使いやすいのは以下の2つです。\nfreee（フリー） 初心者に最もおすすめのクラウド会計ソフト。質問に答えるだけで確定申告書が完成します。\n月額1,480円〜（個人プラン） スマホアプリでレシート撮影・経費登録が簡単 e-Tax（電子申告）に対応 銀行口座・クレジットカードと自動連携 freee公式サイトで無料トライアル開始 マネーフォワード クラウド確定申告 会計知識がある方や、マネーフォワードMEをすでに使っている方におすすめ。\n月額1,280円〜（個人プラン） 家計簿アプリ「マネーフォワードME」と連携しやすい UIが直感的で使いやすい 無料プランあり（機能制限あり） マネーフォワード クラウド確定申告を試す Step 3：申告書を作成する freeeやマネーフォワードを使えば、以下の流れで作成できます。\n収入・経費データを入力（または自動取り込み） 控除（医療費控除・ふるさと納税など）を入力 申告書が自動生成される 内容を確認して完成 Step 4：提出する 提出方法は3つあります。\n提出方法 メリット デメリット e-Tax（電子申告） 自宅から完結・65万控除対応 マイナンバーカードまたはID必要 郵送 PCだけでOK 返送なし・確認できない 窓口持参 確認できる・質問できる 税務署に行く必要あり e-Taxが最も便利でおすすめです。マイナンバーカードがあればスマホだけで完結します。\nStep 5：納税する 確定申告後、納税額が確定します。\n申告・納税期限：3月15日（2026年分は2027年3月15日） 納税方法：e-Tax、クレジットカード、コンビニ、銀行振込など 還付がある場合は1〜2ヶ月で指定口座に振り込まれます 副業の経費計上で節税する具体的な方法 家賃の按分 自宅で副業をしている場合、作業スペースの割合分を経費にできます。\n計算例：\n家賃8万円 / 部屋全体60㎡ / 作業スペース12㎡ 経費 = 8万円 × (12/60) = 16,000円/月 年間：192,000円を経費計上可能 スマホ・ネット代の按分 副業で使用している割合分（例：50%）を経費にできます。領収書とともに按分割合の根拠をメモしておきましょう。\n青色申告特別控除で最大65万円節税 青色申告（65万控除）を選べば、課税所得から65万円を差し引けます。\n節税効果の例：\n副業所得100万円の場合、65万円控除後の課税所得は35万円 所得税率20%なら、通常20万円の税金が7万円に（13万円節税） よくある失敗と注意点 失敗1：経費の領収書を捨ててしまう 経費の領収書は7年間の保管義務があります（青色申告の場合）。スマホで撮影してfreeeに自動登録するのが最も楽です。\n失敗2：会社にバレたくないのに普通徴収にしない 会社員が副業で確定申告をする場合、住民税の納付方法を**「自分で納付（普通徴収）」**に設定しないと、会社に副業収入がバレる可能性があります。確定申告書の「住民税・事業税に関する事項」欄で「自分で納付」を選択しましょう。\n失敗3：期限を過ぎてしまう 確定申告期限：3月15日 期限後申告でも受理されますが、無申告加算税（5〜15%）や延滞税が発生します 確定申告を楽にするための準備 1年中準備しておくと3月の申告がラクになります。\nfreeeやマネーフォワードを年初から導入して経費を自動記録 銀行口座とカードを副業専用に分ける（混在を防ぐ） レシートはすぐスマホ撮影して捨てる クラウドソーシングの支払い明細は毎月ダウンロード保存 まとめ ポイント 内容 申告が必要なケース 副業所得が年間20万円超 おすすめソフト freee または マネーフォワード 節税の鍵 経費の漏れなく計上 + 青色申告 注意点 住民税を普通徴収に設定（会社バレ防止） 期限 毎年3月15日 副業の確定申告は、正しい知識とツールさえあれば難しくありません。freeeやマネーフォワードを使えば数時間で完成します。まずは無料トライアルから始めてみましょう。\n関連ツール・記事 副業税金計算ツール — 副業収入と経費から所得税・住民税・手取りを自動計算 ふるさと納税シミュレーター — 控除上限額を自動計算、確定申告と併用で節税効果最大化 手取り計算シミュレーター — 年収から手取り・税金・社会保険料を自動計算 年収から所得税・住民税を計算 → 所得税シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール フリーランス確定申告のやり方完全ガイド2026年版 副業確定申告 20万以下のやり方完全ガイド2026年版 副業フリーランスがfreeeで青色申告65万控除を最速で取る方法 Productivity Worksのツールで確定申告をもっと効率化 確定申告の経費管理や収支記録に使えるExcelテンプレート・freee活用ガイドをBOOTHで配布中です。\nProductivity Works BOOTHストアはこちら 手作業での集計時間をゼロにして、確定申告をストレスフリーにしましょう。\n","permalink":"https://productivity-works.com/ja/posts/fukugyou-kakuteishinkoku-yarikata-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「副業を始めたけど確定申告って必要？」「どうやってやるの？」——会社員が副業を始めると必ず直面するのが確定申告の問題です。やり方を間違えると\u003cstrong\u003e追徴課税や延滞税\u003c/strong\u003eが発生することも。本記事では2026年の最新情報をもとに、副業の確定申告のやり方を初心者向けに完全解説します。\u003c/p\u003e\n\u003cdiv style=\"max-width:620px;margin:1.8em auto;text-align:center;\"\u003e\n\u003csvg viewBox=\"0 0 620 260\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:100%;height:auto;\" aria-label=\"freee・マネーフォワードで副業確定申告の流れ\"\u003e\n  \u003cstyle\u003etext { font-family: 'Noto Sans JP', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', sans-serif; }\u003c/style\u003e\n  \u003crect width=\"620\" height=\"260\" rx=\"12\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"26\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"14\" font-weight=\"bold\"\u003e副業確定申告の流れ（会計ソフト活用版）\u003c/text\u003e\n  \u003cdefs\u003e\n    \u003cmarker id=\"arr4\" markerWidth=\"8\" markerHeight=\"8\" refX=\"6\" refY=\"3\" orient=\"auto\"\u003e\n      \u003cpath d=\"M0,0 L0,6 L8,3 z\" fill=\"#4a9eff\"/\u003e\n    \u003c/marker\u003e\n  \u003c/defs\u003e\n  \u003c!-- Step boxes --\u003e\n  \u003c!-- Step 1 --\u003e\n  \u003crect x=\"20\" y=\"44\" width=\"108\" height=\"90\" rx=\"10\" fill=\"white\" stroke=\"#4a9eff\" stroke-width=\"1.5\"/\u003e\n  \u003crect x=\"20\" y=\"44\" width=\"108\" height=\"28\" rx=\"10\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"74\" y=\"62\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003eStep 1\u003c/text\u003e\n \u003ctext x=\"74\" y=\"88\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003e収入・経費\u003c/text\u003e\n \u003ctext x=\"74\" y=\"104\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003eを整理する\u003c/text\u003e\n \u003ctext x=\"74\" y=\"126\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003e領収書・明細を\u003c/text\u003e\n \u003ctext x=\"74\" y=\"138\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003eアプリで記録\u003c/text\u003e\n  \u003cline x1=\"128\" y1=\"89\" x2=\"148\" y2=\"89\" stroke=\"#4a9eff\" stroke-width=\"1.5\" marker-end=\"url(#arr4)\"/\u003e\n  \u003c!-- Step 2 --\u003e\n  \u003crect x=\"148\" y=\"44\" width=\"108\" height=\"90\" rx=\"10\" fill=\"white\" stroke=\"#4a9eff\" stroke-width=\"1.5\"/\u003e\n  \u003crect x=\"148\" y=\"44\" width=\"108\" height=\"28\" rx=\"10\" fill=\"#60a5fa\"/\u003e\n \u003ctext x=\"202\" y=\"62\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003eStep 2\u003c/text\u003e\n \u003ctext x=\"202\" y=\"88\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003e会計ソフトを\u003c/text\u003e\n \u003ctext x=\"202\" y=\"104\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003e選ぶ\u003c/text\u003e\n \u003ctext x=\"202\" y=\"120\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003efreee or\u003c/text\u003e\n \u003ctext x=\"202\" y=\"132\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003eマネーフォワード\u003c/text\u003e\n  \u003cline x1=\"256\" y1=\"89\" x2=\"276\" y2=\"89\" stroke=\"#4a9eff\" stroke-width=\"1.5\" marker-end=\"url(#arr4)\"/\u003e\n  \u003c!-- Step 3 --\u003e\n  \u003crect x=\"276\" y=\"44\" width=\"108\" height=\"90\" rx=\"10\" fill=\"white\" stroke=\"#10b981\" stroke-width=\"2\"/\u003e\n  \u003crect x=\"276\" y=\"44\" width=\"108\" height=\"28\" rx=\"10\" fill=\"#10b981\"/\u003e\n \u003ctext x=\"330\" y=\"62\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003eStep 3\u003c/text\u003e\n \u003ctext x=\"330\" y=\"88\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003e申告書を\u003c/text\u003e\n \u003ctext x=\"330\" y=\"104\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003e自動作成\u003c/text\u003e\n \u003ctext x=\"330\" y=\"120\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003e入力するだけで\u003c/text\u003e\n \u003ctext x=\"330\" y=\"132\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003e書類が完成\u003c/text\u003e\n  \u003cline x1=\"384\" y1=\"89\" x2=\"404\" y2=\"89\" stroke=\"#4a9eff\" stroke-width=\"1.5\" marker-end=\"url(#arr4)\"/\u003e\n  \u003c!-- Step 4 --\u003e\n  \u003crect x=\"404\" y=\"44\" width=\"108\" height=\"90\" rx=\"10\" fill=\"white\" stroke=\"#10b981\" stroke-width=\"2\"/\u003e\n  \u003crect x=\"404\" y=\"44\" width=\"108\" height=\"28\" rx=\"10\" fill=\"#34d399\"/\u003e\n \u003ctext x=\"458\" y=\"62\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003eStep 4\u003c/text\u003e\n \u003ctext x=\"458\" y=\"88\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003ee-Taxで\u003c/text\u003e\n \u003ctext x=\"458\" y=\"104\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003e電子申告\u003c/text\u003e\n \u003ctext x=\"458\" y=\"120\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003eマイナンバー\u003c/text\u003e\n \u003ctext x=\"458\" y=\"132\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003eカードで送信\u003c/text\u003e\n  \u003cline x1=\"512\" y1=\"89\" x2=\"532\" y2=\"89\" stroke=\"#4a9eff\" stroke-width=\"1.5\" marker-end=\"url(#arr4)\"/\u003e\n  \u003c!-- Step 5 --\u003e\n  \u003crect x=\"532\" y=\"44\" width=\"72\" height=\"90\" rx=\"10\" fill=\"white\" stroke=\"#f59e0b\" stroke-width=\"2\"/\u003e\n  \u003crect x=\"532\" y=\"44\" width=\"72\" height=\"28\" rx=\"10\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"568\" y=\"62\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003eStep 5\u003c/text\u003e\n \u003ctext x=\"568\" y=\"88\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003e納税\u003c/text\u003e\n \u003ctext x=\"568\" y=\"104\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003e3月15日\u003c/text\u003e\n \u003ctext x=\"568\" y=\"116\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003eまでに\u003c/text\u003e\n \u003ctext x=\"568\" y=\"128\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"9\"\u003e支払い\u003c/text\u003e\n  \u003c!-- ポイントバナー --\u003e\n  \u003crect x=\"20\" y=\"154\" width=\"276\" height=\"60\" rx=\"8\" fill=\"white\" stroke=\"#4a9eff\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"158\" y=\"174\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"12\" font-weight=\"bold\"\u003efreee のポイント\u003c/text\u003e\n \u003ctext x=\"158\" y=\"192\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・質問形式で申告書が完成\u003c/text\u003e\n \u003ctext x=\"158\" y=\"207\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・銀行口座・カード自動連携\u003c/text\u003e\n  \u003crect x=\"316\" y=\"154\" width=\"288\" height=\"60\" rx=\"8\" fill=\"white\" stroke=\"#10b981\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"460\" y=\"174\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"12\" font-weight=\"bold\"\u003e節税のカギ\u003c/text\u003e\n \u003ctext x=\"460\" y=\"192\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・経費を漏れなく計上する\u003c/text\u003e\n \u003ctext x=\"460\" y=\"207\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e・青色申告で最大65万円控除\u003c/text\u003e\n  \u003c!-- 住民税注意 --\u003e\n  \u003crect x=\"20\" y=\"226\" width=\"580\" height=\"24\" rx=\"6\" fill=\"#eff6ff\" stroke=\"#f59e0b\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"242\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\" font-weight=\"bold\"\u003e⚠ 住民税は「自分で納付」を選択 → 副業を会社にバレにくくする\u003c/text\u003e\n\u003c/svg\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"そもそも副業の確定申告は必要\"\u003eそもそも副業の確定申告は必要？\u003c/h2\u003e\n\u003ch3 id=\"基本ルール副業収入が年間20万円超なら必須\"\u003e基本ルール：副業収入が年間20万円超なら必須\u003c/h3\u003e\n\u003cp\u003e会社員（給与所得者）が副業をしている場合、\u003cstrong\u003e副業の所得が年間20万円を超えたら確定申告が必要\u003c/strong\u003eです。\u003c/p\u003e","title":"副業の確定申告やり方2026年版【freee・マネーフォワード対応】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nふるさと納税という言葉は知っているけれど、「なんだか難しそう」「手続きが面倒そう」と感じて手が出せていない方は多いのではないでしょうか。実は、正しく理解すれば誰でも簡単に利用できる、非常にお得な制度です。\n本記事では、ふるさと納税の仕組みから申し込み・手続き・控除の受け方まで、2026年の最新情報をふまえてゼロから丁寧に解説します。\nふるさと納税とは？仕組みをわかりやすく解説 ふるさと納税とは、自分が選んだ自治体に寄附をすると、翌年の住民税・所得税から寄附額（2,000円の自己負担を除いた分）が控除される制度です。さらに、多くの自治体がお礼として地域の特産品や返礼品を贈ってくれます。\nふるさと納税の「実質2,000円」の意味 たとえば年収500万円の方が50,000円分のふるさと納税をした場合：\n寄附金額：50,000円 自己負担：2,000円 控除額：48,000円（住民税・所得税から差し引かれる） 返礼品：約15,000〜16,500円相当の特産品（寄附額の30%程度） 実質2,000円で5万円分の寄附ができ、しかも返礼品まで受け取れるという仕組みです。賢く使えば年間数万円以上お得になります。\nふるさと納税で控除される税金の種類 税金の種類 控除の仕組み 所得税 寄附金額から2,000円を引いた額に所得税率を掛けた金額が還付される 住民税（基本分） 寄附金額から2,000円を引いた額の10%が控除 住民税（特例分） 個人住民税所得割額の20%を上限に控除 ふるさと納税の控除上限額を確認しよう ふるさと納税には控除上限額があります。年収や家族構成によって異なるため、まず自分の上限額を把握することが重要です。上限を超えて寄附しても、その分は自己負担となります。\n年収別・家族構成別の控除上限額目安（2026年） 年収 独身・共働き 夫婦（配偶者控除あり） 夫婦＋子1人（高校生） 夫婦＋子2人（大学生・高校生） 300万円 28,000円 19,000円 19,000円 7,000円 400万円 42,000円 33,000円 33,000円 21,000円 500万円 61,000円 49,000円 49,000円 34,000円 600万円 77,000円 69,000円 69,000円 60,000円 700万円 108,000円 86,000円 86,000円 79,000円 800万円 129,000円 120,000円 107,000円 85,000円 1,000万円 176,000円 166,000円 166,000円 163,000円 ※あくまでも目安です。正確な上限額は各ふるさと納税ポータルサイトのシミュレーターか、税務署・税理士にご確認ください。\n控除上限額を調べる方法 ふるさとチョイス・さとふるなどのシミュレーターを利用する（無料・数分で計算可） 源泉徴収票を手元に用意して入力する 昨年の住民税決定通知書から「課税所得」を確認する ふるさと納税の申し込み手順【ステップバイステップ】 STEP 1：控除上限額を計算する まず、自分がいくらまで寄附できるかを確認します。各ポータルサイトに無料シミュレーターが用意されています。\nSTEP 2：ポータルサイトで返礼品を選ぶ 主要なふるさと納税ポータルサイトは以下の通りです。\nサービス名 特徴 ポイント付与 ふるさとチョイス 掲載数最大級・老舗 あり（チョイスPay） さとふる SoftBank系・UIが見やすい あり（さとふるポイント） 楽天ふるさと納税 楽天ポイントが貯まる 楽天ポイント ふるなび 家電・ギフト券系が豊富 ふるなびコイン マイナビふるさと納税 マイナビ運営・使いやすい あり 楽天経済圏の方へ：楽天ふるさと納税はSPU（スーパーポイントアップ）の対象。楽天市場での買い物と組み合わせることで、寄附額の5〜20%相当のポイントが還元されることもあります。節税効果に加えてポイントも得られる一石二鳥の方法です。\nSTEP 3：寄附の申し込みをする 返礼品を選んだら、氏名・住所・連絡先などを入力して寄附を申し込みます。支払い方法はクレジットカード・コンビニ払い・銀行振込などが選べます。\nクレジットカード払いがおすすめな理由：\n手続きが最も簡単 ポイントが貯まる 支払い証明が後から確認しやすい STEP 4：返礼品と寄附証明書を受け取る 寄附が完了すると、自治体から返礼品と寄附金受領証明書が送られてきます。証明書は確定申告またはワンストップ特例手続きに必要なため、大切に保管してください。\nSTEP 5：控除の手続きをする（ワンストップ特例 or 確定申告） 控除を受けるための手続きは2通りあります。次のセクションで詳しく説明します。\n控除を受けるための2つの方法 方法①：ワンストップ特例制度（会社員・パート向け） 対象者：給与所得者（会社員・パート・アルバイト）で確定申告不要な方\n条件：\n寄附先の自治体が5自治体以内であること 同一の自治体に複数回寄附しても「1自治体」と数える 医療費控除・住宅ローン控除など他の理由で確定申告をしない方 手続きの流れ：\n寄附のたびに自治体から「特例申請書（ワンストップ特例申請書）」が送られてくる 申請書に必要事項を記入し、マイナンバーカードのコピーまたは「通知カード＋本人確認書類のコピー」を添付 寄附した翌年の1月10日までに自治体へ郵送 メリット：確定申告が不要。翌年の住民税から一括控除されます。\nオンラインワンストップ：一部のポータルサイトでは、マイナンバーカードを使ってオンラインで申請できます（郵送不要）。さとふる・楽天ふるさと納税などが対応済み。\n方法②：確定申告 対象者：\n自営業・フリーランスの方 年収2,000万円超の方 6自治体以上に寄附した方 医療費控除・住宅ローン控除など他の控除で確定申告をする方 手続きの流れ：\n全自治体分の寄附金受領証明書を集める 翌年の2月16日〜3月15日の確定申告期間に申告書を作成 「寄附金控除」欄に寄附先・金額を記入 e-Tax（オンライン）または税務署へ書類を提出 注意：確定申告をする場合、ワンストップ特例の申請は無効になります。確定申告書の提出を忘れると控除が受けられないので注意してください。\n返礼品の選び方・おすすめジャンル コスパの高いジャンルランキング ジャンル コスパ 特徴 お肉（牛・豚・鶏） ★★★★★ 還元率が高く日常的に消費できる 魚介類・海産物 ★★★★★ カニ・ホタテ・うにが人気 米 ★★★★☆ 重くてかさばるので送料節約になる フルーツ ★★★★☆ 季節限定品が多く旬の味を楽しめる 日用品・消耗品 ★★★☆☆ ティッシュ・トイレットペーパーなど生活費を削減 宿泊・体験 ★★★☆☆ 旅行が好きな方に 電化製品・家電 ★★★☆☆ 一部自治体で取り扱い 賢い返礼品の選び方 3つのポイント\n還元率を確認する：寄附額に対して返礼品の市場価格がどれくらいかをチェック。30%程度が標準ですが、それ以上の自治体もあります。 冷蔵・冷凍の保管スペースを考える：大量の肉や魚を注文する際は、冷凍庫の空き容量を確認しましょう。 配送時期を指定できるか確認する：年末・年始は発送が集中するため、時期をずらして申し込むとスムーズです。 2026年に注意すべきポイント・制度変更 ふるさと納税の規制強化の流れ 総務省はふるさと納税の適正化を継続的に進めています。2023年10月以降、返礼品の還元率の上限（寄附額の30%以内）や経費率規制（寄附額の50%以内）が厳格化されており、2026年も引き続き適用されています。\n返礼品として取り扱いができないもの（主な例）：\n金銭（現金・商品券・電子マネー等） 有価証券 寄附者に贈られる旅費・交通費 マイナンバーカードの活用で手続きがさらに便利に 2026年時点では、マイナンバーカードを利用したオンラインワンストップ申請に対応するポータルが増えています。カードを持っている方はぜひ活用しましょう。\nよくある疑問・Q\u0026amp;A Q. 会社員でも使えますか？ A. はい、むしろ会社員（給与所得者）の方に最も向いている制度です。ワンストップ特例を使えば確定申告不要で控除が受けられます。\nQ. 申し込みはいつでもできますか？ A. 基本的に1年を通じていつでも申し込みできます。ただし控除は「その年（1月1日〜12月31日）の寄附額」に対して翌年に適用されます。年末ギリギリに申し込む場合は、ワンストップ特例の締め切り（翌年1月10日消印有効）に注意してください。\nQ. 返礼品は届くまでどのくらいかかりますか？ A. 自治体や返礼品の種類によって異なります。早いところは2〜3週間、農産物や海産物は収穫・漁獲シーズンに合わせて数か月後に届くケースもあります。申し込み画面で発送時期を確認するようにしましょう。\nQ. パートタイムでも使えますか？ A. 収入があり住民税・所得税を納めていれば利用できます。ただし年収103万円以下（所得税非課税）の方は所得税の還付は受けられず、住民税からの控除のみになります。年収が低い場合は控除上限額も低くなるため、シミュレーターで事前に確認しましょう。\nQ. 住民税が少ない年（育休・転職など）はどうなりますか？ A. 住民税・所得税が少ない年は控除上限額も低くなります。育休中・転職直後などは特に注意が必要です。\nQ. ふるさと納税は毎年やらないといけませんか？ A. 毎年やらなくても問題ありません。ただし控除は「その年に行った寄附」に対してのみ有効なので、毎年行う方がお得です。\n確定申告の準備には**freee会計（無料トライアルあり） **が便利です。収入・経費の記録から申告書作成までスマホでも完結します。\nまとめ：ふるさと納税は「やらなきゃ損」の制度 ふるさと納税は、正しく活用すれば実質2,000円の自己負担で豊富な返礼品を受け取りながら、税金の控除も受けられる非常にお得な制度です。\n今すぐできること：\n年収・家族構成を確認して控除上限額をシミュレーション お気に入りのポータルサイトでほしい返礼品を探す クレジットカードで申し込み（ポイントも貯まる） ワンストップ特例申請書を期限内に提出 難しく考えず、まずは少額から試してみることをおすすめします。慣れれば毎年の「お得な年中行事」になるはずです。\n本記事の情報は2026年5月時点のものです。制度の詳細は総務省および各自治体の公式情報をご確認ください。税金に関する具体的なご質問は税務署または税理士にご相談ください。\n関連ツール・関連記事 割合・割引・変化率をすぐ計算 → パーセント計算ツール ふるさと納税シミュレーター — 年収・家族構成から控除上限額を自動計算 iDeCo節税シミュレーター — iDeCoとふるさと納税の併用も確認できます 手取り計算シミュレーター — 年収から手取りを即計算 年収から所得税・住民税を計算 → 所得税シミュレーター NISA vs iDeCo どっちを先に始めるべき？ 新NISA始め方：初心者向け完全ガイド 副業フリーランスの確定申告のやり方2026 関連テンプレート 資産運用・家計管理をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す ","permalink":"https://productivity-works.com/ja/posts/furusato-nozei-yarikata-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003eふるさと納税という言葉は知っているけれど、「なんだか難しそう」「手続きが面倒そう」と感じて手が出せていない方は多いのではないでしょうか。実は、正しく理解すれば誰でも簡単に利用できる、非常にお得な制度です。\u003c/p\u003e\n\u003cp\u003e本記事では、ふるさと納税の仕組みから申し込み・手続き・控除の受け方まで、2026年の最新情報をふまえてゼロから丁寧に解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ふるさと納税とは仕組みをわかりやすく解説\"\u003eふるさと納税とは？仕組みをわかりやすく解説\u003c/h2\u003e\n\u003cp\u003eふるさと納税とは、\u003cstrong\u003e自分が選んだ自治体に寄附をすると、翌年の住民税・所得税から寄附額（2,000円の自己負担を除いた分）が控除される\u003c/strong\u003e制度です。さらに、多くの自治体がお礼として地域の特産品や返礼品を贈ってくれます。\u003c/p\u003e\n\u003ch3 id=\"ふるさと納税の実質2000円の意味\"\u003eふるさと納税の「実質2,000円」の意味\u003c/h3\u003e\n\u003cp\u003eたとえば年収500万円の方が50,000円分のふるさと納税をした場合：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e寄附金額：50,000円\u003c/li\u003e\n\u003cli\u003e自己負担：2,000円\u003c/li\u003e\n\u003cli\u003e控除額：48,000円（住民税・所得税から差し引かれる）\u003c/li\u003e\n\u003cli\u003e返礼品：約15,000〜16,500円相当の特産品（寄附額の30%程度）\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e実質2,000円で5万円分の寄附ができ、しかも返礼品まで受け取れる\u003c/strong\u003eという仕組みです。賢く使えば年間数万円以上お得になります。\u003c/p\u003e\n\u003ch3 id=\"ふるさと納税で控除される税金の種類\"\u003eふるさと納税で控除される税金の種類\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e税金の種類\u003c/th\u003e\n          \u003cth\u003e控除の仕組み\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e所得税\u003c/td\u003e\n          \u003ctd\u003e寄附金額から2,000円を引いた額に所得税率を掛けた金額が還付される\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e住民税（基本分）\u003c/td\u003e\n          \u003ctd\u003e寄附金額から2,000円を引いた額の10%が控除\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e住民税（特例分）\u003c/td\u003e\n          \u003ctd\u003e個人住民税所得割額の20%を上限に控除\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"ふるさと納税の控除上限額を確認しよう\"\u003eふるさと納税の控除上限額を確認しよう\u003c/h2\u003e\n\u003cp\u003eふるさと納税には\u003cstrong\u003e控除上限額\u003c/strong\u003eがあります。年収や家族構成によって異なるため、まず自分の上限額を把握することが重要です。上限を超えて寄附しても、その分は自己負担となります。\u003c/p\u003e\n\u003ch3 id=\"年収別家族構成別の控除上限額目安2026年\"\u003e年収別・家族構成別の控除上限額目安（2026年）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e年収\u003c/th\u003e\n          \u003cth\u003e独身・共働き\u003c/th\u003e\n          \u003cth\u003e夫婦（配偶者控除あり）\u003c/th\u003e\n          \u003cth\u003e夫婦＋子1人（高校生）\u003c/th\u003e\n          \u003cth\u003e夫婦＋子2人（大学生・高校生）\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e300万円\u003c/td\u003e\n          \u003ctd\u003e28,000円\u003c/td\u003e\n          \u003ctd\u003e19,000円\u003c/td\u003e\n          \u003ctd\u003e19,000円\u003c/td\u003e\n          \u003ctd\u003e7,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e400万円\u003c/td\u003e\n          \u003ctd\u003e42,000円\u003c/td\u003e\n          \u003ctd\u003e33,000円\u003c/td\u003e\n          \u003ctd\u003e33,000円\u003c/td\u003e\n          \u003ctd\u003e21,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e500万円\u003c/td\u003e\n          \u003ctd\u003e61,000円\u003c/td\u003e\n          \u003ctd\u003e49,000円\u003c/td\u003e\n          \u003ctd\u003e49,000円\u003c/td\u003e\n          \u003ctd\u003e34,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e600万円\u003c/td\u003e\n          \u003ctd\u003e77,000円\u003c/td\u003e\n          \u003ctd\u003e69,000円\u003c/td\u003e\n          \u003ctd\u003e69,000円\u003c/td\u003e\n          \u003ctd\u003e60,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e700万円\u003c/td\u003e\n          \u003ctd\u003e108,000円\u003c/td\u003e\n          \u003ctd\u003e86,000円\u003c/td\u003e\n          \u003ctd\u003e86,000円\u003c/td\u003e\n          \u003ctd\u003e79,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e800万円\u003c/td\u003e\n          \u003ctd\u003e129,000円\u003c/td\u003e\n          \u003ctd\u003e120,000円\u003c/td\u003e\n          \u003ctd\u003e107,000円\u003c/td\u003e\n          \u003ctd\u003e85,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1,000万円\u003c/td\u003e\n          \u003ctd\u003e176,000円\u003c/td\u003e\n          \u003ctd\u003e166,000円\u003c/td\u003e\n          \u003ctd\u003e166,000円\u003c/td\u003e\n          \u003ctd\u003e163,000円\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※あくまでも目安です。正確な上限額は各ふるさと納税ポータルサイトのシミュレーターか、税務署・税理士にご確認ください。\u003c/p\u003e\n\u003ch3 id=\"控除上限額を調べる方法\"\u003e控除上限額を調べる方法\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eふるさとチョイス・さとふるなどのシミュレーター\u003c/strong\u003eを利用する（無料・数分で計算可）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e源泉徴収票\u003c/strong\u003eを手元に用意して入力する\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e昨年の住民税決定通知書\u003c/strong\u003eから「課税所得」を確認する\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"ふるさと納税の申し込み手順ステップバイステップ\"\u003eふるさと納税の申し込み手順【ステップバイステップ】\u003c/h2\u003e\n\u003ch3 id=\"step-1控除上限額を計算する\"\u003eSTEP 1：控除上限額を計算する\u003c/h3\u003e\n\u003cp\u003eまず、自分がいくらまで寄附できるかを確認します。各ポータルサイトに無料シミュレーターが用意されています。\u003c/p\u003e","title":"ふるさと納税 やり方 完全ガイド【2026年版・初心者向け】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\niDeCoおすすめ証券会社ランキング【2026年最新版】手数料・商品数を徹底比較 「iDeCoを始めたいけど、どの証券会社（金融機関）で口座を開けばいいかわからない」という方は多いでしょう。iDeCoは一度始めると移換（金融機関の変更）に手間がかかるため、最初の証券会社選びが非常に重要です。\niDeCo おすすめ証券会社 比較チャート 証券会社 月額手数料 商品数 最低信託報酬 おすすめ度 SBI証券 🥇 1位 171円 約38本 0.05775% ★★★★★ 楽天証券 🥈 2位 171円 約32本 0.0561% ★★★★★ マネックス 🥉 3位 171円 約26本 0.09889% ★★★★☆ 松井証券 4位 171円 約40本 0.154% ★★★★☆ ※手数料171円は国民年金基金連合会・事務委託先の手数料込みの最低額。2026年5月時点。 この記事では以下のことがわかります。\niDeCo口座選びで最も重要な判断基準 2026年最新のおすすめ証券会社ランキング（比較表付き） 手数料の計算方法と長期的な影響 よくある失敗と証券会社の選び方のコツ iDeCo証券会社選びの基本を理解する 定義・仕組み iDeCo（個人型確定拠出年金）は、自分で選んだ金融機関に口座を開き、毎月掛金を拠出して自分で運用商品を選ぶ制度です。掛金は全額所得控除になり、運用益も非課税、受取時も税制優遇が受けられる三重の節税効果が特徴です。\niDeCo口座を開設できる金融機関は「運営管理機関」と呼ばれ、証券会社・銀行・保険会社など約200機関が指定されています。どこで開設しても制度の基本ルールは同じですが、以下の点が金融機関によって異なります。\n口座管理手数料（月額） 運用できる商品の数・ラインナップ サービス・サポートの充実度 アプリ・ウェブサービスの使いやすさ メリット・デメリット iDeCo全般のメリット\n掛金が全額所得控除 → 毎年の所得税・住民税が減る 運用益が非課税（通常は20.315%課税） 受取時に退職所得控除または公的年金等控除が適用 老後資金を強制的に積み立てられる自律的効果 iDeCo全般のデメリット\n原則60歳まで引き出し不可（流動性ゼロ） 毎月の口座管理手数料がかかる 転職・退職時に移換手続きが必要 運用商品の種類が金融機関によって限られる iDeCo おすすめ証券会社一覧（比較表） 総合ランキング 順位 金融機関 口座管理手数料（月額） 運用商品数 信託報酬最低 おすすめ度 1位 SBI証券 171円 約38本 0.05775% ★★★★★ 2位 楽天証券 171円 約32本 0.0561% ★★★★★ 3位 マネックス証券 171円 約26本 0.09889% ★★★★☆ 4位 松井証券 171円 約40本 0.154% ★★★★☆ 5位 auカブコム証券 171円 約28本 0.09372% ★★★☆☆ 6位 イオン銀行 171円 約20本 0.154% ★★★☆☆ 7位 大和証券 171円〜 約18本 0.154% ★★★☆☆ ※口座管理手数料171円は国民年金基金連合会・事務委託先金融機関の手数料を含む最低額。金融機関独自の手数料が別途かかる場合あり。\n各社の詳細 1位: SBI証券\n業界最大手で、iDeCo口座数No.1を誇ります。「eMAXIS Slim 全世界株式（オール・カントリー）」「eMAXIS Slim 米国株式（S\u0026amp;P500）」など最高水準の低コストファンドが揃っており、長期運用に最適です。インターフェースはやや複雑ですが、サポートが充実しています。\nSBI証券でiDeCo口座を開設する 2位: 楽天証券\n「楽天・オールカントリー株式インデックス・ファンド」（信託報酬0.0561%）が利用できる唯一の機関です。楽天証券ユーザーや楽天経済圏の方に特におすすめです。アプリが使いやすく、iDeCoの管理がしやすいのも魅力。\n楽天証券でiDeCo口座を開設する 3位: マネックス証券\niDeCo商品数は少なめですが、「eMAXIS Slim 先進国株式インデックス」など優良ファンドをカバー。マネックス証券のメイン口座と連携して管理しやすい環境が整っています。\n4位: 松井証券\n商品数は業界トップクラスの約40本。老舗証券会社としてのサポート体制が充実しており、対面サポートを重視する方に向いています。\n選び方・注意点 iDeCo 三重の節税効果 💰 ① 掛金が 全額所得控除 毎年の所得税・住民税が すぐに減る 📈 ② 運用益が すべて非課税 通常20.315%かかる税金が ゼロに 🏦 ③ 受取時も 控除が適用 退職所得控除または 公的年金等控除 → 長期で積み立てるほど節税効果が複利的に拡大します チェックポイント ポイント1: 手数料の比較（最重要）\niDeCoは最低でも年2,052円（月171円）の手数料がかかります。これは国民年金基金連合会・事務委託先金融機関の手数料で、どの機関を選んでも同じです。問題は金融機関独自の手数料で、銀行や対面証券では月数百円追加でかかる場合があります。\n長期運用では手数料の差が積み上がります。月171円（ネット証券最安）と月300円の機関では、30年間で約46,440円の差が生じます。\nポイント2: 運用商品のラインナップ\niDeCoで最も重要なのは「低コストのインデックスファンドを選べるか」です。信託報酬0.1%以下のファンドが含まれているかを必ず確認しましょう。\nポイント3: ウェブ・アプリの使いやすさ\niDeCoは年に数回は残高確認や配分変更を行います。スマートフォンアプリが充実している証券会社の方が長期運用を続けやすいです。\nポイント4: 証券会社との相性\nすでにSBI証券でNISA口座を持っているなら、iDeCoも同じ会社で開設すると資産管理が一元化でき便利です。\nポイント5: 企業型DCとの重複確認\n会社員の方は勤務先に企業型DC（確定拠出年金）があるか確認してください。企業型DCがある場合、iDeCoの掛金上限が変わります。\nよくある失敗 失敗1: 銀行窓口でiDeCoを開設する 地方銀行や都市銀行でiDeCoを開設すると、月数百円の独自手数料がかかり、運用商品も限られています。原則としてネット証券（SBI・楽天・マネックスなど）を選びましょう。\n失敗2: 元本確保型（定期預金・保険）のみで運用する 「リスクが怖いから」と定期預金だけで運用すると、インフレに負けて実質的に資産が目減りします。長期的には株式インデックスファンドを中心にした運用が有利です。\n失敗3: 証券会社を変えるのが大変なことを知らない iDeCoの金融機関変更（移換）には手続きに3〜6ヶ月かかり、その間は運用が停止されます。最初の選択が重要です。\n失敗4: 掛金を最大限設定しすぎる iDeCoは引き出しができないため、生活費・緊急資金と切り離した金額で設定することが大切です。余裕資金の範囲内で設定しましょう。\n関連記事: NISAとiDeCoはどっちを先に始めるべき？ よくある質問（FAQ） Q1. iDeCoはどの証券会社で開けばいいですか？ SBI証券か楽天証券をおすすめします。どちらも手数料最安水準で、低コストのインデックスファンドが揃っています。楽天経済圏の方は楽天証券、それ以外の方はSBI証券が第一候補です。\nQ2. iDeCoの口座管理手数料は全員同じですか？ 国民年金基金連合会と事務委託先金融機関への手数料（月171円）は共通ですが、金融機関独自の手数料は機関によって異なります。SBI証券・楽天証券は独自手数料0円のため最安です。\nQ3. iDeCoの証券会社は途中で変えられますか？ 変更可能ですが、手続きに3〜6ヶ月かかり、その間は運用が停止されます。資産が一時的に現金化（移換）されるため、タイミングに注意が必要です。\nQ4. iDeCoの掛金は毎月変えられますか？ 年1回、掛金の額を変更できます。ただし、変更手続きには数週間かかることがあります。\nQ5. 会社員と自営業でiDeCoの上限額は違いますか？ はい、異なります。会社員（企業年金なし）は月2.3万円、自営業・フリーランスは月6.8万円、公務員は月1.2万円が上限です（企業型DCの有無によっても変わります）。\nQ6. iDeCoで運用する商品は変更できますか？ はい、「スイッチング（乗り換え）」と「配分変更」が可能です。スイッチングは既存の資産を別のファンドに移す操作で、配分変更は今後の積立先の比率を変える操作です。\nQ7. iDeCoは何歳まで続けられますか？ 2022年の法改正により、65歳まで拠出が可能になりました（国民年金被保険者であることが条件）。60歳以降に受取を開始することも選択できます。\nまとめ・行動の呼びかけ iDeCoの証券会社選びは「手数料最安のネット証券」が基本です。SBI証券か楽天証券を選べば、手数料・商品ラインナップともに申し分ありません。特に年収400万円以上の会社員の方は、iDeCoの節税効果が非常に大きいため、今すぐ口座開設の手続きを始めることをおすすめします。\nSBI証券でiDeCo口座を今すぐ開設する 関連ツール・記事 iDeCoの節税効果を年収別にシミュレーションできます → iDeCoシミュレーター 配当投資に興味がある方は → 配当金シミュレーター 積立投資の複利効果を確認 → 複利計算シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター NISA iDeCo どっちを先に始めるべき？優先順位を徹底解説【2026年最新版】 iDeCo節税シミュレーション｜年収別に実際いくら得するか計算 確定拠出年金 企業型（DC）と個人型（iDeCo）の違いを徹底比較【2026年版】 老後2000万円問題を自分で検証｜退職金なしの会社員がとるべき行動 投資信託 おすすめ 初心者向け厳選ファンド完全比較【2026年最新版】 ※本記事は情報提供を目的としており、特定の金融商品の購入・売却を推奨するものではありません。投資判断はご自身の責任で行ってください。最新情報は各公式サイトでご確認ください。\n関連テンプレート 資産運用・家計管理をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す ","permalink":"https://productivity-works.com/ja/posts/ideco-osusume-shouken/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"idecoおすすめ証券会社ランキング2026年最新版手数料商品数を徹底比較\"\u003eiDeCoおすすめ証券会社ランキング【2026年最新版】手数料・商品数を徹底比較\u003c/h1\u003e\n\u003cp\u003e「iDeCoを始めたいけど、どの証券会社（金融機関）で口座を開けばいいかわからない」という方は多いでしょう。iDeCoは一度始めると移換（金融機関の変更）に手間がかかるため、最初の証券会社選びが非常に重要です。\u003c/p\u003e\n\u003cdiv style=\"max-width:620px;margin:1.8em auto;text-align:center;\"\u003e\n\u003csvg viewBox=\"0 0 620 270\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:100%;height:auto;\" aria-label=\"iDeCo主要証券会社比較\"\u003e\n  \u003cstyle\u003etext { font-family: 'Noto Sans JP', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', sans-serif; }\u003c/style\u003e\n  \u003crect width=\"620\" height=\"270\" rx=\"12\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"26\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"14\" font-weight=\"bold\"\u003eiDeCo おすすめ証券会社 比較チャート\u003c/text\u003e\n  \u003c!-- ヘッダー行 --\u003e\n  \u003crect x=\"10\" y=\"36\" width=\"130\" height=\"30\" rx=\"4\" fill=\"#1e293b\"/\u003e\n \u003ctext x=\"75\" y=\"55\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003e証券会社\u003c/text\u003e\n  \u003crect x=\"146\" y=\"36\" width=\"110\" height=\"30\" rx=\"4\" fill=\"#1e293b\"/\u003e\n \u003ctext x=\"201\" y=\"55\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003e月額手数料\u003c/text\u003e\n  \u003crect x=\"262\" y=\"36\" width=\"100\" height=\"30\" rx=\"4\" fill=\"#1e293b\"/\u003e\n \u003ctext x=\"312\" y=\"55\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003e商品数\u003c/text\u003e\n  \u003crect x=\"368\" y=\"36\" width=\"120\" height=\"30\" rx=\"4\" fill=\"#1e293b\"/\u003e\n \u003ctext x=\"428\" y=\"55\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003e最低信託報酬\u003c/text\u003e\n  \u003crect x=\"494\" y=\"36\" width=\"116\" height=\"30\" rx=\"4\" fill=\"#1e293b\"/\u003e\n \u003ctext x=\"552\" y=\"55\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003eおすすめ度\u003c/text\u003e\n  \u003c!-- SBI証券（1位） --\u003e\n  \u003crect x=\"10\" y=\"72\" width=\"130\" height=\"36\" rx=\"4\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"75\" y=\"88\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003eSBI証券\u003c/text\u003e\n \u003ctext x=\"75\" y=\"102\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003e🥇 1位\u003c/text\u003e\n  \u003crect x=\"146\" y=\"72\" width=\"110\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"201\" y=\"94\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"12\" font-weight=\"bold\"\u003e171円\u003c/text\u003e\n  \u003crect x=\"262\" y=\"72\" width=\"100\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"312\" y=\"94\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e約38本\u003c/text\u003e\n  \u003crect x=\"368\" y=\"72\" width=\"120\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"428\" y=\"94\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"12\" font-weight=\"bold\"\u003e0.05775%\u003c/text\u003e\n  \u003crect x=\"494\" y=\"72\" width=\"116\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"552\" y=\"94\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"13\"\u003e★★★★★\u003c/text\u003e\n  \u003c!-- 楽天証券（2位） --\u003e\n  \u003crect x=\"10\" y=\"114\" width=\"130\" height=\"36\" rx=\"4\" fill=\"#60a5fa\"/\u003e\n \u003ctext x=\"75\" y=\"130\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003e楽天証券\u003c/text\u003e\n \u003ctext x=\"75\" y=\"144\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003e🥈 2位\u003c/text\u003e\n  \u003crect x=\"146\" y=\"114\" width=\"110\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"201\" y=\"136\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"12\" font-weight=\"bold\"\u003e171円\u003c/text\u003e\n  \u003crect x=\"262\" y=\"114\" width=\"100\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"312\" y=\"136\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e約32本\u003c/text\u003e\n  \u003crect x=\"368\" y=\"114\" width=\"120\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"428\" y=\"136\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"12\" font-weight=\"bold\"\u003e0.0561%\u003c/text\u003e\n  \u003crect x=\"494\" y=\"114\" width=\"116\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"552\" y=\"136\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"13\"\u003e★★★★★\u003c/text\u003e\n  \u003c!-- マネックス（3位） --\u003e\n  \u003crect x=\"10\" y=\"156\" width=\"130\" height=\"36\" rx=\"4\" fill=\"#64748b\"/\u003e\n \u003ctext x=\"75\" y=\"172\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003eマネックス\u003c/text\u003e\n \u003ctext x=\"75\" y=\"186\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003e🥉 3位\u003c/text\u003e\n  \u003crect x=\"146\" y=\"156\" width=\"110\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"201\" y=\"178\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e171円\u003c/text\u003e\n  \u003crect x=\"262\" y=\"156\" width=\"100\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"312\" y=\"178\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e約26本\u003c/text\u003e\n  \u003crect x=\"368\" y=\"156\" width=\"120\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"428\" y=\"178\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e0.09889%\u003c/text\u003e\n  \u003crect x=\"494\" y=\"156\" width=\"116\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"552\" y=\"178\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"13\"\u003e★★★★☆\u003c/text\u003e\n  \u003c!-- 松井証券（4位） --\u003e\n  \u003crect x=\"10\" y=\"198\" width=\"130\" height=\"36\" rx=\"4\" fill=\"#cbd5e1\"/\u003e\n \u003ctext x=\"75\" y=\"214\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003e松井証券\u003c/text\u003e\n \u003ctext x=\"75\" y=\"228\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003e4位\u003c/text\u003e\n  \u003crect x=\"146\" y=\"198\" width=\"110\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"201\" y=\"220\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e171円\u003c/text\u003e\n  \u003crect x=\"262\" y=\"198\" width=\"100\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"312\" y=\"220\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"12\" font-weight=\"bold\"\u003e約40本\u003c/text\u003e\n  \u003crect x=\"368\" y=\"198\" width=\"120\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"428\" y=\"220\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e0.154%\u003c/text\u003e\n  \u003crect x=\"494\" y=\"198\" width=\"116\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"552\" y=\"220\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"13\"\u003e★★★★☆\u003c/text\u003e\n\u003cp\u003e\u003ctext x=\"310\" y=\"254\" text-anchor=\"middle\" fill=\"#cbd5e1\" font-size=\"10\"\u003e※手数料171円は国民年金基金連合会・事務委託先の手数料込みの最低額。2026年5月時点。\u003c/text\u003e\n\u003c/svg\u003e\u003c/p\u003e","title":"iDeCo おすすめ証券会社ランキング【2026年最新版】手数料・商品数を徹底比較"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「原価率が合わない」と感じたら、まず数字を可視化しよう 飲食店経営において、原価率の管理は利益を守るための最重要課題のひとつです。売上は上がっているのに利益が残らない——その原因の多くは、原価率の管理不足にあります。\n飲食店の適正な原価率は業態によって異なりますが、一般的には以下が目安とされています：\n業態 適正原価率の目安 ラーメン・麺類 25〜30% 居酒屋・バー 28〜35% カフェ・喫茶 30〜35% 高級レストラン 30〜40% ファストフード 30〜35% この目安を超えている場合、何かしらの問題が起きている可能性があります。Excelを使って原価を「見える化」することで、問題の所在を素早く特定できます。\nこの記事では、Excelで原価率を管理するための具体的な計算式と関数、メニュー別原価管理の方法、食材ロス率の把握まで、実践的な内容を解説します。\n飲食店経営の数字管理全般については、飲食店経営をExcelで効率化する完全ガイド2026 も参考にしてください。\n基本：原価率の計算式を理解する 原価率の基本公式 原価率（%）= 原価 ÷ 売上 × 100 Excelでの計算例：\nA列：メニュー名 B列：売価（税抜き） C列：原価（食材費合計） D列：原価率 D2セルの数式：\n=C2/B2*100 または、パーセント表示にセルを設定しているなら：\n=C2/B2 食材費の積み上げ計算 ひとつのメニューの原価は、使用する食材すべての費用の合計です。\n例えば「焼き鳥盛り合わせ（5本）」の原価計算：\n食材 使用量 単価（100gあたり） 費用 鶏もも肉 150g 200円 300円 鶏皮 80g 80円 64円 ねぎ 30g 50円 15円 タレ 20ml 120円/100ml 24円 串（5本） 5本 2円/本 10円 合計 413円 売価が1,200円（税抜き）の場合：\n原価率 = 413 ÷ 1,200 × 100 ≈ 34.4% メニュー別原価管理シートの作り方 基本構成 Excelで以下の列を持つシートを作成します：\nA列：メニューID B列：メニュー名 C列：カテゴリ（前菜/メイン/ドリンクなど） D列：売価（税抜き） E列：原価（食材費） F列：原価率（=E/D*100） G列：売上個数（月間） H列：月間売上（=D*G） I列：月間原価（=E*G） J列：月間利益（=H-I） K列：利益率（=J/H*100） 原価率に色付けする条件付き書式 原価率が高すぎるメニューを一目で発見するために、条件付き書式を設定します。\nF列（原価率）に以下の条件付き書式を適用：\nホーム → 条件付き書式 → 新しいルール 「数式を使用して書式設定するセルを決定」を選択 ルール1：原価率が40%超（要注意）\n=F2\u0026gt;40 背景色：赤（薄め）\nルール2：原価率が35〜40%（注意）\n=AND(F2\u0026gt;=35, F2\u0026lt;=40) 背景色：黄色\nルール3：原価率が35%未満（適正）\n=F2\u0026lt;35 背景色：緑（薄め）\n食材ロス率の管理 ロス率とは 購入した食材のうち、実際に料理に使えなかった（廃棄した）割合がロス率です。\nロス率（%）= 廃棄量 ÷ 仕入れ量 × 100 ロス率が高いと、見かけ上の原価率は低くても実質的なコストは上がります。\nロスを考慮した実質原価率の計算 実質原価率 = 原価 ÷ 売価 × (1 + ロス率/100) Excelの数式（L列に追加）：\n=E2/D2*(1+M2/100)*100 ※M列にロス率（%）を入力\n食材別ロス率管理シート A列：食材名 B列：月間仕入れ量（kg） C列：月間使用量（kg） D列：月間廃棄量（=B-C） E列：ロス率（=D/B*100） F列：廃棄金額（=D*単価） 廃棄金額の月次集計：\n=SUMIF(カテゴリ列, \u0026#34;野菜\u0026#34;, 廃棄金額列) 具体的なExcel関数：知っておくべき8つ 1. SUMIF：カテゴリ別に合計する =SUMIF(C:C, \u0026#34;前菜\u0026#34;, I:I) 「カテゴリ」列が「前菜」の行の月間原価を合計します。\n2. AVERAGEIF：カテゴリ別の平均原価率 =AVERAGEIF(C:C, \u0026#34;メイン\u0026#34;, F:F) メインメニューの平均原価率を計算します。\n3. COUNTIF：原価率がしきい値を超えるメニュー数 =COUNTIF(F:F, \u0026#34;\u0026gt;40\u0026#34;) 原価率が40%を超えるメニューの件数を数えます。\n4. MAX/MIN：最高・最低原価率のメニューを特定 =MAX(F2:F100) =MIN(F2:F100) そのメニュー名を表示するには：\n=INDEX(B2:B100, MATCH(MAX(F2:F100), F2:F100, 0)) 5. VLOOKUP：食材単価マスタから自動取得 食材マスタシートを別に作り、メニュー原価シートから自動参照します：\n=VLOOKUP(A2, 食材マスタ!A:C, 3, FALSE) 食材コードからg単価を自動取得します。\n6. IFERROR：エラーを非表示にする =IFERROR(C2/B2*100, 0) 売価がゼロの場合などのエラーを防ぎます。\n7. TEXT：原価率を「%表示」でセルに埋め込む =TEXT(F2/100,\u0026#34;0.0%\u0026#34;) 8. SPARKLINE的な代替：データバーで視覚化 条件付き書式の「データバー」を原価率列に適用すると、数値の大小が棒グラフのように視覚化されます。\n原価率管理の実践：月次レビューの進め方 月次確認チェックリスト 毎月末にやること：\n当月の食材仕入れ額を集計 カテゴリ別の売上と原価を集計 原価率が35%を超えたメニューをリストアップ ロス率が前月比で上がった食材を特定 廃棄金額の上位5品を確認 原価率悪化の原因分析フローチャート 原価率が目標を超えた場合、以下の順で原因を特定します：\n仕入れ価格の変動 → 食材単価マスタを更新して再計算 廃棄・ロスの増加 → ロス率シートで前月比較 ポーション（量）の過多 → レシピ通りの量で提供できているか確認 スタッフのミス → 仕込み量の記録と実績を照合 価格設定の問題 → 原価率の計算を再確認し、値上げ検討 原価率改善のための実践アクション アクション1：ABC分析で注力メニューを絞る 全メニューをABC分析して、改善の優先順位をつけます。\n// 売上構成比の計算 =H2/SUM($H$2:$H$100)*100 // 累積構成比（並べ替え後） =SUM($L$2:L2) // ABCランク（IF関数） =IF(M2\u0026lt;=70,\u0026#34;A\u0026#34;,IF(M2\u0026lt;=90,\u0026#34;B\u0026#34;,\u0026#34;C\u0026#34;)) Aランク（売上上位70%）のメニューの原価率を1〜2%改善するだけで、利益への影響が大きくなります。\nアクション2：食材仕入れカレンダーと連動する 季節によって食材の仕入れ値は大きく変動します。Excelの月ごとのシートで仕入れ価格の推移を記録し、価格が上がる時期に原価率が高くなるメニューを事前に把握しておきましょう。\nアクション3：売価変更シミュレーション 原価率を改善するために値上げを検討する場合、Excelでシミュレーションができます：\n// 目標原価率を達成するための最低売価 =C2/目標原価率セル // 現在の売価との差額 =シミュレーション売価-D2 ピボットテーブルで一気に集計する 大量のメニューデータがある場合、ピボットテーブルを使うと瞬時に集計できます。\n設定方法：\nデータ範囲を選択 挿入 → ピボットテーブル 行：カテゴリ 値：売上合計（H列）、原価合計（I列）、利益合計（J列） ピボットテーブルに「集計フィールドの追加」で、原価率を計算します：\n原価率 = 原価合計 / 売上合計 まとめ：数字が経営を変える 原価率をExcelで「見える化」することの価値は、問題の早期発見と意思決定の速度向上にあります。\n「なんとなく利益が少ない」という感覚的な経営から脱却し、数字に基づいた経営判断ができるようになれば、飲食店の収益は着実に改善していきます。\n今日からできる最初のステップ：\n主力メニュー10品の原価を計算する それぞれの原価率を出す 高いものから順に改善策を考える 原価管理の数字が整ってきたら、日々の仕入れや経費の記録も自動化しましょう。freee会計 は飲食店オーナーにも使いやすく、銀行口座やクレジットカードと連携して仕入れ費用を自動仕分け。確定申告書類もガイドに沿って作成できます。\n飲食店経営のExcel管理全般（資金繰り・シフト管理・売上分析など）については、飲食店経営をExcelで効率化する完全ガイド2026 で詳しく解説しています。\n関連ツール 長さ・重さ・温度を即座に変換 → 単位変換ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール 月収から理想の支出配分を計算 → 家計簿シミュレーター 副業の税金を計算 → 副業税金計算シミュレーター 関連記事 飲食店経営をExcelで効率化する完全ガイド2026 ExcelでよくつかうKEI数一覧：業務効率化の関数集 AI×Excel自動化：ChatGPTでマクロ・関数を使いこなす 共働きカップルのExcel家計簿テンプレート2026 freee会計で経費管理を自動化する方法 関連テンプレート 原価率管理をすぐに始めたい方は、すぐに使えるExcelテンプレートをご活用ください:\n飲食店経営Excel管理テンプレート集 — 原価率管理・売上分析・食材ロス管理・月次損益など、飲食店経営に必要なExcelシートを一括収録 ","permalink":"https://productivity-works.com/ja/posts/insyoku-excel-genkaritu-keisan-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"原価率が合わないと感じたらまず数字を可視化しよう\"\u003e「原価率が合わない」と感じたら、まず数字を可視化しよう\u003c/h2\u003e\n\u003cp\u003e飲食店経営において、原価率の管理は利益を守るための最重要課題のひとつです。売上は上がっているのに利益が残らない——その原因の多くは、原価率の管理不足にあります。\u003c/p\u003e\n\u003cp\u003e飲食店の適正な原価率は業態によって異なりますが、一般的には以下が目安とされています：\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e業態\u003c/th\u003e\n          \u003cth\u003e適正原価率の目安\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eラーメン・麺類\u003c/td\u003e\n          \u003ctd\u003e25〜30%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e居酒屋・バー\u003c/td\u003e\n          \u003ctd\u003e28〜35%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eカフェ・喫茶\u003c/td\u003e\n          \u003ctd\u003e30〜35%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e高級レストラン\u003c/td\u003e\n          \u003ctd\u003e30〜40%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eファストフード\u003c/td\u003e\n          \u003ctd\u003e30〜35%\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eこの目安を超えている場合、何かしらの問題が起きている可能性があります。Excelを使って原価を「見える化」することで、問題の所在を素早く特定できます。\u003c/p\u003e\n\u003cp\u003eこの記事では、Excelで原価率を管理するための\u003cstrong\u003e具体的な計算式と関数\u003c/strong\u003e、\u003cstrong\u003eメニュー別原価管理の方法\u003c/strong\u003e、\u003cstrong\u003e食材ロス率の把握\u003c/strong\u003eまで、実践的な内容を解説します。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e飲食店経営の数字管理全般については、\u003ca href=\"https://productivity-works.com/ja/posts/insyoku-keiei-excel-kanri-2026/\"\u003e飲食店経営をExcelで効率化する完全ガイド2026\u003c/a\u003e\nも参考にしてください。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"基本原価率の計算式を理解する\"\u003e基本：原価率の計算式を理解する\u003c/h2\u003e\n\u003ch3 id=\"原価率の基本公式\"\u003e原価率の基本公式\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e原価率（%）= 原価 ÷ 売上 × 100\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eExcelでの計算例：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eA列：メニュー名\u003c/li\u003e\n\u003cli\u003eB列：売価（税抜き）\u003c/li\u003e\n\u003cli\u003eC列：原価（食材費合計）\u003c/li\u003e\n\u003cli\u003eD列：原価率\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eD2セルの数式：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=C2/B2*100\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eまたは、パーセント表示にセルを設定しているなら：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=C2/B2\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"食材費の積み上げ計算\"\u003e食材費の積み上げ計算\u003c/h3\u003e\n\u003cp\u003eひとつのメニューの原価は、使用する食材すべての費用の合計です。\u003c/p\u003e\n\u003cp\u003e例えば「焼き鳥盛り合わせ（5本）」の原価計算：\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e食材\u003c/th\u003e\n          \u003cth\u003e使用量\u003c/th\u003e\n          \u003cth\u003e単価（100gあたり）\u003c/th\u003e\n          \u003cth\u003e費用\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e鶏もも肉\u003c/td\u003e\n          \u003ctd\u003e150g\u003c/td\u003e\n          \u003ctd\u003e200円\u003c/td\u003e\n          \u003ctd\u003e300円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e鶏皮\u003c/td\u003e\n          \u003ctd\u003e80g\u003c/td\u003e\n          \u003ctd\u003e80円\u003c/td\u003e\n          \u003ctd\u003e64円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eねぎ\u003c/td\u003e\n          \u003ctd\u003e30g\u003c/td\u003e\n          \u003ctd\u003e50円\u003c/td\u003e\n          \u003ctd\u003e15円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eタレ\u003c/td\u003e\n          \u003ctd\u003e20ml\u003c/td\u003e\n          \u003ctd\u003e120円/100ml\u003c/td\u003e\n          \u003ctd\u003e24円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e串（5本）\u003c/td\u003e\n          \u003ctd\u003e5本\u003c/td\u003e\n          \u003ctd\u003e2円/本\u003c/td\u003e\n          \u003ctd\u003e10円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e合計\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e413円\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e売価が1,200円（税抜き）の場合：\u003c/p\u003e","title":"飲食店の原価率計算をExcelで簡単管理する方法2026"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「どんぶり勘定」から卒業する——Excelで飲食店経営を数値で管理する 飲食店経営で最も多い失敗パターンは「感覚経営」です。\n売上は上がっているのに手元にお金が残らない 原価率が高いのはわかっているが、どのメニューが問題か把握できていない シフト管理が手書きで、変更のたびに連絡が大変 食材の発注量が毎回「なんとなく」で、廃棄が多い これらは全て「数値管理の仕組み」を作ることで解決できます。高価な専用POSレジシステムを入れなくても、Excelを正しく使えば月10万円以上の無駄を見つけ出すことができます。\n本記事では、小規模飲食店（〜10席程度）のオーナーが今すぐ使えるExcel管理テンプレートの設計方法を、数式付きで完全解説します。\nなぜExcelか？ 専用システムより優先される理由 飲食店向けの管理ツールは多数ありますが、小規模店舗でExcelが優れている理由があります。\nコストゼロ — Microsoft 365があれば追加費用なし。Google スプレッドシートなら完全無料 自由にカスタマイズ — 自分の店の業態に合わせて自由に設計できる 学習コストが低い — スタッフも慣れ親しんでいる データの一元管理 — 売上・原価・シフトを1ファイルで管理できる テンプレート1：日次売上管理シート シート構成 日次売上管理シートは「入力エリア」と「集計エリア」を明確に分けることがポイントです。\n基本構成（列）：\nA列 B列 C列 D列 E列 F列 G列 日付 曜日 客数 客単価 売上合計 目標売上 達成率 主要数式 曜日の自動表示（B列）：\n=TEXT(A2,\u0026#34;aaa\u0026#34;) A列に日付を入力するだけで、「月」「火」「水」…と自動表示されます。\n売上合計の計算（E列）：\n=C2*D2 客数×客単価で売上を自動計算。手計算の転記ミスがなくなります。\n達成率（G列）：\n=IF(F2=0,\u0026#34;\u0026#34;,E2/F2) 目標売上が入力されている場合のみ達成率を表示。ゼロ除算エラーを防ぎます。\n条件付き書式：達成率が80%未満の場合にセルを赤くする\nG列を選択 → 条件付き書式 → 新しいルール 「数式を使用」→ =G2\u0026lt;0.8 → 塗りつぶし：赤 月次集計セクション シートの下部に月次集計エリアを設けます。\n月間売上合計：\n=SUMIF(A:A,\u0026#34;\u0026gt;=\u0026#34;\u0026amp;DATE(2026,5,1),E:E)-SUMIF(A:A,\u0026#34;\u0026gt;=\u0026#34;\u0026amp;DATE(2026,6,1),E:E) 曜日別平均売上（AVERAGEIF使用）：\n=AVERAGEIF(B:B,\u0026#34;月\u0026#34;,E:E) 「月曜の平均売上」「土曜の平均売上」を比較することで、曜日別の強弱が見えてきます。\n週次推移グラフの作成：\nA列〜E列を選択 挿入 → 折れ線グラフ → 「マーカー付き折れ線」 週ごとの売上トレンドが一目瞭然になります テンプレート2：原価率管理シート（メニュー別） 原価率は飲食店経営の生命線です。**飲食店の適正原価率は30〜35%**とされています。これを超えているメニューは改善か廃盤が必要です。\n原価率計算シートの設計 列構成：\nA列 B列 C列 D列 E列 F列 G列 メニュー名 販売価格(税抜) 原材料費合計 原価率 目標原価率 差異 判定 主要数式 原価率の計算（D列）：\n=C2/B2 表示形式を「パーセンテージ」に設定すると自動で%表示になります。\n目標との差異（F列）：\n=D2-E2 プラスなら原価率が目標を上回っている（問題あり）、マイナスなら良好。\n判定の自動表示（G列）：\n=IF(D2\u0026lt;=0.3,\u0026#34;優良\u0026#34;,IF(D2\u0026lt;=0.35,\u0026#34;適正\u0026#34;,IF(D2\u0026lt;=0.4,\u0026#34;要注意\u0026#34;,\u0026#34;改善必須\u0026#34;))) 条件付き書式でD列（原価率）を色分け：\n30%以下：青（優良） 30〜35%：緑（適正） 35〜40%：黄（要注意） 40%超：赤（改善必須） 食材単価管理（原価計算の基礎） 各メニューの原材料費を正確に計算するために、「食材単価テーブル」を別シートに作成します。\n食材単価テーブルの構成：\n食材名 | 購入単位 | 購入金額 | 単位あたり金額 | 使用単位 豚バラ肉 | 1kg | 1,200円 | 1.2円/g | g 卵 | 10個 | 200円 | 20円/個 | 個 だし醤油 | 1L | 500円 | 0.5円/ml | ml メニュー別原価計算（VLOOKUP使用）：\n=VLOOKUP(A2,食材テーブル!A:D,4,FALSE)*B2 A2に食材名、B2に使用量を入力すれば、食材テーブルから単価を自動参照して原価を計算します。\nテンプレート3：シフト管理シート シフト表の基本設計 シート構成（1ヶ月分）：\n縦軸：スタッフ名（行） 横軸：日付・曜日（列）\nスタッフ名 | 1（月） | 2（火） | 3（水） | ... | 合計時間 | 合計人件費 Aさん | 9-17 | 休 | 9-17 | ... | 160h | 160,000円 Bさん | 休 | 17-22 | 17-22 | ... | 80h | 64,000円 勤務時間の自動計算 シフト入力を「開始時刻」「終了時刻」の2列に分けると計算が楽になります。\n例：C列に開始時刻（9:00）、D列に終了時刻（17:00）を入力\n実働時間（休憩1時間差し引き）：\n=IF(AND(C2\u0026lt;\u0026gt;\u0026#34;\u0026#34;,D2\u0026lt;\u0026gt;\u0026#34;\u0026#34;), (D2-C2)*24-1, 0) 時刻の差を時間単位に変換（×24）し、休憩1時間を差し引きます。\n月間合計時間（スタッフ別）：\n=SUMIF(スタッフ列, \u0026#34;Aさん\u0026#34;, 実働時間列) 月間人件費（スタッフ別）：\n=合計時間 * 時給 時給をスタッフマスターテーブルに持っておき、VLOOKUPで参照します。\n人件費率の自動計算 =SUM(全スタッフの月間人件費) / 月間売上合計 **飲食店の適正人件費率は25〜35%**とされています。これを毎月確認することで「人を増やすべきか、シフトを削るべきか」の判断ができます。\nシフト表の自動入力補助（ドロップダウン） シフトの種類（「9-17」「12-21」「17-22」「休」など）をドロップダウンリストで選べるようにすると入力ミスが減ります。\n設定方法：\nシフトパターン一覧を別シートに作成 シフト入力セルを選択 → データ → データの入力規則 「リスト」を選択 → 元の値に別シートの範囲を指定 テンプレート4：食材発注管理シート 食材の廃棄ロスは飲食店経営の大きな課題です。Excelで発注管理を体系化することで廃棄率を下げられます。\n発注管理シートの設計 列構成：\nA列 B列 C列 D列 E列 F列 G列 食材名 在庫数（現在） 適正在庫数 不足数 発注単位 発注数量 発注金額 主要数式 不足数の計算（D列）：\n=MAX(0, C2-B2) 適正在庫を下回っている場合のみ不足数を表示。MAX(0,…)でマイナスになるのを防ぎます。\n発注数量（発注単位を考慮）（F列）：\n=CEILING(D2, E2) 不足数を発注単位で切り上げます。例えば不足が7本で発注単位が5本の場合、10本を発注するよう自動計算。\n発注金額（G列）：\n=F2 * VLOOKUP(A2, 食材単価テーブル!A:B, 2, FALSE) 発注が必要な食材のみを抽出（フィルター機能）： D列（不足数）が1以上のものだけ表示するフィルターを設定。発注リストとして印刷・メールで活用できます。\n週次消費量トラッキングで発注精度を上げる 週次消費量テーブル：\n食材名 | W1消費量 | W2消費量 | W3消費量 | W4消費量 | 月平均 | 週次平均 豚バラ | 2.5kg | 3.0kg | 2.8kg | 3.2kg | 11.5kg | 2.875kg 週次平均消費量：\n=AVERAGE(B2:E2) 来週の発注量（安全在庫1.2倍）：\n=F2 * 1.2 テンプレート5：月次経営ダッシュボード 上記4つのシートを連携させた「経営ダッシュボード」を作成します。このシートを見るだけで店の健全性が一目でわかります。\nダッシュボードに表示する主要KPI =====月次経営ダッシュボード 2026年5月===== 【売上】 今月売上合計: =日次売上シート!月計セル 先月比: =今月/先月-1 月間目標達成率: =今月/目標 【原価管理】 今月の食材原価合計: =原価シート!集計セル 今月の原価率: =食材原価/売上 【人件費】 今月の人件費合計: =シフトシート!合計セル 今月の人件費率: =人件費/売上 【利益】 粗利: =売上-(食材原価+人件費) 粗利率: =粗利/売上 スパークラインで推移を可視化 Excelの「スパークライン」機能を使うと、セル内に小さなグラフを表示できます。\n推移を見たいセルの隣のセルを選択 挿入 → スパークライン → 折れ線 データ範囲に過去12ヶ月のデータを指定 Excel管理を続けるための3つの習慣 習慣1：毎日閉店後5分で日次データを入力 売上データは当日中に入力することが鉄則です。翌日以降になると記憶が曖昧になり、レジのレシートを探す手間も増えます。\n習慣2：週に一度、原価率と在庫をチェック 月末にまとめてやろうとすると必ず破綻します。週次で15分のチェックタイムを設けることで、問題を早期発見できます。\n習慣3：月初めに先月の数字を振り返る 毎月第1営業日に前月のダッシュボードを確認し、「何が良くて何が悪かったか」を10分で振り返ります。この振り返りがあってこそ、数値管理が経営改善に繋がります。\nGoogle スプレッドシートを使う場合の追加メリット ExcelではなくGoogle スプレッドシートを使う場合、以下の追加機能が活用できます。\nスマートフォンからリアルタイム入力 — ホールスタッフがタブレットから売上データを入力 複数人同時編集 — 複数店舗の場合も同一シートをリアルタイム共有 Google フォーム連携 — スタッフがシフト希望をフォームで送信、自動でシートに反映 Google Apps Script — 定型のレポートを自動生成してオーナーにメール送信 まとめ：Excelは「経営の羅針盤」になる 本記事で紹介した4つのテンプレートをExcelで構築することで：\n日次売上管理 → 売上の波が見えて、戦略的な販促ができる 原価率管理 → 利益を削っているメニューが特定できる シフト管理 → 人件費率の適正化で毎月数万円の改善ができる 食材発注管理 → 廃棄ロスが減り、原価率が下がる これら全てをExcelで管理することは、3日もあれば構築できます。コストはゼロ。必要なのは「始める決断」だけです。\n今月から数値管理を始めれば、来月には自分の店の「問題の本質」が見えてきます。それがExcel経営管理の最大の価値です。\n飲食店の売上・原価・人件費をまとめて管理できるようになったら、次は帳簿や確定申告もデジタル化しましょう。freee会計 なら銀行口座・クレジットカードと連携して日々の取引を自動記録。飲食店オーナーの確定申告・青色申告の作業時間を大幅に短縮できます。\n本記事で紹介した数式はMicrosoft Excel 2019以降およびGoogle スプレッドシートで動作確認しています。バージョンにより一部の数式の動作が異なる場合があります。\n関連ツール 長さ・重さ・温度を即座に変換 → 単位変換ツール 月収から理想の支出配分を計算 → 家計簿シミュレーター 副業の税金を計算 → 副業税金計算シミュレーター 借金の返済計画を立てる → 借金返済シミュレーター 関連テンプレート 飲食店経営に役立つテンプレートはこちら：\n飲食店経営Excel管理テンプレート集 — 売上・原価率・シフト・発注を一括管理 Excel請求書テンプレート — インボイス制度対応 あわせて読みたい 飲食店の原価率計算をExcelで簡単管理する方法2026 AIでExcel作業を自動化する方法【マクロ不要で誰でもできる】 共働き夫婦のExcel家計簿のつけ方【無料テンプレート付き・2026年版】 ","permalink":"https://productivity-works.com/ja/posts/insyoku-keiei-excel-kanri-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"どんぶり勘定から卒業するexcelで飲食店経営を数値で管理する\"\u003e「どんぶり勘定」から卒業する——Excelで飲食店経営を数値で管理する\u003c/h2\u003e\n\u003cp\u003e飲食店経営で最も多い失敗パターンは「感覚経営」です。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e売上は上がっているのに手元にお金が残らない\u003c/li\u003e\n\u003cli\u003e原価率が高いのはわかっているが、どのメニューが問題か把握できていない\u003c/li\u003e\n\u003cli\u003eシフト管理が手書きで、変更のたびに連絡が大変\u003c/li\u003e\n\u003cli\u003e食材の発注量が毎回「なんとなく」で、廃棄が多い\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eこれらは全て「数値管理の仕組み」を作ることで解決できます。高価な専用POSレジシステムを入れなくても、\u003cstrong\u003eExcelを正しく使えば月10万円以上の無駄を見つけ出すことができます。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e本記事では、小規模飲食店（〜10席程度）のオーナーが今すぐ使えるExcel管理テンプレートの設計方法を、数式付きで完全解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"なぜexcelか-専用システムより優先される理由\"\u003eなぜExcelか？ 専用システムより優先される理由\u003c/h2\u003e\n\u003cp\u003e飲食店向けの管理ツールは多数ありますが、小規模店舗でExcelが優れている理由があります。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eコストゼロ\u003c/strong\u003e — Microsoft 365があれば追加費用なし。Google スプレッドシートなら完全無料\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e自由にカスタマイズ\u003c/strong\u003e — 自分の店の業態に合わせて自由に設計できる\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e学習コストが低い\u003c/strong\u003e — スタッフも慣れ親しんでいる\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eデータの一元管理\u003c/strong\u003e — 売上・原価・シフトを1ファイルで管理できる\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"テンプレート1日次売上管理シート\"\u003eテンプレート1：日次売上管理シート\u003c/h2\u003e\n\u003ch3 id=\"シート構成\"\u003eシート構成\u003c/h3\u003e\n\u003cp\u003e日次売上管理シートは「入力エリア」と「集計エリア」を明確に分けることがポイントです。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e基本構成（列）：\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eA列\u003c/th\u003e\n          \u003cth\u003eB列\u003c/th\u003e\n          \u003cth\u003eC列\u003c/th\u003e\n          \u003cth\u003eD列\u003c/th\u003e\n          \u003cth\u003eE列\u003c/th\u003e\n          \u003cth\u003eF列\u003c/th\u003e\n          \u003cth\u003eG列\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e日付\u003c/td\u003e\n          \u003ctd\u003e曜日\u003c/td\u003e\n          \u003ctd\u003e客数\u003c/td\u003e\n          \u003ctd\u003e客単価\u003c/td\u003e\n          \u003ctd\u003e売上合計\u003c/td\u003e\n          \u003ctd\u003e目標売上\u003c/td\u003e\n          \u003ctd\u003e達成率\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"主要数式\"\u003e主要数式\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e曜日の自動表示（B列）：\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=TEXT(A2,\u0026#34;aaa\u0026#34;)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eA列に日付を入力するだけで、「月」「火」「水」…と自動表示されます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e売上合計の計算（E列）：\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=C2*D2\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e客数×客単価で売上を自動計算。手計算の転記ミスがなくなります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e達成率（G列）：\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=IF(F2=0,\u0026#34;\u0026#34;,E2/F2)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e目標売上が入力されている場合のみ達成率を表示。ゼロ除算エラーを防ぎます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e条件付き書式：達成率が80%未満の場合にセルを赤くする\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eG列を選択 → 条件付き書式 → 新しいルール\u003c/li\u003e\n\u003cli\u003e「数式を使用」→ \u003ccode\u003e=G2\u0026lt;0.8\u003c/code\u003e → 塗りつぶし：赤\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"月次集計セクション\"\u003e月次集計セクション\u003c/h3\u003e\n\u003cp\u003eシートの下部に月次集計エリアを設けます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e月間売上合計：\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=SUMIF(A:A,\u0026#34;\u0026gt;=\u0026#34;\u0026amp;DATE(2026,5,1),E:E)-SUMIF(A:A,\u0026#34;\u0026gt;=\u0026#34;\u0026amp;DATE(2026,6,1),E:E)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e曜日別平均売上（AVERAGEIF使用）：\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-excel\" data-lang=\"excel\"\u003e=AVERAGEIF(B:B,\u0026#34;月\u0026#34;,E:E)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e「月曜の平均売上」「土曜の平均売上」を比較することで、曜日別の強弱が見えてきます。\u003c/p\u003e","title":"飲食店経営Excel管理テンプレート活用ガイド2026"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n医療事務×ChatGPTで、患者さんとの時間を増やす 医療事務の仕事は「縁の下の力持ち」です。受付・会計・レセプト点検・電話対応・書類作成——これだけの業務を少人数でこなしながら、患者さんへの丁寧な対応も求められます。\n「もっと患者さんと丁寧に接したいのに、書類作業に追われてしまう」という声は、医療事務スタッフから常に聞こえてきます。\nChatGPTを適切に活用することで、繰り返し発生する文書作成・確認作業の時間を大幅に短縮し、本来大切にすべき患者対応の質を高めることができます。\n本記事では、医療機関での実務を想定したChatGPT活用術10選を、具体的なプロンプトとともにご紹介します。\n医療事務でChatGPTを使う際の大前提：守るべきルール 活用方法を説明する前に、必ず守るべき原則を確認してください。\n絶対に守ること：\n患者個人情報（氏名・生年月日・病名・住所・保険証番号）はChatGPTに入力しない 「〇〇さんの病名」「〇〇病院の実際のレセプトデータ」など、特定の医療機関・患者を特定できる情報は入力しない ChatGPTが出力した医学的・法的内容は、必ず医師・事務長等の専門家が確認する 病院・クリニックのセキュリティポリシーに従い、AIツールの使用許可を事前に確認する これらを守った上で、「汎用的な文書作成」「知識の確認」「文章のたたき台作成」にChatGPTを活用します。\n活用術1：レセプト点検の「確認観点」をAIに教わる 使用場面： 月次レセプト点検の勉強・確認項目の洗い出し\nレセプトの点検は経験とスキルが必要な作業ですが、「確認すべき観点のリスト」はChatGPTに整理させることができます。\nプロンプト例：\n医療事務のレセプト点検で確認すべき項目を、以下のカテゴリ別に整理してください。 実際のレセプトデータは含めず、一般的な確認観点のチェックリストとして作成してください。 【カテゴリ】 1. 基本情報の確認（保険種別、有効期限など） 2. 診療内容との整合性確認 3. 算定要件・回数制限のチェック 4. 病名との整合性 5. 加算の算定漏れ確認 それぞれ3〜5項目のチェックポイントを箇条書きでまとめてください。 新人の医療事務スタッフが使えるチェックリスト形式で。 活用方法： 生成されたチェックリストを事務長・経験者に確認してもらい、自院に合わせてカスタマイズします。新人スタッフの教育資料としても使えます。\n活用術2：患者向け案内文書のたたき台作成 使用場面： 初診患者への説明文、待合室の案内、検査前の注意事項文書作成\n患者向けの案内文書は「わかりやすさ」と「正確さ」の両立が難しいですが、ChatGPTがたたき台を作ることで作成時間を大幅に短縮できます。\nプロンプト1：初診患者向け案内文書\n内科クリニックの初診患者向けの来院案内文書を作成してください。 【含める内容】 1. 受付時に必要なもの（保険証・診察券・お薬手帳） 2. 問診票の記入案内 3. 待ち時間についての案内 4. 診察の流れ（受付→問診票→診察→会計） 5. 支払い方法（現金・各種クレジットカード・PayPay） 6. お問い合わせ先（「当院代表番号」と記載） 【条件】 - 高齢者にも読みやすい、やさしい言葉で - 箇条書きと見出しを使った見やすい構成 - A4一枚に収まる分量 - 医療機関名は「〇〇クリニック」とする プロンプト2：胃カメラ検査前の注意事項文書\n胃内視鏡検査（胃カメラ）を受ける患者さんへの事前説明文書を作成してください。 実際の医療指示は含まず、一般的な注意事項のたたき台として作成してください。 【含める内容】 1. 検査前日の食事・飲み物について 2. 検査当日の来院時間・持ち物 3. 検査中の流れ（おおよその所要時間） 4. 検査後の注意事項（車の運転など） 5. 不明点がある場合の連絡先案内 【条件】 - 患者さんが不安にならない、安心感のあるトーンで - 専門用語を使う場合は括弧内にわかりやすい説明を添える - 「検査前日の21時以降は絶食」などの具体的な数値は【要確認】と記載し、医師が確認・修正できるようにする 活用術3：電話対応マニュアルの作成 使用場面： 新人スタッフ向け電話対応マニュアルの整備\n電話対応は新人スタッフが最も苦手とする業務の一つです。想定問答集を作ることで対応品質が均一化されます。\nプロンプト：\n内科クリニックの医療事務スタッフ向け電話対応マニュアルを作成してください。 以下のシナリオ別に、模範的な応答文を作成してください。 【シナリオ1】初診予約の電話 【シナリオ2】診療時間・休診日の問い合わせ 【シナリオ3】処方薬についての問い合わせ（「〇〇の薬について教えてほしい」） 【シナリオ4】検査結果を電話で聞こうとするケース 【シナリオ5】急患・緊急性が高そうな問い合わせ 各シナリオについて： - 冒頭の挨拶文 - 情報を確認する際の聞き方 - 判断に迷う場合の「保留→確認」の文言 - 締めの言葉 を含めてください。 ※シナリオ3と4については、「医師の判断が必要な事項はお答えできません」という内容を含めてください。 活用術4：院内掲示物・ポスターの原稿作成 使用場面： 待合室の掲示物、感染症予防のお願い、各種お知らせの作成\nプロンプト1：感染症予防の院内掲示\n医療機関の待合室に掲示する感染予防のお願いポスターの原稿を作成してください。 【含める内容】 - 手洗い・手指消毒のお願い - マスク着用のお願い（任意の場合の表現も） - 発熱・咳症状のある方への別対応案内 - 受付時の問診票記入のお願い 【条件】 - 高齢者・子供を含む全ての患者さんが読める平易な言葉で - 命令形ではなく「お願い」の丁寧な表現で - 見出しを大きく、本文を短く（掲示物として実用的な構成） - クリニック名は「〇〇クリニック 院長」として締める プロンプト2：年末年始・お盆の休診案内\nクリニックの年末年始休診案内の文書を作成してください。 【情報】 - 休診期間：2026年12月29日（火）〜2027年1月3日（日） - 年内最終診察日：2026年12月28日（月） - 年始初診察日：2027年1月4日（月） - 緊急時の案内：夜間・休日は「〇〇市休日急患センター（電話：XX-XXXX-XXXX）」へ 【条件】 - 受付窓口掲示用（A4サイズ）と院内放送用（読み上げ文）の2バージョン - 「ご不便をおかけします」の一言を必ず含める - 文字数：掲示用200字以内、院内放送用150字以内 活用術5：診療明細・医療費のよくある質問（FAQ）作成 使用場面： 患者からよくある質問に対する回答マニュアルの整備\nプロンプト：\n医療事務の窓口でよく聞かれる質問と、それに対する丁寧な回答例を作成してください。 患者説明の際の参考マニュアルとして使います。 【よくある質問】 1. 「なぜ今日の医療費がこんなに高いのですか？」 2. 「領収書を再発行してもらえますか？」 3. 「高額療養費制度を使いたいのですが」 4. 「医療費控除に使う書類はどれですか？」 5. 「限度額適用認定証の申請方法を教えてください」 各質問に対して： - 窓口での口頭説明の文例 - 「詳しくは〇〇にご確認ください」の参照先案内 を含めてください。 ※制度の詳細は「担当者が確認・修正する前提のたたき台」として作成してください。 活用術6：研修・勉強会の資料作成補助 使用場面： 新人研修資料、スタッフ勉強会の資料作成\nプロンプト：\n医療事務の新人スタッフ向けの「医療保険制度の基礎」研修資料のアウトラインを作成してください。 【対象】医療事務経験ゼロの新入スタッフ 【時間】30分の勉強会 【含めるべき内容】 - 日本の医療保険制度の概要（社保・国保の違い） - 診察券・保険証の確認ポイント - 一部負担金の計算方法（1割・2割・3割） - よくある保険証に関するトラブルと対処法 各セクションの「話すべきポイント3つ」と「新人が混乱しやすいポイント」も含めてください。 研修担当者がそのまま使えるトーク原稿の形式で。 活用術7：月次業務報告書の作成 使用場面： 院長・事務長への月次報告書\nプロンプト：\n内科クリニックの医療事務スタッフが院長に提出する月次業務報告書のテンプレートを作成してください。 【含める項目】 - 今月の外来患者数（新患・再来患者） - 診療科別患者数 - 月次レセプト件数・返戻・査定の状況 - 主な対応事案・改善事項 - 来月の課題・申し送り事項 【条件】 - A4一枚に収まる簡潔な形式 - 数値を入力できる表形式を含む - 事務長が毎月同じフォーマットで記録・比較できるように設計 活用術8：患者クレーム対応マニュアルの整備 使用場面： 窓口でのクレーム・クレーム電話への対応準備\nプロンプト：\n医療機関の窓口スタッフ向けの患者クレーム対応マニュアルを作成してください。 【想定するクレームの種類】 1. 待ち時間が長い（「1時間以上待っている」） 2. 会計金額が思ったより高い 3. 前回と診察の先生が違う（担当医変更への不満） 4. 電話がなかなかつながらない 5. 説明が不足していた・聞いていない 各クレームへの対応で： - 初期対応の言葉（まず謝罪・共感を示す） - 状況を確認するための質問 - 解決策の提示または上位者への引き継ぎの判断基準 - 対応後の記録方法 を含めてください。 「患者さんの気持ちに寄り添いながら、医療機関としての説明責任も果たす」バランスを大切に。 活用術9：業務引き継ぎ書・申し送りの効率化 使用場面： 日々の業務引き継ぎ、長期休暇前の申し送り作成\nプロンプト：\n医療事務担当者が産休・育休取得時に後任スタッフに渡す業務引き継ぎ書の テンプレートを作成してください。 【含める項目】 1. 担当業務一覧と作業頻度（日次・週次・月次） 2. 各業務の手順書（箇条書き） 3. 関係する業者・担当者の連絡先管理（「〇〇さん（担当：レセコン保守）」形式） 4. 注意が必要なケース・例外対応 5. 困ったときの相談先 【条件】 - 後任担当者が業務を見て自立できるレベルの詳細度 - 電子ファイルとして管理しやすい構成 - 医療機関名や個人情報は【要記入】としてプレースホルダー表示 活用術10：患者アンケートの集計・分析補助 使用場面： 年1〜2回の患者満足度調査の分析\nプロンプト：\n患者満足度アンケートの集計結果を分析するための観点を整理してください。 実際の患者データは含めず、分析フレームワークの作成をお願いします。 【アンケート項目（例）】 - 待ち時間への満足度（5段階） - 受付スタッフの対応（5段階） - 診察時の説明のわかりやすさ（5段階） - 院内の清潔さ（5段階） - 総合満足度（5段階） - 自由記述：良かった点・改善してほしい点 分析の観点として： 1. 各項目のスコアをどう読むべきか 2. 特に注目すべき項目の優先順位 3. 自由記述のコメントを分類する観点 4. 院長への報告書にまとめる際の構成 を教えてください。 ChatGPTを医療事務で使う際の実践的なコツ コツ1：「たたき台」として使い、必ず医師・上司が確認する 医療に関わる文書は、法的責任・患者安全の観点から、ChatGPTの出力をそのまま使うことは避けてください。「作成の時間を短縮するためのたたき台」として活用し、最終確認は必ず専門家が行います。\nコツ2：院内での使用ルールを事前に確認する ChatGPTなどのAIツールを業務で使うことに対して、医療機関によってはポリシーがある場合があります。使い始める前に事務長・院長に確認し、使用が許可された範囲内で活用してください。\nコツ3：個人情報の入力は絶対にしない 繰り返しになりますが、これが最重要です。患者の氏名・病名・保険証番号などは入力禁止。「Aさん」「患者様」という仮称で代替してください。\nコツ4：よく使うプロンプトを「プロンプトノート」に保存する 一度良い文書が生成されたプロンプトは、メモ帳やNotionに保存しておきましょう。次回同じ文書が必要になった時に、すぐ再利用できます。\nまとめ：ChatGPTは医療事務を「より人間らしい仕事」にする 本記事で紹介した10の活用術は、全て「繰り返し発生する文書作業の効率化」に特化しています。\nChatGPTが文書のたたき台を作る時間（15〜30分 → 5分）が短縮されることで、空いた時間を患者さんへの丁寧な対応に使えるようになります。\n医療事務の本質的な価値は「文書を早く作ること」ではなく、**「患者さんが安心して医療を受けられる環境を作ること」**です。AIはその本質的な仕事に集中するための道具として、賢く活用してください。\n医療事務としてスキルアップしたい方、より良い職場環境を探している方には、doda の転職エージェントサービスがおすすめです。医療・介護分野に精通したキャリアアドバイザーが、あなたの経験とスキルに合った求人を紹介してくれます。\n本記事の内容は2026年5月時点の情報です。医療制度・診療報酬は定期的に改定されます。実際の業務への適用は必ず最新情報を確認の上、医師・事務長の承認を得て行ってください。\n関連ツール 医療事務の手取り額を確認する → 手取り計算シミュレーター スキルアップ後の転職で年収がどう変わるか試算 → 転職年収シミュレーター 関連テンプレート 医療事務の業務効率化テンプレートはこちら：\n医療事務向けChatGPT活用術10選 — レセプト・患者案内・院内掲示物まで ChatGPTプロンプト集100選 — 業務全般で使えるプロンプト集 あわせて読みたい 医療事務 ChatGPTで患者案内文書を5分で作成する方法 ChatGPTを仕事で使う具体的な活用法10選【2026年最新版】 ChatGPTプロンプトの書き方コツ【2026年版】すぐ使える例文テンプレート付き ","permalink":"https://productivity-works.com/ja/posts/iryo-jimu-chatgpt-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"医療事務chatgptで患者さんとの時間を増やす\"\u003e医療事務×ChatGPTで、患者さんとの時間を増やす\u003c/h2\u003e\n\u003cp\u003e医療事務の仕事は「縁の下の力持ち」です。受付・会計・レセプト点検・電話対応・書類作成——これだけの業務を少人数でこなしながら、患者さんへの丁寧な対応も求められます。\u003c/p\u003e\n\u003cp\u003e「もっと患者さんと丁寧に接したいのに、書類作業に追われてしまう」という声は、医療事務スタッフから常に聞こえてきます。\u003c/p\u003e\n\u003cp\u003eChatGPTを適切に活用することで、\u003cstrong\u003e繰り返し発生する文書作成・確認作業の時間を大幅に短縮\u003c/strong\u003eし、本来大切にすべき患者対応の質を高めることができます。\u003c/p\u003e\n\u003cp\u003e本記事では、医療機関での実務を想定した\u003cstrong\u003eChatGPT活用術10選\u003c/strong\u003eを、具体的なプロンプトとともにご紹介します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"医療事務でchatgptを使う際の大前提守るべきルール\"\u003e医療事務でChatGPTを使う際の大前提：守るべきルール\u003c/h2\u003e\n\u003cp\u003e活用方法を説明する前に、必ず守るべき原則を確認してください。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e絶対に守ること：\u003c/strong\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e患者個人情報（氏名・生年月日・病名・住所・保険証番号）はChatGPTに入力しない\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e「〇〇さんの病名」「〇〇病院の実際のレセプトデータ」など、特定の医療機関・患者を特定できる情報は入力しない\u003c/li\u003e\n\u003cli\u003eChatGPTが出力した医学的・法的内容は、必ず医師・事務長等の専門家が確認する\u003c/li\u003e\n\u003cli\u003e病院・クリニックのセキュリティポリシーに従い、AIツールの使用許可を事前に確認する\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eこれらを守った上で、「汎用的な文書作成」「知識の確認」「文章のたたき台作成」にChatGPTを活用します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"活用術1レセプト点検の確認観点をaiに教わる\"\u003e活用術1：レセプト点検の「確認観点」をAIに教わる\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e使用場面：\u003c/strong\u003e 月次レセプト点検の勉強・確認項目の洗い出し\u003c/p\u003e\n\u003cp\u003eレセプトの点検は経験とスキルが必要な作業ですが、「確認すべき観点のリスト」はChatGPTに整理させることができます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eプロンプト例：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e医療事務のレセプト点検で確認すべき項目を、以下のカテゴリ別に整理してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e実際のレセプトデータは含めず、一般的な確認観点のチェックリストとして作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【カテゴリ】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e 基本情報の確認（保険種別、有効期限など）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e 診療内容との整合性確認\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 算定要件・回数制限のチェック\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e 病名との整合性\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e5.\u003c/span\u003e 加算の算定漏れ確認\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eそれぞれ3〜5項目のチェックポイントを箇条書きでまとめてください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e新人の医療事務スタッフが使えるチェックリスト形式で。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e活用方法：\u003c/strong\u003e 生成されたチェックリストを事務長・経験者に確認してもらい、自院に合わせてカスタマイズします。新人スタッフの教育資料としても使えます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"活用術2患者向け案内文書のたたき台作成\"\u003e活用術2：患者向け案内文書のたたき台作成\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e使用場面：\u003c/strong\u003e 初診患者への説明文、待合室の案内、検査前の注意事項文書作成\u003c/p\u003e\n\u003cp\u003e患者向けの案内文書は「わかりやすさ」と「正確さ」の両立が難しいですが、ChatGPTがたたき台を作ることで作成時間を大幅に短縮できます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eプロンプト1：初診患者向け案内文書\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e内科クリニックの初診患者向けの来院案内文書を作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【含める内容】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e 受付時に必要なもの（保険証・診察券・お薬手帳）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e 問診票の記入案内\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 待ち時間についての案内\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e 診察の流れ（受付→問診票→診察→会計）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e5.\u003c/span\u003e 支払い方法（現金・各種クレジットカード・PayPay）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e6.\u003c/span\u003e お問い合わせ先（「当院代表番号」と記載）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【条件】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 高齢者にも読みやすい、やさしい言葉で\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 箇条書きと見出しを使った見やすい構成\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e A4一枚に収まる分量\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 医療機関名は「〇〇クリニック」とする\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003eプロンプト2：胃カメラ検査前の注意事項文書\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e胃内視鏡検査（胃カメラ）を受ける患者さんへの事前説明文書を作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e実際の医療指示は含まず、一般的な注意事項のたたき台として作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【含める内容】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e 検査前日の食事・飲み物について\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e 検査当日の来院時間・持ち物\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 検査中の流れ（おおよその所要時間）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e 検査後の注意事項（車の運転など）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e5.\u003c/span\u003e 不明点がある場合の連絡先案内\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【条件】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 患者さんが不安にならない、安心感のあるトーンで\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 専門用語を使う場合は括弧内にわかりやすい説明を添える\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 「検査前日の21時以降は絶食」などの具体的な数値は【要確認】と記載し、医師が確認・修正できるようにする\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"活用術3電話対応マニュアルの作成\"\u003e活用術3：電話対応マニュアルの作成\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e使用場面：\u003c/strong\u003e 新人スタッフ向け電話対応マニュアルの整備\u003c/p\u003e","title":"医療事務向けChatGPT活用術 業務効率化10選"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n医療事務の文書作成業務、どれだけ時間を取られていますか？ 医療現場では、患者さんへの案内文書を常に最新かつ分かりやすい状態に保つ必要があります。しかし、医療事務スタッフの多くは、受付業務・会計業務・レセプト業務と並行して文書作成を行わなければならず、時間的なプレッシャーを常に感じています。\n特に以下のような文書作成に時間がかかると感じている方は多いのではないでしょうか：\n検査の事前説明文（「この検査はこういう目的で…」） 術前・術後の患者向け説明文書 新薬・投薬に関する服薬指導補助資料 問診票の改訂 院内掲示物のリニューアル ChatGPTを活用すれば、これらの文書作成を5分以内に完成させることができます。この記事では、医療事務の現場で実際に使えるプロンプトと、作成した文書を安全に活用するためのチェックポイントを解説します。\n医療事務へのChatGPT活用全般については、医療事務ChatGPT活用術10選2026 も参考にしてください。\n重要：医療文書でChatGPTを使う際の大前提 患者向け医療文書はその内容が患者さんの健康・安全に直結します。ChatGPTを活用する場合も、以下の原則を必ず守ってください。\n必須確認事項：\n作成したすべての文書は、担当医師または医療責任者が最終確認・承認する 医学的に正確かどうかを必ず専門家が検証する 個人情報（患者名・病名・ID等）は絶対にChatGPTに入力しない 最新のガイドラインや添付文書と齟齬がないか確認する 内容は「草案」として使い、必ずブラッシュアップを行う この前提を守った上で、ChatGPTを「ドラフト作成の補助ツール」として活用することで、業務効率を大きく改善できます。\n実践1：検査説明文書の作成 プロンプト：胃カメラ（上部消化管内視鏡検査）の事前説明文 医療事務スタッフとして患者さんに渡す説明文書を作成してください。 【検査名】上部消化管内視鏡検査（胃カメラ） 【対象】外来で初めて胃カメラを受ける成人患者さん 【含めてほしい内容】 1. 検査の目的と概要（わかりやすく） 2. 検査前日の注意事項（食事制限など） 3. 検査当日の注意事項（来院時間、持参物） 4. 検査中の流れ（大まかな時間含む） 5. 検査後の注意事項 6. よくある質問（2〜3個） 【条件】 ・医療用語は避け、中学生でも理解できる平易な言葉で ・不安を感じさせない温かみのある文体で ・A4用紙1枚に収まる分量で ・「※医師から別途説明があります」という注記を適宜入れる プロンプト：血液検査の事前説明（簡易版） 採血検査を受ける患者さんへの簡単な説明カードを作成してください。 【含めてほしい内容】 ・採血の前に食事を控える時間（空腹時採血の場合） ・採血当日の水分摂取について ・採血後の注意事項（止血の方法、運動制限など） 【条件】 ・診察室の外に掲示する「お知らせカード」形式 ・箇条書きを中心に ・高齢の方にも読みやすい大きめの文字を意識した構成で ・全体で200文字以内 実践2：術前・術後案内の作成 プロンプト：内視鏡的ポリープ切除術の術前案内 内視鏡的大腸ポリープ切除術を受ける患者さんへの術前案内文書を 作成してください。 【含めてほしい内容】 1. 手術前の食事・飲水制限のスケジュール 2. 下剤服用の流れと注意点（一般的な前処置として） 3. 術前日の過ごし方の注意 4. 手術当日の準備と持参物 5. アレルギーや常用薬がある場合の確認依頼 【条件】 ・患者さんが自宅で読むためのわかりやすい文書 ・「〇〇日前」「〇〇時間前」という形式でスケジュールを明示 ・具体的な内容は「担当医の指示に従ってください」という形で 患者さんが医師に確認を促す文言を含める ・温かく安心感を与えるトーンで ・B5サイズ1枚程度の分量 プロンプト：術後の生活指導文書（外来手術後） 日帰り手術（外来手術）を受けた患者さんへの 術後生活指導文書を作成してください。 【術式の想定】皮膚科的な小手術（粉瘤摘出など） 【含めてほしい内容】 1. 手術当日の注意（入浴・飲酒・運動の制限） 2. 翌日以降の傷口のケア方法 3. 受診が必要な症状のサイン（発熱・出血・痛みの増強など） 4. 次回受診日の目安 5. 緊急時の連絡先案内（「クリニックにご連絡ください」程度） 【条件】 ・術後すぐに渡す文書なので、患者さんが疲れていても すぐ読める短い文章で ・箇条書きを多用して視認性を高める ・不安を和らげる言葉を適切に挟む 実践3：投薬・服薬説明の補助資料 医師が処方した薬について、医療事務スタッフが補足的に渡す「飲み方のポイント」資料のドラフト作成に活用できます。\nプロンプト：一般的な抗生物質の服薬指導補助メモ 医師が処方した抗生物質（セフェム系）の服薬について、 患者さんが自宅で参考にできる補助メモを作成してください。 【含めてほしい内容】 1. 飲み忘れた場合の対応 2. 副作用として気をつけること（下痢・発疹など一般的なもの） 3. 飲み合わせで注意すべきもの（アルコールなど一般的なもの） 4. 症状が改善しても最後まで飲み続けることの重要性 【条件】 ・「詳しくは薬剤師・医師にご確認ください」という注記を入れる ・専門用語を使わず、分かりやすく ・縦長のカード形式で印刷できるよう、簡潔にまとめる ・全体で300文字以内 プロンプト：インスリン自己注射の患者教育補助資料（ドラフト） インスリン自己注射を始める患者さん向けの 補助教育資料のドラフトを作成してください。 【含めてほしい内容】 1. 注射の前に確認すること（インスリンの外観など） 2. 注射部位のローテーションの重要性 3. 低血糖が起きた時のサイン 4. 注射後の針の適切な廃棄方法 5. 外出時・旅行時の保管方法の注意 【条件】 ・これは医師・看護師・薬剤師が行う教育の補助資料として使用 ・「実際の手技は医療スタッフが指導します」という前提で書く ・イラストを貼り付けるスペースを「【ここにイラスト】」と明示 ・親しみやすく、前向きなトーンで 実践4：問診票のリニューアル プロンプト：内科クリニックの初診問診票 内科クリニックの初診患者さん向け問診票を作成してください。 【クリニックの特徴】 ・一般内科・生活習慣病・消化器内科 ・患者層：30代〜70代が中心 ・記入はボールペンで手書き 【含めてほしい項目】 1. 基本情報（氏名・生年月日・性別・連絡先） 2. 本日の受診理由・症状 3. 症状の始まった時期と経過 4. 既往歴（これまでに診断・治療を受けた病気） 5. 現在服用中の薬 6. アレルギー歴 7. 家族歴（主要疾患のみ） 8. 生活習慣（喫煙・飲酒・運動） 9. 女性の方への追記項目（妊娠の可能性など） 【条件】 ・A4縦1枚に収める ・チェックボックスや選択式を多用して記入しやすくする ・高齢者が読みやすいよう、フォントサイズの大きな印刷に 適した構成にする ・「記入できない場合はスタッフにお申し付けください」を末尾に プロンプト：アレルギー専門外来の問診票（追加シート） アレルギー専門外来用の追加問診票を作成してください。 【用途】初診時に一般問診票と一緒に記入してもらう追加シート 【含めてほしい項目】 1. アレルギー症状の詳細（くしゃみ・鼻水・目のかゆみ・じんましん等） 2. 症状が出る時期・季節・状況 3. これまでに特定されたアレルゲン 4. これまでのアレルギー治療歴 5. 食物アレルギーの有無と内容 6. 緊急時（アナフィラキシー）の既往 【条件】 ・A4縦1枚、視認性を高いレイアウトで ・専門用語には括弧書きで一般的な表現を添える （例：アナフィラキシー（重篤なアレルギー反応）） 実践5：院内掲示物と告知文書 プロンプト：インフルエンザシーズンの院内掲示 インフルエンザ流行シーズンに合わせた院内掲示文を作成してください。 【種類1】待合室向けポスター（A4サイズ） 【種類2】受付で渡す小さなリーフレット（A6サイズ） 【含めてほしい内容（共通）】 ・マスク着用のお願い ・発熱・咳がある場合の来院前連絡のお願い ・手指消毒の場所案内 ・ワクチン接種のご案内（接種可能な旨の案内） 【条件】 ・感染拡大を防ぐ目的だが、患者さんを不安にさせない表現で ・クリニック名は「〇〇クリニック」として作成 ・季節感のある暖かみのある表現を使う 作成した文書の品質チェックリスト ChatGPTで作成した文書を使用する前に、以下のチェックリストで確認を行いましょう。\n内容の正確性\n医学的情報の正確性を担当医師が確認した 最新のガイドラインや診療方針と一致している 薬剤名・手技名などの固有名詞が正確である 患者への配慮\n平易な日本語で書かれており、理解しやすい 不必要に不安を煽る表現がない 高齢者・外国人患者への配慮（ふりがな等）が必要か確認した 法的・倫理的確認\n医師法・薬機法・個人情報保護法に抵触する内容がない 医師の指示・確認を促す文言が適切に入っている 「医師に相談してください」という免責文言が必要な箇所に入っている 実務確認\nクリニック名・連絡先・受診時間等の情報が正確 印刷レイアウトが読みやすいか確認した 改訂日・バージョン番号を文書に記載した 時間短縮の効果：従来との比較 文書の種類 従来の作成時間 ChatGPT活用後 検査説明文（新規） 1〜2時間 15〜20分 術前案内（改訂） 30〜60分 10〜15分 問診票（リニューアル） 2〜3時間 30〜45分 院内掲示物 30〜60分 10〜15分 服薬補助メモ 20〜30分 5〜10分 ChatGPTを「ゼロからのドラフト生成」に使い、「確認・修正・承認」のプロセスを効率化することで、文書作成にかかるトータル時間を60〜75%削減できます。\nまとめ：患者対応の質を下げずに業務を効率化する ChatGPTは医療事務における文書作成のスピードを飛躍的に向上させるツールですが、あくまでも「補助ツール」です。医療の質と患者安全を守ることを最優先にしながら、ドラフト作成の効率化に活用することが重要です。\n業務効率化スキルを身につけたうえで、キャリアアップや待遇改善を目指すならdoda の転職エージェントサービスをご活用ください。医療事務の求人を豊富に保有しており、専任のキャリアアドバイザーが職場環境・給与条件の交渉まで無料でサポートしてくれます。\n医療事務へのChatGPT活用をさらに広げたい方（レセプト補助・患者対応スクリプト・院内ルールの整備など）については、医療事務ChatGPT活用術10選2026 で体系的に解説しています。\n関連ツール 医療事務の年収から手取りを計算する → 手取り計算シミュレーター 業務効率化スキルを活かして転職した場合の年収変化を確認 → 転職年収シミュレーター 関連テンプレート 医療事務の文書作成を今日から効率化したい方へ:\n医療事務向けChatGPT活用術10選 — 患者案内文書・院内掲示物・問診票・服薬補助資料などすぐに使えるプロンプト集と文書テンプレートを収録 ","permalink":"https://productivity-works.com/ja/posts/iryo-jimu-chatgpt-kanja-annai-sakusei/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"医療事務の文書作成業務どれだけ時間を取られていますか\"\u003e医療事務の文書作成業務、どれだけ時間を取られていますか？\u003c/h2\u003e\n\u003cp\u003e医療現場では、患者さんへの案内文書を常に最新かつ分かりやすい状態に保つ必要があります。しかし、医療事務スタッフの多くは、受付業務・会計業務・レセプト業務と並行して文書作成を行わなければならず、時間的なプレッシャーを常に感じています。\u003c/p\u003e\n\u003cp\u003e特に以下のような文書作成に時間がかかると感じている方は多いのではないでしょうか：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e検査の事前説明文（「この検査はこういう目的で…」）\u003c/li\u003e\n\u003cli\u003e術前・術後の患者向け説明文書\u003c/li\u003e\n\u003cli\u003e新薬・投薬に関する服薬指導補助資料\u003c/li\u003e\n\u003cli\u003e問診票の改訂\u003c/li\u003e\n\u003cli\u003e院内掲示物のリニューアル\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChatGPTを活用すれば、これらの文書作成を\u003cstrong\u003e5分以内\u003c/strong\u003eに完成させることができます。この記事では、医療事務の現場で実際に使えるプロンプトと、作成した文書を安全に活用するためのチェックポイントを解説します。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e医療事務へのChatGPT活用全般については、\u003ca href=\"https://productivity-works.com/ja/posts/iryo-jimu-chatgpt-2026/\"\u003e医療事務ChatGPT活用術10選2026\u003c/a\u003e\nも参考にしてください。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"重要医療文書でchatgptを使う際の大前提\"\u003e重要：医療文書でChatGPTを使う際の大前提\u003c/h2\u003e\n\u003cp\u003e患者向け医療文書はその内容が患者さんの健康・安全に直結します。ChatGPTを活用する場合も、以下の原則を必ず守ってください。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e必須確認事項：\u003c/strong\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e作成したすべての文書は、担当医師または医療責任者が最終確認・承認する\u003c/li\u003e\n\u003cli\u003e医学的に正確かどうかを必ず専門家が検証する\u003c/li\u003e\n\u003cli\u003e個人情報（患者名・病名・ID等）は絶対にChatGPTに入力しない\u003c/li\u003e\n\u003cli\u003e最新のガイドラインや添付文書と齟齬がないか確認する\u003c/li\u003e\n\u003cli\u003e内容は「草案」として使い、必ずブラッシュアップを行う\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eこの前提を守った上で、ChatGPTを「ドラフト作成の補助ツール」として活用することで、業務効率を大きく改善できます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"実践1検査説明文書の作成\"\u003e実践1：検査説明文書の作成\u003c/h2\u003e\n\u003ch3 id=\"プロンプト胃カメラ上部消化管内視鏡検査の事前説明文\"\u003eプロンプト：胃カメラ（上部消化管内視鏡検査）の事前説明文\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e医療事務スタッフとして患者さんに渡す説明文書を作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【検査名】上部消化管内視鏡検査（胃カメラ）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【対象】外来で初めて胃カメラを受ける成人患者さん\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【含めてほしい内容】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e 検査の目的と概要（わかりやすく）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e 検査前日の注意事項（食事制限など）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 検査当日の注意事項（来院時間、持参物）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e 検査中の流れ（大まかな時間含む）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e5.\u003c/span\u003e 検査後の注意事項\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e6.\u003c/span\u003e よくある質問（2〜3個）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【条件】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・医療用語は避け、中学生でも理解できる平易な言葉で\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・不安を感じさせない温かみのある文体で\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・A4用紙1枚に収まる分量で\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・「※医師から別途説明があります」という注記を適宜入れる\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"プロンプト血液検査の事前説明簡易版\"\u003eプロンプト：血液検査の事前説明（簡易版）\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e採血検査を受ける患者さんへの簡単な説明カードを作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【含めてほしい内容】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・採血の前に食事を控える時間（空腹時採血の場合）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・採血当日の水分摂取について\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・採血後の注意事項（止血の方法、運動制限など）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【条件】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・診察室の外に掲示する「お知らせカード」形式\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・箇条書きを中心に\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・高齢の方にも読みやすい大きめの文字を意識した構成で\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・全体で200文字以内\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"実践2術前術後案内の作成\"\u003e実践2：術前・術後案内の作成\u003c/h2\u003e\n\u003ch3 id=\"プロンプト内視鏡的ポリープ切除術の術前案内\"\u003eプロンプト：内視鏡的ポリープ切除術の術前案内\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e内視鏡的大腸ポリープ切除術を受ける患者さんへの術前案内文書を\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【含めてほしい内容】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e 手術前の食事・飲水制限のスケジュール\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e 下剤服用の流れと注意点（一般的な前処置として）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 術前日の過ごし方の注意\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e 手術当日の準備と持参物\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e5.\u003c/span\u003e アレルギーや常用薬がある場合の確認依頼\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【条件】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・患者さんが自宅で読むためのわかりやすい文書\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・「〇〇日前」「〇〇時間前」という形式でスケジュールを明示\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・具体的な内容は「担当医の指示に従ってください」という形で\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e　患者さんが医師に確認を促す文言を含める\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・温かく安心感を与えるトーンで\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・B5サイズ1枚程度の分量\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"プロンプト術後の生活指導文書外来手術後\"\u003eプロンプト：術後の生活指導文書（外来手術後）\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e日帰り手術（外来手術）を受けた患者さんへの\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e術後生活指導文書を作成してください。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【術式の想定】皮膚科的な小手術（粉瘤摘出など）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【含めてほしい内容】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e1.\u003c/span\u003e 手術当日の注意（入浴・飲酒・運動の制限）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e2.\u003c/span\u003e 翌日以降の傷口のケア方法\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e3.\u003c/span\u003e 受診が必要な症状のサイン（発熱・出血・痛みの増強など）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e4.\u003c/span\u003e 次回受診日の目安\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003e5.\u003c/span\u003e 緊急時の連絡先案内（「クリニックにご連絡ください」程度）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【条件】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・術後すぐに渡す文書なので、患者さんが疲れていても\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e　すぐ読める短い文章で\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・箇条書きを多用して視認性を高める\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・不安を和らげる言葉を適切に挟む\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"実践3投薬服薬説明の補助資料\"\u003e実践3：投薬・服薬説明の補助資料\u003c/h2\u003e\n\u003cp\u003e医師が処方した薬について、医療事務スタッフが補足的に渡す「飲み方のポイント」資料のドラフト作成に活用できます。\u003c/p\u003e","title":"医療事務 ChatGPTで患者案内文書を5分で作成する方法"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「会社で確定拠出年金に入っているけど、iDeCoとどう違うの？」「両方使えるの？」——そんな疑問を持つ方が増えています。老後資金の準備として非常に有効なこの2つの制度、正しく理解して賢く使いこなしましょう。\n本記事では、企業型確定拠出年金（企業型DC）とiDeCo（個人型確定拠出年金）の違いを網羅的に解説します。\n確定拠出年金とは？まず基本を押さえよう 確定拠出年金（DC: Defined Contribution）とは、毎月一定額を積み立て、自分で運用商品を選び、60歳以降に受け取る私的年金制度です。\n従来の確定給付年金（会社が給付額を保証する）とは異なり、運用成績によって将来受け取れる金額が変わるのが特徴です。\n確定拠出年金の3大メリット 掛金が全額所得控除になる（節税効果が大きい） 運用中の利益が非課税（通常は20.315%の税金がかかる） 受取時も税制優遇（一時金は退職所得控除、年金は公的年金等控除が適用） 企業型DC（確定拠出年金企業型）とは 企業型DCは、企業が従業員のために掛金を拠出する制度です。会社が制度を設けていないと利用できません。\n企業型DCの基本的な仕組み 会社が毎月、従業員の口座に掛金を拠出 従業員は用意された運用商品（投資信託・定期預金など）の中から選んで運用 60歳以降に一時金または年金として受け取る 企業型DCのマッチング拠出 会社の掛金に加え、**従業員自身も掛金を上乗せできる「マッチング拠出」**という仕組みがある企業もあります。自己負担分も全額所得控除になるため、節税効果が高まります。\niDeCo（個人型確定拠出年金）とは iDeCoは、個人が任意で加入する確定拠出年金です。2017年1月から加入対象が大幅に拡大され、基本的にすべての現役世代（20歳以上65歳未満）が利用できるようになりました。\niDeCoの基本的な仕組み 自分で金融機関（証券会社・銀行・保険会社）を選んで口座開設 毎月の掛金（5,000円〜）を自分で決める 金融機関ごとに異なる運用商品から自分で選んで運用 原則60歳まで引き出し不可 企業型DCとiDeCoの違いを徹底比較 基本情報比較表 項目 企業型DC iDeCo 加入対象 制度導入企業の従業員 20歳以上65歳未満の原則全員 掛金拠出者 主に会社（マッチング拠出なら本人も） 本人 掛金の上限（月額） 会社員：55,000円（他の企業年金なし）または27,500円（他の企業年金あり） 後述の表を参照 節税メリット（本人拠出分） マッチング拠出分が所得控除 全額所得控除 金融機関の選択 会社が指定した機関のみ 自分で自由に選択 運用商品の選択 会社が用意した商品から選択 金融機関が提供する商品から選択 受取開始年齢 60〜75歳（通算加入期間による） 60〜75歳 手数料 会社が一部負担するケースあり 原則、加入者が負担 iDeCoの掛金上限（月額） 加入者の区分 月額上限 自営業者・フリーランス（第1号被保険者） 68,000円 会社員（企業型DCなし） 23,000円 会社員（企業型DCあり） 20,000円 専業主婦（夫）（第3号被保険者） 23,000円 公務員 12,000円 ※2024年12月の法改正により、企業型DCとiDeCoの合算上限も変更されています。最新情報は国民年金基金連合会の公式サイトでご確認ください。\n節税効果を具体的な数字で比較 年収500万円・月2万円のiDeCoを30年間続けた場合 年間の掛金：240,000円 所得税率（目安）：20%、住民税：10% 年間節税額：約72,000円（所得税約48,000円＋住民税約24,000円） 30年間の累計節税額：約216万円 さらに、運用益も非課税です。たとえば年3%で運用した場合、30年後の資産は元本720万円に対して約1,165万円（約445万円の利益）となり、通常課税されるべき約90万円の税金が非課税になります。\n節税効果を最大化するポイント 所得が高いほど節税額が大きい：所得税率が高い方（年収700万円超など）ほど恩恵が大きい できるだけ早く始める：複利の効果で長期運用が有利 掛金は上限まで拠出する：使える枠は使い切るのが基本 企業型DCとiDeCoの併用はできる？ 2022年10月の法改正により、企業型DC加入者でも原則としてiDeCoに加入できるようになりました。\nただし、会社が「iDeCo加入を認めない規約」を設けている場合は加入できないケースもあります。また企業型DCとiDeCoを合算した掛金には上限があります。\n併用時の掛金上限のルール 企業型DCとiDeCoの合計が以下の範囲内に収まる必要があります。\n他の企業年金がない場合：月額55,000円以内（iDeCoは最大20,000円） 確定給付型年金などがある場合：月額27,500円以内（iDeCoは最大12,000円） 受取方法と税金の扱い 受取の選択肢 受取方法 概要 税制上の扱い 一時金 全額または一部を一括受取 退職所得として課税（退職所得控除が適用） 年金 分割して定期的に受取 雑所得（公的年金等控除が適用） 一時金＋年金 両者の組み合わせ それぞれの控除が適用 退職所得控除の計算式（一時金受取の場合） 加入年数20年以下：40万円 × 加入年数（最低80万円） 加入年数20年超：800万円 ＋ 70万円 × （加入年数 − 20年） 30年間加入した場合の退職所得控除額：800万円 ＋ 70万円 × 10年 ＝ 1,500万円\nこの金額を超えなければ実質非課税で受け取れます。\n注意（2025年法改正）：退職所得控除の見直し議論が2025年以降も続いています。一時金受取を予定している方は、受取時の税制を事前に確認することが重要です。\nどちらを優先すべきか？ケース別アドバイス ケース①：会社に企業型DCがある会社員 優先度：企業型DC（マッチング拠出） ＞ iDeCo\n会社が拠出している掛金は「もらえるお金」なので最大限活用を。マッチング拠出がある場合は、まず企業型DCの上限まで活用し、余力があればiDeCoを検討しましょう。\nケース②：企業型DCのない会社員・公務員 優先度：iDeCo ＋ NISAの組み合わせがベスト\niDeCoで老後資金を積み立てながら、NISAで中長期の資産形成を並行して行うのが王道戦略です。\nケース③：自営業・フリーランス 優先度：iDeCoを最優先。月68,000円まで拠出可能\n会社員と比べて公的年金が少ない自営業者にとって、iDeCoは老後資金形成の強力な手段です。掛金上限も最も高く設定されており、節税効果も非常に大きくなります。\nケース④：専業主婦（夫） 優先度：iDeCo（ただし所得がないと節税効果は限定的）\n所得税・住民税を払っていない方は節税メリットがありませんが、運用益非課税・受取時の税制優遇は享受できます。家計に余裕があれば検討する価値はあります。\niDeCoの金融機関の選び方 iDeCoは金融機関によって運用商品・手数料・サービス内容が異なります。口座開設先は慎重に選びましょう。\nおすすめの選び方基準 判断基準 重要度 チェックポイント 運用コスト（信託報酬） ★★★★★ 同種の商品なら信託報酬が低いほど有利 商品ラインナップ ★★★★☆ インデックスファンドが充実しているか 口座管理手数料 ★★★★☆ ネット証券は月額171円程度が相場 使いやすさ（アプリ・Web） ★★★☆☆ スマホで管理できるか サポート体制 ★★★☆☆ 初心者向けサポートの充実度 ネット証券（SBI証券・楽天証券など）は商品数・手数料面で優秀な場合が多く、投資初心者にもおすすめです。\nよくある疑問・Q\u0026amp;A Q. 転職したらiDeCoや企業型DCはどうなりますか？ A. 企業型DCは転職先の企業型DC、またはiDeCo（個人型）に移換（ポータビリティ）できます。手続きは6か月以内に行う必要があります。iDeCoはそのまま継続できます。\nQ. 60歳前に病気や死亡した場合はどうなりますか？ A. 障害給付金として受け取れる場合があります（一定の要件あり）。死亡した場合は遺族が死亡一時金として受け取れます。\nQ. 元本保証の商品はありますか？ A. 定期預金・保険商品など元本確保型の商品もラインナップされています。ただし超低金利環境下では増やす効果は限定的です。\nQ. 途中で掛金の金額を変えられますか？ A. iDeCoは年1回（一部金融機関は複数回）、掛金額の変更が可能です。企業型DCのマッチング拠出も規約の範囲内で変更できます。\n資産形成を始めるなら、**楽天証券 **で口座開設。NISAもiDeCoも1つの口座で管理でき、楽天ポイントでの投資も可能です。\nまとめ：確定拠出年金は「制度を理解して使い倒す」のが正解 企業型DCとiDeCoは、どちらも税制上の優遇が非常に大きい老後資金形成の強力なツールです。\n企業型DC iDeCo こんな人に向いている 会社が制度を用意している会社員 自営業、DC非導入企業の会社員、専業主婦など 最大のメリット 会社が掛金を出してくれる 自分で金融機関・商品を選べる自由度 注意点 会社の規約・商品ラインナップに縛られる 60歳まで引き出せない流動性の低さ 老後資金の準備は早いほど有利です。まず「自分が加入できるのはどちらか（または両方か）」を確認し、今すぐ一歩踏み出してみましょう。\n本記事の情報は2026年5月時点のものです。法改正により内容が変わる場合があります。個別の税務・投資判断については、税理士やファイナンシャルプランナーにご相談ください。\n関連ツール iDeCoの節税額を年収別にシミュレーション → iDeCoシミュレーター NISAの非課税効果を計算 → NISAシミュレーター 手取り額への影響を確認 → 手取り計算ツール 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター 関連テンプレート 資産運用・家計管理をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す あわせて読みたい iDeCo おすすめ証券会社ランキング【2026年最新版】手数料・商品数を徹底比較 iDeCo節税シミュレーション｜年収別に実際いくら得するか計算 老後2000万円問題を自分で検証｜退職金なしの会社員がとるべき行動 ","permalink":"https://productivity-works.com/ja/posts/kakutei-kyoshutsu-nenkin-chigai/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「会社で確定拠出年金に入っているけど、iDeCoとどう違うの？」「両方使えるの？」——そんな疑問を持つ方が増えています。老後資金の準備として非常に有効なこの2つの制度、正しく理解して賢く使いこなしましょう。\u003c/p\u003e\n\u003cp\u003e本記事では、\u003cstrong\u003e企業型確定拠出年金（企業型DC）とiDeCo（個人型確定拠出年金）の違いを網羅的に解説\u003c/strong\u003eします。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"確定拠出年金とはまず基本を押さえよう\"\u003e確定拠出年金とは？まず基本を押さえよう\u003c/h2\u003e\n\u003cp\u003e確定拠出年金（DC: Defined Contribution）とは、毎月一定額を積み立て、自分で運用商品を選び、60歳以降に受け取る私的年金制度です。\u003c/p\u003e\n\u003cp\u003e従来の確定給付年金（会社が給付額を保証する）とは異なり、\u003cstrong\u003e運用成績によって将来受け取れる金額が変わる\u003c/strong\u003eのが特徴です。\u003c/p\u003e\n\u003ch3 id=\"確定拠出年金の3大メリット\"\u003e確定拠出年金の3大メリット\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e掛金が全額所得控除\u003c/strong\u003eになる（節税効果が大きい）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e運用中の利益が非課税\u003c/strong\u003e（通常は20.315%の税金がかかる）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e受取時も税制優遇\u003c/strong\u003e（一時金は退職所得控除、年金は公的年金等控除が適用）\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"企業型dc確定拠出年金企業型とは\"\u003e企業型DC（確定拠出年金企業型）とは\u003c/h2\u003e\n\u003cp\u003e企業型DCは、\u003cstrong\u003e企業が従業員のために掛金を拠出する\u003c/strong\u003e制度です。会社が制度を設けていないと利用できません。\u003c/p\u003e\n\u003ch3 id=\"企業型dcの基本的な仕組み\"\u003e企業型DCの基本的な仕組み\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e会社が毎月、従業員の口座に掛金を拠出\u003c/li\u003e\n\u003cli\u003e従業員は用意された運用商品（投資信託・定期預金など）の中から選んで運用\u003c/li\u003e\n\u003cli\u003e60歳以降に一時金または年金として受け取る\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"企業型dcのマッチング拠出\"\u003e企業型DCのマッチング拠出\u003c/h3\u003e\n\u003cp\u003e会社の掛金に加え、**従業員自身も掛金を上乗せできる「マッチング拠出」**という仕組みがある企業もあります。自己負担分も全額所得控除になるため、節税効果が高まります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ideco個人型確定拠出年金とは\"\u003eiDeCo（個人型確定拠出年金）とは\u003c/h2\u003e\n\u003cp\u003eiDeCoは、\u003cstrong\u003e個人が任意で加入する\u003c/strong\u003e確定拠出年金です。2017年1月から加入対象が大幅に拡大され、基本的にすべての現役世代（20歳以上65歳未満）が利用できるようになりました。\u003c/p\u003e\n\u003ch3 id=\"idecoの基本的な仕組み\"\u003eiDeCoの基本的な仕組み\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e自分で金融機関（証券会社・銀行・保険会社）を選んで口座開設\u003c/li\u003e\n\u003cli\u003e毎月の掛金（5,000円〜）を自分で決める\u003c/li\u003e\n\u003cli\u003e金融機関ごとに異なる運用商品から自分で選んで運用\u003c/li\u003e\n\u003cli\u003e原則60歳まで引き出し不可\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"企業型dcとidecoの違いを徹底比較\"\u003e企業型DCとiDeCoの違いを徹底比較\u003c/h2\u003e\n\u003ch3 id=\"基本情報比較表\"\u003e基本情報比較表\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e企業型DC\u003c/th\u003e\n          \u003cth\u003eiDeCo\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e加入対象\u003c/td\u003e\n          \u003ctd\u003e制度導入企業の従業員\u003c/td\u003e\n          \u003ctd\u003e20歳以上65歳未満の原則全員\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e掛金拠出者\u003c/td\u003e\n          \u003ctd\u003e主に会社（マッチング拠出なら本人も）\u003c/td\u003e\n          \u003ctd\u003e本人\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e掛金の上限（月額）\u003c/td\u003e\n          \u003ctd\u003e会社員：55,000円（他の企業年金なし）または27,500円（他の企業年金あり）\u003c/td\u003e\n          \u003ctd\u003e後述の表を参照\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e節税メリット（本人拠出分）\u003c/td\u003e\n          \u003ctd\u003eマッチング拠出分が所得控除\u003c/td\u003e\n          \u003ctd\u003e全額所得控除\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e金融機関の選択\u003c/td\u003e\n          \u003ctd\u003e会社が指定した機関のみ\u003c/td\u003e\n          \u003ctd\u003e自分で自由に選択\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e運用商品の選択\u003c/td\u003e\n          \u003ctd\u003e会社が用意した商品から選択\u003c/td\u003e\n          \u003ctd\u003e金融機関が提供する商品から選択\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e受取開始年齢\u003c/td\u003e\n          \u003ctd\u003e60〜75歳（通算加入期間による）\u003c/td\u003e\n          \u003ctd\u003e60〜75歳\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e手数料\u003c/td\u003e\n          \u003ctd\u003e会社が一部負担するケースあり\u003c/td\u003e\n          \u003ctd\u003e原則、加入者が負担\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"idecoの掛金上限月額\"\u003eiDeCoの掛金上限（月額）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e加入者の区分\u003c/th\u003e\n          \u003cth\u003e月額上限\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e自営業者・フリーランス（第1号被保険者）\u003c/td\u003e\n          \u003ctd\u003e68,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e会社員（企業型DCなし）\u003c/td\u003e\n          \u003ctd\u003e23,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e会社員（企業型DCあり）\u003c/td\u003e\n          \u003ctd\u003e20,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e専業主婦（夫）（第3号被保険者）\u003c/td\u003e\n          \u003ctd\u003e23,000円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e公務員\u003c/td\u003e\n          \u003ctd\u003e12,000円\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※2024年12月の法改正により、企業型DCとiDeCoの合算上限も変更されています。最新情報は国民年金基金連合会の公式サイトでご確認ください。\u003c/p\u003e","title":"確定拠出年金 企業型（DC）と個人型（iDeCo）の違いを徹底比較【2026年版】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nNISA iDeCo どっちを先に始めるべきか完全解説【2026年最新版】 「NISAとiDeCoって、どちらから始めればいいの？」これは投資初心者から最も多く寄せられる質問のひとつです。どちらも非課税で資産形成できる国の制度ですが、仕組みが大きく異なります。間違った順番で始めると、本来受けられる税制優遇を取り逃がしてしまうこともあります。\nこの記事では以下のことがわかります。\nNISAとiDeCoの基本的な違い どちらを先に始めるべきかの判断基準 年収・職業・年齢別のおすすめ優先順位 両制度を賢く併用するコツ NISAとiDeCoとは？基本を理解する 定義・仕組み NISAとiDeCoはともに「非課税」の投資制度ですが、目的と使い勝手が根本的に異なります。\nNISA vs iDeCo 特徴比較 新NISA iDeCo いつでも引き出し可 自由度が高い 原則60歳まで引き出し不可 老後専用の強制貯蓄 運用益のみ非課税 掛金の所得控除なし 三重の節税効果 掛金控除＋運用益非課税＋受取時控除 年間最大360万円 （生涯1,800万円） 月1.2〜6.8万円 （職業により異なる） 低〜中年収・教育費等も見込む方 公務員・専業主婦（夫）に特に向いている 年収400万円以上の会社員・自営業 節税効果が特に大きい 項目 新NISA iDeCo 正式名称 少額投資非課税制度 個人型確定拠出年金 目的 中長期の資産形成 老後の年金補完 年間拠出上限 最大360万円 1.2万〜2.75万円/月（職業による） 生涯上限 1,800万円 なし（拠出期間の上限あり） 引き出し いつでも可能 原則60歳まで不可 税制優遇 運用益が非課税 掛金が全額所得控除＋運用益非課税＋受取時控除 投資対象 株式・投信・ETFなど 投資信託・定期預金・保険など 加入条件 日本在住18歳以上 20歳以上65歳未満の国民年金被保険者 iDeCoの最大の強みは掛金が「全額所得控除」になる点です。たとえば月2万円（年24万円）のiDeCo掛金を積み立てると、年収500万円の会社員（所得税20%・住民税10%）は年約7.2万円の税金が戻ってきます。\nNISAの最大の強みはいつでも引き出せる自由度です。老後だけでなく、教育資金・住宅購入・旅行など様々な目的に使えます。\nメリット・デメリット 新NISAのメリット・デメリット\nメリット デメリット いつでも引き出し可能 掛金の所得控除なし 年360万円まで投資可能 NISA内の損失は損益通算不可 生涯枠1,800万円（再利用可） — 幅広い銘柄から選択可 — iDeCoのメリット・デメリット\nメリット デメリット 掛金全額が所得控除（節税効果大） 60歳まで引き出し不可 運用益が非課税 口座管理手数料が毎月かかる 受取時に退職所得・公的年金控除が適用 運用商品の選択肢が限られる 老後資金を強制的に積み立てられる 転職・退職時に手続きが必要 NISA iDeCo おすすめ優先順位（比較表） iDeCo（月2万円）年間節税額シミュレーション 約4.8万円 年収300万円 約7.2万円 年収500万円 約7.9万円 年収700万円 約10.3万円 年収1,000万円 ※所得税率+住民税10%含む概算。実際の節税額は個人の状況により異なります。 年収が高いほどiDeCoの節税メリットが大きくなります 職業・状況別の優先順位 職業・状況 おすすめ優先順位 理由 会社員（年収400万円以上） iDeCo優先 → NISA 所得控除の節税効果が大きい 会社員（年収300万円以下） NISA優先 → iDeCo 節税効果が小さく、流動性を重視 自営業・フリーランス iDeCo優先 国民年金のみで老後が不安。上限2.75万円/月と手厚い 公務員 NISA優先 → iDeCo iDeCo上限1.2万円/月と低く、NISAの自由度が魅力 専業主婦（夫） NISA優先 所得控除の恩恵が受けられない場合が多い 50代以上 iDeCo優先 短期間での節税効果を最大化 30代以下（資金余裕あり） 併用がベスト 時間を味方に複利効果を最大化 年収別の節税シミュレーション（iDeCo月2万円の場合） 年収 所得税率 年間節税額 30年間の節税累計 300万円 10% 約4.8万円 約144万円 500万円 20% 約7.2万円 約216万円 700万円 23% 約7.9万円 約237万円 1,000万円 33% 約10.3万円 約309万円 ※住民税10%を含む概算。実際の節税額は個人の状況によって異なります。\niDeCo口座開設はこちら 選び方・注意点 チェックポイント ステップ1: 緊急予備資金の確認 まず生活費の3〜6ヶ月分を現金で確保してください。iDeCoは60歳まで引き出せないため、この資金が不足している状態で始めると生活リスクが生じます。\nステップ2: 会社の企業型DCの有無を確認 会社員の場合、勤務先に企業型確定拠出年金（企業型DC）があると、iDeCoへの加入条件・上限額が変わります。人事部に確認しましょう。\nステップ3: 投資できる期間を確認 iDeCoは現在65歳まで拠出可能です。30代ならどちらも長く続けられますが、50代後半以降は拠出期間が短くなるため、iDeCoで短期集中的に節税するのが有効です。\nステップ4: 月の余裕資金を把握する iDeCoとNISAを両方始める場合、月の拠出合計が無理のない金額に収まるよう設定しましょう。\nよくある失敗 失敗1: iDeCoを始めずにNISAだけ使う 節税効果が高い会社員がiDeCoを後回しにすると、毎年数万円の節税機会を逃し続けます。年収が高いほど損失は大きくなります。\n失敗2: iDeCoの「60歳まで引き出し不可」を軽視する 「老後の資金だから大丈夫」と思っていても、30代前半で住宅購入・育児費用などが重なると資金繰りが厳しくなることがあります。NISAとの配分を慎重に考えましょう。\n失敗3: iDeCoの手数料を確認しない iDeCoは証券会社・銀行によって月の口座管理手数料が異なります（年数百〜数千円の差）。SBI証券や楽天証券など手数料が低い機関を選ぶことが大切です。\n失敗4: NISAの損失をiDeCoで埋めようとする 両制度は別々の口座で運用されます。NISAで損が出た分をiDeCoの利益で補うことはできません。\n関連記事: iDeCo おすすめ証券会社の選び方 よくある質問（FAQ） Q1. NISAとiDeCoは同時に使えますか？ はい、同時に利用できます。むしろ節税効果を最大化するには両方の活用が理想的です。会社員の場合、iDeCoの節税分をNISAの積立資金に回す「節税→再投資」の好循環が生まれます。\nQ2. iDeCoの月の掛金はいくらにすればいいですか？ 職業によって上限が異なります。会社員（企業年金なし）は月2.3万円、自営業は月6.8万円、公務員は月1.2万円が上限です。最初は少額から始めて、余裕が出たら増額するのがおすすめです。\nQ3. NISAを先に満額使い切ってからiDeCoを始めるべきですか？ それは非効率です。iDeCoの掛金控除は「掛けた年」の節税になるため、早く始めるほど累計節税額が大きくなります。NISAとiDeCoを並行して進めましょう。\nQ4. 転職するとiDeCoはどうなりますか？ 転職先の企業年金の状況に応じて、iDeCo継続・企業型DCへ移換・iDeCoへ戻すなどの手続きが必要です。放置すると「運用指図者」として管理手数料だけかかり続けるので注意しましょう。\nQ5. iDeCoはいつ受け取るのが得ですか？ 一時金（一括）で受け取る場合は退職所得控除、年金形式の場合は公的年金等控除が適用されます。退職金と重なると控除が制限される場合があるため、タイミングと金額の試算が重要です。\nQ6. 専業主婦（夫）はNISAとiDeCoどちらがいいですか？ iDeCoは所得控除が主な恩恵ですが、専業主婦（夫）は課税所得が少ないため、NISAの方が活用しやすいです。ただし老後資金の強制貯蓄としてiDeCoも一定の価値があります。\nNISAもiDeCoも、**楽天証券 **なら1つの口座で両方を管理できます。口座開設は無料・最短5分で完了します。\nまとめ・行動の呼びかけ NISAとiDeCoは「どちらかを選ぶ」ではなく「どちらを先に始めるか」の問題です。年収が高い会社員・自営業者はiDeCoの節税効果が非常に大きいため、まずiDeCoを満額拠出し、余裕資金でNISAを積み立てるのが最強の戦略です。今日から口座開設の手続きを始めて、将来の自分への投資を始めましょう。\n今すぐiDeCo口座を開設する 関連ツール・記事 ローンの返済額をシミュレーション → ローン計算ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール FIRE（経済的自立）までの年数を計算 → FIREシミュレーター NISAの非課税効果をシミュレーション → NISAシミュレーター iDeCoの節税額を年収別に計算 → iDeCoシミュレーター 積立投資の複利効果を確認 → 複利計算シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター 教育費の総額を計算 → 教育費シミュレーター 総資産・純資産を計算 → 資産管理シミュレーター インフレによる購買力低下を計算 → インフレ計算ツール iDeCo おすすめ証券会社ランキング【2026年最新版】手数料・商品数を徹底比較 新NISA始め方2026年版【初心者向け完全ガイド】口座開設から投資スタートまで iDeCo節税シミュレーション｜年収別に実際いくら得するか計算 新NISA おすすめ銘柄 初心者向け完全ガイド【2026年最新版】 老後2000万円問題を自分で検証｜退職金なしの会社員がとるべき行動 ※本記事は情報提供を目的としており、特定の金融商品の購入・売却を推奨するものではありません。投資判断はご自身の責任で行ってください。最新情報は各公式サイトでご確認ください。\n関連テンプレート 資産運用・家計管理をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す ","permalink":"https://productivity-works.com/ja/posts/nisa-ideco-docchi-saki/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"nisa-ideco-どっちを先に始めるべきか完全解説2026年最新版\"\u003eNISA iDeCo どっちを先に始めるべきか完全解説【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「NISAとiDeCoって、どちらから始めればいいの？」これは投資初心者から最も多く寄せられる質問のひとつです。どちらも非課税で資産形成できる国の制度ですが、仕組みが大きく異なります。間違った順番で始めると、本来受けられる税制優遇を取り逃がしてしまうこともあります。\u003c/p\u003e\n\u003cp\u003eこの記事では以下のことがわかります。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNISAとiDeCoの基本的な違い\u003c/li\u003e\n\u003cli\u003eどちらを先に始めるべきかの判断基準\u003c/li\u003e\n\u003cli\u003e年収・職業・年齢別のおすすめ優先順位\u003c/li\u003e\n\u003cli\u003e両制度を賢く併用するコツ\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"nisaとidecoとは基本を理解する\"\u003eNISAとiDeCoとは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003eNISAとiDeCoはともに「非課税」の投資制度ですが、目的と使い勝手が根本的に異なります。\u003c/p\u003e\n\u003cdiv style=\"max-width:620px;margin:1.8em auto;text-align:center;\"\u003e\n\u003csvg viewBox=\"0 0 620 260\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:100%;height:auto;\" aria-label=\"NISA vs iDeCo 特徴比較\"\u003e\n  \u003cstyle\u003etext { font-family: 'Noto Sans JP', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', sans-serif; }\u003c/style\u003e\n  \u003crect width=\"620\" height=\"260\" rx=\"12\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"26\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"14\" font-weight=\"bold\"\u003eNISA vs iDeCo 特徴比較\u003c/text\u003e\n  \u003c!-- NISA列ヘッダー --\u003e\n  \u003crect x=\"20\" y=\"38\" width=\"270\" height=\"36\" rx=\"8\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"155\" y=\"61\" text-anchor=\"middle\" fill=\"white\" font-size=\"14\" font-weight=\"bold\"\u003e新NISA\u003c/text\u003e\n  \u003c!-- iDeCo列ヘッダー --\u003e\n  \u003crect x=\"330\" y=\"38\" width=\"270\" height=\"36\" rx=\"8\" fill=\"#10b981\"/\u003e\n \u003ctext x=\"465\" y=\"61\" text-anchor=\"middle\" fill=\"white\" font-size=\"14\" font-weight=\"bold\"\u003eiDeCo\u003c/text\u003e\n  \u003c!-- 行ラベル（中央） --\u003e\n  \u003c!-- 行1: 引き出し --\u003e\n  \u003crect x=\"20\" y=\"82\" width=\"270\" height=\"38\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"155\" y=\"101\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"13\" font-weight=\"bold\"\u003eいつでも引き出し可\u003c/text\u003e\n \u003ctext x=\"155\" y=\"115\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e自由度が高い\u003c/text\u003e\n  \u003crect x=\"330\" y=\"82\" width=\"270\" height=\"38\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"465\" y=\"101\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"13\" font-weight=\"bold\"\u003e原則60歳まで引き出し不可\u003c/text\u003e\n \u003ctext x=\"465\" y=\"115\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e老後専用の強制貯蓄\u003c/text\u003e\n  \u003c!-- 行2: 節税効果 --\u003e\n  \u003crect x=\"20\" y=\"126\" width=\"270\" height=\"38\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"155\" y=\"145\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"13\"\u003e運用益のみ非課税\u003c/text\u003e\n \u003ctext x=\"155\" y=\"159\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e掛金の所得控除なし\u003c/text\u003e\n  \u003crect x=\"330\" y=\"126\" width=\"270\" height=\"38\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"465\" y=\"145\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"13\" font-weight=\"bold\"\u003e三重の節税効果\u003c/text\u003e\n \u003ctext x=\"465\" y=\"159\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e掛金控除＋運用益非課税＋受取時控除\u003c/text\u003e\n  \u003c!-- 行3: 年間上限 --\u003e\n  \u003crect x=\"20\" y=\"170\" width=\"270\" height=\"38\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"155\" y=\"189\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"13\"\u003e年間最大360万円\u003c/text\u003e\n \u003ctext x=\"155\" y=\"203\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e（生涯1,800万円）\u003c/text\u003e\n  \u003crect x=\"330\" y=\"170\" width=\"270\" height=\"38\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"465\" y=\"189\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"13\"\u003e月1.2〜6.8万円\u003c/text\u003e\n \u003ctext x=\"465\" y=\"203\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\"\u003e（職業により異なる）\u003c/text\u003e\n  \u003c!-- 行4: 向いている人 --\u003e\n  \u003crect x=\"20\" y=\"214\" width=\"270\" height=\"36\" rx=\"4\" fill=\"#f0f7ff\" stroke=\"#4a9eff\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"155\" y=\"231\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"11\" font-weight=\"bold\"\u003e低〜中年収・教育費等も見込む方\u003c/text\u003e\n \u003ctext x=\"155\" y=\"245\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"10\"\u003e公務員・専業主婦（夫）に特に向いている\u003c/text\u003e\n  \u003crect x=\"330\" y=\"214\" width=\"270\" height=\"36\" rx=\"4\" fill=\"#f0fdf4\" stroke=\"#10b981\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"465\" y=\"231\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"11\" font-weight=\"bold\"\u003e年収400万円以上の会社員・自営業\u003c/text\u003e\n \u003ctext x=\"465\" y=\"245\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"10\"\u003e節税効果が特に大きい\u003c/text\u003e\n\u003c/svg\u003e\n\u003c/div\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e新NISA\u003c/th\u003e\n          \u003cth\u003eiDeCo\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e正式名称\u003c/td\u003e\n          \u003ctd\u003e少額投資非課税制度\u003c/td\u003e\n          \u003ctd\u003e個人型確定拠出年金\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e目的\u003c/td\u003e\n          \u003ctd\u003e中長期の資産形成\u003c/td\u003e\n          \u003ctd\u003e老後の年金補完\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e年間拠出上限\u003c/td\u003e\n          \u003ctd\u003e最大360万円\u003c/td\u003e\n          \u003ctd\u003e1.2万〜2.75万円/月（職業による）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e生涯上限\u003c/td\u003e\n          \u003ctd\u003e1,800万円\u003c/td\u003e\n          \u003ctd\u003eなし（拠出期間の上限あり）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e引き出し\u003c/td\u003e\n          \u003ctd\u003eいつでも可能\u003c/td\u003e\n          \u003ctd\u003e原則60歳まで不可\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e税制優遇\u003c/td\u003e\n          \u003ctd\u003e運用益が非課税\u003c/td\u003e\n          \u003ctd\u003e掛金が全額所得控除＋運用益非課税＋受取時控除\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e投資対象\u003c/td\u003e\n          \u003ctd\u003e株式・投信・ETFなど\u003c/td\u003e\n          \u003ctd\u003e投資信託・定期預金・保険など\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e加入条件\u003c/td\u003e\n          \u003ctd\u003e日本在住18歳以上\u003c/td\u003e\n          \u003ctd\u003e20歳以上65歳未満の国民年金被保険者\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eiDeCoの最大の強み\u003c/strong\u003eは掛金が「全額所得控除」になる点です。たとえば月2万円（年24万円）のiDeCo掛金を積み立てると、年収500万円の会社員（所得税20%・住民税10%）は年約7.2万円の税金が戻ってきます。\u003c/p\u003e","title":"NISA iDeCo どっちを先に始めるべき？優先順位を徹底解説【2026年最新版】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n新NISAおすすめ銘柄を初心者向けに完全解説【2026年最新版】 「新NISAを始めたいけれど、どの銘柄を選べばいいかわからない」と悩んでいる方は多いのではないでしょうか。2024年にスタートした新NISAは、旧制度よりも大幅に拡充され、年間最大360万円、生涯投資枠1,800万円まで非課税で運用できる画期的な制度です。しかし、選べる銘柄が膨大にあるため、初心者ほど「どれを選べばいいかわからない」という状態に陥りがちです。\nこの記事では以下のことがわかります。\n新NISAで初心者が選ぶべき銘柄の基準 つみたて投資枠・成長投資枠それぞれのおすすめ銘柄 銘柄選びでよくある失敗と回避法 2026年時点での最新おすすめランキング（比較表付き） 新NISA おすすめ銘柄とは？基本を理解する 定義・仕組み 新NISAは「つみたて投資枠」と「成長投資枠」の2つの枠から構成されています。\n区分 年間投資枠 投資対象 投資方法 つみたて投資枠 120万円 金融庁が認定した投信・ETF 積立のみ 成長投資枠 240万円 株式・投信・ETFなど幅広く 積立・一括 合計 360万円 — — つみたて投資枠で買える銘柄は、金融庁の審査をパスした長期・分散投資に適した投資信託のみです。コスト（信託報酬）が低く、運用実績が一定水準を満たしたファンドに限定されているため、初心者でも安心して選びやすいのが特徴です。\n成長投資枠では個別株やETF、REITなども購入できますが、初心者には引き続きインデックスファンド（投資信託）をおすすめします。\nメリット・デメリット メリット\n運用益・配当金が非課税（通常20.315%の税金がかからない） 生涯1,800万円の非課税枠は売却後に再利用可能 つみたて枠の銘柄は金融庁審査済みで初心者に安全 少額（月100円〜）から始められる デメリット\n元本保証はなく、投資損失のリスクがある 損益通算・損失繰越控除が利用できない（NISAの損失は他口座と相殺不可） 一度に大量の銘柄を購入すると管理が複雑になる 銘柄数が多く選択に迷いやすい 新NISA おすすめ銘柄一覧（比較表） つみたて投資枠：初心者向けおすすめランキング 以下は2026年5月時点での人気・低コストのインデックスファンドです。\n銘柄名 信託報酬（年率） ベンチマーク 純資産残高 特徴 eMAXIS Slim 全世界株式（オール・カントリー） 0.05775% MSCI ACWI 4兆円超 世界約50カ国に分散。最も人気の「オルカン」 eMAXIS Slim 米国株式（S\u0026amp;P500） 0.09372% S\u0026amp;P 500 5兆円超 米国大型株500社に投資。長期リターン実績が高い SBI・V・S\u0026amp;P500インデックス・ファンド 0.0938% S\u0026amp;P 500 1兆円超 バンガード社ETFを通じた低コスト運用 楽天・オールカントリー株式インデックス・ファンド 0.0561% MSCI ACWI 3,000億円超 楽天証券で特に使いやすい全世界株式ファンド ニッセイ・世界株式ファンド（オール・カントリー） 0.05775% MSCI ACWI 1,000億円超 ニッセイブランドの低コスト全世界株式 初心者の第一選択肢：eMAXIS Slim 全世界株式（オール・カントリー）\n「どれを選べばいいかわからない」という方は、まずオルカン1本から始めることをおすすめします。世界中の先進国・新興国株式に自動的に分散投資でき、信託報酬も最低水準クラスです。\n公式サイトで詳細を確認する 成長投資枠：中級者向けおすすめ 銘柄名 種別 信託報酬/コスト 特徴 eMAXIS Slim 先進国株式インデックス 投資信託 0.09889% 先進国23カ国の株式に分散 日経平均高配当利回り株ファンド 投資信託 0.693% 国内高配当株への集中投資 NEXT FUNDS 日経225連動型上場投信 ETF 0.132% 日経平均に連動する国内ETF バンガード・トータル・ワールド・ストックETF（VT） 海外ETF 0.07% 世界最大規模の全世界株式ETF トヨタ自動車（7203） 個別株 売買手数料 日本を代表する大型株。配当利回り約3% 公式サイトで詳細を確認する 銘柄の選び方・注意点 チェックポイント 新NISAで銘柄を選ぶ際には、以下の5つのポイントを確認しましょう。\n1. 信託報酬（コスト）を確認する 年率0.1%以下が理想です。長期運用では手数料の差が複利効果によって大きく影響します。たとえば、0.2%と0.05%の差は30年後に数十万円の差になることもあります。\n2. ベンチマーク（指数）を理解する S\u0026amp;P500（米国大型株500社）、MSCI ACWI（全世界株式）、日経225（日本大型株225社）など、どの指数に連動するかを確認しましょう。\n3. 純資産残高を確認する 純資産残高が少ないファンドは繰上償還（途中で運用終了）のリスクがあります。最低でも100億円以上、できれば1,000億円以上のものを選びましょう。\n4. 運用実績と設定年数を見る 設定から5年以上経過しているファンドの方が、実績データを参考にしやすいです。\n5. 自分の投資目的と期間に合わせる 老後資金（20〜30年後）を目的とするなら、短期的な値動きを気にせず全世界・全米系インデックスで積み立てるのが王道です。\nよくある失敗 失敗1: テーマ型ファンドに飛びつく 「AI関連株ファンド」「ESGファンド」など話題のテーマ型ファンドは信託報酬が高く、ブームが過ぎると低迷するリスクがあります。初心者は避けましょう。\n失敗2: 銘柄を分散しすぎる 10本以上の投資信託を買っても、実は同じ銘柄が重複しているケースが多く、管理コストだけ上がります。オルカン1本でも十分な分散が取れています。\n失敗3: 短期間で売買を繰り返す NISAのメリットは長期保有による非課税効果です。値下がりのたびに売却すると、税制優遇を活かせません。最低5〜10年は保有し続ける前提で選びましょう。\n失敗4: 毎月の積立額を多くしすぎる 生活費を圧迫するほど積立額を設定すると、値下がり時に積立を停止してしまいがちです。余裕をもった金額から始めることが長続きのコツです。\n関連記事: 新NISAの始め方・手順を完全解説 よくある質問（FAQ） Q1. 新NISAで銘柄は何本選べばいいですか？ 初心者なら1〜2本で十分です。オルカン1本か、オルカン＋国内債券ファンドの組み合わせがシンプルで管理しやすいです。\nQ2. S\u0026amp;P500とオルカン、どちらがいいですか？ どちらも優れた選択肢ですが、より分散を重視するならオルカン、米国経済の成長に集中投資したいならS\u0026amp;P500がおすすめです。過去のリターンはS\u0026amp;P500が上回りますが、将来は不確かです。\nQ3. 個別株は新NISAで買った方がいいですか？ 個別株は値動きが大きく、初心者には難しいです。まずはインデックスファンドで資産形成の基礎を作り、余裕資金が生まれてから個別株を検討しましょう。\nQ4. 一括投資と積立、どちらがいいですか？ 初心者には毎月一定額を積み立てる「ドルコスト平均法」がおすすめです。価格の高い時・安い時に自動的に分散購入でき、心理的な負担が少ないです。\nQ5. 銘柄は途中で変えられますか？ 売却して新しい銘柄を購入することは可能ですが、売却した枠は翌年に復活します。頻繁に変えるよりも、長期で同じ銘柄を保有し続ける方が一般的に良い結果につながります。\nQ6. NISAで損した場合はどうなりますか？ NISAの損失は他の口座の利益と相殺（損益通算）できません。これがNISAの数少ないデメリットの一つです。ただし、長期積立であればリスクは時間とともに低減されます。\nQ7. 高配当株はNISAで買う方がいいですか？ 配当金が非課税になるため、高配当株や高配当ファンドとNISAの相性は抜群です。ただし、配当利回りだけで銘柄を選ばず、企業の財務健全性も確認しましょう。\nNISAを始めるなら、**楽天証券**がおすすめ。取扱銘柄数が豊富で、楽天ポイントでの積立投資にも対応しています。\n高配当銘柄に興味がある方は、配当金シミュレーター でNISA非課税の配当収入をシミュレーションできます。\nまとめ・行動の呼びかけ 新NISAで初心者が最初に選ぶべき銘柄は「eMAXIS Slim 全世界株式（オール・カントリー）」一択と言っても過言ではありません。低コスト・高分散・豊富な実績の3拍子が揃っており、月3,000円から始められます。まずは証券口座を開設して、少額から積立をスタートしてみましょう。始めた日が最良の日です。\n今すぐ証券口座を開設して新NISAを始める 関連記事: NISA iDeCo どっちを先に始めるべき？ ※本記事は情報提供を目的としており、特定の金融商品の購入・売却を推奨するものではありません。投資判断はご自身の責任で行ってください。最新情報は各公式サイトでご確認ください。\n関連ツール NISAの積立シミュレーション → NISAシミュレーター 積立投資の複利効果を試算 → 複利計算シミュレーター 配当収入をシミュレーション → 配当金シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター 関連テンプレート 資産運用・家計管理をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す ","permalink":"https://productivity-works.com/ja/posts/nisa-osusume-meigara-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"新nisaおすすめ銘柄を初心者向けに完全解説2026年最新版\"\u003e新NISAおすすめ銘柄を初心者向けに完全解説【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「新NISAを始めたいけれど、どの銘柄を選べばいいかわからない」と悩んでいる方は多いのではないでしょうか。2024年にスタートした新NISAは、旧制度よりも大幅に拡充され、年間最大360万円、生涯投資枠1,800万円まで非課税で運用できる画期的な制度です。しかし、選べる銘柄が膨大にあるため、初心者ほど「どれを選べばいいかわからない」という状態に陥りがちです。\u003c/p\u003e\n\u003cp\u003eこの記事では以下のことがわかります。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e新NISAで初心者が選ぶべき銘柄の基準\u003c/li\u003e\n\u003cli\u003eつみたて投資枠・成長投資枠それぞれのおすすめ銘柄\u003c/li\u003e\n\u003cli\u003e銘柄選びでよくある失敗と回避法\u003c/li\u003e\n\u003cli\u003e2026年時点での最新おすすめランキング（比較表付き）\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"新nisa-おすすめ銘柄とは基本を理解する\"\u003e新NISA おすすめ銘柄とは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003e新NISAは「つみたて投資枠」と「成長投資枠」の2つの枠から構成されています。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e区分\u003c/th\u003e\n          \u003cth\u003e年間投資枠\u003c/th\u003e\n          \u003cth\u003e投資対象\u003c/th\u003e\n          \u003cth\u003e投資方法\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eつみたて投資枠\u003c/td\u003e\n          \u003ctd\u003e120万円\u003c/td\u003e\n          \u003ctd\u003e金融庁が認定した投信・ETF\u003c/td\u003e\n          \u003ctd\u003e積立のみ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e成長投資枠\u003c/td\u003e\n          \u003ctd\u003e240万円\u003c/td\u003e\n          \u003ctd\u003e株式・投信・ETFなど幅広く\u003c/td\u003e\n          \u003ctd\u003e積立・一括\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e合計\u003c/td\u003e\n          \u003ctd\u003e360万円\u003c/td\u003e\n          \u003ctd\u003e—\u003c/td\u003e\n          \u003ctd\u003e—\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eつみたて投資枠で買える銘柄は、金融庁の審査をパスした長期・分散投資に適した投資信託のみです。コスト（信託報酬）が低く、運用実績が一定水準を満たしたファンドに限定されているため、初心者でも安心して選びやすいのが特徴です。\u003c/p\u003e\n\u003cp\u003e成長投資枠では個別株やETF、REITなども購入できますが、初心者には引き続きインデックスファンド（投資信託）をおすすめします。\u003c/p\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e運用益・配当金が非課税（通常20.315%の税金がかからない）\u003c/li\u003e\n\u003cli\u003e生涯1,800万円の非課税枠は売却後に再利用可能\u003c/li\u003e\n\u003cli\u003eつみたて枠の銘柄は金融庁審査済みで初心者に安全\u003c/li\u003e\n\u003cli\u003e少額（月100円〜）から始められる\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eデメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e元本保証はなく、投資損失のリスクがある\u003c/li\u003e\n\u003cli\u003e損益通算・損失繰越控除が利用できない（NISAの損失は他口座と相殺不可）\u003c/li\u003e\n\u003cli\u003e一度に大量の銘柄を購入すると管理が複雑になる\u003c/li\u003e\n\u003cli\u003e銘柄数が多く選択に迷いやすい\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"新nisa-おすすめ銘柄一覧比較表\"\u003e新NISA おすすめ銘柄一覧（比較表）\u003c/h2\u003e\n\u003ch3 id=\"つみたて投資枠初心者向けおすすめランキング\"\u003eつみたて投資枠：初心者向けおすすめランキング\u003c/h3\u003e\n\u003cp\u003e以下は2026年5月時点での人気・低コストのインデックスファンドです。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e銘柄名\u003c/th\u003e\n          \u003cth\u003e信託報酬（年率）\u003c/th\u003e\n          \u003cth\u003eベンチマーク\u003c/th\u003e\n          \u003cth\u003e純資産残高\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eeMAXIS Slim 全世界株式（オール・カントリー）\u003c/td\u003e\n          \u003ctd\u003e0.05775%\u003c/td\u003e\n          \u003ctd\u003eMSCI ACWI\u003c/td\u003e\n          \u003ctd\u003e4兆円超\u003c/td\u003e\n          \u003ctd\u003e世界約50カ国に分散。最も人気の「オルカン」\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eeMAXIS Slim 米国株式（S\u0026amp;P500）\u003c/td\u003e\n          \u003ctd\u003e0.09372%\u003c/td\u003e\n          \u003ctd\u003eS\u0026amp;P 500\u003c/td\u003e\n          \u003ctd\u003e5兆円超\u003c/td\u003e\n          \u003ctd\u003e米国大型株500社に投資。長期リターン実績が高い\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSBI・V・S\u0026amp;P500インデックス・ファンド\u003c/td\u003e\n          \u003ctd\u003e0.0938%\u003c/td\u003e\n          \u003ctd\u003eS\u0026amp;P 500\u003c/td\u003e\n          \u003ctd\u003e1兆円超\u003c/td\u003e\n          \u003ctd\u003eバンガード社ETFを通じた低コスト運用\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e楽天・オールカントリー株式インデックス・ファンド\u003c/td\u003e\n          \u003ctd\u003e0.0561%\u003c/td\u003e\n          \u003ctd\u003eMSCI ACWI\u003c/td\u003e\n          \u003ctd\u003e3,000億円超\u003c/td\u003e\n          \u003ctd\u003e楽天証券で特に使いやすい全世界株式ファンド\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eニッセイ・世界株式ファンド（オール・カントリー）\u003c/td\u003e\n          \u003ctd\u003e0.05775%\u003c/td\u003e\n          \u003ctd\u003eMSCI ACWI\u003c/td\u003e\n          \u003ctd\u003e1,000億円超\u003c/td\u003e\n          \u003ctd\u003eニッセイブランドの低コスト全世界株式\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e初心者の第一選択肢：eMAXIS Slim 全世界株式（オール・カントリー）\u003c/strong\u003e\u003c/p\u003e","title":"新NISA おすすめ銘柄 初心者向け完全ガイド【2026年最新版】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nNISA枠を使い切れない場合どうする？賢い対処法と活用戦略【2026年版】 「新NISAを始めたけど、年間の非課税枠を使い切れていない…」「枠を使い切れないと損なの？」と心配している方は多いのではないでしょうか。結論から言えば、NISA枠を使い切れなくても焦る必要は全くありません。ただし、枠を上手に活用するいくつかの戦略を知っておくと、将来の資産形成がより効率的になります。\nこの記事では以下のことがわかります。\nNISA枠が使い切れない場合のルールと影響 余った非課税枠を活用する具体的な戦略 成長投資枠とつみたて投資枠の使い分け NISA枠を最大限活用するためのロードマップ NISA枠の基本ルールを理解する 定義・仕組み 新NISAの非課税枠は、つみたて投資枠（年120万円）と成長投資枠（年240万円）の合計年360万円です。この枠は年間投資上限であり、使い切れなかった分は翌年に繰り越せません。\nしかし、新NISAで重要なのは**生涯投資枠1,800万円（うち成長投資枠は1,200万円まで）**です。この枠は売却した分が翌年以降に再び使えるため、急いで使い切る必要はありません。\n新NISAの枠のルール整理\n枠の種類 年間上限 生涯上限 使い切れなかった場合 つみたて投資枠 120万円 1,800万円（成長枠と合算） 翌年に繰り越し不可 成長投資枠 240万円 1,200万円 翌年に繰り越し不可 合計 360万円 1,800万円 年間枠は消滅 売却後の復活 — 売却した分の枠が翌年復活 生涯枠は再利用可 ポイント: 「年間360万円を使い切れない」のは当然で、それは問題ではありません。生涯枠1,800万円を将来的にしっかり活用できれば十分です。\nメリット・デメリット 余った枠を放置した場合のメリット・デメリット\nメリット デメリット 無理のない資金管理ができる 非課税で運用できる期間・金額が減る 生活資金を守れる インフレに負けるリスクがある現金が増える 心理的な安定が続く 将来の生涯枠が詰まる可能性がある NISA枠が使い切れない場合の対処法一覧（比較表） 余った枠の活用戦略 戦略 対象者 メリット デメリット 成長投資枠で一括追加投資 余剰資金がある 年内に非課税枠を多く使える 一括投資はリスクが高い ボーナス月の増額積立 会社員 賞与を有効活用 管理が手間 成長投資枠でETF購入 投資中級者 低コストでの一括投資 株式リスクあり 高配当株・REITへの投資 配当収入を求める方 配当が非課税になる 個別銘柄リスクあり iDeCoを活用して節税強化 会社員・自営業 所得控除で節税 60歳まで引き出し不可 翌年以降に枠を繰り越す（気にしない） 資金的余裕がない方 無理なく続けられる 年間枠は消滅するが問題なし 年間360万円の枠を使い切るまでの道のり 年収・状況によって枠を使い切るまでの期間は異なります。\n月積立額 年間投資額 生涯枠到達年数 月3万円 36万円 約50年 月5万円 60万円 30年 月10万円（上限） 120万円（つみたて枠上限） 15年 月30万円（成長枠含む） 360万円（上限） 5年 多くの一般的な会社員にとって、年360万円の枠を毎年使い切るのは難しいです。焦らず自分のペースで積み立てることが大切です。\n今すぐNISA口座を開設する 余った枠の賢い活用法・注意点 チェックポイント 活用法1: 成長投資枠でスポット投資（一括追加）\nつみたて投資枠の積立設定をしつつ、年末に余った枠を使って成長投資枠でインデックスファンドを一括購入する方法です。ただし、相場が高値圏にある時の一括投資はリスクが高いため、市場環境を見ながら判断しましょう。\n活用法2: ボーナス月の増額設定\n証券会社によっては、特定月（ボーナス支給月）だけ積立額を増やす「ボーナス月増額設定」が利用できます。夏・冬のボーナス月に10〜30万円分を追加することで、年間の枠をより多く活用できます。\n活用法3: 成長投資枠でETFや高配当株投資\n成長投資枠では個別株・ETF・REITも購入できます。配当金や分配金もNISA内では非課税になるため、高配当株や不動産投資信託（REIT）との相性が良いです。\n活用法4: iDeCoとの連携で総合的に最適化\nNISAの枠が使い切れないなら、iDeCoの掛金を増やすことも検討してください。iDeCoは掛金の所得控除という別のメリットがあります。\n活用法5: 「使い切れなくてOK」という心構えを持つ\n生涯枠1,800万円は数十年かけて使う枠です。年間枠を使い切れなくても、長期的な視点で見れば全く問題ありません。無理な投資より、無理のない継続が大切です。\nよくある失敗 失敗1: 枠を使い切ろうと無理な一括投資をする 「もったいない」という気持ちから、年末に余った枠を使い切ろうと無計画な一括投資をすると、高値掴みのリスクがあります。\n失敗2: NISA枠の翌年繰越ができると勘違いする 年間枠（360万円）は翌年に繰り越せません。「今年使わなかった分は来年追加で使える」は誤解です。ただし、売却後の枠の再利用は可能です。\n失敗3: 成長投資枠を使わずつみたて枠だけで満足する 年120万円のつみたて投資枠しか使っていない方は、余裕があれば成長投資枠（年240万円）も活用することで、より早く生涯枠を活用できます。\n失敗4: NISA外の課税口座に多く残す NISAの枠が余っているのに、課税口座で投資信託を購入するのは税制優遇の観点から非効率です。まずNISA枠を優先的に使いましょう。\n関連記事: 積立NISAで毎月いくら積み立てるべき？ よくある質問（FAQ） Q1. NISA枠を使い切れないと損ですか？ 年間枠は消滅しますが、投資できる余剰資金がないのに無理をする必要はありません。大切なのは生活資金・緊急予備資金を確保した上で、余裕資金で投資を続けることです。\nQ2. 成長投資枠とつみたて投資枠、どちらを優先して使うべきですか？ 初心者にはつみたて投資枠を優先することをおすすめします。金融庁審査済みの低コストファンドに限定されており、初心者でも安心です。余裕が出たら成長投資枠を活用しましょう。\nQ3. NISA枠の1,800万円は死ぬまでに使い切る必要がありますか？ 必ずしも使い切る必要はありませんが、枠を最大限活用した方が非課税の恩恵を長く受けられます。目的（老後資金・教育資金など）に応じて計画的に活用しましょう。\nQ4. 売却するとNISA枠は復活しますか？ はい、売却した分の非課税枠は翌年に復活します（生涯枠のカウントから外れます）。ただし年間枠の上限（360万円）は変わりません。\nQ5. NISA口座で損した場合はどうなりますか？ NISA内の損失は他の課税口座の利益と損益通算できません。ただし、売却して損が確定した分の枠は翌年復活します。\nQ6. 配偶者の分も合わせてNISA枠を使えますか？ NISAは1人1口座のため、配偶者分は配偶者自身の口座で使う必要があります。家族全員でNISA口座を持つことで、家族全体の非課税枠を増やすことができます。\nNISA枠を効率的に使い切るなら、**楽天証券 **のクレカ積立がおすすめ。毎月自動で積立しながら楽天ポイントも貯まります。\nまとめ・行動の呼びかけ 新NISAの年間枠360万円を使い切れないことを心配する必要はありません。大切なのは、無理のない金額で長く続けることです。余力があれば成長投資枠の活用・ボーナス月の追加投資・iDeCoとの連携など、さまざまな戦略で総合的に資産形成を最適化できます。まずは現在の積立設定を見直して、できる範囲で少し増やすことから始めてみましょう。\n今すぐNISAの積立設定を見直す 関連記事: 新NISAの始め方・手順を完全解説 関連ツール NISA枠の活用効果をシミュレーション → NISAシミュレーター 積立の複利効果を年数別に確認 → 複利計算シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター 教育費の総額を計算 → 教育費シミュレーター ※本記事は情報提供を目的としており、特定の金融商品の購入・売却を推奨するものではありません。投資判断はご自身の責任で行ってください。最新情報は各公式サイトでご確認ください。\n関連テンプレート 資産運用・家計管理をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す ","permalink":"https://productivity-works.com/ja/posts/nisa-%E6%9E%A0-%E4%BD%BF%E3%81%84%E5%88%87%E3%82%8C%E3%81%AA%E3%81%84-%E3%81%A9%E3%81%86%E3%81%99%E3%82%8B/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"nisa枠を使い切れない場合どうする賢い対処法と活用戦略2026年版\"\u003eNISA枠を使い切れない場合どうする？賢い対処法と活用戦略【2026年版】\u003c/h1\u003e\n\u003cp\u003e「新NISAを始めたけど、年間の非課税枠を使い切れていない…」「枠を使い切れないと損なの？」と心配している方は多いのではないでしょうか。結論から言えば、NISA枠を使い切れなくても焦る必要は全くありません。ただし、枠を上手に活用するいくつかの戦略を知っておくと、将来の資産形成がより効率的になります。\u003c/p\u003e\n\u003cp\u003eこの記事では以下のことがわかります。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNISA枠が使い切れない場合のルールと影響\u003c/li\u003e\n\u003cli\u003e余った非課税枠を活用する具体的な戦略\u003c/li\u003e\n\u003cli\u003e成長投資枠とつみたて投資枠の使い分け\u003c/li\u003e\n\u003cli\u003eNISA枠を最大限活用するためのロードマップ\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"nisa枠の基本ルールを理解する\"\u003eNISA枠の基本ルールを理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003e新NISAの非課税枠は、つみたて投資枠（年120万円）と成長投資枠（年240万円）の合計年360万円です。この枠は\u003cstrong\u003e年間投資上限\u003c/strong\u003eであり、使い切れなかった分は\u003cstrong\u003e翌年に繰り越せません\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003eしかし、新NISAで重要なのは**生涯投資枠1,800万円（うち成長投資枠は1,200万円まで）**です。この枠は売却した分が翌年以降に再び使えるため、急いで使い切る必要はありません。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e新NISAの枠のルール整理\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e枠の種類\u003c/th\u003e\n          \u003cth\u003e年間上限\u003c/th\u003e\n          \u003cth\u003e生涯上限\u003c/th\u003e\n          \u003cth\u003e使い切れなかった場合\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eつみたて投資枠\u003c/td\u003e\n          \u003ctd\u003e120万円\u003c/td\u003e\n          \u003ctd\u003e1,800万円（成長枠と合算）\u003c/td\u003e\n          \u003ctd\u003e翌年に繰り越し不可\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e成長投資枠\u003c/td\u003e\n          \u003ctd\u003e240万円\u003c/td\u003e\n          \u003ctd\u003e1,200万円\u003c/td\u003e\n          \u003ctd\u003e翌年に繰り越し不可\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e合計\u003c/td\u003e\n          \u003ctd\u003e360万円\u003c/td\u003e\n          \u003ctd\u003e1,800万円\u003c/td\u003e\n          \u003ctd\u003e年間枠は消滅\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e売却後の復活\u003c/td\u003e\n          \u003ctd\u003e—\u003c/td\u003e\n          \u003ctd\u003e売却した分の枠が翌年復活\u003c/td\u003e\n          \u003ctd\u003e生涯枠は再利用可\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eポイント:\u003c/strong\u003e 「年間360万円を使い切れない」のは当然で、それは問題ではありません。生涯枠1,800万円を将来的にしっかり活用できれば十分です。\u003c/p\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e余った枠を放置した場合のメリット・デメリット\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eメリット\u003c/th\u003e\n          \u003cth\u003eデメリット\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e無理のない資金管理ができる\u003c/td\u003e\n          \u003ctd\u003e非課税で運用できる期間・金額が減る\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e生活資金を守れる\u003c/td\u003e\n          \u003ctd\u003eインフレに負けるリスクがある現金が増える\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e心理的な安定が続く\u003c/td\u003e\n          \u003ctd\u003e将来の生涯枠が詰まる可能性がある\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"nisa枠が使い切れない場合の対処法一覧比較表\"\u003eNISA枠が使い切れない場合の対処法一覧（比較表）\u003c/h2\u003e\n\u003ch3 id=\"余った枠の活用戦略\"\u003e余った枠の活用戦略\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e戦略\u003c/th\u003e\n          \u003cth\u003e対象者\u003c/th\u003e\n          \u003cth\u003eメリット\u003c/th\u003e\n          \u003cth\u003eデメリット\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e成長投資枠で一括追加投資\u003c/td\u003e\n          \u003ctd\u003e余剰資金がある\u003c/td\u003e\n          \u003ctd\u003e年内に非課税枠を多く使える\u003c/td\u003e\n          \u003ctd\u003e一括投資はリスクが高い\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eボーナス月の増額積立\u003c/td\u003e\n          \u003ctd\u003e会社員\u003c/td\u003e\n          \u003ctd\u003e賞与を有効活用\u003c/td\u003e\n          \u003ctd\u003e管理が手間\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e成長投資枠でETF購入\u003c/td\u003e\n          \u003ctd\u003e投資中級者\u003c/td\u003e\n          \u003ctd\u003e低コストでの一括投資\u003c/td\u003e\n          \u003ctd\u003e株式リスクあり\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e高配当株・REITへの投資\u003c/td\u003e\n          \u003ctd\u003e配当収入を求める方\u003c/td\u003e\n          \u003ctd\u003e配当が非課税になる\u003c/td\u003e\n          \u003ctd\u003e個別銘柄リスクあり\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eiDeCoを活用して節税強化\u003c/td\u003e\n          \u003ctd\u003e会社員・自営業\u003c/td\u003e\n          \u003ctd\u003e所得控除で節税\u003c/td\u003e\n          \u003ctd\u003e60歳まで引き出し不可\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e翌年以降に枠を繰り越す（気にしない）\u003c/td\u003e\n          \u003ctd\u003e資金的余裕がない方\u003c/td\u003e\n          \u003ctd\u003e無理なく続けられる\u003c/td\u003e\n          \u003ctd\u003e年間枠は消滅するが問題なし\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"年間360万円の枠を使い切るまでの道のり\"\u003e年間360万円の枠を使い切るまでの道のり\u003c/h3\u003e\n\u003cp\u003e年収・状況によって枠を使い切るまでの期間は異なります。\u003c/p\u003e","title":"NISA枠を使い切れない場合どうする？賢い対処法と活用戦略【2026年版】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nアフィリエイト開示: 本記事には一部アフィリエイトリンクが含まれます。リンク経由でご購入いただいた場合、当サイトに手数料が発生することがありますが、読者の方への費用は一切変わりません。紹介する製品・サービスはすべて編集部が実際に検証したものに限っています。\nフリーランスの確定申告、毎年バタバタしていませんか？ 「また2月になってしまった」「領収書がどこにあるか分からない」「去年の収入を全部集計するのに2日かかった」——フリーランスとして働く人の多くが、毎年の確定申告シーズンにこうした悩みを抱えています。\n確定申告は年に一度ですが、その準備は365日続きます。請求書を出した瞬間、経費を使った瞬間——そのひとつひとつを記録しておかないと、3月の締め切り直前に地獄を見ることになります。\nそこで本記事では、Notionをフリーランスの確定申告管理ツールとして徹底活用する方法を解説します。会計ソフトに払う月額料金を節約しながら、申告書の作成に必要な情報をすべてNotionで一元管理できるようになります。\nなぜNotionが確定申告管理に向いているのか 1. データベース機能が家計簿・帳簿代わりになる Notionのデータベース機能は、Excelのような表計算と、Notionならではの柔軟な属性管理を組み合わせています。「日付」「金額」「取引先」「カテゴリ」「領収書画像」を1行に収められるため、手書き帳簿やExcel管理と比べて圧倒的に検索・集計がしやすくなります。\n2. 領収書の画像をそのまま添付できる Notionのページには画像を直接貼り付けられます。スマートフォンで領収書を撮影して、その場でNotionに添付する習慣をつければ、「あの領収書がない」という事態を防げます。\n3. どこからでもアクセスできる Notionはクラウドベースのアプリです。自宅のPC、外出先のスマートフォン、カフェのノートPC——どこからでも同じデータにアクセスして記録できます。フリーランスのように働く場所が変わる人にとって、これは大きなメリットです。\n4. 無料プランでも十分使える Notionの無料プランは個人利用であれば機能制限がほとんどありません。確定申告管理に必要なデータベース機能、ページ作成、ファイル添付はすべて無料で利用できます。\nNotionで構築する確定申告管理システムの全体像 フリーランスの確定申告に必要な情報は大きく5つに分類できます。\n収入管理（売上・請求書） 経費管理（必要経費・領収書） 取引先管理（クライアント情報） スケジュール管理（申告期限・支払期限） 書類管理（控除証明書・源泉徴収票など） これらをNotionの「ページ」と「データベース」を組み合わせて構築していきます。\nステップ1：収入管理データベースを作る 基本構成 Notionで新しいページを作成し、「収入管理」という名前をつけます。そのページ内にフルページデータベース（Table形式）を作成し、以下のプロパティを設定します。\nプロパティ名 種類 説明 案件名 タイトル 何の仕事で得た収入か 取引先 テキスト（または関連） クライアント名 請求日 日付 請求書を発行した日 入金日 日付 実際に入金された日 請求金額 数値 消費税込みの請求額 消費税額 数値 消費税分 源泉徴収税額 数値 源泉徴収された金額 実際入金額 数値 実際に振り込まれた金額 ステータス セレクト 請求済み／入金済み／未請求 請求書 ファイル 請求書PDFを添付 備考 テキスト メモ欄 年度別フィルターの設定 データベースのフィルター機能を使って、「入金日が2025年1月1日〜2025年12月31日」という条件でフィルタリングすれば、その年度の収入だけを表示できます。確定申告は「その年に受け取った収入」が対象になるため（現金主義の場合）、入金日で管理するのが基本です。\n集計ビューの活用 テーブルの下部にある「計算」機能を使って、「請求金額の合計」「実際入金額の合計」を自動計算させましょう。年間の総収入が一目でわかるようになります。\nステップ2：経費管理データベースを作る フリーランスが計上できる主な経費カテゴリ 経費管理データベースを作る前に、フリーランスが計上できる経費の種類を整理しておきましょう。\n仕事関連費用\n通信費（スマートフォン代、インターネット代） 交通費（打ち合わせへの移動費） 書籍・資料代（仕事に関連する本、雑誌、オンライン記事の有料購読） ソフトウェア費用（Adobe CC、Notion有料プラン、各種SaaSツール） 機器・備品（PC、周辺機器、文房具） 作業環境費用\n家賃（自宅兼事務所の場合、使用割合分） 水道光熱費（同上） コワーキングスペース利用料 その他\n接待交際費（クライアントとの食事代など） 広告宣伝費（SNS広告、名刺代など） 研修・セミナー参加費 経費データベースのプロパティ プロパティ名 種類 説明 品目 タイトル 何を買ったか カテゴリ セレクト 上記のカテゴリから選択 日付 日付 購入日・支払日 金額 数値 税込み金額 消費税率 セレクト 8%または10% 支払方法 セレクト 現金/クレカ/銀行振込など 領収書 ファイル 領収書画像を添付 按分率 数値 0〜100（自宅兼事務所の場合） 経費計上額 数式 金額×按分率÷100 備考 テキスト メモ 数式で経費計上額を自動計算 「経費計上額」プロパティに数式を設定します。按分が必要ない場合は金額をそのまま、按分が必要な場合は金額に按分率を掛けた値を表示します。\nif(prop(\u0026#34;按分率\u0026#34;) \u0026gt; 0, prop(\u0026#34;金額\u0026#34;) * prop(\u0026#34;按分率\u0026#34;) / 100, prop(\u0026#34;金額\u0026#34;)) この数式を設定しておけば、自宅の家賃や光熱費も正確に按分して経費計上額を計算できます。\n領収書は毎日夜にNotionへ 経費管理で最も重要な習慣は「当日中に領収書をNotionに記録すること」です。レシートをもらったらスマートフォンで撮影し、その日のうちにNotionの経費データベースに追加します。これを続けるだけで、確定申告シーズンの作業が劇的に楽になります。\nステップ3：取引先データベースで源泉徴収を管理 フリーランスが報酬を受け取る際、特定の業種（ライター、デザイナー、翻訳者など）では取引先が源泉徴収税を天引きします。この源泉徴収税は確定申告で取り戻せる（または精算できる）ため、正確に記録しておく必要があります。\n取引先データベースのプロパティ プロパティ名 種類 説明 会社名 タイトル クライアント企業名 担当者名 テキスト 担当者 メールアドレス メール 連絡先 支払調書送付 チェックボックス 支払調書を受け取ったか 年間源泉徴収額 数値 その年の源泉徴収合計 請求書宛名 テキスト 正式な請求書の宛名 収入管理データベースと連携させる Notionのリレーション機能を使って、収入管理データベースの「取引先」プロパティと取引先データベースを連携させます。これにより、各取引先の年間売上、源泉徴収額の合計を自動集計できます。\nステップ4：確定申告スケジュール管理 確定申告には複数の重要な期限があります。これをNotionのカレンダービューで管理しましょう。\n主要な期限（2026年分の場合） イベント 時期 年間収支の仮集計 毎年1月上旬 支払調書の受け取り確認 1月末〜2月初旬 生命保険料控除証明書の確認 1月末 確定申告書類の作成 2月中旬 確定申告書の提出期限 3月15日 納税（所得税）期限 3月15日 振替納税の場合 4月下旬 住民税の通知 6月頃 予定納税（第1期） 7月末 予定納税（第2期） 11月末 これらをNotionのカレンダーデータベースに入力し、リマインダーを設定しておきます。\nステップ5：書類管理ページで控除証明書を一元管理 確定申告では、様々な控除証明書が必要になります。\n生命保険料控除証明書 地震保険料控除証明書 医療費の領収書 社会保険料の証明書 寄附金受領証明書（ふるさと納税など） iDeCo（個人型確定拠出年金）の証明書 これらをNotionの「書類管理」ページにまとめます。各書類をスキャン・撮影してNotionに添付し、「受取済み」「未受取」のステータスを管理すれば、申告直前に「あの証明書がない」となる事態を防げます。\n月次レビューの習慣をつくる 確定申告の準備を年末に一気にやるのではなく、毎月少しずつ進める習慣が重要です。月次レビューのチェックリストをNotionに作りましょう。\n月次レビューチェックリスト □ 今月の収入をすべて記録した □ 今月の経費（領収書）をすべて記録した □ 未払いの請求書を確認した □ クレジットカードの明細を確認して経費を漏れなく記録した □ 銀行の入金を確認して収入と照合した □ 来月の期限・スケジュールを確認した このチェックリストをNotionのテンプレート機能で作っておけば、毎月ワンクリックで新しいチェックリストページを作成できます。\nよくある疑問と回答 Q. Notionは確定申告の「帳簿」として認められますか？ 税務署が認める帳簿の要件は、「取引の内容・金額・日付が記録されていること」です。Notionのデータベースはこの要件を満たしますが、法的に認められた会計帳簿ソフトではありません。白色申告であればNotionで管理した記録を元に申告書を作成することは問題ありませんが、青色申告（特に65万円控除を受ける場合）は複式簿記の要件があるため、freee ・マネーフォワードなどの会計ソフトを別途使用することをお勧めします。\nNotionは「補助的な管理ツール」として、会計ソフトへの入力作業を楽にするために使うのが最も現実的な活用法です。\nQ. スマートフォンアプリからも使えますか？ はい。NotionはiOS・Android両方に対応した公式アプリがあります。外出先で領収書を撮影してその場でNotionに添付するという使い方が特に便利です。\nQ. データが消えた場合のバックアップは？ Notionには自動バックアップ機能はありませんが、データベースをCSVでエクスポートする機能があります。月に一度、CSVでエクスポートしてローカルに保存しておくことをお勧めします。\nまとめ：Notionで年中準備する確定申告 Notionを使った確定申告管理の最大のメリットは「思い立った時にすぐ記録できる」ことです。会計ソフトのように毎回ログインして、勘定科目を調べながら入力する手間がなく、日常的な記録のハードルが低い。\nこの記事で紹介した5つのデータベース（収入・経費・取引先・スケジュール・書類）を構築して、毎月のレビュー習慣を続ければ、来年の確定申告シーズンは今年と全く違う体験になるはずです。\n始め方のポイント:\nまず「収入管理」と「経費管理」の2つのデータベースだけ作る 今日から領収書の撮影・添付を始める 月末に30分のレビュー時間を確保する 完璧なシステムを最初から作ろうとせず、シンプルな状態から始めて少しずつ改善していくのがコツです。フリーランスの確定申告管理、Notionで今日から始めてみましょう。\n本記事の内容は執筆時点（2026年5月）の税制・制度に基づいています。税務の詳細については税理士や税務署にご相談ください。\n関連ツール 副業の税金を計算 → 副業税金計算シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連記事 Notion使い方完全ガイド：初心者向けセットアップ2026 Notion完全ガイド：初心者向けセットアップと活用術 AI×確定申告 フリーランス完全自動化ガイド2026 副業フリーランスがfreeeで青色申告65万控除を取る方法 フリーランス開業届の書き方と提出方法 関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 ","permalink":"https://productivity-works.com/ja/posts/notion-kakuteishinkoku-freelance/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eアフィリエイト開示\u003c/strong\u003e: 本記事には一部アフィリエイトリンクが含まれます。リンク経由でご購入いただいた場合、当サイトに手数料が発生することがありますが、読者の方への費用は一切変わりません。紹介する製品・サービスはすべて編集部が実際に検証したものに限っています。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"フリーランスの確定申告毎年バタバタしていませんか\"\u003eフリーランスの確定申告、毎年バタバタしていませんか？\u003c/h2\u003e\n\u003cp\u003e「また2月になってしまった」「領収書がどこにあるか分からない」「去年の収入を全部集計するのに2日かかった」——フリーランスとして働く人の多くが、毎年の確定申告シーズンにこうした悩みを抱えています。\u003c/p\u003e\n\u003cp\u003e確定申告は年に一度ですが、その準備は365日続きます。請求書を出した瞬間、経費を使った瞬間——そのひとつひとつを記録しておかないと、3月の締め切り直前に地獄を見ることになります。\u003c/p\u003e\n\u003cp\u003eそこで本記事では、\u003cstrong\u003eNotionをフリーランスの確定申告管理ツールとして徹底活用する方法\u003c/strong\u003eを解説します。会計ソフトに払う月額料金を節約しながら、申告書の作成に必要な情報をすべてNotionで一元管理できるようになります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"なぜnotionが確定申告管理に向いているのか\"\u003eなぜNotionが確定申告管理に向いているのか\u003c/h2\u003e\n\u003ch3 id=\"1-データベース機能が家計簿帳簿代わりになる\"\u003e1. データベース機能が家計簿・帳簿代わりになる\u003c/h3\u003e\n\u003cp\u003eNotionのデータベース機能は、Excelのような表計算と、Notionならではの柔軟な属性管理を組み合わせています。「日付」「金額」「取引先」「カテゴリ」「領収書画像」を1行に収められるため、手書き帳簿やExcel管理と比べて圧倒的に検索・集計がしやすくなります。\u003c/p\u003e\n\u003ch3 id=\"2-領収書の画像をそのまま添付できる\"\u003e2. 領収書の画像をそのまま添付できる\u003c/h3\u003e\n\u003cp\u003eNotionのページには画像を直接貼り付けられます。スマートフォンで領収書を撮影して、その場でNotionに添付する習慣をつければ、「あの領収書がない」という事態を防げます。\u003c/p\u003e\n\u003ch3 id=\"3-どこからでもアクセスできる\"\u003e3. どこからでもアクセスできる\u003c/h3\u003e\n\u003cp\u003eNotionはクラウドベースのアプリです。自宅のPC、外出先のスマートフォン、カフェのノートPC——どこからでも同じデータにアクセスして記録できます。フリーランスのように働く場所が変わる人にとって、これは大きなメリットです。\u003c/p\u003e\n\u003ch3 id=\"4-無料プランでも十分使える\"\u003e4. 無料プランでも十分使える\u003c/h3\u003e\n\u003cp\u003eNotionの無料プランは個人利用であれば機能制限がほとんどありません。確定申告管理に必要なデータベース機能、ページ作成、ファイル添付はすべて無料で利用できます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"notionで構築する確定申告管理システムの全体像\"\u003eNotionで構築する確定申告管理システムの全体像\u003c/h2\u003e\n\u003cp\u003eフリーランスの確定申告に必要な情報は大きく5つに分類できます。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e収入管理\u003c/strong\u003e（売上・請求書）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e経費管理\u003c/strong\u003e（必要経費・領収書）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e取引先管理\u003c/strong\u003e（クライアント情報）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eスケジュール管理\u003c/strong\u003e（申告期限・支払期限）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e書類管理\u003c/strong\u003e（控除証明書・源泉徴収票など）\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eこれらをNotionの「ページ」と「データベース」を組み合わせて構築していきます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ステップ1収入管理データベースを作る\"\u003eステップ1：収入管理データベースを作る\u003c/h2\u003e\n\u003ch3 id=\"基本構成\"\u003e基本構成\u003c/h3\u003e\n\u003cp\u003eNotionで新しいページを作成し、「収入管理」という名前をつけます。そのページ内にフルページデータベース（Table形式）を作成し、以下のプロパティを設定します。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eプロパティ名\u003c/th\u003e\n          \u003cth\u003e種類\u003c/th\u003e\n          \u003cth\u003e説明\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e案件名\u003c/td\u003e\n          \u003ctd\u003eタイトル\u003c/td\u003e\n          \u003ctd\u003e何の仕事で得た収入か\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e取引先\u003c/td\u003e\n          \u003ctd\u003eテキスト（または関連）\u003c/td\u003e\n          \u003ctd\u003eクライアント名\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e請求日\u003c/td\u003e\n          \u003ctd\u003e日付\u003c/td\u003e\n          \u003ctd\u003e請求書を発行した日\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e入金日\u003c/td\u003e\n          \u003ctd\u003e日付\u003c/td\u003e\n          \u003ctd\u003e実際に入金された日\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e請求金額\u003c/td\u003e\n          \u003ctd\u003e数値\u003c/td\u003e\n          \u003ctd\u003e消費税込みの請求額\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e消費税額\u003c/td\u003e\n          \u003ctd\u003e数値\u003c/td\u003e\n          \u003ctd\u003e消費税分\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e源泉徴収税額\u003c/td\u003e\n          \u003ctd\u003e数値\u003c/td\u003e\n          \u003ctd\u003e源泉徴収された金額\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e実際入金額\u003c/td\u003e\n          \u003ctd\u003e数値\u003c/td\u003e\n          \u003ctd\u003e実際に振り込まれた金額\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eステータス\u003c/td\u003e\n          \u003ctd\u003eセレクト\u003c/td\u003e\n          \u003ctd\u003e請求済み／入金済み／未請求\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e請求書\u003c/td\u003e\n          \u003ctd\u003eファイル\u003c/td\u003e\n          \u003ctd\u003e請求書PDFを添付\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e備考\u003c/td\u003e\n          \u003ctd\u003eテキスト\u003c/td\u003e\n          \u003ctd\u003eメモ欄\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"年度別フィルターの設定\"\u003e年度別フィルターの設定\u003c/h3\u003e\n\u003cp\u003eデータベースのフィルター機能を使って、「入金日が2025年1月1日〜2025年12月31日」という条件でフィルタリングすれば、その年度の収入だけを表示できます。確定申告は「その年に受け取った収入」が対象になるため（現金主義の場合）、入金日で管理するのが基本です。\u003c/p\u003e","title":"Notionでフリーランスの確定申告を完全管理する方法【テンプレート付き】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「Notionを始めたけど何ができるかわからない」「機能が多すぎてどこから手をつけていいか…」——そんな方のために、Notionの使い方を初心者向けに完全解説します。2026年の最新UIに対応した、ゼロからスタートできるガイドです。\nNotionとは何ができるツールか Notionは「ノート・タスク・データベース・Wiki・プロジェクト管理」を1つのアプリで完結させられるオールインワン生産性ツールです。\n代替できる既存ツール Notionでの機能 Evernote・メモ帳 ページ（ノート） Trello・Jira カンバンボード・タスク管理 Excel・スプレッドシート データベース Confluence 社内Wiki Google Docs 文書作成・共有 Airtable リレーショナルデータベース **個人利用は無料プランで十分。**チームで使う場合もPlus（月額約2,000円/人）から使えます。\nNotion セットアップ：最初の5ステップ Step 1：アカウントを作成する notion.so にアクセス Googleアカウント・メールアドレスで無料登録 「個人利用」を選択 テンプレートの選択（後から変更可） Step 2：ワークスペースを理解する Notionの画面構成：\nサイドバー（左）：ページ一覧・ナビゲーション メインエリア（中央）：選択したページの内容 設定アイコン：テーマ・言語・アカウント設定 Step 3：最初のページを作成する サイドバーの「＋ 新しいページ」をクリックしてページを作成します。\nページとは：Notionの最も基本的な単位。普通のメモ・ドキュメントにあたります。\nStep 4：ブロックを理解する Notionのコンテンツはすべて「ブロック」で構成されています。\nブロックの種類 使い方 テキスト 普通の文章 見出し（H1/H2/H3） セクション分け 箇条書き リスト 番号付きリスト 手順・ランキング チェックボックス TODOリスト 画像 画像の挿入 テーブル 簡単な表 データベース 高度な管理機能 コードブロック プログラムコードの挿入 ブロックは「/（スラッシュ）」を入力するとメニューが表示されます。\nStep 5：階層構造を作る ページの中にページを入れ子にすることで、フォルダのような階層管理ができます。\n例：\n仕事 ├── プロジェクトA │ ├── 議事録（2026-05-14） │ └── タスクリスト └── 週次レポート 個人 ├── 読書ノート └── 目標管理 Notionデータベースの使い方 データベースはNotionの真髄です。Excelのような表を、複数のビュー（見た目）で表示できます。\nデータベースの作成方法 ページ内で「/database」と入力 「データベース - フル」を選択 列（プロパティ）を設定する プロパティの種類 プロパティ名 用途 テキスト 名前・説明 数値 金額・スコア セレクト カテゴリ・ステータス（1つ選択） マルチセレクト タグ（複数選択） 日付 締切・予定日 チェックボックス 完了/未完了 URL リンク 担当者 チームメンバー 計算式 自動計算 ビューの切り替え データベースは同じデータを複数の「見た目」で表示できます。\nビュー 見た目 向いている用途 テーブル スプレッドシート風 一覧管理 カンバン Trello風の列 タスク進捗管理 カレンダー カレンダー スケジュール管理 ギャラリー カード型 ポートフォリオ・書籍管理 リスト シンプルリスト TODOリスト タイムライン ガントチャート風 プロジェクト管理 Notionテンプレートの活用方法 テンプレートギャラリーの使い方 ページ新規作成時に「テンプレートを選択」 カテゴリから目的のテンプレートを選ぶ ワークスペースに複製 おすすめテンプレート10選 個人向け：\n週次タスクプランナー 読書ノート・書評管理 習慣トラッカー 目標・OKR管理 家計簿・支出記録 仕事向け： 6. プロジェクト管理ダッシュボード 7. 会議議事録テンプレート 8. 営業案件管理CRM 9. コンテンツカレンダー 10. 採用管理トラッカー\nNotionの便利機能まとめ 1. ショートカットキー ショートカット 動作 / ブロックメニューを開く Ctrl/Cmd + / ブロックタイプ変換 Ctrl/Cmd + Enter チェックボックスをトグル Ctrl/Cmd + D ブロックを複製 Ctrl/Cmd + Shift + H テキストハイライト [] チェックボックス作成 2. リンクでページをつなぐ @ページ名 と入力することで、別のページへのリンクを貼れます。知識ベース（Wiki）として活用するときに非常に便利です。\n3. データベースの関連付け（リレーション） 2つのデータベースをリレーションプロパティで紐づけることで、Excelでは難しい複雑な管理ができます。\n例： 「プロジェクトDB」と「タスクDB」を紐づけて、プロジェクトごとのタスクを管理する。\n4. AI機能（Notion AI） Notion AIを使えば、ページ内でAIを呼び出して以下のことができます。\n文章のブラッシュアップ・要約 箇条書きからフォーマルな文書への変換 アイデアのブレスト 議事録からアクションアイテムの抽出 料金： Notion AIは月額約1,000円追加（2026年時点）\n5. Web Clipper ブラウザ拡張機能を入れると、WebページをそのままNotionに保存できます。後で読むリスト・リサーチ資料のストックに最適です。\nNotion活用事例：こんな使い方がおすすめ 事例1：フリーランスの仕事管理 フリーランス管理 ├── クライアントDB（会社名・担当者・連絡先） ├── 案件DB（クライアント紐づけ・進捗・報酬） ├── 請求書管理DB（発行日・入金確認） └── 月次収支ダッシュボード 事例2：副業ブログ管理 ブログ管理 ├── 記事アイデアDB（キーワード・検索ボリューム・難易度） ├── 執筆中記事DB（進捗状況・締切・公開日） ├── 公開済み記事DB（PV・収益追跡） └── アフィリエイト案件DB 事例3：個人の知識管理（PKM） 知識ベース ├── 読書メモ（本→ハイライト→アクション） ├── 学習メモ（テーマ別） ├── アイデアバンク └── プロジェクト別リファレンス Notionのプラン比較 プラン 料金 主な制限 Free 無料 ゲスト10名・ファイル容量5MB等 Plus 約2,000円/月 ゲスト100名・30日の履歴 Business 約3,500円/月 高度な権限管理・PDF書き出し等 Enterprise 要問い合わせ SOC2・SAML SSO等 個人利用ならFree、チームならPlusがほぼ必要十分です。\nよくあるNotionの失敗パターン 失敗1：最初から完璧なシステムを作ろうとする Notionは「育てるもの」です。まずシンプルに始めて、使いながら改善していきましょう。\n失敗2：ページを作り過ぎて管理できなくなる 最初はページを3〜5つに絞りましょう。整理されたシンプルな構成が長続きの秘訣です。\n失敗3：データベースを多用しすぎる すべてをデータベースにする必要はありません。シンプルなメモはただのページで十分です。\nNotionを使いこなしてキャリアチェンジを有利に Notionや情報整理ツールを活用したプロジェクト管理スキルは、スタートアップ・IT企業・コンサルなど幅広い職場で歓迎されます。転職市場での自分の価値を確かめてみましょう。dodaで求人を探す\nまとめ Notionはシンプルな使い方から高度なデータベース管理まで、使い方次第で無限に拡張できるツールです。\n初心者の最初の一歩：\nまずページを1つ作ってメモを書く チェックボックスでTODOリストを作る 慣れてきたらデータベースに挑戦する 完璧なシステムを最初から作ろうとせず、まず使い始めることが一番大切です。\n関連記事 Notionで確定申告を管理する方法 リモートワーク生産性を上げる方法 Excel関数よく使うもの一覧 関連ツール Notionで管理するフリーランス収入の適正時給を計算 → フリーランス報酬計算ツール 月々の支出バランスをNotionと合わせて見直す → 家計簿シミュレーター ポモドーロテクニックで集中力アップ → ポモドーロタイマー イベントまでのカウントダウン → カウントダウンタイマー Notionテンプレートをまとめてダウンロード すぐに使えるNotionテンプレート（フリーランス管理・ブログ管理・家計簿・習慣トラッカー）をBOOTHで販売中です。セットアップ時間ゼロで、今日からNotionを活用できます。\nProductivity Works BOOTHストアはこちら 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/posts/notion-kanzen-guide-shoshinsha-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「Notionを始めたけど何ができるかわからない」「機能が多すぎてどこから手をつけていいか…」——そんな方のために、\u003cstrong\u003eNotionの使い方を初心者向けに完全解説\u003c/strong\u003eします。2026年の最新UIに対応した、ゼロからスタートできるガイドです。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"notionとは何ができるツールか\"\u003eNotionとは何ができるツールか\u003c/h2\u003e\n\u003cp\u003eNotionは「ノート・タスク・データベース・Wiki・プロジェクト管理」を1つのアプリで完結させられる\u003cstrong\u003eオールインワン生産性ツール\u003c/strong\u003eです。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e代替できる既存ツール\u003c/th\u003e\n          \u003cth\u003eNotionでの機能\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eEvernote・メモ帳\u003c/td\u003e\n          \u003ctd\u003eページ（ノート）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTrello・Jira\u003c/td\u003e\n          \u003ctd\u003eカンバンボード・タスク管理\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eExcel・スプレッドシート\u003c/td\u003e\n          \u003ctd\u003eデータベース\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eConfluence\u003c/td\u003e\n          \u003ctd\u003e社内Wiki\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eGoogle Docs\u003c/td\u003e\n          \u003ctd\u003e文書作成・共有\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAirtable\u003c/td\u003e\n          \u003ctd\u003eリレーショナルデータベース\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e**個人利用は無料プランで十分。**チームで使う場合もPlus（月額約2,000円/人）から使えます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"notion-セットアップ最初の5ステップ\"\u003eNotion セットアップ：最初の5ステップ\u003c/h2\u003e\n\u003ch3 id=\"step-1アカウントを作成する\"\u003eStep 1：アカウントを作成する\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\u003ca href=\"https://www.notion.so\" target=\"_blank\" rel=\"noopener noreferrer\"\u003enotion.so\u003c/a\u003e\nにアクセス\u003c/li\u003e\n\u003cli\u003eGoogleアカウント・メールアドレスで無料登録\u003c/li\u003e\n\u003cli\u003e「個人利用」を選択\u003c/li\u003e\n\u003cli\u003eテンプレートの選択（後から変更可）\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"step-2ワークスペースを理解する\"\u003eStep 2：ワークスペースを理解する\u003c/h3\u003e\n\u003cp\u003eNotionの画面構成：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eサイドバー（左）\u003c/strong\u003e：ページ一覧・ナビゲーション\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eメインエリア（中央）\u003c/strong\u003e：選択したページの内容\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e設定アイコン\u003c/strong\u003e：テーマ・言語・アカウント設定\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"step-3最初のページを作成する\"\u003eStep 3：最初のページを作成する\u003c/h3\u003e\n\u003cp\u003eサイドバーの「＋ 新しいページ」をクリックしてページを作成します。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eページとは\u003c/strong\u003e：Notionの最も基本的な単位。普通のメモ・ドキュメントにあたります。\u003c/p\u003e\n\u003ch3 id=\"step-4ブロックを理解する\"\u003eStep 4：ブロックを理解する\u003c/h3\u003e\n\u003cp\u003eNotionのコンテンツはすべて「ブロック」で構成されています。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eブロックの種類\u003c/th\u003e\n          \u003cth\u003e使い方\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eテキスト\u003c/td\u003e\n          \u003ctd\u003e普通の文章\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e見出し（H1/H2/H3）\u003c/td\u003e\n          \u003ctd\u003eセクション分け\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e箇条書き\u003c/td\u003e\n          \u003ctd\u003eリスト\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e番号付きリスト\u003c/td\u003e\n          \u003ctd\u003e手順・ランキング\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eチェックボックス\u003c/td\u003e\n          \u003ctd\u003eTODOリスト\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e画像\u003c/td\u003e\n          \u003ctd\u003e画像の挿入\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eテーブル\u003c/td\u003e\n          \u003ctd\u003e簡単な表\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eデータベース\u003c/td\u003e\n          \u003ctd\u003e高度な管理機能\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eコードブロック\u003c/td\u003e\n          \u003ctd\u003eプログラムコードの挿入\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eブロックは「/（スラッシュ）」を入力するとメニューが表示されます。\u003c/p\u003e\n\u003ch3 id=\"step-5階層構造を作る\"\u003eStep 5：階層構造を作る\u003c/h3\u003e\n\u003cp\u003eページの中にページを入れ子にすることで、フォルダのような階層管理ができます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e仕事\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  ├── プロジェクトA\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  │   ├── 議事録（2026-05-14）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  │   └── タスクリスト\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  └── 週次レポート\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e個人\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  ├── 読書ノート\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  └── 目標管理\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"notionデータベースの使い方\"\u003eNotionデータベースの使い方\u003c/h2\u003e\n\u003cp\u003eデータベースはNotionの真髄です。Excelのような表を、複数のビュー（見た目）で表示できます。\u003c/p\u003e","title":"Notion使い方完全ガイド2026年版【初心者向けセットアップ解説】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「Notionって何ができるの？」「Evernoteやメモ帳と何が違うの？」——そんな疑問をお持ちの方へ。Notionは単なるメモアプリではなく、ノート・タスク管理・データベース・Wiki・プロジェクト管理を一体化した「第二の脳」とも呼ばれる万能ツールです。\n本記事では、Notionを触ったことがない方でも今日から使い始められるよう、基本のセットアップから便利な活用法まで丁寧に解説します。\nNotionとは？他のツールとの違い Notionが「万能ツール」と呼ばれる理由 Notionは以下のようなツールの機能を1つのアプリで代替できます。\n代替できるツール Notionでの対応機能 Evernote・メモ帳 ページ（ノート） Trello・Asana ボードビュー・タスク管理 Googleスプレッドシート データベース Confluence・社内Wiki チームWiki Googleカレンダー（一部） カレンダービュー Airtable リレーションデータベース 複数のサービスを使い分けていた方が「Notionに集約したら管理が楽になった」という声は多く、特に情報の一元管理を重視する方に強くおすすめです。\nNotionの料金プラン（2026年版） プラン 料金 主な特徴 フリー 無料 無制限のページ・ブロック、共同作業者10名まで、ファイルアップロード5MB プラス 約$10/月（年払い：約$8/月） ファイルアップロード無制限、ゲスト無制限 ビジネス 約$15/月（年払い） SAML SSO、高度な権限管理 エンタープライズ 要相談 カスタムセキュリティ・コンプライアンス 個人利用・初心者ならフリープランで十分です。まずは無料で試してみましょう。\nNotionのセットアップ手順 STEP 1：アカウント作成 Notion公式サイト にアクセス 「Notionを無料で使う」をクリック メールアドレスまたはGoogleアカウントで登録 用途（個人・チーム）を選択してワークスペースを作成 STEP 2：日本語設定 Notionは日本語UIに対応しています。\n左サイドバー下部の「設定」→「言語と地域」 「言語」を「日本語」に変更 画面を再読み込み STEP 3：最初のページを作成する サイドバーの「＋ ページを追加」をクリック タイトルを入力（例：「はじめてのNotion」） Enterキーを押して本文を書き始める これだけで最初のページが完成します。\nNotionの基本概念：ブロックを理解する Notionの最大の特徴は、すべてのコンテンツが「ブロック」単位で構成されていることです。\n主なブロックの種類 ブロックタイプ 用途 入力方法 テキスト 普通の文章 そのまま入力 見出し1〜3 章・節のタイトル /h1 /h2 /h3 箇条書き リスト /bullet または - 番号付きリスト 手順など /numbered または 1. チェックボックス ToDo /todo または [] トグル 折りたたみ /toggle 画像 画像の挿入 /image コードブロック プログラムコード /code 区切り線 セクション区切り /divider または --- コールアウト 注意書き・メモ /callout ブロックの操作テクニック ドラッグ＆ドロップ：ブロック左端の「⋮⋮」アイコンを掴んで並び替え スラッシュコマンド：/ を入力すると使えるブロックの一覧が表示される 複数選択：Shiftキーを押しながらクリックで複数ブロックを選択できる ショートカット：Ctrl+B（太字）、Ctrl+I（イタリック）、Ctrl+K（リンク）など データベース機能の使い方 Notionの真価が発揮されるのがデータベース機能です。スプレッドシートのようにデータを管理しながら、さまざまな表示形式に切り替えられます。\nデータベースの作成方法 ページ内で /database と入力 「データベース — フルページ」または「データベース — インライン」を選択 列（プロパティ）を設定する プロパティの種類 プロパティ 用途の例 テキスト 備考・説明 数値 価格・スコア・進捗率 セレクト カテゴリ・ステータス（単一選択） マルチセレクト タグ（複数選択） 日付 期限・予定日 チェックボックス 完了フラグ 担当者 チームメンバーのアサイン リレーション 別データベースとの紐付け 数式 自動計算 6種類のビューを使い分ける 同じデータベースを目的に応じて切り替えられるのがNotionの強みです。\nビュー 向いている用途 テーブル スプレッドシート的な一覧表示 ボード カンバン方式のタスク管理（Trello風） カレンダー 日程・スケジュール管理 リスト シンプルな一覧 ギャラリー 画像メインのカード型表示 タイムライン プロジェクトのガントチャート的表示 初心者におすすめの活用法5選 活用法①：習慣トラッカー 毎日の習慣（運動・読書・英語学習など）を記録するデータベースを作れます。\n設定例：\nプロパティ：日付（Date）、各習慣のチェックボックス ビュー：カレンダービューで視覚的に確認 活用法②：読書記録・本棚管理 設定例：\nプロパティ：タイトル、著者、ステータス（読みたい/読中/読了）、評価（星1〜5）、メモ ビュー：ギャラリー（表紙画像）またはテーブル 活用法③：仕事・家事のタスク管理 設定例：\nプロパティ：タスク名、期限、優先度（セレクト）、ステータス、担当者 ビュー：ボードビューでステータスごとにカード管理 活用法④：家計管理・支出記録 設定例：\nプロパティ：日付、カテゴリ（食費/交通費/娯楽など）、金額、メモ 数式プロパティで月別合計を計算 ビュー：テーブル＋フィルターで月ごとに絞り込み 活用法⑤：旅行プランニング 設定例：\nページ：「旅行先名」のページを作成 サブページ：「行きたいスポット」「宿泊先候補」「持ち物リスト」「予算」をそれぞれ作成 タイムラインビューで旅程を可視化 テンプレートを使いこなす Notionには公式・コミュニティ製の豊富なテンプレートがあります。ゼロから作るのが大変な場合は活用しましょう。\nテンプレートの使い方 左サイドバーの「テンプレート」をクリック カテゴリから探す（個人・仕事・教育・クリエイターなど） 気に入ったテンプレートを「このテンプレートを使用する」でインポート 人気テンプレートジャンル（日本語対応あり） 第二の脳（Second Brain）：GTD・PARA法に基づく情報管理 ウィークリープランナー：週次レビュー・計画立案 習慣トラッカー：ストリーク管理 プロジェクト管理：タスク・締め切り・担当者の一元管理 採用管理：求職活動の進捗管理 Notion AIを活用する（2026年版） Notionには**AI機能（Notion AI）**が統合されており、文章作成・要約・翻訳・ブレインストーミングなどをページ内で直接行えます。\nNotion AIでできること 機能 使い方 文章生成 「〇〇についての記事を書いて」と指示 要約 長いページを数行に要約 翻訳 選択したテキストを指定言語に翻訳 改善提案 文章の改善点を提案 アクションアイテム抽出 会議メモからToDo一覧を自動生成 Notion AIは有料アドオン（月額$8〜10程度、プランによる）ですが、毎日のメモや仕事の効率化に役立てたい方にはコスパの高い投資です。\nNotion活用のコツ・よくある失敗 よくある失敗とその対処法 失敗①：最初から完璧なシステムを作ろうとする\n→ まずシンプルなページ1つから始めましょう。複雑なデータベースは後から必要に応じて追加すればOK。\n失敗②：データベースを作りすぎて迷子になる\n→ 「ホームページ」を1つ作り、よく使うページへのリンクをまとめておきましょう。\n失敗③：テンプレートを導入したが使いこなせない\n→ テンプレートはあくまでも参考。自分の使い方に合わせて大胆にカスタマイズしましょう。\n生産性を上げるショートカット一覧 ショートカット 動作 / ブロックメニューを開く Ctrl + P（Cmd + P） ページ検索 Ctrl + [ / Ctrl + ] ページ履歴の前後移動 Ctrl + Shift + L ダークモード切り替え @ メンション（ページ・人・日付） [[ 別ページへのリンク挿入 Ctrl + Enter 新しいサブページを開く Notionと他ツールの連携 Notionは単体でも強力ですが、他ツールと連携することでさらに便利になります。\n連携ツール 主な用途 Slack Slack通知→Notionタスク自動追加 Google Calendar カレンダー連携・イベント管理 Zapier / Make 他サービスとの自動連携 GitHub 開発タスク・イシュー管理 Figma デザインファイルの埋め込み ツール活用力をそのまま転職の武器に Notionをはじめとするモダンツールを使いこなせる人材は、スタートアップや急成長中のIT企業で特に歓迎されます。自分のスキルが活かせる企業を探してみましょう。dodaで求人を探す\nまとめ：Notionは「育てるツール」 Notionの最大の特徴は、自分の使い方に合わせて自由にカスタマイズできる柔軟性にあります。最初は機能の多さに戸惑うかもしれませんが、焦らず少しずつ使い慣れていくことが大切です。\n今日からできる3ステップ：\n無料アカウントを作成して、まずメモを1つ書いてみる チェックボックスで簡単なToDoリストを作ってみる データベースを1つ作り、読書記録や習慣管理を試してみる 「完璧なシステム」より「使い続けられるシステム」を目指して、あなただけのNotionワークスペースを育てていきましょう。\n本記事の情報は2026年5月時点のものです。Notionのアップデートにより、UIや機能が変更される場合があります。最新情報はNotion公式サイトをご確認ください。\n関連記事 Notion完全ガイド：初心者向けセットアップと活用術 NotionでフリーランスのKPI管理と確定申告準備 ChatGPT仕事活用法2026：業務効率化の完全ガイド AI要約ツールおすすめ：議事録・文書を瞬時に要約 ChatGPT議事録テンプレート：会議を10倍効率化 関連ツール Notionで管理するフリーランス案件の適正時給を計算 → フリーランス報酬計算ツール 月々の家計支出をNotionと合わせて管理する → 家計簿シミュレーター ポモドーロテクニックで集中力アップ → ポモドーロタイマー イベントまでのカウントダウン → カウントダウンタイマー 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/posts/notion-tsukaikata-shoshinsha-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「Notionって何ができるの？」「Evernoteやメモ帳と何が違うの？」——そんな疑問をお持ちの方へ。Notionは単なるメモアプリではなく、\u003cstrong\u003eノート・タスク管理・データベース・Wiki・プロジェクト管理を一体化した「第二の脳」とも呼ばれる万能ツール\u003c/strong\u003eです。\u003c/p\u003e\n\u003cp\u003e本記事では、Notionを触ったことがない方でも今日から使い始められるよう、基本のセットアップから便利な活用法まで丁寧に解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"notionとは他のツールとの違い\"\u003eNotionとは？他のツールとの違い\u003c/h2\u003e\n\u003ch3 id=\"notionが万能ツールと呼ばれる理由\"\u003eNotionが「万能ツール」と呼ばれる理由\u003c/h3\u003e\n\u003cp\u003eNotionは以下のようなツールの機能を\u003cstrong\u003e1つのアプリで代替\u003c/strong\u003eできます。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e代替できるツール\u003c/th\u003e\n          \u003cth\u003eNotionでの対応機能\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eEvernote・メモ帳\u003c/td\u003e\n          \u003ctd\u003eページ（ノート）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTrello・Asana\u003c/td\u003e\n          \u003ctd\u003eボードビュー・タスク管理\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eGoogleスプレッドシート\u003c/td\u003e\n          \u003ctd\u003eデータベース\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eConfluence・社内Wiki\u003c/td\u003e\n          \u003ctd\u003eチームWiki\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eGoogleカレンダー（一部）\u003c/td\u003e\n          \u003ctd\u003eカレンダービュー\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAirtable\u003c/td\u003e\n          \u003ctd\u003eリレーションデータベース\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e複数のサービスを使い分けていた方が「Notionに集約したら管理が楽になった」という声は多く、特に\u003cstrong\u003e情報の一元管理\u003c/strong\u003eを重視する方に強くおすすめです。\u003c/p\u003e\n\u003ch3 id=\"notionの料金プラン2026年版\"\u003eNotionの料金プラン（2026年版）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eプラン\u003c/th\u003e\n          \u003cth\u003e料金\u003c/th\u003e\n          \u003cth\u003e主な特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eフリー\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e無料\u003c/td\u003e\n          \u003ctd\u003e無制限のページ・ブロック、共同作業者10名まで、ファイルアップロード5MB\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eプラス\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e約$10/月（年払い：約$8/月）\u003c/td\u003e\n          \u003ctd\u003eファイルアップロード無制限、ゲスト無制限\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eビジネス\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e約$15/月（年払い）\u003c/td\u003e\n          \u003ctd\u003eSAML SSO、高度な権限管理\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eエンタープライズ\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e要相談\u003c/td\u003e\n          \u003ctd\u003eカスタムセキュリティ・コンプライアンス\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e個人利用・初心者ならフリープランで十分\u003c/strong\u003eです。まずは無料で試してみましょう。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"notionのセットアップ手順\"\u003eNotionのセットアップ手順\u003c/h2\u003e\n\u003ch3 id=\"step-1アカウント作成\"\u003eSTEP 1：アカウント作成\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\u003ca href=\"https://www.notion.so\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eNotion公式サイト\u003c/a\u003e\nにアクセス\u003c/li\u003e\n\u003cli\u003e「Notionを無料で使う」をクリック\u003c/li\u003e\n\u003cli\u003eメールアドレスまたはGoogleアカウントで登録\u003c/li\u003e\n\u003cli\u003e用途（個人・チーム）を選択してワークスペースを作成\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"step-2日本語設定\"\u003eSTEP 2：日本語設定\u003c/h3\u003e\n\u003cp\u003eNotionは日本語UIに対応しています。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e左サイドバー下部の「設定」→「言語と地域」\u003c/li\u003e\n\u003cli\u003e「言語」を「日本語」に変更\u003c/li\u003e\n\u003cli\u003e画面を再読み込み\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"step-3最初のページを作成する\"\u003eSTEP 3：最初のページを作成する\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003eサイドバーの「＋ ページを追加」をクリック\u003c/li\u003e\n\u003cli\u003eタイトルを入力（例：「はじめてのNotion」）\u003c/li\u003e\n\u003cli\u003eEnterキーを押して本文を書き始める\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eこれだけで最初のページが完成します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"notionの基本概念ブロックを理解する\"\u003eNotionの基本概念：ブロックを理解する\u003c/h2\u003e\n\u003cp\u003eNotionの最大の特徴は、\u003cstrong\u003eすべてのコンテンツが「ブロック」単位\u003c/strong\u003eで構成されていることです。\u003c/p\u003e\n\u003ch3 id=\"主なブロックの種類\"\u003e主なブロックの種類\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eブロックタイプ\u003c/th\u003e\n          \u003cth\u003e用途\u003c/th\u003e\n          \u003cth\u003e入力方法\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eテキスト\u003c/td\u003e\n          \u003ctd\u003e普通の文章\u003c/td\u003e\n          \u003ctd\u003eそのまま入力\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e見出し1〜3\u003c/td\u003e\n          \u003ctd\u003e章・節のタイトル\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e/h1\u003c/code\u003e \u003ccode\u003e/h2\u003c/code\u003e \u003ccode\u003e/h3\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e箇条書き\u003c/td\u003e\n          \u003ctd\u003eリスト\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e/bullet\u003c/code\u003e または \u003ccode\u003e-\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e番号付きリスト\u003c/td\u003e\n          \u003ctd\u003e手順など\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e/numbered\u003c/code\u003e または \u003ccode\u003e1.\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eチェックボックス\u003c/td\u003e\n          \u003ctd\u003eToDo\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e/todo\u003c/code\u003e または \u003ccode\u003e[]\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eトグル\u003c/td\u003e\n          \u003ctd\u003e折りたたみ\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e/toggle\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e画像\u003c/td\u003e\n          \u003ctd\u003e画像の挿入\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e/image\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eコードブロック\u003c/td\u003e\n          \u003ctd\u003eプログラムコード\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e/code\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e区切り線\u003c/td\u003e\n          \u003ctd\u003eセクション区切り\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e/divider\u003c/code\u003e または \u003ccode\u003e---\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eコールアウト\u003c/td\u003e\n          \u003ctd\u003e注意書き・メモ\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e/callout\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"ブロックの操作テクニック\"\u003eブロックの操作テクニック\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eドラッグ＆ドロップ\u003c/strong\u003e：ブロック左端の「⋮⋮」アイコンを掴んで並び替え\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eスラッシュコマンド\u003c/strong\u003e：\u003ccode\u003e/\u003c/code\u003e を入力すると使えるブロックの一覧が表示される\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e複数選択\u003c/strong\u003e：Shiftキーを押しながらクリックで複数ブロックを選択できる\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eショートカット\u003c/strong\u003e：\u003ccode\u003eCtrl+B\u003c/code\u003e（太字）、\u003ccode\u003eCtrl+I\u003c/code\u003e（イタリック）、\u003ccode\u003eCtrl+K\u003c/code\u003e（リンク）など\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"データベース機能の使い方\"\u003eデータベース機能の使い方\u003c/h2\u003e\n\u003cp\u003eNotionの真価が発揮されるのが\u003cstrong\u003eデータベース\u003c/strong\u003e機能です。スプレッドシートのようにデータを管理しながら、さまざまな表示形式に切り替えられます。\u003c/p\u003e","title":"Notion 使い方 完全ガイド【2026年版・初心者向け】セットアップから活用術まで"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「在宅だと集中できない」「気づいたら1日何もしていない」「会社にいるより疲れる」——リモートワーカーが抱えるこうした悩みには、明確な解決策があります。本記事ではリモートワークの生産性を劇的に上げる15の方法を、すぐに実践できる形で解説します。\nなぜリモートワークで生産性が下がるのか まず原因を正確に把握することが大切です。リモートワークで生産性が落ちる主な理由は以下の3つです。\n境界の曖昧さ：仕事とプライベートの切り替えができない 環境の問題：集中できる作業スペースがない コミュニケーションのロス：チームとの情報共有が遅れる これらを一つひとつ解決していきましょう。\n環境編：集中できる作業スペースを作る 方法1：専用の「仕事スペース」を固定する ソファやベッドで作業するのは生産性の大敵です。脳は「場所」と「行動」を紐付けて学習するため、同じ場所で仕事をすることで集中スイッチが入りやすくなります。\n最低限必要なもの：\nデスクと椅子（腰痛対策に高さ調整可能なものが理想） モニター（作業効率が25〜30%向上するといわれる） Webカメラ（会議の印象も改善） 方法2：ノイズキャンセリングヘッドフォンを導入する 生活音・家族の声・工事音などを遮断するだけで集中度が大きく変わります。Sony WH-1000XM5やBose QuietComfort 45などが定番です。\n方法3：照明を整える 薄暗い環境は集中力と気分を低下させます。昼白色（5,000K前後）のデスクライトを使うことで、覚醒度と作業精度が向上します。モニター横に置いて目の疲れも軽減しましょう。\n方法4：デュアルモニター（2画面）にする 資料を見ながら文書を書く、会議しながらメモを取る——こうした「ながら作業」が劇的に楽になります。生産性向上効果は研究でも20〜30%と報告されています。\n時間管理編：集中と休憩のリズムを作る 方法5：ポモドーロ・テクニックを導入する 25分集中 → 5分休憩を繰り返す「ポモドーロ・テクニック」は、在宅勤務に特に効果的です。\nおすすめツール：\nForest（スマホアプリ）：集中中は木が育つゲーム感覚 Focus To-Do（PC・スマホ）：タスク管理と連携したポモドーロ シンプルにキッチンタイマーでもOK 方法6：「始業・終業の儀式」を作る 在宅だと仕事の開始と終了が曖昧になりがちです。意図的に切り替えの儀式を作りましょう。\n例：\n始業前：コーヒーを淹れてカレンダーを確認する 終業時：PCをシャットダウンして着替える・散歩する これだけで「ダラダラ残業」や「仕事が頭から離れない」問題がかなり改善されます。\n方法7：タスクを「3つの最重要タスク」に絞る 毎朝、その日に絶対に終わらせるべきタスクを3つだけ選びます。その3つが完了したら今日は成功です。タスクが多すぎると優先順位が曖昧になり、結果的に何も進まなくなります。\n方法8：会議は午前中にまとめる 会議は集中力を分断します。可能であれば午前中（10〜12時）に会議をまとめ、午後は集中作業の時間として確保しましょう。\nツール編：生産性を高める必須ツール 方法9：タスク管理ツールを1つに統一する メールのスター、付箋、スプレッドシート、手帳——あちこちにタスクが分散すると管理できなくなります。以下から1つ選んで統一しましょう。\nツール 特徴 料金 Notion オールインワン・高カスタマイズ 無料〜 Todoist シンプルで使いやすい 無料〜約600円/月 Trello カンバン方式・チーム向け 無料〜 TickTick カレンダー統合・ポモドーロ内蔵 無料〜約400円/月 方法10：コミュニケーションツールの通知を制限する SlackやTeamsの通知が常時来ると、深い集中（ディープワーク）が不可能になります。\n推奨設定：\n通知は「@メンション」のみ受け取る 集中タイムはスマホをサイレント 1日2〜3回、決まった時間に返信する「レスポンスタイム」を設ける 方法11：Notionで「デジタルワークスペース」を構築する 会社の情報、個人のメモ、プロジェクト進捗、議事録——これらをNotionに集約することで、情報散乱をゼロにできます。\n詳しい使い方はNotion使い方完全ガイド初心者版 をご参照ください。\n方法12：自動化ツールで繰り返し作業を排除する 毎日同じ作業をしているなら自動化を検討しましょう。\n自動化ツール できること Zapier / Make アプリ間の自動連携（フォーム→Slack通知など） ChatGPT 定型文作成・メール返信の下書き自動生成 マクロ（Excel/Google Sheets） 集計・レポート作成の自動化 メンタル・習慣編：長期的に続けるための工夫 方法13：外出・移動を意図的に組み込む 在宅だと1日中家に閉じこもりがちです。これが孤独感や気力低下につながります。週3回以上は外に出る習慣を意識的に作りましょう。\nおすすめ：\n近所のカフェで午前中だけ作業する 昼休みに15分散歩する コワーキングスペースを週1回利用する 方法14：チームとの「雑談チャンネル」を活用する リモートでは情報が公式チャンネルしか流れず、孤立感が増します。Slackの雑談チャンネルや、週1回の非公式ビデオ通話で人間関係を維持することが長期の生産性を支えます。\n方法15：週次レビューで振り返りと改善を繰り返す 毎週金曜の終業前に15分使って振り返りをしましょう。\n週次レビューの項目：\n今週達成できたこと できなかったことと原因 来週の最重要タスク3つ 改善したいこと1つ PDCAを小さく高速で回すことで、リモートワークの質は確実に向上していきます。\nリモートワーク生産性向上ツール・ガジェット比較 カテゴリ おすすめ製品/ツール 予算の目安 チェア オカムラ コンテッサ、ハーマンミラー アーロン 5〜20万円 デスク FlexiSpot（昇降デスク） 3〜8万円 モニター LG 27インチ 4Kモニター 3〜5万円 ヘッドフォン Sony WH-1000XM5 約4万円 Webカメラ Logicool C920s 約8,000円 タスク管理 Notion / Todoist 無料〜 時間管理 Forest / Focus To-Do 無料〜 まとめ リモートワークの生産性は、環境・時間管理・ツール・習慣の4つを整えることで大きく向上します。\n今日からできることを3つ選んで、まず1週間試してみてください。すべてを一度に変えようとせず、1つずつ定着させていくことが長続きの秘訣です。\nリモートワークを活かしてフリーランスや副業に挑戦するなら、収入管理・確定申告の準備も早めに始めましょう。freee会計 は銀行口座やクレジットカードと連携して副業収入を自動記録し、確定申告書類もガイドに沿って作成できます。\nリモートワークの経験を活かして新しいキャリアを模索したい方には、doda の転職エージェントサービスがおすすめです。リモートワーク可能な求人も豊富に取り扱っており、専任アドバイザーが希望条件に合ったポジションを紹介してくれます。\n関連ツール BMIと適正体重をチェック → BMI計算ツール 年収から手取りを計算 → 手取り計算シミュレーター 月々の支出バランスを見直す → 家計簿シミュレーター 副業収入の税金を計算 → 副業税金計算ツール 時給と年収を換算 → 時給換算ツール ポモドーロテクニックで集中力アップ → ポモドーロタイマー 作業時間をラップタイマーで計測 → ストップウォッチ イベントまでのカウントダウン → カウントダウンタイマー 海外チームと時間を合わせる → タイムゾーン変換ツール — 世界中の都市間で時刻を即変換\n関連記事 Notion使い方完全ガイド初心者 ChatGPTを仕事に活用する方法2026 在宅ワークの始め方（主婦向け） 作業効率化テンプレートをBOOTHで配布中 週次レビューシート・タスク管理テンプレート・ポモドーロ記録シートなど、リモートワーカーのための実践的テンプレート集をBOOTHで公開しています。\nProductivity Works BOOTHストアはこちら 今日から生産性を底上げするツールをぜひ活用してください。\n","permalink":"https://productivity-works.com/ja/posts/remote-work-seisansei-ageru-houhou/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「在宅だと集中できない」「気づいたら1日何もしていない」「会社にいるより疲れる」——リモートワーカーが抱えるこうした悩みには、明確な解決策があります。本記事では\u003cstrong\u003eリモートワークの生産性を劇的に上げる15の方法\u003c/strong\u003eを、すぐに実践できる形で解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"なぜリモートワークで生産性が下がるのか\"\u003eなぜリモートワークで生産性が下がるのか\u003c/h2\u003e\n\u003cp\u003eまず原因を正確に把握することが大切です。リモートワークで生産性が落ちる主な理由は以下の3つです。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e境界の曖昧さ\u003c/strong\u003e：仕事とプライベートの切り替えができない\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e環境の問題\u003c/strong\u003e：集中できる作業スペースがない\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eコミュニケーションのロス\u003c/strong\u003e：チームとの情報共有が遅れる\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eこれらを一つひとつ解決していきましょう。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"環境編集中できる作業スペースを作る\"\u003e環境編：集中できる作業スペースを作る\u003c/h2\u003e\n\u003ch3 id=\"方法1専用の仕事スペースを固定する\"\u003e方法1：専用の「仕事スペース」を固定する\u003c/h3\u003e\n\u003cp\u003eソファやベッドで作業するのは生産性の大敵です。脳は「場所」と「行動」を紐付けて学習するため、同じ場所で仕事をすることで\u003cstrong\u003e集中スイッチが入りやすくなります\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e最低限必要なもの：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eデスクと椅子（腰痛対策に高さ調整可能なものが理想）\u003c/li\u003e\n\u003cli\u003eモニター（作業効率が25〜30%向上するといわれる）\u003c/li\u003e\n\u003cli\u003eWebカメラ（会議の印象も改善）\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"方法2ノイズキャンセリングヘッドフォンを導入する\"\u003e方法2：ノイズキャンセリングヘッドフォンを導入する\u003c/h3\u003e\n\u003cp\u003e生活音・家族の声・工事音などを遮断するだけで集中度が大きく変わります。Sony WH-1000XM5やBose QuietComfort 45などが定番です。\u003c/p\u003e\n\u003ch3 id=\"方法3照明を整える\"\u003e方法3：照明を整える\u003c/h3\u003e\n\u003cp\u003e薄暗い環境は集中力と気分を低下させます。\u003cstrong\u003e昼白色（5,000K前後）のデスクライト\u003c/strong\u003eを使うことで、覚醒度と作業精度が向上します。モニター横に置いて目の疲れも軽減しましょう。\u003c/p\u003e\n\u003ch3 id=\"方法4デュアルモニター2画面にする\"\u003e方法4：デュアルモニター（2画面）にする\u003c/h3\u003e\n\u003cp\u003e資料を見ながら文書を書く、会議しながらメモを取る——こうした「ながら作業」が劇的に楽になります。生産性向上効果は研究でも20〜30%と報告されています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"時間管理編集中と休憩のリズムを作る\"\u003e時間管理編：集中と休憩のリズムを作る\u003c/h2\u003e\n\u003ch3 id=\"方法5ポモドーロテクニックを導入する\"\u003e方法5：ポモドーロ・テクニックを導入する\u003c/h3\u003e\n\u003cp\u003e25分集中 → 5分休憩を繰り返す「ポモドーロ・テクニック」は、在宅勤務に特に効果的です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめツール：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eForest\u003c/strong\u003e（スマホアプリ）：集中中は木が育つゲーム感覚\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFocus To-Do\u003c/strong\u003e（PC・スマホ）：タスク管理と連携したポモドーロ\u003c/li\u003e\n\u003cli\u003eシンプルにキッチンタイマーでもOK\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"方法6始業終業の儀式を作る\"\u003e方法6：「始業・終業の儀式」を作る\u003c/h3\u003e\n\u003cp\u003e在宅だと仕事の開始と終了が曖昧になりがちです。意図的に\u003cstrong\u003e切り替えの儀式\u003c/strong\u003eを作りましょう。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e例：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e始業前：コーヒーを淹れてカレンダーを確認する\u003c/li\u003e\n\u003cli\u003e終業時：PCをシャットダウンして着替える・散歩する\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eこれだけで「ダラダラ残業」や「仕事が頭から離れない」問題がかなり改善されます。\u003c/p\u003e\n\u003ch3 id=\"方法7タスクを3つの最重要タスクに絞る\"\u003e方法7：タスクを「3つの最重要タスク」に絞る\u003c/h3\u003e\n\u003cp\u003e毎朝、その日に絶対に終わらせるべきタスクを\u003cstrong\u003e3つだけ\u003c/strong\u003e選びます。その3つが完了したら今日は成功です。タスクが多すぎると優先順位が曖昧になり、結果的に何も進まなくなります。\u003c/p\u003e\n\u003ch3 id=\"方法8会議は午前中にまとめる\"\u003e方法8：会議は午前中にまとめる\u003c/h3\u003e\n\u003cp\u003e会議は集中力を分断します。可能であれば\u003cstrong\u003e午前中（10〜12時）に会議をまとめ\u003c/strong\u003e、午後は集中作業の時間として確保しましょう。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ツール編生産性を高める必須ツール\"\u003eツール編：生産性を高める必須ツール\u003c/h2\u003e\n\u003ch3 id=\"方法9タスク管理ツールを1つに統一する\"\u003e方法9：タスク管理ツールを1つに統一する\u003c/h3\u003e\n\u003cp\u003eメールのスター、付箋、スプレッドシート、手帳——あちこちにタスクが分散すると管理できなくなります。以下から1つ選んで統一しましょう。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eツール\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n          \u003cth\u003e料金\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eNotion\u003c/td\u003e\n          \u003ctd\u003eオールインワン・高カスタマイズ\u003c/td\u003e\n          \u003ctd\u003e無料〜\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTodoist\u003c/td\u003e\n          \u003ctd\u003eシンプルで使いやすい\u003c/td\u003e\n          \u003ctd\u003e無料〜約600円/月\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTrello\u003c/td\u003e\n          \u003ctd\u003eカンバン方式・チーム向け\u003c/td\u003e\n          \u003ctd\u003e無料〜\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTickTick\u003c/td\u003e\n          \u003ctd\u003eカレンダー統合・ポモドーロ内蔵\u003c/td\u003e\n          \u003ctd\u003e無料〜約400円/月\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"方法10コミュニケーションツールの通知を制限する\"\u003e方法10：コミュニケーションツールの通知を制限する\u003c/h3\u003e\n\u003cp\u003eSlackやTeamsの通知が常時来ると、深い集中（ディープワーク）が不可能になります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e推奨設定：\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e通知は「@メンション」のみ受け取る\u003c/li\u003e\n\u003cli\u003e集中タイムはスマホをサイレント\u003c/li\u003e\n\u003cli\u003e1日2〜3回、決まった時間に返信する「レスポンスタイム」を設ける\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"方法11notionでデジタルワークスペースを構築する\"\u003e方法11：Notionで「デジタルワークスペース」を構築する\u003c/h3\u003e\n\u003cp\u003e会社の情報、個人のメモ、プロジェクト進捗、議事録——これらをNotionに集約することで、情報散乱をゼロにできます。\u003c/p\u003e","title":"リモートワーク生産性を上げる方法15選【在宅勤務のコツ・ツール・環境構築】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nSBI証券と楽天証券を徹底比較【2026年最新版】どちらを選ぶべきか 「ネット証券を始めるならSBI証券と楽天証券どちらがいいの？」これは投資を始める際に多くの方が悩む定番の質問です。2社ともに国内最大級のネット証券ですが、強みと弱みが異なります。あなたの状況に合った方を選ぶことで、長期的な資産形成をより効率的に進められます。\nこの記事では以下のことがわかります。\nSBI証券と楽天証券の主要スペック比較 手数料・ポイント・NISA・iDeCoの詳細比較 どちらが向いているかのタイプ別判断基準 2026年時点での最新の変更点・注意点 SBI証券・楽天証券とは？基本を理解する 定義・仕組み SBI証券は、SBIホールディングスが運営する国内最大手のネット証券です。口座数1,400万超を誇り、豊富な商品ラインナップと業界屈指の低手数料が特徴です。\n楽天証券は、楽天グループが運営するネット証券で、口座数1,100万超。楽天市場・楽天カードとの連携によるポイント還元の充実度と、シンプルな操作画面が特徴です。\n2社の基本スペック比較\n項目 SBI証券 楽天証券 口座数（2026年1月時点） 約1,400万口座 約1,100万口座 国内株取引手数料（現物） 0円（ゼロ革命） 0円（ゼロコース） 投信本数（つみたてNISA枠） 約240本 約240本 iDeCo対応 あり あり 外国株取扱 米・中・韓・露など 米・中・韓など ポイント Vポイント/Pontaなど 楽天ポイント クレカ積立ポイント還元率 最大5%（三井住友カード プラチナ）/ 通常0.5〜1% 最大1%（楽天カード） アプリの使いやすさ 機能豊富だが多少複雑 シンプルで使いやすい メリット・デメリット SBI証券のメリット・デメリット\nメリット デメリット 商品ラインナップが最大級 アプリやサイトが多機能で複雑 クレカ積立の上限が月10万円 クレカ種別でポイント還元に差がある 外国株の取扱国数が多い 楽天ユーザーには連携のメリットが薄い IPO（新規公開株）の取扱数が多い — 銀行・証券の一体サービスが充実 — 楽天証券のメリット・デメリット\nメリット デメリット 楽天ポイントで投資信託が買える 楽天グループのサービスを使わないと旨みが薄い アプリ「iSPEED」が使いやすい 一部商品がSBI証券より少ない 楽天経済圏のポイント還元が強力 クレカ積立ポイント還元が一部引き下げられた歴史あり 投資情報ツール（マーケットスピード）が充実 — SBI証券 vs 楽天証券 詳細比較表 手数料・コスト比較 項目 SBI証券 楽天証券 国内株（現物）取引手数料 0円（ゼロ革命） 0円（ゼロコース） 国内株（信用）取引手数料 0円 0円 投資信託購入手数料 0円 0円 外国株取引手数料（米株） 0〜0.45%（最低0ドル〜） 0〜0.495%（最低0ドル〜） 為替手数料（米ドル） 1ドルあたり0銭〜25銭 1ドルあたり0銭〜25銭 iDeCo口座管理手数料 月171円（収納・国民年金基金連合会分除く） 月171円（同） NISA・つみたて投資比較 項目 SBI証券 楽天証券 新NISA対応 あり あり つみたて投資枠の最低積立額 月100円 月100円 クレカ積立（つみたて） 月10万円まで 月10万円まで クレカ積立ポイント還元率 0.5〜5%（カードにより異なる） 0.5〜1%（楽天カード） ポイント投資 Vポイント・Pontaなど 楽天ポイント（全額可能） 投信の取扱本数 約2,700本 約2,600本 iDeCo比較 項目 SBI証券 楽天証券 iDeCo対応 あり あり 運用商品数 約38本 約32本 口座管理手数料 年2,052円（月171円） 年2,052円（月171円） おすすめファンド eMAXIS Slim S\u0026amp;P500など 楽天・オールカントリー株式など 加入・移換サポート 充実 充実 SBI証券で口座開設する 楽天証券で口座開設する 選び方・注意点 チェックポイント：あなたはどちら向き？ SBI証券が向いている人\nできるだけ多くの投資商品（外国株・ETF・債券など）を使いたい 三井住友カードを持っている、または取得できる（クレカ積立5%還元） IPO（新規公開株）投資に挑戦したい 米国株を頻繁に取引する予定がある 楽天証券が向いている人\n楽天市場・楽天カードをよく使っている（楽天経済圏の住人） シンプルで使いやすいアプリを重視する 楽天ポイントで投資信託を購入したい 投資情報・ニュースツールを充実させたい どちらでもいい人\n新NISAのつみたて投資枠でインデックスファンドを積み立てるだけ この場合は商品ラインナップに大差なく、どちらを選んでも問題ありません。 よくある失敗 失敗1: 両方口座を開設して管理が煩雑になる 「両方持てばいいのでは？」と考えがちですが、資産が分散されて全体の管理が難しくなります。まずは1社でスタートし、投資に慣れてから2社目を検討しましょう。\n失敗2: ポイント目的だけで証券会社を選ぶ ポイント還元率は改定されることがあります（楽天証券は2022年に一部引き下げ）。ポイントよりもコスト・利便性を軸に選びましょう。\n失敗3: クレカ積立を設定しない どちらの証券会社もクレカで積立するとポイントが貯まります。口座開設後はすぐにクレカ積立の設定をしないと、毎月ポイントを取り逃がします。\n失敗4: 別のポイントカード体系にいる人が楽天証券を選ぶ 楽天経済圏（楽天カード・楽天市場を使っていない）の方が楽天証券を選ぶと、ポイント連携のメリットをあまり受けられません。\n関連記事: iDeCoおすすめ証券会社の選び方 よくある質問（FAQ） Q1. SBI証券と楽天証券、初心者にはどちらがおすすめですか？ シンプルに使いたい初心者には楽天証券のアプリが直感的で使いやすいです。豊富な商品から選びたい・外国株も視野に入れているならSBI証券をおすすめします。楽天経済圏の方は楽天証券一択です。\nQ2. 2社とも口座を持つことはできますか？ はい、複数の証券会社に口座を持つことは問題ありません。ただし、新NISAとiDeCoは1人1口座（1社のみ）という制限があります。\nQ3. SBI証券のクレカ積立で三井住友カードの還元率は何%ですか？ カードランクによって異なります。一般カード・エブリプラス：0.5%、ゴールドカード：1%、プラチナカード：5%が目安です（2026年現在の情報。変更になる場合があります）。\nQ4. 楽天証券のポイント投資はどのように使えますか？ 楽天ポイント（通常ポイント）1ポイント＝1円として投資信託の購入に使えます。積立設定も可能で、毎月ポイントを自動的に投資信託の購入に充てられます。\nQ5. 口座開設にかかる時間はどのくらいですか？ オンライン申込の場合、本人確認書類のアップロードから最短翌営業日〜3営業日で審査完了が多いです。マイナンバーカードを使ったオンライン確認がある場合はさらに速いです。\nQ6. 株式の売買手数料は本当に無料ですか？ 国内株（現物・信用）の取引手数料は0円です。ただし、「スプレッド」（売買価格差）や外国株の手数料は別途かかります。\nQ7. どちらの証券会社でもiDeCoは使えますか？ はい、SBI証券・楽天証券ともにiDeCoに対応しています。運用商品の種類や本数に若干の差がありますが、どちらも低コストのインデックスファンドを選べます。\nまとめ・行動の呼びかけ SBI証券と楽天証券のどちらを選ぶかは、あなたのライフスタイルに合わせて決めるのが最善です。楽天経済圏の方は楽天証券、三井住友カードをお持ちの方や豊富な商品数を求める方はSBI証券がおすすめです。迷うなら楽天証券から始めて、慣れてきたらSBI証券でも口座開設するという段階的なアプローチも有効です。今日から口座開設を始めましょう。\nSBI証券で今すぐ口座開設する 楽天証券で今すぐ口座開設する 関連記事: 新NISAの始め方・手順を完全解説 配当投資に興味がある方は、配当金シミュレーター でNISA口座での年間配当収入をシミュレーションできます。\n※本記事は情報提供を目的としており、特定の金融商品の購入・売却を推奨するものではありません。投資判断はご自身の責任で行ってください。最新情報は各公式サイトでご確認ください。\n関連ツール 積立投資の複利効果を試算 → 複利計算シミュレーター NISAの非課税メリットを計算 → NISAシミュレーター iDeCoの節税効果を計算 → iDeCoシミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター 関連テンプレート 資産運用・家計管理をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す ","permalink":"https://productivity-works.com/ja/posts/sbi-rakuten-hikaku-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"sbi証券と楽天証券を徹底比較2026年最新版どちらを選ぶべきか\"\u003eSBI証券と楽天証券を徹底比較【2026年最新版】どちらを選ぶべきか\u003c/h1\u003e\n\u003cp\u003e「ネット証券を始めるならSBI証券と楽天証券どちらがいいの？」これは投資を始める際に多くの方が悩む定番の質問です。2社ともに国内最大級のネット証券ですが、強みと弱みが異なります。あなたの状況に合った方を選ぶことで、長期的な資産形成をより効率的に進められます。\u003c/p\u003e\n\u003cp\u003eこの記事では以下のことがわかります。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSBI証券と楽天証券の主要スペック比較\u003c/li\u003e\n\u003cli\u003e手数料・ポイント・NISA・iDeCoの詳細比較\u003c/li\u003e\n\u003cli\u003eどちらが向いているかのタイプ別判断基準\u003c/li\u003e\n\u003cli\u003e2026年時点での最新の変更点・注意点\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"sbi証券楽天証券とは基本を理解する\"\u003eSBI証券・楽天証券とは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eSBI証券\u003c/strong\u003eは、SBIホールディングスが運営する国内最大手のネット証券です。口座数1,400万超を誇り、豊富な商品ラインナップと業界屈指の低手数料が特徴です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e楽天証券\u003c/strong\u003eは、楽天グループが運営するネット証券で、口座数1,100万超。楽天市場・楽天カードとの連携によるポイント還元の充実度と、シンプルな操作画面が特徴です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2社の基本スペック比較\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003eSBI証券\u003c/th\u003e\n          \u003cth\u003e楽天証券\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e口座数（2026年1月時点）\u003c/td\u003e\n          \u003ctd\u003e約1,400万口座\u003c/td\u003e\n          \u003ctd\u003e約1,100万口座\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e国内株取引手数料（現物）\u003c/td\u003e\n          \u003ctd\u003e0円（ゼロ革命）\u003c/td\u003e\n          \u003ctd\u003e0円（ゼロコース）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e投信本数（つみたてNISA枠）\u003c/td\u003e\n          \u003ctd\u003e約240本\u003c/td\u003e\n          \u003ctd\u003e約240本\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eiDeCo対応\u003c/td\u003e\n          \u003ctd\u003eあり\u003c/td\u003e\n          \u003ctd\u003eあり\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e外国株取扱\u003c/td\u003e\n          \u003ctd\u003e米・中・韓・露など\u003c/td\u003e\n          \u003ctd\u003e米・中・韓など\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eポイント\u003c/td\u003e\n          \u003ctd\u003eVポイント/Pontaなど\u003c/td\u003e\n          \u003ctd\u003e楽天ポイント\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eクレカ積立ポイント還元率\u003c/td\u003e\n          \u003ctd\u003e最大5%（三井住友カード プラチナ）/ 通常0.5〜1%\u003c/td\u003e\n          \u003ctd\u003e最大1%（楽天カード）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eアプリの使いやすさ\u003c/td\u003e\n          \u003ctd\u003e機能豊富だが多少複雑\u003c/td\u003e\n          \u003ctd\u003eシンプルで使いやすい\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eSBI証券のメリット・デメリット\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eメリット\u003c/th\u003e\n          \u003cth\u003eデメリット\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e商品ラインナップが最大級\u003c/td\u003e\n          \u003ctd\u003eアプリやサイトが多機能で複雑\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eクレカ積立の上限が月10万円\u003c/td\u003e\n          \u003ctd\u003eクレカ種別でポイント還元に差がある\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e外国株の取扱国数が多い\u003c/td\u003e\n          \u003ctd\u003e楽天ユーザーには連携のメリットが薄い\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eIPO（新規公開株）の取扱数が多い\u003c/td\u003e\n          \u003ctd\u003e—\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e銀行・証券の一体サービスが充実\u003c/td\u003e\n          \u003ctd\u003e—\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e楽天証券のメリット・デメリット\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eメリット\u003c/th\u003e\n          \u003cth\u003eデメリット\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e楽天ポイントで投資信託が買える\u003c/td\u003e\n          \u003ctd\u003e楽天グループのサービスを使わないと旨みが薄い\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eアプリ「iSPEED」が使いやすい\u003c/td\u003e\n          \u003ctd\u003e一部商品がSBI証券より少ない\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e楽天経済圏のポイント還元が強力\u003c/td\u003e\n          \u003ctd\u003eクレカ積立ポイント還元が一部引き下げられた歴史あり\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e投資情報ツール（マーケットスピード）が充実\u003c/td\u003e\n          \u003ctd\u003e—\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"sbi証券-vs-楽天証券-詳細比較表\"\u003eSBI証券 vs 楽天証券 詳細比較表\u003c/h2\u003e\n\u003ch3 id=\"手数料コスト比較\"\u003e手数料・コスト比較\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003eSBI証券\u003c/th\u003e\n          \u003cth\u003e楽天証券\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e国内株（現物）取引手数料\u003c/td\u003e\n          \u003ctd\u003e0円（ゼロ革命）\u003c/td\u003e\n          \u003ctd\u003e0円（ゼロコース）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e国内株（信用）取引手数料\u003c/td\u003e\n          \u003ctd\u003e0円\u003c/td\u003e\n          \u003ctd\u003e0円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e投資信託購入手数料\u003c/td\u003e\n          \u003ctd\u003e0円\u003c/td\u003e\n          \u003ctd\u003e0円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e外国株取引手数料（米株）\u003c/td\u003e\n          \u003ctd\u003e0〜0.45%（最低0ドル〜）\u003c/td\u003e\n          \u003ctd\u003e0〜0.495%（最低0ドル〜）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e為替手数料（米ドル）\u003c/td\u003e\n          \u003ctd\u003e1ドルあたり0銭〜25銭\u003c/td\u003e\n          \u003ctd\u003e1ドルあたり0銭〜25銭\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eiDeCo口座管理手数料\u003c/td\u003e\n          \u003ctd\u003e月171円（収納・国民年金基金連合会分除く）\u003c/td\u003e\n          \u003ctd\u003e月171円（同）\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"nisaつみたて投資比較\"\u003eNISA・つみたて投資比較\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003eSBI証券\u003c/th\u003e\n          \u003cth\u003e楽天証券\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e新NISA対応\u003c/td\u003e\n          \u003ctd\u003eあり\u003c/td\u003e\n          \u003ctd\u003eあり\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eつみたて投資枠の最低積立額\u003c/td\u003e\n          \u003ctd\u003e月100円\u003c/td\u003e\n          \u003ctd\u003e月100円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eクレカ積立（つみたて）\u003c/td\u003e\n          \u003ctd\u003e月10万円まで\u003c/td\u003e\n          \u003ctd\u003e月10万円まで\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eクレカ積立ポイント還元率\u003c/td\u003e\n          \u003ctd\u003e0.5〜5%（カードにより異なる）\u003c/td\u003e\n          \u003ctd\u003e0.5〜1%（楽天カード）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eポイント投資\u003c/td\u003e\n          \u003ctd\u003eVポイント・Pontaなど\u003c/td\u003e\n          \u003ctd\u003e楽天ポイント（全額可能）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e投信の取扱本数\u003c/td\u003e\n          \u003ctd\u003e約2,700本\u003c/td\u003e\n          \u003ctd\u003e約2,600本\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"ideco比較\"\u003eiDeCo比較\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003eSBI証券\u003c/th\u003e\n          \u003cth\u003e楽天証券\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eiDeCo対応\u003c/td\u003e\n          \u003ctd\u003eあり\u003c/td\u003e\n          \u003ctd\u003eあり\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e運用商品数\u003c/td\u003e\n          \u003ctd\u003e約38本\u003c/td\u003e\n          \u003ctd\u003e約32本\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e口座管理手数料\u003c/td\u003e\n          \u003ctd\u003e年2,052円（月171円）\u003c/td\u003e\n          \u003ctd\u003e年2,052円（月171円）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eおすすめファンド\u003c/td\u003e\n          \u003ctd\u003eeMAXIS Slim S\u0026amp;P500など\u003c/td\u003e\n          \u003ctd\u003e楽天・オールカントリー株式など\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e加入・移換サポート\u003c/td\u003e\n          \u003ctd\u003e充実\u003c/td\u003e\n          \u003ctd\u003e充実\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003ca href=\"https://payhip.com/productivityworks\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eSBI証券で口座開設する\u003c/a\u003e\n\n\u003ca href=\"https://hb.afl.rakuten.co.jp/hsc/41ab8a31.8f450617.41ab8a32.86e006c4/?link_type=hybrid_url\u0026amp;ut=eyJwYWdlIjoic2hvcCIsInR5cGUiOiJoeWJyaWRfdXJsIiwiY29sIjoxLCJjYXQiOiIxIiwiYmFuIjoiMTI0NjkzOSIsImFtcCI6ZmFsc2V9\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e楽天証券で口座開設する\u003c/a\u003e\n\u003c/p\u003e","title":"SBI証券 楽天証券 比較 2026年版！どちらを選ぶべきか徹底解説"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「新NISAって聞くけど、結局どうやって始めればいいの？」——2024年からスタートした新NISAは、2026年現在も投資初心者にとって最も優先すべき制度です。本記事では新NISAの口座開設から実際の投資スタートまで、初心者でもわかるように完全解説します。\n新NISA：つみたて投資枠 vs 成長投資枠 比較項目 つみたて投資枠 成長投資枠 120万円 年間投資上限 240万円 長期積立向け投資信託 対象商品 株式・ETF・投信など 初心者・コツコツ積立型 向いている人 中級者・個別株も買いたい人 合計年間360万円まで投資可能 ／ 生涯枠 1,800万円 ／ 非課税期間 無期限 初心者はまずつみたて投資枠のみで始めるのが王道 新NISAとは？旧NISAとの違い 新NISA（2024年〜）は、旧NISAから大幅に改善された非課税投資制度です。\n項目 旧つみたてNISA 旧一般NISA 新NISA 年間投資枠 40万円 120万円 最大360万円 生涯投資枠 800万円 600万円 1,800万円 非課税期間 20年 5年 無期限 対象商品 投資信託のみ 株・ETF等 つみたて＋成長の2枠 新NISAの2つの枠 枠 年間上限 対象商品 向いている人 つみたて投資枠 120万円 長期積立向け投資信託 初心者・コツコツ型 成長投資枠 240万円 株・ETF・投資信託 中級者以上・個別株も買いたい人 合計で年間360万円まで非課税で投資でき、生涯枠は1,800万円です。\n初心者はまずつみたて投資枠から始めるのが王道です。\n新NISAを始めるステップ Step 1：証券口座を選ぶ 新NISAは証券会社や銀行でNISA口座を開設して始めます。初心者にはネット証券が手数料も安く使いやすくておすすめです。\n主要ネット証券比較 証券会社 ポイント付与 最低積立金額 特徴 SBI証券 Tポイント/Vポイント等 100円 最大手・取扱銘柄数最多 楽天証券 楽天ポイント 100円 楽天経済圏ユーザーに最適 マネックス証券 マネックスポイント 100円 米国株・ETF充実 auカブコム証券 Pontaポイント 100円 au経済圏ユーザー向け 松井証券 ポイントなし 100円 サポートが手厚い・シンプル 結論：SBI証券か楽天証券が初心者に最もおすすめ。\n楽天ユーザーなら**楽天証券 **、それ以外はSBI証券を選べば間違いありません。\nSBI証券でNISA口座を開設する手順 SBI証券公式サイト にアクセス 「口座開設（無料）」をクリック メールアドレスを登録して仮登録 本人確認書類（運転免許証orマイナンバーカード）を提出 NISAの「つみたて投資枠」を選択 審査完了後（1〜2週間）、ログインして投資スタート 楽天証券でNISA口座を開設する手順 楽天証券公式サイト にアクセス 楽天IDでログインまたは新規登録 口座開設フォームに記入・本人確認書類提出 NISA口座を申請 審査完了後、楽天カードとの連携設定をすると積立でポイントが貯まる Step 2：NISA口座を開設する 証券口座開設時に「NISA口座の開設」も同時に申請します。NISA口座は1人1口座しか持てないので、慎重に証券会社を選びましょう（変更は可能ですが手続きが必要）。\nStep 3：積立銘柄を選ぶ 初心者にとって最大の難関が「何に投資するか」です。以下の3つが初心者の定番です。\n初心者おすすめ銘柄TOP3 1. eMAXIS Slim 全世界株式（オール・カントリー）\n通称「オルカン」 世界中の約3,000社に分散投資 信託報酬：0.05775%（業界最安水準） リスク分散・長期投資に最適 2. eMAXIS Slim 米国株式（S\u0026amp;P500）\n米国トップ500社に投資 過去実績では年平均リターン約7〜10%（ドル建て） 信託報酬：0.09372% 3. SBI・V・S\u0026amp;P500インデックス・ファンド\nバンガード社のVOOを通じてS\u0026amp;P500に投資 信託報酬：0.0938% 迷ったらオルカンかS\u0026amp;P500の一本投資で十分です。\nStep 4：積立金額と頻度を設定する 月額積立額 20年後の資産（年利5%想定） 5,000円/月 約206万円（元本120万円） 10,000円/月 約412万円（元本240万円） 30,000円/月 約1,237万円（元本720万円） 50,000円/月 約2,055万円（元本1,200万円） ※複利計算・税金考慮なし・確実な運用を保証するものではありません\n無理のない金額から始めて、余裕が出てきたら増額するのがおすすめです。まずは月5,000〜10,000円から始めましょう。\nStep 5：設定したら放置でOK 積立NISAの最大の強みは「ほったらかし投資」です。一度設定したら基本的に何もしなくてOK。毎月自動で積み立てられます。\nよくある疑問Q\u0026amp;A Q. 元本割れしないの？ **A. 元本割れのリスクはあります。**ただし、長期（15〜20年以上）の分散投資であれば歴史的にほぼプラスになっています。短期の値動きに一喜一憂しないことが大切です。\nQ. いつ始めれば一番いい？ A. 今すぐ始めるのがベストです。「タイミングを見計らう」より「長く積み立てる」方が重要です。複利の力を最大化するには、1日でも早く始めることが大切です。\nQ. NISA口座と特定口座はどう違う？ 口座種類 利益への課税 確定申告 NISA口座 非課税（0%） 不要 特定口座（源泉徴収あり） 約20% 不要 特定口座（源泉徴収なし） 約20% 必要 NISAは利益がまるまる手元に残る最強の非課税制度です。\nQ. NISAとiDeCoはどっちを優先すべき？ 詳しくはNISA・iDeCo・どっちを先にやるべきか をご参照ください。一般的には、まずNISAを最大活用してからiDeCoを検討するのが王道です。\n新NISAで失敗しないための注意点 注意1：短期売買を繰り返さない NISAは長期投資のための非課税制度です。株価が下がったからといってすぐ売ると、本来の複利効果が得られません。\n注意2：生活防衛資金は別に確保する NISA口座の資金は「最低でも5〜10年は使わないお金」にしましょう。生活費3〜6ヶ月分は必ず別に現金で確保してから投資を始めてください。\n注意3：高いコストの商品を選ばない 信託報酬（保有コスト）が1%を超えるような商品は長期的にパフォーマンスを大きく損ないます。0.1%以下を目安に選びましょう。\n2026年の新NISA活用戦略 資産状況 推奨戦略 投資初心者・月3万以下 つみたて投資枠のみでオルカン一本 月3〜10万投資できる つみたて枠＋成長枠でS\u0026amp;P500追加 月10万以上・中級者 成長枠で個別株・高配当ETFも検討 まとめ：新NISAの始め方チェックリスト SBI証券または楽天証券でNISA口座を開設した 生活防衛資金（3〜6ヶ月分）を別口座に確保した 積立銘柄を選んだ（まずはオルカンかS\u0026amp;P500） 無理のない月額積立金額を設定した 自動積立を設定して放置できる状態にした 新NISAは「始めた人が勝ち」の制度です。今日から口座開設を済ませて、将来の自分への投資を始めましょう。\n関連ツール・記事 ローンの返済額をシミュレーション → ローン計算ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール 新NISAシミュレーター — 積立額・利回りから資産推移をグラフで確認 配当金シミュレーター — NISA非課税の配当収入を自動計算、高配当ETF比較 iDeCo節税シミュレーター — 年収・職業から節税額と将来の受取額を計算 インフレによる購買力低下を計算 → インフレ計算ツール 新NISA おすすめ銘柄 初心者向け完全ガイド【2026年最新版】 NISA iDeCo どっちを先に始めるべき？ 老後2000万円問題を自分で検証 投資家向けテンプレートをBOOTHで配布中 資産管理・ポートフォリオ追跡・投資記録に使えるExcelテンプレートをBOOTHで配布しています。新NISAの積立シミュレーションシートも好評です。\nProductivity Works BOOTHストアはこちら 資産形成を「見える化」して、投資のモチベーションを維持しましょう。\n","permalink":"https://productivity-works.com/ja/posts/shin-nisa-hajimekata-shoshinsha-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「新NISAって聞くけど、結局どうやって始めればいいの？」——2024年からスタートした新NISAは、2026年現在も投資初心者にとって最も優先すべき制度です。本記事では\u003cstrong\u003e新NISAの口座開設から実際の投資スタートまで、初心者でもわかるように完全解説\u003c/strong\u003eします。\u003c/p\u003e\n\u003cdiv style=\"max-width:620px;margin:1.8em auto;text-align:center;\"\u003e\n\u003csvg viewBox=\"0 0 620 260\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:100%;height:auto;\" aria-label=\"新NISAつみたて投資枠と成長投資枠の比較\"\u003e\n  \u003cstyle\u003etext { font-family: 'Noto Sans JP', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', sans-serif; }\u003c/style\u003e\n  \u003crect width=\"620\" height=\"260\" rx=\"12\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"26\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"14\" font-weight=\"bold\"\u003e新NISA：つみたて投資枠 vs 成長投資枠\u003c/text\u003e\n  \u003c!-- 中央ラベル列 --\u003e\n  \u003crect x=\"230\" y=\"38\" width=\"160\" height=\"34\" rx=\"6\" fill=\"#1e293b\"/\u003e\n \u003ctext x=\"310\" y=\"59\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003e比較項目\u003c/text\u003e\n  \u003c!-- つみたて投資枠ヘッダー --\u003e\n  \u003crect x=\"20\" y=\"38\" width=\"200\" height=\"34\" rx=\"6\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"120\" y=\"59\" text-anchor=\"middle\" fill=\"white\" font-size=\"13\" font-weight=\"bold\"\u003eつみたて投資枠\u003c/text\u003e\n  \u003c!-- 成長投資枠ヘッダー --\u003e\n  \u003crect x=\"400\" y=\"38\" width=\"200\" height=\"34\" rx=\"6\" fill=\"#10b981\"/\u003e\n \u003ctext x=\"500\" y=\"59\" text-anchor=\"middle\" fill=\"white\" font-size=\"13\" font-weight=\"bold\"\u003e成長投資枠\u003c/text\u003e\n  \u003c!-- 行1: 年間上限 --\u003e\n  \u003crect x=\"20\" y=\"78\" width=\"200\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"120\" y=\"100\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"15\" font-weight=\"bold\"\u003e120万円\u003c/text\u003e\n  \u003crect x=\"230\" y=\"78\" width=\"160\" height=\"36\" rx=\"4\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"100\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"11\"\u003e年間投資上限\u003c/text\u003e\n  \u003crect x=\"400\" y=\"78\" width=\"200\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"500\" y=\"100\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"15\" font-weight=\"bold\"\u003e240万円\u003c/text\u003e\n  \u003c!-- 行2: 対象商品 --\u003e\n  \u003crect x=\"20\" y=\"120\" width=\"200\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"120\" y=\"142\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e長期積立向け投資信託\u003c/text\u003e\n  \u003crect x=\"230\" y=\"120\" width=\"160\" height=\"36\" rx=\"4\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"142\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"11\"\u003e対象商品\u003c/text\u003e\n  \u003crect x=\"400\" y=\"120\" width=\"200\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"500\" y=\"142\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e株式・ETF・投信など\u003c/text\u003e\n  \u003c!-- 行3: 向いている人 --\u003e\n  \u003crect x=\"20\" y=\"162\" width=\"200\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"120\" y=\"184\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\"\u003e初心者・コツコツ積立型\u003c/text\u003e\n  \u003crect x=\"230\" y=\"162\" width=\"160\" height=\"36\" rx=\"4\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"184\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"11\"\u003e向いている人\u003c/text\u003e\n  \u003crect x=\"400\" y=\"162\" width=\"200\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"500\" y=\"184\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"11\"\u003e中級者・個別株も買いたい人\u003c/text\u003e\n  \u003c!-- 合計バナー --\u003e\n  \u003crect x=\"20\" y=\"208\" width=\"580\" height=\"38\" rx=\"8\" fill=\"#1e293b\"/\u003e\n \u003ctext x=\"310\" y=\"224\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003e合計年間360万円まで投資可能 ／ 生涯枠 1,800万円 ／ 非課税期間 無期限\u003c/text\u003e\n \u003ctext x=\"310\" y=\"240\" text-anchor=\"middle\" fill=\"#cbd5e1\" font-size=\"10\"\u003e初心者はまずつみたて投資枠のみで始めるのが王道\u003c/text\u003e\n\u003c/svg\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"新nisaとは旧nisaとの違い\"\u003e新NISAとは？旧NISAとの違い\u003c/h2\u003e\n\u003cp\u003e新NISA（2024年〜）は、旧NISAから大幅に改善された非課税投資制度です。\u003c/p\u003e","title":"新NISA始め方2026年版【初心者向け完全ガイド】口座開設から投資スタートまで"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nアフィリエイト開示: 本記事には一部アフィリエイトリンクが含まれます。リンク経由でご購入いただいた場合、当サイトに手数料が発生することがありますが、読者の方への費用は一切変わりません。紹介する製品・サービスはすべて編集部が実際に検証したものに限っています。\nハンドメイド販売で確定申告が必要かどうか、正確に知っていますか？ minne（ミンネ）やCreema（クリーマ）でハンドメイド作品を販売している主婦の方から、よく聞かれる質問があります。\n「年間いくら売ったら確定申告が必要なの？」 「夫の扶養に入っているけど、販売してもいいの？」 「経費って何が認められるの？」 「申告しなかったらどうなる？」\nこの記事では、これらの疑問にひとつひとつ答えていきます。税務の話は難しそうに見えますが、基本のルールを理解すれば、主婦のハンドメイド販売でも迷わず対処できます。\nまず「所得」と「売上」の違いを理解する 確定申告の話をする前に、最も重要な基礎知識を確認します。\n売上（収入）≠ 所得\nこの違いを理解しないと、「いくらから申告が必要か」を正確に判断できません。\n売上（収入）: 作品を売って受け取った金額の合計 経費: 材料費、送料、販売手数料など、作品を作って売るためにかかった費用 所得 = 売上 − 経費 確定申告の必要性や税金の計算は、「売上」ではなく「所得」を基準に判断します。\n具体例で確認 年間売上：50万円 材料費：20万円 送料：3万円 販売手数料（minneの場合10.56%）：約5万3000円 その他経費：1万7000円 所得 = 50万円 − 30万円 = 20万円\nこの場合、確定申告の必要性は「売上50万円」ではなく「所得20万円」で判断します。\nハンドメイド販売の所得はどの「所得区分」に入るのか ハンドメイド販売で得た収入は、状況によって以下のどちらかに分類されます。\n雑所得 副業的にハンドメイドを販売している場合（本業は専業主婦、または他に仕事がある場合の副業的販売）は、原則として雑所得に分類されます。\n事業所得 ハンドメイド販売を事業として継続的・営利目的で行っている場合（毎月継続して売上があり、確定的な販売事業として行っている場合）は事業所得に分類される可能性があります。\nただし、近年（2022年〜）の税務当局の方針として、副業の収入が年間300万円以下の場合は「事業所得」ではなく「雑所得」と判断される傾向があります（帳簿や請求書の保存状況なども考慮）。\n主婦のハンドメイド販売のほとんどは「雑所得」として扱うのが現実的です。\n確定申告が必要になる金額の基準 パターン別：確定申告が必要かどうかの早見表 ハンドメイド所得 夫の扶養状況 他の所得 確定申告の必要性 20万円以下 専業主婦（夫の会社員） なし 原則不要 20万円超 専業主婦（夫の会社員） なし 必要 20万円以下 専業主婦（夫の会社員） 他の雑所得あり（合計20万超） 必要 いくらでも 自身がパート勤務 給与所得あり 給与以外の所得が20万円超で必要 いくらでも 専業主婦（住民税の申告が必要な場合） なし 住民税申告は必要な場合あり 最重要ポイント：「20万円ルール」とは 給与所得者（パートやアルバイトを含む）の場合、給与以外の所得（ハンドメイド販売による雑所得）の合計が年間20万円以下であれば、所得税の確定申告は不要です。\n専業主婦（無職）の場合は少し異なります。ハンドメイド販売による所得が基礎控除48万円以下であれば、所得税はかかりません（所得税の申告は不要）。\nただし、住民税は別の話です。後述しますが、所得税の申告が不要でも住民税の申告が必要な場合があります。\n専業主婦の場合の詳細な判断基準 所得税がかからない上限 専業主婦（他に所得なし）の場合、ハンドメイド販売の所得（売上−経費）が48万円以下であれば所得税はかかりません。これは基礎控除（48万円）があるためです。\nただし、所得が48万円以下であっても、以下の理由から確定申告または住民税申告が必要な場合があります。\n住民税の申告（市区町村への申告） 所得税の申告が不要でも、住民税（地方税）の申告が別途必要なケースがあります。\n市区町村によっては、ハンドメイド販売の所得が33万円（住民税の基礎控除）を超えると住民税がかかります 住民税の申告期限は毎年3月15日（多くの自治体）または3月中旬〜末日 住民税の申告をしなかった場合、後から市区町村に発覚して追徴課税されることがあります。\n夫の扶養に影響する金額の基準 扶養に関係する金額は、税制上の「扶養」と社会保険上の「扶養」で異なります。\n所得税上の扶養（配偶者控除・配偶者特別控除） 妻の合計所得金額 配偶者控除・配偶者特別控除 48万円以下 配偶者控除（フルに適用） 48万円超〜133万円以下 配偶者特別控除（段階的に減額） 133万円超 配偶者控除・特別控除ともに適用なし ハンドメイドの所得が48万円を超えると、夫の税金が増える可能性があります（ただし徐々に控除が減るため、急激に税負担が増えるわけではありません）。\n社会保険上の扶養（健康保険・年金） 社会保険上の扶養（いわゆる「130万円の壁」）は、所得ではなく**収入（売上）**で判断されることが多いです。\nただし、ハンドメイド販売の場合は事業の規模や性格によって保険者（夫の勤務先の健康保険組合）の判断が異なります。年間売上が増えてきた場合は、夫の勤務先の健康保険組合に確認することを強くお勧めします。\nハンドメイド販売で認められる経費一覧 経費を正確に把握することで、課税対象となる所得を適切に計算できます。\n材料費・仕入れ費用 布、糸、ビーズ、レジン、フェルト、木材など 作品の包装資材（袋、箱、ラッピング材料） 梱包材（プチプチ、段ボール） 販売プラットフォーム関連費用 minne、Creemaなどの販売手数料 月額利用料（プレミアム会員費など） 通信・配送費 送料（買い手負担の場合を除く） 梱包サービスの費用 作業環境・道具 ミシン、ハサミ、接着剤、工具類（消耗品として計上） 高額な機器（ミシンなど）は減価償却が必要な場合あり 作業台、収納用品 学習・情報収集費 ハンドメイドの技法を学ぶ書籍、動画サービス 講座・ワークショップの参加費 宣伝・写真撮影費 作品撮影用の背景紙、照明 撮影小道具 注意：按分が必要な経費 自宅で作業している場合、以下の費用は「業務使用割合」に応じて按分（一部のみ経費計上）します。\nインターネット費用 電気代 家賃（明確に作業スペースが区切られている場合） 確定申告の方法：具体的な手順 確定申告が必要と判断したら、以下の手順で進めます。\n1. 必要書類を揃える 売上の記録（販売プラットフォームの売上レポートをダウンロード） 経費の記録と領収書 マイナンバーカードまたは通知カード 銀行口座の情報（還付がある場合） 2. 確定申告書を作成する e-Tax（国税電子申告）を使うのが最もおすすめです。\n国税庁の「確定申告書等作成コーナー」にアクセス マイナンバーカードでログイン（またはIDパスワード方式） 画面の指示に従って入力 雑所得の欄にハンドメイドの収入・経費を入力 計算された税額を確認してオンライン提出 3. 税金を納付する（または還付を受ける） 納付が必要な場合：3月15日までに納付 還付がある場合：申告後1〜2ヶ月以内に指定口座に振り込まれます 申告しないとどうなるか：無申告のリスク 「少額だから申告しなくていいか」と思ってしまう気持ちはわかります。しかし、申告が必要なのに申告しないことには、現実的なリスクがあります。\n税務調査のリスク 販売プラットフォーム（minne、Creema）は、一定以上の取引について税務署に情報提供を行うことがあります。国税庁はデジタルプラットフォームからのデータを活用した税務調査を強化しています。\n無申告加算税 期限内に申告しなかった場合、本来の税額に加えて無申告加算税（15〜20%）が課されます。\n延滞税 申告・納付が遅れた期間に応じて延滞税もかかります。\n#\u0026gt; ハンドメイド販売の確定申告には**freee会計（無料トライアルあり） **がおすすめ。スマホからでも操作でき、初めての確定申告でも安心です。\nまとめ：申告が必要なら早めに対処が正解 「少額だからバレない」という考え方は危険です。申告が必要な金額であれば、素直に申告するのが最も安全で、長い目で見て得策です。\nハンドメイド販売の記録管理のコツ 確定申告を楽にするために、日頃から記録をつけておきましょう。\n売上の記録 ミンネ・クリーマなどのプラットフォームは、管理画面から売上レポートをCSV形式でダウンロードできます。毎月末にダウンロードして保存する習慣をつけましょう。\n経費の記録 材料を購入したら必ずレシートを保存 スマートフォンで撮影してクラウドに保存（Googleフォト、Notionなど） Excelや家計簿アプリで月ごとに集計 保存期間 確定申告の書類・領収書は7年間の保存が義務付けられています（白色申告・青色申告で一部異なる）。\nよくある質問 Q. minneの振込手数料は経費になりますか？ はい、販売プラットフォームからの振込手数料は経費として計上できます。\nQ. 作品撮影のためにスマートフォンを購入した場合は？ 撮影専用に購入した場合は経費になりますが、私用と兼用している場合は業務使用割合（例：3割）で按分して計上します。\nQ. 委託販売（ハンドメイドマーケットへの出品）も同じ扱いですか？ 基本的な考え方は同じです。受け取った売上から手数料や経費を引いた所得に対して税金がかかります。\nQ. ハンドメイド以外にも雑所得（アンケートモニターなど）がある場合は？ 雑所得は全て合算します。ハンドメイド販売の所得＋他の雑所得が20万円を超えたら確定申告が必要です。\nまとめ 主婦のハンドメイド販売と確定申告の関係をまとめます。\n確定申告が必要なケース:\n専業主婦で、ハンドメイド所得が48万円超 パートなどの給与収入がある主婦で、ハンドメイド所得が20万円超 扶養への影響:\nハンドメイド所得（売上−経費）が48万円を超えると、夫の配偶者控除が減額・消滅 社会保険の扶養は「売上（収入）」で判断されることが多く、組合によって異なる 最初にやること:\n年間の売上と経費を正確に計算する 所得が20万円または48万円の基準を超えているか確認する 超えていれば確定申告の準備を始める 悩んだら税務署（無料相談を実施）や税理士に相談するのが最も確実です。確定申告は難しそうに見えますが、e-Taxを使えば意外とシンプルに終わります。ぜひ正しく申告して、安心してハンドメイド販売を続けてください。\n本記事の内容は2026年5月時点の税制・制度に基づいています。税法は改正される場合があるため、最新情報は国税庁のウェブサイトまたは税理士にご確認ください。\n関連ツール・記事 ハンドメイド収入の税金を計算 → 副業税金計算ツール 手取り額をシミュレーション → 手取り計算ツール 年収から所得税・住民税を計算 → 所得税シミュレーター 副業収入20万円以下でも確定申告は必要？やり方を解説 副業フリーランスの確定申告のやり方2026 在宅ワーク・副業の始め方：主婦向け完全ガイド2026 副業おすすめ在宅スキルなし：今すぐ始められる仕事5選 フリーランス確定申告のやり方：完全ガイド 関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 ","permalink":"https://productivity-works.com/ja/posts/shufu-handmade-kakuteishinkoku/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eアフィリエイト開示\u003c/strong\u003e: 本記事には一部アフィリエイトリンクが含まれます。リンク経由でご購入いただいた場合、当サイトに手数料が発生することがありますが、読者の方への費用は一切変わりません。紹介する製品・サービスはすべて編集部が実際に検証したものに限っています。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"ハンドメイド販売で確定申告が必要かどうか正確に知っていますか\"\u003eハンドメイド販売で確定申告が必要かどうか、正確に知っていますか？\u003c/h2\u003e\n\u003cp\u003eminne（ミンネ）やCreema（クリーマ）でハンドメイド作品を販売している主婦の方から、よく聞かれる質問があります。\u003c/p\u003e\n\u003cp\u003e「年間いくら売ったら確定申告が必要なの？」\n「夫の扶養に入っているけど、販売してもいいの？」\n「経費って何が認められるの？」\n「申告しなかったらどうなる？」\u003c/p\u003e\n\u003cp\u003eこの記事では、これらの疑問にひとつひとつ答えていきます。税務の話は難しそうに見えますが、基本のルールを理解すれば、主婦のハンドメイド販売でも迷わず対処できます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"まず所得と売上の違いを理解する\"\u003eまず「所得」と「売上」の違いを理解する\u003c/h2\u003e\n\u003cp\u003e確定申告の話をする前に、最も重要な基礎知識を確認します。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e売上（収入）≠ 所得\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eこの違いを理解しないと、「いくらから申告が必要か」を正確に判断できません。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e売上（収入）\u003c/strong\u003e: 作品を売って受け取った金額の合計\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e経費\u003c/strong\u003e: 材料費、送料、販売手数料など、作品を作って売るためにかかった費用\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e所得 = 売上 − 経費\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e確定申告の必要性や税金の計算は、「売上」ではなく「\u003cstrong\u003e所得\u003c/strong\u003e」を基準に判断します。\u003c/p\u003e\n\u003ch3 id=\"具体例で確認\"\u003e具体例で確認\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e年間売上：50万円\u003c/li\u003e\n\u003cli\u003e材料費：20万円\u003c/li\u003e\n\u003cli\u003e送料：3万円\u003c/li\u003e\n\u003cli\u003e販売手数料（minneの場合10.56%）：約5万3000円\u003c/li\u003e\n\u003cli\u003eその他経費：1万7000円\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e所得 = 50万円 − 30万円 = 20万円\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eこの場合、確定申告の必要性は「売上50万円」ではなく「所得20万円」で判断します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ハンドメイド販売の所得はどの所得区分に入るのか\"\u003eハンドメイド販売の所得はどの「所得区分」に入るのか\u003c/h2\u003e\n\u003cp\u003eハンドメイド販売で得た収入は、状況によって以下のどちらかに分類されます。\u003c/p\u003e\n\u003ch3 id=\"雑所得\"\u003e雑所得\u003c/h3\u003e\n\u003cp\u003e副業的にハンドメイドを販売している場合（本業は専業主婦、または他に仕事がある場合の副業的販売）は、原則として\u003cstrong\u003e雑所得\u003c/strong\u003eに分類されます。\u003c/p\u003e\n\u003ch3 id=\"事業所得\"\u003e事業所得\u003c/h3\u003e\n\u003cp\u003eハンドメイド販売を事業として継続的・営利目的で行っている場合（毎月継続して売上があり、確定的な販売事業として行っている場合）は\u003cstrong\u003e事業所得\u003c/strong\u003eに分類される可能性があります。\u003c/p\u003e\n\u003cp\u003eただし、近年（2022年〜）の税務当局の方針として、副業の収入が年間300万円以下の場合は「事業所得」ではなく「雑所得」と判断される傾向があります（帳簿や請求書の保存状況なども考慮）。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e主婦のハンドメイド販売のほとんどは「雑所得」として扱うのが現実的\u003c/strong\u003eです。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"確定申告が必要になる金額の基準\"\u003e確定申告が必要になる金額の基準\u003c/h2\u003e\n\u003ch3 id=\"パターン別確定申告が必要かどうかの早見表\"\u003eパターン別：確定申告が必要かどうかの早見表\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eハンドメイド所得\u003c/th\u003e\n          \u003cth\u003e夫の扶養状況\u003c/th\u003e\n          \u003cth\u003e他の所得\u003c/th\u003e\n          \u003cth\u003e確定申告の必要性\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e20万円以下\u003c/td\u003e\n          \u003ctd\u003e専業主婦（夫の会社員）\u003c/td\u003e\n          \u003ctd\u003eなし\u003c/td\u003e\n          \u003ctd\u003e原則不要\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e20万円超\u003c/td\u003e\n          \u003ctd\u003e専業主婦（夫の会社員）\u003c/td\u003e\n          \u003ctd\u003eなし\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e必要\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e20万円以下\u003c/td\u003e\n          \u003ctd\u003e専業主婦（夫の会社員）\u003c/td\u003e\n          \u003ctd\u003e他の雑所得あり（合計20万超）\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e必要\u003c/strong\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eいくらでも\u003c/td\u003e\n          \u003ctd\u003e自身がパート勤務\u003c/td\u003e\n          \u003ctd\u003e給与所得あり\u003c/td\u003e\n          \u003ctd\u003e給与以外の所得が\u003cstrong\u003e20万円超\u003c/strong\u003eで必要\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eいくらでも\u003c/td\u003e\n          \u003ctd\u003e専業主婦（住民税の申告が必要な場合）\u003c/td\u003e\n          \u003ctd\u003eなし\u003c/td\u003e\n          \u003ctd\u003e住民税申告は必要な場合あり\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"最重要ポイント20万円ルールとは\"\u003e最重要ポイント：「20万円ルール」とは\u003c/h3\u003e\n\u003cp\u003e給与所得者（パートやアルバイトを含む）の場合、給与以外の所得（ハンドメイド販売による雑所得）の合計が\u003cstrong\u003e年間20万円以下\u003c/strong\u003eであれば、所得税の確定申告は不要です。\u003c/p\u003e","title":"主婦のハンドメイド販売、確定申告はいくらから必要？【2026年最新】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n投資信託おすすめ初心者向け厳選ファンドを完全比較【2026年最新版】 「投資信託を始めたいけど、数が多すぎてどれを選べばいいかわからない」という悩みをお持ちではないでしょうか。現在、日本で買える投資信託は6,000本以上あります。しかし、初心者が本当に使うべきファンドは、そのうちのごく一部です。\nこの記事では以下のことがわかります。\n投資信託の基本的な仕組みとコストの見方 2026年に初心者がおすすめする厳選ファンド一覧（比較表付き） インデックス型とアクティブ型の違いと選び方 失敗しない投資信託の選び方5つのチェックポイント 投資信託とは？基本を理解する 定義・仕組み 投資信託とは、多くの投資家から集めたお金をひとつにまとめ、専門家（ファンドマネージャー）が株式・債券・不動産などに分散投資する金融商品です。少額（100円〜）から世界中の資産に投資でき、個別株と違って一本買うだけで自動的に分散投資が完成する点が最大の特徴です。\n投資信託の種類\n種別 特徴 信託報酬の目安 インデックスファンド 株価指数に連動する運用。コストが低い 0.05〜0.2% アクティブファンド 運用者が指数を上回ることを目指す 0.5〜2% バランスファンド 株・債券・REITを複数組み合わせ 0.1〜0.5% ターゲットデートファンド 目標年に向けて自動的にリスクを調整 0.2〜0.5% 初心者には、コストが低く長期実績が安定しているインデックスファンドをおすすめします。\nメリット・デメリット メリット\n100円〜少額から始められる 自動的に分散投資が完成する プロが運用するため専門知識不要 新NISAの「つみたて投資枠」で非課税運用できる 毎月の自動積立設定が可能 デメリット\n元本保証がない（損失リスクあり） 信託報酬（維持費）が毎年かかる 個別株と違って大きなリターンは期待しにくい アクティブファンドはコストの割に成果が出にくいものも多い 投資信託 おすすめ一覧（比較表） インデックスファンド部門 以下は2026年5月現在、初心者に最もおすすめできる低コストインデックスファンドです。\nファンド名 信託報酬 対象指数 純資産 設定年 おすすめ度 eMAXIS Slim 全世界株式（オール・カントリー） 0.05775% MSCI ACWI 4兆円超 2018年 ★★★★★ eMAXIS Slim 米国株式（S\u0026amp;P500） 0.09372% S\u0026amp;P 500 5兆円超 2018年 ★★★★★ SBI・V・S\u0026amp;P500インデックス・ファンド 0.0938% S\u0026amp;P 500 1兆円超 2019年 ★★★★☆ 楽天・オールカントリー株式インデックス 0.0561% MSCI ACWI 3,000億円超 2023年 ★★★★☆ eMAXIS Slim 先進国株式インデックス 0.09889% MSCI Kokusai 3兆円超 2017年 ★★★★☆ ニッセイ・外国株式インデックスファンド 0.09889% MSCI Kokusai 1兆円超 2013年 ★★★★☆ eMAXIS Slim 国内株式（TOPIX） 0.143% TOPIX 3,000億円超 2017年 ★★★☆☆ 1位おすすめ: eMAXIS Slim 全世界株式（オール・カントリー）\n「投資先を日本にするか米国にするか世界にするか迷っている」なら、オルカン1本で解決します。先進国23カ国・新興国24カ国を含む約3,000銘柄に分散投資でき、信託報酬は業界最低水準クラスです。\n公式サイトで詳細を確認する バランスファンド部門 リスクを分散しながら債券も組み合わせたい方向けのおすすめです。\nファンド名 信託報酬 資産配分 純資産 特徴 eMAXIS Slim バランス（8資産均等型） 0.143% 株・債券・REIT各国均等 3,000億円超 8資産に均等分散。初心者に人気 世界経済インデックスファンド 0.55% 株60%・債券40% 1,000億円超 GDPウェイトで配分調整 三菱UFJ バランス・インデックスファンド 0.154% 株式・債券等 500億円超 低コストバランスファンド 公式サイトで詳細を確認する 選び方・注意点 チェックポイント 初心者が投資信託を選ぶ際の5つのチェックポイントを押さえましょう。\nチェック1: 信託報酬は年率0.2%以下か 長期投資では信託報酬の差が最終的な資産額に大きく影響します。たとえば、信託報酬0.05%と1%のファンドに100万円を30年投資した場合、差は200万円以上になることもあります。\nチェック2: 純資産残高は100億円以上か 純資産残高が少ないファンドは繰上償還（途中終了）のリスクがあります。特につみたて投資では長期運用が前提なので、純資産が大きく安定しているファンドを選びましょう。\nチェック3: 設定から3年以上経過しているか 新しいファンドは実績データが少なく、評価が難しいです。3〜5年以上の運用履歴があるファンドの方が安心です。\nチェック4: 新NISAのつみたて投資枠対象か 金融庁が審査した「つみたて投資枠対象ファンド」であれば、一定の品質基準をクリアしています。証券会社のサイトでフィルタリングして確認しましょう。\nチェック5: 自分のリスク許容度に合っているか 株式100%のファンドは長期的にはリターンが高いですが、短期的な値下がりも大きいです。心理的に値下がりが不安な方はバランスファンドや債券を組み合わせた構成を検討しましょう。\nよくある失敗 失敗1: 毎月分配型ファンドを選ぶ 「毎月配当がもらえる」と人気の毎月分配型ファンドは、実は自分の元本から分配金を払い出していることが多く（特別分配金）、長期的な資産形成には向きません。\n失敗2: テーマ型・流行型ファンドに飛びつく 「宇宙ビジネスファンド」「メタバース関連ファンド」などのテーマ型は信託報酬が高く、テーマのブームが去ると急落するリスクがあります。\n失敗3: 複数の証券会社に分散しすぎる ポートフォリオ管理が複雑になるだけでなく、資産全体の把握が難しくなります。まずは1社に集中して管理を簡単にしましょう。\n失敗4: 信託財産留保額（売却コスト）を無視する ファンドによっては売却時に0.1〜0.3%の信託財産留保額がかかるものがあります。頻繁に売買する場合はこのコストも考慮しましょう。\n関連記事: 新NISAおすすめ銘柄 初心者向けガイド よくある質問（FAQ） Q1. 投資信託は毎月いくらから始められますか？ 多くの証券会社では月100円から積立できます。SBI証券・楽天証券ともに100円積立に対応しています。まずは無理のない金額から始めて、慣れてきたら増額するのがおすすめです。\nQ2. インデックスファンドとアクティブファンドはどちらがいいですか？ 長期的なデータでは、コストを考慮するとインデックスファンドの方がアクティブファンドを上回ることが多いです。初心者は迷わずインデックスファンドを選びましょう。\nQ3. 複数のファンドを買う必要がありますか？ オルカン1本で世界中に分散投資できるため、必ずしも複数買う必要はありません。ただし、日本株の比率を高めたい場合などは国内インデックスを追加する方法もあります。\nQ4. ファンドはいつ売ればいいですか？ 老後資金目的なら退職前後、教育資金なら子供が進学する2〜3年前から徐々に現金化するのが一般的です。市場の底や天井を当てようとするより、目標額・目標時期で判断しましょう。\nQ5. 投資信託で元本割れすることはありますか？ はい、あります。特に株式型は短期的に20〜30%の下落になることもあります。ただし、長期・積立・分散の原則を守れば、20年以上の期間では元本割れのリスクが大幅に低下します。\nQ6. 分配金ありと再投資型、どちらがいいですか？ 長期の資産形成には「再投資型（分配金なし）」が有利です。分配金をもらうと課税されるため、再投資型の方が複利効果が大きくなります。\nQ7. ネット証券と銀行、どちらで買った方がいいですか？ ネット証券の方がコストが低く、商品ラインナップも豊富です。銀行窓口で販売されている投資信託は手数料が高いものも多いので、特別な理由がない限りネット証券をおすすめします。\n投資信託の購入は**楽天証券 **が便利。楽天ポイントで購入でき、積立設定も簡単です。\nまとめ・行動の呼びかけ 2026年に初心者が選ぶべき投資信託は「eMAXIS Slim 全世界株式（オール・カントリー）」か「eMAXIS Slim 米国株式（S\u0026amp;P500）」の一択に絞って問題ありません。コストが低く、長期実績が安定しており、新NISAのつみたて投資枠にも対応しています。まずは月3,000円〜1万円で積立を開始し、家計に余裕が出たら増額していきましょう。\n今すぐ積立投資を始める 関連記事: SBI証券と楽天証券を徹底比較 関連ツール FIRE（経済的自立）までの年数を計算 → FIREシミュレーター 積立投資の複利効果をシミュレーション → 複利計算シミュレーター NISAの非課税メリットを計算 → NISAシミュレーター 配当型ファンドの収入を計算 → 配当金シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター 教育費の総額を計算 → 教育費シミュレーター 総資産・純資産を計算 → 資産管理シミュレーター インフレによる購買力低下を計算 → インフレ計算ツール ※本記事は情報提供を目的としており、特定の金融商品の購入・売却を推奨するものではありません。投資判断はご自身の責任で行ってください。最新情報は各公式サイトでご確認ください。\n関連テンプレート 資産運用・家計管理をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す ","permalink":"https://productivity-works.com/ja/posts/toushishintaku-osusume-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"投資信託おすすめ初心者向け厳選ファンドを完全比較2026年最新版\"\u003e投資信託おすすめ初心者向け厳選ファンドを完全比較【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「投資信託を始めたいけど、数が多すぎてどれを選べばいいかわからない」という悩みをお持ちではないでしょうか。現在、日本で買える投資信託は6,000本以上あります。しかし、初心者が本当に使うべきファンドは、そのうちのごく一部です。\u003c/p\u003e\n\u003cp\u003eこの記事では以下のことがわかります。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e投資信託の基本的な仕組みとコストの見方\u003c/li\u003e\n\u003cli\u003e2026年に初心者がおすすめする厳選ファンド一覧（比較表付き）\u003c/li\u003e\n\u003cli\u003eインデックス型とアクティブ型の違いと選び方\u003c/li\u003e\n\u003cli\u003e失敗しない投資信託の選び方5つのチェックポイント\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"投資信託とは基本を理解する\"\u003e投資信託とは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003e投資信託とは、多くの投資家から集めたお金をひとつにまとめ、専門家（ファンドマネージャー）が株式・債券・不動産などに分散投資する金融商品です。少額（100円〜）から世界中の資産に投資でき、個別株と違って一本買うだけで自動的に分散投資が完成する点が最大の特徴です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e投資信託の種類\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e種別\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n          \u003cth\u003e信託報酬の目安\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eインデックスファンド\u003c/td\u003e\n          \u003ctd\u003e株価指数に連動する運用。コストが低い\u003c/td\u003e\n          \u003ctd\u003e0.05〜0.2%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eアクティブファンド\u003c/td\u003e\n          \u003ctd\u003e運用者が指数を上回ることを目指す\u003c/td\u003e\n          \u003ctd\u003e0.5〜2%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eバランスファンド\u003c/td\u003e\n          \u003ctd\u003e株・債券・REITを複数組み合わせ\u003c/td\u003e\n          \u003ctd\u003e0.1〜0.5%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eターゲットデートファンド\u003c/td\u003e\n          \u003ctd\u003e目標年に向けて自動的にリスクを調整\u003c/td\u003e\n          \u003ctd\u003e0.2〜0.5%\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e初心者には、コストが低く長期実績が安定している\u003cstrong\u003eインデックスファンド\u003c/strong\u003eをおすすめします。\u003c/p\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e100円〜少額から始められる\u003c/li\u003e\n\u003cli\u003e自動的に分散投資が完成する\u003c/li\u003e\n\u003cli\u003eプロが運用するため専門知識不要\u003c/li\u003e\n\u003cli\u003e新NISAの「つみたて投資枠」で非課税運用できる\u003c/li\u003e\n\u003cli\u003e毎月の自動積立設定が可能\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eデメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e元本保証がない（損失リスクあり）\u003c/li\u003e\n\u003cli\u003e信託報酬（維持費）が毎年かかる\u003c/li\u003e\n\u003cli\u003e個別株と違って大きなリターンは期待しにくい\u003c/li\u003e\n\u003cli\u003eアクティブファンドはコストの割に成果が出にくいものも多い\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"投資信託-おすすめ一覧比較表\"\u003e投資信託 おすすめ一覧（比較表）\u003c/h2\u003e\n\u003ch3 id=\"インデックスファンド部門\"\u003eインデックスファンド部門\u003c/h3\u003e\n\u003cp\u003e以下は2026年5月現在、初心者に最もおすすめできる低コストインデックスファンドです。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eファンド名\u003c/th\u003e\n          \u003cth\u003e信託報酬\u003c/th\u003e\n          \u003cth\u003e対象指数\u003c/th\u003e\n          \u003cth\u003e純資産\u003c/th\u003e\n          \u003cth\u003e設定年\u003c/th\u003e\n          \u003cth\u003eおすすめ度\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eeMAXIS Slim 全世界株式（オール・カントリー）\u003c/td\u003e\n          \u003ctd\u003e0.05775%\u003c/td\u003e\n          \u003ctd\u003eMSCI ACWI\u003c/td\u003e\n          \u003ctd\u003e4兆円超\u003c/td\u003e\n          \u003ctd\u003e2018年\u003c/td\u003e\n          \u003ctd\u003e★★★★★\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eeMAXIS Slim 米国株式（S\u0026amp;P500）\u003c/td\u003e\n          \u003ctd\u003e0.09372%\u003c/td\u003e\n          \u003ctd\u003eS\u0026amp;P 500\u003c/td\u003e\n          \u003ctd\u003e5兆円超\u003c/td\u003e\n          \u003ctd\u003e2018年\u003c/td\u003e\n          \u003ctd\u003e★★★★★\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSBI・V・S\u0026amp;P500インデックス・ファンド\u003c/td\u003e\n          \u003ctd\u003e0.0938%\u003c/td\u003e\n          \u003ctd\u003eS\u0026amp;P 500\u003c/td\u003e\n          \u003ctd\u003e1兆円超\u003c/td\u003e\n          \u003ctd\u003e2019年\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e楽天・オールカントリー株式インデックス\u003c/td\u003e\n          \u003ctd\u003e0.0561%\u003c/td\u003e\n          \u003ctd\u003eMSCI ACWI\u003c/td\u003e\n          \u003ctd\u003e3,000億円超\u003c/td\u003e\n          \u003ctd\u003e2023年\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eeMAXIS Slim 先進国株式インデックス\u003c/td\u003e\n          \u003ctd\u003e0.09889%\u003c/td\u003e\n          \u003ctd\u003eMSCI Kokusai\u003c/td\u003e\n          \u003ctd\u003e3兆円超\u003c/td\u003e\n          \u003ctd\u003e2017年\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eニッセイ・外国株式インデックスファンド\u003c/td\u003e\n          \u003ctd\u003e0.09889%\u003c/td\u003e\n          \u003ctd\u003eMSCI Kokusai\u003c/td\u003e\n          \u003ctd\u003e1兆円超\u003c/td\u003e\n          \u003ctd\u003e2013年\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eeMAXIS Slim 国内株式（TOPIX）\u003c/td\u003e\n          \u003ctd\u003e0.143%\u003c/td\u003e\n          \u003ctd\u003eTOPIX\u003c/td\u003e\n          \u003ctd\u003e3,000億円超\u003c/td\u003e\n          \u003ctd\u003e2017年\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e1位おすすめ: eMAXIS Slim 全世界株式（オール・カントリー）\u003c/strong\u003e\u003c/p\u003e","title":"投資信託 おすすめ 初心者向け厳選ファンド完全比較【2026年最新版】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n「育児の合間に自宅で少しでも稼ぎたい」「子どもが学校に行っている時間を有効に使いたい」「パートに出るのは難しいけれど、収入を増やしたい」——そんな思いを持つ主婦・ママの方に、在宅ワークは現実的な選択肢です。\n本記事では、スキルなし・経験なしから始められる在宅ワークの選び方から、稼げるようになるまでのロードマップ、税金の基礎知識まで丁寧に解説します。\n在宅ワークを始める前に知っておくべきこと 在宅ワークの現実：甘くないけど、可能性は本物 「在宅で月30万稼げる！」という誇大広告には要注意ですが、正しいアプローチで継続すれば、月3万〜10万円の収入を家事・育児と両立しながら得ることは十分に現実的です。\n多くの主婦在宅ワーカーが経験する典型的な収入の推移：\n期間 収入目安 状況 開始〜3か月 0〜1万円 仕事の仕組みを学ぶ時期 3〜6か月 1〜3万円 実績が積み始める 6か月〜1年 3〜5万円 継続依頼・単価アップが増える 1〜2年 5〜10万円 専門スキル確立・安定稼働 2年以上 10万円〜 フリーランスとして独立も視野に 「すぐに稼げない」ことを最初から理解しておくと、挫折しにくくなります。\n在宅ワークと「内職」の違い 昔ながらの内職（シール貼り・袋詰めなど）とは異なり、現代の在宅ワークはパソコン・スマートフォンを使ったデジタル系の仕事が主流です。単価・将来性ともに現代的な在宅ワークの方が優れています。\n主婦・ママにおすすめの在宅ワーク職種 スキル不要・初心者でも始めやすい仕事 1. データ入力・文字起こし 特徴：\n特別なスキル不要、タイピングができれば始められる 音声データやメモをテキストにする作業 時給換算で500〜1,500円程度が多い 向いている人：タイピングが速い方、コツコツした作業が得意な方\n主な案件獲得先：クラウドワークス、ランサーズ、シュフティ\n2. アンケートモニター・ポイントサイト 特徴：\n隙間時間（子どもが昼寝中など）にスマホで完結 1か月数千円〜1万円程度のお小遣い稼ぎに 即日始められる手軽さ 注意点：これだけで生活費を稼ぐのは難しい。あくまでサブの収入源として捉える\n代表的なサービス：マクロミル、楽天インサイト、モッピー、ポイントインカム\n3. ネットショップ（メルカリ・ハンドメイド販売） 特徴：\n自宅の不用品を売るところから始められる 趣味のハンドメイド作品を販売できる 在庫管理・発送の手間が発生する ステップアップの方法：メルカリで実績を積んだ後、minneやCreemaでハンドメイド販売へ移行するルートが人気。\n少しスキルを磨くと稼げる仕事 4. Webライティング 特徴：\n文章を書いてお金をもらう仕事 初心者向け案件は文字単価0.5〜1円程度、実績がつけば2〜5円も可能 特定ジャンル（育児・美容・料理など）の知識を活かせる 始め方：\nクラウドワークス・ランサーズで「ライター募集・未経験OK」の案件に応募 最初はテストライティングで実績を作る ポートフォリオ（書いた記事一覧）を充実させて単価交渉 月3万円の目安：文字単価1円×3万文字（1日約1,000文字の記事3本/週）\nおすすめ学習リソース：Webライティング能力検定、各種ライター養成講座\n5. SNS運用・Instagramアシスタント 特徴：\n普段SNSを使っている方に向いている 投稿の企画・作成・スケジューリングを代行 月3〜5万円程度の案件が多い 必要スキル：CanvaなどのデザインツールとSNSの基本知識\n6. 事務アシスタント・オンライン秘書 特徴：\nメール対応・スケジュール管理・資料作成などをリモートで担当 前職でオフィスワーク経験がある方には特に有利 安定した月次収入が得やすい 代表的な求人媒体：キャリア・マム、在宅ワーク求人サイト各種\nスキルを磨いて高単価を目指す仕事 7. Webデザイン 特徴：\nバナー・LP（ランディングページ）・名刺デザインなど 初心者でも3〜6か月の学習で案件獲得が目指せる フリーランス時給換算で2,000〜5,000円以上も可能 おすすめ学習ルート：\nCanva（無料）で基礎の感覚を掴む Adobe Illustrator / Photoshop または Figmaを習得 ポートフォリオサイト（架空の作品でもOK）を作成 クラウドワークスで低単価から実績を積み始める おすすめ学習プラットフォーム：デジタルハリウッドSTUDIO、デザインスクールのオンラインコース、Udemy（セール時は1,500円程度でコース購入可）\n8. 動画編集 特徴：\nYouTubeやTikTokの普及で需要が急増 1本あたり5,000〜30,000円の案件も多い スマホアプリ（CapCut等）からスタートできる 学習ルート：\nCapCut・VLLOなどスマホアプリで基礎練習 DaVinci Resolve（無料）でPC編集を習得 YouTube向け・SNS向けなどジャンルを絞って案件獲得 9. プログラミング・コーディング 特徴：\n学習に3〜12か月かかるが、単価が最も高い HTML/CSS（コーディング）だけでも月5〜15万円稼ぐ人も 将来的なキャリアの幅が広がる おすすめ学習リソース：プログラミングスクール（TechAcademy・SHElikes等）、Progate、paizaラーニング\n主婦・ママが在宅ワークを成功させる5つのコツ コツ①：「隙間時間」ではなく「作業時間」を確保する 在宅ワークで稼げない人の共通点は「時間が確保できない」こと。子どもが幼い場合は特に、決まった作業時間を意図的に作ることが必要です。\n時間確保のヒント：\n子どもの昼寝タイム（1〜2時間）を作業時間に固定 夫（パートナー）に週2〜3日、夕方1〜2時間の育児を担ってもらう 夜10時〜12時を「自分の仕事時間」と設定する コツ②：最初の仕事は「収益より学び」と割り切る 最初の3か月は収益よりも「どんな仕事が自分に向いているか」「どうすれば依頼主に満足してもらえるか」を学ぶ期間と割り切りましょう。低単価でも丁寧にこなすことで、リピート依頼や口コミにつながります。\nコツ③：1つの仕事ジャンルに絞る 最初から複数のジャンルを試すのではなく、1つに絞って実績を積むことが大切です。「育児ブログのライティング専門」「美容系Instagramの運用代行専門」のように特化することで、単価交渉がしやすくなります。\nコツ④：実績をポートフォリオ・プロフィールにまとめる クラウドソーシングでは、プロフィールの充実度が受注率に直結します。\n顔写真（なければイラストアバター）を設定する 自己紹介文に「得意なこと」「大切にしていること」を書く 納品した作品は許可を得てポートフォリオに掲載する コツ⑤：コミュニティやSNSで仲間を作る 在宅ワークは孤独になりがちです。X（旧Twitter）・InstagramなどのSNSで同じく在宅ワークをしている主婦と繋がることで、モチベーション維持・情報交換・案件の紹介につながります。\n「#在宅ワーク主婦」「#ママフリーランス」などのハッシュタグで検索してみましょう。\n主な案件獲得先・プラットフォーム比較 プラットフォーム 特徴 おすすめの仕事ジャンル クラウドワークス 国内最大級。案件数が多い ライティング・データ入力・Web制作全般 ランサーズ クラウドワークスと並ぶ大手 デザイン・プログラミング・翻訳 シュフティ 主婦向け特化サイト データ入力・翻訳・ライティング ** coconala（ココナラ）** スキルを出品する形式 イラスト・デザイン・相談・占い Bizseek 手数料が安め 幅広いジャンル Workship 優良企業の直接契約型 デザイン・エンジニア・マーケ X（旧Twitter） DM・発信で直接獲得 デザイン・ライティング・SNS運用 在宅ワークの収入と税金・扶養の関係 知らないと損する「扶養の壁」 在宅ワークで収入が増えると、配偶者の扶養から外れるボーダーラインを意識する必要があります。\nボーダー 概要 年収103万円の壁 所得税がかかり始める。パート収入と在宅ワーク収入の合計で判定 年収106万円の壁 社会保険の加入義務が発生する場合がある（勤務先の条件による） 年収130万円の壁 配偶者の社会保険（健康保険・年金）の扶養から外れる 年収150万円の壁 配偶者特別控除の満額（38万円）が受けられなくなる **在宅ワーク収入は「雑所得」または「事業所得」**として扱われます。給与所得とは計算方法が異なるため、少額でも自己管理が重要です。\n在宅ワーク収入が年間20万円を超えたら確定申告が必要 会社員の配偶者が扶養に入っている場合でも、在宅ワークなどの副業収入が年間20万円を超えると確定申告が必要になります（所得税の申告）。住民税については、20万円以下でも自治体への申告が必要な場合があります。\n申告のためにやっておくこと：\n収入・経費の記録をつける（家計簿アプリでOK） 領収書・請求書・振込明細を保管する 使用したパソコン・通信費・書籍代などは経費として計上できる 在宅ワークに必要な環境・ツール 最低限必要なもの 必需品 目安予算 メモ パソコン（Windows or Mac） 50,000〜100,000円 スマホだけでは限界あり インターネット回線 月3,000〜5,000円 光回線推奨 メールアドレス（仕事用） 無料 GmailでもOK クラウドソーシングアカウント 無料 複数登録がおすすめ あると便利なもの ツール 用途 料金 Googleドキュメント/スプレッドシート 文書・表作成 無料 Canva バナー・画像デザイン 無料〜月額1,500円 Notion タスク・メモ管理 無料〜 Slack クライアントとの連絡 無料〜 Chatwork 国内クライアントに多い 無料〜 在宅ワーク詐欺に注意！見分け方チェックリスト 残念ながら、主婦・ママをターゲットにした在宅ワーク詐欺も存在します。以下の特徴に当てはまる案件は要注意です。\n怪しい案件のサイン：\n「誰でも即日〇万円稼げる」など非現実的な報酬を謳う 仕事の内容が曖昧・具体的に説明されない 登録・研修に「費用」がかかる 最初に個人情報（銀行口座・マイナンバーなど）を要求される 会社の住所・電話番号が確認できない 連絡がLINEのみで公式サイトがない 大原則：お金を払って仕事をするものはありません。 登録費・教材費・研修費を請求する「仕事」は詐欺と疑ってください。\n在宅ワークの収入が増えてきたら、確定申告の準備を。**freee会計（無料トライアルあり） **なら、スマホで収支管理から申告まで完結します。\nまとめ：在宅ワークは「継続」が最大の武器 在宅ワークで稼げるようになる主婦に共通しているのは、「すぐに稼げなくても辞めない」という継続力です。\n在宅ワーク成功の3ステップ：\nまず1つの仕事ジャンルを選んで登録する（今日中にできる） 最初の3か月は実績作りと割り切って継続する 実績が積まれたら単価交渉・ジャンル拡張でステップアップ 育児・家事と両立しながら「自分の収入」を持つことは、経済的な自立だけでなく自己肯定感の向上にもつながります。小さな一歩から、あなたのペースで始めてみてください。\n本記事の情報は2026年5月時点のものです。税金・社会保険に関する個別のご相談は、税理士または社会保険労務士にご確認ください。紹介しているプラットフォームの規約・手数料は変更される場合があります。\n関連ツール BMIと適正体重をチェック → BMI計算ツール 副業収入の税金を計算 → 副業税金計算ツール 手取り額をシミュレーション → 手取り計算ツール 月収から理想の支出配分を計算 → 家計簿シミュレーター 時給と年収を換算 → 時給換算ツール ポモドーロテクニックで集中力アップ → ポモドーロタイマー イベントまでのカウントダウン → カウントダウンタイマー 海外チームと時間を合わせる → タイムゾーン変換ツール — 世界中の都市間で時刻を即変換\n関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 あわせて読みたい 副業おすすめ在宅スキルなし完全ガイド2026年版 クラウドワークス稼ぎ方 初心者完全ガイド2026年版 ランサーズ クラウドワークス比較完全ガイド2026年版 ","permalink":"https://productivity-works.com/ja/posts/zaitaku-work-hajimekata-shufu-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e「育児の合間に自宅で少しでも稼ぎたい」「子どもが学校に行っている時間を有効に使いたい」「パートに出るのは難しいけれど、収入を増やしたい」——そんな思いを持つ主婦・ママの方に、在宅ワークは現実的な選択肢です。\u003c/p\u003e\n\u003cp\u003e本記事では、\u003cstrong\u003eスキルなし・経験なしから始められる在宅ワークの選び方から、稼げるようになるまでのロードマップ、税金の基礎知識\u003c/strong\u003eまで丁寧に解説します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"在宅ワークを始める前に知っておくべきこと\"\u003e在宅ワークを始める前に知っておくべきこと\u003c/h2\u003e\n\u003ch3 id=\"在宅ワークの現実甘くないけど可能性は本物\"\u003e在宅ワークの現実：甘くないけど、可能性は本物\u003c/h3\u003e\n\u003cp\u003e「在宅で月30万稼げる！」という誇大広告には要注意ですが、正しいアプローチで継続すれば、\u003cstrong\u003e月3万〜10万円の収入を家事・育児と両立しながら得ること\u003c/strong\u003eは十分に現実的です。\u003c/p\u003e\n\u003cp\u003e多くの主婦在宅ワーカーが経験する典型的な収入の推移：\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e期間\u003c/th\u003e\n          \u003cth\u003e収入目安\u003c/th\u003e\n          \u003cth\u003e状況\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e開始〜3か月\u003c/td\u003e\n          \u003ctd\u003e0〜1万円\u003c/td\u003e\n          \u003ctd\u003e仕事の仕組みを学ぶ時期\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e3〜6か月\u003c/td\u003e\n          \u003ctd\u003e1〜3万円\u003c/td\u003e\n          \u003ctd\u003e実績が積み始める\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e6か月〜1年\u003c/td\u003e\n          \u003ctd\u003e3〜5万円\u003c/td\u003e\n          \u003ctd\u003e継続依頼・単価アップが増える\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1〜2年\u003c/td\u003e\n          \u003ctd\u003e5〜10万円\u003c/td\u003e\n          \u003ctd\u003e専門スキル確立・安定稼働\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e2年以上\u003c/td\u003e\n          \u003ctd\u003e10万円〜\u003c/td\u003e\n          \u003ctd\u003eフリーランスとして独立も視野に\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e「すぐに稼げない」ことを最初から理解しておくと、挫折しにくくなります。\u003c/p\u003e\n\u003ch3 id=\"在宅ワークと内職の違い\"\u003e在宅ワークと「内職」の違い\u003c/h3\u003e\n\u003cp\u003e昔ながらの内職（シール貼り・袋詰めなど）とは異なり、現代の在宅ワークは\u003cstrong\u003eパソコン・スマートフォンを使ったデジタル系の仕事が主流\u003c/strong\u003eです。単価・将来性ともに現代的な在宅ワークの方が優れています。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"主婦ママにおすすめの在宅ワーク職種\"\u003e主婦・ママにおすすめの在宅ワーク職種\u003c/h2\u003e\n\u003ch3 id=\"スキル不要初心者でも始めやすい仕事\"\u003eスキル不要・初心者でも始めやすい仕事\u003c/h3\u003e\n\u003ch4 id=\"1-データ入力文字起こし\"\u003e1. データ入力・文字起こし\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e特徴\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e特別なスキル不要、タイピングができれば始められる\u003c/li\u003e\n\u003cli\u003e音声データやメモをテキストにする作業\u003c/li\u003e\n\u003cli\u003e時給換算で500〜1,500円程度が多い\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e向いている人\u003c/strong\u003e：タイピングが速い方、コツコツした作業が得意な方\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e主な案件獲得先\u003c/strong\u003e：クラウドワークス、ランサーズ、シュフティ\u003c/p\u003e\n\u003ch4 id=\"2-アンケートモニターポイントサイト\"\u003e2. アンケートモニター・ポイントサイト\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e特徴\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e隙間時間（子どもが昼寝中など）にスマホで完結\u003c/li\u003e\n\u003cli\u003e1か月数千円〜1万円程度のお小遣い稼ぎに\u003c/li\u003e\n\u003cli\u003e即日始められる手軽さ\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e注意点\u003c/strong\u003e：これだけで生活費を稼ぐのは難しい。あくまでサブの収入源として捉える\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e代表的なサービス\u003c/strong\u003e：マクロミル、楽天インサイト、モッピー、ポイントインカム\u003c/p\u003e\n\u003ch4 id=\"3-ネットショップメルカリハンドメイド販売\"\u003e3. ネットショップ（メルカリ・ハンドメイド販売）\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e特徴\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e自宅の不用品を売るところから始められる\u003c/li\u003e\n\u003cli\u003e趣味のハンドメイド作品を販売できる\u003c/li\u003e\n\u003cli\u003e在庫管理・発送の手間が発生する\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eステップアップの方法\u003c/strong\u003e：メルカリで実績を積んだ後、minneやCreemaでハンドメイド販売へ移行するルートが人気。\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"少しスキルを磨くと稼げる仕事\"\u003e少しスキルを磨くと稼げる仕事\u003c/h3\u003e\n\u003ch4 id=\"4-webライティング\"\u003e4. Webライティング\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e特徴\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e文章を書いてお金をもらう仕事\u003c/li\u003e\n\u003cli\u003e初心者向け案件は文字単価0.5〜1円程度、実績がつけば2〜5円も可能\u003c/li\u003e\n\u003cli\u003e特定ジャンル（育児・美容・料理など）の知識を活かせる\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e始め方\u003c/strong\u003e：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eクラウドワークス・ランサーズで「ライター募集・未経験OK」の案件に応募\u003c/li\u003e\n\u003cli\u003e最初はテストライティングで実績を作る\u003c/li\u003e\n\u003cli\u003eポートフォリオ（書いた記事一覧）を充実させて単価交渉\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003e月3万円の目安\u003c/strong\u003e：文字単価1円×3万文字（1日約1,000文字の記事3本/週）\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめ学習リソース\u003c/strong\u003e：Webライティング能力検定、各種ライター養成講座\u003c/p\u003e\n\u003ch4 id=\"5-sns運用instagramアシスタント\"\u003e5. SNS運用・Instagramアシスタント\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e特徴\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e普段SNSを使っている方に向いている\u003c/li\u003e\n\u003cli\u003e投稿の企画・作成・スケジューリングを代行\u003c/li\u003e\n\u003cli\u003e月3〜5万円程度の案件が多い\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e必要スキル\u003c/strong\u003e：CanvaなどのデザインツールとSNSの基本知識\u003c/p\u003e","title":"在宅ワーク 始め方【2026年版】主婦・ママが月3万〜10万円稼ぐロードマップ"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nインデックスファンドの種類と比較を徹底解説【2026年最新版】初心者向け選び方ガイド 「インデックスファンドがいいと聞いたけど、種類が多すぎてどれを選べばいいかわからない」という方はとても多いです。S\u0026amp;P500、全世界株式、先進国株式、TOPIX、新興国株式、債券型…。それぞれどう違うのか、どれを選べばいいのかを詳しく解説します。\nこの記事では以下のことがわかります。\nインデックスファンドの種類と各タイプの特徴 主要指数（S\u0026amp;P500・全世界・先進国など）の違い 2026年おすすめインデックスファンド比較表 自分の目的・リスク許容度に合った選び方 インデックスファンドとは？基本を理解する 定義・仕組み インデックスファンドとは、「特定の株価指数（インデックス）に連動する運用成果を目指す投資信託」です。日経平均やS\u0026amp;P500などの指数と同じ動きをするよう設計されており、市場全体に分散投資する効果があります。\nアクティブファンドと異なり、ファンドマネージャーが独自に銘柄を選定するのではなく、指数の構成銘柄をそのまま保有するだけなので、運用コスト（信託報酬）が大幅に低くなります。\nインデックスファンドとアクティブファンドの比較\n項目 インデックスファンド アクティブファンド 運用方針 指数に連動 指数を上回ることを目指す 信託報酬 低い（0.05〜0.2%） 高い（0.5〜2%超） 長期成績 多くのアクティブを上回る 長期的に指数を上回るのは困難 透明性 高い（指数の構成銘柄が公開） 低い（銘柄非公開のものも） 運用判断 ほぼ不要 ファンドマネージャーへの信頼が必要 メリット・デメリット インデックスファンドのメリット\n信託報酬が低く、長期運用コストを抑えられる 透明性が高く、何に投資しているかわかりやすい 分散投資が自動的に完成している 長期的に多くのアクティブファンドを上回る実績 新NISAのつみたて投資枠対象ファンドに多い インデックスファンドのデメリット\n市場平均を超えるリターンは期待できない 相場全体が下落する局面ではすべて下落する バブル崩壊・金融危機では大幅な下落もありえる 指数の種類によってリターンが大きく異なる インデックスファンドの種類別比較表 株式系インデックスファンドの種類 種類 対象市場 分散度 期待リターン（年率・長期） リスク 全世界株式（MSCI ACWI） 先進国+新興国約50カ国 最大 5〜7% 中〜高 先進国株式（MSCI Kokusai） 先進国23カ国（日本除く） 大 5〜7% 中〜高 米国株式（S\u0026amp;P500） 米国大型株500社 中 7〜9% 高 国内株式（TOPIX） 日本全上場株式 中 3〜5% 中 国内株式（日経225） 日本大型株225社 小 3〜5% 中 新興国株式（MSCI EM） 新興国24カ国 中 6〜10% 非常に高 小型株インデックス 各国小型株 大 6〜8% 高 ※期待リターンは過去の実績をもとにした参考値です。将来のリターンを保証するものではありません。\n債券・REIT系インデックスファンドの種類 種類 対象 リターン リスク 特徴 国内債券インデックス 日本国債など 低（0〜2%） 低 元本保全重視。株式との相関が低い 先進国債券インデックス 先進国国債 低〜中（2〜4%） 低〜中 為替リスクあり。株のクッション役 新興国債券インデックス 新興国国債 中〜高（4〜7%） 高 利回り高いがリスク大 国内REIT（J-REIT） 国内不動産投資信託 中（3〜6%） 中 配当利回りが高め 海外REIT 海外不動産投資信託 中（4〜7%） 中〜高 グローバル不動産分散 主要インデックスファンド おすすめ比較 2026年おすすめインデックスファンドランキング 順位 ファンド名 信託報酬 対象指数 純資産 特徴 1位 eMAXIS Slim 全世界株式（オール・カントリー） 0.05775% MSCI ACWI 4兆円超 全世界株式。初心者の第一選択 2位 eMAXIS Slim 米国株式（S\u0026amp;P500） 0.09372% S\u0026amp;P 500 5兆円超 米国集中投資。長期実績が高い 3位 楽天・オールカントリー株式インデックス 0.0561% MSCI ACWI 3,000億円超 最低水準の信託報酬 4位 eMAXIS Slim 先進国株式インデックス 0.09889% MSCI Kokusai 3兆円超 先進国株式で日本を除く 5位 eMAXIS Slim バランス（8資産均等型） 0.143% 8指数均等 3,000億円超 株・債券・REITを8均等配分 6位 ニッセイ・外国株式インデックスファンド 0.09889% MSCI Kokusai 1兆円超 老舗の低コスト先進国ファンド 7位 eMAXIS Slim 国内株式（TOPIX） 0.143% TOPIX 3,000億円超 日本株への分散投資 公式サイトで詳細を確認する 目的別おすすめファンドの選び方 目的・状況 おすすめファンド 理由 これ一本で完結させたい オルカン（全世界株式） 世界中に自動分散。考える必要なし 米国経済の成長に賭けたい eMAXIS Slim S\u0026amp;P500 過去の長期リターンが最高水準 リスクを少し抑えたい バランス8資産均等型 債券・REITが下落を緩和 日本株も保有したい オルカン+TOPIX（または国内インデックス） 日本株比率を高めたい場合に追加 選び方・注意点 チェックポイント チェック1: S\u0026amp;P500 vs 全世界株式、どちらを選ぶか\nこれは投資家の永遠の議論です。過去20〜30年のリターンはS\u0026amp;P500が上回っていますが、それが今後も続く保証はありません。「米国だけでいい」という人はS\u0026amp;P500、「世界全体に分散したい・どこが伸びるかわからない」という人はオルカンが向いています。なお、オルカン内のうち約60%はすでに米国株です。\nチェック2: 信託報酬は年率0.1%以下か\n長期保有では信託報酬の差が最終的な資産に大きく影響します。主要なインデックスファンドはすでに0.05〜0.1%台まで下がっており、それ以上のコストのファンドは選ぶ理由がほとんどありません。\nチェック3: 純資産残高と繰上償還リスク\n純資産残高が少ないファンドは繰上償還（強制終了）のリスクがあります。最低でも100億円以上、できれば1,000億円以上の実績あるファンドを選びましょう。\nチェック4: 自分のリスク許容度を確認する\n株式系インデックスは短期的に30〜50%下落することもあります。「値下がりが怖くて眠れない」という方は、バランスファンドや債券を組み合わせてリスクを下げましょう。\nよくある失敗 失敗1: 似た指数のファンドを複数買ってしまう 「S\u0026amp;P500を3本持っている」という状態は、分散になっておらず管理コストだけが増えます。同じ指数のファンドは1本に絞りましょう。\n失敗2: 新興国だけに集中する 高リターンを求めて新興国株式インデックスに集中投資すると、政治リスク・通貨リスクが高く、安定した長期運用が難しくなります。\n失敗3: ベンチマーク乖離を無視する インデックスファンドでも指数への追跡誤差（トラッキングエラー）が大きいものは避けましょう。\n失敗4: 円建てと外貨建てを混同する 国内の投資信託は円建てで購入・評価されますが、実際には外国株式に投資しているため為替リスクが内包されています。円高になれば評価額が下がることを理解しておきましょう。\n関連記事: 投資信託おすすめ初心者向けガイド よくある質問（FAQ） Q1. インデックスファンドは何本持てばいいですか？ 1〜3本が管理しやすいです。オルカン1本でも十分な分散ができます。日本株比率を上げたい場合は国内株インデックスを1本追加する程度が現実的です。\nQ2. S\u0026amp;P500と全世界株式を両方買う必要はありますか？ 基本的には不要です。全世界株式（オルカン）の約60%はすでに米国株なので、S\u0026amp;P500をさらに追加すると米国株の比率が高くなりすぎます。どちらか一方を選ぶのが基本です。\nQ3. 日経225とTOPIXはどちらがいいですか？ TOPIXの方が日本市場全体（約2,100銘柄）を網羅しており、分散効果が高いです。日経225は225銘柄のみで、銘柄の入れ替えが恣意的という批判もあります。国内株への投資はTOPIX連動がおすすめです。\nQ4. バランスファンドは初心者に向いていますか？ はい、特に投資初心者や値下がりが心配な方に向いています。株・債券・REITを自動的にリバランスしてくれるため、管理の手間が少ないです。ただし、長期的な期待リターンは株式100%より低くなります。\nQ5. 新興国株式インデックスは持つべきですか？ オルカン（全世界株式）に投資していれば、すでに新興国分（約10〜15%）が含まれています。別途新興国インデックスを買う必要は基本的にありません。\nQ6. ETFと投資信託のインデックスファンド、どちらがいいですか？ 積立投資（毎月少額ずつ）には投資信託の方が便利です。ETFは株式市場で売買するため、取引単価が高く積立に向かないものも多いです。まとまった資金を一括投資する場合はETFも選択肢になります。\nインデックスファンドの積立購入なら**楽天証券 **。取扱ファンド数が業界トップクラスで、楽天ポイント投資にも対応しています。\nまとめ・行動の呼びかけ インデックスファンドの種類は多いですが、初心者がまず選ぶべきファンドは非常にシンプルです。「eMAXIS Slim 全世界株式（オール・カントリー）」1本でも、世界中の株式に分散投資でき、長期運用に必要な条件をすべて満たしています。まずはこの1本から始めて、投資の経験を積みながら少しずつ知識と資産を増やしていきましょう。\n今すぐインデックスファンドの積立を開始する 関連記事: SBI証券と楽天証券を徹底比較 関連ツール インデックス積立の複利効果をシミュレーション → 複利計算シミュレーター NISAの非課税メリットを計算 → NISAシミュレーター 配当型インデックスの収入を計算 → 配当金シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター インフレによる購買力低下を計算 → インフレ計算ツール ※本記事は情報提供を目的としており、特定の金融商品の購入・売却を推奨するものではありません。投資判断はご自身の責任で行ってください。最新情報は各公式サイトでご確認ください。\n関連テンプレート 資産運用・家計管理をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す ","permalink":"https://productivity-works.com/ja/posts/%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%83%95%E3%82%A1%E3%83%B3%E3%83%89-%E7%A8%AE%E9%A1%9E-%E6%AF%94%E8%BC%83/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"インデックスファンドの種類と比較を徹底解説2026年最新版初心者向け選び方ガイド\"\u003eインデックスファンドの種類と比較を徹底解説【2026年最新版】初心者向け選び方ガイド\u003c/h1\u003e\n\u003cp\u003e「インデックスファンドがいいと聞いたけど、種類が多すぎてどれを選べばいいかわからない」という方はとても多いです。S\u0026amp;P500、全世界株式、先進国株式、TOPIX、新興国株式、債券型…。それぞれどう違うのか、どれを選べばいいのかを詳しく解説します。\u003c/p\u003e\n\u003cp\u003eこの記事では以下のことがわかります。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eインデックスファンドの種類と各タイプの特徴\u003c/li\u003e\n\u003cli\u003e主要指数（S\u0026amp;P500・全世界・先進国など）の違い\u003c/li\u003e\n\u003cli\u003e2026年おすすめインデックスファンド比較表\u003c/li\u003e\n\u003cli\u003e自分の目的・リスク許容度に合った選び方\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"インデックスファンドとは基本を理解する\"\u003eインデックスファンドとは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003eインデックスファンドとは、「特定の株価指数（インデックス）に連動する運用成果を目指す投資信託」です。日経平均やS\u0026amp;P500などの指数と同じ動きをするよう設計されており、市場全体に分散投資する効果があります。\u003c/p\u003e\n\u003cp\u003eアクティブファンドと異なり、ファンドマネージャーが独自に銘柄を選定するのではなく、指数の構成銘柄をそのまま保有するだけなので、運用コスト（信託報酬）が大幅に低くなります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eインデックスファンドとアクティブファンドの比較\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003eインデックスファンド\u003c/th\u003e\n          \u003cth\u003eアクティブファンド\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e運用方針\u003c/td\u003e\n          \u003ctd\u003e指数に連動\u003c/td\u003e\n          \u003ctd\u003e指数を上回ることを目指す\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e信託報酬\u003c/td\u003e\n          \u003ctd\u003e低い（0.05〜0.2%）\u003c/td\u003e\n          \u003ctd\u003e高い（0.5〜2%超）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e長期成績\u003c/td\u003e\n          \u003ctd\u003e多くのアクティブを上回る\u003c/td\u003e\n          \u003ctd\u003e長期的に指数を上回るのは困難\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e透明性\u003c/td\u003e\n          \u003ctd\u003e高い（指数の構成銘柄が公開）\u003c/td\u003e\n          \u003ctd\u003e低い（銘柄非公開のものも）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e運用判断\u003c/td\u003e\n          \u003ctd\u003eほぼ不要\u003c/td\u003e\n          \u003ctd\u003eファンドマネージャーへの信頼が必要\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eインデックスファンドのメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e信託報酬が低く、長期運用コストを抑えられる\u003c/li\u003e\n\u003cli\u003e透明性が高く、何に投資しているかわかりやすい\u003c/li\u003e\n\u003cli\u003e分散投資が自動的に完成している\u003c/li\u003e\n\u003cli\u003e長期的に多くのアクティブファンドを上回る実績\u003c/li\u003e\n\u003cli\u003e新NISAのつみたて投資枠対象ファンドに多い\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eインデックスファンドのデメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e市場平均を超えるリターンは期待できない\u003c/li\u003e\n\u003cli\u003e相場全体が下落する局面ではすべて下落する\u003c/li\u003e\n\u003cli\u003eバブル崩壊・金融危機では大幅な下落もありえる\u003c/li\u003e\n\u003cli\u003e指数の種類によってリターンが大きく異なる\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"インデックスファンドの種類別比較表\"\u003eインデックスファンドの種類別比較表\u003c/h2\u003e\n\u003ch3 id=\"株式系インデックスファンドの種類\"\u003e株式系インデックスファンドの種類\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e種類\u003c/th\u003e\n          \u003cth\u003e対象市場\u003c/th\u003e\n          \u003cth\u003e分散度\u003c/th\u003e\n          \u003cth\u003e期待リターン（年率・長期）\u003c/th\u003e\n          \u003cth\u003eリスク\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e全世界株式（MSCI ACWI）\u003c/td\u003e\n          \u003ctd\u003e先進国+新興国約50カ国\u003c/td\u003e\n          \u003ctd\u003e最大\u003c/td\u003e\n          \u003ctd\u003e5〜7%\u003c/td\u003e\n          \u003ctd\u003e中〜高\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e先進国株式（MSCI Kokusai）\u003c/td\u003e\n          \u003ctd\u003e先進国23カ国（日本除く）\u003c/td\u003e\n          \u003ctd\u003e大\u003c/td\u003e\n          \u003ctd\u003e5〜7%\u003c/td\u003e\n          \u003ctd\u003e中〜高\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e米国株式（S\u0026amp;P500）\u003c/td\u003e\n          \u003ctd\u003e米国大型株500社\u003c/td\u003e\n          \u003ctd\u003e中\u003c/td\u003e\n          \u003ctd\u003e7〜9%\u003c/td\u003e\n          \u003ctd\u003e高\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e国内株式（TOPIX）\u003c/td\u003e\n          \u003ctd\u003e日本全上場株式\u003c/td\u003e\n          \u003ctd\u003e中\u003c/td\u003e\n          \u003ctd\u003e3〜5%\u003c/td\u003e\n          \u003ctd\u003e中\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e国内株式（日経225）\u003c/td\u003e\n          \u003ctd\u003e日本大型株225社\u003c/td\u003e\n          \u003ctd\u003e小\u003c/td\u003e\n          \u003ctd\u003e3〜5%\u003c/td\u003e\n          \u003ctd\u003e中\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e新興国株式（MSCI EM）\u003c/td\u003e\n          \u003ctd\u003e新興国24カ国\u003c/td\u003e\n          \u003ctd\u003e中\u003c/td\u003e\n          \u003ctd\u003e6〜10%\u003c/td\u003e\n          \u003ctd\u003e非常に高\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e小型株インデックス\u003c/td\u003e\n          \u003ctd\u003e各国小型株\u003c/td\u003e\n          \u003ctd\u003e大\u003c/td\u003e\n          \u003ctd\u003e6〜8%\u003c/td\u003e\n          \u003ctd\u003e高\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※期待リターンは過去の実績をもとにした参考値です。将来のリターンを保証するものではありません。\u003c/p\u003e","title":"インデックスファンド 種類と比較【2026年最新版】初心者向けガイド"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nクラウドワークス 稼ぎ方 初心者完全ガイド【2026年最新版】 「クラウドワークスに登録したけど、全然仕事が取れない……」——多くの初心者が直面するこの壁を、本記事では具体的な攻略法とともに解説します。\nクラウドワークスは2026年現在、登録者数500万人超・案件数100万件超を誇る国内最大のクラウドソーシングプラットフォームです。しかし、登録しただけでは稼げません。正しい戦略で取り組めば、副業初心者でも月3〜5万円の収入を3ヶ月以内に実現できます。\nこの記事でわかること：\nクラウドワークスの登録手順と初期設定 初心者が受注しやすいカテゴリー・案件の選び方 採用率が上がるプロフィールと提案文の書き方 単価を上げる3つの戦略 月5万円・10万円稼ぐためのロードマップ クラウドワークスとは？基本を理解する 定義・仕組み クラウドワークスは、仕事を依頼したい企業・個人（クライアント）と、仕事を受けたいワーカー（受注者）をマッチングするプラットフォームです。2011年設立、東証グロース市場上場の信頼性の高いサービスです。\n主な案件形式：\n形式 特徴 おすすめ度 プロジェクト形式 固定報酬。提案して採用されたら作業開始 ★★★★★ タスク形式 単発作業を完了したら報酬。アンケートや簡単な入力など ★★★★☆ コンテスト形式 成果物を提出して選ばれたら報酬。デザイン系に多い ★★★☆☆ 時間課金形式 時給制。エンジニアや専門職向け ★★★★☆ 手数料：クラウドワークスはワーカーからシステム利用料を差し引きます。\n累計契約金額20万円以下：20% 20万円超〜100万円以下：10% 100万円超：5% 長期利用するほど手数料率が下がる仕組みです。\nメリット・デメリット クラウドワークスのメリット\n案件数が国内最多で選択肢が豊富 スキルなしでも始められるタスク案件が充実 支払いは仮払い制度で未払いリスクがない 2026年現在、AI活用案件など新ジャンルが急増中 クラウドワークスのデメリット\n初心者は手数料が20%と高め 競合が多く、単価が低い案件も混在する クライアントとのやり取りに時間がかかることも スキルなしだと最初の月収1万円を超えるのに数週間かかる クラウドワークス 稼ぎ方ステップガイド ステップ1：プロフィールを完璧に仕上げる プロフィールは「履歴書」です。クライアントは提案文と同時にプロフィールを必ず確認します。受注率はプロフィールの完成度で6〜7割決まると言っても過言ではありません。\nプロフィール必須項目チェックリスト：\nプロフィール写真：顔写真（スーツ不要、清潔感のある自然体でOK） 本名（非表示でもOK）またはニックネーム 自己紹介文：400〜600文字（経歴、得意分野、仕事への姿勢） スキル：3〜10個選択（Webライティング、データ入力、Excel等） 職務経歴：本業の経験も副業に活かせる部分を記載 希望時給・希望単価の設定 ポートフォリオ（実績なければサンプル作品でもOK） 自己紹介文のテンプレート例：\nはじめまして。○○と申します。 【得意なこと・経験】 ・Webライティング（○○分野の記事作成経験あり） ・データ入力・Excel作業（前職で○○年の経験） ・○○ 【仕事への姿勢】 納期厳守・丁寧なコミュニケーションを心がけています。 不明点は事前に確認し、修正には誠実に対応いたします。 【稼働時間】 平日夜：20時〜23時、週末：随時 ご依頼をお待ちしております。よろしくお願いいたします。 ステップ2：初心者におすすめの案件カテゴリーを選ぶ カテゴリー 平均単価 難易度 おすすめ理由 データ入力・整理 500〜2,000円/件 ★☆☆☆☆ 専門知識不要、確実に稼げる Webライティング 1〜5円/文字 ★★☆☆☆ 案件数最多、スキルアップになる アンケート・口コミ 50〜500円/件 ★☆☆☆☆ すき間時間に手軽に対応可能 文字起こし 250〜1,000円/分 ★★☆☆☆ 単価が安定している SNS運用・投稿 3,000〜20,000円/月 ★★★☆☆ 継続案件になりやすい Canvaデザイン 3,000〜10,000円/件 ★★☆☆☆ 無料ツール習得で参入可 初心者の黄金ルート：\nまずタスク形式（アンケート・データ入力）で実績5件を積む プロジェクト形式のWebライティング案件に移行 月3万円達成後、高単価カテゴリーに挑戦 ステップ3：採用される提案文を書く 提案文の差別化が受注の決め手です。採用率を上げる提案文の構成を紹介します。\n採用される提案文の構成（500〜800字）：\n1. 冒頭：案件を読んだという証拠（具体的な内容に言及） 2. 自己紹介：関連する経験・スキルを簡潔に 3. 解決策の提示：クライアントの課題をどう解決するか 4. 作業の進め方・スケジュール案 5. 質問（不明点があれば1〜2個） 6. 締め：前向きな言葉で締める NG提案文の例： 「ご依頼の件、ぜひお引き受けしたいと思います。よろしくお願いします。」（→ 内容ゼロ、却下確定）\nOK提案文の例： 「○○についての記事作成案件を拝見しました。私は○○分野で○年の業務経験があり、特に○○については詳しく解説できます。サンプル記事を添付しましたので、文体・クオリティをご確認ください。」\nステップ4：クライアントとの信頼関係を築く 初受注後は、クライアントとの関係を大切にすることが長期安定収入への近道です。\nレスポンスは24時間以内（理想は数時間以内） 進捗報告を定期的に行う（「現在○割完了です」） 修正依頼には素直に対応（1〜2回は無料で対応するのが慣例） 納品後のフォロー（「今後ともよろしくお願いします」の一言） 継続依頼・指名案件を増やすことで、提案コストなしで安定収入を確保できます。\nステップ5：単価を上げる3つの戦略 実績・評価を積み上げる: 評価4.8以上になると高単価案件からも声がかかるようになります 専門性を高める: 「一般ライター」より「医療系ライター」「IT系ライター」のように専門特化すると単価が2〜5倍になります 提案単価を少しずつ上げる: 実績5件ごとに10〜20%ずつ単価を引き上げていく 関連記事: ランサーズとクラウドワークス、どちらを選ぶべきか 選び方・注意点 チェックポイント 案件を選ぶ際の危険シグナル：\n「高額報酬・簡単作業」 → 詐欺案件の可能性大 「先に個人情報・銀行口座を提出して」 → 絶対NG 「プラットフォーム外でのやり取りを求める」 → 規約違反、詐欺リスク 「テスト課題が過大で報酬ゼロ」 → 無償労働を搾取する悪質クライアント 「報酬が相場の半額以下」 → 時給換算すると最低賃金を下回る可能性 よくある失敗 失敗例1: 最初から高単価案件ばかり狙う\n実績ゼロの状態で単価5万円の案件に提案しても採用率はほぼゼロです。まずは低単価でも実績・レビューを積むことを優先しましょう。\n失敗例2: プロジェクト外でやり取りする\nクライアントから「LINEで連絡して」「直接振り込みにしよう」と言われても、必ずプラットフォーム内でやり取りしましょう。プラットフォーム外取引はトラブルになっても補償が受けられません。\n失敗例3: 継続案件を逃す\n「この仕事は1回きり」と思い込んで関係を丁寧に築かないのは損です。1クライアントが長期的に月3〜5万円の仕事を依頼してくれることも珍しくありません。\nよくある質問（FAQ） Q1. クラウドワークスはスマホだけで稼げますか？\nA. タスク形式（アンケート・データ入力）はスマホだけで対応できます。ライティングやデザインはパソコンの方が効率的です。\nQ2. 本人確認は必須ですか？\nA. 累計報酬が一定額を超えると本人確認が必要になります。安心してご利用いただくために、登録初期に完了させることをおすすめします。\nQ3. 報酬はいつ振り込まれますか？\nA. 月末締め・翌月末払いが基本です。クライアントの仮払いが確認できてから出金申請が可能になります。\nQ4. 会社員でも登録できますか？\nA. はい、会社員でも登録・受注できます。ただし勤務先の副業規定は事前にご確認ください。\nQ5. 収入が安定しない時期はありますか？\nA. 最初の1〜2ヶ月は受注数が安定しないことが多いです。この時期は提案数を増やし（1日3〜5件）、実績を積み上げることに集中しましょう。\nQ6. クラウドワークスで稼いだお金の税金は？\nA. 副業収入が年間20万円を超えると確定申告が必要です。経費（通信費、書籍代など）を計上して節税することができます。\nQ7. プロフィールなしで受注できますか？\nA. 理論上は可能ですが、採用率が著しく低くなります。5分でも良いのでプロフィールを充実させてから提案を開始しましょう。\n確定申告の準備には**freee会計（無料トライアルあり） **が便利です。収入・経費の記録から申告書作成までスマホでも完結します。\nまとめ・行動の呼びかけ クラウドワークスで稼ぐための最短ルートは、「プロフィール完成 → タスク案件で実績5件 → プロジェクト案件へ移行 → 専門特化で単価アップ」です。最初の3ヶ月は忍耐が必要ですが、正しい戦略で取り組めば必ず成果が出ます。今日中にプロフィールを完成させることから始めてみましょう。\n副業の始め方をもっと詳しく知りたい方は「副業完全ガイド2026年版 」をチェック！クラウドソーシング活用法・確定申告・税金対策まで網羅した完全版です（¥1,280）。\nフリーランスとして独立を考えている方は「フリーランス完全スタートキット 」がおすすめです。開業届・単価交渉・税務まで独立に必要なすべてが詰まっています（¥980）。\n※本記事は情報提供を目的としています。税務に関する判断は税理士等の専門家にご相談ください。\n※本記事にはアフィリエイト広告が含まれています。\n関連ツール 副業収入の税金を計算 → 副業税金計算ツール 手取り額をシミュレーション → 手取り計算ツール フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 ","permalink":"https://productivity-works.com/ja/posts/%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9-%E7%A8%BC%E3%81%8E%E6%96%B9-%E5%88%9D%E5%BF%83%E8%80%85/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"クラウドワークス-稼ぎ方-初心者完全ガイド2026年最新版\"\u003eクラウドワークス 稼ぎ方 初心者完全ガイド【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「クラウドワークスに登録したけど、全然仕事が取れない……」——多くの初心者が直面するこの壁を、本記事では具体的な攻略法とともに解説します。\u003c/p\u003e\n\u003cp\u003eクラウドワークスは2026年現在、登録者数500万人超・案件数100万件超を誇る国内最大のクラウドソーシングプラットフォームです。しかし、登録しただけでは稼げません。正しい戦略で取り組めば、副業初心者でも月3〜5万円の収入を3ヶ月以内に実現できます。\u003c/p\u003e\n\u003cp\u003eこの記事でわかること：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eクラウドワークスの登録手順と初期設定\u003c/li\u003e\n\u003cli\u003e初心者が受注しやすいカテゴリー・案件の選び方\u003c/li\u003e\n\u003cli\u003e採用率が上がるプロフィールと提案文の書き方\u003c/li\u003e\n\u003cli\u003e単価を上げる3つの戦略\u003c/li\u003e\n\u003cli\u003e月5万円・10万円稼ぐためのロードマップ\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"クラウドワークスとは基本を理解する\"\u003eクラウドワークスとは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003eクラウドワークスは、仕事を依頼したい企業・個人（クライアント）と、仕事を受けたいワーカー（受注者）をマッチングするプラットフォームです。2011年設立、東証グロース市場上場の信頼性の高いサービスです。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e主な案件形式\u003c/strong\u003e：\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e形式\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n          \u003cth\u003eおすすめ度\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eプロジェクト形式\u003c/td\u003e\n          \u003ctd\u003e固定報酬。提案して採用されたら作業開始\u003c/td\u003e\n          \u003ctd\u003e★★★★★\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eタスク形式\u003c/td\u003e\n          \u003ctd\u003e単発作業を完了したら報酬。アンケートや簡単な入力など\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eコンテスト形式\u003c/td\u003e\n          \u003ctd\u003e成果物を提出して選ばれたら報酬。デザイン系に多い\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e時間課金形式\u003c/td\u003e\n          \u003ctd\u003e時給制。エンジニアや専門職向け\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e手数料：クラウドワークスはワーカーからシステム利用料を差し引きます。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e累計契約金額20万円以下：20%\u003c/li\u003e\n\u003cli\u003e20万円超〜100万円以下：10%\u003c/li\u003e\n\u003cli\u003e100万円超：5%\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e長期利用するほど手数料率が下がる仕組みです。\u003c/p\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eクラウドワークスのメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e案件数が国内最多で選択肢が豊富\u003c/li\u003e\n\u003cli\u003eスキルなしでも始められるタスク案件が充実\u003c/li\u003e\n\u003cli\u003e支払いは仮払い制度で未払いリスクがない\u003c/li\u003e\n\u003cli\u003e2026年現在、AI活用案件など新ジャンルが急増中\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eクラウドワークスのデメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e初心者は手数料が20%と高め\u003c/li\u003e\n\u003cli\u003e競合が多く、単価が低い案件も混在する\u003c/li\u003e\n\u003cli\u003eクライアントとのやり取りに時間がかかることも\u003c/li\u003e\n\u003cli\u003eスキルなしだと最初の月収1万円を超えるのに数週間かかる\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"クラウドワークス-稼ぎ方ステップガイド\"\u003eクラウドワークス 稼ぎ方ステップガイド\u003c/h2\u003e\n\u003ch3 id=\"ステップ1プロフィールを完璧に仕上げる\"\u003eステップ1：プロフィールを完璧に仕上げる\u003c/h3\u003e\n\u003cp\u003eプロフィールは「履歴書」です。クライアントは提案文と同時にプロフィールを必ず確認します。受注率は\u003cstrong\u003eプロフィールの完成度で6〜7割決まる\u003c/strong\u003eと言っても過言ではありません。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eプロフィール必須項目チェックリスト\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e プロフィール写真：顔写真（スーツ不要、清潔感のある自然体でOK）\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e 本名（非表示でもOK）またはニックネーム\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e 自己紹介文：400〜600文字（経歴、得意分野、仕事への姿勢）\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e スキル：3〜10個選択（Webライティング、データ入力、Excel等）\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e 職務経歴：本業の経験も副業に活かせる部分を記載\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e 希望時給・希望単価の設定\u003c/li\u003e\n\u003cli\u003e\u003cinput disabled=\"\" type=\"checkbox\"\u003e ポートフォリオ（実績なければサンプル作品でもOK）\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e自己紹介文のテンプレート例\u003c/strong\u003e：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eはじめまして。○○と申します。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【得意なこと・経験】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・Webライティング（○○分野の記事作成経験あり）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・データ入力・Excel作業（前職で○○年の経験）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e・○○\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【仕事への姿勢】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e納期厳守・丁寧なコミュニケーションを心がけています。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e不明点は事前に確認し、修正には誠実に対応いたします。\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e【稼働時間】\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e平日夜：20時〜23時、週末：随時\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eご依頼をお待ちしております。よろしくお願いいたします。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"ステップ2初心者におすすめの案件カテゴリーを選ぶ\"\u003eステップ2：初心者におすすめの案件カテゴリーを選ぶ\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eカテゴリー\u003c/th\u003e\n          \u003cth\u003e平均単価\u003c/th\u003e\n          \u003cth\u003e難易度\u003c/th\u003e\n          \u003cth\u003eおすすめ理由\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eデータ入力・整理\u003c/td\u003e\n          \u003ctd\u003e500〜2,000円/件\u003c/td\u003e\n          \u003ctd\u003e★☆☆☆☆\u003c/td\u003e\n          \u003ctd\u003e専門知識不要、確実に稼げる\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eWebライティング\u003c/td\u003e\n          \u003ctd\u003e1〜5円/文字\u003c/td\u003e\n          \u003ctd\u003e★★☆☆☆\u003c/td\u003e\n          \u003ctd\u003e案件数最多、スキルアップになる\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eアンケート・口コミ\u003c/td\u003e\n          \u003ctd\u003e50〜500円/件\u003c/td\u003e\n          \u003ctd\u003e★☆☆☆☆\u003c/td\u003e\n          \u003ctd\u003eすき間時間に手軽に対応可能\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e文字起こし\u003c/td\u003e\n          \u003ctd\u003e250〜1,000円/分\u003c/td\u003e\n          \u003ctd\u003e★★☆☆☆\u003c/td\u003e\n          \u003ctd\u003e単価が安定している\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSNS運用・投稿\u003c/td\u003e\n          \u003ctd\u003e3,000〜20,000円/月\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n          \u003ctd\u003e継続案件になりやすい\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eCanvaデザイン\u003c/td\u003e\n          \u003ctd\u003e3,000〜10,000円/件\u003c/td\u003e\n          \u003ctd\u003e★★☆☆☆\u003c/td\u003e\n          \u003ctd\u003e無料ツール習得で参入可\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e初心者の黄金ルート\u003c/strong\u003e：\u003c/p\u003e","title":"クラウドワークス稼ぎ方 初心者完全ガイド2026年版"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nフリーランス エンジニア 年収 相場完全ガイド【2026年最新版】 「会社員エンジニアとフリーランスエンジニア、実際どっちが稼げるの？」——この問いに対する答えは、2026年現在明確になっています。スキルと経験があれば、フリーランスエンジニアの年収は会社員の1.5〜2.5倍になることが珍しくありません。\n一方で、フリーランスには税金・保険・営業など会社員にはない負担もあります。本記事では、フリーランスエンジニアの現実的な年収相場・スキル別単価・年収アップ戦略を詳しく解説します。\nこの記事でわかること：\nフリーランスエンジニアの年収相場（スキル別・言語別） 月単価の目安と手取り計算の方法 年収1,000万円超えを実現する条件 フリーランスエンジニアになるための準備ステップ おすすめエージェントの比較 フリーランスエンジニアとは？基本を理解する 定義・仕組み フリーランスエンジニアとは、特定の企業に雇用されずに複数のクライアントから業務委託契約を受けてシステム開発・プログラミングなどの技術業務を提供するエンジニアのことです。\n主な働き方は2種類です：\n常駐型（客先常駐）: クライアント企業のオフィスに通勤してチームに参加する形態。月単価60万〜120万円が相場。 リモート型: 自宅などから完全リモートで業務委託を受ける形態。2026年現在、リモート案件は急増中。 フリーランスエンジニアの収入計算式：\n年収 ≒ 月単価 × 稼働月数（通常10〜11ヶ月） - 税金・社会保険（約25〜35%） - 経費（月数万円） 例：月単価80万円のフリーランスエンジニアの手取り年収\n年間売上：80万円 × 11ヶ月 = 880万円 経費・税・保険控除後：880万円 × 70% ≒ 616万円 メリット・デメリット フリーランスエンジニアのメリット\n年収が会社員の1.5〜2.5倍になりやすい 案件・技術スタックを自分で選べる リモートワーク・フレックスが実現しやすい 経費計上で節税できる（青色申告65万円控除、PC・書籍・家賃按分等） スキルに直結した収入増が得られる フリーランスエンジニアのデメリット\n国民健康保険・国民年金を自己負担（年間約70万〜100万円） 案件が途切れると収入ゼロの期間が生じる 営業・税務・保険手続きなどを自分で行う必要がある 有給休暇・育児休暇などの福利厚生がない 住宅ローン・クレジットカードの審査が厳しくなる場合がある フリーランスエンジニア 年収相場一覧 スキル・言語別 月単価相場（2026年版） スキル・言語 経験3年未満 経験3〜5年 経験5年以上 Python（AI/ML） 60〜80万円 80〜100万円 100〜150万円 Go言語 60〜80万円 80〜110万円 100〜140万円 TypeScript/React 55〜75万円 75〜100万円 95〜130万円 Kotlin/Androidアプリ 55〜75万円 70〜95万円 90〜120万円 Swift/iOSアプリ 55〜75万円 70〜95万円 90〜120万円 Java（Spring） 50〜70万円 65〜90万円 85〜110万円 PHP/Laravel 45〜65万円 60〜85万円 80〜105万円 Ruby/Rails 50〜70万円 65〜90万円 80〜110万円 AWS/クラウドインフラ 60〜85万円 80〜110万円 100〜150万円 セキュリティエンジニア 70〜90万円 90〜120万円 120〜180万円 データエンジニア 65〜85万円 80〜110万円 100〜150万円 AIエンジニア/LLM 80〜100万円 100〜140万円 140〜200万円 2026年の注目トレンド：\nAIエンジニア（LLM活用）: ChatGPT・Claude・Geminiを活用したシステム構築の需要が急増。経験3年以上で月単価140万円超も セキュリティエンジニア: サイバー攻撃増加を背景に需要が逼迫。単価上昇率が最も高い クラウドアーキテクト（AWS/GCP/Azure）: DX推進企業からの需要が継続的に高い 職種別 年収レンジ（手取りベース） 職種 年収レンジ（手取り） 月単価目安 フロントエンドエンジニア 400万〜800万円 50〜80万円 バックエンドエンジニア 450万〜900万円 55〜90万円 フルスタックエンジニア 500万〜950万円 60〜100万円 インフラ・クラウドエンジニア 550万〜1,100万円 65〜110万円 データエンジニア 550万〜1,100万円 65〜110万円 AIエンジニア 700万〜1,500万円 80〜150万円 セキュリティエンジニア 700万〜1,400万円 80〜140万円 テックリード/アーキテクト 800万〜1,500万円 90〜150万円 フリーランスエンジニア おすすめエージェント比較 エージェント比較表 エージェント 案件数 得意分野 リモート案件 手数料 レバテックフリーランス 多い 全般、首都圏案件強 あり 非公開 ミッドワークス 多い 正社員並み保障が特徴 多い 非公開 PE-BANK 多い 常駐型に強い 少なめ 非公開 Modis（アデコ） 多い 大手企業案件多 あり 非公開 クラウドテック 中程度 リモート特化 多い 非公開 Lancers Agent 中程度 スタートアップ案件 多い 非公開 エージェント選びのポイント：\n複数社に同時登録する（3〜5社推奨）：案件の選択肢が増え、単価交渉にも有利 専門特化エージェント vs 総合エージェント：スキルが明確な場合は専門特化の方が高単価案件を紹介してもらいやすい 担当者との相性：連絡の速さ・案件の質で担当者を見極める。合わなければ変更を申し出てOK 年収1,000万円超えを実現する条件 月単価100万円到達のロードマップ フェーズ1（経験0〜2年）：月単価40〜60万円\n目標：プログラミング基礎の習得、1社での実績作り やること：現職の業務で成果を出す、副業でクラウドソーシング案件を受注し始める スキル：HTML/CSS/JavaScript/Python/AWS基礎 フェーズ2（経験2〜4年）：月単価60〜80万円\n目標：フリーランスとして独立、最初の1〜2年で実績を積む やること：エージェント経由で初案件獲得、専門分野を絞る スキル：フロントエンドまたはバックエンド特化、クラウド関連を追加 フェーズ3（経験4〜6年）：月単価80〜100万円\n目標：リピートクライアントの獲得・高単価案件への移行 やること：技術ブログ・登壇で知名度向上、上流工程（要件定義・設計）へのシフト スキル：特定領域での深い専門性（AI/セキュリティ/クラウド） フェーズ4（経験6年以上）：月単価100万円超\n目標：テックリード・アーキテクト・CTOポジションの案件 やること：自己発信・SNS活用、高単価クライアントとの直接契約 スキル：システム設計・マネジメント・チーム構築 節税で実質年収を最大化する方法 フリーランスエンジニアが使える主な節税手法：\n節税手法 節税額（年間目安） 条件 青色申告特別控除 約13〜20万円 e-Tax・複式簿記 iDeCo 最大16.3万円（所得税のみ） 国民年金加入者 小規模企業共済 最大25万円 個人事業主 経費の最適化（PC・書籍・通信・家賃按分） 年間30〜50万円 適切な按分 法人化（売上1,000万円超） 年間50〜100万円 要検討 関連記事: フリーランスの確定申告・節税完全ガイド 選び方・注意点 チェックポイント フリーランスエンジニアを目指す前に確認すること：\n最低6ヶ月分の生活費を確保する：独立直後は案件探しで1〜2ヶ月かかることも 国民健康保険・国民年金の保険料を試算する：年収600万円の場合、保険料だけで年間80〜100万円が目安 住宅ローンは独立前に組む：フリーランスは審査が厳しいため、独立2〜3年前に検討 退職時の手続きを確認する：雇用保険の基本手当（失業給付）との関係に注意 よくある失敗 失敗例1: スキルが中途半端なまま独立する\n「なんとかなる」と思って未経験に近い状態で独立しても、案件が取れず収入が途絶えます。現職で「この技術なら誰にも負けない」という自信が持てるまでスキルを磨いてから独立を検討しましょう。\n失敗例2: 単一クライアントへの依存\n収入の80%以上を1社のクライアントから得ている状態は、実質的に「偽装請負」のリスクがあり、契約打ち切りで一気に収入ゼロになります。常に複数クライアントへの分散を意識しましょう。\n失敗例3: 値下げ交渉を断れない\n「単価を下げてもらえれば継続できる」というクライアントの要請に応じ続けると、単価がどんどん下がります。適正な単価を維持することが長期的には自分とクライアント双方のためになります。\nよくある質問（FAQ） Q1. 未経験からフリーランスエンジニアになれますか？\nA. 難しいですが不可能ではありません。まず会社員エンジニアとして2〜3年の実務経験を積んでからフリーランスに転向する方が、収入・案件の安定性の面で圧倒的に有利です。\nQ2. フリーランスエンジニアの平均年収はいくらですか？\nA. 2026年のデータでは、フリーランスエンジニアの平均年収（実質手取り）は約700万〜900万円が中心値です。スキルと経験によって400万円〜1,500万円以上と大きく幅があります。\nQ3. 確定申告はどうすればいいですか？\nA. freeeやマネーフォワードクラウドなどの会計ソフトを使い、青色申告（65万円控除）を選択することをおすすめします。売上が高い場合は税理士に依頼することも検討してください。\nQ4. フリーランスエンジニアはリモートワークができますか？\nA. 2026年現在、リモート可能な案件は全体の約70〜80%に達しています。ただし、常駐必須の案件の方が単価が高い傾向があります。\nQ5. 法人化（株式会社設立）はいつすべきですか？\nA. 年収（売上ベース）が1,000万〜1,500万円を超えてきたら、法人化による節税メリットが大きくなります。顧問税理士と相談しながら決断することをおすすめします。\nQ6. エージェントと直接契約、どちらが稼げますか？\nA. クライアントとの直接契約の方が、エージェント手数料分（一般的に売上の10〜20%）だけ手取りが増えます。ただし直接営業には時間・スキルが必要です。\n正社員エンジニアとしての年収アップを目指すなら、**doda **で市場価値を確認してみましょう。IT業界特化のアドバイザーが年収交渉もサポートしてくれます。\nまとめ・行動の呼びかけ フリーランスエンジニアの年収は、スキルと戦略次第で会社員の2倍以上を実現できます。まずは現職でスキルを磨き、副業案件で実績を作り、3〜5年後の独立を目指すロードマップを描いてみましょう。2026年はAI・セキュリティ・クラウドの需要がピークに達しており、今がフリーランス転向の絶好のタイミングです。\n副業の始め方をもっと詳しく知りたい方は「副業完全ガイド2026年版 」をチェック！副業エンジニア案件の探し方・単価交渉・税務対策まで網羅しています（¥1,280）。\nフリーランスとして独立を考えている方は「フリーランス完全スタートキット 」がおすすめです。開業届・税務・単価交渉まで独立に必要なすべてが詰まっています（¥980）。詳しくはこちら 転職を検討しているエンジニアには「転職面接完全対策キット 」もおすすめです。技術面接・ポートフォリオ作成から条件交渉まで、転職成功に必要な情報が凝縮されています（¥1,280）。\n※本記事は情報提供を目的としています。税務に関する判断は税理士等の専門家にご相談ください。\n※本記事にはアフィリエイト広告が含まれています。\n関連ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール フリーランスの手取り額を計算 → 手取り計算ツール 転職・独立後の年収を比較 → 転職年収シミュレーター フリーランスの税金を計算 → フリーランス税金計算ツール 年収から所得税・住民税を計算 → 所得税シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 ","permalink":"https://productivity-works.com/ja/posts/%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9-%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2-%E5%B9%B4%E5%8F%8E-%E7%9B%B8%E5%A0%B4/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"フリーランス-エンジニア-年収-相場完全ガイド2026年最新版\"\u003eフリーランス エンジニア 年収 相場完全ガイド【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「会社員エンジニアとフリーランスエンジニア、実際どっちが稼げるの？」——この問いに対する答えは、2026年現在明確になっています。\u003cstrong\u003eスキルと経験があれば、フリーランスエンジニアの年収は会社員の1.5〜2.5倍になることが珍しくありません。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e一方で、フリーランスには税金・保険・営業など会社員にはない負担もあります。本記事では、フリーランスエンジニアの現実的な年収相場・スキル別単価・年収アップ戦略を詳しく解説します。\u003c/p\u003e\n\u003cp\u003eこの記事でわかること：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eフリーランスエンジニアの年収相場（スキル別・言語別）\u003c/li\u003e\n\u003cli\u003e月単価の目安と手取り計算の方法\u003c/li\u003e\n\u003cli\u003e年収1,000万円超えを実現する条件\u003c/li\u003e\n\u003cli\u003eフリーランスエンジニアになるための準備ステップ\u003c/li\u003e\n\u003cli\u003eおすすめエージェントの比較\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"フリーランスエンジニアとは基本を理解する\"\u003eフリーランスエンジニアとは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003eフリーランスエンジニアとは、特定の企業に雇用されずに複数のクライアントから業務委託契約を受けてシステム開発・プログラミングなどの技術業務を提供するエンジニアのことです。\u003c/p\u003e\n\u003cp\u003e主な働き方は2種類です：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e常駐型（客先常駐）\u003c/strong\u003e: クライアント企業のオフィスに通勤してチームに参加する形態。月単価60万〜120万円が相場。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eリモート型\u003c/strong\u003e: 自宅などから完全リモートで業務委託を受ける形態。2026年現在、リモート案件は急増中。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003eフリーランスエンジニアの収入計算式\u003c/strong\u003e：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e年収 ≒ 月単価 × 稼働月数（通常10〜11ヶ月）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 税金・社会保険（約25〜35%）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003e-\u003c/span\u003e 経費（月数万円）\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e例：月単価80万円のフリーランスエンジニアの手取り年収\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e年間売上：80万円 × 11ヶ月 = 880万円\u003c/li\u003e\n\u003cli\u003e経費・税・保険控除後：880万円 × 70% ≒ 616万円\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eフリーランスエンジニアのメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e年収が会社員の1.5〜2.5倍になりやすい\u003c/li\u003e\n\u003cli\u003e案件・技術スタックを自分で選べる\u003c/li\u003e\n\u003cli\u003eリモートワーク・フレックスが実現しやすい\u003c/li\u003e\n\u003cli\u003e経費計上で節税できる（青色申告65万円控除、PC・書籍・家賃按分等）\u003c/li\u003e\n\u003cli\u003eスキルに直結した収入増が得られる\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eフリーランスエンジニアのデメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e国民健康保険・国民年金を自己負担（年間約70万〜100万円）\u003c/li\u003e\n\u003cli\u003e案件が途切れると収入ゼロの期間が生じる\u003c/li\u003e\n\u003cli\u003e営業・税務・保険手続きなどを自分で行う必要がある\u003c/li\u003e\n\u003cli\u003e有給休暇・育児休暇などの福利厚生がない\u003c/li\u003e\n\u003cli\u003e住宅ローン・クレジットカードの審査が厳しくなる場合がある\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"フリーランスエンジニア-年収相場一覧\"\u003eフリーランスエンジニア 年収相場一覧\u003c/h2\u003e\n\u003ch3 id=\"スキル言語別-月単価相場2026年版\"\u003eスキル・言語別 月単価相場（2026年版）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eスキル・言語\u003c/th\u003e\n          \u003cth\u003e経験3年未満\u003c/th\u003e\n          \u003cth\u003e経験3〜5年\u003c/th\u003e\n          \u003cth\u003e経験5年以上\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePython（AI/ML）\u003c/td\u003e\n          \u003ctd\u003e60〜80万円\u003c/td\u003e\n          \u003ctd\u003e80〜100万円\u003c/td\u003e\n          \u003ctd\u003e100〜150万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eGo言語\u003c/td\u003e\n          \u003ctd\u003e60〜80万円\u003c/td\u003e\n          \u003ctd\u003e80〜110万円\u003c/td\u003e\n          \u003ctd\u003e100〜140万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTypeScript/React\u003c/td\u003e\n          \u003ctd\u003e55〜75万円\u003c/td\u003e\n          \u003ctd\u003e75〜100万円\u003c/td\u003e\n          \u003ctd\u003e95〜130万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eKotlin/Androidアプリ\u003c/td\u003e\n          \u003ctd\u003e55〜75万円\u003c/td\u003e\n          \u003ctd\u003e70〜95万円\u003c/td\u003e\n          \u003ctd\u003e90〜120万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSwift/iOSアプリ\u003c/td\u003e\n          \u003ctd\u003e55〜75万円\u003c/td\u003e\n          \u003ctd\u003e70〜95万円\u003c/td\u003e\n          \u003ctd\u003e90〜120万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eJava（Spring）\u003c/td\u003e\n          \u003ctd\u003e50〜70万円\u003c/td\u003e\n          \u003ctd\u003e65〜90万円\u003c/td\u003e\n          \u003ctd\u003e85〜110万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePHP/Laravel\u003c/td\u003e\n          \u003ctd\u003e45〜65万円\u003c/td\u003e\n          \u003ctd\u003e60〜85万円\u003c/td\u003e\n          \u003ctd\u003e80〜105万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eRuby/Rails\u003c/td\u003e\n          \u003ctd\u003e50〜70万円\u003c/td\u003e\n          \u003ctd\u003e65〜90万円\u003c/td\u003e\n          \u003ctd\u003e80〜110万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAWS/クラウドインフラ\u003c/td\u003e\n          \u003ctd\u003e60〜85万円\u003c/td\u003e\n          \u003ctd\u003e80〜110万円\u003c/td\u003e\n          \u003ctd\u003e100〜150万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eセキュリティエンジニア\u003c/td\u003e\n          \u003ctd\u003e70〜90万円\u003c/td\u003e\n          \u003ctd\u003e90〜120万円\u003c/td\u003e\n          \u003ctd\u003e120〜180万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eデータエンジニア\u003c/td\u003e\n          \u003ctd\u003e65〜85万円\u003c/td\u003e\n          \u003ctd\u003e80〜110万円\u003c/td\u003e\n          \u003ctd\u003e100〜150万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAIエンジニア/LLM\u003c/td\u003e\n          \u003ctd\u003e80〜100万円\u003c/td\u003e\n          \u003ctd\u003e100〜140万円\u003c/td\u003e\n          \u003ctd\u003e140〜200万円\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e2026年の注目トレンド\u003c/strong\u003e：\u003c/p\u003e","title":"フリーランスエンジニア年収相場完全ガイド2026年版"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nフリーランス 確定申告 やり方完全ガイド【2026年最新版】 「フリーランスになったけど、確定申告って何をすればいいの？」——毎年2〜3月になると、多くのフリーランスがこの疑問に直面します。\n会社員時代は年末調整で完結していた税務手続きが、フリーランスになった途端に自分でやらなければならなくなります。しかし、正しい知識があれば確定申告はそれほど難しくありません。むしろ、青色申告を活用すれば最大65万円の特別控除が受けられるなど、節税メリットも大きいのです。\nフリーランス・副業の税金計算ステップ 年間売上（収入） クラウドソーシング・案件報酬など － 必要経費（通信費・家賃按分など） 事業所得 = 売上 − 経費 － 所得控除（青色65万・基礎控除48万・iDeCoなど） 課税所得 × 所得税率（5〜45%）＋ 住民税10% 納付すべき税額（所得税＋住民税） 青色申告65万円控除で課税所得を大幅に圧縮できます この記事でわかること：\nフリーランスの確定申告の基本スケジュール 青色申告と白色申告の違いと選び方 経費として計上できる費用の一覧 e-Taxを使った確定申告の手順 よくある申告ミスと対処法 フリーランスの確定申告とは？基本を理解する 定義・仕組み 確定申告とは、1月1日〜12月31日の1年間の所得（収入 - 経費）を計算し、納めるべき税金を国に申告・納付する手続きです。フリーランス（個人事業主）は、原則として毎年3月15日までに前年分の確定申告を行う義務があります。\nフリーランスの所得は「事業所得」として扱われます。事業所得 = 売上 - 必要経費 という計算式で求め、そこから各種控除（青色申告特別控除、基礎控除など）を引いた金額に税率をかけて税額が決まります。\n確定申告が必要なフリーランスの条件：\n年間の事業所得が48万円（基礎控除額）を超える場合 副業収入が年間20万円を超える会社員 各種控除・還付を受けたい場合 青色申告と白色申告の違い 比較項目 青色申告（65万円控除） 青色申告（10万円控除） 白色申告 特別控除額 65万円 10万円 なし 記帳方式 複式簿記 簡易簿記 簡易簿記 e-Tax必須 はい いいえ いいえ 赤字繰越 3年間可能 3年間可能 不可 家族への給与 青色事業専従者給与として全額経費 全額経費 上限あり 難易度 やや高い 普通 低い 結論: 年収300万円以上のフリーランスなら**青色申告（65万円控除）**が最もお得です。freeeやマネーフォワードクラウドなどの会計ソフトを使えば複式簿記も自動化できます。\n青色申告を選択するには、開業から2ヶ月以内（または前年12月31日まで）に「青色申告承認申請書」を税務署に提出する必要があります。\n関連記事: フリーランス開業届の書き方完全ガイド フリーランス確定申告の手順ステップガイド ステップ1：収入・経費を記録する（年間を通じて） 確定申告は1〜2月に慌てて準備するものではなく、年間を通じた記帳習慣が重要です。\nおすすめの会計ソフト：\nfreee（フリー） : 直感的なUI・銀行口座・クレジットカード連携が強み マネーフォワードクラウド確定申告: 家計簿連携ユーザーに人気 弥生の青色申告オンライン: 操作が簡単で老舗の安心感 月次で必ずやること：\n銀行口座・クレジットカードの明細を会計ソフトに連携 領収書・レシートをスマホで撮影してアップロード 経費の勘定科目を確認・修正 ステップ2：経費を漏れなく計上する フリーランスが計上できる主な経費一覧です。\n勘定科目 具体例 按分の考え方 通信費 インターネット代、スマホ代 仕事利用割合で按分（例：50%） 地代家賃 自宅オフィス家賃 仕事スペース割合で按分（例：20%） 消耗品費 文房具、プリンターインク 全額または業務割合で按分 旅費交通費 打ち合わせへの交通費 全額 会議費 クライアントとの飲食代 全額（上限なし） 図書研究費 専門書、有料セミナー代 全額 広告宣伝費 SNS広告、名刺印刷 全額 減価償却費 PC、カメラ（10万円以上） 耐用年数に応じて分割 外注費 業務委託した費用 全額 重要: 10万円未満の備品（PCソフトウェア等）は全額その年の経費に計上できます。10万円以上は減価償却が必要です（ただし青色申告者は30万円未満まで一括経費計上が可能な特例あり）。\nステップ3：所得控除を確認する 経費以外にも、所得から差し引ける「所得控除」があります。\n控除種類 金額 条件 基礎控除 48万円 全員 青色申告特別控除 65万円 e-Tax利用・複式簿記 社会保険料控除 実額 国民健康保険・国民年金 小規模企業共済等掛金控除 実額 iDeCo・小規模企業共済 生命保険料控除 最大12万円 生命・介護・個人年金 医療費控除 超過分 年間医療費10万円超 特にフリーランスにおすすめなのがiDeCo（個人型確定拠出年金）と小規模企業共済です。iDeCoは月最大68,000円（国民年金のみ加入の場合）、小規模企業共済は月最大70,000円を全額所得控除できます。\nステップ4：確定申告書を作成する e-Taxを使った確定申告の手順：\n**国税庁「確定申告書等作成コーナー」**にアクセス マイナンバーカード方式またはID・パスワード方式でログイン 「決算書・収支内訳書の作成」→「所得税の確定申告書の作成」の順に進む 収入・経費の数字を入力（会計ソフトからエクスポートしたデータを使用） 控除情報を入力 税額を確認し、e-Taxで送信 青色申告65万円控除を受けるには、e-Tax（電子申告）での提出が必須です（2020年分以降）。\nステップ5：税金を納付する 確定申告後の納付期限は3月15日です。支払い方法は以下の通りです。\ne-Tax（ダイレクト納付）: 最も便利、手数料なし クレジットカード: 手数料がかかるが24時間対応 コンビニ納付: QRコードで支払い 振替納税: 4月下旬引落し（申請が必要） 確定申告の注意点 チェックポイント 売上の計上漏れがないか（複数のクライアントの支払いを全て確認） 消費税の申告が必要かどうか（前々年の売上が1,000万円超で課税事業者） インボイス制度への対応（2023年10月以降、適格請求書発行事業者への登録が必要な場合あり） 予定納税の確認（前年の税額が15万円以上の場合、7月と11月に予定納税が課される） よくある失敗 失敗例1: 源泉徴収税を忘れる\nクライアントから支払いを受ける際、源泉徴収（10.21%）が差し引かれていることがあります。これを確定申告時に申告しないと二重払いになります。支払調書を必ず受け取りましょう。\n失敗例2: プライベートと事業の口座を混在させる\n事業用口座を別に作らないと経費の仕分けが大変になります。事業開始時に専用口座を開設しましょう。\n失敗例3: 期限後申告になる\n3月15日を過ぎると「無申告加算税（15〜20%）」や「延滞税（年約8.7%）」が課される可能性があります。どうしても間に合わない場合は、税務署に相談して期限を確認しましょう。\nよくある質問（FAQ） Q1. 確定申告の期間はいつですか？\nA. 毎年2月16日〜3月15日が申告・納付期限です。還付申告（税金が戻ってくる場合）は1月1日から提出可能で、5年間さかのぼって申告できます。\nQ2. 会計ソフトなしで確定申告できますか？\nA. 可能ですが、国税庁の「確定申告書等作成コーナー」を使うのが最も簡単です。ただし記帳管理は自分でExcel等を使って行う必要があります。\nQ3. 消費税の申告はいつから必要ですか？\nA. 原則として前々年の課税売上高が1,000万円を超えた年から消費税の申告義務が生じます。インボイス登録をした場合は売上高に関わらず課税事業者になります。\nQ4. 青色申告を途中から変更できますか？\nA. 毎年3月15日までに「青色申告承認申請書」を提出すれば、翌年から青色申告に変更できます。\nQ5. 赤字の場合も申告は必要ですか？\nA. 赤字（損失）は翌年以降3年間に繰り越して節税できます（青色申告のみ）。申告しないと繰越控除が使えなくなるため、赤字でも申告することをおすすめします。\nQ6. 税理士に依頼するといくらかかりますか？\nA. フリーランスの確定申告代行は年間5万〜15万円程度が相場です。売上が年間500万円以上になってきたら税理士への依頼を検討しましょう。\nQ7. 経費の領収書はどのくらい保管が必要ですか？\nA. 個人事業主の場合、領収書・帳簿類は7年間（青色申告）または5年間（白色申告）の保管義務があります。\nまとめ・行動の呼びかけ フリーランスの確定申告は、正しい知識と会計ソフトがあれば決して難しくありません。今年から青色申告を選択し、iDeCoや小規模企業共済を活用することで、実質的な手取りを大幅に増やすことができます。まずは会計ソフトの無料トライアルから始めてみましょう。\n副業の始め方をもっと詳しく知りたい方は「副業完全ガイド2026年版 」をチェック！確定申告・税金対策・プラットフォーム比較など、副業に必要な情報が1冊に凝縮されています（¥1,280）。\nフリーランスとして独立を考えている方は「フリーランス完全スタートキット 」がおすすめです。開業届の書き方から単価交渉術まで、独立に必要なすべてが揃っています（¥980）。\n関連ツール・記事 フリーランスの税金・手取りを計算 → フリーランス税金計算ツール 手取り額をシミュレーション → 手取り計算ツール iDeCoの節税効果を確認 → iDeCoシミュレーター 年収から所得税・住民税を計算 → 所得税シミュレーター プロ品質な請求書を無料で作成・PDF出力 → 請求書作成ツール フリーランスの適正時給を計算 → フリーランス報酬計算ツール 副業の確定申告やり方2026年版【freee・マネーフォワード対応】 副業フリーランスがfreeeで青色申告65万控除を最速で取る方法 フリーランスエンジニアの開業届と青色申告｜初年度にやるべき手続き全リスト AI×確定申告 フリーランス完全自動化ガイド2026 フリーランス開業届の書き方完全ガイド2026年版 ※本記事は情報提供を目的としています。税務に関する判断は税理士等の専門家にご相談ください。\n※本記事にはアフィリエイト広告が含まれています。\n関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 ","permalink":"https://productivity-works.com/ja/posts/%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9-%E7%A2%BA%E5%AE%9A%E7%94%B3%E5%91%8A-%E3%82%84%E3%82%8A%E6%96%B9/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"フリーランス-確定申告-やり方完全ガイド2026年最新版\"\u003eフリーランス 確定申告 やり方完全ガイド【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「フリーランスになったけど、確定申告って何をすればいいの？」——毎年2〜3月になると、多くのフリーランスがこの疑問に直面します。\u003c/p\u003e\n\u003cp\u003e会社員時代は年末調整で完結していた税務手続きが、フリーランスになった途端に自分でやらなければならなくなります。しかし、正しい知識があれば確定申告はそれほど難しくありません。むしろ、青色申告を活用すれば最大65万円の特別控除が受けられるなど、節税メリットも大きいのです。\u003c/p\u003e\n\u003cdiv style=\"max-width:620px;margin:1.8em auto;text-align:center;\"\u003e\n\u003csvg viewBox=\"0 0 620 280\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:100%;height:auto;\" aria-label=\"フリーランス・副業の税金計算ステップ\"\u003e\n  \u003cstyle\u003etext { font-family: 'Noto Sans JP', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', sans-serif; }\u003c/style\u003e\n  \u003crect width=\"620\" height=\"280\" rx=\"12\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"26\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"14\" font-weight=\"bold\"\u003eフリーランス・副業の税金計算ステップ\u003c/text\u003e\n  \u003cdefs\u003e\n    \u003cmarker id=\"arr5\" markerWidth=\"8\" markerHeight=\"8\" refX=\"6\" refY=\"3\" orient=\"auto\"\u003e\n      \u003cpath d=\"M0,0 L0,6 L8,3 z\" fill=\"#cbd5e1\"/\u003e\n    \u003c/marker\u003e\n  \u003c/defs\u003e\n  \u003c!-- 年間売上 --\u003e\n  \u003crect x=\"200\" y=\"38\" width=\"220\" height=\"44\" rx=\"8\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"310\" y=\"57\" text-anchor=\"middle\" fill=\"white\" font-size=\"12\" font-weight=\"bold\"\u003e年間売上（収入）\u003c/text\u003e\n \u003ctext x=\"310\" y=\"74\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\"\u003eクラウドソーシング・案件報酬など\u003c/text\u003e\n  \u003c!-- マイナス1 --\u003e\n  \u003cline x1=\"310\" y1=\"82\" x2=\"310\" y2=\"100\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr5)\"/\u003e\n  \u003crect x=\"240\" y=\"88\" width=\"140\" height=\"20\" rx=\"4\" fill=\"#eff6ff\" stroke=\"#f59e0b\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"102\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"10\" font-weight=\"bold\"\u003e－ 必要経費（通信費・家賃按分など）\u003c/text\u003e\n  \u003c!-- 事業所得 --\u003e\n  \u003crect x=\"200\" y=\"106\" width=\"220\" height=\"36\" rx=\"8\" fill=\"#1e293b\"/\u003e\n \u003ctext x=\"310\" y=\"129\" text-anchor=\"middle\" fill=\"white\" font-size=\"13\" font-weight=\"bold\"\u003e事業所得 = 売上 − 経費\u003c/text\u003e\n  \u003c!-- マイナス2 --\u003e\n  \u003cline x1=\"310\" y1=\"142\" x2=\"310\" y2=\"160\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr5)\"/\u003e\n  \u003crect x=\"200\" y=\"148\" width=\"220\" height=\"18\" rx=\"4\" fill=\"#eff6ff\" stroke=\"#f59e0b\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"161\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"10\" font-weight=\"bold\"\u003e－ 所得控除（青色65万・基礎控除48万・iDeCoなど）\u003c/text\u003e\n  \u003c!-- 課税所得 --\u003e\n  \u003crect x=\"200\" y=\"172\" width=\"220\" height=\"36\" rx=\"8\" fill=\"#64748b\"/\u003e\n \u003ctext x=\"310\" y=\"195\" text-anchor=\"middle\" fill=\"white\" font-size=\"13\" font-weight=\"bold\"\u003e課税所得\u003c/text\u003e\n  \u003c!-- 税率 --\u003e\n  \u003cline x1=\"310\" y1=\"208\" x2=\"310\" y2=\"226\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr5)\"/\u003e\n  \u003crect x=\"220\" y=\"214\" width=\"180\" height=\"18\" rx=\"4\" fill=\"#eff6ff\" stroke=\"#f59e0b\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"227\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"10\" font-weight=\"bold\"\u003e× 所得税率（5〜45%）＋ 住民税10%\u003c/text\u003e\n  \u003c!-- 最終税額 --\u003e\n  \u003crect x=\"160\" y=\"236\" width=\"300\" height=\"36\" rx=\"8\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"310\" y=\"255\" text-anchor=\"middle\" fill=\"white\" font-size=\"13\" font-weight=\"bold\"\u003e納付すべき税額（所得税＋住民税）\u003c/text\u003e\n\u003cp\u003e\u003ctext x=\"310\" y=\"272\" text-anchor=\"middle\" fill=\"#cbd5e1\" font-size=\"10\"\u003e青色申告65万円控除で課税所得を大幅に圧縮できます\u003c/text\u003e\n\u003c/svg\u003e\u003c/p\u003e","title":"フリーランス確定申告のやり方完全ガイド2026年版"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nフリーランス 開業届 書き方完全ガイド【2026年最新版】 「フリーランスになったら開業届を出さないといけないの？」「どこに、何を書けばいいの？」——独立したての方がまず困るのが、この開業届の手続きです。\n結論から言うと、開業届はA4用紙1枚で、書き方さえわかれば15分で完成します。しかも、開業届の提出には費用がかかりません。それにもかかわらず、開業届を出していないフリーランスは意外と多いです。開業届を出すことで青色申告が使えるようになり、年間最大65万円の節税が可能になります。\nこの記事でわかること：\n開業届を出すメリット・デメリット 開業届の書き方（項目ごとの記入例） 提出期限・提出先・提出方法 青色申告承認申請書との同時提出の重要性 職業欄・屋号の決め方 フリーランスの開業届とは？基本を理解する 定義・仕組み 「個人事業の開業・廃業等届出書（通称：開業届）」は、個人が事業を開始した際に税務署に提出する書類です。所得税法第229条に基づく提出義務があります。\n提出の義務はありますが、未提出でも罰則はありません。しかし、開業届を出さないと青色申告を選択できず、節税メリットを受けられません。また、以下の実務的なメリットも享受できません。\n開業届を出すことで得られる主なメリット：\n青色申告が使えるようになる（最大65万円控除） 屋号名義の銀行口座が開設できる 小規模企業共済に加入できる（月最大7万円を全額所得控除） 事業の実態証明になる（ローン審査・賃貸審査で有利） 失業給付の扱い変更（会社退職後すぐに開業する場合に注意） メリット・デメリット 開業届のメリット\n社会的信用の向上（名刺に「個人事業主」と記載できる） 青色申告による節税効果（年間数万〜数十万円） 事業用口座の開設が容易になる 補助金・助成金の申請資格が生まれる 開業届のデメリット（注意点）\n国民健康保険・国民年金への切り替えが必要になる場合がある（会社員との二重加入に注意） 失業給付（雇用保険の基本手当）の受給資格を失う可能性がある 廃業時に廃業届の提出が必要 副業として行う場合（本業は会社員のまま）は、基本的にデメリットは少なく、青色申告のメリットを享受できます。\n開業届の書き方ステップガイド 書類の入手方法 開業届は以下の方法で入手できます：\n税務署の窓口でもらう（無料） 国税庁ウェブサイトからPDFをダウンロードして印刷 マイナポータルからe-Taxで電子申請（印刷不要） freee開業等のサービスで自動作成（無料） 初心者にはfreee開業の無料サービスが最も手軽です。必要事項を入力するだけで開業届・青色申告承認申請書を自動作成してくれます。\n開業届の各項目の書き方 書類名：個人事業の開業・廃業等届出書\n項目 書き方・例 提出先 所轄税務署名（住所の管轄税務署を国税庁HPで検索） 提出年月日 提出する日付を記入 納税地 自宅住所または事務所住所（どちらか選択） 住所地・居所地・事業所等 納税地以外の住所がある場合のみ記入 氏名 フルネームで記入（印鑑欄は任意） 生年月日 西暦または和暦で記入 個人番号（マイナンバー） 12桁のマイナンバーを記入 職業 具体的な職業を記入（例：Webライター、ITエンジニア、デザイナー） 屋号 任意。事業名を付ける場合に記入（未記入でもOK） 届出の区分 「開業」に〇をつける 開業・廃業日等 実際に事業を始めた日（または提出日でもOK） 事業の概要 具体的に記入（例：「Webサイトのコンテンツ記事作成」「Webデザイン制作」） 給与等の支払の状況 従業員を雇う場合のみ記入（一人で働く場合は「無」でOK） 源泉所得税の納期の特例 従業員を雇う場合に関係（一人なら記入不要） 職業欄の書き方 開業届の中で最も迷う項目が「職業」欄です。以下を参考にしてください。\n仕事内容 職業欄の書き方例 記事・コンテンツ作成 Webライター、コンテンツライター ウェブサイト制作 Webデザイナー、Webエンジニア システム・アプリ開発 ITエンジニア、システムエンジニア 動画制作・編集 動画クリエイター、映像制作者 イラスト・グラフィック イラストレーター、グラフィックデザイナー コンサルティング 経営コンサルタント、ITコンサルタント オンライン講師・教育 教育コンテンツ制作者、オンライン講師 複数の仕事 「Webライター兼デザイナー」など組み合わせてOK 職業欄は税務署が内容を厳しくチェックするわけではないので、自分の仕事を正確に表す言葉を自由に書いて構いません。\n屋号の決め方 屋号（事業名）は任意ですが、決めておくと以下のメリットがあります：\n屋号名義の銀行口座が開設できる 請求書・名刺のブランディングになる フリーランスとしての独立感が出る 屋号を決める際のポイント：\nシンプルで覚えやすい（3〜10文字が理想） 仕事内容が伝わる（例：「○○ライティング」「○○デザイン」） 検索で被りが少ない（Google検索でユニークな名前かどうかを確認） 将来的な事業拡大も視野に入れる 提出期限・提出方法 提出期限：事業を開始した日から1ヶ月以内（所得税法上の規定）\nただし、1ヶ月を過ぎても罰則はなく、提出は可能です。ただし、青色申告を適用したい年の分については、その年の3月15日まで（または開業から2ヶ月以内の早い方）に青色申告承認申請書を提出する必要があります。\n提出方法3つ：\n税務署窓口への持参：控えに受付印をもらえるので安心。本人確認書類・マイナンバーを持参 郵送：控えに受付印を押して返送してもらうため、返信用封筒（切手貼付）を同封 e-Tax（電子申告）：マイナンバーカードとICカードリーダーまたはスマホで申請可能。最も簡単 青色申告承認申請書との同時提出 なぜ同時提出が重要か 開業届と同時に「所得税の青色申告承認申請書」を提出することを強くおすすめします。青色申告を選択することで、年間最大65万円の特別控除が受けられます。\n年収400万円のフリーランスが青色申告65万円控除を使うと：\n節税効果（所得税＋住民税）：約19万〜26万円 毎月換算：約1.6万〜2.2万円のコスト削減 この節税効果を放置するのは非常にもったいないです。\n青色申告承認申請書の提出期限：\n新規開業の場合：開業日から2ヶ月以内（または1月1日〜1月15日に開業した場合はその年の3月15日まで） 翌年から青色申告にしたい場合：その年の3月15日まで 選び方・注意点 チェックポイント\n提出書類の確認リスト：\n個人事業の開業・廃業等届出書（開業届） 所得税の青色申告承認申請書 （従業員を雇う場合）給与支払事務所等の開設届出書 （従業員を雇う場合）源泉所得税の納期の特例の承認に関する申請書 よくある失敗 失敗例1: 開業届だけ出して青色申告申請書を忘れる\n開業届を出しても、青色申告承認申請書を出さない限り白色申告になります。節税メリットを得るために、必ず同時に提出しましょう。\n失敗例2: 開業日を間違える\n開業日はフリーランスとして最初の仕事を受注した日、または初めて報酬を受け取った日を記載するのが一般的です。明確でない場合は、提出日を開業日としても税務署は受理してくれます。\n失敗例3: 職業欄を曖昧に書く\n「フリーランス」「副業」と書いてしまう方がいますが、これでは事業の実態が伝わりません。具体的な業務内容（「Webライター」「ITエンジニア」等）を記載しましょう。\nよくある質問（FAQ） Q1. 会社員でも開業届を出せますか？\nA. はい、会社員でも開業届を提出できます。副業として個人事業を始める場合、勤務先の副業規定を確認した上で提出することをおすすめします。\nQ2. 開業届を出すと会社にバレますか？\nA. 開業届の情報は税務署に保管されるもので、勤務先には通知されません。ただし、後述の住民税の金額変動で発覚する可能性があります。\nQ3. 開業届の控えはどこで使いますか？\nA. 銀行の事業用口座開設、各種補助金の申請、クレジットカードの審査などで「個人事業主の証明書類」として使用します。必ず控えに受付印または電子証明を受けておきましょう。\nQ4. 廃業する場合はどうすればいいですか？\nA. 廃業する場合は「個人事業の廃業届出書」を税務署に提出します。廃業日から1ヶ月以内に提出するのが原則ですが、罰則はありません。\nQ5. 複数の副業がある場合、開業届は1枚でいいですか？\nA. 基本的に1枚でOKです。事業の概要欄に複数の事業内容を記載するか、主な事業を記載します。\nQ6. マイナンバーは必須ですか？\nA. 2016年以降、開業届にはマイナンバーの記載が義務付けられています。提出時に本人確認書類の提示も必要です。\nQ7. 電子帳簿保存法への対応は必要ですか？\nA. 2024年1月以降、電子取引データ（メール添付の請求書・PDFの領収書等）の電子保存が義務化されています。会計ソフトで対応することをおすすめします。\n会計ソフトは**freee（無料トライアルあり） **が、開業直後のフリーランスに特に人気です。銀行口座やクレカと連携するだけで自動仕訳が始まります。\nまとめ・行動の呼びかけ 開業届の提出は、フリーランスとして活動する上で最初の公式な一歩です。書類はA4用紙1枚で無料、提出も15分で完了します。最大65万円の節税メリットを得るために、今すぐ開業届と青色申告承認申請書を一緒に提出しましょう。freee開業などの無料サービスを使えば、入力から書類作成まで10分以内に完了します。\n副業の始め方をもっと詳しく知りたい方は「副業完全ガイド2026年版 」をチェック！確定申告・税金対策から副業プラットフォーム選びまで一冊で完結します（¥1,280）。\nフリーランスとして独立を考えている方は「フリーランス完全スタートキット 」がおすすめです。開業届・青色申告・単価交渉・保険手続きまで、独立に必要なすべてが揃っています（¥980）。詳しくはこちら ※本記事は情報提供を目的としています。税務に関する判断は税理士等の専門家にご相談ください。\n※本記事にはアフィリエイト広告が含まれています。\n関連ツール フリーランスの税金を計算 → フリーランス税金計算ツール 手取り額をシミュレーション → 手取り計算ツール 年収から所得税・住民税を計算 → 所得税シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 あわせて読みたい フリーランス確定申告のやり方完全ガイド2026年版 フリーランスエンジニアの開業届と青色申告｜初年度にやるべき手続き全リスト フリーランスなり方ロードマップ2026年版【副業から独立まで完全ガイド】 ","permalink":"https://productivity-works.com/ja/posts/%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B9-%E9%96%8B%E6%A5%AD%E5%B1%8A-%E6%9B%B8%E3%81%8D%E6%96%B9/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"フリーランス-開業届-書き方完全ガイド2026年最新版\"\u003eフリーランス 開業届 書き方完全ガイド【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「フリーランスになったら開業届を出さないといけないの？」「どこに、何を書けばいいの？」——独立したての方がまず困るのが、この開業届の手続きです。\u003c/p\u003e\n\u003cp\u003e結論から言うと、\u003cstrong\u003e開業届はA4用紙1枚で、書き方さえわかれば15分で完成\u003c/strong\u003eします。しかも、開業届の提出には費用がかかりません。それにもかかわらず、開業届を出していないフリーランスは意外と多いです。開業届を出すことで青色申告が使えるようになり、年間最大65万円の節税が可能になります。\u003c/p\u003e\n\u003cp\u003eこの記事でわかること：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e開業届を出すメリット・デメリット\u003c/li\u003e\n\u003cli\u003e開業届の書き方（項目ごとの記入例）\u003c/li\u003e\n\u003cli\u003e提出期限・提出先・提出方法\u003c/li\u003e\n\u003cli\u003e青色申告承認申請書との同時提出の重要性\u003c/li\u003e\n\u003cli\u003e職業欄・屋号の決め方\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"フリーランスの開業届とは基本を理解する\"\u003eフリーランスの開業届とは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003e「個人事業の開業・廃業等届出書（通称：開業届）」は、個人が事業を開始した際に税務署に提出する書類です。\u003cstrong\u003e所得税法第229条\u003c/strong\u003eに基づく提出義務があります。\u003c/p\u003e\n\u003cp\u003e提出の義務はありますが、\u003cstrong\u003e未提出でも罰則はありません\u003c/strong\u003e。しかし、開業届を出さないと青色申告を選択できず、節税メリットを受けられません。また、以下の実務的なメリットも享受できません。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e開業届を出すことで得られる主なメリット\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e青色申告が使えるようになる\u003c/strong\u003e（最大65万円控除）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e屋号名義の銀行口座が開設できる\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e小規模企業共済に加入できる\u003c/strong\u003e（月最大7万円を全額所得控除）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e事業の実態証明\u003c/strong\u003eになる（ローン審査・賃貸審査で有利）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e失業給付の扱い変更\u003c/strong\u003e（会社退職後すぐに開業する場合に注意）\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e開業届のメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e社会的信用の向上（名刺に「個人事業主」と記載できる）\u003c/li\u003e\n\u003cli\u003e青色申告による節税効果（年間数万〜数十万円）\u003c/li\u003e\n\u003cli\u003e事業用口座の開設が容易になる\u003c/li\u003e\n\u003cli\u003e補助金・助成金の申請資格が生まれる\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e開業届のデメリット（注意点）\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e国民健康保険・国民年金への切り替えが必要になる場合がある（会社員との二重加入に注意）\u003c/li\u003e\n\u003cli\u003e失業給付（雇用保険の基本手当）の受給資格を失う可能性がある\u003c/li\u003e\n\u003cli\u003e廃業時に廃業届の提出が必要\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e副業として行う場合（本業は会社員のまま）は、基本的にデメリットは少なく、青色申告のメリットを享受できます。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"開業届の書き方ステップガイド\"\u003e開業届の書き方ステップガイド\u003c/h2\u003e\n\u003ch3 id=\"書類の入手方法\"\u003e書類の入手方法\u003c/h3\u003e\n\u003cp\u003e開業届は以下の方法で入手できます：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e税務署の窓口\u003c/strong\u003eでもらう（無料）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e国税庁ウェブサイト\u003c/strong\u003eからPDFをダウンロードして印刷\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eマイナポータル\u003c/strong\u003eからe-Taxで電子申請（印刷不要）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003efreee開業\u003c/strong\u003e等のサービスで自動作成（無料）\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e初心者には\u003cstrong\u003efreee開業\u003c/strong\u003eの無料サービスが最も手軽です。必要事項を入力するだけで開業届・青色申告承認申請書を自動作成してくれます。\u003c/p\u003e\n\u003ch3 id=\"開業届の各項目の書き方\"\u003e開業届の各項目の書き方\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e書類名\u003c/strong\u003e：個人事業の開業・廃業等届出書\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e書き方・例\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e提出先\u003c/td\u003e\n          \u003ctd\u003e所轄税務署名（住所の管轄税務署を国税庁HPで検索）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e提出年月日\u003c/td\u003e\n          \u003ctd\u003e提出する日付を記入\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e納税地\u003c/td\u003e\n          \u003ctd\u003e自宅住所または事務所住所（どちらか選択）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e住所地・居所地・事業所等\u003c/td\u003e\n          \u003ctd\u003e納税地以外の住所がある場合のみ記入\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e氏名\u003c/td\u003e\n          \u003ctd\u003eフルネームで記入（印鑑欄は任意）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e生年月日\u003c/td\u003e\n          \u003ctd\u003e西暦または和暦で記入\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e個人番号（マイナンバー）\u003c/td\u003e\n          \u003ctd\u003e12桁のマイナンバーを記入\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e職業\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e具体的な職業を記入（例：Webライター、ITエンジニア、デザイナー）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e屋号\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e任意。事業名を付ける場合に記入（未記入でもOK）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e届出の区分\u003c/td\u003e\n          \u003ctd\u003e「開業」に〇をつける\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e開業・廃業日等\u003c/td\u003e\n          \u003ctd\u003e実際に事業を始めた日（または提出日でもOK）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e事業の概要\u003c/td\u003e\n          \u003ctd\u003e具体的に記入（例：「Webサイトのコンテンツ記事作成」「Webデザイン制作」）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e給与等の支払の状況\u003c/td\u003e\n          \u003ctd\u003e従業員を雇う場合のみ記入（一人で働く場合は「無」でOK）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e源泉所得税の納期の特例\u003c/td\u003e\n          \u003ctd\u003e従業員を雇う場合に関係（一人なら記入不要）\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"職業欄の書き方\"\u003e職業欄の書き方\u003c/h3\u003e\n\u003cp\u003e開業届の中で最も迷う項目が「職業」欄です。以下を参考にしてください。\u003c/p\u003e","title":"フリーランス開業届の書き方完全ガイド2026年版"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nランサーズ クラウドワークス 比較完全ガイド【2026年最新版】 「ランサーズとクラウドワークス、どっちに登録すればいいの？」——副業を始めようとした人が必ず直面するこの疑問に、2026年最新データをもとに徹底的に答えます。\n結論から言うと、初心者はクラウドワークスから始めて、慣れてきたらランサーズも併用するのがベストです。ただし、ジャンルや目標によって最適な選択は異なります。この記事では両サービスを複数の観点から詳しく比較し、あなたに合った選択ができるよう解説します。\nこの記事でわかること：\nランサーズとクラウドワークスの基本スペック比較 手数料・報酬の違い 得意ジャンル・案件の傾向 登録方法と初期設定の違い どちらを選ぶべきか（タイプ別推奨） ランサーズ・クラウドワークスとは？基本を理解する 定義・仕組み クラウドワークスは2011年設立、東証グロース上場のクラウドソーシングプラットフォームです。登録者数は2026年時点で約550万人、案件数は国内最多クラスです。幅広いジャンルに対応し、初心者向けのタスク案件（アンケート・データ入力）が豊富な点が特徴です。\nランサーズは2008年設立と国内最古参のクラウドソーシングプラットフォームです。登録者数は約100万人とクラウドワークスより少ないですが、登録クライアントのリピート率が高く、比較的高単価の案件が多い傾向があります。2022年にTBM（ランサーズとBPO大手の合弁）を設立するなど、企業DX支援に力を入れています。\nメリット・デメリット（基本比較） クラウドワークスのメリット\n案件数が圧倒的に多い 初心者向け案件（タスク形式）が充実 UIが直感的で使いやすい 仮払い制度で未払いリスクがない クラウドワークスのデメリット\n競合が多いため提案が埋もれやすい タスク案件の単価が低め 手数料が最初は20%と高い ランサーズのメリット\n高単価・長期案件が多い傾向 「認定ランサー」制度でステータスが上がると優遇される 企業クライアントの割合が高い ランサーズプロ（エージェント利用）が使える ランサーズのデメリット\n案件数がクラウドワークスより少ない UIが若干複雑 タスク案件が少ない ランサーズ vs クラウドワークス 徹底比較表 基本スペック比較 比較項目 クラウドワークス ランサーズ 設立年 2011年 2008年 上場 東証グロース 東証グロース 登録者数（2026年推計） 約550万人 約110万人 案件数 多い（国内最多クラス） 中程度 初心者向け案件 ★★★★★ ★★★☆☆ 高単価案件 ★★★☆☆ ★★★★☆ UIの使いやすさ ★★★★☆ ★★★☆☆ スマホアプリ あり あり 手数料比較 累計報酬額 クラウドワークス ランサーズ 〜10万円 20% 16.5% 10万円〜20万円 20% 16.5% 20万円〜100万円 10% 11% 100万円超 5% 5.5% 手数料の比較ポイント：\n初心者・低単価帯（累計20万円まで）：ランサーズの方が手数料が安い（16.5% vs 20%） 中程度（20〜100万円）：クラウドワークスが若干有利（10% vs 11%） 高収入者（100万円超）：ほぼ同等（5% vs 5.5%） 得意ジャンル別比較 ジャンル クラウドワークス ランサーズ おすすめ Webライティング ★★★★★ ★★★★☆ クラウドワークス（案件数多） Webデザイン ★★★★☆ ★★★★☆ 両方登録推奨 プログラミング・開発 ★★★★☆ ★★★★★ ランサーズ（高単価多） データ入力・アシスタント ★★★★★ ★★★☆☆ クラウドワークス 動画・音声制作 ★★★☆☆ ★★★★☆ ランサーズ マーケティング・SNS運用 ★★★☆☆ ★★★★☆ ランサーズ 翻訳 ★★★☆☆ ★★★★☆ ランサーズ イラスト・漫画 ★★★★☆ ★★★☆☆ クラウドワークス AI活用・プロンプト ★★★★☆ ★★★★☆ 両方 報酬支払い・振込サイクル比較 項目 クラウドワークス ランサーズ 支払いサイクル 月末締め・翌月末払い 月末締め・翌月末払い 最低振込額 500円（PayPay/銀行） 1,000円 振込手数料 無料（PayPay口座）・200円（銀行） 200円（銀行） 支払い方法 銀行振込、PayPay 銀行振込 タイプ別：あなたはどちらを選ぶべきか クラウドワークスを先に始めるべき人 副業初心者で実績ゼロ：タスク案件でまず実績を積みたい方 Webライターを目指している：案件数が多くライティング案件が豊富 隙間時間に手軽に稼ぎたい：アンケート・データ入力の案件が豊富 とにかく早く収入を得たい：登録当日から案件に応募できる ランサーズを先に始めるべき人 エンジニア・プログラマー：高単価のシステム開発案件が多い マーケター・コンサルタント：企業クライアントとの長期案件を狙いたい 翻訳・通訳スキルがある：翻訳案件の品質が高い 月収50万円以上を目指す：長期・高単価案件獲得に向いている 両方登録を強くおすすめする人 本格的に副業・フリーランスで稼ぎたい 月収10万円以上を目指している 複数のスキルを持っている クラウドワークスとランサーズの両方に登録することは、どちらのサービスでも禁止されていません。実際に月収10万円以上稼いでいるフリーランスの多くは複数のプラットフォームを併用しています。\n関連記事: クラウドワークスで初心者が稼ぐための完全ガイド 登録・初期設定の注意点 チェックポイント 両プラットフォームの登録時に必ず設定すること：\nクラウドワークスの初期設定チェックリスト：\nプロフィール写真（笑顔の写真が好印象） 自己紹介文（300〜500字で経歴・得意分野を記載） スキル設定（最大10個まで） 本人確認（SMS認証） ポートフォリオ設定（サンプル作品があれば登録） ランサーズの初期設定チェックリスト：\nプロフィール写真・カバー画像 自己紹介文（ランサーズは特にプロフィールの充実度が評価される） スキル・カテゴリ設定 認定ランサー取得の要件確認（評価・実績を積むことで取得可能） 本人確認書類のアップロード（ランサーズでは早期に完了推奨） よくある失敗 失敗例1: 登録してすぐに諦める\nどちらのプラットフォームも最初の2〜4週間は受注ゼロが普通です。「1ヶ月で5件実績を作る」という目標を設定して継続しましょう。\n失敗例2: プロフィールを空白のまま提案する\nプロフィールが未完成な状態で提案しても採用率は1〜3%程度です。30分かけてプロフィールを充実させてから提案を開始しましょう。\n失敗例3: プラットフォーム外の取引に応じる\n「LINEで連絡を」「直接振り込みにしよう」という誘いは詐欺・トラブルの元です。必ずプラットフォーム内でやり取りを完結させましょう。\nよくある質問（FAQ） Q1. クラウドワークスとランサーズは同時に登録できますか？\nA. はい、両方に同時登録することは問題ありません。多くのフリーランスが両方を活用しています。\nQ2. どちらの方が詐欺案件が少ないですか？\nA. どちらも上場企業が運営しており、基本的なセキュリティ体制は整っています。ただし、どちらにも悪質クライアントはいます。「高額報酬・簡単作業」「個人情報を先に要求」などの案件には注意が必要です。\nQ3. エンジニアはどちらが稼げますか？\nA. ランサーズが有利です。ランサーズには「ランサーズエンタープライズ」「ランサーズエージェント」など高単価エンジニア向けのサービスも充実しています。\nQ4. ライターはどちらが案件が多いですか？\nA. クラウドワークスの方がWebライティング案件数は多いです。ただし競合も多いため、ランサーズも並行して使うことで案件の選択肢が広がります。\nQ5. 審査はありますか？\nA. どちらも登録審査は基本的にありません（本人確認書類の提出は必要）。ランサーズの「認定ランサー」は実績・評価に基づいた認定制度で、審査ではなく活動実績で取得するものです。\nQ6. どちらのサポートが充実していますか？\nA. クラウドワークスの方がFAQ・サポート体制が充実しており、初心者が困ったときに情報を探しやすい環境です。\nQ7. 海外クライアントの案件はありますか？\nA. どちらも基本的に日本語案件が中心です。英語案件を探すなら、UpworkやFiverr（海外プラットフォーム）を検討してください。\n確定申告の準備には**freee会計（無料トライアルあり） **が便利です。収入・経費の記録から申告書作成までスマホでも完結します。\nまとめ・行動の呼びかけ 結論：初心者はクラウドワークスから始めて、月収3万円を達成したらランサーズも登録する——これが最も効率的な戦略です。両サービスの特徴を理解して使い分けることで、案件の選択肢が2倍以上に広がり、収入の安定化にも繋がります。今日まず1つのプラットフォームに登録し、プロフィールを完成させることから始めてみましょう。\n副業の始め方をもっと詳しく知りたい方は「副業完全ガイド2026年版 」をチェック！ランサーズ・クラウドワークス活用法から確定申告まで網羅した完全版です（¥1,280）。詳しくはこちら フリーランスとして独立を考えている方は「フリーランス完全スタートキット 」がおすすめです。開業届・税務・単価交渉まで独立に必要なすべてが詰まっています（¥980）。\n※本記事は情報提供を目的としています。税務に関する判断は税理士等の専門家にご相談ください。\n※本記事にはアフィリエイト広告が含まれています。\n関連ツール 副業収入の税金を計算 → 副業税金計算ツール 手取り額をシミュレーション → 手取り計算ツール フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 ","permalink":"https://productivity-works.com/ja/posts/%E3%83%A9%E3%83%B3%E3%82%B5%E3%83%BC%E3%82%BA-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9-%E6%AF%94%E8%BC%83/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"ランサーズ-クラウドワークス-比較完全ガイド2026年最新版\"\u003eランサーズ クラウドワークス 比較完全ガイド【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「ランサーズとクラウドワークス、どっちに登録すればいいの？」——副業を始めようとした人が必ず直面するこの疑問に、2026年最新データをもとに徹底的に答えます。\u003c/p\u003e\n\u003cp\u003e結論から言うと、\u003cstrong\u003e初心者はクラウドワークスから始めて、慣れてきたらランサーズも併用するのがベスト\u003c/strong\u003eです。ただし、ジャンルや目標によって最適な選択は異なります。この記事では両サービスを複数の観点から詳しく比較し、あなたに合った選択ができるよう解説します。\u003c/p\u003e\n\u003cp\u003eこの記事でわかること：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eランサーズとクラウドワークスの基本スペック比較\u003c/li\u003e\n\u003cli\u003e手数料・報酬の違い\u003c/li\u003e\n\u003cli\u003e得意ジャンル・案件の傾向\u003c/li\u003e\n\u003cli\u003e登録方法と初期設定の違い\u003c/li\u003e\n\u003cli\u003eどちらを選ぶべきか（タイプ別推奨）\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"ランサーズクラウドワークスとは基本を理解する\"\u003eランサーズ・クラウドワークスとは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eクラウドワークス\u003c/strong\u003eは2011年設立、東証グロース上場のクラウドソーシングプラットフォームです。登録者数は2026年時点で約550万人、案件数は国内最多クラスです。幅広いジャンルに対応し、初心者向けのタスク案件（アンケート・データ入力）が豊富な点が特徴です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eランサーズ\u003c/strong\u003eは2008年設立と国内最古参のクラウドソーシングプラットフォームです。登録者数は約100万人とクラウドワークスより少ないですが、登録クライアントのリピート率が高く、比較的高単価の案件が多い傾向があります。2022年にTBM（ランサーズとBPO大手の合弁）を設立するなど、企業DX支援に力を入れています。\u003c/p\u003e\n\u003ch3 id=\"メリットデメリット基本比較\"\u003eメリット・デメリット（基本比較）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eクラウドワークスのメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e案件数が圧倒的に多い\u003c/li\u003e\n\u003cli\u003e初心者向け案件（タスク形式）が充実\u003c/li\u003e\n\u003cli\u003eUIが直感的で使いやすい\u003c/li\u003e\n\u003cli\u003e仮払い制度で未払いリスクがない\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eクラウドワークスのデメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e競合が多いため提案が埋もれやすい\u003c/li\u003e\n\u003cli\u003eタスク案件の単価が低め\u003c/li\u003e\n\u003cli\u003e手数料が最初は20%と高い\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eランサーズのメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e高単価・長期案件が多い傾向\u003c/li\u003e\n\u003cli\u003e「認定ランサー」制度でステータスが上がると優遇される\u003c/li\u003e\n\u003cli\u003e企業クライアントの割合が高い\u003c/li\u003e\n\u003cli\u003eランサーズプロ（エージェント利用）が使える\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eランサーズのデメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e案件数がクラウドワークスより少ない\u003c/li\u003e\n\u003cli\u003eUIが若干複雑\u003c/li\u003e\n\u003cli\u003eタスク案件が少ない\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"ランサーズ-vs-クラウドワークス-徹底比較表\"\u003eランサーズ vs クラウドワークス 徹底比較表\u003c/h2\u003e\n\u003ch3 id=\"基本スペック比較\"\u003e基本スペック比較\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e比較項目\u003c/th\u003e\n          \u003cth\u003eクラウドワークス\u003c/th\u003e\n          \u003cth\u003eランサーズ\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e設立年\u003c/td\u003e\n          \u003ctd\u003e2011年\u003c/td\u003e\n          \u003ctd\u003e2008年\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e上場\u003c/td\u003e\n          \u003ctd\u003e東証グロース\u003c/td\u003e\n          \u003ctd\u003e東証グロース\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e登録者数（2026年推計）\u003c/td\u003e\n          \u003ctd\u003e約550万人\u003c/td\u003e\n          \u003ctd\u003e約110万人\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e案件数\u003c/td\u003e\n          \u003ctd\u003e多い（国内最多クラス）\u003c/td\u003e\n          \u003ctd\u003e中程度\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e初心者向け案件\u003c/td\u003e\n          \u003ctd\u003e★★★★★\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e高単価案件\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eUIの使いやすさ\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eスマホアプリ\u003c/td\u003e\n          \u003ctd\u003eあり\u003c/td\u003e\n          \u003ctd\u003eあり\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"手数料比較\"\u003e手数料比較\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e累計報酬額\u003c/th\u003e\n          \u003cth\u003eクラウドワークス\u003c/th\u003e\n          \u003cth\u003eランサーズ\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e〜10万円\u003c/td\u003e\n          \u003ctd\u003e20%\u003c/td\u003e\n          \u003ctd\u003e16.5%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e10万円〜20万円\u003c/td\u003e\n          \u003ctd\u003e20%\u003c/td\u003e\n          \u003ctd\u003e16.5%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e20万円〜100万円\u003c/td\u003e\n          \u003ctd\u003e10%\u003c/td\u003e\n          \u003ctd\u003e11%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e100万円超\u003c/td\u003e\n          \u003ctd\u003e5%\u003c/td\u003e\n          \u003ctd\u003e5.5%\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e手数料の比較ポイント\u003c/strong\u003e：\u003c/p\u003e","title":"ランサーズ クラウドワークス比較完全ガイド2026年版"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n副業 おすすめ 在宅 スキルなし完全ガイド【2026年最新版】 「特別なスキルも資格もないけど、在宅で副業したい」——このような悩みを持つ方は、実はとても多いです。\n安心してください。2026年現在、スキルなしでもスマートフォン1台で始められる在宅副業は数多く存在します。大切なのは「どの副業が自分のライフスタイルに合っているか」を正しく見極めることです。この記事では、実際に初心者が稼げているおすすめ副業を具体的な月収目安・難易度・特徴とともに紹介します。\nこの記事でわかること：\nスキルなしで始められる在宅副業おすすめ15選 各副業の月収目安・難易度・向いている人 スマホだけで完結する副業 vs パソコンが必要な副業 副業詐欺の見分け方・安全な副業の選び方 月1万円・月5万円に到達するロードマップ スキルなし在宅副業とは？基本を理解する 定義・仕組み スキルなし在宅副業とは、専門的な知識・技術・資格がなくても自宅（またはカフェなど好きな場所）から始められる収入活動を指します。\n2026年現在、AIの普及により「AIツールを使えば誰でもできる作業」が急増しています。また、企業のDX推進に伴い、データ整理・画像タグ付け・テスト作業などのクラウドソーシング案件も増えています。\n副業を選ぶ際の重要な軸は以下の3つです：\n時間の柔軟性：決まった時間に縛られるか、隙間時間でできるか 収益性：時給換算でいくらになるか（最低800円以上が目安） 成長性：続けることでスキルが身につき単価が上がるか メリット・デメリット スキルなし在宅副業のメリット\n通勤不要・交通費ゼロ 子育て・介護と両立しやすい 自分のペースで働ける 初期費用がほぼかからない やりながらスキルが身につく スキルなし在宅副業のデメリット\n単価が低いものが多い（最初は時給300〜600円程度になることも） 収入が安定しない時期がある 孤独感・モチベーション維持が難しい 税務処理（確定申告）が必要になる場合がある スキルなし在宅副業 おすすめ15選 カテゴリー1：スマホだけでできる副業 副業名 月収目安 難易度 特徴 アンケートモニター 500〜3,000円 ★☆☆☆☆ 隙間時間に最適。収入は少なめ ポイントサイト 1,000〜5,000円 ★☆☆☆☆ 買い物・サービス利用でポイント獲得 フリマアプリ（メルカリ） 1万〜5万円 ★★☆☆☆ 不用品売却から始められる スマホ写真販売 1,000〜3万円 ★★☆☆☆ 趣味の写真をストックフォトで販売 Instagramアフィリエイト 0〜10万円 ★★★☆☆ 成果が出るまで3〜6ヶ月かかる アンケートモニターは最も手軽ですが収入も少なめです。本格的に稼ぐなら他の副業と組み合わせることをおすすめします。マクロミル・楽天インサイト・infoQなどが大手で安全です。\nメルカリ転売は最初に自宅の不用品を出品することからスタートできます。慣れてきたらブックオフやセカンドストリートで仕入れを行う「せどり」に発展させることも可能です。\nカテゴリー2：パソコンで稼ぐ副業（スキル習得型） 副業名 月収目安 難易度 特徴 データ入力 5,000〜3万円 ★★☆☆☆ タイピング速度で稼ぎが変わる 文字起こし 1万〜5万円 ★★☆☆☆ 音声・動画を文字化する作業 Webライティング 3万〜20万円 ★★★☆☆ 書きながらスキルが上がる SNSアシスタント 2万〜10万円 ★★★☆☆ 企業のSNS運用をサポート ECサイト商品登録 1万〜5万円 ★★☆☆☆ 商品情報入力・画像加工 AIプロンプト作成 2万〜15万円 ★★★☆☆ 2026年急増中の新ジャンル Webライティングは最初の単価は低め（1文字0.5〜1円）ですが、継続することで専門性が上がり、1文字3〜5円以上の高単価ライターに成長できます。スキルなしで始められる副業の中では最も将来性があります。\nAIプロンプト作成は2026年に急増しているジャンルです。ChatGPT・Midjourney・Claudeなどを使いこなせるようになると、企業のAI活用支援として月10万円以上の案件も受注できます。\n関連記事: AI副業で稼ぐ方法2026年版 カテゴリー3：時間を売る副業 副業名 月収目安 難易度 特徴 オンラインアシスタント 3万〜15万円 ★★★☆☆ スケジュール管理・メール対応 ライブコマース配信 0〜20万円 ★★★☆☆ TikTokやShopifyでライブ販売 オンライン家庭教師 2万〜10万円 ★★☆☆☆ 得意科目を教えるだけでOK テイスター・覆面調査 3,000〜3万円 ★★☆☆☆ 商品レビュー・店舗調査 オンライン家庭教師は大学生・社会人に人気です。自分が得意な科目（英語・数学・プログラミング等）を教えるだけで時給1,500〜3,000円が相場です。manabo・家庭教師のあすなろ・スタディプラスなどのプラットフォームを活用できます。\n副業別 月収シミュレーション 月1万円を目指すルート（隙間時間活用） アンケートモニター：月2,000円 フリマアプリ（不用品）：月5,000円 データ入力（週5時間）：月3,000円 合計：月10,000円 月5万円を目指すルート（週10〜15時間） Webライティング（記事10本・平均3,000字・1文字1.5円）：月45,000円 SNS投稿作成（1クライアント）：月10,000円 合計：月55,000円 月10万円を目指すルート（週20〜25時間） 専門特化ライター（医療・IT・金融）：月70,000円 AIプロンプト制作・AI活用コンサル：月30,000円 合計：月100,000円 選び方・注意点 チェックポイント スキルなし在宅副業を選ぶ際の5つの確認ポイント：\n無料で始められるか：初期費用が必要な副業は慎重に検討 プラットフォームの信頼性：上場企業・有名サービスかどうかを確認 支払いサイクル：月末締め翌月払いが標準。遅すぎる場合は注意 口コミ・評判：TwitterやGoogle検索で「○○ 評判」「○○ 詐欺」を検索 時給換算：作業時間を記録して実際の時給を計算する習慣をつける よくある失敗 失敗例1: 高額情報商材を購入してしまう\n「スキルなしで月50万円稼げる」「特別な方法を教えます」と謳う高額塾・情報商材は危険信号です。正当な副業は基本的に無料または低コストで始められます。30万円以上の塾・スクールへの入会は慎重に判断しましょう。\n失敗例2: 一つの副業に絞れず収入がゼロ\n「何から始めればいいかわからない」と複数の副業を同時に試して、どれも中途半端になるパターンです。まず1つの副業で月1万円達成することを目標にしましょう。\n失敗例3: 副業の収入に税務対応しない\n年間の副業所得が20万円を超えると確定申告が必要です。最初から収入の記録をつける習慣をつけましょう。\n失敗例4: 単価が上がらないまま続ける\nデータ入力・アンケートは単価が上がりません。最終的にWebライティング・デザイン・プログラミングなどスキル型の副業への移行を見据えましょう。\nよくある質問（FAQ） Q1. スマホだけで月5万円稼げますか？\nA. スマホだけで月5万円を安定して稼ぐのは難しいですが、不可能ではありません。メルカリ物販・ライブコマース・SNSアフィリエイトを組み合わせることで実現する方もいます。ただし、効率を上げるためにはパソコンを用意することをおすすめします。\nQ2. 主婦（主夫）でもできる在宅副業はありますか？\nA. はい、多数あります。子どもの昼寝・就寝後に作業できるWebライティング・データ入力・文字起こしが特に人気です。週5時間の作業で月1〜3万円を目指しましょう。\nQ3. 副業は確定申告が必要ですか？\nA. 副業所得（収入 - 経費）が年間20万円を超える場合、確定申告が必要です。20万円以下でも住民税の申告は必要な場合があります。\nQ4. 副業で稼いだお金を本業の会社にバレないようにできますか？\nA. 確定申告時に住民税の徴収方法を「普通徴収（自分で納付）」にすることで、副業収入分の住民税が給与天引きにならないようにできます。ただし完全に発覚しない保証はありません。\nQ5. どの副業が最も早く稼げますか？\nA. 最も速く収入が得られるのはアンケートモニター・メルカリ不用品販売・データ入力です。初日から翌日中に収入を得ることが可能です。\nQ6. AIを使えば稼ぎやすくなりますか？\nA. はい、大きく変わります。ChatGPTを活用すると、Webライティングの作業時間を半分以下に短縮でき、時給換算が倍になることもあります。ただしAIの出力をそのまま納品するのは品質問題があるため、必ず人間による編集・確認が必要です。\n副業収入が年20万円を超えたら確定申告が必要です。**freee会計（無料トライアルあり） **なら、初心者でも簡単に申告書を作成できます。\nまとめ・行動の呼びかけ スキルなしでも、在宅副業は今日から始められます。最初の目標は「月1万円」——これを達成することで自信がつき、次のステップに自然と進めます。アンケートやデータ入力で手軽にスタートし、Webライティングへ移行することで、半年後には月5万円も十分射程圏内です。まず今日、クラウドワークスかランサーズに登録してみましょう。\n副業の始め方をもっと詳しく知りたい方は「副業完全ガイド2026年版 」をチェック！スキルなし副業から高単価フリーランスへのステップアップ法まで網羅した完全版です（¥1,280）。詳しくはこちら フリーランスとして独立を考えている方は「フリーランス完全スタートキット 」がおすすめです。開業届・確定申告・単価交渉まで独立に必要なすべてが揃っています（¥980）。\n※本記事は情報提供を目的としています。税務に関する判断は税理士等の専門家にご相談ください。\n※本記事にはアフィリエイト広告が含まれています。\n関連ツール 副業収入の税金を計算 → 副業税金計算ツール 手取り額をシミュレーション → 手取り計算ツール フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 ","permalink":"https://productivity-works.com/ja/posts/%E5%89%AF%E6%A5%AD-%E3%81%8A%E3%81%99%E3%81%99%E3%82%81-%E5%9C%A8%E5%AE%85-%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AA%E3%81%97/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"副業-おすすめ-在宅-スキルなし完全ガイド2026年最新版\"\u003e副業 おすすめ 在宅 スキルなし完全ガイド【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「特別なスキルも資格もないけど、在宅で副業したい」——このような悩みを持つ方は、実はとても多いです。\u003c/p\u003e\n\u003cp\u003e安心してください。2026年現在、スキルなしでもスマートフォン1台で始められる在宅副業は数多く存在します。大切なのは「どの副業が自分のライフスタイルに合っているか」を正しく見極めることです。この記事では、実際に初心者が稼げているおすすめ副業を具体的な月収目安・難易度・特徴とともに紹介します。\u003c/p\u003e\n\u003cp\u003eこの記事でわかること：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eスキルなしで始められる在宅副業おすすめ15選\u003c/li\u003e\n\u003cli\u003e各副業の月収目安・難易度・向いている人\u003c/li\u003e\n\u003cli\u003eスマホだけで完結する副業 vs パソコンが必要な副業\u003c/li\u003e\n\u003cli\u003e副業詐欺の見分け方・安全な副業の選び方\u003c/li\u003e\n\u003cli\u003e月1万円・月5万円に到達するロードマップ\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"スキルなし在宅副業とは基本を理解する\"\u003eスキルなし在宅副業とは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003eスキルなし在宅副業とは、専門的な知識・技術・資格がなくても自宅（またはカフェなど好きな場所）から始められる収入活動を指します。\u003c/p\u003e\n\u003cp\u003e2026年現在、AIの普及により「AIツールを使えば誰でもできる作業」が急増しています。また、企業のDX推進に伴い、データ整理・画像タグ付け・テスト作業などのクラウドソーシング案件も増えています。\u003c/p\u003e\n\u003cp\u003e副業を選ぶ際の重要な軸は以下の3つです：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e時間の柔軟性\u003c/strong\u003e：決まった時間に縛られるか、隙間時間でできるか\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e収益性\u003c/strong\u003e：時給換算でいくらになるか（最低800円以上が目安）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e成長性\u003c/strong\u003e：続けることでスキルが身につき単価が上がるか\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eスキルなし在宅副業のメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e通勤不要・交通費ゼロ\u003c/li\u003e\n\u003cli\u003e子育て・介護と両立しやすい\u003c/li\u003e\n\u003cli\u003e自分のペースで働ける\u003c/li\u003e\n\u003cli\u003e初期費用がほぼかからない\u003c/li\u003e\n\u003cli\u003eやりながらスキルが身につく\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eスキルなし在宅副業のデメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e単価が低いものが多い（最初は時給300〜600円程度になることも）\u003c/li\u003e\n\u003cli\u003e収入が安定しない時期がある\u003c/li\u003e\n\u003cli\u003e孤独感・モチベーション維持が難しい\u003c/li\u003e\n\u003cli\u003e税務処理（確定申告）が必要になる場合がある\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"スキルなし在宅副業-おすすめ15選\"\u003eスキルなし在宅副業 おすすめ15選\u003c/h2\u003e\n\u003ch3 id=\"カテゴリー1スマホだけでできる副業\"\u003eカテゴリー1：スマホだけでできる副業\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e副業名\u003c/th\u003e\n          \u003cth\u003e月収目安\u003c/th\u003e\n          \u003cth\u003e難易度\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eアンケートモニター\u003c/td\u003e\n          \u003ctd\u003e500〜3,000円\u003c/td\u003e\n          \u003ctd\u003e★☆☆☆☆\u003c/td\u003e\n          \u003ctd\u003e隙間時間に最適。収入は少なめ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eポイントサイト\u003c/td\u003e\n          \u003ctd\u003e1,000〜5,000円\u003c/td\u003e\n          \u003ctd\u003e★☆☆☆☆\u003c/td\u003e\n          \u003ctd\u003e買い物・サービス利用でポイント獲得\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eフリマアプリ（メルカリ）\u003c/td\u003e\n          \u003ctd\u003e1万〜5万円\u003c/td\u003e\n          \u003ctd\u003e★★☆☆☆\u003c/td\u003e\n          \u003ctd\u003e不用品売却から始められる\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eスマホ写真販売\u003c/td\u003e\n          \u003ctd\u003e1,000〜3万円\u003c/td\u003e\n          \u003ctd\u003e★★☆☆☆\u003c/td\u003e\n          \u003ctd\u003e趣味の写真をストックフォトで販売\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eInstagramアフィリエイト\u003c/td\u003e\n          \u003ctd\u003e0〜10万円\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n          \u003ctd\u003e成果が出るまで3〜6ヶ月かかる\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eアンケートモニター\u003c/strong\u003eは最も手軽ですが収入も少なめです。本格的に稼ぐなら他の副業と組み合わせることをおすすめします。マクロミル・楽天インサイト・infoQなどが大手で安全です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eメルカリ転売\u003c/strong\u003eは最初に自宅の不用品を出品することからスタートできます。慣れてきたらブックオフやセカンドストリートで仕入れを行う「せどり」に発展させることも可能です。\u003c/p\u003e\n\u003ch3 id=\"カテゴリー2パソコンで稼ぐ副業スキル習得型\"\u003eカテゴリー2：パソコンで稼ぐ副業（スキル習得型）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e副業名\u003c/th\u003e\n          \u003cth\u003e月収目安\u003c/th\u003e\n          \u003cth\u003e難易度\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eデータ入力\u003c/td\u003e\n          \u003ctd\u003e5,000〜3万円\u003c/td\u003e\n          \u003ctd\u003e★★☆☆☆\u003c/td\u003e\n          \u003ctd\u003eタイピング速度で稼ぎが変わる\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e文字起こし\u003c/td\u003e\n          \u003ctd\u003e1万〜5万円\u003c/td\u003e\n          \u003ctd\u003e★★☆☆☆\u003c/td\u003e\n          \u003ctd\u003e音声・動画を文字化する作業\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eWebライティング\u003c/td\u003e\n          \u003ctd\u003e3万〜20万円\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n          \u003ctd\u003e書きながらスキルが上がる\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSNSアシスタント\u003c/td\u003e\n          \u003ctd\u003e2万〜10万円\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n          \u003ctd\u003e企業のSNS運用をサポート\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eECサイト商品登録\u003c/td\u003e\n          \u003ctd\u003e1万〜5万円\u003c/td\u003e\n          \u003ctd\u003e★★☆☆☆\u003c/td\u003e\n          \u003ctd\u003e商品情報入力・画像加工\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAIプロンプト作成\u003c/td\u003e\n          \u003ctd\u003e2万〜15万円\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n          \u003ctd\u003e2026年急増中の新ジャンル\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eWebライティング\u003c/strong\u003eは最初の単価は低め（1文字0.5〜1円）ですが、継続することで専門性が上がり、1文字3〜5円以上の高単価ライターに成長できます。スキルなしで始められる副業の中では最も将来性があります。\u003c/p\u003e","title":"副業おすすめ在宅スキルなし完全ガイド2026年版"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n副業 バレない 方法 住民税完全ガイド【2026年最新版】 「副業を始めたいけど、会社にバレたらどうしよう」——この不安から副業を踏み出せない方は非常に多いです。\n2026年現在、政府の副業推進政策により副業解禁企業は増えていますが、依然として副業禁止・事前申告制の企業も少なくありません。本記事では、副業が会社にバレる仕組みと対策を正確に解説し、リスクを最小化しながら副業を継続するための方法をお伝えします。\n重要な前提として: 本記事の情報は適切な税務申告を前提としています。脱税を推奨するものではありません。適切に申告した上で、住民税の徴収方法を変更することが合法的なプライバシー保護の手段です。\nこの記事でわかること：\n副業が会社にバレる3つのルートと仕組み 住民税の普通徴収への切り替え方法と手順 バレやすいNG行動と対策 就業規則違反のリスクと対処法 万が一バレた場合にやるべきこと 副業が会社にバレる仕組みとは？基本を理解する 定義・仕組み 副業が会社にバレる主なルートは以下の3つです：\nルート1：住民税の増額（最多）\n会社員の住民税は通常「特別徴収」（毎月の給与から天引き）で支払われます。住民税額は前年の所得（給与 + 副業収入）をもとに計算されるため、副業収入がある年の住民税は通常より高くなります。\nこの増額を経理担当者・人事担当者が気づいた場合に発覚するのが最も多いパターンです。\n通常の住民税（給与のみ）：月2万円 副業収入50万円がある場合：月2万5千円（約25%増） → 経理担当者が気づく可能性あり ルート2：SNS・ブログでの発信\n実名・顔出しで副業内容をSNSに投稿し、会社の同僚・上司に見られるケースです。特にInstagram・X（旧Twitter）・LinkedInでの発信は注意が必要です。\nルート3：同僚・クライアントへの口外\n副業仲間や副業先のクライアントに本業の会社名を話し、それが巡り巡って発覚するケースです。\nメリット・デメリット（対策を講じることの評価） 対策を講じることのメリット\nプライバシーの保護（適切な手続きの範囲内で） 職場での不要なトラブルを避けられる 副業に集中できる環境を維持できる 対策の限界（知っておくべきこと）\n完全にバレない保証はない 就業規則違反の副業は、バレた場合に懲戒処分のリスクがある 脱税は絶対にNG（住民税の申告・納付は義務） 住民税の普通徴収への切り替え方法 特別徴収と普通徴収の違い 項目 特別徴収 普通徴収 納付方法 給与から天引き（会社経由） 自分で年4回に分けて納付 会社への通知 納税額が会社に通知される 自分宛てに納付書が届く 副業の発覚リスク 高い（増額分が目立つ） 低い（給与分のみ天引き） 手間 なし（自動） 自分で納付書を使って支払い 確定申告での切り替え手順 副業収入が年間20万円を超えて確定申告が必要な場合、確定申告書の中で住民税の徴収方法を選択できます。\n手順：\n確定申告書（第二表）を開く 「住民税に関する事項」欄を探す 「給与、公的年金等以外の所得に係る住民税の徴収方法の選択」の項目で**「自分で納付」**に〇をつける 確定申告書を提出する これにより、副業分の住民税は自宅に届く納付書で自分で納付することになり、給与からの天引き額には副業分が含まれなくなります。\n重要な注意点：\n「給与所得」部分の住民税は引き続き給与天引き（特別徴収）になります 副業分のみを普通徴収にできるかどうかは自治体によって異なります 一部の自治体では副業分でも特別徴収にする運用をしている場合があります 確定申告が不要な場合（副業20万円以下）の手続き 副業所得が年間20万円以下で確定申告が不要な場合でも、住民税の申告は必要です。この場合は市区町村役所の住民税申告書で、徴収方法を「普通徴収」として申告します。\n関連記事: 副業確定申告 20万以下のやり方ガイド バレやすいNG行動と具体的な対策 絶対に避けるべきNG行動 NG1: 実名でSNSに副業内容を投稿する\n対策：SNSでは匿名アカウントを使用するか、会社名・業界・部署名がわからないように配慮する\nNG2: 副業の収入を申告せずに隠す\n対策：これは脱税です。正しく申告した上で普通徴収に変更することが合法的な対策です\nNG3: 会社のPCや設備を副業に使用する\n対策：副業には必ず個人のPCを使用する。会社のVPN・メールを副業で使わない\nNG4: 業務時間中に副業の作業をする\n対策：副業は完全に業務時間外に行う。会社のWi-Fiを副業に使うのも避ける\nNG5: 副業先で本業の会社名を伝える\n対策：副業先には「会社員として働いています」とだけ伝え、会社名は不要な限り伝えない\nNG6: 同僚に副業をしていることを話す\n対策：職場での副業の話は最低限に抑える。信頼できる友人でも、職場関係者には話さない\n発覚リスク別チェックリスト リスク項目 リスク度 対策 住民税の増額 高 普通徴収への切り替え SNS実名投稿 高 匿名アカウント使用 同僚への口外 中 話さない 副業先での会社名漏洩 中 会社名を伝えない 会社のPC使用 中 個人PCを使用 業務時間中の作業 中 業務外に作業 給与以外の所得の税務申告 低（適切に申告すればOK） 正しく申告 就業規則違反のリスクと対処法 チェックポイント 副業を始める前に必ず確認すること：\n就業規則の「副業・兼業・二重就業」条項を確認 競業避止義務の範囲を確認（同業・競合他社への就業禁止条項） 許可制の場合は申請する（無断での副業は規則違反になる） 守秘義務・秘密保持の範囲を確認 就業規則が副業禁止の場合の選択肢 選択肢1: 会社に副業の許可申請をする\n2018年の厚生労働省ガイドライン改定後、正当な理由のない副業禁止は見直しの動きがあります。「副業・兼業申請書」を提出し、会社の許可を得ることが最も安全な方法です。\n選択肢2: 副業の影響が会社に及ばない範囲に限定する\n情報漏洩・競業・本業への支障がなければ、就業規則違反の程度が軽くなる場合があります。\n選択肢3: 副業に理解のある会社に転職を検討する\n副業解禁企業は増加中（2026年時点で大手企業の約60%以上）。転職を機に副業フレンドリーな環境に移ることも選択肢の一つです。\n関連記事: 副業の始め方 初心者向け完全ガイド2026 よくある失敗 失敗例1: 住民税の普通徴収に変更しなかった\n確定申告書の該当欄に記入を忘れるだけで、副業収入分も給与天引きになります。確定申告時に必ず確認しましょう。\n失敗例2: 副業収入を全く申告しなかった\n税務署への無申告は後から発覚した場合に加算税・延滞税が課されます。また、金融機関・クラウドソーシングから税務署への支払報告により発覚するリスクがあります。\n失敗例3: 副業先の請求書・名刺に本業の連絡先を記載する\n副業の請求書やプロフィールには本業の電話番号・メールアドレスを絶対に使わないようにしましょう。\nよくある質問（FAQ） Q1. 住民税を普通徴収にすれば絶対にバレませんか？\nA. バレる可能性を大幅に下げることはできますが、「絶対にバレない」保証はありません。自治体によっては副業分も特別徴収にする運用のところもあります。また、SNS投稿や口コミなど他のルートでの発覚も考えられます。\nQ2. 副業禁止の会社で副業をしてバレた場合、どうなりますか？\nA. 就業規則違反として懲戒処分（戒告・減給・出勤停止・懲戒解雇）の対象になる可能性があります。ただし、副業が本業に支障を与えていない場合、解雇は無効と判断されたケースも多くあります（最高裁判例）。\nQ3. 副業収入が少額（数千円〜数万円）でもバレますか？\nA. 住民税の増額が少額であれば、経理担当者が気づかない可能性も高いです。ただし、住民税の申告義務は金額に関わらず存在します。\nQ4. メルカリやポイントサイトの収入も住民税に影響しますか？\nA. 生活用品の不用品販売（メルカリ等）は原則非課税です。ポイントサイトの収入は「雑所得」として住民税の対象になります。\nQ5. アルバイト型の副業と業務委託型の副業でバレやすさは違いますか？\nA. アルバイト型（雇用契約）の場合、副業先でも社会保険に加入する義務が生じることがあり（2022年改正）、本業の会社に加入状況の変化として伝わるリスクがあります。業務委託型の方がバレにくいといえます。\nQ6. 確定申告をe-Taxで行った場合も、普通徴収の選択はできますか？\nA. はい、e-Taxでの申告でも確定申告書第二表の「住民税に関する事項」欄で普通徴収を選択できます。\nQ7. 副業を会社に正直に話した方がいいケースはありますか？\nA. 副業解禁・許可制の会社であれば、正直に申告することで精神的な安心感が得られます。また、副業スキルが本業に活かせる場合、プラスに評価されることもあります。\n副業の確定申告を正確に行うには、会計ソフトの活用が有効です。**freee会計（無料トライアルあり） **なら、収入・経費の記録から確定申告書の作成まで一貫して対応できます。\nまとめ・行動の呼びかけ 副業が会社にバレる最大のリスクは「住民税の増額」です。確定申告時に普通徴収を選択することで、このリスクを大幅に低減できます。ただし、完全に隠すことは難しく、就業規則を無断違反している場合はリスクがあることも忘れないでください。副業解禁の流れが加速する2026年、まずは就業規則を確認し、可能であれば会社に正直に申告することも選択肢の一つです。\n副業の始め方をもっと詳しく知りたい方は「副業完全ガイド2026年版 」をチェック！確定申告・住民税対策・バレないための実践的なノウハウが凝縮されています（¥1,280）。詳しくはこちら フリーランスとして独立を考えている方は「フリーランス完全スタートキット 」がおすすめです。開業届・税務・単価交渉まで独立に必要なすべてが詰まっています（¥980）。\n※本記事は情報提供を目的としています。税務・法律に関する判断は税理士・社会保険労務士等の専門家にご相談ください。脱税は違法です。適切な税務申告を行った上で合法的な手続きをご利用ください。\n※本記事にはアフィリエイト広告が含まれています。\n関連ツール 副業収入の税金・住民税増加額を計算 → 副業税金計算ツール 手取り額の変化をシミュレーション → 手取り計算ツール 年収から所得税・住民税を計算 → 所得税シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 ","permalink":"https://productivity-works.com/ja/posts/%E5%89%AF%E6%A5%AD-%E3%83%90%E3%83%AC%E3%81%AA%E3%81%84-%E6%96%B9%E6%B3%95-%E4%BD%8F%E6%B0%91%E7%A8%8E/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"副業-バレない-方法-住民税完全ガイド2026年最新版\"\u003e副業 バレない 方法 住民税完全ガイド【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「副業を始めたいけど、会社にバレたらどうしよう」——この不安から副業を踏み出せない方は非常に多いです。\u003c/p\u003e\n\u003cp\u003e2026年現在、政府の副業推進政策により副業解禁企業は増えていますが、依然として副業禁止・事前申告制の企業も少なくありません。本記事では、副業が会社にバレる仕組みと対策を正確に解説し、リスクを最小化しながら副業を継続するための方法をお伝えします。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e重要な前提として\u003c/strong\u003e: 本記事の情報は適切な税務申告を前提としています。脱税を推奨するものではありません。適切に申告した上で、住民税の徴収方法を変更することが合法的なプライバシー保護の手段です。\u003c/p\u003e\n\u003cp\u003eこの記事でわかること：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e副業が会社にバレる3つのルートと仕組み\u003c/li\u003e\n\u003cli\u003e住民税の普通徴収への切り替え方法と手順\u003c/li\u003e\n\u003cli\u003eバレやすいNG行動と対策\u003c/li\u003e\n\u003cli\u003e就業規則違反のリスクと対処法\u003c/li\u003e\n\u003cli\u003e万が一バレた場合にやるべきこと\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"副業が会社にバレる仕組みとは基本を理解する\"\u003e副業が会社にバレる仕組みとは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003e副業が会社にバレる主なルートは以下の3つです：\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eルート1：住民税の増額（最多）\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e会社員の住民税は通常「特別徴収」（毎月の給与から天引き）で支払われます。住民税額は前年の所得（給与 + 副業収入）をもとに計算されるため、副業収入がある年の住民税は通常より高くなります。\u003c/p\u003e\n\u003cp\u003eこの増額を経理担当者・人事担当者が気づいた場合に発覚するのが最も多いパターンです。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e通常の住民税（給与のみ）：月2万円\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e副業収入50万円がある場合：月2万5千円（約25%増）\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e→ 経理担当者が気づく可能性あり\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003eルート2：SNS・ブログでの発信\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e実名・顔出しで副業内容をSNSに投稿し、会社の同僚・上司に見られるケースです。特にInstagram・X（旧Twitter）・LinkedInでの発信は注意が必要です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eルート3：同僚・クライアントへの口外\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e副業仲間や副業先のクライアントに本業の会社名を話し、それが巡り巡って発覚するケースです。\u003c/p\u003e\n\u003ch3 id=\"メリットデメリット対策を講じることの評価\"\u003eメリット・デメリット（対策を講じることの評価）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e対策を講じることのメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eプライバシーの保護（適切な手続きの範囲内で）\u003c/li\u003e\n\u003cli\u003e職場での不要なトラブルを避けられる\u003c/li\u003e\n\u003cli\u003e副業に集中できる環境を維持できる\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e対策の限界（知っておくべきこと）\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e完全にバレない保証はない\u003c/li\u003e\n\u003cli\u003e就業規則違反の副業は、バレた場合に懲戒処分のリスクがある\u003c/li\u003e\n\u003cli\u003e脱税は絶対にNG（住民税の申告・納付は義務）\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"住民税の普通徴収への切り替え方法\"\u003e住民税の普通徴収への切り替え方法\u003c/h2\u003e\n\u003ch3 id=\"特別徴収と普通徴収の違い\"\u003e特別徴収と普通徴収の違い\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e特別徴収\u003c/th\u003e\n          \u003cth\u003e普通徴収\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e納付方法\u003c/td\u003e\n          \u003ctd\u003e給与から天引き（会社経由）\u003c/td\u003e\n          \u003ctd\u003e自分で年4回に分けて納付\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e会社への通知\u003c/td\u003e\n          \u003ctd\u003e納税額が会社に通知される\u003c/td\u003e\n          \u003ctd\u003e自分宛てに納付書が届く\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e副業の発覚リスク\u003c/td\u003e\n          \u003ctd\u003e高い（増額分が目立つ）\u003c/td\u003e\n          \u003ctd\u003e低い（給与分のみ天引き）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e手間\u003c/td\u003e\n          \u003ctd\u003eなし（自動）\u003c/td\u003e\n          \u003ctd\u003e自分で納付書を使って支払い\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"確定申告での切り替え手順\"\u003e確定申告での切り替え手順\u003c/h3\u003e\n\u003cp\u003e副業収入が年間20万円を超えて確定申告が必要な場合、確定申告書の中で住民税の徴収方法を選択できます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e手順\u003c/strong\u003e：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e確定申告書（第二表）を開く\u003c/li\u003e\n\u003cli\u003e「住民税に関する事項」欄を探す\u003c/li\u003e\n\u003cli\u003e「給与、公的年金等以外の所得に係る住民税の徴収方法の選択」の項目で**「自分で納付」**に〇をつける\u003c/li\u003e\n\u003cli\u003e確定申告書を提出する\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eこれにより、副業分の住民税は自宅に届く納付書で自分で納付することになり、給与からの天引き額には副業分が含まれなくなります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e重要な注意点\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e「給与所得」部分の住民税は引き続き給与天引き（特別徴収）になります\u003c/li\u003e\n\u003cli\u003e副業分のみを普通徴収にできるかどうかは\u003cstrong\u003e自治体によって異なります\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e一部の自治体では副業分でも特別徴収にする運用をしている場合があります\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"確定申告が不要な場合副業20万円以下の手続き\"\u003e確定申告が不要な場合（副業20万円以下）の手続き\u003c/h3\u003e\n\u003cp\u003e副業所得が年間20万円以下で確定申告が不要な場合でも、住民税の申告は必要です。この場合は市区町村役所の住民税申告書で、徴収方法を「普通徴収」として申告します。\u003c/p\u003e","title":"副業バレない方法と住民税対策完全ガイド2026年版"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n副業 始め方 初心者完全ガイド【2026年最新版】 「副業を始めたいけど、何から手をつければいいかわからない」——そんな悩みを抱えていませんか？\n2026年現在、物価上昇・年金不安を背景に、会社員の副業への関心はかつてないほど高まっています。厚生労働省の調査によると、副業・兼業を認める企業の割合は2025年時点で約60%を超えており、環境は整ってきています。しかし、いざ始めようとすると「どのジャンルを選ぶべきか」「税金はどうなるのか」「会社にバレないか」など、不安が尽きません。\nこの記事でわかること：\n副業の種類と自分に合ったジャンルの選び方 会社員が副業を始めるための具体的なステップ 確定申告・税金の基本ルール 副業を始める前に確認すべき注意点 初心者におすすめの副業プラットフォーム 副業とは？基本を理解する 定義・仕組み 副業とは、本業（メインの仕事）以外で収入を得る活動全般を指します。アルバイト・パートのような雇用型と、クラウドソーシングや自分でサービスを提供するフリーランス型（非雇用型）の2種類が存在します。\n近年急増しているのは非雇用型の副業です。クラウドワークスやランサーズといったクラウドソーシングサービス、ブログ・YouTube・SNSを活用したコンテンツビジネス、メルカリ・BOOTHを使ったデジタル商品販売などが代表例です。\n副業タイプ 例 特徴 雇用型 アルバイト、パート 安定収入だが会社にバレやすい クラウドソーシング クラウドワークス、ランサーズ 在宅可・スキル不要案件あり コンテンツ販売 ブログ、YouTube、BOOTH 資産型・時間の自由度が高い スキル販売 ストアカ、ココナラ 専門知識を直接マネタイズ フリーランス Webライター、デザイナー 高単価・スキルアップになる メリット・デメリット 副業のメリット\n収入増加: 月数万〜数十万円の副収入が見込める スキルアップ: 本業とは異なるスキルが身につく リスク分散: 万一の失業・リストラに備えられる 税制優遇: 経費計上で節税効果がある（青色申告なら最大65万円控除） 将来的な独立: フリーランス・起業への足がかりになる 副業のデメリット\n時間・体力の消耗: 本業に支障が出るリスク 確定申告が必要: 年間20万円超で申告義務が生じる 就業規則の確認が必要: 会社によっては副業禁止の場合がある 収入が不安定: 初期は思うように稼げないことも多い 副業の始め方 ステップガイド 副業を安全・確実にスタートさせるための5ステップを解説します。\nステップ1：就業規則を確認する まず最初に、勤務先の就業規則で副業・兼業が禁止されていないかを確認しましょう。2018年の厚生労働省「副業・兼業の促進に関するガイドライン」改定以降、副業を認める企業は増えていますが、競業避止義務（競合他社への就業禁止）は多くの会社で設けられています。\n就業規則を確認する際のチェックポイント：\n「副業・兼業」「二重就業」「競業」の項目を検索 許可制の場合は事前申告が必要 公務員は原則禁止（非常勤職員等の例外あり） ステップ2：副業ジャンルを選ぶ 自分の状況に合ったジャンルを選ぶことが成功の鍵です。以下の基準で選びましょう。\n条件 おすすめジャンル スキルなし・時間少 アンケート、データ入力、画像タグ付け 文章が得意 Webライター、ブログ、記事作成 デザインができる バナー制作、LP制作、イラスト エンジニアリングスキルあり Webアプリ開発、システム構築 教えることが好き オンライン家庭教師、ストアカ講師 物販に興味あり メルカリ転売、ハンドメイド販売 ステップ3：プラットフォームに登録する 副業ジャンルが決まったら、適切なプラットフォームに登録します。初心者にはクラウドワークスやランサーズが使いやすくおすすめです。登録は無料で、最短当日から仕事を受注できます。\n関連記事: クラウドワークスで稼ぐ方法【初心者ガイド】 ステップ4：初案件を受注する 最初の1ヶ月は「実績作り」と割り切ることが大切です。単価よりも評価・レビューを集めることを優先しましょう。実績が5〜10件たまると受注率が大幅に向上します。\n初案件獲得のコツ：\nプロフィールを丁寧に書く（顔写真、経歴、得意分野） 「初心者歓迎」「未経験OK」の案件を狙う 提案文はクライアントの課題に寄り添った内容にする 単価は市場相場の80〜90%からスタートする ステップ5：確定申告の準備をする 副業収入が年間20万円を超える場合、確定申告が必要です。開始当初から収入・経費をスプレッドシートや会計ソフト（freee、マネーフォワードクラウド）で記録しておきましょう。\n関連記事: 副業の確定申告 20万以下のやり方 副業の選び方・注意点 チェックポイント 副業を選ぶ際に必ず確認すべき5つのポイントです。\n初期投資額: 無料または1万円以内で始められるか 回収期間: 3ヶ月以内に投資回収できるか スキル習得性: 本業や将来のキャリアに役立つか 時間効率: 時給換算で最低800円以上になるか 拡張性: 将来的に収入を増やせる仕組みがあるか よくある失敗 失敗例1: 高額な教材・コンサルに課金してしまう\n「月収100万円」などの謳い文句の情報商材に高額投資するのは危険です。副業は基本的に無料または低コストで始められます。まずは公式の無料リソースや図書館の書籍で学びましょう。\n失敗例2: 本業に支障が出る\n副業に熱中するあまり、睡眠不足・集中力低下で本業のパフォーマンスが落ちるケースがあります。最初は週に5〜10時間以内と制限を設けることをおすすめします。\n失敗例3: 確定申告を忘れる\n副業収入が20万円を超えたのに確定申告をしないと、無申告加算税（最大15〜20%）が課される場合があります。会計ソフトを使って日頃から記録する習慣をつけましょう。\n失敗例4: 単価交渉をしない\n実績ができたにもかかわらず、最初の低単価のまま仕事を続けるのは機会損失です。3〜6ヶ月で単価改定の交渉をしましょう。\nよくある質問（FAQ） Q1. 副業はいくらから確定申告が必要ですか？\nA. 会社員の場合、副業の所得（収入 - 経費）が年間20万円を超えると確定申告が必要です。20万円以下でも住民税の申告は必要な場合があります。\nQ2. 副業は会社にバレますか？\nA. 住民税の金額が通常より高くなることで発覚するケースが最多です。確定申告の際に「住民税の徴収方法を普通徴収（自分で納付）」を選択することで、会社への通知を避けられる場合があります。\nQ3. 副業を始めるのに資格は必要ですか？\nA. ほとんどの副業は資格不要で始められます。ただし、医療・法律・税務関連のアドバイスには資格が必要な場合があります。\nQ4. 副業の収入はいつ頃から入りますか？\nA. クラウドソーシングの場合、初受注から支払いまで通常2〜4週間かかります。最初の1ヶ月は収入ゼロを想定しておきましょう。\nQ5. 副業と本業の社会保険はどうなりますか？\nA. 雇用型副業の場合、一定条件を超えると副業先でも社会保険加入が必要になる場合があります（2022年10月改正）。非雇用型（フリーランス）の場合は現行の社会保険に変更はありません。\nQ6. 副業でかかった経費は税金から引けますか？\nA. はい。インターネット代、書籍代、パソコン代（按分）など副業に関連する費用は経費として計上できます。青色申告を選択すると最大65万円の特別控除も受けられます。\nQ7. 副業収入が少額の場合、住民税の申告は必要ですか？\nA. 所得税の確定申告が不要（20万円以下）でも、住民税の申告は各市区町村に対して必要です。ただし確定申告をすれば住民税の申告を兼ねることができます。\n確定申告の準備には**freee会計（無料トライアルあり） **が便利です。収入・経費の記録から申告書作成までスマホでも完結します。\nまとめ・行動の呼びかけ 副業を成功させるカギは「まず始めること」です。就業規則の確認 → ジャンル選び → プラットフォーム登録 → 初案件受注という4ステップを踏めば、どなたでも安全に副業デビューできます。大切なのは、完璧を求めずに小さく始めて、徐々にスケールアップしていく姿勢です。\n副業の始め方をもっと詳しく知りたい方は「副業完全ガイド2026年版 」をチェック！確定申告・税金対策・プラットフォーム比較など、副業に必要な情報が1冊に凝縮されています（¥1,280）。\nフリーランスとして独立を考えている方は「フリーランス完全スタートキット 」がおすすめです。開業届の書き方から単価交渉術まで、独立に必要なすべてが揃っています（¥980）。\n※本記事は情報提供を目的としています。税務に関する判断は税理士等の専門家にご相談ください。\n※本記事にはアフィリエイト広告が含まれています。\n関連ツール 副業収入の税金を計算 → 副業税金計算ツール 手取り額をシミュレーション → 手取り計算ツール 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 時給と年収を換算 → 時給換算ツール 関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 ","permalink":"https://productivity-works.com/ja/posts/%E5%89%AF%E6%A5%AD-%E5%A7%8B%E3%82%81%E6%96%B9-%E5%88%9D%E5%BF%83%E8%80%85-2026/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"副業-始め方-初心者完全ガイド2026年最新版\"\u003e副業 始め方 初心者完全ガイド【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「副業を始めたいけど、何から手をつければいいかわからない」——そんな悩みを抱えていませんか？\u003c/p\u003e\n\u003cp\u003e2026年現在、物価上昇・年金不安を背景に、会社員の副業への関心はかつてないほど高まっています。厚生労働省の調査によると、副業・兼業を認める企業の割合は2025年時点で約60%を超えており、環境は整ってきています。しかし、いざ始めようとすると「どのジャンルを選ぶべきか」「税金はどうなるのか」「会社にバレないか」など、不安が尽きません。\u003c/p\u003e\n\u003cp\u003eこの記事でわかること：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e副業の種類と自分に合ったジャンルの選び方\u003c/li\u003e\n\u003cli\u003e会社員が副業を始めるための具体的なステップ\u003c/li\u003e\n\u003cli\u003e確定申告・税金の基本ルール\u003c/li\u003e\n\u003cli\u003e副業を始める前に確認すべき注意点\u003c/li\u003e\n\u003cli\u003e初心者におすすめの副業プラットフォーム\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"副業とは基本を理解する\"\u003e副業とは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003e副業とは、本業（メインの仕事）以外で収入を得る活動全般を指します。アルバイト・パートのような雇用型と、クラウドソーシングや自分でサービスを提供するフリーランス型（非雇用型）の2種類が存在します。\u003c/p\u003e\n\u003cp\u003e近年急増しているのは\u003cstrong\u003e非雇用型の副業\u003c/strong\u003eです。クラウドワークスやランサーズといったクラウドソーシングサービス、ブログ・YouTube・SNSを活用したコンテンツビジネス、メルカリ・BOOTHを使ったデジタル商品販売などが代表例です。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e副業タイプ\u003c/th\u003e\n          \u003cth\u003e例\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e雇用型\u003c/td\u003e\n          \u003ctd\u003eアルバイト、パート\u003c/td\u003e\n          \u003ctd\u003e安定収入だが会社にバレやすい\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eクラウドソーシング\u003c/td\u003e\n          \u003ctd\u003eクラウドワークス、ランサーズ\u003c/td\u003e\n          \u003ctd\u003e在宅可・スキル不要案件あり\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eコンテンツ販売\u003c/td\u003e\n          \u003ctd\u003eブログ、YouTube、BOOTH\u003c/td\u003e\n          \u003ctd\u003e資産型・時間の自由度が高い\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eスキル販売\u003c/td\u003e\n          \u003ctd\u003eストアカ、ココナラ\u003c/td\u003e\n          \u003ctd\u003e専門知識を直接マネタイズ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eフリーランス\u003c/td\u003e\n          \u003ctd\u003eWebライター、デザイナー\u003c/td\u003e\n          \u003ctd\u003e高単価・スキルアップになる\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e副業のメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e収入増加\u003c/strong\u003e: 月数万〜数十万円の副収入が見込める\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eスキルアップ\u003c/strong\u003e: 本業とは異なるスキルが身につく\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eリスク分散\u003c/strong\u003e: 万一の失業・リストラに備えられる\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e税制優遇\u003c/strong\u003e: 経費計上で節税効果がある（青色申告なら最大65万円控除）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e将来的な独立\u003c/strong\u003e: フリーランス・起業への足がかりになる\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e副業のデメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e時間・体力の消耗\u003c/strong\u003e: 本業に支障が出るリスク\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e確定申告が必要\u003c/strong\u003e: 年間20万円超で申告義務が生じる\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e就業規則の確認が必要\u003c/strong\u003e: 会社によっては副業禁止の場合がある\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e収入が不安定\u003c/strong\u003e: 初期は思うように稼げないことも多い\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"副業の始め方-ステップガイド\"\u003e副業の始め方 ステップガイド\u003c/h2\u003e\n\u003cp\u003e副業を安全・確実にスタートさせるための5ステップを解説します。\u003c/p\u003e\n\u003ch3 id=\"ステップ1就業規則を確認する\"\u003eステップ1：就業規則を確認する\u003c/h3\u003e\n\u003cp\u003eまず最初に、勤務先の就業規則で副業・兼業が禁止されていないかを確認しましょう。2018年の厚生労働省「副業・兼業の促進に関するガイドライン」改定以降、副業を認める企業は増えていますが、\u003cstrong\u003e競業避止義務\u003c/strong\u003e（競合他社への就業禁止）は多くの会社で設けられています。\u003c/p\u003e\n\u003cp\u003e就業規則を確認する際のチェックポイント：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e「副業・兼業」「二重就業」「競業」の項目を検索\u003c/li\u003e\n\u003cli\u003e許可制の場合は事前申告が必要\u003c/li\u003e\n\u003cli\u003e公務員は原則禁止（非常勤職員等の例外あり）\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"ステップ2副業ジャンルを選ぶ\"\u003eステップ2：副業ジャンルを選ぶ\u003c/h3\u003e\n\u003cp\u003e自分の状況に合ったジャンルを選ぶことが成功の鍵です。以下の基準で選びましょう。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e条件\u003c/th\u003e\n          \u003cth\u003eおすすめジャンル\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eスキルなし・時間少\u003c/td\u003e\n          \u003ctd\u003eアンケート、データ入力、画像タグ付け\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e文章が得意\u003c/td\u003e\n          \u003ctd\u003eWebライター、ブログ、記事作成\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eデザインができる\u003c/td\u003e\n          \u003ctd\u003eバナー制作、LP制作、イラスト\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eエンジニアリングスキルあり\u003c/td\u003e\n          \u003ctd\u003eWebアプリ開発、システム構築\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e教えることが好き\u003c/td\u003e\n          \u003ctd\u003eオンライン家庭教師、ストアカ講師\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e物販に興味あり\u003c/td\u003e\n          \u003ctd\u003eメルカリ転売、ハンドメイド販売\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"ステップ3プラットフォームに登録する\"\u003eステップ3：プラットフォームに登録する\u003c/h3\u003e\n\u003cp\u003e副業ジャンルが決まったら、適切なプラットフォームに登録します。初心者には\u003cstrong\u003eクラウドワークス\u003c/strong\u003eや\u003cstrong\u003eランサーズ\u003c/strong\u003eが使いやすくおすすめです。登録は無料で、最短当日から仕事を受注できます。\u003c/p\u003e","title":"副業始め方 初心者向け完全ガイド2026年最新版"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n副業 確定申告 20万以下 やり方完全ガイド【2026年最新版】 「副業収入が20万円以下なら確定申告しなくていいって聞いたけど、本当に何もしなくていいの？」\nこの疑問を持つ方はとても多いです。結論から言うと、「20万円ルール」は所得税の確定申告が不要になる条件であって、住民税の申告は別途必要です。この違いを知らないと、後から住民税の追徴課税を受けることになりかねません。\n副業20万円ルール 確定申告判定フロー 副業収入がある 年末調整済みの 会社員か？ NO 確定申告が必要 （フリーランス等） YES 副業所得（収入－経費） が20万円超か？ NO 所得税申告は不要 ※住民税申告は必要 YES 確定申告が必要 （2月16日〜3月15日） ※「所得」＝収入－経費。収入ではなく所得で判断します。医療費控除等の適用がある場合は申告が必要なケースも。\nこの記事でわかること：\n副業収入20万円以下で確定申告が「不要」になる正確な条件 20万円以下でも必要な住民税の申告手続き 「20万円以下」に含まれる所得の計算方法 申告を間違えた場合のペナルティと対処法 2026年の税制改正ポイント 副業の20万円ルールとは？基本を理解する 定義・仕組み 「副業収入が20万円以下なら確定申告不要」というルールは、正確には所得税法第121条に基づく規定です。給与所得者（会社員）が、給与所得・退職所得以外の所得（副業収入）の合計が年間20万円以下の場合、所得税の確定申告は不要とされています。\nしかし、以下の3点に必ず注意してください：\n注意点1: 「収入」ではなく「所得」が基準\n20万円の判定基準は「収入（売上）」ではなく「所得（収入 - 経費）」です。\n例：クラウドワークスで年間25万円稼いだが、経費（通信費・書籍代等）が8万円あった場合 → 所得 = 25万円 - 8万円 = 17万円 → 20万円以下 → 確定申告不要\n注意点2: 住民税の申告は別途必要\n所得税の確定申告が不要でも、住民税（市区町村民税・都道府県民税）の申告は必要です。住民税には「20万円ルール」のような免除規定がありません。副業所得が1円でもあれば、原則として住民税の申告義務があります。\n注意点3: 確定申告不要の条件が全て揃っていること\n以下の条件を全て満たす場合のみ「20万円ルール」が適用されます：\n給与を1か所から受け取っており、その年の年末調整が行われている 給与所得・退職所得以外の所得が年間20万円以下 医療費控除・住宅ローン控除など、確定申告でしか適用できない控除を受けない メリット・デメリット（申告不要制度の活用） 申告不要のメリット\n確定申告書作成・提出の手間が省ける 会計ソフトの費用が不要 申告不要のデメリット・リスク\n住民税申告は別途必要（忘れると加算税リスク） 経費を計上した節税ができない（青色申告特別控除が使えない） 年をまたいで累積すると翌年に20万円を超えるリスク 「バレない」と思って無申告を続けると後に発覚するリスク 副業 確定申告 20万以下の具体的なやり方 ケース別：申告が必要か不要か確認する ケース 確定申告（所得税） 住民税申告 副業所得15万円（経費含む計算後） 不要 必要 副業所得22万円 必要 必要（確定申告で兼ねる） 副業所得8万円・医療費控除あり 必要（医療費控除のため） 必要 副業所得5万円・住宅ローン控除あり 必要（初年度のみ） 必要 給与2か所から受け取り・副業0円 必要 必要 住民税の申告手順（20万円以下の場合） 所得税の確定申告が不要でも、住民税の申告は以下の手順で行います：\nステップ1: 居住地の市区町村役所に確認\n住民税の申告窓口と様式は自治体によって異なります。役所の「税務課・市民税課」に問い合わせるか、自治体のウェブサイトで「住民税申告書」を検索してください。\nステップ2: 住民税申告書を作成する\n申告書に記入する主な内容：\n前年の給与収入・給与所得（源泉徴収票から転記） 副業収入・副業所得（収入 - 経費） 各種控除（社会保険料控除、生命保険料控除等） ステップ3: 必要書類を揃えて提出する\n必要書類：\n住民税申告書（自治体の様式） 前年の源泉徴収票（勤務先から発行） 副業収入の証明（通帳明細・支払調書等） 経費の領収書（提出不要だが手元に保管） 本人確認書類（マイナンバーカードまたは通知カード＋身分証） ステップ4: 提出期限を守る\n住民税の申告期限は3月15日です（多くの自治体）。確定申告と同じ期限が設定されていることが多いですが、自治体によって異なるため必ず確認してください。\n確定申告をする方が得なケース 20万円以下でも、以下のケースでは確定申告をした方が節税になります：\n経費が多い場合: 副業所得が5〜10万円でも、経費を計上することで所得税の還付が受けられる場合があります 医療費控除を申請したい場合: 年間の医療費が10万円を超える場合、確定申告で医療費控除が適用できます（副業所得の有無に関わらず） ふるさと納税の控除: ワンストップ特例制度（5自治体まで）を利用していない場合は確定申告が必要 年内に退職している場合: 年末調整が未実施の場合は確定申告が必要 選び方・注意点 チェックポイント 副業収入の税務処理で必ず確認すべきポイントです：\n所得の計算を正確に行う\n「収入」と「所得」を混同しないことが最重要です。クラウドワークスで稼いだ25万円が「収入」であれば、そこから経費（通信費・書籍代・PC関連費用の按分など）を引いた金額が「所得」です。\n経費として認められる主なもの（副業関連）：\n経費項目 按分の目安 インターネット接続費 副業利用割合（例：30〜50%） スマートフォン料金 副業利用割合（例：30%） 自宅家賃（ホームオフィス） 副業スペース割合（例：10〜20%） 書籍・情報収集費 副業関連分全額 外注費・ツール費用 全額 振込手数料 全額 「副業がバレる」仕組みを理解する\n副業が会社にバレる最多の原因は「住民税の金額」です。会社員の住民税は通常「特別徴収」（給与から天引き）されますが、副業収入分も合算されると住民税額が増えます。この増額を経理担当者や上司に気づかれるケースがあります。\n対策：確定申告書（または住民税申告書）の「給与以外の所得に係る住民税の徴収方法の選択」欄で**「自分で納付（普通徴収）」を選択**することで、副業分の住民税を自分で別途納付できます。\nよくある失敗 失敗例1: 住民税申告を完全に忘れる\n「確定申告不要と聞いたから何もしなかった」という方が最も多いミスです。住民税の申告を忘れると、自治体から「住民税の申告をしてください」という通知が届いたり、場合によっては調査が入ることがあります。\n失敗例2: 複数年の副業収入が累積で発覚する\n「毎年15万円以下だから大丈夫」と思っていても、税務署は複数年の所得を確認することがあります。申告の正確な記録を毎年残しておきましょう。\n失敗例3: 「所得」と「収入」を間違える\nPayPayやメルカリなどの入金履歴だけを見て「20万円以上あるから申告が必要」と思い込む人もいます。経費を差し引いた「所得」で判断することを忘れないでください。\nよくある質問（FAQ） Q1. 副業がメルカリなどのフリマアプリの場合も20万円ルールは適用されますか？\nA. 個人が不用品を売る場合（生活用動産の譲渡）は原則として非課税です。ただし、営利目的でせどりや転売を行う場合は「事業所得」または「雑所得」として申告が必要です。\nQ2. 副業収入が20万円以下で確定申告しなかった場合、ペナルティはありますか？\nA. 所得税については20万円以下で申告不要のため、ペナルティはありません。ただし住民税の申告を怠った場合は、自治体から無申告分を追徴される可能性があります。\nQ3. 複数の副業を掛け持ちしている場合、20万円の計算はまとめてですか？\nA. はい、全ての副業所得の合計で20万円を判定します。副業A（所得12万円）＋副業B（所得11万円）= 23万円 → 確定申告が必要です。\nQ4. 20万円ちょうどの場合はどうなりますか？\nA. 「20万円以下」なので、ちょうど20万円であれば確定申告不要です。20万1円からが申告必要です。\nQ5. 確定申告が不要な場合でも、e-Taxは使えますか？\nA. 使えますが、確定申告が不要な場合は申告書を送信する必要はありません。住民税申告は各自治体の窓口またはオンラインで行います。\nQ6. 副業収入が突然20万円を超えた場合はどうすればいいですか？\nA. その年の確定申告（翌年2月16日〜3月15日）で申告してください。慌てずに会計ソフトで年間の収入・経費を整理してから申告書を作成しましょう。会計ソフトをまだ導入していない方は、**freee会計（無料トライアルあり） **が初心者にも使いやすくおすすめです。\nQ7. 住民税の普通徴収に変更すれば必ず会社にバレないですか？\nA. 普通徴収に変更することで副業分の住民税が給与天引きにならなくなりますが、完全にバレない保証はありません。会社や自治体によって取り扱いが異なる場合があります。\nまとめ・行動の呼びかけ 「副業20万円ルール」の正しい理解は、無用な税務トラブルを避けるための第一歩です。所得税の確定申告が不要でも住民税申告は必要であること、「収入」ではなく「所得（経費控除後）」で判断することを必ず覚えておきましょう。迷ったら確定申告しておく方が、後から追徴されるリスクが低くなります。\n副業の始め方をもっと詳しく知りたい方は「副業完全ガイド2026年版 」をチェック！確定申告・税金対策・プラットフォーム比較など、副業に必要な情報が1冊に凝縮されています（¥1,280）。\nフリーランスとして独立を考えている方は「フリーランス完全スタートキット 」がおすすめです。開業届・税務・単価交渉まで独立準備に必要なすべてが詰まっています（¥980）。\n関連ツール・記事 副業税金計算ツール — 副業収入と経費から所得税・住民税・手取りを自動計算 手取り計算シミュレーター — 年収から手取り・税金・社会保険料を自動計算 ふるさと納税シミュレーター — 控除上限額を自動計算、節税効果を最大化 年収から所得税・住民税を計算 → 所得税シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 副業の確定申告やり方2026年版【freee・マネーフォワード対応】 副業フリーランスがfreeeで青色申告65万控除を最速で取る方法 副業バレない方法と住民税対策完全ガイド2026年版 ※本記事は情報提供を目的としています。税務に関する判断は税理士等の専門家にご相談ください。\n※本記事にはアフィリエイト広告が含まれています。\n関連テンプレート 副業・フリーランスをすぐ始められるテンプレートはこちら：\n副業スタートガイド2026 — 15の副業アイデア＋行動計画 フリーランス確定申告ガイド — AI×確定申告の完全マニュアル ChatGPTプロンプト集100選 — 業務効率化プロンプト集 ","permalink":"https://productivity-works.com/ja/posts/%E5%89%AF%E6%A5%AD-%E7%A2%BA%E5%AE%9A%E7%94%B3%E5%91%8A-20%E4%B8%87%E4%BB%A5%E4%B8%8B-%E3%82%84%E3%82%8A%E6%96%B9/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"副業-確定申告-20万以下-やり方完全ガイド2026年最新版\"\u003e副業 確定申告 20万以下 やり方完全ガイド【2026年最新版】\u003c/h1\u003e\n\u003cp\u003e「副業収入が20万円以下なら確定申告しなくていいって聞いたけど、本当に何もしなくていいの？」\u003c/p\u003e\n\u003cp\u003eこの疑問を持つ方はとても多いです。結論から言うと、\u003cstrong\u003e「20万円ルール」は所得税の確定申告が不要になる条件であって、住民税の申告は別途必要\u003c/strong\u003eです。この違いを知らないと、後から住民税の追徴課税を受けることになりかねません。\u003c/p\u003e\n\u003cdiv style=\"max-width:620px;margin:1.8em auto;text-align:center;\"\u003e\n\u003csvg viewBox=\"0 0 620 320\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:100%;height:auto;\" aria-label=\"副業20万円ルール判定フロー\"\u003e\n  \u003cstyle\u003etext { font-family: 'Noto Sans JP', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', sans-serif; }\u003c/style\u003e\n  \u003crect width=\"620\" height=\"320\" rx=\"12\" fill=\"#f8fafc\" stroke=\"#e2e8f0\" stroke-width=\"1\"/\u003e\n \u003ctext x=\"310\" y=\"26\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"13\" font-weight=\"bold\"\u003e副業20万円ルール 確定申告判定フロー\u003c/text\u003e\n  \u003c!-- スタート --\u003e\n  \u003crect x=\"185\" y=\"38\" width=\"250\" height=\"40\" rx=\"20\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"310\" y=\"62\" text-anchor=\"middle\" fill=\"white\" font-size=\"13\" font-weight=\"bold\"\u003e副業収入がある\u003c/text\u003e\n  \u003cdefs\u003e\n    \u003cmarker id=\"arr2\" markerWidth=\"8\" markerHeight=\"8\" refX=\"6\" refY=\"3\" orient=\"auto\"\u003e\n      \u003cpath d=\"M0,0 L0,6 L8,3 z\" fill=\"#cbd5e1\"/\u003e\n    \u003c/marker\u003e\n  \u003c/defs\u003e\n  \u003cline x1=\"310\" y1=\"78\" x2=\"310\" y2=\"102\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr2)\"/\u003e\n  \u003c!-- 菱形1: 会社員？ --\u003e\n  \u003cpolygon points=\"310,106 430,142 310,178 190,142\" fill=\"white\" stroke=\"#4a9eff\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"310\" y=\"138\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e年末調整済みの\u003c/text\u003e\n \u003ctext x=\"310\" y=\"156\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e会社員か？\u003c/text\u003e\n  \u003c!-- NO → 左 --\u003e\n  \u003cline x1=\"190\" y1=\"142\" x2=\"80\" y2=\"142\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr2)\"/\u003e\n \u003ctext x=\"135\" y=\"133\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"11\" font-weight=\"bold\"\u003eNO\u003c/text\u003e\n  \u003crect x=\"20\" y=\"160\" width=\"120\" height=\"44\" rx=\"8\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"80\" y=\"179\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003e確定申告が必要\u003c/text\u003e\n \u003ctext x=\"80\" y=\"195\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003e（フリーランス等）\u003c/text\u003e\n  \u003c!-- YES → 下 --\u003e\n  \u003cline x1=\"310\" y1=\"178\" x2=\"310\" y2=\"202\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr2)\"/\u003e\n \u003ctext x=\"325\" y=\"192\" fill=\"#10b981\" font-size=\"11\" font-weight=\"bold\"\u003eYES\u003c/text\u003e\n  \u003c!-- 菱形2: 経費控除後の所得は？ --\u003e\n  \u003cpolygon points=\"310,206 450,242 310,278 170,242\" fill=\"white\" stroke=\"#4a9eff\" stroke-width=\"1.5\"/\u003e\n \u003ctext x=\"310\" y=\"234\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003e副業所得（収入－経費）\u003c/text\u003e\n \u003ctext x=\"310\" y=\"252\" text-anchor=\"middle\" fill=\"#1e293b\" font-size=\"12\"\u003eが20万円超か？\u003c/text\u003e\n  \u003c!-- NO → 左 --\u003e\n  \u003cline x1=\"170\" y1=\"242\" x2=\"80\" y2=\"242\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr2)\"/\u003e\n \u003ctext x=\"125\" y=\"233\" text-anchor=\"middle\" fill=\"#10b981\" font-size=\"11\" font-weight=\"bold\"\u003eNO\u003c/text\u003e\n  \u003crect x=\"10\" y=\"260\" width=\"140\" height=\"44\" rx=\"8\" fill=\"#10b981\"/\u003e\n \u003ctext x=\"80\" y=\"279\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003e所得税申告は不要\u003c/text\u003e\n \u003ctext x=\"80\" y=\"295\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003e※住民税申告は必要\u003c/text\u003e\n  \u003c!-- YES → 右 --\u003e\n  \u003cline x1=\"450\" y1=\"242\" x2=\"530\" y2=\"242\" stroke=\"#94a3b8\" stroke-width=\"2\" marker-end=\"url(#arr2)\"/\u003e\n \u003ctext x=\"490\" y=\"233\" text-anchor=\"middle\" fill=\"#4a9eff\" font-size=\"11\" font-weight=\"bold\"\u003eYES\u003c/text\u003e\n  \u003crect x=\"470\" y=\"260\" width=\"140\" height=\"44\" rx=\"8\" fill=\"#4a9eff\"/\u003e\n \u003ctext x=\"540\" y=\"279\" text-anchor=\"middle\" fill=\"white\" font-size=\"11\" font-weight=\"bold\"\u003e確定申告が必要\u003c/text\u003e\n \u003ctext x=\"540\" y=\"295\" text-anchor=\"middle\" fill=\"white\" font-size=\"10\"\u003e（2月16日〜3月15日）\u003c/text\u003e\n\u003c/svg\u003e\n\u003cp style=\"font-size:12px;color:#64748b;margin-top:4px;\"\u003e※「所得」＝収入－経費。収入ではなく所得で判断します。医療費控除等の適用がある場合は申告が必要なケースも。\u003c/p\u003e","title":"副業確定申告 20万以下のやり方完全ガイド2026年版"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n新NISAの始め方・手順を完全解説【2026年最新版】口座開設から積立設定まで 「新NISAを始めたいけど、何から手をつければいいかわからない」という方に向けて、この記事では口座開設から積立設定まで、全ての手順をわかりやすく解説します。実は新NISAの始め方はとてもシンプルで、最短1週間程度で積立を開始できます。\nこの記事では以下のことがわかります。\n新NISA口座開設に必要なものと手順（ステップバイステップ） おすすめ証券会社の比較と選び方 銘柄の選び方と積立設定の具体的な操作方法 始める前に知っておくべき注意点とよくある質問 新NISAとは？始める前の基本確認 定義・仕組み 新NISAは2024年1月から始まった非課税投資制度で、年最大360万円・生涯1,800万円まで投資の利益に税金がかからない制度です。\n新NISAの概要\n項目 つみたて投資枠 成長投資枠 年間投資上限 120万円 240万円 生涯投資枠 合計1,800万円（成長枠は1,200万円まで） 投資対象 金融庁認定の投資信託・ETF 株式・投資信託・ETFなど 非課税期間 無期限 無期限 通常は株式の利益・配当金に約20.315%の税金がかかりますが、NISA口座内では非課税です。長期的に大きな差が生まれます。\nメリット・デメリット 新NISAのメリット\n運用益・配当金が非課税 非課税期間が無期限（旧NISAは20年・5年） いつでも自由に引き出せる 月100円から始められる 売却した枠が翌年に復活する 新NISAのデメリット\n元本保証はない（投資リスクあり） 損失は他口座と損益通算できない 年間投資枠の翌年繰越不可 新NISA 始め方の手順一覧（比較表） 証券会社別の開設難易度・スピード比較 証券会社 口座開設最短日数 本人確認方法 最低積立額 おすすめ度 SBI証券 最短翌営業日 オンライン/郵送 月100円 ★★★★★ 楽天証券 最短翌営業日 オンライン/郵送 月100円 ★★★★★ マネックス証券 最短3営業日 オンライン/郵送 月100円 ★★★★☆ 松井証券 最短3営業日 オンライン/郵送 月100円 ★★★★☆ auカブコム証券 最短3営業日 オンライン/郵送 月100円 ★★★☆☆ SBI証券で今すぐ口座開設する 楽天証券で今すぐ口座開設する 新NISAの始め方 ステップバイステップ解説 STEP 1: 必要なものを準備する 口座開設に必要なものは以下の通りです。\n必須書類・情報\n必要なもの 詳細 マイナンバーカード または マイナンバー通知カード+本人確認書類 本人確認と番号確認に使用 運転免許証・パスポートなど本人確認書類 マイナンバーカードがない場合 メールアドレス 申込・通知の受信用 銀行口座 入金・引落用 スマートフォン 本人確認（eKYC）に使用 最短で口座開設するにはマイナンバーカードの用意がおすすめです。スマートフォンのカメラで撮影するだけで本人確認が完了するeKYC（電子KYC）が使えるため、最短即日〜翌営業日で口座が開設できます。\nSTEP 2: 証券会社を選んで申し込む 初心者におすすめの証券会社はSBI証券か楽天証券です。\n証券会社の選び方ポイント\n楽天ポイントを使いたい・楽天カードを持っている → 楽天証券 それ以外 → SBI証券（商品数が業界最大級） 三井住友カードを持っている → SBI証券（クレカ積立で高ポイント還元） 申し込みはスマートフォンまたはパソコンから、証券会社の公式サイトへアクセスして行います。\nSTEP 3: 口座開設申込の手順 証券会社の公式サイトにアクセス 「口座開設」ボタンをクリック メールアドレスを登録（仮登録メールが届く） 本登録フォームに個人情報を入力（氏名・住所・生年月日など） 本人確認書類のアップロード（マイナンバーカードや免許証） 「NISA口座を開設する」にチェックを入れる 口座開設完了の通知を待つ（最短翌営業日〜1週間程度） 注意: 証券口座の申込と同時にNISA口座の申込もできます。NISA口座は税務署への届出が必要なため、審査に数日かかる場合があります。\nSTEP 4: 口座に入金する 口座開設が完了したら、証券口座に資金を入金します。\n主な入金方法\n入金方法 手数料 着金速度 ネットバンキング（即時入金） 無料 即時〜数分 銀行振込 振込手数料（証券会社負担の場合あり） 当日〜翌営業日 自動入金（月次） 無料 設定日に自動 SBI証券・楽天証券はどちらも即時入金に対応しており、ネットバンキングで即座に資金を移動できます。\nSTEP 5: 積立ファンドを選んで設定する 口座が開設でき入金が完了したら、いよいよ銘柄と積立額を設定します。\n初心者おすすめのファンド選び\n迷ったらこの1本から始めましょう。\neMAXIS Slim 全世界株式（オール・カントリー）: 世界全体に分散。信託報酬0.05775%で業界最低水準クラス 積立設定の手順（SBI証券の場合）\nログイン後「NISA」タブをクリック 「つみたて投資枠」を選択 「積立設定」をクリック 検索窓にファンド名を入力して選択 積立金額と積立日を設定（例：毎月10,000円・毎月1日） 購入手続きを「クレジットカード積立」または「証券口座から引落」で設定 確認画面で内容を確認して「設定する」をクリック 以上で積立設定が完了です。翌月の設定日から自動的に積立が始まります。\nSTEP 6: クレジットカード積立を設定する（任意・推奨） SBI証券なら三井住友カード、楽天証券なら楽天カードと連携することで、積立額に対してポイントが貯まります。\n組み合わせ ポイント還元率 月積立上限 SBI証券 × 三井住友カード（一般） 0.5% 10万円 SBI証券 × 三井住友カード（ゴールド） 1% 10万円 楽天証券 × 楽天カード 0.5〜1% 10万円 設定すると、月10万円の積立で年間最大1.2万円のポイントが貯まります。\n選び方・注意点 チェックポイント 注意点1: NISA口座は1人1口座のみ 複数の証券会社に同時にNISA口座を持つことはできません。変更は年1回（毎年10月〜12月に翌年分の手続き）のみ可能です。最初の選択が重要です。\n注意点2: 銘柄は途中で変えられる 積立設定した銘柄は途中でも変更できます。ただし、変更前に購入した分はそのまま保有し続けられます。最初から完璧を目指さず、まず始めることを優先しましょう。\n注意点3: 余裕資金の範囲で積立額を設定する 生活費・緊急予備資金を確保した上で、無理のない積立額を設定してください。\n注意点4: 短期的な値動きに惑わされない 特に最初の1〜2年は評価額が上下します。老後資金目的なら20〜30年の長期運用を前提に、値下がりでも積立を続けることが重要です。\nよくある失敗 失敗1: NISA口座開設を後回しにする 「もう少し勉強してから…」と先延ばしすると、非課税で運用できる年数が短くなります。今日始めた人が有利です。\n失敗2: 複雑な設定・銘柄を選ぼうとする 「最適な配分を作ろう」と複雑にしすぎて結局何もできない状態になります。まずはオルカン1本で十分です。\n失敗3: 毎日ランキングや評価額をチェックする 頻繁にアプリを見ると、値下がりの度に不安になり積立停止の引き金になります。月1回程度の確認で十分です。\n関連記事: 新NISAおすすめ銘柄 初心者向けガイド よくある質問（FAQ） Q1. 新NISAはいくらから始められますか？ 月100円から始められます。ただし、少額すぎると最終的な資産効果も小さいため、余裕があれば月5,000〜10,000円程度から始めることをおすすめします。\nQ2. 口座開設にお金はかかりますか？ SBI証券・楽天証券など主要ネット証券は口座開設無料です。NISA口座も無料で開設できます。\nQ3. 旧つみたてNISAを持っていた場合、新NISAは別に開設が必要ですか？ 旧NISA口座をすでに持っていれば、同じ証券会社で自動的に新NISA口座が開設される場合が多いです。証券会社に確認しましょう。\nQ4. 新NISAは何歳から始められますか？ 18歳以上の日本在住者が対象です（2024年〜）。\nQ5. 積立設定は毎月変更できますか？ はい、変更できます。ただし、変更が翌月の積立に反映されるには数日前までに手続きが必要です。\nQ6. 積立を一時停止することはできますか？ はい、積立設定の停止は可能です。停止中は新たな購入が行われませんが、すでに購入した投資信託は引き続き保有されます。\nQ7. 引き出しはいつでもできますか？ はい、NISAは引き出しに制限がありません（iDeCoと異なります）。ただし、売却から入金までに2〜3営業日かかります。\nまとめ・行動の呼びかけ 新NISAの始め方は、証券会社選び→口座開設→入金→積立設定の4ステップです。最短1週間もあれば積立をスタートできます。「難しそう」と感じている方も、今日証券会社のサイトにアクセスしてみれば、想像より簡単であることがわかります。始めるのが早ければ早いほど、複利の恩恵を長く受けられます。今日が人生で最も早い「始めどき」です。\n今すぐSBI証券で口座開設を始める 関連記事: 積立NISAで毎月いくら積み立てるべき？ 関連ツール NISAの非課税効果をシミュレーション → NISAシミュレーター 積立の複利効果を年数別に確認 → 複利計算シミュレーター 配当型ファンドの年間収入を計算 → 配当金シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター ※本記事は情報提供を目的としており、特定の金融商品の購入・売却を推奨するものではありません。投資判断はご自身の責任で行ってください。最新情報は各公式サイトでご確認ください。\n関連テンプレート 資産運用・家計管理をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す ","permalink":"https://productivity-works.com/ja/posts/%E6%96%B0nisa-%E5%A7%8B%E3%82%81%E6%96%B9-%E6%89%8B%E9%A0%86/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"新nisaの始め方手順を完全解説2026年最新版口座開設から積立設定まで\"\u003e新NISAの始め方・手順を完全解説【2026年最新版】口座開設から積立設定まで\u003c/h1\u003e\n\u003cp\u003e「新NISAを始めたいけど、何から手をつければいいかわからない」という方に向けて、この記事では口座開設から積立設定まで、全ての手順をわかりやすく解説します。実は新NISAの始め方はとてもシンプルで、最短1週間程度で積立を開始できます。\u003c/p\u003e\n\u003cp\u003eこの記事では以下のことがわかります。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e新NISA口座開設に必要なものと手順（ステップバイステップ）\u003c/li\u003e\n\u003cli\u003eおすすめ証券会社の比較と選び方\u003c/li\u003e\n\u003cli\u003e銘柄の選び方と積立設定の具体的な操作方法\u003c/li\u003e\n\u003cli\u003e始める前に知っておくべき注意点とよくある質問\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"新nisaとは始める前の基本確認\"\u003e新NISAとは？始める前の基本確認\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003e新NISAは2024年1月から始まった非課税投資制度で、年最大360万円・生涯1,800万円まで投資の利益に税金がかからない制度です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e新NISAの概要\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003eつみたて投資枠\u003c/th\u003e\n          \u003cth\u003e成長投資枠\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e年間投資上限\u003c/td\u003e\n          \u003ctd\u003e120万円\u003c/td\u003e\n          \u003ctd\u003e240万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e生涯投資枠\u003c/td\u003e\n          \u003ctd\u003e合計1,800万円（成長枠は1,200万円まで）\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e投資対象\u003c/td\u003e\n          \u003ctd\u003e金融庁認定の投資信託・ETF\u003c/td\u003e\n          \u003ctd\u003e株式・投資信託・ETFなど\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e非課税期間\u003c/td\u003e\n          \u003ctd\u003e無期限\u003c/td\u003e\n          \u003ctd\u003e無期限\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e通常は株式の利益・配当金に約20.315%の税金がかかりますが、NISA口座内では非課税です。長期的に大きな差が生まれます。\u003c/p\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e新NISAのメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e運用益・配当金が非課税\u003c/li\u003e\n\u003cli\u003e非課税期間が無期限（旧NISAは20年・5年）\u003c/li\u003e\n\u003cli\u003eいつでも自由に引き出せる\u003c/li\u003e\n\u003cli\u003e月100円から始められる\u003c/li\u003e\n\u003cli\u003e売却した枠が翌年に復活する\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e新NISAのデメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e元本保証はない（投資リスクあり）\u003c/li\u003e\n\u003cli\u003e損失は他口座と損益通算できない\u003c/li\u003e\n\u003cli\u003e年間投資枠の翌年繰越不可\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"新nisa-始め方の手順一覧比較表\"\u003e新NISA 始め方の手順一覧（比較表）\u003c/h2\u003e\n\u003ch3 id=\"証券会社別の開設難易度スピード比較\"\u003e証券会社別の開設難易度・スピード比較\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e証券会社\u003c/th\u003e\n          \u003cth\u003e口座開設最短日数\u003c/th\u003e\n          \u003cth\u003e本人確認方法\u003c/th\u003e\n          \u003cth\u003e最低積立額\u003c/th\u003e\n          \u003cth\u003eおすすめ度\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSBI証券\u003c/td\u003e\n          \u003ctd\u003e最短翌営業日\u003c/td\u003e\n          \u003ctd\u003eオンライン/郵送\u003c/td\u003e\n          \u003ctd\u003e月100円\u003c/td\u003e\n          \u003ctd\u003e★★★★★\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e楽天証券\u003c/td\u003e\n          \u003ctd\u003e最短翌営業日\u003c/td\u003e\n          \u003ctd\u003eオンライン/郵送\u003c/td\u003e\n          \u003ctd\u003e月100円\u003c/td\u003e\n          \u003ctd\u003e★★★★★\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eマネックス証券\u003c/td\u003e\n          \u003ctd\u003e最短3営業日\u003c/td\u003e\n          \u003ctd\u003eオンライン/郵送\u003c/td\u003e\n          \u003ctd\u003e月100円\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e松井証券\u003c/td\u003e\n          \u003ctd\u003e最短3営業日\u003c/td\u003e\n          \u003ctd\u003eオンライン/郵送\u003c/td\u003e\n          \u003ctd\u003e月100円\u003c/td\u003e\n          \u003ctd\u003e★★★★☆\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eauカブコム証券\u003c/td\u003e\n          \u003ctd\u003e最短3営業日\u003c/td\u003e\n          \u003ctd\u003eオンライン/郵送\u003c/td\u003e\n          \u003ctd\u003e月100円\u003c/td\u003e\n          \u003ctd\u003e★★★☆☆\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003ca href=\"https://payhip.com/productivityworks\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eSBI証券で今すぐ口座開設する\u003c/a\u003e\n\n\u003ca href=\"https://hb.afl.rakuten.co.jp/hsc/41ab8a31.8f450617.41ab8a32.86e006c4/?link_type=hybrid_url\u0026amp;ut=eyJwYWdlIjoic2hvcCIsInR5cGUiOiJoeWJyaWRfdXJsIiwiY29sIjoxLCJjYXQiOiIxIiwiYmFuIjoiMTI0NjkzOSIsImFtcCI6ZmFsc2V9\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e楽天証券で今すぐ口座開設する\u003c/a\u003e\n\u003c/p\u003e","title":"新NISA 始め方・手順を完全解説【2026年最新版】口座開設から積立設定まで"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n株の始め方を初心者向けに完全解説！必要な金額と最初の一歩【2026年版】 「株を始めたいけど、どのくらいのお金が必要？」「最初に何をすればいいの？」という疑問を持っている方に向けて、株式投資の始め方を一から丁寧に解説します。「株は難しい・怖い」というイメージを持っている方も多いですが、基本を理解してから始めれば、決して難しくはありません。\nこの記事では以下のことがわかります。\n株を始めるのに最低いくら必要か 証券口座の開設手順と選び方 最初に買うべき株の選び方（比較表付き） 初心者がやりがちな失敗とその対策 株式投資とは？基本を理解する 定義・仕組み 株式投資とは、企業が発行した株式（会社の所有権の一部）を購入し、企業の成長や配当から利益を得る投資方法です。\n株式から得られる利益は主に2種類あります。\n1. キャピタルゲイン（売却益） 購入価格より高い価格で売却した際に得られる利益。例：1株1,000円で購入→1,500円で売却→500円の利益\n2. インカムゲイン（配当金・株主優待） 企業が利益の一部を株主に分配する配当金。また、株主優待として自社製品や商品券を受け取れる企業もあります。\n株式投資の仕組み（基本的な流れ）\nステップ 内容 1. 証券口座を開設する ネット証券（SBI証券・楽天証券など）で口座開設 2. 証券口座に入金する 銀行から証券口座へ資金を移す 3. 買いたい株を選ぶ 企業の業績・配当・株価を調べる 4. 注文を出す 価格・株数を指定して発注 5. 保有・売却 配当をもらいながら保有、または利益確定で売却 メリット・デメリット 株式投資のメリット\n資産の増加（キャピタルゲイン）が期待できる 定期的な配当収入（インカムゲイン）が得られる 株主優待を楽しめる（食品・旅行・百貨店など） インフレに対して資産価値を守りやすい 新NISAの成長投資枠で非課税運用できる 少額（1株から）でも始められる時代になった 株式投資のデメリット\n元本保証がない（最悪の場合、投資額が全額失われる） 短期的な値動きが激しく、メンタル管理が必要 企業分析・業界調査に時間と勉強が必要 倒産した場合、株式の価値がゼロになるリスクがある 分散が不十分だとリスクが高い 株を始めるのに必要な金額（比較表） 最低投資金額の目安 日本の株式市場では1単元（最小購入単位）が100株が基本ですが、ネット証券では1株から購入できる「単元未満株（ミニ株）」サービスが普及しています。\n購入方法 最低金額の目安 特徴 単元未満株（1株） 数百円〜数千円 少額で人気企業に投資できる。流動性が低いものも 単元株（100株） 数万〜数百万円 株主総会・優待の権利が得られる 投資信託（インデックスファンド） 100円〜 間接的に多数の株に分散投資 ETF（上場投資信託） 1,000〜2,000円程度（1口）〜 指数連動。取引所で売買できる 主要企業の最低投資金額（2026年5月時点・目安） 企業名 1株価格（目安） 100株（1単元）コスト 特徴 トヨタ自動車（7203） 約3,000円 約30万円 日本最大の自動車メーカー。配当利回り約3% ソニーグループ（6758） 約2,500円 約25万円 エンタメ・半導体。安定成長 NTT（9432） 約175円 約1.75万円 通信最大手。個人投資家に人気 三菱UFJ（8306） 約1,700円 約17万円 国内最大の銀行。配当利回り高め 任天堂（7974） 約8,000円 約80万円 ゲーム世界大手。特別配当実績あり ※株価は2026年5月時点の参考値です。実際の価格は変動します。\n初心者に現実的な開始金額の目安 スタイル 開始推奨金額 内容 ミニマム 1〜5万円 単元未満株で1〜2社に投資して感覚をつかむ スタンダード 10〜30万円 1〜2銘柄を単元株で購入。優待・配当も享受 本格的 50万円以上 3〜5銘柄に分散。ポートフォリオを組む SBI証券で今すぐ口座を開設する 株の始め方 ステップバイステップ解説 STEP 1: 証券口座を選ぶ 初心者には手数料無料のネット証券が最適です。\n証券会社 国内株手数料 単元未満株 おすすめ度 特徴 SBI証券 0円 S株（1株〜） ★★★★★ 口座数最大。商品最多 楽天証券 0円 かぶミニ（1株〜） ★★★★★ 楽天ポイント連携が便利 マネックス証券 0円 ワン株（1株〜） ★★★★☆ 米国株が充実 SBIネオモバイル証券 月220円（定額） 1株〜 ★★★☆☆ 単元未満株に特化 LINE証券（PayPay証券） 割安 1株〜 ★★★☆☆ アプリ操作がシンプル STEP 2: 口座開設の手順 証券会社の公式サイトにアクセス 「口座開設」をクリック メールアドレスを登録 本人確認書類を提出（マイナンバーカード等） 審査完了の通知を受け取る（最短翌営業日） 初期設定（ログインID・パスワード設定） 必要書類:\nマイナンバーカード（最もスムーズ） または運転免許証などの本人確認書類＋マイナンバーの通知 STEP 3: 口座に入金する 銀行振込またはネットバンキング即時入金を利用 最低入金額は証券会社によって異なりますが、多くは1円〜 STEP 4: 銘柄を選ぶ（初心者向け選び方） 初心者向け銘柄選びの5原則\n知っている企業・好きな企業から選ぶ: 身近な企業から始めると情報収集がしやすい 業績が安定している大型株から始める: 時価総額上位の企業は情報が豊富で倒産リスクが低い 配当利回り2〜4%程度の高配当株: 価格が下がっても配当で収益が出る PER（株価収益率）が低すぎず高すぎないか確認: 業界平均と比べて極端に乖離していないか 株主優待が目当てなら優待利回りも確認: 食品・百貨店など日常的に使えるものを選ぶ STEP 5: 注文を出す（成行注文・指値注文） 注文方法の比較\n注文方法 仕組み メリット デメリット 成行注文 現在の市場価格で即時買付 確実に買える 想定より高い価格で買うことがある 指値注文 希望価格を指定して注文 希望価格で買える 指定価格にならないと約定しない 初心者は成行注文から始めると確実に買えます。慣れてきたら指値注文を使ってみましょう。\n選び方・注意点 チェックポイント チェック1: 生活費・緊急予備資金を除いた余裕資金で始める 株は元本保証がなく、短期的に値下がりすることがあります。「なくなっても生活に困らないお金」で投資しましょう。\nチェック2: 1社集中投資を避ける 1社の株式だけを保有すると、その企業が業績不振・倒産した際に大きな損失が生じます。3〜5社以上に分散するか、インデックスファンドとの組み合わせを検討しましょう。\nチェック3: 情報源を確認する SNSやYouTubeで話題の銘柄への投資は特に注意が必要です。「確実に上がる」という情報は存在せず、詐欺やポンプ・アンド・ダンプ（人工的な株価操作）のケースもあります。\nチェック4: 新NISAの成長投資枠を活用する 個別株への投資は新NISAの成長投資枠で行うことで、売却益・配当金が非課税になります。\nよくある失敗 失敗1: 一か八かの投機的な取引をする 「一気に儲けよう」と信用取引（レバレッジ）や短期トレードを行う初心者は損失を被りやすいです。まずは現物取引・長期保有から始めましょう。\n失敗2: 損切りができない 含み損（評価損）が発生した際に「いつか戻るはず」と塩漬けにし続けると、より大きな損失につながることがあります。あらかじめ損切りのルールを決めておくことが重要です。\n失敗3: 一度に全資金を使う 一度に全額を投資すると、その後値下がりした際に追加購入できません。資金を分割して購入するのが基本です。\n失敗4: 株主優待だけに惹かれて選ぶ 株主優待が魅力的でも、企業の業績が悪化すれば株価は下落します。優待は「プラスアルファ」であり、業績・財務を優先して銘柄を選びましょう。\n関連記事: 新NISAおすすめ銘柄 初心者向けガイド よくある質問（FAQ） Q1. 株は最低いくらから始められますか？ 単元未満株（1株）なら数百円〜数千円から始められます。SBI証券の「S株」や楽天証券の「かぶミニ」なら有名企業の株を1株から購入できます。\nQ2. 株で生活できるくらい稼ぐには何が必要ですか？ 株で生活するには一般的に1,000万〜数億円規模の資産が必要です。初心者が短期間で「株だけで生活」を目指すのは非常にリスクが高いです。まず資産形成の手段として、長期・分散・積立の視点で取り組みましょう。\nQ3. 株と投資信託はどちらがいいですか？ 初心者には投資信託（インデックスファンド）をおすすめします。1本買うだけで数百〜数千社に分散投資でき、専門知識が不要です。個別株は知識・経験が必要ですが、配当・優待など特有の楽しみもあります。\nQ4. 株式の購入はいつが最適ですか？ 「いつ買うか」より「どれだけ長く保有するか」の方が重要です。長期投資では始める時期よりも保有期間が最終リターンに大きく影響します。迷うなら今日から少額で始めましょう。\nQ5. 株は売却したらすぐに現金になりますか？ 売却から現金が口座に反映されるまで、通常2〜3営業日かかります（受渡日の関係）。\nQ6. 配当金はいつもらえますか？ 企業ごとに決算期が異なり、一般的に決算確定後2〜3ヶ月後に支払われます。多くの日本企業は3月決算で、9月と3月に中間・期末配当を支払います。\nQ7. 株で損した場合はどうなりますか？ NISA外の特定口座では損失と利益の損益通算・繰越控除（最大3年）が利用できます。ただし、NISA口座内での損失は他の利益との相殺はできません。\n株式投資を始めるなら、**楽天証券 **がおすすめ。手数料無料の「ゼロコース」で、少額からでもコストを気にせず投資できます。\nまとめ・行動の呼びかけ 株式投資は難しいものではありません。まず証券口座を開設して少額から始めることで、市場の動きを体感しながら自然と知識が身についていきます。初心者は最初からインデックスファンド（投資信託）と組み合わせ、個別株は余裕資金の一部に留めることをおすすめします。投資の世界では「始めた人だけが得をする」のが基本原則です。今日から第一歩を踏み出しましょう。\n今すぐ証券口座を開設して株を始める 関連記事: 新NISAの始め方・手順を完全解説 関連ツール NISAの非課税効果をシミュレーション → NISAシミュレーター 配当株の年間収入を計算 → 配当金シミュレーター 積立投資の複利効果を確認 → 複利計算シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター インフレによる購買力低下を計算 → インフレ計算ツール ※本記事は情報提供を目的としており、特定の金融商品の購入・売却を推奨するものではありません。投資判断はご自身の責任で行ってください。最新情報は各公式サイトでご確認ください。\n関連テンプレート 資産運用・家計管理をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す ","permalink":"https://productivity-works.com/ja/posts/%E6%A0%AA-%E5%A7%8B%E3%82%81%E6%96%B9-%E5%88%9D%E5%BF%83%E8%80%85-%E5%BF%85%E8%A6%81%E3%81%AA%E9%87%91%E9%A1%8D/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"株の始め方を初心者向けに完全解説必要な金額と最初の一歩2026年版\"\u003e株の始め方を初心者向けに完全解説！必要な金額と最初の一歩【2026年版】\u003c/h1\u003e\n\u003cp\u003e「株を始めたいけど、どのくらいのお金が必要？」「最初に何をすればいいの？」という疑問を持っている方に向けて、株式投資の始め方を一から丁寧に解説します。「株は難しい・怖い」というイメージを持っている方も多いですが、基本を理解してから始めれば、決して難しくはありません。\u003c/p\u003e\n\u003cp\u003eこの記事では以下のことがわかります。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e株を始めるのに最低いくら必要か\u003c/li\u003e\n\u003cli\u003e証券口座の開設手順と選び方\u003c/li\u003e\n\u003cli\u003e最初に買うべき株の選び方（比較表付き）\u003c/li\u003e\n\u003cli\u003e初心者がやりがちな失敗とその対策\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"株式投資とは基本を理解する\"\u003e株式投資とは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003e株式投資とは、企業が発行した株式（会社の所有権の一部）を購入し、企業の成長や配当から利益を得る投資方法です。\u003c/p\u003e\n\u003cp\u003e株式から得られる利益は主に2種類あります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1. キャピタルゲイン（売却益）\u003c/strong\u003e\n購入価格より高い価格で売却した際に得られる利益。例：1株1,000円で購入→1,500円で売却→500円の利益\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2. インカムゲイン（配当金・株主優待）\u003c/strong\u003e\n企業が利益の一部を株主に分配する配当金。また、株主優待として自社製品や商品券を受け取れる企業もあります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e株式投資の仕組み（基本的な流れ）\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eステップ\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1. 証券口座を開設する\u003c/td\u003e\n          \u003ctd\u003eネット証券（SBI証券・楽天証券など）で口座開設\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e2. 証券口座に入金する\u003c/td\u003e\n          \u003ctd\u003e銀行から証券口座へ資金を移す\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e3. 買いたい株を選ぶ\u003c/td\u003e\n          \u003ctd\u003e企業の業績・配当・株価を調べる\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e4. 注文を出す\u003c/td\u003e\n          \u003ctd\u003e価格・株数を指定して発注\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e5. 保有・売却\u003c/td\u003e\n          \u003ctd\u003e配当をもらいながら保有、または利益確定で売却\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e株式投資のメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e資産の増加（キャピタルゲイン）が期待できる\u003c/li\u003e\n\u003cli\u003e定期的な配当収入（インカムゲイン）が得られる\u003c/li\u003e\n\u003cli\u003e株主優待を楽しめる（食品・旅行・百貨店など）\u003c/li\u003e\n\u003cli\u003eインフレに対して資産価値を守りやすい\u003c/li\u003e\n\u003cli\u003e新NISAの成長投資枠で非課税運用できる\u003c/li\u003e\n\u003cli\u003e少額（1株から）でも始められる時代になった\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e株式投資のデメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e元本保証がない（最悪の場合、投資額が全額失われる）\u003c/li\u003e\n\u003cli\u003e短期的な値動きが激しく、メンタル管理が必要\u003c/li\u003e\n\u003cli\u003e企業分析・業界調査に時間と勉強が必要\u003c/li\u003e\n\u003cli\u003e倒産した場合、株式の価値がゼロになるリスクがある\u003c/li\u003e\n\u003cli\u003e分散が不十分だとリスクが高い\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"株を始めるのに必要な金額比較表\"\u003e株を始めるのに必要な金額（比較表）\u003c/h2\u003e\n\u003ch3 id=\"最低投資金額の目安\"\u003e最低投資金額の目安\u003c/h3\u003e\n\u003cp\u003e日本の株式市場では1単元（最小購入単位）が100株が基本ですが、ネット証券では1株から購入できる「単元未満株（ミニ株）」サービスが普及しています。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e購入方法\u003c/th\u003e\n          \u003cth\u003e最低金額の目安\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e単元未満株（1株）\u003c/td\u003e\n          \u003ctd\u003e数百円〜数千円\u003c/td\u003e\n          \u003ctd\u003e少額で人気企業に投資できる。流動性が低いものも\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e単元株（100株）\u003c/td\u003e\n          \u003ctd\u003e数万〜数百万円\u003c/td\u003e\n          \u003ctd\u003e株主総会・優待の権利が得られる\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e投資信託（インデックスファンド）\u003c/td\u003e\n          \u003ctd\u003e100円〜\u003c/td\u003e\n          \u003ctd\u003e間接的に多数の株に分散投資\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eETF（上場投資信託）\u003c/td\u003e\n          \u003ctd\u003e1,000〜2,000円程度（1口）〜\u003c/td\u003e\n          \u003ctd\u003e指数連動。取引所で売買できる\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"主要企業の最低投資金額2026年5月時点目安\"\u003e主要企業の最低投資金額（2026年5月時点・目安）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e企業名\u003c/th\u003e\n          \u003cth\u003e1株価格（目安）\u003c/th\u003e\n          \u003cth\u003e100株（1単元）コスト\u003c/th\u003e\n          \u003cth\u003e特徴\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eトヨタ自動車（7203）\u003c/td\u003e\n          \u003ctd\u003e約3,000円\u003c/td\u003e\n          \u003ctd\u003e約30万円\u003c/td\u003e\n          \u003ctd\u003e日本最大の自動車メーカー。配当利回り約3%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eソニーグループ（6758）\u003c/td\u003e\n          \u003ctd\u003e約2,500円\u003c/td\u003e\n          \u003ctd\u003e約25万円\u003c/td\u003e\n          \u003ctd\u003eエンタメ・半導体。安定成長\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eNTT（9432）\u003c/td\u003e\n          \u003ctd\u003e約175円\u003c/td\u003e\n          \u003ctd\u003e約1.75万円\u003c/td\u003e\n          \u003ctd\u003e通信最大手。個人投資家に人気\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e三菱UFJ（8306）\u003c/td\u003e\n          \u003ctd\u003e約1,700円\u003c/td\u003e\n          \u003ctd\u003e約17万円\u003c/td\u003e\n          \u003ctd\u003e国内最大の銀行。配当利回り高め\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e任天堂（7974）\u003c/td\u003e\n          \u003ctd\u003e約8,000円\u003c/td\u003e\n          \u003ctd\u003e約80万円\u003c/td\u003e\n          \u003ctd\u003eゲーム世界大手。特別配当実績あり\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※株価は2026年5月時点の参考値です。実際の価格は変動します。\u003c/p\u003e","title":"株の始め方 初心者ガイド！必要な金額と最初の一歩を完全解説【2026年版】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n無料で使えるAIツールおすすめ15選【2026年版・目的別に厳選】 「AIを使ってみたいけど、まずはお金をかけずに試したい」——そう思うのは当然です。\n実は2026年現在、高品質なAIツールの多くが無料で使えます。有料プランへのアップグレードを求めてくるものもありますが、無料枠でも十分実用的なものが揃っています。本記事では、筆者が実際に使ったうえで「これは本当に使える」と感じたツールを15個、目的別に紹介します。\n【文章生成・チャットAI】4選 1. ChatGPT（無料版） URL: chat.openai.com\n説明不要の最定番。GPT-4oが無料でも使えるようになり、無料枠での実用性が大幅に向上しました。メール作成・要約・翻訳・コーディングなど、テキスト系の作業はほぼカバーできます。\n無料枠の制限: 1日の利用回数に上限あり。高負荷時は有料ユーザー優先\nおすすめ用途: 日常的な文章作成、アイデア出し、Q\u0026amp;A\n2. Claude（Anthropic） URL: claude.ai\n文章の質と自然さはChatGPTと並ぶか、それ以上と評価されることも多いです。長い文章の要約や、ニュアンスが重要な文章作成に特に強い印象です。\n無料枠の制限: 1日のメッセージ数に上限あり\nおすすめ用途: 長文の要約・分析、メール・文書作成\n3. Gemini（Google） URL: gemini.google.com\nGoogleのAI。Googleドキュメントやスプレッドシートと連携できるのが強みです。GmailやGoogleドライブとの統合機能（Gemini for Google Workspace）は業務効率化に直結します。\n無料枠の制限: 基本機能は無料、Workspace連携は有料プランが必要なケースあり\nおすすめ用途: Googleサービスのヘビーユーザー、ウェブ検索と組み合わせた調査\n4. Perplexity AI URL: perplexity.ai\n「検索エンジンとAIの融合」と表現されるツール。情報の出所（引用元URL）を明示してくれるため、調査・リサーチ用途で信頼性が高い。\n無料枠の制限: 高機能モデルは1日5回まで、通常モデルは無制限\nおすすめ用途: ファクトベースのリサーチ、最新情報の収集\n【画像生成AI】3選 5. Adobe Firefly（無料枠あり） URL: firefly.adobe.com\nAdobeが提供する画像生成AI。商用利用を前提に設計されており、著作権問題が起きにくいのが最大の特徴です。月25クレジットまで無料。\nおすすめ用途: ブログのサムネイル、SNS投稿用画像\n6. DALL-E 3（ChatGPT経由） ChatGPTの無料版でも一部利用可能。テキストの指示だけで高品質な画像を生成できます。日本語での指示も通ります。\nおすすめ用途: プレゼン資料の挿絵、アイデアの可視化\n7. Canva AI（Magic Media） URL: canva.com\nデザインツール「Canva」に内蔵されたAI画像生成機能。デザインとシームレスに組み合わせられるため、SNS投稿やプレゼン資料の作成に便利です。\n無料枠の制限: 月50回まで無料\nおすすめ用途: SNS投稿、バナー・サムネイル作成\n【動画・音声AI】3選 8. Suno（音楽生成AI） URL: suno.com\nテキストを入力するだけでオリジナル楽曲を生成します。プレゼンのBGMやYouTube動画用のオリジナル音楽作りに使えます。\n無料枠: 1日50クレジット（5曲程度）\n9. ElevenLabs（音声合成AI） URL: elevenlabs.io\nテキストを自然な音声に変換するツール。日本語対応も改善されており、ナレーションや音声コンテンツ制作に使えます。\n無料枠: 月10,000文字まで\n10. Runway（動画生成AI） URL: runwayml.com\nテキストや画像から動画を生成できるAIツール。無料枠は限られていますが、機能を試すには十分です。\n無料枠: 月125クレジット\n【仕事効率化AI】5選 11. Notion AI URL: notion.so\nメモ・プロジェクト管理ツール「Notion」に統合されたAI機能。文章の要約・翻訳・改善提案をドキュメント内でそのまま実行できます。\n無料枠: 限定的（20回まで）。本格活用は有料プランが必要\n12. Otter.ai（無料枠あり） URL: otter.ai\n会議の音声をリアルタイムで文字起こし・要約してくれるツール。Zoom連携機能もあります。\n無料枠: 月600分まで文字起こし可能\n13. Gamma（プレゼン生成AI） URL: gamma.app\nテキストの入力だけでプレゼン資料を自動生成します。スライドのデザインまで自動で仕上げてくれるため、資料作成の時間を大幅に削減できます。\n無料枠: 月400クレジット（15〜20枚程度のスライド）\n14. Grammarly（英文校正AI） URL: grammarly.com\n英語のライティング補助ツール。文法チェックにとどまらず、「もっとフォーマルに」「より簡潔に」といった文体改善の提案もしてくれます。\n無料枠: 基本的な文法チェックは無料\n15. Google NotebookLM URL: notebooklm.google.com\nドキュメントやPDFをアップロードして、AIがその内容をもとに質問に答えてくれる無料ツール。議事録・報告書・論文などの大量文書を読む必要があるときに非常に便利です。\n無料枠: 現在は完全無料\n選び方のポイント：何を目的にするかで変わる 目的 おすすめツール 日常的な文章作成 ChatGPT / Claude リサーチ・調査 Perplexity AI / NotebookLM 画像作成（商用利用） Adobe Firefly プレゼン資料 Gamma / Canva AI 会議の議事録 Otter.ai 音楽・BGM Suno AIツール活用力を転職・副業のアピールポイントに 無料AIツールを使いこなして業務を自動化・効率化できる人材は、DX推進・IT・企画・マーケティング職で高く評価されます。今すぐ求人を確認してみましょう。dodaで求人を探す\nまとめ：まず3つ試してみる 15個一気に試す必要はありません。自分の業務や目的に最も近い3つを選んで、2週間使ってみてください。\n「これは使える」と感じたツールがあれば、有料プランへのアップグレードを検討するのが合理的です。無料枠で価値を確認してから投資する——これが最もリスクの少ないAIツールの始め方です。\n関連記事\nChatGPTを仕事で使う具体的な活用法10選 AIを使った副業の始め方完全ガイド 無料AI画像生成ツール比較2026年版 関連ツール AIツールを活用してフリーランス収入が増えたら適正時給を確認 → フリーランス報酬計算ツール 有料AIツールの月額を含む家計支出を見直す → 家計簿シミュレーター 安全なパスワードを即座に生成 → パスワード生成ツール 関連テンプレート この記事で紹介したテクニックをすぐ実践できるテンプレートはこちら：\nChatGPTプロンプト集100選 — コピペで即使えるプロンプト集 AI仕事術 完全ガイド — 50のAIワークフロー収録 AI副業スタートキット — AIで副収入を得る実践ガイド 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/posts/%E7%84%A1%E6%96%99-ai-%E3%83%84%E3%83%BC%E3%83%AB-%E3%81%8A%E3%81%99%E3%81%99%E3%82%81/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"無料で使えるaiツールおすすめ15選2026年版目的別に厳選\"\u003e無料で使えるAIツールおすすめ15選【2026年版・目的別に厳選】\u003c/h1\u003e\n\u003cp\u003e「AIを使ってみたいけど、まずはお金をかけずに試したい」——そう思うのは当然です。\u003c/p\u003e\n\u003cp\u003e実は2026年現在、高品質なAIツールの多くが無料で使えます。有料プランへのアップグレードを求めてくるものもありますが、無料枠でも十分実用的なものが揃っています。本記事では、筆者が実際に使ったうえで「これは本当に使える」と感じたツールを15個、目的別に紹介します。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"文章生成チャットai4選\"\u003e【文章生成・チャットAI】4選\u003c/h2\u003e\n\u003ch3 id=\"1-chatgpt無料版\"\u003e1. ChatGPT（無料版）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eURL:\u003c/strong\u003e chat.openai.com\u003c/p\u003e\n\u003cp\u003e説明不要の最定番。GPT-4oが無料でも使えるようになり、無料枠での実用性が大幅に向上しました。メール作成・要約・翻訳・コーディングなど、テキスト系の作業はほぼカバーできます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e無料枠の制限:\u003c/strong\u003e 1日の利用回数に上限あり。高負荷時は有料ユーザー優先\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめ用途:\u003c/strong\u003e 日常的な文章作成、アイデア出し、Q\u0026amp;A\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"2-claudeanthropic\"\u003e2. Claude（Anthropic）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eURL:\u003c/strong\u003e claude.ai\u003c/p\u003e\n\u003cp\u003e文章の質と自然さはChatGPTと並ぶか、それ以上と評価されることも多いです。長い文章の要約や、ニュアンスが重要な文章作成に特に強い印象です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e無料枠の制限:\u003c/strong\u003e 1日のメッセージ数に上限あり\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめ用途:\u003c/strong\u003e 長文の要約・分析、メール・文書作成\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"3-geminigoogle\"\u003e3. Gemini（Google）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eURL:\u003c/strong\u003e gemini.google.com\u003c/p\u003e\n\u003cp\u003eGoogleのAI。Googleドキュメントやスプレッドシートと連携できるのが強みです。GmailやGoogleドライブとの統合機能（Gemini for Google Workspace）は業務効率化に直結します。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e無料枠の制限:\u003c/strong\u003e 基本機能は無料、Workspace連携は有料プランが必要なケースあり\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめ用途:\u003c/strong\u003e Googleサービスのヘビーユーザー、ウェブ検索と組み合わせた調査\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"4-perplexity-ai\"\u003e4. Perplexity AI\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eURL:\u003c/strong\u003e perplexity.ai\u003c/p\u003e\n\u003cp\u003e「検索エンジンとAIの融合」と表現されるツール。情報の出所（引用元URL）を明示してくれるため、調査・リサーチ用途で信頼性が高い。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e無料枠の制限:\u003c/strong\u003e 高機能モデルは1日5回まで、通常モデルは無制限\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめ用途:\u003c/strong\u003e ファクトベースのリサーチ、最新情報の収集\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"画像生成ai3選\"\u003e【画像生成AI】3選\u003c/h2\u003e\n\u003ch3 id=\"5-adobe-firefly無料枠あり\"\u003e5. Adobe Firefly（無料枠あり）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eURL:\u003c/strong\u003e firefly.adobe.com\u003c/p\u003e\n\u003cp\u003eAdobeが提供する画像生成AI。商用利用を前提に設計されており、著作権問題が起きにくいのが最大の特徴です。月25クレジットまで無料。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめ用途:\u003c/strong\u003e ブログのサムネイル、SNS投稿用画像\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"6-dall-e-3chatgpt経由\"\u003e6. DALL-E 3（ChatGPT経由）\u003c/h3\u003e\n\u003cp\u003eChatGPTの無料版でも一部利用可能。テキストの指示だけで高品質な画像を生成できます。日本語での指示も通ります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめ用途:\u003c/strong\u003e プレゼン資料の挿絵、アイデアの可視化\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"7-canva-aimagic-media\"\u003e7. Canva AI（Magic Media）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eURL:\u003c/strong\u003e canva.com\u003c/p\u003e\n\u003cp\u003eデザインツール「Canva」に内蔵されたAI画像生成機能。デザインとシームレスに組み合わせられるため、SNS投稿やプレゼン資料の作成に便利です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e無料枠の制限:\u003c/strong\u003e 月50回まで無料\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eおすすめ用途:\u003c/strong\u003e SNS投稿、バナー・サムネイル作成\u003c/p\u003e","title":"無料で使えるAIツールおすすめ15選【2026年版・目的別に厳選】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n積立NISAで毎月いくら積み立てるべき？平均額と最適金額を徹底解説【2026年版】 「積立NISAを始めたいけど、毎月いくら積み立てればいいの？」「少なすぎると意味がない？多すぎると生活が苦しい？」そんな悩みを持つ方はとても多いです。積立額は多ければ多いほど将来の資産は増えますが、無理な金額を設定すると長続きしません。\nこの記事では以下のことがわかります。\n積立NISAで日本人が実際に積み立てている平均金額 年代別・年収別のおすすめ積立額の目安 積立額の決め方ステップと無理のない設定方法 毎月1万円・3万円・5万円で積み立てた場合のシミュレーション 積立NISAの毎月積立とは？基本を理解する 定義・仕組み 新NISAの「つみたて投資枠」を使った積立投資は、毎月一定額を自動的に投資信託・ETFへ投資する仕組みです。これを「ドルコスト平均法」といい、価格が高い時は少なく、安い時は多く自動購入されるため、長期的なリスク分散効果があります。\n新NISAつみたて投資枠の基本ルール\n項目 内容 年間投資上限 120万円（月最大10万円） 生涯非課税枠 1,800万円（成長投資枠と合算） 最低積立額 100円〜（証券会社による） 積立頻度 毎月・毎週・毎日（証券会社による） 投資対象 金融庁認定の投資信託・ETF 非課税期間 無期限 つみたて投資枠は年120万円（月10万円）が上限ですが、成長投資枠（年240万円）と合わせて最大年360万円まで非課税で投資できます。\nメリット・デメリット 積立投資のメリット\n少額（月100円）から始められる 自動積立設定で手間がかからない 感情に左右されず機械的に購入できる 時間分散によりリスクを低減できる 長期積立で複利効果が発揮される 積立投資のデメリット\n相場が急騰する局面では一括投資より劣ることがある 短期的には元本割れの可能性がある 少額すぎると最終的な資産額が小さい 積立を途中でやめると効果が半減する 積立NISA 毎月いくら？日本人の平均と目安 日本人の平均積立額 金融庁の調査（2025年度）によると、新NISAのつみたて投資枠を使っている人の月平均積立額は約3〜5万円と言われています。ただし、個人差が大きく以下のような分布があります。\n月積立額 割合（目安） 月1,000円未満 約10% 月1,000〜3,000円 約15% 月3,000〜10,000円 約25% 月10,000〜30,000円 約25% 月30,000〜50,000円 約15% 月50,000円以上 約10% 最初は少額から始めて徐々に増やしていく方が多いです。\n年代別おすすめ積立額の目安 年代 目安の月積立額 根拠・考え方 20代 5,000〜20,000円 収入は少ないが時間が最大の武器。少額でも早く始めることが重要 30代（子育て期） 10,000〜30,000円 教育費・住宅ローンを考慮しながら無理のない設定を 30代（独身・DINKS） 30,000〜100,000円 余裕資金が多い。年120万円の上限まで活用を検討 40代 20,000〜100,000円 老後まで20年以上あり複利効果が期待できる 50代 50,000〜100,000円 老後が近づき積立額を最大化する時期 年収別の積立額目安（手取りの10〜20%が基準） 年収 手取り月収（目安） おすすめ積立額 積立比率 300万円 約20万円 1〜2万円 5〜10% 400万円 約26万円 2〜5万円 8〜20% 500万円 約32万円 3〜6万円 10〜20% 700万円 約43万円 5〜10万円 12〜23% 1,000万円 約60万円 10万円（上限） 17% 積立NISAの積立額シミュレーション比較 月別シミュレーション（年率5%・20年間） 月積立額 20年後の投資元本 20年後の資産総額（年率5%） 運用益 月5,000円 120万円 約205万円 約85万円 月10,000円 240万円 約410万円 約170万円 月20,000円 480万円 約820万円 約340万円 月30,000円 720万円 約1,230万円 約510万円 月50,000円 1,200万円 約2,050万円 約850万円 月100,000円 2,400万円 約4,110万円 約1,710万円 ※年率5%は過去のグローバル株式の平均的なリターンを参考にした仮定値です。将来のリターンを保証するものではありません。\n積立期間別シミュレーション（月3万円・年率5%） 積立期間 投資元本 資産総額（年率5%） 10年 360万円 約465万円 20年 720万円 約1,234万円 30年 1,080万円 約2,495万円 40年 1,440万円 約4,564万円 早く始めるほど複利効果が大きいことがわかります。\n今すぐ積立を始める 選び方・注意点 チェックポイント：積立額を決める3つのステップ ステップ1: 毎月の自由になるお金を把握する 収入から固定費・変動費・緊急予備資金（3〜6ヶ月分）を差し引いた「余裕資金」を計算します。この金額を超えた積立設定は生活を圧迫します。\nステップ2: 目標額と期間を設定する 「60歳までに3,000万円の老後資金」「10年後に住宅購入資金500万円」など具体的な目標を決めると、必要な月積立額を逆算できます。\nステップ3: まず少額から始めて徐々に増やす 最初から満額（月10万円）を設定する必要はありません。月1〜3万円から始めて、昇給・ボーナスのタイミングで増額するのが長続きのコツです。\nよくある失敗 失敗1: 生活費を削って積立額を高く設定する 毎月ギリギリの生活で無理な積立額を設定すると、値下がり時や急な出費が重なった時に積立を停止してしまいます。「積立を止めない」ことが最も重要です。\n失敗2: 少なすぎて老後資金が不足する 月3,000円の積立では30年後でも約250万円にしかなりません。老後2,000万円問題を考えると、目標額に見合った積立額の設定が必要です。\n失敗3: 値下がりしたときに積立を止める 下落局面こそ安い価格でたくさん買えるチャンスです。積立を止めると「安い時に買う」機会を逃し、ドルコスト平均法の効果が失われます。\n失敗4: 賞与月だけ増額することを忘れる 新NISAでは積立額に加え、賞与月に成長投資枠で一括投資することで年間投資上限を有効活用できます。\n関連記事: NISA枠を使い切れない場合の対処法 よくある質問（FAQ） Q1. 積立NISAは月100円でも意味がありますか？ 金額が小さいほど最終資産額は小さくなりますが、「始める」ことに意味があります。100円でも習慣化できれば、収入が増えた時に増額しやすくなります。まず始めることが大切です。\nQ2. 月10万円（年間上限）を積み立てる必要はありますか？ 必ずしも上限まで積み立てる必要はありません。生活費と緊急資金を確保した上での余裕資金で積み立てましょう。\nQ3. 毎月の積立額は途中で変えられますか？ はい、変更できます。多くの証券会社でオンラインから変更手続きが可能です。ただし、変更が反映されるまで数週間かかる場合があります。\nQ4. ボーナス月に多く積み立てることはできますか？ つみたて投資枠では毎月均等の積立が基本ですが、成長投資枠（年240万円）を使えばボーナス時に一括投資することができます。\nQ5. 積立を一時停止することはできますか？ はい、積立設定を一時停止することは可能です。ただし、停止期間は非課税枠を使わないことになり、その分の生涯枠は使えなくなります（翌年に繰り越しはできません）。\nQ6. 毎月の積立日はいつにすればいいですか？ 給料日翌日（25日や翌月1日など）に設定することで、生活費を使い切る前に自動的に積立されます。「先取り貯蓄」の考え方と同じです。\nつみたてNISAを始めるなら、**楽天証券 **が人気No.1。100円から積立可能で、楽天ポイントも使えます。\nまとめ・行動の呼びかけ 積立NISAの月積立額に「正解」はありません。大切なのは「無理のない金額で長く続けること」です。まずは月5,000〜10,000円から始め、生活に余裕が出てきたら増額していきましょう。今日から積立設定をすることで、時間という最強の資産を味方につけることができます。\n今すぐ積立設定を始める 関連記事: 新NISAおすすめ銘柄 初心者向けガイド 関連ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール FIRE（経済的自立）までの年数を計算 → FIREシミュレーター 毎月の積立額でどれだけ増えるかシミュレーション → NISAシミュレーター 積立の複利効果を年数別に確認 → 複利計算シミュレーター 配当型ファンドの年間収入を計算 → 配当金シミュレーター 貯蓄目標までの期間を計算 → 貯蓄目標シミュレーター 教育費の総額を計算 → 教育費シミュレーター インフレによる購買力低下を計算 → インフレ計算ツール ※本記事は情報提供を目的としており、特定の金融商品の購入・売却を推奨するものではありません。投資判断はご自身の責任で行ってください。最新情報は各公式サイトでご確認ください。\n関連テンプレート 資産運用・家計管理をすぐ始められるテンプレートはこちら：\nExcel家計簿テンプレート — 収支を自動計算・見える化 AI仕事術ガイド — AIで時間を節約して投資に回す ","permalink":"https://productivity-works.com/ja/posts/%E7%A9%8D%E7%AB%8Bnisa-%E6%AF%8E%E6%9C%88%E3%81%84%E3%81%8F%E3%82%89-%E5%B9%B3%E5%9D%87/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"積立nisaで毎月いくら積み立てるべき平均額と最適金額を徹底解説2026年版\"\u003e積立NISAで毎月いくら積み立てるべき？平均額と最適金額を徹底解説【2026年版】\u003c/h1\u003e\n\u003cp\u003e「積立NISAを始めたいけど、毎月いくら積み立てればいいの？」「少なすぎると意味がない？多すぎると生活が苦しい？」そんな悩みを持つ方はとても多いです。積立額は多ければ多いほど将来の資産は増えますが、無理な金額を設定すると長続きしません。\u003c/p\u003e\n\u003cp\u003eこの記事では以下のことがわかります。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e積立NISAで日本人が実際に積み立てている平均金額\u003c/li\u003e\n\u003cli\u003e年代別・年収別のおすすめ積立額の目安\u003c/li\u003e\n\u003cli\u003e積立額の決め方ステップと無理のない設定方法\u003c/li\u003e\n\u003cli\u003e毎月1万円・3万円・5万円で積み立てた場合のシミュレーション\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"積立nisaの毎月積立とは基本を理解する\"\u003e積立NISAの毎月積立とは？基本を理解する\u003c/h2\u003e\n\u003ch3 id=\"定義仕組み\"\u003e定義・仕組み\u003c/h3\u003e\n\u003cp\u003e新NISAの「つみたて投資枠」を使った積立投資は、毎月一定額を自動的に投資信託・ETFへ投資する仕組みです。これを「ドルコスト平均法」といい、価格が高い時は少なく、安い時は多く自動購入されるため、長期的なリスク分散効果があります。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e新NISAつみたて投資枠の基本ルール\u003c/strong\u003e\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e内容\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e年間投資上限\u003c/td\u003e\n          \u003ctd\u003e120万円（月最大10万円）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e生涯非課税枠\u003c/td\u003e\n          \u003ctd\u003e1,800万円（成長投資枠と合算）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e最低積立額\u003c/td\u003e\n          \u003ctd\u003e100円〜（証券会社による）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e積立頻度\u003c/td\u003e\n          \u003ctd\u003e毎月・毎週・毎日（証券会社による）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e投資対象\u003c/td\u003e\n          \u003ctd\u003e金融庁認定の投資信託・ETF\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e非課税期間\u003c/td\u003e\n          \u003ctd\u003e無期限\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eつみたて投資枠は年120万円（月10万円）が上限ですが、成長投資枠（年240万円）と合わせて最大年360万円まで非課税で投資できます。\u003c/p\u003e\n\u003ch3 id=\"メリットデメリット\"\u003eメリット・デメリット\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e積立投資のメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e少額（月100円）から始められる\u003c/li\u003e\n\u003cli\u003e自動積立設定で手間がかからない\u003c/li\u003e\n\u003cli\u003e感情に左右されず機械的に購入できる\u003c/li\u003e\n\u003cli\u003e時間分散によりリスクを低減できる\u003c/li\u003e\n\u003cli\u003e長期積立で複利効果が発揮される\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e積立投資のデメリット\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e相場が急騰する局面では一括投資より劣ることがある\u003c/li\u003e\n\u003cli\u003e短期的には元本割れの可能性がある\u003c/li\u003e\n\u003cli\u003e少額すぎると最終的な資産額が小さい\u003c/li\u003e\n\u003cli\u003e積立を途中でやめると効果が半減する\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"積立nisa-毎月いくら日本人の平均と目安\"\u003e積立NISA 毎月いくら？日本人の平均と目安\u003c/h2\u003e\n\u003ch3 id=\"日本人の平均積立額\"\u003e日本人の平均積立額\u003c/h3\u003e\n\u003cp\u003e金融庁の調査（2025年度）によると、新NISAのつみたて投資枠を使っている人の月平均積立額は約3〜5万円と言われています。ただし、個人差が大きく以下のような分布があります。\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e月積立額\u003c/th\u003e\n          \u003cth\u003e割合（目安）\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月1,000円未満\u003c/td\u003e\n          \u003ctd\u003e約10%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月1,000〜3,000円\u003c/td\u003e\n          \u003ctd\u003e約15%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月3,000〜10,000円\u003c/td\u003e\n          \u003ctd\u003e約25%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月10,000〜30,000円\u003c/td\u003e\n          \u003ctd\u003e約25%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月30,000〜50,000円\u003c/td\u003e\n          \u003ctd\u003e約15%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月50,000円以上\u003c/td\u003e\n          \u003ctd\u003e約10%\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e最初は少額から始めて徐々に増やしていく方が多いです。\u003c/p\u003e\n\u003ch3 id=\"年代別おすすめ積立額の目安\"\u003e年代別おすすめ積立額の目安\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e年代\u003c/th\u003e\n          \u003cth\u003e目安の月積立額\u003c/th\u003e\n          \u003cth\u003e根拠・考え方\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e20代\u003c/td\u003e\n          \u003ctd\u003e5,000〜20,000円\u003c/td\u003e\n          \u003ctd\u003e収入は少ないが時間が最大の武器。少額でも早く始めることが重要\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e30代（子育て期）\u003c/td\u003e\n          \u003ctd\u003e10,000〜30,000円\u003c/td\u003e\n          \u003ctd\u003e教育費・住宅ローンを考慮しながら無理のない設定を\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e30代（独身・DINKS）\u003c/td\u003e\n          \u003ctd\u003e30,000〜100,000円\u003c/td\u003e\n          \u003ctd\u003e余裕資金が多い。年120万円の上限まで活用を検討\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e40代\u003c/td\u003e\n          \u003ctd\u003e20,000〜100,000円\u003c/td\u003e\n          \u003ctd\u003e老後まで20年以上あり複利効果が期待できる\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e50代\u003c/td\u003e\n          \u003ctd\u003e50,000〜100,000円\u003c/td\u003e\n          \u003ctd\u003e老後が近づき積立額を最大化する時期\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"年収別の積立額目安手取りの1020が基準\"\u003e年収別の積立額目安（手取りの10〜20%が基準）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e年収\u003c/th\u003e\n          \u003cth\u003e手取り月収（目安）\u003c/th\u003e\n          \u003cth\u003eおすすめ積立額\u003c/th\u003e\n          \u003cth\u003e積立比率\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e300万円\u003c/td\u003e\n          \u003ctd\u003e約20万円\u003c/td\u003e\n          \u003ctd\u003e1〜2万円\u003c/td\u003e\n          \u003ctd\u003e5〜10%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e400万円\u003c/td\u003e\n          \u003ctd\u003e約26万円\u003c/td\u003e\n          \u003ctd\u003e2〜5万円\u003c/td\u003e\n          \u003ctd\u003e8〜20%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e500万円\u003c/td\u003e\n          \u003ctd\u003e約32万円\u003c/td\u003e\n          \u003ctd\u003e3〜6万円\u003c/td\u003e\n          \u003ctd\u003e10〜20%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e700万円\u003c/td\u003e\n          \u003ctd\u003e約43万円\u003c/td\u003e\n          \u003ctd\u003e5〜10万円\u003c/td\u003e\n          \u003ctd\u003e12〜23%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1,000万円\u003c/td\u003e\n          \u003ctd\u003e約60万円\u003c/td\u003e\n          \u003ctd\u003e10万円（上限）\u003c/td\u003e\n          \u003ctd\u003e17%\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"積立nisaの積立額シミュレーション比較\"\u003e積立NISAの積立額シミュレーション比較\u003c/h2\u003e\n\u003ch3 id=\"月別シミュレーション年率520年間\"\u003e月別シミュレーション（年率5%・20年間）\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e月積立額\u003c/th\u003e\n          \u003cth\u003e20年後の投資元本\u003c/th\u003e\n          \u003cth\u003e20年後の資産総額（年率5%）\u003c/th\u003e\n          \u003cth\u003e運用益\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月5,000円\u003c/td\u003e\n          \u003ctd\u003e120万円\u003c/td\u003e\n          \u003ctd\u003e約205万円\u003c/td\u003e\n          \u003ctd\u003e約85万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月10,000円\u003c/td\u003e\n          \u003ctd\u003e240万円\u003c/td\u003e\n          \u003ctd\u003e約410万円\u003c/td\u003e\n          \u003ctd\u003e約170万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月20,000円\u003c/td\u003e\n          \u003ctd\u003e480万円\u003c/td\u003e\n          \u003ctd\u003e約820万円\u003c/td\u003e\n          \u003ctd\u003e約340万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月30,000円\u003c/td\u003e\n          \u003ctd\u003e720万円\u003c/td\u003e\n          \u003ctd\u003e約1,230万円\u003c/td\u003e\n          \u003ctd\u003e約510万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月50,000円\u003c/td\u003e\n          \u003ctd\u003e1,200万円\u003c/td\u003e\n          \u003ctd\u003e約2,050万円\u003c/td\u003e\n          \u003ctd\u003e約850万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e月100,000円\u003c/td\u003e\n          \u003ctd\u003e2,400万円\u003c/td\u003e\n          \u003ctd\u003e約4,110万円\u003c/td\u003e\n          \u003ctd\u003e約1,710万円\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※年率5%は過去のグローバル株式の平均的なリターンを参考にした仮定値です。将来のリターンを保証するものではありません。\u003c/p\u003e","title":"積立NISA 毎月いくら積み立てるべき？平均額と最適金額を徹底解説【2026年版】"},{"content":" プリセット 毎分 毎時0分 毎日0時 毎週月曜9時 毎月1日0時 5分ごと 平日8〜18時毎時 毎日23:30 Cron式 コピー ビジュアルビルダー 次の10回の実行時刻 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → Unixタイムスタンプを変換 → Unixタイムスタンプ変換ツール Gitコマンドを生成 → Gitコマンドジェネレーター ファイル権限を計算 → Chmod計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/cron-expression-builder/","summary":"\u003cdiv id=\"cr-app\"\u003e\n\u003cstyle\u003e\n#cr-app *,#cr-app *::before,#cr-app *::after{box-sizing:border-box;margin:0;padding:0}\n#cr-app{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;color:#1e293b;max-width:820px;margin:0 auto;padding:12px 4px}\n#cr-app h2{font-size:1.1rem;font-weight:700;color:#334155;margin-bottom:12px}\n#cr-app .cr-card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:18px;margin-bottom:14px;box-shadow:0 1px 4px rgba(0,0,0,.06)}\n/* Presets */\n#cr-app .cr-presets{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:4px}\n#cr-app .cr-preset-btn{padding:6px 13px;border:1.5px solid #94a3b8;border-radius:20px;background:#f8fafc;color:#334155;font-size:12.5px;font-weight:600;cursor:pointer;transition:all .15s}\n#cr-app .cr-preset-btn:hover{border-color:#475569;background:#e2e8f0}\n/* Cron expression */\n#cr-app .cr-expr-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\n#cr-app .cr-expr-input{flex:1;min-width:200px;font-family:'JetBrains Mono',Consolas,monospace;font-size:1.25rem;font-weight:700;color:#0f172a;background:#f1f5f9;border:2px solid #cbd5e1;border-radius:8px;padding:10px 14px;letter-spacing:.08em;outline:none;transition:border-color .15s}\n#cr-app .cr-expr-input:focus{border-color:#3b82f6;background:#fff}\n#cr-app .cr-expr-input.cr-invalid{border-color:#ef4444;background:#fef2f2}\n#cr-app .cr-copy-btn{padding:10px 18px;background:#475569;color:#fff;border:none;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;white-space:nowrap;transition:background .15s}\n#cr-app .cr-copy-btn:hover{background:#334155}\n#cr-app .cr-copy-btn.copied{background:#16a34a}\n/* Validation badge */\n#cr-app .cr-badge{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:20px;font-size:12px;font-weight:700;margin-top:8px}\n#cr-app .cr-badge-ok{background:#dcfce7;color:#166534}\n#cr-app .cr-badge-err{background:#fee2e2;color:#991b1b}\n/* Description */\n#cr-app .cr-desc{background:#f0f9ff;border:1px solid #bae6fd;border-radius:8px;padding:12px 16px;font-size:14px;font-weight:600;color:#0369a1;margin-top:10px;min-height:36px}\n/* Field builder */\n#cr-app .cr-fields{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}\n#cr-app .cr-field{background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:12px}\n#cr-app .cr-field-label{font-size:11px;font-weight:700;text-transform:uppercase;color:#64748b;letter-spacing:.06em;margin-bottom:8px;display:flex;align-items:center;gap:6px}\n#cr-app .cr-field-label span.cr-tag{background:#e2e8f0;color:#475569;border-radius:4px;padding:1px 6px;font-size:10px;font-weight:700}\n#cr-app .cr-field select,#cr-app .cr-field input{width:100%;padding:6px 8px;border:1px solid #cbd5e1;border-radius:6px;font-size:13px;color:#1e293b;background:#fff;outline:none;margin-top:4px}\n#cr-app .cr-field select:focus,#cr-app .cr-field input:focus{border-color:#3b82f6}\n#cr-app .cr-field .cr-range-row{display:flex;align-items:center;gap:4px;margin-top:4px}\n#cr-app .cr-field .cr-range-row input{flex:1;min-width:0}\n#cr-app .cr-field .cr-range-row span{font-size:12px;color:#64748b;flex-shrink:0}\n/* Next executions */\n#cr-app .cr-next-list{list-style:none;counter-reset:cr-ctr}\n#cr-app .cr-next-list li{counter-increment:cr-ctr;display:flex;align-items:baseline;gap:8px;padding:6px 10px;border-bottom:1px solid #f1f5f9;font-size:13px}\n#cr-app .cr-next-list li:last-child{border-bottom:none}\n#cr-app .cr-next-list li::before{content:counter(cr-ctr);display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:#e2e8f0;color:#475569;font-size:11px;font-weight:700;flex-shrink:0}\n#cr-app .cr-next-list li .cr-dt{font-family:monospace;color:#0f172a;font-weight:600;font-size:13px}\n#cr-app .cr-next-list li .cr-rel{color:#94a3b8;font-size:12px}\n#cr-app .cr-err-msg{color:#b91c1c;font-size:13px;padding:8px 0}\n@media(max-width:540px){\n  #cr-app .cr-expr-input{font-size:1rem}\n  #cr-app .cr-fields{grid-template-columns:1fr 1fr}\n}\n\u003c/style\u003e\n\u003c!-- Presets --\u003e\n\u003cdiv class=\"cr-card\"\u003e\n  \u003ch2\u003eプリセット\u003c/h2\u003e\n  \u003cdiv class=\"cr-presets\"\u003e\n    \u003cbutton class=\"cr-preset-btn\" data-cron=\"* * * * *\"\u003e毎分\u003c/button\u003e\n    \u003cbutton class=\"cr-preset-btn\" data-cron=\"0 * * * *\"\u003e毎時0分\u003c/button\u003e\n    \u003cbutton class=\"cr-preset-btn\" data-cron=\"0 0 * * *\"\u003e毎日0時\u003c/button\u003e\n    \u003cbutton class=\"cr-preset-btn\" data-cron=\"0 9 * * 1\"\u003e毎週月曜9時\u003c/button\u003e\n    \u003cbutton class=\"cr-preset-btn\" data-cron=\"0 0 1 * *\"\u003e毎月1日0時\u003c/button\u003e\n    \u003cbutton class=\"cr-preset-btn\" data-cron=\"*/5 * * * *\"\u003e5分ごと\u003c/button\u003e\n    \u003cbutton class=\"cr-preset-btn\" data-cron=\"0 8-18 * * 1-5\"\u003e平日8〜18時毎時\u003c/button\u003e\n    \u003cbutton class=\"cr-preset-btn\" data-cron=\"30 23 * * *\"\u003e毎日23:30\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Expression --\u003e\n\u003cdiv class=\"cr-card\"\u003e\n  \u003ch2\u003eCron式\u003c/h2\u003e\n  \u003cdiv class=\"cr-expr-row\"\u003e\n    \u003cinput id=\"cr-expr\" class=\"cr-expr-input\" type=\"text\" value=\"* * * * *\" spellcheck=\"false\" autocomplete=\"off\" /\u003e\n    \u003cbutton id=\"cr-copy\" class=\"cr-copy-btn\"\u003eコピー\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"cr-badge-wrap\"\u003e\u003c/div\u003e\n  \u003cdiv id=\"cr-desc\" class=\"cr-desc\" style=\"margin-top:10px\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Visual Builder --\u003e\n\u003cdiv class=\"cr-card\"\u003e\n  \u003ch2\u003eビジュアルビルダー\u003c/h2\u003e\n  \u003cdiv class=\"cr-fields\" id=\"cr-fields\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Next Executions --\u003e\n\u003cdiv class=\"cr-card\"\u003e\n  \u003ch2\u003e次の10回の実行時刻\u003c/h2\u003e\n  \u003cdiv id=\"cr-next\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n'use strict';\n\n/* ── field metadata ── */\nconst FIELDS=[\n  {id:'min', label:'分', tag:'0–59', min:0, max:59},\n  {id:'hour',label:'時', tag:'0–23', min:0, max:23},\n  {id:'dom', label:'日',  tag:'1–31', min:1, max:31},\n  {id:'mon', label:'月', tag:'1–12', min:1, max:12},\n  {id:'dow', label:'曜日',tag:'0–6', min:0, max:6},\n];\nconst MONTHS_JP=['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'];\nconst DOWS_JP=['日','月','火','水','木','金','土'];\n\n/* ── state ── */\nlet updating=false;\n\n/* ── DOM refs ── */\nconst exprEl=document.getElementById('cr-expr');\nconst badgeWrap=document.getElementById('cr-badge-wrap');\nconst descEl=document.getElementById('cr-desc');\nconst nextEl=document.getElementById('cr-next');\nconst copyBtn=document.getElementById('cr-copy');\nconst fieldsContainer=document.getElementById('cr-fields');\n\n/* ── build visual fields ── */\nfunction buildFields(){\n  fieldsContainer.innerHTML='';\n  FIELDS.forEach(f=\u003e{\n    const div=document.createElement('div');\n    div.className='cr-field';\n    div.innerHTML=`\n      \u003cdiv class=\"cr-field-label\"\u003e${f.label} \u003cspan class=\"cr-tag\"\u003e${f.tag}\u003c/span\u003e\u003c/div\u003e\n      \u003cselect id=\"cr-sel-${f.id}\" data-field=\"${f.id}\"\u003e\n        \u003coption value=\"every\"\u003e毎回 (*)\u003c/option\u003e\n        \u003coption value=\"specific\"\u003e指定\u003c/option\u003e\n        \u003coption value=\"range\"\u003e範囲\u003c/option\u003e\n        \u003coption value=\"step\"\u003e間隔\u003c/option\u003e\n      \u003c/select\u003e\n      \u003cdiv id=\"cr-ctrl-${f.id}\" style=\"margin-top:6px\"\u003e\u003c/div\u003e\n    `;\n    fieldsContainer.appendChild(div);\n    const sel=div.querySelector('select');\n    sel.addEventListener('change',()=\u003eonModeChange(f));\n    renderControl(f,'every');\n  });\n}\n\nfunction renderControl(f,mode,vals){\n  const ctrl=document.getElementById(`cr-ctrl-${f.id}`);\n  ctrl.innerHTML='';\n  if(mode==='every') return;\n  if(mode==='specific'){\n    const inp=document.createElement('input');\n    inp.type='number';inp.min=f.min;inp.max=f.max;\n    inp.placeholder=`${f.min}〜${f.max}`;\n    inp.value=vals\u0026\u0026vals.v!==undefined?vals.v:'';\n    inp.dataset.field=f.id;\n    inp.addEventListener('input',onControlChange);\n    ctrl.appendChild(inp);\n  } else if(mode==='range'){\n    const row=document.createElement('div');\n    row.className='cr-range-row';\n    ['from','to'].forEach((k,i)=\u003e{\n      const inp=document.createElement('input');\n      inp.type='number';inp.min=f.min;inp.max=f.max;\n      inp.placeholder=i===0?String(f.min):String(f.max);\n      inp.value=vals\u0026\u0026vals[k]!==undefined?vals[k]:'';\n      inp.dataset.field=f.id;inp.dataset.part=k;\n      inp.addEventListener('input',onControlChange);\n      row.appendChild(inp);\n      if(i===0){const sp=document.createElement('span');sp.textContent='〜';row.appendChild(sp);}\n    });\n    ctrl.appendChild(row);\n  } else if(mode==='step'){\n    const row=document.createElement('div');\n    row.className='cr-range-row';\n    ['base','step'].forEach((k,i)=\u003e{\n      const inp=document.createElement('input');\n      inp.type='number';inp.min=i===0?f.min:1;inp.max=f.max;\n      inp.placeholder=i===0?'開始':' 間隔';\n      inp.value=vals\u0026\u0026vals[k]!==undefined?vals[k]:'';\n      inp.dataset.field=f.id;inp.dataset.part=k;\n      inp.addEventListener('input',onControlChange);\n      row.appendChild(inp);\n      if(i===0){const sp=document.createElement('span');sp.textContent='/';row.appendChild(sp);}\n    });\n    ctrl.appendChild(row);\n  }\n}\n\nfunction onModeChange(f){\n  const mode=document.getElementById(`cr-sel-${f.id}`).value;\n  renderControl(f,mode);\n  if(!updating) buildExprFromFields();\n}\n\nfunction onControlChange(){\n  if(!updating) buildExprFromFields();\n}\n\n/* ── build expr from fields ── */\nfunction buildExprFromFields(){\n  const parts=FIELDS.map(f=\u003e{\n    const mode=document.getElementById(`cr-sel-${f.id}`).value;\n    const ctrl=document.getElementById(`cr-ctrl-${f.id}`);\n    if(mode==='every') return '*';\n    if(mode==='specific'){\n      const v=ctrl.querySelector('input')?.value.trim();\n      return v!==''\u0026\u0026!isNaN(v)?String(parseInt(v,10)):'*';\n    }\n    if(mode==='range'){\n      const inputs=ctrl.querySelectorAll('input');\n      const from=inputs[0]?.value.trim();\n      const to=inputs[1]?.value.trim();\n      if(from!==''\u0026\u0026to!==''\u0026\u0026!isNaN(from)\u0026\u0026!isNaN(to)) return `${parseInt(from,10)}-${parseInt(to,10)}`;\n      return '*';\n    }\n    if(mode==='step'){\n      const inputs=ctrl.querySelectorAll('input');\n      const base=inputs[0]?.value.trim();\n      const step=inputs[1]?.value.trim();\n      if(step!==''\u0026\u0026!isNaN(step)){\n        const b=base!==''\u0026\u0026!isNaN(base)?String(parseInt(base,10)):'*';\n        return `${b}/${parseInt(step,10)}`;\n      }\n      return '*';\n    }\n    return '*';\n  });\n  updating=true;\n  exprEl.value=parts.join(' ');\n  updating=false;\n  refresh();\n}\n\n/* ── parse \u0026 validate ── */\nfunction parseField(tok,min,max){\n  if(tok==='*') return {type:'every'};\n  // step: base/step\n  if(tok.includes('/')){\n    const [b,s]=tok.split('/');\n    const base=b==='*'?min:parseInt(b,10);\n    const step=parseInt(s,10);\n    if(isNaN(base)||isNaN(step)||step\u003c1||base\u003cmin||base\u003emax) return null;\n    return {type:'step',base,step};\n  }\n  // range\n  if(tok.includes('-')){\n    const [a,b]=tok.split('-');\n    const from=parseInt(a,10),to=parseInt(b,10);\n    if(isNaN(from)||isNaN(to)||from\u003cmin||to\u003emax||from\u003eto) return null;\n    return {type:'range',from,to};\n  }\n  // list (basic: single value)\n  const v=parseInt(tok,10);\n  if(isNaN(v)||v\u003cmin||v\u003emax) return null;\n  return {type:'specific',v};\n}\n\nfunction validate(expr){\n  const parts=expr.trim().split(/\\s+/);\n  if(parts.length!==5) return {ok:false,msg:'フィールドは5つ必要です（分 時 日 月 曜日）'};\n  const parsed=[];\n  for(let i=0;i\u003c5;i++){\n    const r=parseField(parts[i],FIELDS[i].min,FIELDS[i].max);\n    if(!r) return {ok:false,msg:`「${FIELDS[i].label}」フィールドの値が無効です: ${parts[i]}`};\n    parsed.push(r);\n  }\n  return {ok:true,parts,parsed};\n}\n\n/* ── describe ── */\nfunction describeField(p,f){\n  if(p.type==='every') return null;\n  if(p.type==='specific'){\n    if(f.id==='dow') return DOWS_JP[p.v]+'曜日';\n    if(f.id==='mon') return MONTHS_JP[p.v-1];\n    return `${f.label}=${p.v}`;\n  }\n  if(p.type==='range'){\n    if(f.id==='dow') return `${DOWS_JP[p.from]}〜${DOWS_JP[p.to]}曜日`;\n    if(f.id==='mon') return `${MONTHS_JP[p.from-1]}〜${MONTHS_JP[p.to-1]}`;\n    return `${f.label}${p.from}〜${p.to}`;\n  }\n  if(p.type==='step'){\n    const base=p.base===FIELDS[FIELDS.findIndex(f2=\u003ef2===f)].min\u0026\u0026p.base===FIELDS[FIELDS.findIndex(f2=\u003ef2===f)].min?'':p.base;\n    if(f.id==='min') return `${p.step}分ごと${base!==''?`（${base}分から）`:''}`;\n    if(f.id==='hour') return `${p.step}時間ごと`;\n    return `${f.label}${p.step}ごと`;\n  }\n  return null;\n}\n\nfunction describe(v){\n  const desc=validate(v);\n  if(!desc.ok) return '（無効な式）';\n  const {parsed}=desc;\n  // Special cases\n  if(parsed.every(p=\u003ep.type==='every')) return '毎分実行';\n  const mins=parsed[0],hrs=parsed[1],dom=parsed[2],mon=parsed[3],dow=parsed[4];\n  // step-min only\n  if(mins.type==='step'\u0026\u0026hrs.type==='every'\u0026\u0026dom.type==='every'\u0026\u0026mon.type==='every'\u0026\u0026dow.type==='every'){\n    return `${mins.step}分ごとに実行`;\n  }\n  // every hour at specific min\n  if(mins.type==='specific'\u0026\u0026hrs.type==='every'\u0026\u0026dom.type==='every'\u0026\u0026mon.type==='every'\u0026\u0026dow.type==='every'){\n    return `毎時${mins.v}分に実行`;\n  }\n  // daily at specific time\n  if(mins.type==='specific'\u0026\u0026hrs.type==='specific'\u0026\u0026dom.type==='every'\u0026\u0026mon.type==='every'\u0026\u0026dow.type==='every'){\n    return `毎日 ${String(hrs.v).padStart(2,'0')}:${String(mins.v).padStart(2,'0')} に実行`;\n  }\n  // weekly\n  if(mins.type==='specific'\u0026\u0026hrs.type==='specific'\u0026\u0026dom.type==='every'\u0026\u0026mon.type==='every'\u0026\u0026dow.type!=='every'){\n    const dowDesc=dow.type==='specific'?DOWS_JP[dow.v]+'曜日':dow.type==='range'?`${DOWS_JP[dow.from]}〜${DOWS_JP[dow.to]}曜日`:'指定曜日';\n    return `毎週${dowDesc} ${String(hrs.v).padStart(2,'0')}:${String(mins.v).padStart(2,'0')} に実行`;\n  }\n  // monthly\n  if(mins.type==='specific'\u0026\u0026hrs.type==='specific'\u0026\u0026dom.type==='specific'\u0026\u0026mon.type==='every'\u0026\u0026dow.type==='every'){\n    return `毎月${dom.v}日 ${String(hrs.v).padStart(2,'0')}:${String(mins.v).padStart(2,'0')} に実行`;\n  }\n  // weekdays\n  if(dow.type==='range'\u0026\u0026dow.from===1\u0026\u0026dow.to===5\u0026\u0026dom.type==='every'){\n    const timeStr=hrs.type==='specific'\u0026\u0026mins.type==='specific'?` ${String(hrs.v).padStart(2,'0')}:${String(mins.v).padStart(2,'0')}`:'';\n    return `平日（月〜金）${timeStr} に実行`;\n  }\n  // fallback\n  const parts=FIELDS.map((f,i)=\u003edescribeField(parsed[i],f)).filter(Boolean);\n  return parts.length?parts.join('、')+'に実行':'スケジュール実行';\n}\n\n/* ── next executions ── */\nfunction matchField(p,v){\n  if(p.type==='every') return true;\n  if(p.type==='specific') return v===p.v;\n  if(p.type==='range') return v\u003e=p.from\u0026\u0026v\u003c=p.to;\n  if(p.type==='step'){\n    if(v\u003cp.base) return false;\n    return (v-p.base)%p.step===0;\n  }\n  return false;\n}\n\nfunction nextExecutions(expr,count){\n  const res=validate(expr);\n  if(!res.ok) return [];\n  const {parsed}=res;\n  const [pMin,pHr,pDom,pMon,pDow]=parsed;\n  const results=[];\n  const now=new Date();\n  // start from next minute\n  const start=new Date(now.getFullYear(),now.getMonth(),now.getDate(),now.getHours(),now.getMinutes()+1,0,0);\n  let cur=new Date(start);\n  const limit=new Date(cur.getTime()+366*24*60*60*1000);\n  while(results.length\u003ccount\u0026\u0026cur\u003climit){\n    const m=cur.getMinutes();\n    const h=cur.getHours();\n    const d=cur.getDate();\n    const mo=cur.getMonth()+1;\n    const dw=cur.getDay();\n    if(matchField(pMon,mo)\u0026\u0026matchField(pDom,d)\u0026\u0026matchField(pDow,dw)\u0026\u0026matchField(pHr,h)\u0026\u0026matchField(pMin,m)){\n      results.push(new Date(cur));\n    }\n    cur=new Date(cur.getTime()+60000);\n  }\n  return results;\n}\n\nfunction relTime(d){\n  const diff=Math.round((d-Date.now())/60000);\n  if(diff\u003c1) return '間もなく';\n  if(diff\u003c60) return `約${diff}分後`;\n  const h=Math.round(diff/60);\n  if(h\u003c24) return `約${h}時間後`;\n  return `約${Math.round(h/24)}日後`;\n}\n\n/* ── refresh UI ── */\nfunction refresh(){\n  const expr=exprEl.value.trim();\n  const res=validate(expr);\n  // badge\n  if(res.ok){\n    exprEl.classList.remove('cr-invalid');\n    badgeWrap.innerHTML='\u003cspan class=\"cr-badge cr-badge-ok\"\u003e✓ 有効なCron式\u003c/span\u003e';\n  } else {\n    exprEl.classList.add('cr-invalid');\n    badgeWrap.innerHTML=`\u003cspan class=\"cr-badge cr-badge-err\"\u003e✗ ${escHtml(res.msg)}\u003c/span\u003e`;\n  }\n  // description\n  descEl.textContent=describe(expr);\n  // next executions\n  if(res.ok){\n    const nexts=nextExecutions(expr,10);\n    if(nexts.length===0){\n      nextEl.innerHTML='\u003cp class=\"cr-err-msg\"\u003e今後1年以内の実行予定が見つかりませんでした。\u003c/p\u003e","title":"Cron式ビルダー"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nパーセント計算ツール｜割引・値上げ率・割合を自動計算【無料】 割引セールの値引き額、値上がりした商品の新価格、2つの数字の割合など、日常でよく使うパーセント計算を5つのモードで瞬時に計算できる無料ツールです。スライダーや入力フォームで直感的に操作でき、計算式もあわせて表示するので仕組みも一目でわかります。\nAのB%はいくら？ AはBの何%？ 変化率 割引計算 値上げ計算 数値 A パーセント B（%） 数値 A（部分） 数値 B（全体） 変更前の値 変更後の値 元の価格（円） 割引率 20% 10% OFF 20% OFF 30% OFF 半額（50%） 元の価格（円） 値上げ率 10% 身近な例：100円の商品が10%値上げで 110円 になります。 パーセント早見表 よくある金額に対する各割引・割合の計算結果一覧です。\n金額 10% 20% 30% 50% ※各セルの数値は「その金額の○%に相当する額（円）」です。\n関連ツール 月々の支出バランスを見直す → 家計簿シミュレーター 複利の効果を計算 → 複利計算シミュレーター サブスクの年間コストを計算 → サブスク管理計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 Excel関数よく使うもの一覧【2026年版・コピペ即使える】仕事で役立つ厳選50選 飲食店の原価率計算をExcelで簡単管理する方法2026 飲食店経営Excel管理テンプレート活用ガイド2026 ","permalink":"https://productivity-works.com/ja/tools/percent-calculator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"パーセント計算ツール割引値上げ率割合を自動計算無料\"\u003eパーセント計算ツール｜割引・値上げ率・割合を自動計算【無料】\u003c/h1\u003e\n\u003cp\u003e割引セールの値引き額、値上がりした商品の新価格、2つの数字の割合など、日常でよく使うパーセント計算を5つのモードで瞬時に計算できる無料ツールです。スライダーや入力フォームで直感的に操作でき、計算式もあわせて表示するので仕組みも一目でわかります。\u003c/p\u003e\n\u003cdiv id=\"percent-calculator-app\" style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; max-width: 680px; margin: 0 auto;\"\u003e\n\u003cstyle\u003e\n#percent-calculator-app * { box-sizing: border-box; }\n#percent-calculator-app .pc-tabs { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 0; }\n#percent-calculator-app .pc-tab-btn {\n  padding: 8px 14px; border: 2px solid #e0e0e0; border-bottom: none;\n  background: #f5f5f5; color: #555; cursor: pointer; border-radius: 6px 6px 0 0;\n  font-size: 13px; font-weight: 600; transition: all 0.15s; white-space: nowrap;\n}\n#percent-calculator-app .pc-tab-btn:hover { background: #ede9fe; border-color: #a5b4fc; color: #4f46e5; }\n#percent-calculator-app .pc-tab-btn.active { background: #4f46e5; color: #fff; border-color: #4f46e5; }\n#percent-calculator-app .pc-panel {\n  display: none; background: #fff; border: 2px solid #4f46e5;\n  border-radius: 0 6px 6px 6px; padding: 24px; margin-bottom: 24px;\n}\n#percent-calculator-app .pc-panel.active { display: block; }\n#percent-calculator-app .pc-field { margin-bottom: 16px; }\n#percent-calculator-app .pc-field label {\n  display: block; font-size: 13px; font-weight: 600; color: #374151; margin-bottom: 6px;\n}\n#percent-calculator-app .pc-field input[type=\"number\"] {\n  width: 100%; padding: 10px 14px; border: 1.5px solid #d1d5db; border-radius: 8px;\n  font-size: 16px; outline: none; transition: border-color 0.15s;\n}\n#percent-calculator-app .pc-field input[type=\"number\"]:focus { border-color: #4f46e5; box-shadow: 0 0 0 3px rgba(79,70,229,0.1); }\n#percent-calculator-app .pc-field input[type=\"range\"] {\n  width: 100%; accent-color: #4f46e5; height: 6px; cursor: pointer;\n}\n#percent-calculator-app .pc-slider-row { display: flex; align-items: center; gap: 12px; }\n#percent-calculator-app .pc-slider-val {\n  min-width: 60px; text-align: center; font-size: 20px; font-weight: 700; color: #4f46e5;\n}\n#percent-calculator-app .pc-calc-btn {\n  width: 100%; padding: 12px; background: #4f46e5; color: #fff; border: none;\n  border-radius: 8px; font-size: 16px; font-weight: 700; cursor: pointer;\n  transition: background 0.15s; margin-top: 4px;\n}\n#percent-calculator-app .pc-calc-btn:hover { background: #4338ca; }\n#percent-calculator-app .pc-result {\n  margin-top: 18px; padding: 16px; background: #f5f3ff; border-radius: 10px;\n  border-left: 4px solid #4f46e5;\n}\n#percent-calculator-app .pc-result-main { font-size: 28px; font-weight: 800; color: #4f46e5; }\n#percent-calculator-app .pc-result-formula { font-size: 13px; color: #6b7280; margin-top: 6px; }\n#percent-calculator-app .pc-result-up { color: #16a34a; }\n#percent-calculator-app .pc-result-down { color: #dc2626; }\n#percent-calculator-app .pc-highlight {\n  margin-top: 10px; padding: 10px 14px; background: #fef3c7;\n  border-radius: 8px; font-size: 14px; font-weight: 600; color: #92400e;\n}\n#percent-calculator-app .pc-quick-btns { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }\n#percent-calculator-app .pc-quick-btn {\n  padding: 6px 14px; border: 1.5px solid #4f46e5; border-radius: 20px;\n  background: #fff; color: #4f46e5; font-size: 13px; font-weight: 600;\n  cursor: pointer; transition: all 0.15s;\n}\n#percent-calculator-app .pc-quick-btn:hover { background: #4f46e5; color: #fff; }\n#percent-calculator-app .pc-table-wrap { overflow-x: auto; margin-top: 8px; }\n#percent-calculator-app .pc-table {\n  width: 100%; border-collapse: collapse; font-size: 14px;\n}\n#percent-calculator-app .pc-table th {\n  background: #4f46e5; color: #fff; padding: 10px 12px; text-align: right; white-space: nowrap;\n}\n#percent-calculator-app .pc-table th:first-child { text-align: left; }\n#percent-calculator-app .pc-table td {\n  padding: 9px 12px; text-align: right; border-bottom: 1px solid #e5e7eb;\n}\n#percent-calculator-app .pc-table td:first-child { text-align: left; font-weight: 600; color: #374151; }\n#percent-calculator-app .pc-table tr:nth-child(even) td { background: #f9fafb; }\n#percent-calculator-app .pc-section-title {\n  font-size: 16px; font-weight: 700; color: #1f2937; margin: 24px 0 10px;\n  padding-bottom: 6px; border-bottom: 2px solid #e5e7eb;\n}\n#percent-calculator-app .pc-note { font-size: 13px; color: #6b7280; margin-top: 8px; }\n#percent-calculator-app .pc-example-box {\n  margin-top: 10px; padding: 12px 16px; background: #f0fdf4; border-radius: 8px;\n  border-left: 4px solid #16a34a; font-size: 14px; color: #166534;\n}\n\u003c/style\u003e\n\u003c!-- タブナビゲーション --\u003e\n\u003cdiv class=\"pc-tabs\"\u003e\n  \u003cbutton class=\"pc-tab-btn active\" onclick=\"pcShowTab(0, this)\"\u003eAのB%はいくら？\u003c/button\u003e\n  \u003cbutton class=\"pc-tab-btn\" onclick=\"pcShowTab(1, this)\"\u003eAはBの何%？\u003c/button\u003e\n  \u003cbutton class=\"pc-tab-btn\" onclick=\"pcShowTab(2, this)\"\u003e変化率\u003c/button\u003e\n  \u003cbutton class=\"pc-tab-btn\" onclick=\"pcShowTab(3, this)\"\u003e割引計算\u003c/button\u003e\n  \u003cbutton class=\"pc-tab-btn\" onclick=\"pcShowTab(4, this)\"\u003e値上げ計算\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- タブ0: AのB%はいくら？ --\u003e\n\u003cdiv class=\"pc-panel active\" id=\"pc-panel-0\"\u003e\n  \u003cdiv class=\"pc-field\"\u003e\n    \u003clabel\u003e数値 A\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"p0-a\" placeholder=\"例：5000\" oninput=\"pcCalc0()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pc-field\"\u003e\n    \u003clabel\u003eパーセント B（%）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"p0-b\" placeholder=\"例：20\" oninput=\"pcCalc0()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"p0-result\" class=\"pc-result\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"pc-result-main\" id=\"p0-main\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-result-formula\" id=\"p0-formula\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- タブ1: AはBの何%？ --\u003e\n\u003cdiv class=\"pc-panel\" id=\"pc-panel-1\"\u003e\n  \u003cdiv class=\"pc-field\"\u003e\n    \u003clabel\u003e数値 A（部分）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"p1-a\" placeholder=\"例：800\" oninput=\"pcCalc1()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pc-field\"\u003e\n    \u003clabel\u003e数値 B（全体）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"p1-b\" placeholder=\"例：4000\" oninput=\"pcCalc1()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"p1-result\" class=\"pc-result\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"pc-result-main\" id=\"p1-main\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-result-formula\" id=\"p1-formula\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- タブ2: 変化率 --\u003e\n\u003cdiv class=\"pc-panel\" id=\"pc-panel-2\"\u003e\n  \u003cdiv class=\"pc-field\"\u003e\n    \u003clabel\u003e変更前の値\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"p2-before\" placeholder=\"例：1000\" oninput=\"pcCalc2()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pc-field\"\u003e\n    \u003clabel\u003e変更後の値\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"p2-after\" placeholder=\"例：1200\" oninput=\"pcCalc2()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"p2-result\" class=\"pc-result\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"pc-result-main\" id=\"p2-main\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-result-formula\" id=\"p2-formula\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- タブ3: 割引計算 --\u003e\n\u003cdiv class=\"pc-panel\" id=\"pc-panel-3\"\u003e\n  \u003cdiv class=\"pc-field\"\u003e\n    \u003clabel\u003e元の価格（円）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"p3-price\" placeholder=\"例：3980\" value=\"\" oninput=\"pcCalc3()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pc-field\"\u003e\n    \u003clabel\u003e割引率\u003c/label\u003e\n    \u003cdiv class=\"pc-slider-row\"\u003e\n      \u003cinput type=\"range\" id=\"p3-rate\" min=\"5\" max=\"90\" value=\"20\" step=\"5\" oninput=\"pcSlider3(); pcCalc3();\"\u003e\n      \u003cdiv class=\"pc-slider-val\" id=\"p3-rate-val\"\u003e20%\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pc-quick-btns\"\u003e\n      \u003cbutton class=\"pc-quick-btn\" onclick=\"pcSetDiscount(10)\"\u003e10% OFF\u003c/button\u003e\n      \u003cbutton class=\"pc-quick-btn\" onclick=\"pcSetDiscount(20)\"\u003e20% OFF\u003c/button\u003e\n      \u003cbutton class=\"pc-quick-btn\" onclick=\"pcSetDiscount(30)\"\u003e30% OFF\u003c/button\u003e\n      \u003cbutton class=\"pc-quick-btn\" onclick=\"pcSetDiscount(50)\"\u003e半額（50%）\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"p3-result\" class=\"pc-result\" style=\"display:none;\"\u003e\n    \u003cdiv id=\"p3-main\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-result-formula\" id=\"p3-formula\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-highlight\" id=\"p3-highlight\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- タブ4: 値上げ計算 --\u003e\n\u003cdiv class=\"pc-panel\" id=\"pc-panel-4\"\u003e\n  \u003cdiv class=\"pc-field\"\u003e\n    \u003clabel\u003e元の価格（円）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"p4-price\" placeholder=\"例：1000\" value=\"\" oninput=\"pcCalc4()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pc-field\"\u003e\n    \u003clabel\u003e値上げ率\u003c/label\u003e\n    \u003cdiv class=\"pc-slider-row\"\u003e\n      \u003cinput type=\"range\" id=\"p4-rate\" min=\"1\" max=\"50\" value=\"10\" step=\"1\" oninput=\"pcSlider4(); pcCalc4();\"\u003e\n      \u003cdiv class=\"pc-slider-val\" id=\"p4-rate-val\"\u003e10%\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"p4-result\" class=\"pc-result\" style=\"display:none;\"\u003e\n    \u003cdiv id=\"p4-main\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-result-formula\" id=\"p4-formula\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pc-example-box\" id=\"p4-example\"\u003e\n    身近な例：100円の商品が10%値上げで \u003cstrong\u003e110円\u003c/strong\u003e になります。\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 早見表 --\u003e\n\u003cdiv class=\"pc-section-title\"\u003eパーセント早見表\u003c/div\u003e\n\u003cp style=\"font-size:14px; color:#6b7280; margin-bottom:10px;\"\u003eよくある金額に対する各割引・割合の計算結果一覧です。\u003c/p\u003e","title":"パーセント計算ツール｜割引・値上げ率・割合を自動計算【無料】"},{"content":" linear-gradient(135deg, ...) ランダム生成 CSSをコピー グラデーションの種類 リニア 放射状 コニック 角度 ° 形状 円形 楕円形 中心位置 ↖ ↑ ↗ ← · → ↙ ↓ ↘ 開始角度 ° カラーストップ + カラーストップを追加 プリセット CSSコード コピー CSSグラデーションジェネレーターの使い方 グラデーションの種類を選ぶ — リニア（直線）・放射状・コニック（扇形）の3種類から選択できます。\nリニアグラデーションは角度スライダーで方向を指定します。0°は下から上、90°は左から右、135°は斜め方向です。\n放射状グラデーションは形状（円形・楕円形）と中心位置（9マスのグリッドで選択）を指定します。\nコニックグラデーションは開始角度を指定します。色が時計回りに扇状に広がります。\nカラーストップはカラースウォッチをクリックしてカラーピッカーを開くか、HEXコードを直接入力して設定します。位置スライダーで各色の開始位置（0〜100%）を調整できます。最大5つまで追加可能、×ボタンで削除できます（最低2つは必須）。\nプリセットをクリックするとすぐに適用されます。夕焼け・海・森林・ネオン・桜・抹茶など12種類以上を収録。\nランダム生成ボタンで予想外の美しいグラデーションが生成されます。インスピレーション探しに最適です。\nCSSをコピーボタンを押すと、-webkit- プレフィックス付きのCSSコードをクリップボードにコピーします。そのままHTMLやCSSファイルに貼り付けるだけで使えます。\nCSSグラデーション構文リファレンス リニアグラデーションの基本構文：\nb a c k g r o u n d : l i n e a r - g r a d i e n t ( 1 3 5 d e g , # f 0 9 3 f b 0 % , # f 5 5 7 6 c 1 0 0 % ) ; 放射状グラデーションの基本構文：\nb a c k g r o u n d : r a d i a l - g r a d i e n t ( e l l i p s e a t c e n t e r , # a 8 e d e a 0 % , # f e d 6 e 3 1 0 0 % ) ; コニックグラデーションの基本構文：\nb a c k g r o u n d : c o n i c - g r a d i e n t ( f r o m 0 d e g , # 6 a 3 0 9 3 0 % , # a 0 4 4 f f 5 0 % , # 6 a 3 0 9 3 1 0 0 % ) ; 複数のカラーストップを使うことで、虹色・三色旗・グラデーションボーダーなど多彩な表現が可能になります。ストップ位置を同じ値に設定すると、ぼかしのない鮮明な色の境界線を作れます。\nデザイン業務の会計管理にはfreee デザイン制作をしている方、経費精算もfreeeで一括管理しませんか？ freeeを無料で試す\n関連ツール Box Shadow Generator → Box Shadow Generatorツール Css Animation Generator → Css Animation Generatorツール Css Button Generator → Css Button Generatorツール ","permalink":"https://productivity-works.com/ja/tools/css-gradient-generator/","summary":"\u003cdiv id=\"grad-app-ja\"\u003e\n\u003cstyle\u003e\n#grad-app-ja {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', Roboto, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  padding: 0 0 48px 0;\n  color: #374151;\n}\n\n#grad-app-ja * {\n  box-sizing: border-box;\n}\n\n/* Preview */\n.gja-preview-wrap {\n  border-radius: 16px;\n  overflow: hidden;\n  margin-bottom: 20px;\n  box-shadow: 0 4px 24px rgba(0,0,0,0.15);\n  position: relative;\n}\n\n.gja-preview {\n  width: 100%;\n  height: 320px;\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n  transition: background 0.2s;\n}\n\n.gja-preview-label {\n  position: absolute;\n  bottom: 14px;\n  left: 50%;\n  transform: translateX(-50%);\n  background: rgba(0,0,0,0.45);\n  color: #fff;\n  font-size: 12px;\n  padding: 4px 12px;\n  border-radius: 20px;\n  white-space: nowrap;\n  pointer-events: none;\n}\n\n/* Cards */\n.gja-card {\n  background: #fff;\n  border-radius: 14px;\n  box-shadow: 0 2px 16px rgba(0,0,0,0.07);\n  padding: 22px 24px;\n  margin-bottom: 16px;\n}\n\n.gja-card-title {\n  margin: 0 0 16px 0;\n  font-size: 13px;\n  font-weight: 700;\n  color: #374151;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  border-bottom: 2px solid #f3f4f6;\n  padding-bottom: 10px;\n}\n\n/* Type toggle */\n.gja-type-row {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n\n.gja-type-btn {\n  flex: 1;\n  min-width: 90px;\n  padding: 9px 14px;\n  border: 2px solid #e5e7eb;\n  border-radius: 10px;\n  background: #f9fafb;\n  font-size: 13px;\n  font-weight: 600;\n  color: #374151;\n  cursor: pointer;\n  transition: all 0.18s;\n  text-align: center;\n}\n\n.gja-type-btn:hover {\n  border-color: #9ca3af;\n  background: #f3f4f6;\n}\n\n.gja-type-btn.gja-active {\n  border-color: #374151;\n  background: #374151;\n  color: #fff;\n}\n\n/* Linear angle */\n.gja-angle-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-top: 14px;\n}\n\n.gja-angle-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #6b7280;\n  white-space: nowrap;\n  width: 80px;\n  flex-shrink: 0;\n}\n\n.gja-angle-slider {\n  flex: 1;\n  height: 6px;\n  border-radius: 3px;\n  -webkit-appearance: none;\n  appearance: none;\n  background: #e5e7eb;\n  outline: none;\n  cursor: pointer;\n  min-width: 0;\n}\n\n.gja-angle-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  background: #374151;\n  border: 3px solid #fff;\n  box-shadow: 0 1px 6px rgba(0,0,0,0.25);\n  cursor: pointer;\n}\n\n.gja-angle-slider::-moz-range-thumb {\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  background: #374151;\n  border: 3px solid #fff;\n  box-shadow: 0 1px 6px rgba(0,0,0,0.25);\n  cursor: pointer;\n}\n\n.gja-angle-num {\n  width: 64px;\n  padding: 7px 10px;\n  border: 2px solid #e5e7eb;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  text-align: center;\n  color: #374151;\n  font-family: 'Courier New', monospace;\n  flex-shrink: 0;\n}\n\n.gja-angle-num:focus {\n  outline: none;\n  border-color: #374151;\n}\n\n/* Radial options */\n.gja-radial-row {\n  display: flex;\n  gap: 16px;\n  margin-top: 14px;\n  flex-wrap: wrap;\n  align-items: flex-start;\n}\n\n.gja-radial-field {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n\n.gja-field-label {\n  font-size: 12px;\n  font-weight: 700;\n  color: #6b7280;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n\n.gja-select {\n  padding: 8px 12px;\n  border: 2px solid #e5e7eb;\n  border-radius: 8px;\n  font-size: 13px;\n  color: #374151;\n  background: #fff;\n  cursor: pointer;\n  font-weight: 600;\n}\n\n.gja-select:focus {\n  outline: none;\n  border-color: #374151;\n}\n\n/* Position grid */\n.gja-pos-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 32px);\n  gap: 4px;\n}\n\n.gja-pos-dot {\n  width: 32px;\n  height: 32px;\n  border-radius: 8px;\n  border: 2px solid #e5e7eb;\n  background: #f9fafb;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 10px;\n  color: #9ca3af;\n  transition: all 0.15s;\n}\n\n.gja-pos-dot:hover {\n  border-color: #9ca3af;\n  background: #f3f4f6;\n}\n\n.gja-pos-dot.gja-pos-active {\n  border-color: #374151;\n  background: #374151;\n  color: #fff;\n}\n\n/* Color stops */\n.gja-stops-list {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  margin-bottom: 14px;\n}\n\n.gja-stop-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n.gja-stop-pos-wrap {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  flex: 1;\n  min-width: 0;\n}\n\n.gja-stop-pos-label {\n  font-size: 12px;\n  color: #6b7280;\n  font-weight: 600;\n  white-space: nowrap;\n  width: 26px;\n  flex-shrink: 0;\n}\n\n.gja-stop-pos-slider {\n  flex: 1;\n  height: 5px;\n  border-radius: 3px;\n  -webkit-appearance: none;\n  appearance: none;\n  background: #e5e7eb;\n  outline: none;\n  cursor: pointer;\n  min-width: 0;\n}\n\n.gja-stop-pos-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #374151;\n  border: 2px solid #fff;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.2);\n  cursor: pointer;\n}\n\n.gja-stop-pos-slider::-moz-range-thumb {\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #374151;\n  border: 2px solid #fff;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.2);\n  cursor: pointer;\n}\n\n.gja-stop-hex {\n  min-width: 0;\n  padding: 8px 10px;\n  border: 2px solid #e5e7eb;\n  border-radius: 8px;\n  font-size: 13px;\n  font-family: 'Courier New', monospace;\n  color: #374151;\n  width: 90px;\n  flex-shrink: 0;\n}\n\n.gja-stop-hex:focus {\n  outline: none;\n  border-color: #374151;\n}\n\n.gja-stop-pos-num {\n  width: 46px;\n  padding: 5px 6px;\n  border: 2px solid #e5e7eb;\n  border-radius: 6px;\n  font-size: 12px;\n  text-align: center;\n  color: #374151;\n  font-family: 'Courier New', monospace;\n  flex-shrink: 0;\n}\n\n.gja-stop-pos-num:focus {\n  outline: none;\n  border-color: #374151;\n}\n\n.gja-stop-remove {\n  width: 28px;\n  height: 28px;\n  border-radius: 7px;\n  border: 2px solid #e5e7eb;\n  background: #fff;\n  color: #9ca3af;\n  font-size: 16px;\n  line-height: 1;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: all 0.15s;\n  flex-shrink: 0;\n}\n\n.gja-stop-remove:hover {\n  border-color: #ef4444;\n  color: #ef4444;\n  background: #fef2f2;\n}\n\n/* Gradient bar */\n.gja-gradient-bar {\n  height: 18px;\n  border-radius: 9px;\n  margin-bottom: 14px;\n  box-shadow: inset 0 1px 4px rgba(0,0,0,0.12);\n}\n\n/* Add stop button */\n.gja-add-stop-btn {\n  padding: 8px 18px;\n  border: 2px dashed #d1d5db;\n  border-radius: 10px;\n  background: #f9fafb;\n  font-size: 13px;\n  font-weight: 600;\n  color: #6b7280;\n  cursor: pointer;\n  transition: all 0.18s;\n}\n\n.gja-add-stop-btn:hover {\n  border-color: #374151;\n  color: #374151;\n  background: #f3f4f6;\n}\n\n/* Presets */\n.gja-presets-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));\n  gap: 10px;\n}\n\n.gja-preset-item {\n  border-radius: 12px;\n  overflow: hidden;\n  cursor: pointer;\n  border: 2px solid transparent;\n  transition: all 0.18s;\n  box-shadow: 0 1px 6px rgba(0,0,0,0.1);\n}\n\n.gja-preset-item:hover {\n  transform: translateY(-2px);\n  box-shadow: 0 4px 16px rgba(0,0,0,0.18);\n}\n\n.gja-preset-item.gja-preset-active {\n  border-color: #374151;\n}\n\n.gja-preset-swatch {\n  height: 52px;\n  width: 100%;\n}\n\n.gja-preset-name {\n  background: #fff;\n  padding: 5px 8px;\n  font-size: 11px;\n  font-weight: 600;\n  color: #374151;\n  text-align: center;\n  border-top: 1px solid #f3f4f6;\n}\n\n/* Action buttons */\n.gja-actions {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  margin-bottom: 16px;\n}\n\n.gja-btn {\n  padding: 10px 20px;\n  border: none;\n  border-radius: 10px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: all 0.18s;\n  letter-spacing: 0.02em;\n}\n\n.gja-btn-primary {\n  background: #374151;\n  color: #fff;\n}\n\n.gja-btn-primary:hover {\n  background: #1f2937;\n}\n\n.gja-btn-secondary {\n  background: #f3f4f6;\n  color: #374151;\n  border: 2px solid #e5e7eb;\n}\n\n.gja-btn-secondary:hover {\n  background: #e5e7eb;\n}\n\n/* CSS output */\n.gja-css-output {\n  background: #1a1b2e;\n  border-radius: 12px;\n  padding: 20px 22px;\n  position: relative;\n  font-family: 'Courier New', monospace;\n  font-size: 13px;\n  line-height: 1.9;\n  color: #a5b4fc;\n}\n\n.gja-css-prop { color: #7dd3fc; }\n.gja-css-val  { color: #fde68a; }\n.gja-css-semi { color: #94a3b8; }\n\n.gja-css-copy-btn {\n  position: absolute;\n  top: 12px;\n  right: 14px;\n  padding: 5px 14px;\n  background: rgba(255,255,255,0.08);\n  color: #a5b4fc;\n  border: 1px solid rgba(255,255,255,0.12);\n  border-radius: 6px;\n  font-size: 11px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n\n.gja-css-copy-btn:hover {\n  background: rgba(255,255,255,0.16);\n}\n\n.gja-css-copy-btn.gja-copied {\n  background: rgba(52,211,153,0.2);\n  color: #6ee7b7;\n  border-color: rgba(52,211,153,0.3);\n}\n\n/* Responsive */\n@media (max-width: 600px) {\n  .gja-preview { height: 220px; }\n  .gja-card { padding: 16px 14px; }\n  .gja-presets-grid { grid-template-columns: repeat(auto-fill, minmax(85px, 1fr)); }\n  .gja-stop-row { flex-wrap: wrap; }\n  .gja-angle-label { width: 60px; font-size: 12px; }\n  .gja-actions { flex-direction: column; }\n  .gja-btn { text-align: center; }\n}\n\u003c/style\u003e\n\u003c!-- Preview --\u003e\n\u003cdiv class=\"gja-preview-wrap\"\u003e\n  \u003cdiv class=\"gja-preview\" id=\"gja-preview\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"gja-preview-label\" id=\"gja-preview-label\"\u003elinear-gradient(135deg, ...)\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Actions --\u003e\n\u003cdiv class=\"gja-actions\"\u003e\n  \u003cbutton class=\"gja-btn gja-btn-primary\" id=\"gja-random-btn\"\u003eランダム生成\u003c/button\u003e\n  \u003cbutton class=\"gja-btn gja-btn-secondary\" id=\"gja-copy-css-main-btn\"\u003eCSSをコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- Gradient Type --\u003e\n\u003cdiv class=\"gja-card\"\u003e\n  \u003cdiv class=\"gja-card-title\"\u003eグラデーションの種類\u003c/div\u003e\n  \u003cdiv class=\"gja-type-row\"\u003e\n    \u003cbutton class=\"gja-type-btn gja-active\" data-type=\"linear\"\u003eリニア\u003c/button\u003e\n    \u003cbutton class=\"gja-type-btn\" data-type=\"radial\"\u003e放射状\u003c/button\u003e\n    \u003cbutton class=\"gja-type-btn\" data-type=\"conic\"\u003eコニック\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- Linear controls --\u003e\n  \u003cdiv id=\"gja-linear-controls\"\u003e\n    \u003cdiv class=\"gja-angle-row\"\u003e\n      \u003cspan class=\"gja-angle-label\"\u003e角度\u003c/span\u003e\n      \u003cinput type=\"range\" class=\"gja-angle-slider\" id=\"gja-angle-slider\" min=\"0\" max=\"360\" value=\"135\"\u003e\n      \u003cinput type=\"number\" class=\"gja-angle-num\" id=\"gja-angle-num\" min=\"0\" max=\"360\" value=\"135\"\u003e °\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Radial controls --\u003e\n  \u003cdiv id=\"gja-radial-controls\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"gja-radial-row\"\u003e\n      \u003cdiv class=\"gja-radial-field\"\u003e\n        \u003cspan class=\"gja-field-label\"\u003e形状\u003c/span\u003e\n        \u003cselect class=\"gja-select\" id=\"gja-radial-shape\"\u003e\n          \u003coption value=\"circle\"\u003e円形\u003c/option\u003e\n          \u003coption value=\"ellipse\" selected\u003e楕円形\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"gja-radial-field\"\u003e\n        \u003cspan class=\"gja-field-label\"\u003e中心位置\u003c/span\u003e\n        \u003cdiv class=\"gja-pos-grid\" id=\"gja-pos-grid\"\u003e\n          \u003cdiv class=\"gja-pos-dot\" data-pos=\"left top\" title=\"左上\"\u003e↖\u003c/div\u003e\n          \u003cdiv class=\"gja-pos-dot\" data-pos=\"center top\" title=\"上\"\u003e↑\u003c/div\u003e\n          \u003cdiv class=\"gja-pos-dot\" data-pos=\"right top\" title=\"右上\"\u003e↗\u003c/div\u003e\n          \u003cdiv class=\"gja-pos-dot\" data-pos=\"left center\" title=\"左\"\u003e←\u003c/div\u003e\n          \u003cdiv class=\"gja-pos-dot gja-pos-active\" data-pos=\"center center\" title=\"中央\"\u003e·\u003c/div\u003e\n          \u003cdiv class=\"gja-pos-dot\" data-pos=\"right center\" title=\"右\"\u003e→\u003c/div\u003e\n          \u003cdiv class=\"gja-pos-dot\" data-pos=\"left bottom\" title=\"左下\"\u003e↙\u003c/div\u003e\n          \u003cdiv class=\"gja-pos-dot\" data-pos=\"center bottom\" title=\"下\"\u003e↓\u003c/div\u003e\n          \u003cdiv class=\"gja-pos-dot\" data-pos=\"right bottom\" title=\"右下\"\u003e↘\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Conic controls --\u003e\n  \u003cdiv id=\"gja-conic-controls\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"gja-angle-row\"\u003e\n      \u003cspan class=\"gja-angle-label\"\u003e開始角度\u003c/span\u003e\n      \u003cinput type=\"range\" class=\"gja-angle-slider\" id=\"gja-conic-angle-slider\" min=\"0\" max=\"360\" value=\"0\"\u003e\n      \u003cinput type=\"number\" class=\"gja-angle-num\" id=\"gja-conic-angle-num\" min=\"0\" max=\"360\" value=\"0\"\u003e °\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Color Stops --\u003e\n\u003cdiv class=\"gja-card\"\u003e\n  \u003cdiv class=\"gja-card-title\"\u003eカラーストップ\u003c/div\u003e\n  \u003cdiv class=\"gja-gradient-bar\" id=\"gja-gradient-bar\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"gja-stops-list\" id=\"gja-stops-list\"\u003e\u003c/div\u003e\n  \u003cbutton class=\"gja-add-stop-btn\" id=\"gja-add-stop-btn\"\u003e+ カラーストップを追加\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- Presets --\u003e\n\u003cdiv class=\"gja-card\"\u003e\n  \u003cdiv class=\"gja-card-title\"\u003eプリセット\u003c/div\u003e\n  \u003cdiv class=\"gja-presets-grid\" id=\"gja-presets-grid\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- CSS Output --\u003e\n\u003cdiv class=\"gja-card\"\u003e\n  \u003cdiv class=\"gja-card-title\"\u003eCSSコード\u003c/div\u003e\n  \u003cdiv class=\"gja-css-output\" id=\"gja-css-output\"\u003e\n    \u003cbutton class=\"gja-css-copy-btn\" id=\"gja-css-copy-btn\"\u003eコピー\u003c/button\u003e\n    \u003cdiv id=\"gja-css-code\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  // ---- State ----\n  var state = {\n    type: 'linear',\n    angle: 135,\n    conicAngle: 0,\n    radialShape: 'ellipse',\n    radialPos: 'center center',\n    stops: [\n      { color: '#667eea', pos: 0 },\n      { color: '#764ba2', pos: 100 }\n    ]\n  };\n\n  var activePreset = null;\n\n  // ---- Presets (Japanese names) ----\n  var PRESETS = [\n    { name: '夕焼け',     type: 'linear', angle: 135, stops: [{ color: '#f093fb', pos: 0 }, { color: '#f5576c', pos: 100 }] },\n    { name: '海',         type: 'linear', angle: 160, stops: [{ color: '#2980b9', pos: 0 }, { color: '#6dd5fa', pos: 50 }, { color: '#ffffff', pos: 100 }] },\n    { name: '森林',       type: 'linear', angle: 120, stops: [{ color: '#11998e', pos: 0 }, { color: '#38ef7d', pos: 100 }] },\n    { name: 'ネオン',     type: 'linear', angle: 90,  stops: [{ color: '#f7971e', pos: 0 }, { color: '#ffd200', pos: 50 }, { color: '#21d4fd', pos: 100 }] },\n    { name: 'オーロラ',   type: 'linear', angle: 135, stops: [{ color: '#a8edea', pos: 0 }, { color: '#fed6e3', pos: 100 }] },\n    { name: '深夜',       type: 'linear', angle: 180, stops: [{ color: '#0f0c29', pos: 0 }, { color: '#302b63', pos: 50 }, { color: '#24243e', pos: 100 }] },\n    { name: '桜',         type: 'linear', angle: 135, stops: [{ color: '#ffecd2', pos: 0 }, { color: '#fcb69f', pos: 100 }] },\n    { name: '抹茶',       type: 'linear', angle: 120, stops: [{ color: '#d4fc79', pos: 0 }, { color: '#96e6a1', pos: 100 }] },\n    { name: '炎',         type: 'linear', angle: 90,  stops: [{ color: '#f83600', pos: 0 }, { color: '#f9d423', pos: 100 }] },\n    { name: '藤色',       type: 'linear', angle: 135, stops: [{ color: '#e0c3fc', pos: 0 }, { color: '#8ec5fc', pos: 100 }] },\n    { name: '宇宙',       type: 'conic',  conicAngle: 0, stops: [{ color: '#6a3093', pos: 0 }, { color: '#a044ff', pos: 33 }, { color: '#6a3093', pos: 66 }, { color: '#a044ff', pos: 100 }] },\n    { name: 'マンゴー',   type: 'linear', angle: 135, stops: [{ color: '#ffe259', pos: 0 }, { color: '#ffa751', pos: 100 }] }\n  ];\n\n  // ---- DOM refs ----\n  var previewEl       = document.getElementById('gja-preview');\n  var previewLabel    = document.getElementById('gja-preview-label');\n  var gradientBar     = document.getElementById('gja-gradient-bar');\n  var stopsList       = document.getElementById('gja-stops-list');\n  var addStopBtn      = document.getElementById('gja-add-stop-btn');\n  var presetsGrid     = document.getElementById('gja-presets-grid');\n  var cssCode         = document.getElementById('gja-css-code');\n  var cssCopyBtn      = document.getElementById('gja-css-copy-btn');\n  var copyCssMainBtn  = document.getElementById('gja-copy-css-main-btn');\n  var randomBtn       = document.getElementById('gja-random-btn');\n  var angleSlider     = document.getElementById('gja-angle-slider');\n  var angleNum        = document.getElementById('gja-angle-num');\n  var conicSlider     = document.getElementById('gja-conic-angle-slider');\n  var conicNum        = document.getElementById('gja-conic-angle-num');\n  var radialShape     = document.getElementById('gja-radial-shape');\n  var linearControls  = document.getElementById('gja-linear-controls');\n  var radialControls  = document.getElementById('gja-radial-controls');\n  var conicControls   = document.getElementById('gja-conic-controls');\n\n  // ---- CSS Builder ----\n  function buildGradientCSS() {\n    var stops = state.stops.map(function(s) {\n      return s.color + ' ' + s.pos + '%';\n    }).join(', ');\n\n    if (state.type === 'linear') {\n      return 'linear-gradient(' + state.angle + 'deg, ' + stops + ')';\n    } else if (state.type === 'radial') {\n      return 'radial-gradient(' + state.radialShape + ' at ' + state.radialPos + ', ' + stops + ')';\n    } else {\n      return 'conic-gradient(from ' + state.conicAngle + 'deg, ' + stops + ')';\n    }\n  }\n\n  function buildFullCSS() {\n    var grad = buildGradientCSS();\n    return 'background: ' + grad + ';\\nbackground: -webkit-' + grad + ';';\n  }\n\n  // ---- Render ----\n  function render() {\n    var grad = buildGradientCSS();\n    previewEl.style.background = grad;\n    gradientBar.style.background = 'linear-gradient(to right, ' +\n      state.stops.map(function(s) { return s.color + ' ' + s.pos + '%'; }).join(', ') + ')';\n    previewLabel.textContent = grad.length \u003e 80 ? grad.slice(0, 77) + '...' : grad;\n    renderCSS(grad);\n    renderStops();\n  }\n\n  function renderCSS(grad) {\n    cssCode.innerHTML =\n      '\u003cspan class=\"gja-css-prop\"\u003ebackground\u003c/span\u003e\u003cspan class=\"gja-css-semi\"\u003e: \u003c/span\u003e' +\n      '\u003cspan class=\"gja-css-val\"\u003e-webkit-' + escHtml(grad) + '\u003c/span\u003e\u003cspan class=\"gja-css-semi\"\u003e;\u003c/span\u003e\\n' +\n      '\u003cspan class=\"gja-css-prop\"\u003ebackground\u003c/span\u003e\u003cspan class=\"gja-css-semi\"\u003e: \u003c/span\u003e' +\n      '\u003cspan class=\"gja-css-val\"\u003e' + escHtml(grad) + '\u003c/span\u003e\u003cspan class=\"gja-css-semi\"\u003e;\u003c/span\u003e';\n  }\n\n  function escHtml(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  function renderStops() {\n    stopsList.innerHTML = '';\n    state.stops.forEach(function(stop, idx) {\n      var row = document.createElement('div');\n      row.className = 'gja-stop-row';\n\n      // Color swatch\n      var swatchWrap = document.createElement('label');\n      swatchWrap.style.cssText = 'position:relative;cursor:pointer;flex-shrink:0;';\n      var swatch = document.createElement('div');\n      swatch.style.cssText = 'width:38px;height:38px;border-radius:10px;border:2px solid #e5e7eb;background:' + stop.color + ';cursor:pointer;';\n      var colorInput = document.createElement('input');\n      colorInput.type = 'color';\n      colorInput.value = stop.color;\n      colorInput.style.cssText = 'position:absolute;opacity:0;width:0;height:0;';\n      colorInput.addEventListener('input', (function(i) {\n        return function() {\n          state.stops[i].color = colorInput.value;\n          swatch.style.background = colorInput.value;\n          hexField.value = colorInput.value;\n          render();\n        };\n      })(idx));\n      swatchWrap.appendChild(swatch);\n      swatchWrap.appendChild(colorInput);\n      swatchWrap.addEventListener('click', function() { colorInput.click(); });\n\n      // HEX field\n      var hexField = document.createElement('input');\n      hexField.type = 'text';\n      hexField.className = 'gja-stop-hex';\n      hexField.value = stop.color;\n      hexField.maxLength = 7;\n      hexField.spellcheck = false;\n      hexField.addEventListener('input', (function(i, sw, ci) {\n        return function() {\n          var v = hexField.value.trim();\n          if (!v.startsWith('#')) v = '#' + v;\n          if (/^#[0-9a-fA-F]{6}$/.test(v)) {\n            state.stops[i].color = v;\n            sw.style.background = v;\n            ci.value = v;\n            render();\n          }\n        };\n      })(idx, swatch, colorInput));\n\n      // Position\n      var posWrap = document.createElement('div');\n      posWrap.className = 'gja-stop-pos-wrap';\n\n      var posLabel = document.createElement('span');\n      posLabel.className = 'gja-stop-pos-label';\n      posLabel.textContent = '位置';\n\n      var posSlider = document.createElement('input');\n      posSlider.type = 'range';\n      posSlider.className = 'gja-stop-pos-slider';\n      posSlider.min = 0;\n      posSlider.max = 100;\n      posSlider.value = stop.pos;\n\n      var posNum = document.createElement('input');\n      posNum.type = 'number';\n      posNum.className = 'gja-stop-pos-num';\n      posNum.min = 0;\n      posNum.max = 100;\n      posNum.value = stop.pos;\n\n      posSlider.addEventListener('input', (function(i, pn) {\n        return function() {\n          state.stops[i].pos = parseInt(posSlider.value);\n          pn.value = posSlider.value;\n          render();\n        };\n      })(idx, posNum));\n\n      posNum.addEventListener('input', (function(i, ps) {\n        return function() {\n          var v = Math.max(0, Math.min(100, parseInt(posNum.value) || 0));\n          state.stops[i].pos = v;\n          ps.value = v;\n          render();\n        };\n      })(idx, posSlider));\n\n      posWrap.appendChild(posLabel);\n      posWrap.appendChild(posSlider);\n      posWrap.appendChild(posNum);\n\n      // Remove button\n      var removeBtn = document.createElement('button');\n      removeBtn.className = 'gja-stop-remove';\n      removeBtn.textContent = '×';\n      removeBtn.title = '削除';\n      removeBtn.addEventListener('click', (function(i) {\n        return function() {\n          if (state.stops.length \u003c= 2) return;\n          state.stops.splice(i, 1);\n          render();\n        };\n      })(idx));\n\n      row.appendChild(swatchWrap);\n      row.appendChild(hexField);\n      row.appendChild(posWrap);\n      row.appendChild(removeBtn);\n      stopsList.appendChild(row);\n    });\n  }\n\n  // ---- Presets ----\n  function renderPresets() {\n    PRESETS.forEach(function(preset, idx) {\n      var item = document.createElement('div');\n      item.className = 'gja-preset-item';\n      item.dataset.idx = idx;\n\n      var swatch = document.createElement('div');\n      swatch.className = 'gja-preset-swatch';\n\n      var stops = preset.stops.map(function(s) { return s.color + ' ' + s.pos + '%'; }).join(', ');\n      var grad;\n      if (preset.type === 'radial') {\n        grad = 'radial-gradient(ellipse at center center, ' + stops + ')';\n      } else if (preset.type === 'conic') {\n        grad = 'linear-gradient(135deg, ' + stops + ')';\n      } else {\n        grad = 'linear-gradient(' + preset.angle + 'deg, ' + stops + ')';\n      }\n      swatch.style.background = grad;\n\n      var nameEl = document.createElement('div');\n      nameEl.className = 'gja-preset-name';\n      nameEl.textContent = preset.name;\n\n      item.appendChild(swatch);\n      item.appendChild(nameEl);\n\n      item.addEventListener('click', function() {\n        applyPreset(idx);\n      });\n\n      presetsGrid.appendChild(item);\n    });\n  }\n\n  function applyPreset(idx) {\n    var preset = PRESETS[idx];\n    state.type = preset.type;\n    state.stops = preset.stops.map(function(s) { return { color: s.color, pos: s.pos }; });\n\n    if (preset.type === 'linear') {\n      state.angle = preset.angle;\n      angleSlider.value = state.angle;\n      angleNum.value = state.angle;\n    } else if (preset.type === 'radial') {\n      state.radialShape = preset.shape || 'ellipse';\n      state.radialPos = preset.pos || 'center center';\n      radialShape.value = state.radialShape;\n      syncPosGrid(state.radialPos);\n    } else if (preset.type === 'conic') {\n      state.conicAngle = preset.conicAngle || 0;\n      conicSlider.value = state.conicAngle;\n      conicNum.value = state.conicAngle;\n    }\n\n    document.querySelectorAll('#grad-app-ja .gja-type-btn').forEach(function(btn) {\n      btn.classList.toggle('gja-active', btn.dataset.type === state.type);\n    });\n    showTypeControls(state.type);\n\n    document.querySelectorAll('#grad-app-ja .gja-preset-item').forEach(function(el, i) {\n      el.classList.toggle('gja-preset-active', i === idx);\n    });\n\n    activePreset = idx;\n    render();\n  }\n\n  function showTypeControls(type) {\n    linearControls.style.display = type === 'linear' ? '' : 'none';\n    radialControls.style.display = type === 'radial' ? '' : 'none';\n    conicControls.style.display  = type === 'conic'  ? '' : 'none';\n  }\n\n  function syncPosGrid(pos) {\n    document.querySelectorAll('#gja-pos-grid .gja-pos-dot').forEach(function(dot) {\n      dot.classList.toggle('gja-pos-active', dot.dataset.pos === pos);\n    });\n  }\n\n  // ---- Random gradient ----\n  var RANDOM_COLORS = [\n    '#f093fb','#f5576c','#4facfe','#00f2fe','#43e97b','#38f9d7',\n    '#fa709a','#fee140','#a18cd1','#fbc2eb','#ffecd2','#fcb69f',\n    '#a1c4fd','#c2e9fb','#d4fc79','#96e6a1','#f7971e','#ffd200',\n    '#e0c3fc','#8ec5fc','#fddb92','#d1fdff','#0f0c29','#24243e',\n    '#11998e','#38ef7d','#6a3093','#a044ff','#667eea','#764ba2'\n  ];\n\n  function randomColor() {\n    return RANDOM_COLORS[Math.floor(Math.random() * RANDOM_COLORS.length)];\n  }\n\n  function randomInt(min, max) {\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n  }\n\n  randomBtn.addEventListener('click', function() {\n    var count = randomInt(2, 4);\n    var positions = [0];\n    for (var i = 1; i \u003c count - 1; i++) {\n      positions.push(randomInt(20, 80));\n    }\n    positions.push(100);\n    positions.sort(function(a,b){return a-b;});\n\n    state.stops = positions.map(function(p) {\n      return { color: randomColor(), pos: p };\n    });\n\n    var types = ['linear', 'radial', 'conic'];\n    state.type = types[randomInt(0, 2)];\n    state.angle = randomInt(0, 360);\n    state.conicAngle = randomInt(0, 360);\n    state.radialShape = Math.random() \u003e 0.5 ? 'circle' : 'ellipse';\n\n    angleSlider.value = state.angle;\n    angleNum.value = state.angle;\n    conicSlider.value = state.conicAngle;\n    conicNum.value = state.conicAngle;\n    radialShape.value = state.radialShape;\n\n    document.querySelectorAll('#grad-app-ja .gja-type-btn').forEach(function(btn) {\n      btn.classList.toggle('gja-active', btn.dataset.type === state.type);\n    });\n    showTypeControls(state.type);\n    document.querySelectorAll('#grad-app-ja .gja-preset-item').forEach(function(el) {\n      el.classList.remove('gja-preset-active');\n    });\n    activePreset = null;\n    render();\n  });\n\n  // ---- Type buttons ----\n  document.querySelectorAll('#grad-app-ja .gja-type-btn').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      state.type = btn.dataset.type;\n      document.querySelectorAll('#grad-app-ja .gja-type-btn').forEach(function(b) {\n        b.classList.remove('gja-active');\n      });\n      btn.classList.add('gja-active');\n      showTypeControls(state.type);\n      render();\n    });\n  });\n\n  // ---- Angle sliders ----\n  angleSlider.addEventListener('input', function() {\n    state.angle = parseInt(angleSlider.value);\n    angleNum.value = state.angle;\n    render();\n  });\n\n  angleNum.addEventListener('input', function() {\n    state.angle = Math.max(0, Math.min(360, parseInt(angleNum.value) || 0));\n    angleSlider.value = state.angle;\n    render();\n  });\n\n  conicSlider.addEventListener('input', function() {\n    state.conicAngle = parseInt(conicSlider.value);\n    conicNum.value = state.conicAngle;\n    render();\n  });\n\n  conicNum.addEventListener('input', function() {\n    state.conicAngle = Math.max(0, Math.min(360, parseInt(conicNum.value) || 0));\n    conicSlider.value = state.conicAngle;\n    render();\n  });\n\n  // ---- Radial controls ----\n  radialShape.addEventListener('change', function() {\n    state.radialShape = radialShape.value;\n    render();\n  });\n\n  document.querySelectorAll('#gja-pos-grid .gja-pos-dot').forEach(function(dot) {\n    dot.addEventListener('click', function() {\n      state.radialPos = dot.dataset.pos;\n      syncPosGrid(state.radialPos);\n      render();\n    });\n  });\n\n  // ---- Add stop ----\n  addStopBtn.addEventListener('click', function() {\n    if (state.stops.length \u003e= 5) return;\n    var lastPos = state.stops[state.stops.length - 1].pos;\n    var newPos = Math.min(100, lastPos + Math.round((100 - lastPos) / 2));\n    state.stops.push({ color: randomColor(), pos: newPos });\n    render();\n  });\n\n  // ---- Copy CSS ----\n  function doCopy(text, btn) {\n    if (navigator.clipboard \u0026\u0026 navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).then(function() { flashCopied(btn); });\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = text;\n      ta.style.cssText = 'position:fixed;opacity:0;';\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      flashCopied(btn);\n    }\n  }\n\n  function flashCopied(btn) {\n    var orig = btn.textContent;\n    btn.classList.add('gja-copied');\n    btn.textContent = 'コピーしました!';\n    setTimeout(function() {\n      btn.classList.remove('gja-copied');\n      btn.textContent = orig;\n    }, 1600);\n  }\n\n  cssCopyBtn.addEventListener('click', function() {\n    doCopy(buildFullCSS(), cssCopyBtn);\n  });\n\n  copyCssMainBtn.addEventListener('click', function() {\n    doCopy(buildFullCSS(), copyCssMainBtn);\n  });\n\n  // ---- Init ----\n  renderPresets();\n  render();\n\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003ch2 id=\"cssグラデーションジェネレーターの使い方\"\u003eCSSグラデーションジェネレーターの使い方\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eグラデーションの種類を選ぶ\u003c/strong\u003e — リニア（直線）・放射状・コニック（扇形）の3種類から選択できます。\u003c/p\u003e","title":"CSSグラデーションジェネレーター｜無料オンラインツール（リニア・放射・コニック対応）"},{"content":"借入額・年利・返済期間を入力するだけで、毎月の返済額・総支払利息・返済スケジュールをすぐに計算できます。住宅ローン・自動車ローン・教育ローンなど、さまざまなローンに対応した無料シミュレーターです。\nローン条件を入力 借入額（万円） 年利（%） 返済期間 年 ヶ月 返済開始年月 返済方式 元利均等（毎月同額） 元金均等（元金一定） 入力値を確認してください。 計算する 計算結果サマリー 毎月の返済額（初回） — 万円 総支払額 — 万円 総利息額 — 万円 利息割合 — % 元金 vs 利息（円グラフ） 元金 利息 元金・利息の推移（年次） 元金返済累計 利息支払累計 返済スケジュール表 月 返済額（円） 元金（円） 利息（円） 残高（円） 全期間を表示 ローン比較（2件並列） ローン A 借入額（万円） 年利（%） 返済期間（年） 返済方式 元利均等 元金均等 ローン B 借入額（万円） 年利（%） 返済期間（年） 返済方式 元利均等 元金均等 比較する 事業の経費・資金管理もかんたんに\nfreee会計なら、経費精算・資金繰り・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 複利を計算 → 複利計算ツール 投資利益率を計算 → ROI計算ツール 年金をシミュレーション → 年金シミュレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/loan-emi-calculator/","summary":"\u003cp\u003e借入額・年利・返済期間を入力するだけで、毎月の返済額・総支払利息・返済スケジュールをすぐに計算できます。住宅ローン・自動車ローン・教育ローンなど、さまざまなローンに対応した無料シミュレーターです。\u003c/p\u003e\n\u003cdiv id=\"emi-app\"\u003e\n\u003cstyle\u003e\n#emi-app {\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  color: #1e293b;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0;\n  box-sizing: border-box;\n}\n#emi-app *, #emi-app *::before, #emi-app *::after {\n  box-sizing: border-box;\n}\n#emi-app h2 {\n  font-size: 18px;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 0 0 16px 0;\n  padding-bottom: 8px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#emi-app .emi-section {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 20px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n}\n#emi-app .emi-grid-2 {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n}\n@media (max-width: 600px) {\n  #emi-app .emi-grid-2 {\n    grid-template-columns: 1fr;\n  }\n}\n#emi-app .emi-field {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n#emi-app .emi-field label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n}\n#emi-app .emi-field input,\n#emi-app .emi-field select {\n  padding: 10px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 15px;\n  color: #1e293b;\n  background: #f8fafc;\n  transition: border-color 0.2s;\n  width: 100%;\n}\n#emi-app .emi-field input:focus,\n#emi-app .emi-field select:focus {\n  outline: none;\n  border-color: #3b82f6;\n  background: #fff;\n}\n#emi-app .emi-period-row {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n}\n#emi-app .emi-period-row input {\n  flex: 1;\n}\n#emi-app .emi-period-row select {\n  width: 80px;\n  flex-shrink: 0;\n}\n#emi-app .emi-radio-group {\n  display: flex;\n  gap: 12px;\n  flex-wrap: wrap;\n}\n#emi-app .emi-radio-label {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 14px;\n  color: #334155;\n  cursor: pointer;\n  padding: 8px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  background: #f8fafc;\n  transition: all 0.2s;\n}\n#emi-app .emi-radio-label:hover {\n  border-color: #3b82f6;\n  background: #eff6ff;\n}\n#emi-app .emi-radio-label input[type=\"radio\"] {\n  accent-color: #3b82f6;\n  width: 15px;\n  height: 15px;\n}\n#emi-app .emi-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 6px;\n  padding: 12px 28px;\n  background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%);\n  color: #fff;\n  border: none;\n  border-radius: 9px;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.2s, transform 0.1s;\n  width: 100%;\n  margin-top: 8px;\n}\n#emi-app .emi-btn:hover {\n  opacity: 0.92;\n  transform: translateY(-1px);\n}\n#emi-app .emi-btn:active {\n  transform: translateY(0);\n}\n#emi-app .emi-summary-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n  gap: 14px;\n  margin-bottom: 20px;\n}\n#emi-app .emi-card {\n  background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);\n  border: 1px solid #bae6fd;\n  border-radius: 10px;\n  padding: 16px 18px;\n  text-align: center;\n}\n#emi-app .emi-card.accent-green {\n  background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%);\n  border-color: #bbf7d0;\n}\n#emi-app .emi-card.accent-red {\n  background: linear-gradient(135deg, #fff1f2 0%, #ffe4e6 100%);\n  border-color: #fecdd3;\n}\n#emi-app .emi-card.accent-purple {\n  background: linear-gradient(135deg, #faf5ff 0%, #f3e8ff 100%);\n  border-color: #e9d5ff;\n}\n#emi-app .emi-card-label {\n  font-size: 12px;\n  color: #64748b;\n  font-weight: 600;\n  margin-bottom: 4px;\n}\n#emi-app .emi-card-value {\n  font-size: 22px;\n  font-weight: 800;\n  color: #0f172a;\n  line-height: 1.2;\n}\n#emi-app .emi-card-unit {\n  font-size: 13px;\n  color: #64748b;\n  margin-top: 2px;\n}\n#emi-app .emi-charts-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n  margin-bottom: 20px;\n}\n@media (max-width: 600px) {\n  #emi-app .emi-charts-row {\n    grid-template-columns: 1fr;\n  }\n}\n#emi-app .emi-chart-box {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n}\n#emi-app .emi-chart-title {\n  font-size: 14px;\n  font-weight: 700;\n  color: #475569;\n  margin-bottom: 12px;\n  text-align: center;\n}\n#emi-app canvas {\n  max-width: 100%;\n  display: block;\n  margin: 0 auto;\n}\n#emi-app .emi-pie-legend {\n  display: flex;\n  justify-content: center;\n  gap: 16px;\n  margin-top: 10px;\n  flex-wrap: wrap;\n}\n#emi-app .emi-legend-item {\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  font-size: 12px;\n  color: #475569;\n}\n#emi-app .emi-legend-dot {\n  width: 12px;\n  height: 12px;\n  border-radius: 3px;\n}\n#emi-app .emi-schedule-wrap {\n  overflow-x: auto;\n}\n#emi-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n#emi-app table th {\n  background: #1e293b;\n  color: #f1f5f9;\n  padding: 10px 12px;\n  text-align: right;\n  font-weight: 600;\n  white-space: nowrap;\n}\n#emi-app table th:first-child {\n  text-align: left;\n  border-radius: 6px 0 0 0;\n}\n#emi-app table th:last-child {\n  border-radius: 0 6px 0 0;\n}\n#emi-app table td {\n  padding: 8px 12px;\n  text-align: right;\n  border-bottom: 1px solid #f1f5f9;\n  color: #334155;\n}\n#emi-app table td:first-child {\n  text-align: left;\n  color: #64748b;\n  font-weight: 500;\n}\n#emi-app table tr:nth-child(even) td {\n  background: #f8fafc;\n}\n#emi-app table tr.emi-year-row td {\n  background: #dbeafe;\n  font-weight: 700;\n  color: #1e40af;\n  font-size: 12px;\n}\n#emi-app .emi-compare-section {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 20px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n}\n#emi-app .emi-compare-cols {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n}\n@media (max-width: 600px) {\n  #emi-app .emi-compare-cols {\n    grid-template-columns: 1fr;\n  }\n}\n#emi-app .emi-compare-loan {\n  border: 1.5px solid #cbd5e1;\n  border-radius: 10px;\n  padding: 16px;\n  background: #f8fafc;\n}\n#emi-app .emi-compare-loan h3 {\n  font-size: 14px;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 0 0 12px 0;\n}\n#emi-app .emi-compare-result {\n  margin-top: 14px;\n  padding: 12px;\n  border-radius: 8px;\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  font-size: 13px;\n  color: #334155;\n  display: none;\n}\n#emi-app .emi-compare-result .emi-cr-row {\n  display: flex;\n  justify-content: space-between;\n  padding: 3px 0;\n  border-bottom: 1px solid #f1f5f9;\n}\n#emi-app .emi-compare-result .emi-cr-row:last-child {\n  border-bottom: none;\n  font-weight: 700;\n  color: #1e293b;\n}\n#emi-app .emi-hidden {\n  display: none;\n}\n#emi-app .emi-result-area {\n  display: none;\n}\n#emi-app .emi-error {\n  color: #dc2626;\n  font-size: 13px;\n  margin-top: 6px;\n  display: none;\n}\n#emi-app .emi-show-more-wrap {\n  text-align: center;\n  margin-top: 12px;\n}\n#emi-app .emi-show-more-btn {\n  padding: 8px 20px;\n  background: #f1f5f9;\n  border: 1px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 13px;\n  color: #475569;\n  cursor: pointer;\n  font-weight: 600;\n  transition: background 0.2s;\n}\n#emi-app .emi-show-more-btn:hover {\n  background: #e2e8f0;\n}\n\u003c/style\u003e\n\u003c!-- ===== 入力フォーム ===== --\u003e\n\u003cdiv class=\"emi-section\"\u003e\n  \u003ch2\u003eローン条件を入力\u003c/h2\u003e\n  \u003cdiv class=\"emi-grid-2\"\u003e\n    \u003cdiv class=\"emi-field\"\u003e\n      \u003clabel for=\"emi-principal\"\u003e借入額（万円）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"emi-principal\" placeholder=\"例: 3000\" min=\"1\" step=\"0.1\" value=\"3000\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"emi-field\"\u003e\n      \u003clabel for=\"emi-rate\"\u003e年利（%）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"emi-rate\" placeholder=\"例: 1.5\" min=\"0\" step=\"0.01\" value=\"1.5\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"emi-field\"\u003e\n      \u003clabel\u003e返済期間\u003c/label\u003e\n      \u003cdiv class=\"emi-period-row\"\u003e\n        \u003cinput type=\"number\" id=\"emi-period\" placeholder=\"例: 35\" min=\"1\" step=\"1\" value=\"35\"\u003e\n        \u003cselect id=\"emi-period-unit\"\u003e\n          \u003coption value=\"year\"\u003e年\u003c/option\u003e\n          \u003coption value=\"month\"\u003eヶ月\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"emi-field\"\u003e\n      \u003clabel for=\"emi-start\"\u003e返済開始年月\u003c/label\u003e\n      \u003cinput type=\"month\" id=\"emi-start\" value=\"2025-06\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"emi-field\" style=\"margin-top:16px;\"\u003e\n    \u003clabel\u003e返済方式\u003c/label\u003e\n    \u003cdiv class=\"emi-radio-group\"\u003e\n      \u003clabel class=\"emi-radio-label\"\u003e\n        \u003cinput type=\"radio\" name=\"emi-method\" value=\"equal-payment\" checked\u003e 元利均等（毎月同額）\n      \u003c/label\u003e\n      \u003clabel class=\"emi-radio-label\"\u003e\n        \u003cinput type=\"radio\" name=\"emi-method\" value=\"equal-principal\"\u003e 元金均等（元金一定）\n      \u003c/label\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"emi-error\" class=\"emi-error\"\u003e入力値を確認してください。\u003c/div\u003e\n  \u003cbutton class=\"emi-btn\" onclick=\"emiCalculate()\"\u003e計算する\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- ===== 結果エリア ===== --\u003e\n\u003cdiv id=\"emi-result-area\" class=\"emi-result-area\"\u003e\n  \u003c!-- サマリーカード --\u003e\n  \u003cdiv class=\"emi-section\"\u003e\n    \u003ch2\u003e計算結果サマリー\u003c/h2\u003e\n    \u003cdiv class=\"emi-summary-grid\"\u003e\n      \u003cdiv class=\"emi-card\"\u003e\n        \u003cdiv class=\"emi-card-label\"\u003e毎月の返済額（初回）\u003c/div\u003e\n        \u003cdiv class=\"emi-card-value\" id=\"res-monthly\"\u003e—\u003c/div\u003e\n        \u003cdiv class=\"emi-card-unit\"\u003e万円\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"emi-card accent-green\"\u003e\n        \u003cdiv class=\"emi-card-label\"\u003e総支払額\u003c/div\u003e\n        \u003cdiv class=\"emi-card-value\" id=\"res-total\"\u003e—\u003c/div\u003e\n        \u003cdiv class=\"emi-card-unit\"\u003e万円\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"emi-card accent-red\"\u003e\n        \u003cdiv class=\"emi-card-label\"\u003e総利息額\u003c/div\u003e\n        \u003cdiv class=\"emi-card-value\" id=\"res-interest\"\u003e—\u003c/div\u003e\n        \u003cdiv class=\"emi-card-unit\"\u003e万円\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"emi-card accent-purple\"\u003e\n        \u003cdiv class=\"emi-card-label\"\u003e利息割合\u003c/div\u003e\n        \u003cdiv class=\"emi-card-value\" id=\"res-ratio\"\u003e—\u003c/div\u003e\n        \u003cdiv class=\"emi-card-unit\"\u003e%\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- グラフ --\u003e\n  \u003cdiv class=\"emi-charts-row\"\u003e\n    \u003cdiv class=\"emi-chart-box\"\u003e\n      \u003cdiv class=\"emi-chart-title\"\u003e元金 vs 利息（円グラフ）\u003c/div\u003e\n      \u003ccanvas id=\"emi-pie\" width=\"220\" height=\"220\"\u003e\u003c/canvas\u003e\n      \u003cdiv class=\"emi-pie-legend\"\u003e\n        \u003cdiv class=\"emi-legend-item\"\u003e\u003cdiv class=\"emi-legend-dot\" style=\"background:#3b82f6;\"\u003e\u003c/div\u003e元金\u003c/div\u003e\n        \u003cdiv class=\"emi-legend-item\"\u003e\u003cdiv class=\"emi-legend-dot\" style=\"background:#f97316;\"\u003e\u003c/div\u003e利息\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"emi-chart-box\"\u003e\n      \u003cdiv class=\"emi-chart-title\"\u003e元金・利息の推移（年次）\u003c/div\u003e\n      \u003ccanvas id=\"emi-line\" width=\"340\" height=\"220\"\u003e\u003c/canvas\u003e\n      \u003cdiv class=\"emi-pie-legend\"\u003e\n        \u003cdiv class=\"emi-legend-item\"\u003e\u003cdiv class=\"emi-legend-dot\" style=\"background:#3b82f6;\"\u003e\u003c/div\u003e元金返済累計\u003c/div\u003e\n        \u003cdiv class=\"emi-legend-item\"\u003e\u003cdiv class=\"emi-legend-dot\" style=\"background:#f97316;\"\u003e\u003c/div\u003e利息支払累計\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 返済スケジュール表 --\u003e\n  \u003cdiv class=\"emi-section\"\u003e\n    \u003ch2\u003e返済スケジュール表\u003c/h2\u003e\n    \u003cdiv class=\"emi-schedule-wrap\"\u003e\n      \u003ctable id=\"emi-table\"\u003e\n        \u003cthead\u003e\n          \u003ctr\u003e\n            \u003cth\u003e月\u003c/th\u003e\n            \u003cth\u003e返済額（円）\u003c/th\u003e\n            \u003cth\u003e元金（円）\u003c/th\u003e\n            \u003cth\u003e利息（円）\u003c/th\u003e\n            \u003cth\u003e残高（円）\u003c/th\u003e\n          \u003c/tr\u003e\n        \u003c/thead\u003e\n        \u003ctbody id=\"emi-tbody\"\u003e\u003c/tbody\u003e\n      \u003c/table\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"emi-show-more-wrap\"\u003e\n      \u003cbutton class=\"emi-show-more-btn\" id=\"emi-show-more-btn\" onclick=\"emiToggleFullSchedule()\"\u003e全期間を表示\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\u003c!-- /result-area --\u003e\n\u003c!-- ===== ローン比較 ===== --\u003e\n\u003cdiv class=\"emi-compare-section\"\u003e\n  \u003ch2\u003eローン比較（2件並列）\u003c/h2\u003e\n  \u003cdiv class=\"emi-compare-cols\"\u003e\n    \u003c!-- ローンA --\u003e\n    \u003cdiv class=\"emi-compare-loan\"\u003e\n      \u003ch3\u003eローン A\u003c/h3\u003e\n      \u003cdiv class=\"emi-field\" style=\"margin-bottom:10px;\"\u003e\n        \u003clabel\u003e借入額（万円）\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"cmp-a-p\" placeholder=\"例: 3000\" value=\"3000\" min=\"1\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"emi-field\" style=\"margin-bottom:10px;\"\u003e\n        \u003clabel\u003e年利（%）\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"cmp-a-r\" placeholder=\"例: 1.0\" value=\"1.0\" step=\"0.01\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"emi-field\" style=\"margin-bottom:10px;\"\u003e\n        \u003clabel\u003e返済期間（年）\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"cmp-a-t\" placeholder=\"例: 30\" value=\"30\" min=\"1\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"emi-field\" style=\"margin-bottom:10px;\"\u003e\n        \u003clabel\u003e返済方式\u003c/label\u003e\n        \u003cselect id=\"cmp-a-m\"\u003e\n          \u003coption value=\"equal-payment\"\u003e元利均等\u003c/option\u003e\n          \u003coption value=\"equal-principal\"\u003e元金均等\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"emi-compare-result\" id=\"cmp-a-result\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003c!-- ローンB --\u003e\n    \u003cdiv class=\"emi-compare-loan\"\u003e\n      \u003ch3\u003eローン B\u003c/h3\u003e\n      \u003cdiv class=\"emi-field\" style=\"margin-bottom:10px;\"\u003e\n        \u003clabel\u003e借入額（万円）\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"cmp-b-p\" placeholder=\"例: 3000\" value=\"3000\" min=\"1\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"emi-field\" style=\"margin-bottom:10px;\"\u003e\n        \u003clabel\u003e年利（%）\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"cmp-b-r\" placeholder=\"例: 1.5\" value=\"1.5\" step=\"0.01\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"emi-field\" style=\"margin-bottom:10px;\"\u003e\n        \u003clabel\u003e返済期間（年）\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"cmp-b-t\" placeholder=\"例: 35\" value=\"35\" min=\"1\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"emi-field\" style=\"margin-bottom:10px;\"\u003e\n        \u003clabel\u003e返済方式\u003c/label\u003e\n        \u003cselect id=\"cmp-b-m\"\u003e\n          \u003coption value=\"equal-payment\"\u003e元利均等\u003c/option\u003e\n          \u003coption value=\"equal-principal\"\u003e元金均等\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"emi-compare-result\" id=\"cmp-b-result\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"emi-btn\" style=\"margin-top:16px;\" onclick=\"emiCompare()\"\u003e比較する\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- ===== freee CTA ===== --\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の経費・資金管理もかんたんに\u003c/p\u003e","title":"ローン返済シミュレーター"},{"content":"SQLを貼り付けるだけで、適切なインデント・キーワード大文字化・シンタックスハイライト付きで整形できます。すべてブラウザ内で完結し、データは一切サーバーに送信されません。\nSQLフォーマッター 整形する ミニファイ クリア シンタックスハイライト インデント幅: スペース2 スペース4 入力SQL 整形結果 コピー freee会計で経理・帳簿を自動化しませんか？ SQLで集計する前に、まずはfreeeでデータを一元管理。30日間無料トライアル実施中。 freeeを無料で試す ","permalink":"https://productivity-works.com/ja/tools/sql-formatter/","summary":"\u003cp\u003eSQLを貼り付けるだけで、適切なインデント・キーワード大文字化・シンタックスハイライト付きで整形できます。すべてブラウザ内で完結し、データは一切サーバーに送信されません。\u003c/p\u003e\n\u003cstyle\u003e\n#sql-app *,\n#sql-app *::before,\n#sql-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#sql-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic UI\", \"Meiryo\", sans-serif;\n  background: #1a1a2e;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  max-width: 900px;\n  margin: 0 auto 2rem auto;\n}\n#sql-app h2 {\n  font-size: 1.1rem;\n  color: #93c5fd;\n  margin-bottom: 12px;\n  letter-spacing: 0.03em;\n}\n#sql-app .sql-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-bottom: 16px;\n  align-items: center;\n}\n#sql-app .sql-btn {\n  background: #2563eb;\n  color: #fff;\n  border: none;\n  border-radius: 6px;\n  padding: 8px 18px;\n  font-size: 0.92rem;\n  cursor: pointer;\n  transition: background 0.15s;\n  font-weight: 700;\n}\n#sql-app .sql-btn:hover { background: #1d4ed8; }\n#sql-app .sql-btn.secondary {\n  background: #374151;\n  color: #e2e8f0;\n}\n#sql-app .sql-btn.secondary:hover { background: #4b5563; }\n#sql-app .sql-label {\n  font-size: 0.85rem;\n  color: #94a3b8;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n#sql-app .sql-label select {\n  background: #0f172a;\n  color: #e2e8f0;\n  border: 1px solid #334155;\n  border-radius: 5px;\n  padding: 5px 8px;\n  font-size: 0.88rem;\n}\n#sql-app .sql-label input[type=\"checkbox\"] {\n  accent-color: #60a5fa;\n  width: 15px;\n  height: 15px;\n}\n#sql-app .sql-pane {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 14px;\n}\n@media (max-width: 620px) {\n  #sql-app .sql-pane { grid-template-columns: 1fr; }\n}\n#sql-app .sql-section label {\n  display: block;\n  font-size: 0.78rem;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #64748b;\n  margin-bottom: 6px;\n}\n#sql-app textarea {\n  width: 100%;\n  height: 220px;\n  background: #0f172a;\n  color: #e2e8f0;\n  border: 1px solid #334155;\n  border-radius: 8px;\n  padding: 12px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.85rem;\n  resize: vertical;\n  line-height: 1.6;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#sql-app textarea:focus { border-color: #60a5fa; }\n#sql-app .sql-output-wrap {\n  position: relative;\n}\n#sql-app .sql-output {\n  width: 100%;\n  min-height: 220px;\n  background: #0f172a;\n  border: 1px solid #334155;\n  border-radius: 8px;\n  padding: 12px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.85rem;\n  line-height: 1.6;\n  white-space: pre;\n  overflow: auto;\n  color: #e2e8f0;\n}\n#sql-app .sql-copy-btn {\n  position: absolute;\n  top: 8px;\n  right: 8px;\n  background: #1e293b;\n  color: #94a3b8;\n  border: 1px solid #334155;\n  border-radius: 5px;\n  padding: 4px 10px;\n  font-size: 0.78rem;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#sql-app .sql-copy-btn:hover { background: #334155; color: #e2e8f0; }\n#sql-app .sql-status {\n  font-size: 0.82rem;\n  color: #4ade80;\n  min-height: 1.2em;\n  margin-top: 4px;\n}\n#sql-app .kw  { color: #60a5fa; font-weight: 700; }\n#sql-app .str { color: #4ade80; }\n#sql-app .num { color: #fb923c; }\n#sql-app .cmt { color: #6b7280; font-style: italic; }\n\n/* freee CTA */\n#sql-app .freee-cta {\n  margin-top: 20px;\n  background: #0f172a;\n  border: 1px solid #2563eb;\n  border-radius: 10px;\n  padding: 16px 20px;\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  flex-wrap: wrap;\n}\n#sql-app .freee-cta .freee-text {\n  flex: 1;\n  min-width: 200px;\n}\n#sql-app .freee-cta .freee-text strong {\n  display: block;\n  color: #93c5fd;\n  font-size: 0.95rem;\n  margin-bottom: 4px;\n}\n#sql-app .freee-cta .freee-text span {\n  font-size: 0.82rem;\n  color: #94a3b8;\n}\n#sql-app .freee-cta a.freee-link {\n  background: #2563eb;\n  color: #fff;\n  text-decoration: none;\n  border-radius: 6px;\n  padding: 9px 20px;\n  font-size: 0.88rem;\n  font-weight: 700;\n  white-space: nowrap;\n  transition: background 0.15s;\n}\n#sql-app .freee-cta a.freee-link:hover { background: #1d4ed8; }\n\u003c/style\u003e\n\u003cdiv id=\"sql-app\"\u003e\n  \u003ch2\u003eSQLフォーマッター\u003c/h2\u003e\n  \u003cdiv class=\"sql-controls\"\u003e\n    \u003cbutton class=\"sql-btn\" id=\"sql-format-btn\"\u003e整形する\u003c/button\u003e\n    \u003cbutton class=\"sql-btn secondary\" id=\"sql-minify-btn\"\u003eミニファイ\u003c/button\u003e\n    \u003cbutton class=\"sql-btn secondary\" id=\"sql-clear-btn\"\u003eクリア\u003c/button\u003e\n    \u003clabel class=\"sql-label\"\u003e\n      \u003cinput type=\"checkbox\" id=\"sql-highlight-chk\" checked\u003e\n      シンタックスハイライト\n    \u003c/label\u003e\n    \u003clabel class=\"sql-label\"\u003e\n      インデント幅:\n      \u003cselect id=\"sql-tabsize-sel\"\u003e\n        \u003coption value=\"2\"\u003eスペース2\u003c/option\u003e\n        \u003coption value=\"4\" selected\u003eスペース4\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"sql-pane\"\u003e\n    \u003cdiv class=\"sql-section\"\u003e\n      \u003clabel\u003e入力SQL\u003c/label\u003e\n      \u003ctextarea id=\"sql-input\" placeholder=\"SQLをここに貼り付けてください…\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"sql-section\"\u003e\n      \u003clabel\u003e整形結果\u003c/label\u003e\n      \u003cdiv class=\"sql-output-wrap\"\u003e\n        \u003cdiv class=\"sql-output\" id=\"sql-output\"\u003e\u003c/div\u003e\n        \u003cbutton class=\"sql-copy-btn\" id=\"sql-copy-btn\"\u003eコピー\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"sql-status\" id=\"sql-status\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"freee-cta\"\u003e\n    \u003cdiv class=\"freee-text\"\u003e\n      \u003cstrong\u003efreee会計で経理・帳簿を自動化しませんか？\u003c/strong\u003e\n      \u003cspan\u003eSQLで集計する前に、まずはfreeeでデータを一元管理。30日間無料トライアル実施中。\u003c/span\u003e\n    \u003c/div\u003e\n    \u003ca class=\"freee-link\" href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\"\u003efreeeを無料で試す\u003c/a\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  const KEYWORDS = [\n    'SELECT','FROM','WHERE','AND','OR',\n    'LEFT JOIN','RIGHT JOIN','INNER JOIN','OUTER JOIN','FULL JOIN',\n    'JOIN','ON','GROUP BY','ORDER BY','HAVING','LIMIT','OFFSET',\n    'INSERT INTO','INSERT','UPDATE','DELETE','CREATE TABLE','CREATE INDEX',\n    'CREATE','ALTER TABLE','ALTER','DROP TABLE','DROP',\n    'TABLE','INDEX','VALUES','SET','AS','IN','NOT IN','NOT',\n    'NULL','IS NULL','IS NOT NULL','IS',\n    'LIKE','BETWEEN','UNION ALL','UNION',\n    'ALL','DISTINCT','COUNT','SUM','AVG','MAX','MIN',\n    'CASE','WHEN','THEN','ELSE','END',\n    'WITH','EXISTS','RETURNING'\n  ];\n\n  const CLAUSE_KW = [\n    'SELECT','FROM','WHERE','LEFT JOIN','RIGHT JOIN','INNER JOIN',\n    'OUTER JOIN','FULL JOIN','JOIN','ON','GROUP BY','ORDER BY',\n    'HAVING','LIMIT','OFFSET','INSERT INTO','INSERT','UPDATE',\n    'DELETE','CREATE TABLE','CREATE INDEX','CREATE','ALTER TABLE',\n    'ALTER','DROP TABLE','DROP','SET','VALUES','UNION ALL','UNION',\n    'WITH','RETURNING'\n  ];\n\n  function tokenize(sql) {\n    const tokens = [];\n    let i = 0;\n    while (i \u003c sql.length) {\n      if (sql[i] === '-' \u0026\u0026 sql[i+1] === '-') {\n        let j = i;\n        while (j \u003c sql.length \u0026\u0026 sql[j] !== '\\n') j++;\n        tokens.push({ type: 'comment', val: sql.slice(i, j) });\n        i = j; continue;\n      }\n      if (sql[i] === '/' \u0026\u0026 sql[i+1] === '*') {\n        let j = i + 2;\n        while (j \u003c sql.length \u0026\u0026 !(sql[j] === '*' \u0026\u0026 sql[j+1] === '/')) j++;\n        j += 2;\n        tokens.push({ type: 'comment', val: sql.slice(i, j) });\n        i = j; continue;\n      }\n      if (sql[i] === \"'\") {\n        let j = i + 1;\n        while (j \u003c sql.length) {\n          if (sql[j] === \"'\" \u0026\u0026 sql[j+1] === \"'\") { j += 2; continue; }\n          if (sql[j] === \"'\") { j++; break; }\n          j++;\n        }\n        tokens.push({ type: 'string', val: sql.slice(i, j) });\n        i = j; continue;\n      }\n      if (sql[i] === '\"') {\n        let j = i + 1;\n        while (j \u003c sql.length \u0026\u0026 sql[j] !== '\"') j++;\n        j++;\n        tokens.push({ type: 'ident', val: sql.slice(i, j) });\n        i = j; continue;\n      }\n      if (sql[i] === '`') {\n        let j = i + 1;\n        while (j \u003c sql.length \u0026\u0026 sql[j] !== '`') j++;\n        j++;\n        tokens.push({ type: 'ident', val: sql.slice(i, j) });\n        i = j; continue;\n      }\n      if (/[0-9]/.test(sql[i]) || (sql[i] === '.' \u0026\u0026 /[0-9]/.test(sql[i+1]))) {\n        let j = i;\n        while (j \u003c sql.length \u0026\u0026 /[0-9.\\-eExX_a-fA-F]/.test(sql[j])) j++;\n        tokens.push({ type: 'number', val: sql.slice(i, j) });\n        i = j; continue;\n      }\n      if (/\\s/.test(sql[i])) {\n        let j = i;\n        while (j \u003c sql.length \u0026\u0026 /\\s/.test(sql[j])) j++;\n        tokens.push({ type: 'ws', val: sql.slice(i, j) });\n        i = j; continue;\n      }\n      if (/[(),;*=\u003c\u003e!+\\-\\/%\u0026|^~]/.test(sql[i])) {\n        tokens.push({ type: 'punct', val: sql[i] });\n        i++; continue;\n      }\n      let j = i;\n      while (j \u003c sql.length \u0026\u0026 /[A-Za-z0-9_$#@]/.test(sql[j])) j++;\n      if (j === i) { tokens.push({ type: 'other', val: sql[i] }); i++; continue; }\n      tokens.push({ type: 'word', val: sql.slice(i, j) });\n      i = j;\n    }\n    return tokens;\n  }\n\n  function upperKeywords(tokens) {\n    const out = tokens.map(t =\u003e Object.assign({}, t));\n    const single = new Set(KEYWORDS.filter(k =\u003e !k.includes(' ')));\n    for (let i = 0; i \u003c out.length; i++) {\n      if (out[i].type === 'word' \u0026\u0026 single.has(out[i].val.toUpperCase())) {\n        out[i].val = out[i].val.toUpperCase();\n        out[i].type = 'keyword';\n      }\n    }\n    const multi = KEYWORDS.filter(k =\u003e k.includes(' ')).sort((a,b) =\u003e b.length - a.length);\n    for (const kw of multi) {\n      const parts = kw.split(' ');\n      for (let i = 0; i \u003c= out.length - parts.length; i++) {\n        const slice = out.slice(i, i + parts.length * 2 - 1);\n        let pi = 0, si = 0, match = true;\n        while (pi \u003c parts.length \u0026\u0026 si \u003c slice.length) {\n          if (slice[si].type === 'ws') { si++; continue; }\n          if ((slice[si].type === 'word' || slice[si].type === 'keyword') \u0026\u0026\n              slice[si].val.toUpperCase() === parts[pi]) {\n            pi++; si++;\n          } else { match = false; break; }\n        }\n        if (match \u0026\u0026 pi === parts.length) {\n          out.splice(i, si, { type: 'keyword', val: kw });\n        }\n      }\n    }\n    return out;\n  }\n\n  function formatSQL(sql, tabSize) {\n    const indent = ' '.repeat(tabSize);\n    const tokens = upperKeywords(tokenize(sql));\n    const clauseSet = new Set(CLAUSE_KW);\n    let result = '';\n    let depth = 0;\n    let firstToken = true;\n\n    function pad() { return indent.repeat(depth); }\n\n    for (let i = 0; i \u003c tokens.length; i++) {\n      const t = tokens[i];\n      if (t.type === 'ws') continue;\n\n      if (t.type === 'keyword' \u0026\u0026 clauseSet.has(t.val)) {\n        if (!firstToken) result += '\\n';\n        result += pad() + t.val + ' ';\n        firstToken = false;\n        continue;\n      }\n      if (t.val === '(') {\n        result += '(';\n        depth++;\n        let ni = i + 1;\n        while (ni \u003c tokens.length \u0026\u0026 tokens[ni].type === 'ws') ni++;\n        if (ni \u003c tokens.length \u0026\u0026 tokens[ni].val === 'SELECT') {\n          result += '\\n' + pad();\n        }\n        firstToken = false;\n        continue;\n      }\n      if (t.val === ')') {\n        depth = Math.max(0, depth - 1);\n        result = result.trimEnd();\n        result += '\\n' + pad() + ')';\n        firstToken = false;\n        continue;\n      }\n      if (t.val === ',') {\n        result = result.trimEnd();\n        result += ',\\n' + pad();\n        firstToken = false;\n        continue;\n      }\n      if (t.val === ';') {\n        result = result.trimEnd();\n        result += ';\\n';\n        firstToken = false;\n        continue;\n      }\n      result += t.val;\n      if (t.type !== 'punct') result += ' ';\n      firstToken = false;\n    }\n\n    return result\n      .split('\\n')\n      .map(l =\u003e l.trimEnd())\n      .join('\\n')\n      .replace(/\\n{3,}/g, '\\n\\n')\n      .trim();\n  }\n\n  function minifySQL(sql) {\n    const tokens = upperKeywords(tokenize(sql));\n    return tokens\n      .filter(t =\u003e t.type !== 'ws')\n      .map((t, i, arr) =\u003e {\n        const prev = arr[i-1];\n        const needSpace = prev \u0026\u0026\n          !['punct'].includes(prev.type) \u0026\u0026 !['punct'].includes(t.type) \u0026\u0026\n          !(prev.val === '(') \u0026\u0026 !(t.val === ')') \u0026\u0026\n          !(t.val === ',') \u0026\u0026 !(t.val === ';');\n        return (needSpace ? ' ' : '') + t.val;\n      })\n      .join('')\n      .trim();\n  }\n\n  function escapeHtml(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  function highlightSQL(text) {\n    const tokens = upperKeywords(tokenize(text));\n    return tokens.map(t =\u003e {\n      const v = escapeHtml(t.val);\n      switch (t.type) {\n        case 'keyword': return '\u003cspan class=\"kw\"\u003e' + v + '\u003c/span\u003e';\n        case 'string':  return '\u003cspan class=\"str\"\u003e' + v + '\u003c/span\u003e';\n        case 'number':  return '\u003cspan class=\"num\"\u003e' + v + '\u003c/span\u003e';\n        case 'comment': return '\u003cspan class=\"cmt\"\u003e' + v + '\u003c/span\u003e';\n        default: return v;\n      }\n    }).join('');\n  }\n\n  const inputEl   = document.getElementById('sql-input');\n  const outputEl  = document.getElementById('sql-output');\n  const formatBtn = document.getElementById('sql-format-btn');\n  const minifyBtn = document.getElementById('sql-minify-btn');\n  const clearBtn  = document.getElementById('sql-clear-btn');\n  const copyBtn   = document.getElementById('sql-copy-btn');\n  const hlChk     = document.getElementById('sql-highlight-chk');\n  const tabSel    = document.getElementById('sql-tabsize-sel');\n  const statusEl  = document.getElementById('sql-status');\n\n  let lastFormatted = '';\n\n  function renderOutput(text, highlight) {\n    lastFormatted = text;\n    if (highlight) {\n      outputEl.innerHTML = highlightSQL(text);\n    } else {\n      outputEl.textContent = text;\n    }\n  }\n\n  function setStatus(msg, ok) {\n    statusEl.textContent = msg;\n    statusEl.style.color = ok === false ? '#f87171' : '#4ade80';\n  }\n\n  formatBtn.addEventListener('click', () =\u003e {\n    const sql = inputEl.value.trim();\n    if (!sql) { setStatus('入力欄にSQLを貼り付けてください。', false); return; }\n    const tab = parseInt(tabSel.value, 10);\n    try {\n      renderOutput(formatSQL(sql, tab), hlChk.checked);\n      setStatus('整形完了しました。');\n    } catch(e) {\n      setStatus('整形中にエラーが発生しました。', false);\n    }\n  });\n\n  minifyBtn.addEventListener('click', () =\u003e {\n    const sql = inputEl.value.trim();\n    if (!sql) { setStatus('入力欄にSQLを貼り付けてください。', false); return; }\n    try {\n      renderOutput(minifySQL(sql), false);\n      setStatus('ミニファイ完了しました。');\n    } catch(e) {\n      setStatus('ミニファイ中にエラーが発生しました。', false);\n    }\n  });\n\n  clearBtn.addEventListener('click', () =\u003e {\n    inputEl.value = '';\n    outputEl.textContent = '';\n    lastFormatted = '';\n    statusEl.textContent = '';\n  });\n\n  copyBtn.addEventListener('click', () =\u003e {\n    if (!lastFormatted) { setStatus('コピーする内容がありません。', false); return; }\n    navigator.clipboard.writeText(lastFormatted).then(() =\u003e {\n      copyBtn.textContent = 'コピー済み!';\n      setStatus('クリップボードにコピーしました。');\n      setTimeout(() =\u003e { copyBtn.textContent = 'コピー'; }, 1800);\n    }).catch(() =\u003e {\n      setStatus('コピーに失敗しました。手動で選択してコピーしてください。', false);\n    });\n  });\n\n  hlChk.addEventListener('change', () =\u003e {\n    if (lastFormatted) renderOutput(lastFormatted, hlChk.checked);\n  });\n\n  inputEl.value = \"select u.id,u.name,o.total from users u inner join orders o on u.id=o.user_id where o.total\u003e100 and u.active=1 order by o.total desc limit 10;\";\n})();\n\u003c/script\u003e","title":"SQLフォーマッター — 無料オンラインツール"},{"content":"HTMLを左パネルに貼り付けるだけで、即座にMarkdownへ変換します。サーバー不要・会員登録不要、すべてブラウザ内で完結します。\nMarkdownの見た目を確認したい → Markdownプレビューツール テーブルをゼロから作りたい → Markdownテーブルジェネレーター \u0026#128196; サンプルHTMLを読み込む \u0026#10005; クリア GitHub Flavored Markdown 参照スタイルリンク HTML 入力0 文字 Markdown 出力 \u0026#128203; Markdownをコピー 開発チームの会計管理もかんたんに\nfreee会計なら、SaaS利用料・開発ツールの経費管理もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連ツール Html Beautifier → Html Beautifierツール Html Entity Converter → Html Entity Converterツール Html Entity Encoder → Html Entity Encoderツール ","permalink":"https://productivity-works.com/ja/tools/html-to-markdown/","summary":"\u003cp\u003eHTMLを左パネルに貼り付けるだけで、即座にMarkdownへ変換します。サーバー不要・会員登録不要、すべてブラウザ内で完結します。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eMarkdownの見た目を確認したい → \u003ca href=\"https://productivity-works.com/ja/tools/markdown-preview/\"\u003eMarkdownプレビューツール\u003c/a\u003e\n\nテーブルをゼロから作りたい → \u003ca href=\"https://productivity-works.com/ja/tools/markdown-table-generator/\"\u003eMarkdownテーブルジェネレーター\u003c/a\u003e\n\u003c/p\u003e\u003c/blockquote\u003e\n\u003cdiv id=\"hm-app\"\u003e\n\u003cstyle\u003e\n#hm-app *,#hm-app *::before,#hm-app *::after{box-sizing:border-box;margin:0;padding:0}\n#hm-app{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;font-size:14px;color:#1e293b;line-height:1.5}\n#hm-app .hm-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px;padding:10px 14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px}\n#hm-app .hm-btn{display:inline-flex;align-items:center;gap:5px;padding:6px 14px;border:1px solid #cbd5e1;border-radius:6px;background:#fff;color:#334155;font-size:13px;font-weight:500;cursor:pointer;transition:background .15s,border-color .15s}\n#hm-app .hm-btn:hover{background:#f1f5f9;border-color:#94a3b8}\n#hm-app .hm-btn.hm-btn-primary{background:#2563eb;border-color:#2563eb;color:#fff}\n#hm-app .hm-btn.hm-btn-primary:hover{background:#1d4ed8;border-color:#1d4ed8}\n#hm-app .hm-btn.hm-btn-success{background:#16a34a;border-color:#16a34a;color:#fff}\n#hm-app .hm-btn.hm-btn-success:hover{background:#15803d;border-color:#15803d}\n#hm-app .hm-toggles{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-left:auto}\n#hm-app .hm-toggle-label{display:flex;align-items:center;gap:5px;font-size:12px;color:#64748b;cursor:pointer;user-select:none}\n#hm-app .hm-toggle-label input[type=checkbox]{width:14px;height:14px;cursor:pointer;accent-color:#2563eb}\n#hm-app .hm-panels{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n@media(max-width:680px){#hm-app .hm-panels{grid-template-columns:1fr}}\n#hm-app .hm-panel{display:flex;flex-direction:column;gap:6px}\n#hm-app .hm-panel-header{display:flex;justify-content:space-between;align-items:center;font-size:12px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.04em}\n#hm-app textarea,#hm-app .hm-output{width:100%;min-height:360px;padding:12px;border:1px solid #e2e8f0;border-radius:8px;font-family:\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,monospace;font-size:12.5px;line-height:1.6;resize:vertical;background:#fff;color:#1e293b;transition:border-color .15s}\n#hm-app textarea:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 3px rgba(37,99,235,.1)}\n#hm-app .hm-output{white-space:pre-wrap;word-break:break-word;background:#f8fafc;overflow:auto;cursor:text}\n#hm-app .hm-status{font-size:11px;color:#94a3b8;text-align:right;margin-top:4px}\n#hm-app .hm-copy-notice{font-size:12px;color:#16a34a;font-weight:600}\n\u003c/style\u003e\n\u003cdiv class=\"hm-toolbar\"\u003e\n  \u003cbutton class=\"hm-btn hm-btn-primary\" id=\"hm-sample-btn\"\u003e\u0026#128196; サンプルHTMLを読み込む\u003c/button\u003e\n  \u003cbutton class=\"hm-btn\" id=\"hm-clear-btn\"\u003e\u0026#10005; クリア\u003c/button\u003e\n  \u003cdiv class=\"hm-toggles\"\u003e\n    \u003clabel class=\"hm-toggle-label\"\u003e\u003cinput type=\"checkbox\" id=\"hm-gfm\" checked\u003e GitHub Flavored Markdown\u003c/label\u003e\n    \u003clabel class=\"hm-toggle-label\"\u003e\u003cinput type=\"checkbox\" id=\"hm-reflinks\"\u003e 参照スタイルリンク\u003c/label\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"hm-panels\"\u003e\n  \u003cdiv class=\"hm-panel\"\u003e\n    \u003cdiv class=\"hm-panel-header\"\u003e\u003cspan\u003eHTML 入力\u003c/span\u003e\u003cspan id=\"hm-char-count\"\u003e0 文字\u003c/span\u003e\u003c/div\u003e\n    \u003ctextarea id=\"hm-input\" placeholder=\"HTMLをここに貼り付けてください…\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"hm-panel\"\u003e\n    \u003cdiv class=\"hm-panel-header\"\u003e\n      \u003cspan\u003eMarkdown 出力\u003c/span\u003e\n      \u003cspan id=\"hm-copy-status\"\u003e\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"hm-output\" id=\"hm-output\" aria-live=\"polite\"\u003e\u003c/div\u003e\n    \u003cdiv style=\"display:flex;justify-content:flex-end;margin-top:6px\"\u003e\n      \u003cbutton class=\"hm-btn hm-btn-success\" id=\"hm-copy-btn\"\u003e\u0026#128203; Markdownをコピー\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"hm-status\" id=\"hm-line-count\"\u003e\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  var input   = document.getElementById('hm-input');\n  var output  = document.getElementById('hm-output');\n  var copyBtn = document.getElementById('hm-copy-btn');\n  var copyStatus = document.getElementById('hm-copy-status');\n  var charCount  = document.getElementById('hm-char-count');\n  var lineCount  = document.getElementById('hm-line-count');\n  var gfmToggle  = document.getElementById('hm-gfm');\n  var refToggle  = document.getElementById('hm-reflinks');\n  var sampleBtn  = document.getElementById('hm-sample-btn');\n  var clearBtn   = document.getElementById('hm-clear-btn');\n\n  var SAMPLE_HTML = [\n    '\u003ch1\u003eHTML→Markdown変換サンプル\u003c/h1\u003e',\n    '\u003cp\u003eこのコンバーターは\u003cstrong\u003e太字\u003c/strong\u003e、\u003cem\u003e斜体\u003c/em\u003e、\u003ca href=\"https://example.com\"\u003eリンク\u003c/a\u003eに対応しています。\u003c/p\u003e","title":"HTML→Markdown変換ツール"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n住宅ローンシミュレーター【2026年版】 借入額・金利・返済期間を入力するだけで、月々の返済額・総返済額・利息総額を自動計算します。元利均等返済と元金均等返済の比較もできます。\n借入額（万円） 500万3,500万円1億円 金利（年利 %） 0.1%0.65%3.0% 返済期間（年） 5年35年40年 返済方式 元利均等返済 元金均等返済 元利均等：毎月同額返済　/　元金均等：元金を均等返済（初期負担大・総利息少） 返済推移グラフ 金利別 月々返済額の比較（借入額 3,500万円・35年） 住宅ローンの基礎知識 元利均等返済と元金均等返済の違い 元利均等返済は毎月の返済額が一定のため、家計の計画が立てやすいのが特徴です。ただし、返済初期は利息の割合が大きく、元金がなかなか減りません。\n元金均等返済は毎月の元金返済額が一定で、残高の減少に伴い利息も減るため、総返済額は元利均等より少なくなります。ただし初期の返済負担が大きくなります。\n変動金利と固定金利 2026年現在、変動金利型の住宅ローンは年0.3%〜0.7%程度と歴史的な低水準です。一方、全期間固定型（フラット35など）は年1.5%〜2.0%前後です。\n変動金利は金利上昇リスクがありますが、固定金利との差額分を繰上返済に回すことで、実質的なリスクヘッジが可能です。\n住宅ローン控除（減税） 住宅ローン控除は、年末の住宅ローン残高の0.7%が所得税・住民税から控除される制度です。新築の場合は最長13年間適用されます。上限は借入限度額（省エネ性能等により2,000万〜5,000万円）に基づきます。\n不動産投資に興味がある方は「RENOSYの利回りは本当？評判・口コミを徹底検証 」もご覧ください。投資用ワンルームマンションの実質利回りをデータで分析しています。\n確定申告が必要になったら、会計ソフトfreee会計 なら住宅ローン控除の申告もガイドに沿って進められます。\n関連記事\n会社員が始めるRENOSY不動産投資入門 副業税金計算ツール 手取り計算シミュレーター iDeCo節税シミュレーター 関連記事 会社員が不動産投資を始めるならRENOSY？｜NISAやiDeCoとの使い分けガイド ","permalink":"https://productivity-works.com/ja/tools/jutaku-loan-simulator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"住宅ローンシミュレーター2026年版\"\u003e住宅ローンシミュレーター【2026年版】\u003c/h1\u003e\n\u003cp\u003e借入額・金利・返済期間を入力するだけで、\u003cstrong\u003e月々の返済額\u003c/strong\u003e・\u003cstrong\u003e総返済額\u003c/strong\u003e・\u003cstrong\u003e利息総額\u003c/strong\u003eを自動計算します。元利均等返済と元金均等返済の比較もできます。\u003c/p\u003e\n\u003cdiv id=\"loan-calc\" style=\"max-width:680px;margin:0 auto;font-family:'Noto Sans JP',sans-serif;\"\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e借入額（万円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"principal\" min=\"500\" max=\"10000\" step=\"100\" value=\"3500\" oninput=\"calcLoan()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e500万\u003c/span\u003e\u003cspan id=\"principalVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e3,500万円\u003c/span\u003e\u003cspan\u003e1億円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e金利（年利 %）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"rate\" min=\"0.1\" max=\"3.0\" step=\"0.05\" value=\"0.65\" oninput=\"calcLoan()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0.1%\u003c/span\u003e\u003cspan id=\"rateVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e0.65%\u003c/span\u003e\u003cspan\u003e3.0%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e返済期間（年）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"years\" min=\"5\" max=\"40\" step=\"1\" value=\"35\" oninput=\"calcLoan()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e5年\u003c/span\u003e\u003cspan id=\"yearsVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e35年\u003c/span\u003e\u003cspan\u003e40年\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e返済方式\u003c/label\u003e\n\u003cdiv style=\"display:flex;gap:16px;\"\u003e\n\u003clabel style=\"cursor:pointer;\"\u003e\u003cinput type=\"radio\" name=\"method\" value=\"equal_payment\" checked onchange=\"calcLoan()\"\u003e 元利均等返済\u003c/label\u003e\n\u003clabel style=\"cursor:pointer;\"\u003e\u003cinput type=\"radio\" name=\"method\" value=\"equal_principal\" onchange=\"calcLoan()\"\u003e 元金均等返済\u003c/label\u003e\n\u003c/div\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;margin-top:4px;\"\u003e元利均等：毎月同額返済　/　元金均等：元金を均等返済（初期負担大・総利息少）\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"result\" style=\"margin-top:24px;padding:20px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"chart-section\" style=\"margin-top:24px;padding:24px;border:2px solid #10b981;border-radius:12px;background:#f0fdf4;\"\u003e\n\u003ch3 style=\"margin:0 0 16px;color:#166534;font-size:16px;\"\u003e返済推移グラフ\u003c/h3\u003e\n\u003ccanvas id=\"loanChart\" width=\"640\" height=\"300\" style=\"width:100%;height:auto;\"\u003e\u003c/canvas\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:24px;padding:24px;border:2px solid #f59e0b;border-radius:12px;background:#fffbeb;\"\u003e\n\u003ch3 style=\"margin:0 0 12px;color:#92400e;font-size:16px;\"\u003e金利別 月々返済額の比較（借入額 \u003cspan id=\"compareLabel\"\u003e3,500万円\u003c/span\u003e・35年）\u003c/h3\u003e\n\u003cdiv id=\"rateCompare\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction fmt(n){return n.toLocaleString('ja-JP');}\n\nfunction calcLoan(){\n  var P=+document.getElementById('principal').value;\n  var r=+document.getElementById('rate').value;\n  var Y=+document.getElementById('years').value;\n  var method=document.querySelector('input[name=\"method\"]:checked').value;\n\n  document.getElementById('principalVal').textContent=fmt(P)+'万円';\n  document.getElementById('rateVal').textContent=r.toFixed(2)+'%';\n  document.getElementById('yearsVal').textContent=Y+'年';\n\n  var Pyen=P*10000;\n  var mr=r/100/12;\n  var n=Y*12;\n  var monthly,totalPay,totalInterest;\n  var balances=[],interests=[],principals=[];\n\n  if(method==='equal_payment'){\n    if(mr===0){monthly=Pyen/n;}\n    else{monthly=Pyen*mr*Math.pow(1+mr,n)/(Math.pow(1+mr,n)-1);}\n    totalPay=monthly*n;\n    totalInterest=totalPay-Pyen;\n    var bal=Pyen;\n    for(var y=0;y\u003c=Y;y++){\n      balances.push(Math.round(bal/10000));\n      if(y\u003cY){\n        var yInt=0,yPrin=0;\n        for(var m=0;m\u003c12;m++){\n          var intPart=bal*mr;\n          var prinPart=monthly-intPart;\n          yInt+=intPart;yPrin+=prinPart;bal-=prinPart;\n        }\n        interests.push(Math.round(yInt/10000));\n        principals.push(Math.round(yPrin/10000));\n      }\n    }\n  }else{\n    var prinPerMonth=Pyen/n;\n    totalPay=0;totalInterest=0;\n    var bal=Pyen;\n    var firstMonth=prinPerMonth+bal*mr;\n    for(var y=0;y\u003c=Y;y++){\n      balances.push(Math.round(bal/10000));\n      if(y\u003cY){\n        var yInt=0,yPrin=0;\n        for(var m=0;m\u003c12;m++){\n          var intPart=bal*mr;\n          var pay=prinPerMonth+intPart;\n          totalPay+=pay;totalInterest+=intPart;\n          yPrin+=prinPerMonth;yInt+=intPart;bal-=prinPerMonth;\n        }\n        interests.push(Math.round(yInt/10000));\n        principals.push(Math.round(yPrin/10000));\n      }\n    }\n    if(method==='equal_payment'){monthly=monthly;}\n    else{monthly=firstMonth;}\n  }\n\n  if(method==='equal_payment'){\n    totalPay=monthly*n;totalInterest=totalPay-Pyen;\n  }\n\n  var html='\u003cdiv style=\"text-align:center;margin-bottom:16px;\"\u003e';\n  html+='\u003cdiv style=\"font-size:14px;color:#64748b;\"\u003e月々の返済額'+(method==='equal_principal'?'（初月）':'')+'\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:36px;font-weight:bold;color:#2563eb;\"\u003e'+fmt(Math.round(monthly))+'\u003cspan style=\"font-size:16px;\"\u003e円\u003c/span\u003e\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n  html+='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;text-align:center;\"\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#f1f5f9;border-radius:8px;\"\u003e\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e借入額\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;\"\u003e'+fmt(P)+'\u003cspan style=\"font-size:12px;\"\u003e万円\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#fef2f2;border-radius:8px;\"\u003e\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e利息総額\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;color:#dc2626;\"\u003e'+fmt(Math.round(totalInterest/10000))+'\u003cspan style=\"font-size:12px;\"\u003e万円\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#eff6ff;border-radius:8px;\"\u003e\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e総返済額\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;color:#1e40af;\"\u003e'+fmt(Math.round(totalPay/10000))+'\u003cspan style=\"font-size:12px;\"\u003e万円\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n\n  if(method==='equal_principal'){\n    var lastMonth=prinPerMonth+prinPerMonth*mr;\n    html+='\u003cdiv style=\"margin-top:12px;text-align:center;font-size:13px;color:#64748b;\"\u003e最終月の返済額: \u003cstrong\u003e'+fmt(Math.round(lastMonth))+'円\u003c/strong\u003e\u003c/div\u003e';\n  }\n\n  document.getElementById('result').innerHTML=html;\n\n  drawChart(balances,interests,principals,Y);\n  drawRateCompare(P,Y);\n}\n\nfunction drawChart(balances,interests,principals,Y){\n  var c=document.getElementById('loanChart');\n  var ctx=c.getContext('2d');\n  var W=c.width,H=c.height;\n  ctx.clearRect(0,0,W,H);\n\n  var maxBal=Math.max.apply(null,balances);\n  if(maxBal===0)maxBal=1;\n  var pad={t:20,r:20,b:40,l:60};\n  var cw=W-pad.l-pad.r,ch=H-pad.t-pad.b;\n\n  ctx.strokeStyle='#e2e8f0';ctx.lineWidth=1;\n  for(var i=0;i\u003c=4;i++){\n    var y=pad.t+ch*(1-i/4);\n    ctx.beginPath();ctx.moveTo(pad.l,y);ctx.lineTo(W-pad.r,y);ctx.stroke();\n    ctx.fillStyle='#94a3b8';ctx.font='11px sans-serif';ctx.textAlign='right';\n    ctx.fillText(fmt(Math.round(maxBal*i/4))+'万',pad.l-6,y+4);\n  }\n\n  ctx.beginPath();ctx.strokeStyle='#2563eb';ctx.lineWidth=2.5;\n  for(var i=0;i\u003c=Y;i++){\n    var x=pad.l+cw*i/Y,y=pad.t+ch*(1-balances[i]/maxBal);\n    if(i===0)ctx.moveTo(x,y);else ctx.lineTo(x,y);\n  }\n  ctx.stroke();\n\n  ctx.fillStyle='rgba(37,99,235,0.1)';\n  ctx.beginPath();\n  ctx.moveTo(pad.l,pad.t+ch);\n  for(var i=0;i\u003c=Y;i++){\n    var x=pad.l+cw*i/Y,y=pad.t+ch*(1-balances[i]/maxBal);\n    ctx.lineTo(x,y);\n  }\n  ctx.lineTo(pad.l+cw,pad.t+ch);ctx.closePath();ctx.fill();\n\n  ctx.fillStyle='#64748b';ctx.font='11px sans-serif';ctx.textAlign='center';\n  var step=Y\u003c=10?1:Y\u003c=20?5:Y\u003c=35?5:10;\n  for(var i=0;i\u003c=Y;i+=step){\n    var x=pad.l+cw*i/Y;\n    ctx.fillText(i+'年',x,H-pad.b+20);\n  }\n  if(Y%step!==0){ctx.fillText(Y+'年',pad.l+cw,H-pad.b+20);}\n\n  ctx.fillStyle='#2563eb';ctx.font='bold 12px sans-serif';ctx.textAlign='left';\n  ctx.fillText('残高推移',pad.l,pad.t-6);\n}\n\nfunction drawRateCompare(P,Y){\n  var rates=[0.4,0.65,1.0,1.5,2.0];\n  var Pyen=P*10000;var n=Y*12;\n  var html='\u003ctable style=\"width:100%;border-collapse:collapse;font-size:14px;\"\u003e';\n  html+='\u003ctr style=\"border-bottom:2px solid #92400e;\"\u003e\u003cth style=\"text-align:left;padding:6px;\"\u003e金利\u003c/th\u003e\u003cth style=\"text-align:right;padding:6px;\"\u003e月々返済\u003c/th\u003e\u003cth style=\"text-align:right;padding:6px;\"\u003e総返済額\u003c/th\u003e\u003cth style=\"text-align:right;padding:6px;\"\u003e利息総額\u003c/th\u003e\u003c/tr\u003e';\n  for(var i=0;i\u003crates.length;i++){\n    var mr=rates[i]/100/12;\n    var m=Pyen*mr*Math.pow(1+mr,n)/(Math.pow(1+mr,n)-1);\n    var total=m*n;var interest=total-Pyen;\n    var bg=i%2===0?'#fff':'#fef3c7';\n    html+='\u003ctr style=\"background:'+bg+';\"\u003e\u003ctd style=\"padding:6px;font-weight:bold;\"\u003e'+rates[i].toFixed(2)+'%\u003c/td\u003e';\n    html+='\u003ctd style=\"padding:6px;text-align:right;\"\u003e'+fmt(Math.round(m))+'円\u003c/td\u003e';\n    html+='\u003ctd style=\"padding:6px;text-align:right;\"\u003e'+fmt(Math.round(total/10000))+'万円\u003c/td\u003e';\n    html+='\u003ctd style=\"padding:6px;text-align:right;color:#dc2626;\"\u003e'+fmt(Math.round(interest/10000))+'万円\u003c/td\u003e\u003c/tr\u003e';\n  }\n  html+='\u003c/table\u003e';\n  document.getElementById('rateCompare').innerHTML=html;\n  document.getElementById('compareLabel').textContent=fmt(P)+'万円';\n}\n\ndocument.addEventListener('DOMContentLoaded',function(){calcLoan();});\ncalcLoan();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"住宅ローンの基礎知識\"\u003e住宅ローンの基礎知識\u003c/h2\u003e\n\u003ch3 id=\"元利均等返済と元金均等返済の違い\"\u003e元利均等返済と元金均等返済の違い\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e元利均等返済\u003c/strong\u003eは毎月の返済額が一定のため、家計の計画が立てやすいのが特徴です。ただし、返済初期は利息の割合が大きく、元金がなかなか減りません。\u003c/p\u003e","title":"住宅ローンシミュレーター｜月々返済額・総返済額を自動計算【2026年版】"},{"content":" SQL 入力 MongoDB 出力 コピーしました！ 変換する 出力をコピー クリア サンプルSQL SELECT * WHERE フィールド指定 WHERE AND LIKE IN ORDER + LIMIT INSERT UPDATE DELETE 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/sql-to-mongodb/","summary":"\u003cdiv id=\"stm-app\"\u003e\n  \u003cstyle\u003e\n    #stm-app {\n      font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Yu Gothic UI\", sans-serif;\n      max-width: 900px;\n      margin: 0 auto;\n      color: #e2e8f0;\n    }\n    #stm-app .stm-layout {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 16px;\n    }\n    @media (max-width: 640px) {\n      #stm-app .stm-layout { grid-template-columns: 1fr; }\n    }\n    #stm-app .stm-panel {\n      display: flex;\n      flex-direction: column;\n      gap: 8px;\n    }\n    #stm-app .stm-panel-label {\n      font-size: 12px;\n      font-weight: 600;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: #94a3b8;\n    }\n    #stm-app textarea {\n      width: 100%;\n      height: 260px;\n      padding: 14px 16px;\n      font-size: 13.5px;\n      font-family: \"Fira Code\", \"Cascadia Code\", \"Consolas\", \"Menlo\", monospace;\n      line-height: 1.65;\n      border: 1.5px solid #334155;\n      border-radius: 10px;\n      resize: vertical;\n      box-sizing: border-box;\n      background: #0f172a;\n      color: #e2e8f0;\n      outline: none;\n      transition: border-color 0.2s;\n    }\n    #stm-app textarea:focus {\n      border-color: #38bdf8;\n    }\n    #stm-app textarea::placeholder {\n      color: #475569;\n    }\n    #stm-app textarea[readonly] {\n      background: #0a1120;\n      cursor: default;\n      color: #7dd3fc;\n    }\n    #stm-app .stm-btn-row {\n      display: flex;\n      gap: 10px;\n      justify-content: center;\n      margin: 6px 0;\n      flex-wrap: wrap;\n    }\n    #stm-app .stm-btn {\n      padding: 10px 32px;\n      font-size: 14px;\n      font-weight: 600;\n      border: none;\n      border-radius: 8px;\n      cursor: pointer;\n      transition: background 0.15s, transform 0.1s;\n    }\n    #stm-app .stm-btn:active { transform: scale(0.97); }\n    #stm-app .stm-btn-convert {\n      background: linear-gradient(135deg, #0ea5e9, #6366f1);\n      color: #fff;\n    }\n    #stm-app .stm-btn-convert:hover { background: linear-gradient(135deg, #38bdf8, #818cf8); }\n    #stm-app .stm-btn-copy {\n      background: #1e293b;\n      color: #94a3b8;\n      border: 1.5px solid #334155;\n    }\n    #stm-app .stm-btn-copy:hover { background: #334155; color: #e2e8f0; }\n    #stm-app .stm-btn-clear {\n      background: #1e293b;\n      color: #94a3b8;\n      border: 1.5px solid #334155;\n    }\n    #stm-app .stm-btn-clear:hover { background: #334155; color: #e2e8f0; }\n    #stm-app .stm-error {\n      background: #1e0a0a;\n      border: 1.5px solid #7f1d1d;\n      border-radius: 8px;\n      color: #fca5a5;\n      font-size: 13px;\n      padding: 10px 14px;\n      font-family: \"Fira Code\", monospace;\n      display: none;\n    }\n    #stm-app .stm-examples {\n      margin-top: 8px;\n      border: 1.5px solid #1e293b;\n      border-radius: 10px;\n      overflow: hidden;\n    }\n    #stm-app .stm-examples-title {\n      background: #1e293b;\n      padding: 8px 14px;\n      font-size: 12px;\n      font-weight: 600;\n      color: #64748b;\n      letter-spacing: 0.06em;\n      text-transform: uppercase;\n    }\n    #stm-app .stm-example-list {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0;\n    }\n    #stm-app .stm-example-btn {\n      background: none;\n      border: none;\n      border-right: 1px solid #1e293b;\n      border-bottom: 1px solid #1e293b;\n      color: #38bdf8;\n      font-size: 12px;\n      font-family: \"Fira Code\", monospace;\n      padding: 7px 12px;\n      cursor: pointer;\n      text-align: left;\n      transition: background 0.12s;\n    }\n    #stm-app .stm-example-btn:hover { background: #0f172a; color: #7dd3fc; }\n    #stm-app .stm-copy-toast {\n      display: none;\n      font-size: 12px;\n      color: #4ade80;\n      text-align: center;\n      margin-top: 4px;\n    }\n  \u003c/style\u003e\n  \u003cdiv class=\"stm-layout\"\u003e\n    \u003cdiv class=\"stm-panel\"\u003e\n      \u003cdiv class=\"stm-panel-label\"\u003eSQL 入力\u003c/div\u003e\n      \u003ctextarea id=\"stm-sql\" placeholder=\"SELECT * FROM users WHERE age \u003e 25\"\u003e\u003c/textarea\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"stm-panel\"\u003e\n      \u003cdiv class=\"stm-panel-label\"\u003eMongoDB 出力\u003c/div\u003e\n      \u003ctextarea id=\"stm-mongo\" readonly placeholder=\"変換されたMongoDBクエリがここに表示されます...\"\u003e\u003c/textarea\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"stm-error\" class=\"stm-error\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"stm-copy-toast\" id=\"stm-copy-toast\"\u003eコピーしました！\u003c/div\u003e\n  \u003cdiv class=\"stm-btn-row\"\u003e\n    \u003cbutton class=\"stm-btn stm-btn-convert\" id=\"stm-convert-btn\"\u003e変換する\u003c/button\u003e\n    \u003cbutton class=\"stm-btn stm-btn-copy\" id=\"stm-copy-btn\"\u003e出力をコピー\u003c/button\u003e\n    \u003cbutton class=\"stm-btn stm-btn-clear\" id=\"stm-clear-btn\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"stm-examples\"\u003e\n    \u003cdiv class=\"stm-examples-title\"\u003eサンプルSQL\u003c/div\u003e\n    \u003cdiv class=\"stm-example-list\"\u003e\n      \u003cbutton class=\"stm-example-btn\" data-sql=\"SELECT * FROM users WHERE age \u003e 25\"\u003eSELECT * WHERE\u003c/button\u003e\n      \u003cbutton class=\"stm-example-btn\" data-sql=\"SELECT name, age FROM users\"\u003eフィールド指定\u003c/button\u003e\n      \u003cbutton class=\"stm-example-btn\" data-sql=\"SELECT * FROM orders WHERE status = 'active' AND total \u003e 100\"\u003eWHERE AND\u003c/button\u003e\n      \u003cbutton class=\"stm-example-btn\" data-sql=\"SELECT * FROM users WHERE name LIKE '%john%'\"\u003eLIKE\u003c/button\u003e\n      \u003cbutton class=\"stm-example-btn\" data-sql=\"SELECT * FROM products WHERE category IN ('books', 'music')\"\u003eIN\u003c/button\u003e\n      \u003cbutton class=\"stm-example-btn\" data-sql=\"SELECT * FROM users ORDER BY age DESC LIMIT 10\"\u003eORDER + LIMIT\u003c/button\u003e\n      \u003cbutton class=\"stm-example-btn\" data-sql=\"INSERT INTO users (name, age, email) VALUES ('Tanaka', 30, 'tanaka@example.com')\"\u003eINSERT\u003c/button\u003e\n      \u003cbutton class=\"stm-example-btn\" data-sql=\"UPDATE users SET age = 31, email = 'new@example.com' WHERE name = 'Tanaka'\"\u003eUPDATE\u003c/button\u003e\n      \u003cbutton class=\"stm-example-btn\" data-sql=\"DELETE FROM users WHERE name = 'Tanaka'\"\u003eDELETE\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cscript\u003e\n  (function() {\n    var sqlEl    = document.getElementById('stm-sql');\n    var mongoEl  = document.getElementById('stm-mongo');\n    var errorEl  = document.getElementById('stm-error');\n    var copyToast= document.getElementById('stm-copy-toast');\n    var convertBtn = document.getElementById('stm-convert-btn');\n    var copyBtn  = document.getElementById('stm-copy-btn');\n    var clearBtn = document.getElementById('stm-clear-btn');\n\n    function showError(msg) {\n      errorEl.textContent = msg;\n      errorEl.style.display = 'block';\n      mongoEl.value = '';\n    }\n    function clearError() {\n      errorEl.style.display = 'none';\n    }\n\n    function parseValue(v) {\n      v = v.trim();\n      if (/^'.*'$/.test(v)) return JSON.stringify(v.slice(1, -1));\n      if (/^\".*\"$/.test(v)) return JSON.stringify(v.slice(1, -1));\n      if (!isNaN(Number(v))) return v;\n      if (v.toUpperCase() === 'NULL') return 'null';\n      if (v.toUpperCase() === 'TRUE') return 'true';\n      if (v.toUpperCase() === 'FALSE') return 'false';\n      return JSON.stringify(v);\n    }\n\n    function parseWhere(where) {\n      where = where.trim();\n      if (!where) return '{}';\n      var orParts = splitByKeyword(where, 'OR');\n      if (orParts.length \u003e 1) {\n        var orClauses = orParts.map(function(p) { return parseAndClause(p.trim()); });\n        return '{ $or: [ ' + orClauses.join(', ') + ' ] }';\n      }\n      return parseAndClause(where);\n    }\n\n    function parseAndClause(clause) {\n      var parts = splitByKeyword(clause, 'AND');\n      if (parts.length === 1) return parseSingleCondition(clause.trim());\n      var conditions = parts.map(function(p) { return parseSingleCondition(p.trim()); });\n      return '{ $and: [ ' + conditions.join(', ') + ' ] }';\n    }\n\n    function splitByKeyword(str, kw) {\n      var parts = [];\n      var inQuote = false;\n      var qChar = '';\n      var last = 0;\n      for (var i = 0; i \u003c str.length; i++) {\n        var c = str[i];\n        if (!inQuote \u0026\u0026 (c === \"'\" || c === '\"')) { inQuote = true; qChar = c; continue; }\n        if (inQuote \u0026\u0026 c === qChar) { inQuote = false; continue; }\n        if (!inQuote) {\n          var sub = str.slice(i).match(new RegExp('^' + kw + '\\\\b', 'i'));\n          if (sub) {\n            parts.push(str.slice(last, i));\n            i += sub[0].length;\n            last = i;\n            i--;\n          }\n        }\n      }\n      parts.push(str.slice(last));\n      return parts.filter(function(p) { return p.trim().length \u003e 0; });\n    }\n\n    function parseSingleCondition(cond) {\n      cond = cond.trim();\n\n      var isNullM = cond.match(/^(\\w+)\\s+IS\\s+NOT\\s+NULL$/i);\n      if (isNullM) return '{ ' + isNullM[1] + ': { $ne: null } }';\n      var isNullM2 = cond.match(/^(\\w+)\\s+IS\\s+NULL$/i);\n      if (isNullM2) return '{ ' + isNullM2[1] + ': null }';\n\n      var likeM = cond.match(/^(\\w+)\\s+(?:NOT\\s+)?LIKE\\s+('([^']*)'|\"([^\"]*)\")/i);\n      if (likeM) {\n        var likeNot = /NOT\\s+LIKE/i.test(cond);\n        var pattern = (likeM[3] !== undefined ? likeM[3] : likeM[4]);\n        var regexStr = pattern.replace(/%/g, '.*').replace(/_/g, '.');\n        var mongoRegex = '/' + regexStr + '/i';\n        if (likeNot) return '{ ' + likeM[1] + ': { $not: ' + mongoRegex + ' } }';\n        return '{ ' + likeM[1] + ': { $regex: ' + mongoRegex + ' } }';\n      }\n\n      var inM = cond.match(/^(\\w+)\\s+(NOT\\s+)?IN\\s*\\(([^)]+)\\)/i);\n      if (inM) {\n        var inNot = !!inM[2];\n        var vals = inM[3].split(',').map(function(v) { return parseValue(v.trim()); });\n        if (inNot) return '{ ' + inM[1] + ': { $nin: [ ' + vals.join(', ') + ' ] } }';\n        return '{ ' + inM[1] + ': { $in: [ ' + vals.join(', ') + ' ] } }';\n      }\n\n      var compM = cond.match(/^(\\w+)\\s*(!=|\u003c\u003e|\u003c=|\u003e=|\u003c|\u003e|=)\\s*(.+)$/i);\n      if (compM) {\n        var field = compM[1];\n        var op    = compM[2];\n        var val   = parseValue(compM[3]);\n        var opMap = { '=': null, '!=': '$ne', '\u003c\u003e': '$ne', '\u003c': '$lt', '\u003c=': '$lte', '\u003e': '$gt', '\u003e=': '$gte' };\n        var mongoOp = opMap[op];\n        if (mongoOp === null) return '{ ' + field + ': ' + val + ' }';\n        return '{ ' + field + ': { ' + mongoOp + ': ' + val + ' } }';\n      }\n\n      return '{ /* 未対応: ' + cond + ' */ }';\n    }\n\n    function parseFields(fieldStr) {\n      fieldStr = fieldStr.trim();\n      if (fieldStr === '*') return null;\n      var fields = fieldStr.split(',').map(function(f) { return f.trim().replace(/\\s+AS\\s+\\w+/i, ''); });\n      return '{ ' + fields.map(function(f) { return f + ': 1'; }).join(', ') + ' }';\n    }\n\n    function parseInsert(cols, vals) {\n      var colArr = cols.split(',').map(function(c) { return c.trim(); });\n      var valArr = splitValues(vals);\n      var pairs = colArr.map(function(c, i) {\n        return c + ': ' + parseValue(valArr[i] || 'null');\n      });\n      return '{ ' + pairs.join(', ') + ' }';\n    }\n\n    function splitValues(str) {\n      var result = [];\n      var cur = '';\n      var depth = 0;\n      var inQ = false;\n      var qC = '';\n      for (var i = 0; i \u003c str.length; i++) {\n        var c = str[i];\n        if (!inQ \u0026\u0026 (c === \"'\" || c === '\"')) { inQ = true; qC = c; cur += c; continue; }\n        if (inQ \u0026\u0026 c === qC) { inQ = false; cur += c; continue; }\n        if (!inQ \u0026\u0026 c === '(') { depth++; cur += c; continue; }\n        if (!inQ \u0026\u0026 c === ')') { depth--; cur += c; continue; }\n        if (!inQ \u0026\u0026 depth === 0 \u0026\u0026 c === ',') { result.push(cur.trim()); cur = ''; continue; }\n        cur += c;\n      }\n      if (cur.trim()) result.push(cur.trim());\n      return result;\n    }\n\n    function parseSet(setStr) {\n      var pairs = splitValues(setStr);\n      var obj = pairs.map(function(p) {\n        var m = p.match(/^(\\w+)\\s*=\\s*(.+)$/);\n        if (!m) return '/* ' + p + ' */';\n        return m[1] + ': ' + parseValue(m[2]);\n      });\n      return '{ ' + obj.join(', ') + ' }';\n    }\n\n    function convertSQL(sql) {\n      sql = sql.trim().replace(/;$/, '').trim();\n\n      var selM = sql.match(/^SELECT\\s+([\\s\\S]+?)\\s+FROM\\s+(\\w+)([\\s\\S]*)$/i);\n      if (selM) {\n        var fields   = selM[1].trim();\n        var table    = selM[2].trim();\n        var rest     = selM[3].trim();\n        var whereStr = '';\n        var orderStr = '';\n        var limitStr = '';\n\n        var limitM = rest.match(/\\bLIMIT\\s+(\\d+)\\b/i);\n        if (limitM) { limitStr = limitM[1]; rest = rest.replace(limitM[0], '').trim(); }\n\n        var orderM = rest.match(/\\bORDER\\s+BY\\s+([\\w\\s,]+?)(?=\\bLIMIT\\b|$)/i);\n        if (orderM) {\n          var orderRaw = orderM[1].trim();\n          rest = rest.replace(orderM[0], '').trim();\n          var orderParts = orderRaw.split(',').map(function(o) {\n            var om = o.trim().match(/^(\\w+)(?:\\s+(ASC|DESC))?$/i);\n            if (!om) return '';\n            var dir = (om[2] \u0026\u0026 om[2].toUpperCase() === 'DESC') ? -1 : 1;\n            return om[1] + ': ' + dir;\n          }).filter(Boolean);\n          orderStr = '{ ' + orderParts.join(', ') + ' }';\n        }\n\n        var whereM = rest.match(/\\bWHERE\\s+([\\s\\S]+?)(?=\\bORDER\\s+BY\\b|\\bLIMIT\\b|\\bGROUP\\s+BY\\b|$)/i);\n        if (whereM) whereStr = whereM[1].trim();\n\n        var filter = whereStr ? parseWhere(whereStr) : '{}';\n        var proj   = parseFields(fields);\n\n        var query = 'db.' + table + '.find(' + filter;\n        if (proj) query += ', ' + proj;\n        query += ')';\n        if (orderStr) query += '.sort(' + orderStr + ')';\n        if (limitStr) query += '.limit(' + limitStr + ')';\n        return query;\n      }\n\n      var insM = sql.match(/^INSERT\\s+INTO\\s+(\\w+)\\s*\\(([^)]+)\\)\\s*VALUES\\s*\\(([^)]+)\\)/i);\n      if (insM) {\n        var table = insM[1];\n        var doc = parseInsert(insM[2], insM[3]);\n        return 'db.' + table + '.insertOne(' + doc + ')';\n      }\n\n      var updM = sql.match(/^UPDATE\\s+(\\w+)\\s+SET\\s+([\\s\\S]+?)(?:\\s+WHERE\\s+([\\s\\S]+))?$/i);\n      if (updM) {\n        var table  = updM[1];\n        var setStr = updM[2].trim();\n        var whereStr2 = updM[3] ? updM[3].trim() : '';\n        setStr = setStr.replace(/\\s+WHERE\\s+[\\s\\S]+$/i, '').trim();\n        var filter2 = whereStr2 ? parseWhere(whereStr2) : '{}';\n        var update  = '{ $set: ' + parseSet(setStr) + ' }';\n        return 'db.' + table + '.updateOne(' + filter2 + ', ' + update + ')';\n      }\n\n      var delM = sql.match(/^DELETE\\s+FROM\\s+(\\w+)(?:\\s+WHERE\\s+([\\s\\S]+))?$/i);\n      if (delM) {\n        var table    = delM[1];\n        var whereStr3 = delM[2] ? delM[2].trim() : '';\n        var filter3  = whereStr3 ? parseWhere(whereStr3) : '{}';\n        return 'db.' + table + '.deleteOne(' + filter3 + ')';\n      }\n\n      throw new Error('未対応のSQL文です。SELECT、INSERT INTO、UPDATE、DELETE FROMに対応しています。');\n    }\n\n    convertBtn.addEventListener('click', function() {\n      clearError();\n      var sql = sqlEl.value.trim();\n      if (!sql) { showError('SQLを入力してください。'); return; }\n      try {\n        mongoEl.value = convertSQL(sql);\n      } catch (e) {\n        showError('エラー: ' + e.message);\n      }\n    });\n\n    sqlEl.addEventListener('keydown', function(e) {\n      if ((e.ctrlKey || e.metaKey) \u0026\u0026 e.key === 'Enter') convertBtn.click();\n    });\n\n    copyBtn.addEventListener('click', function() {\n      var text = mongoEl.value;\n      if (!text) return;\n      navigator.clipboard.writeText(text).then(function() {\n        copyToast.style.display = 'block';\n        setTimeout(function() { copyToast.style.display = 'none'; }, 1800);\n      });\n    });\n\n    clearBtn.addEventListener('click', function() {\n      sqlEl.value = '';\n      mongoEl.value = '';\n      clearError();\n    });\n\n    document.querySelectorAll('#stm-app .stm-example-btn').forEach(function(btn) {\n      btn.addEventListener('click', function() {\n        sqlEl.value = btn.getAttribute('data-sql');\n        clearError();\n        convertBtn.click();\n      });\n    });\n  })();\n  \u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e確定申告・会計をもっとラクに？\u003c/strong\u003e \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計\u003c/a\u003e\n なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\u003c/p\u003e","title":"SQL→MongoDB変換ツール"},{"content":" 🖼️ 写真をここにドロップ JPEG・PNG・WebP・GIF対応。アップロード不要、ブラウザ完結\n画像を選択 フィルター適用後 \u0026lt;!-- Preset Filters --\u0026gt; \u0026lt;div class=\u0026quot;pf-card\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;pf-card-title\u0026quot;\u0026gt;プリセットフィルター\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pf-presets\u0026quot; id=\u0026quot;pf-presets\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Adjustments --\u0026gt; \u0026lt;div class=\u0026quot;pf-card\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;pf-card-title\u0026quot;\u0026gt;詳細調整\u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;pf-sliders\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Actions --\u0026gt; \u0026lt;div class=\u0026quot;pf-card\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;pf-card-title\u0026quot;\u0026gt;操作\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pf-actions\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;pf-compare-toggle\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;pf-compare-chk\u0026quot;\u0026gt; Before / After 比較表示 \u0026lt;/label\u0026gt; \u0026lt;button class=\u0026quot;pf-btn pf-btn-primary\u0026quot; id=\u0026quot;pf-download-btn\u0026quot;\u0026gt;PNGでダウンロード\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pf-btn pf-btn-secondary\u0026quot; id=\u0026quot;pf-new-btn\u0026quot;\u0026gt;別の画像を読み込む\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pf-btn pf-btn-danger\u0026quot; id=\u0026quot;pf-reset-btn\u0026quot;\u0026gt;フィルターをリセット\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 関連ツール 画像を指定サイズに変更 → 画像リサイザー カラーコードの確認・変換 → カラーピッカー 個人事業主・フリーランスの会計をもっとかんたんに\n写真素材やデザイン制作を仕事にされている方。freee会計で帳簿・確定申告をまるっと効率化しませんか？\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/photo-filter/","summary":"\u003cdiv id=\"pf-app\"\u003e\n\u003cstyle\u003e\n#pf-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Yu Gothic UI', Roboto, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 0 48px 0;\n  color: #1a202c;\n}\n\n#pf-app * {\n  box-sizing: border-box;\n}\n\n/* Hero */\n.pf-hero {\n  background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 50%, #4c1d95 100%);\n  border-radius: 16px;\n  padding: 32px 28px;\n  margin-bottom: 24px;\n  color: #fff;\n}\n\n.pf-hero h2 {\n  margin: 0 0 6px 0;\n  font-size: 22px;\n  font-weight: 800;\n}\n\n.pf-hero p {\n  margin: 0;\n  font-size: 14px;\n  opacity: 0.88;\n  line-height: 1.7;\n}\n\n/* Drop Zone */\n.pf-dropzone {\n  border: 3px dashed #7c3aed;\n  border-radius: 14px;\n  padding: 48px 24px;\n  text-align: center;\n  background: #f5f3ff;\n  cursor: pointer;\n  transition: background 0.2s, border-color 0.2s;\n  margin-bottom: 24px;\n}\n\n.pf-dropzone:hover,\n.pf-dropzone.pf-drag-over {\n  background: #ede9fe;\n  border-color: #6d28d9;\n}\n\n.pf-dropzone-icon {\n  font-size: 48px;\n  margin-bottom: 12px;\n}\n\n.pf-dropzone h3 {\n  margin: 0 0 6px 0;\n  font-size: 17px;\n  font-weight: 700;\n  color: #4c1d95;\n}\n\n.pf-dropzone p {\n  margin: 0 0 16px 0;\n  font-size: 13px;\n  color: #6b7280;\n}\n\n.pf-btn-upload {\n  display: inline-block;\n  padding: 10px 24px;\n  background: #7c3aed;\n  color: #fff;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  border: none;\n  transition: background 0.2s;\n}\n\n.pf-btn-upload:hover {\n  background: #6d28d9;\n}\n\n/* Main Editor */\n.pf-editor {\n  display: none;\n  gap: 24px;\n}\n\n.pf-editor.pf-visible {\n  display: grid;\n  grid-template-columns: 1fr 320px;\n}\n\n@media (max-width: 700px) {\n  .pf-editor.pf-visible {\n    grid-template-columns: 1fr;\n  }\n}\n\n/* Canvas Area */\n.pf-canvas-wrap {\n  background: #0f172a;\n  border-radius: 14px;\n  padding: 16px;\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  min-height: 300px;\n}\n\n.pf-canvas-label {\n  color: #94a3b8;\n  font-size: 11px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  text-align: center;\n}\n\n.pf-canvas-container {\n  position: relative;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n#pf-canvas {\n  max-width: 100%;\n  max-height: 480px;\n  border-radius: 8px;\n  display: block;\n}\n\n.pf-comparison-wrap {\n  display: flex;\n  gap: 8px;\n}\n\n.pf-comparison-wrap .pf-canvas-container {\n  flex: 1;\n  flex-direction: column;\n  gap: 4px;\n}\n\n/* Controls Panel */\n.pf-panel {\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n}\n\n.pf-card {\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 16px;\n}\n\n.pf-card-title {\n  font-size: 12px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: #7c3aed;\n  margin: 0 0 12px 0;\n}\n\n/* Preset Filters */\n.pf-presets {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 8px;\n}\n\n.pf-preset-btn {\n  position: relative;\n  border: 2px solid transparent;\n  border-radius: 8px;\n  padding: 0;\n  background: #f3f4f6;\n  cursor: pointer;\n  overflow: hidden;\n  transition: border-color 0.15s, transform 0.1s;\n  aspect-ratio: 1;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: flex-end;\n}\n\n.pf-preset-btn:hover {\n  transform: scale(1.04);\n}\n\n.pf-preset-btn.pf-active {\n  border-color: #7c3aed;\n}\n\n.pf-preset-swatch {\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  top: 0;\n  left: 0;\n  border-radius: 6px;\n}\n\n.pf-preset-label {\n  position: relative;\n  z-index: 1;\n  font-size: 10px;\n  font-weight: 700;\n  color: #fff;\n  text-shadow: 0 1px 3px rgba(0,0,0,0.7);\n  padding: 4px 2px;\n  width: 100%;\n  text-align: center;\n  background: linear-gradient(transparent, rgba(0,0,0,0.55));\n}\n\n/* Sliders */\n.pf-slider-row {\n  margin-bottom: 10px;\n}\n\n.pf-slider-row:last-child {\n  margin-bottom: 0;\n}\n\n.pf-slider-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 4px;\n}\n\n.pf-slider-name {\n  font-size: 12px;\n  font-weight: 600;\n  color: #374151;\n}\n\n.pf-slider-val {\n  font-size: 12px;\n  color: #7c3aed;\n  font-weight: 700;\n  min-width: 36px;\n  text-align: right;\n}\n\n.pf-slider-row input[type=\"range\"] {\n  width: 100%;\n  height: 4px;\n  -webkit-appearance: none;\n  appearance: none;\n  background: #e5e7eb;\n  border-radius: 2px;\n  outline: none;\n  cursor: pointer;\n}\n\n.pf-slider-row input[type=\"range\"]::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #7c3aed;\n  cursor: pointer;\n  box-shadow: 0 1px 4px rgba(124,58,237,0.4);\n}\n\n.pf-slider-row input[type=\"range\"]::-moz-range-thumb {\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #7c3aed;\n  cursor: pointer;\n  border: none;\n}\n\n/* Action Buttons */\n.pf-actions {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n.pf-btn {\n  width: 100%;\n  padding: 11px 16px;\n  border: none;\n  border-radius: 9px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n\n.pf-btn-primary {\n  background: #7c3aed;\n  color: #fff;\n}\n\n.pf-btn-primary:hover {\n  background: #6d28d9;\n}\n\n.pf-btn-secondary {\n  background: #f3f4f6;\n  color: #374151;\n}\n\n.pf-btn-secondary:hover {\n  background: #e5e7eb;\n}\n\n.pf-btn-danger {\n  background: #fef2f2;\n  color: #dc2626;\n}\n\n.pf-btn-danger:hover {\n  background: #fee2e2;\n}\n\n/* Toggle Compare */\n.pf-compare-toggle {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 12px;\n  color: #6b7280;\n  cursor: pointer;\n  user-select: none;\n  padding: 6px 0;\n}\n\n.pf-compare-toggle input[type=\"checkbox\"] {\n  accent-color: #7c3aed;\n  width: 14px;\n  height: 14px;\n  cursor: pointer;\n}\n\n/* File info */\n.pf-file-info {\n  font-size: 11px;\n  color: #9ca3af;\n  text-align: center;\n  padding: 4px 0;\n}\n\n/* Related tools */\n.pf-related {\n  margin-top: 32px;\n  padding: 20px;\n  background: #f9fafb;\n  border-radius: 12px;\n  border: 1px solid #e5e7eb;\n}\n\n.pf-related h3 {\n  margin: 0 0 12px 0;\n  font-size: 14px;\n  font-weight: 700;\n  color: #374151;\n}\n\n.pf-related-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n\n.pf-related-links a {\n  display: inline-block;\n  padding: 6px 14px;\n  background: #fff;\n  border: 1px solid #d1d5db;\n  border-radius: 20px;\n  font-size: 13px;\n  color: #7c3aed;\n  text-decoration: none;\n  transition: all 0.15s;\n  font-weight: 500;\n}\n\n.pf-related-links a:hover {\n  background: #f5f3ff;\n  border-color: #7c3aed;\n}\n\u003c/style\u003e\n\u003c!-- Drop Zone --\u003e\n\u003cdiv class=\"pf-dropzone\" id=\"pf-dropzone\"\u003e\n  \u003cdiv class=\"pf-dropzone-icon\"\u003e🖼️\u003c/div\u003e\n  \u003ch3\u003e写真をここにドロップ\u003c/h3\u003e\n  \u003cp\u003eJPEG・PNG・WebP・GIF対応。アップロード不要、ブラウザ完結\u003c/p\u003e","title":"写真フィルター・画像エフェクトツール"},{"content":" プリセット: ナビバー カードグリッド 聖杯レイアウト サイドバー 中央揃え \u0026lt;!-- コンテナ設定 --\u0026gt; \u0026lt;div class=\u0026quot;fa-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fa-section-title\u0026quot;\u0026gt;コンテナ\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;display\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;fa-display\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;flex\u0026quot; selected\u0026gt;flex\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;inline-flex\u0026quot;\u0026gt;inline-flex\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;flex-direction\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;fa-direction\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;row\u0026quot; selected\u0026gt;row\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;row-reverse\u0026quot;\u0026gt;row-reverse\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;column\u0026quot;\u0026gt;column\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;column-reverse\u0026quot;\u0026gt;column-reverse\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;justify-content\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;fa-justify\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;flex-start\u0026quot; selected\u0026gt;flex-start\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-end\u0026quot;\u0026gt;flex-end\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;center\u0026quot;\u0026gt;center\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;space-between\u0026quot;\u0026gt;space-between\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;space-around\u0026quot;\u0026gt;space-around\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;space-evenly\u0026quot;\u0026gt;space-evenly\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;align-items\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;fa-align-items\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;stretch\u0026quot; selected\u0026gt;stretch\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-start\u0026quot;\u0026gt;flex-start\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-end\u0026quot;\u0026gt;flex-end\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;center\u0026quot;\u0026gt;center\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;baseline\u0026quot;\u0026gt;baseline\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;align-content\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;fa-align-content\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;normal\u0026quot; selected\u0026gt;normal\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-start\u0026quot;\u0026gt;flex-start\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-end\u0026quot;\u0026gt;flex-end\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;center\u0026quot;\u0026gt;center\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;space-between\u0026quot;\u0026gt;space-between\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;space-around\u0026quot;\u0026gt;space-around\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;stretch\u0026quot;\u0026gt;stretch\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;flex-wrap\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;fa-wrap\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;nowrap\u0026quot; selected\u0026gt;nowrap\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;wrap\u0026quot;\u0026gt;wrap\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;wrap-reverse\u0026quot;\u0026gt;wrap-reverse\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;gap\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fa-gap\u0026quot; value=\u0026quot;0px\u0026quot; style=\u0026quot;max-width:90px;\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;height（高さ）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fa-height\u0026quot; value=\u0026quot;260px\u0026quot; style=\u0026quot;max-width:90px;\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- アイテム管理 --\u0026gt; \u0026lt;div class=\u0026quot;fa-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fa-section-title\u0026quot;\u0026gt;アイテム\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;display:flex;gap:5px;margin-bottom:8px;\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;fa-add-btn\u0026quot; id=\u0026quot;fa-add-item\u0026quot;\u0026gt;+ 追加\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fa-remove-btn\u0026quot; id=\u0026quot;fa-remove-item\u0026quot;\u0026gt;- 削除\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-item-tabs\u0026quot; id=\u0026quot;fa-item-tabs\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- 選択アイテム設定 --\u0026gt; \u0026lt;div class=\u0026quot;fa-section\u0026quot; id=\u0026quot;fa-item-controls\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fa-section-title\u0026quot;\u0026gt;選択アイテム\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;flex-grow\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fa-grow\u0026quot; value=\u0026quot;0\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;10\u0026quot; step=\u0026quot;1\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;flex-shrink\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fa-shrink\u0026quot; value=\u0026quot;1\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;10\u0026quot; step=\u0026quot;1\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;flex-basis\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fa-basis\u0026quot; value=\u0026quot;auto\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;order（順序）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fa-order\u0026quot; value=\u0026quot;0\u0026quot; min=\u0026quot;-10\u0026quot; max=\u0026quot;10\u0026quot; step=\u0026quot;1\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;align-self\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;fa-align-self\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;auto\u0026quot; selected\u0026gt;auto\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-start\u0026quot;\u0026gt;flex-start\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-end\u0026quot;\u0026gt;flex-end\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;center\u0026quot;\u0026gt;center\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;baseline\u0026quot;\u0026gt;baseline\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;stretch\u0026quot;\u0026gt;stretch\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;width（幅）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fa-item-width\u0026quot; value=\u0026quot;auto\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;height（高さ）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fa-item-height\u0026quot; value=\u0026quot;auto\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ラベル\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fa-item-label\u0026quot; value=\u0026quot;\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; ライブプレビュー アイテムをクリックして選択 \u0026lt;div class=\u0026quot;fa-output-header\u0026quot;\u0026gt; \u0026lt;span\u0026gt;生成CSS\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;fa-copy-btn\u0026quot; id=\u0026quot;fa-copy-btn\u0026quot;\u0026gt;CSSをコピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fa-output\u0026quot; id=\u0026quot;fa-output\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; 関連ツール ボックスシャドウを生成 → CSSボックスシャドウジェネレーター グラデーションを作成 → CSSグラデーションジェネレーター カラーパレットを生成 → カラーパレットジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/flexbox-generator/","summary":"\u003cdiv id=\"flex-app\"\u003e\n\u003cstyle\u003e\n#flex-app *,\n#flex-app *::before,\n#flex-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#flex-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  font-size: 14px;\n  color: #1a1a2e;\n  background: #f0f4ff;\n  border-radius: 12px;\n  overflow: hidden;\n  margin: 1.5rem 0;\n}\n\n/* ── ツールバー ── */\n#flex-app .fa-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n  background: #1a1a2e;\n  padding: 10px 14px;\n}\n\n#flex-app .fa-toolbar span.fa-label {\n  color: #a0aec0;\n  font-size: 12px;\n  font-weight: 600;\n  letter-spacing: .04em;\n  margin-right: 2px;\n}\n\n#flex-app .fa-preset-btn {\n  background: #2d3748;\n  color: #e2e8f0;\n  border: 1px solid #4a5568;\n  border-radius: 6px;\n  padding: 5px 11px;\n  cursor: pointer;\n  font-size: 12px;\n  transition: background .15s;\n}\n#flex-app .fa-preset-btn:hover {\n  background: #4a5568;\n}\n\n/* ── メインレイアウト ── */\n#flex-app .fa-main {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0;\n  min-height: 520px;\n}\n\n/* ── コントロールパネル ── */\n#flex-app .fa-controls {\n  width: 260px;\n  flex-shrink: 0;\n  background: #ffffff;\n  border-right: 1px solid #e2e8f0;\n  overflow-y: auto;\n  max-height: 680px;\n}\n\n@media (max-width: 700px) {\n  #flex-app .fa-controls {\n    width: 100%;\n    max-height: none;\n    border-right: none;\n    border-bottom: 1px solid #e2e8f0;\n  }\n  #flex-app .fa-main {\n    flex-direction: column;\n  }\n}\n\n#flex-app .fa-section {\n  border-bottom: 1px solid #e8ecf4;\n  padding: 12px 14px;\n}\n\n#flex-app .fa-section-title {\n  font-size: 11px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: .06em;\n  color: #718096;\n  margin-bottom: 10px;\n}\n\n#flex-app .fa-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 8px;\n  gap: 6px;\n}\n\n#flex-app .fa-row label {\n  font-size: 12px;\n  color: #4a5568;\n  white-space: nowrap;\n  min-width: 90px;\n}\n\n#flex-app .fa-row select,\n#flex-app .fa-row input[type=\"text\"],\n#flex-app .fa-row input[type=\"number\"] {\n  flex: 1;\n  padding: 4px 7px;\n  border: 1px solid #cbd5e0;\n  border-radius: 5px;\n  font-size: 12px;\n  background: #f7fafc;\n  color: #2d3748;\n  outline: none;\n  transition: border-color .15s;\n}\n#flex-app .fa-row select:focus,\n#flex-app .fa-row input:focus {\n  border-color: #667eea;\n}\n\n/* ── アイテムタブ ── */\n#flex-app .fa-item-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 4px;\n  margin-bottom: 10px;\n}\n\n#flex-app .fa-item-tab {\n  padding: 3px 9px;\n  border-radius: 4px;\n  border: 1px solid #cbd5e0;\n  font-size: 11px;\n  cursor: pointer;\n  background: #f7fafc;\n  color: #4a5568;\n  transition: all .15s;\n}\n#flex-app .fa-item-tab.active {\n  background: #667eea;\n  color: #fff;\n  border-color: #667eea;\n}\n\n#flex-app .fa-add-btn,\n#flex-app .fa-remove-btn {\n  font-size: 11px;\n  padding: 3px 9px;\n  border-radius: 4px;\n  border: none;\n  cursor: pointer;\n  transition: background .15s;\n}\n#flex-app .fa-add-btn {\n  background: #48bb78;\n  color: #fff;\n}\n#flex-app .fa-add-btn:hover { background: #38a169; }\n#flex-app .fa-remove-btn {\n  background: #fc8181;\n  color: #fff;\n}\n#flex-app .fa-remove-btn:hover { background: #e53e3e; }\n\n/* ── プレビューエリア ── */\n#flex-app .fa-preview-col {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n}\n\n#flex-app .fa-preview-header {\n  padding: 10px 14px;\n  background: #edf2ff;\n  border-bottom: 1px solid #c3d0f5;\n  font-size: 12px;\n  font-weight: 600;\n  color: #4a5568;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n#flex-app .fa-preview-wrap {\n  flex: 1;\n  padding: 16px;\n  overflow: auto;\n}\n\n#flex-app #fa-preview-container {\n  display: flex;\n  width: 100%;\n  min-height: 260px;\n  background: #dde6ff;\n  border-radius: 8px;\n  border: 2px dashed #a3b4f5;\n  padding: 10px;\n  transition: all .2s;\n  position: relative;\n}\n\n#flex-app .fa-flex-item {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 6px;\n  font-size: 13px;\n  font-weight: 700;\n  color: #fff;\n  min-width: 40px;\n  min-height: 40px;\n  cursor: pointer;\n  transition: outline .15s, transform .1s;\n  position: relative;\n  text-shadow: 0 1px 2px rgba(0,0,0,.25);\n}\n\n#flex-app .fa-flex-item.selected {\n  outline: 3px solid #1a1a2e;\n  outline-offset: 2px;\n  transform: scale(1.04);\n}\n\n/* ── CSSアウトプット ── */\n#flex-app .fa-output {\n  background: #1a1a2e;\n  color: #a8d8ea;\n  padding: 14px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 12px;\n  line-height: 1.7;\n  white-space: pre-wrap;\n  word-break: break-all;\n  border-top: 1px solid #2d3748;\n  min-height: 120px;\n}\n\n#flex-app .fa-output-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  background: #2d3748;\n  padding: 8px 14px;\n  border-top: 1px solid #4a5568;\n}\n\n#flex-app .fa-output-header span {\n  color: #a0aec0;\n  font-size: 11px;\n  font-weight: 600;\n  letter-spacing: .06em;\n}\n\n#flex-app .fa-copy-btn {\n  background: #667eea;\n  color: #fff;\n  border: none;\n  border-radius: 5px;\n  padding: 4px 12px;\n  font-size: 12px;\n  cursor: pointer;\n  transition: background .15s;\n}\n#flex-app .fa-copy-btn:hover { background: #5a67d8; }\n#flex-app .fa-copy-btn.copied { background: #48bb78; }\n\n/* ── シンタックスカラー ── */\n#flex-app .fa-output .tok-sel  { color: #fbd38d; }\n#flex-app .fa-output .tok-prop { color: #90cdf4; }\n#flex-app .fa-output .tok-val  { color: #9ae6b4; }\n#flex-app .fa-output .tok-punc { color: #e2e8f0; }\n\u003c/style\u003e\n\u003c!-- ツールバー: プリセット --\u003e\n\u003cdiv class=\"fa-toolbar\"\u003e\n  \u003cspan class=\"fa-label\"\u003eプリセット:\u003c/span\u003e\n  \u003cbutton class=\"fa-preset-btn\" data-preset=\"navbar\"\u003eナビバー\u003c/button\u003e\n  \u003cbutton class=\"fa-preset-btn\" data-preset=\"cardgrid\"\u003eカードグリッド\u003c/button\u003e\n  \u003cbutton class=\"fa-preset-btn\" data-preset=\"holygrail\"\u003e聖杯レイアウト\u003c/button\u003e\n  \u003cbutton class=\"fa-preset-btn\" data-preset=\"sidebar\"\u003eサイドバー\u003c/button\u003e\n  \u003cbutton class=\"fa-preset-btn\" data-preset=\"centered\"\u003e中央揃え\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"fa-main\"\u003e\n  \u003c!-- コントロールパネル --\u003e\n  \u003cdiv class=\"fa-controls\"\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;!-- コンテナ設定 --\u0026gt;\n\u0026lt;div class=\u0026quot;fa-section\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;fa-section-title\u0026quot;\u0026gt;コンテナ\u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;display\u0026lt;/label\u0026gt;\n    \u0026lt;select id=\u0026quot;fa-display\u0026quot;\u0026gt;\n      \u0026lt;option value=\u0026quot;flex\u0026quot; selected\u0026gt;flex\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;inline-flex\u0026quot;\u0026gt;inline-flex\u0026lt;/option\u0026gt;\n    \u0026lt;/select\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;flex-direction\u0026lt;/label\u0026gt;\n    \u0026lt;select id=\u0026quot;fa-direction\u0026quot;\u0026gt;\n      \u0026lt;option value=\u0026quot;row\u0026quot; selected\u0026gt;row\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;row-reverse\u0026quot;\u0026gt;row-reverse\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;column\u0026quot;\u0026gt;column\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;column-reverse\u0026quot;\u0026gt;column-reverse\u0026lt;/option\u0026gt;\n    \u0026lt;/select\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;justify-content\u0026lt;/label\u0026gt;\n    \u0026lt;select id=\u0026quot;fa-justify\u0026quot;\u0026gt;\n      \u0026lt;option value=\u0026quot;flex-start\u0026quot; selected\u0026gt;flex-start\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;flex-end\u0026quot;\u0026gt;flex-end\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;center\u0026quot;\u0026gt;center\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;space-between\u0026quot;\u0026gt;space-between\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;space-around\u0026quot;\u0026gt;space-around\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;space-evenly\u0026quot;\u0026gt;space-evenly\u0026lt;/option\u0026gt;\n    \u0026lt;/select\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;align-items\u0026lt;/label\u0026gt;\n    \u0026lt;select id=\u0026quot;fa-align-items\u0026quot;\u0026gt;\n      \u0026lt;option value=\u0026quot;stretch\u0026quot; selected\u0026gt;stretch\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;flex-start\u0026quot;\u0026gt;flex-start\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;flex-end\u0026quot;\u0026gt;flex-end\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;center\u0026quot;\u0026gt;center\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;baseline\u0026quot;\u0026gt;baseline\u0026lt;/option\u0026gt;\n    \u0026lt;/select\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;align-content\u0026lt;/label\u0026gt;\n    \u0026lt;select id=\u0026quot;fa-align-content\u0026quot;\u0026gt;\n      \u0026lt;option value=\u0026quot;normal\u0026quot; selected\u0026gt;normal\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;flex-start\u0026quot;\u0026gt;flex-start\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;flex-end\u0026quot;\u0026gt;flex-end\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;center\u0026quot;\u0026gt;center\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;space-between\u0026quot;\u0026gt;space-between\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;space-around\u0026quot;\u0026gt;space-around\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;stretch\u0026quot;\u0026gt;stretch\u0026lt;/option\u0026gt;\n    \u0026lt;/select\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;flex-wrap\u0026lt;/label\u0026gt;\n    \u0026lt;select id=\u0026quot;fa-wrap\u0026quot;\u0026gt;\n      \u0026lt;option value=\u0026quot;nowrap\u0026quot; selected\u0026gt;nowrap\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;wrap\u0026quot;\u0026gt;wrap\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;wrap-reverse\u0026quot;\u0026gt;wrap-reverse\u0026lt;/option\u0026gt;\n    \u0026lt;/select\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;gap\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fa-gap\u0026quot; value=\u0026quot;0px\u0026quot; style=\u0026quot;max-width:90px;\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;height（高さ）\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fa-height\u0026quot; value=\u0026quot;260px\u0026quot; style=\u0026quot;max-width:90px;\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- アイテム管理 --\u0026gt;\n\u0026lt;div class=\u0026quot;fa-section\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;fa-section-title\u0026quot;\u0026gt;アイテム\u0026lt;/div\u0026gt;\n  \u0026lt;div style=\u0026quot;display:flex;gap:5px;margin-bottom:8px;\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;fa-add-btn\u0026quot; id=\u0026quot;fa-add-item\u0026quot;\u0026gt;+ 追加\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;fa-remove-btn\u0026quot; id=\u0026quot;fa-remove-item\u0026quot;\u0026gt;- 削除\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;fa-item-tabs\u0026quot; id=\u0026quot;fa-item-tabs\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- 選択アイテム設定 --\u0026gt;\n\u0026lt;div class=\u0026quot;fa-section\u0026quot; id=\u0026quot;fa-item-controls\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;fa-section-title\u0026quot;\u0026gt;選択アイテム\u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;flex-grow\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fa-grow\u0026quot; value=\u0026quot;0\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;10\u0026quot; step=\u0026quot;1\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;flex-shrink\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fa-shrink\u0026quot; value=\u0026quot;1\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;10\u0026quot; step=\u0026quot;1\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;flex-basis\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fa-basis\u0026quot; value=\u0026quot;auto\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;order（順序）\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fa-order\u0026quot; value=\u0026quot;0\u0026quot; min=\u0026quot;-10\u0026quot; max=\u0026quot;10\u0026quot; step=\u0026quot;1\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;align-self\u0026lt;/label\u0026gt;\n    \u0026lt;select id=\u0026quot;fa-align-self\u0026quot;\u0026gt;\n      \u0026lt;option value=\u0026quot;auto\u0026quot; selected\u0026gt;auto\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;flex-start\u0026quot;\u0026gt;flex-start\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;flex-end\u0026quot;\u0026gt;flex-end\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;center\u0026quot;\u0026gt;center\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;baseline\u0026quot;\u0026gt;baseline\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;stretch\u0026quot;\u0026gt;stretch\u0026lt;/option\u0026gt;\n    \u0026lt;/select\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;width（幅）\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fa-item-width\u0026quot; value=\u0026quot;auto\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;height（高さ）\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fa-item-height\u0026quot; value=\u0026quot;auto\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;fa-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;ラベル\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fa-item-label\u0026quot; value=\u0026quot;\u0026quot; style=\u0026quot;max-width:80px;\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\u003c!-- /fa-controls --\u003e\n  \u003c!-- プレビュー + 出力 --\u003e\n  \u003cdiv class=\"fa-preview-col\"\u003e\n    \u003cdiv class=\"fa-preview-header\"\u003e\n      \u003cspan\u003eライブプレビュー\u003c/span\u003e\n      \u003cspan style=\"font-weight:400;color:#718096;font-size:11px;\"\u003eアイテムをクリックして選択\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"fa-preview-wrap\"\u003e\n      \u003cdiv id=\"fa-preview-container\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div class=\u0026quot;fa-output-header\u0026quot;\u0026gt;\n  \u0026lt;span\u0026gt;生成CSS\u0026lt;/span\u0026gt;\n  \u0026lt;button class=\u0026quot;fa-copy-btn\u0026quot; id=\u0026quot;fa-copy-btn\u0026quot;\u0026gt;CSSをコピー\u0026lt;/button\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026quot;fa-output\u0026quot; id=\u0026quot;fa-output\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\u003c!-- /fa-main --\u003e\n\u003c/div\u003e\u003c!-- #flex-app --\u003e\n\u003cscript\u003e\n(function() {\n  /* ── 状態 ── */\n  var COLORS = [\n    '#667eea','#f6ad55','#68d391','#fc8181','#63b3ed',\n    '#b794f4','#f687b3','#4fd1c5','#fbd38d','#90cdf4'\n  ];\n\n  var container = {\n    display: 'flex',\n    flexDirection: 'row',\n    justifyContent: 'flex-start',\n    alignItems: 'stretch',\n    alignContent: 'normal',\n    flexWrap: 'nowrap',\n    gap: '0px',\n    height: '260px'\n  };\n\n  var defaultItem = function(i) {\n    return {\n      grow: 0, shrink: 1, basis: 'auto',\n      order: 0, alignSelf: 'auto',\n      width: 'auto', height: 'auto',\n      label: 'アイテム' + (i + 1),\n      color: COLORS[i % COLORS.length]\n    };\n  };\n\n  var items = [defaultItem(0), defaultItem(1), defaultItem(2)];\n  var selectedItem = 0;\n\n  /* ── DOM参照 ── */\n  var preview   = document.getElementById('fa-preview-container');\n  var outputEl  = document.getElementById('fa-output');\n  var tabsEl    = document.getElementById('fa-item-tabs');\n  var copyBtn   = document.getElementById('fa-copy-btn');\n\n  /* ── コンテナコントロールのバインド ── */\n  function bindSel(id, key, obj) {\n    var el = document.getElementById(id);\n    el.addEventListener('change', function() { obj[key] = el.value; render(); });\n  }\n  function bindInput(id, key, obj) {\n    var el = document.getElementById(id);\n    el.addEventListener('input', function() { obj[key] = el.value; render(); });\n  }\n\n  bindSel('fa-display',        'display',        container);\n  bindSel('fa-direction',      'flexDirection',  container);\n  bindSel('fa-justify',        'justifyContent', container);\n  bindSel('fa-align-items',    'alignItems',     container);\n  bindSel('fa-align-content',  'alignContent',   container);\n  bindSel('fa-wrap',           'flexWrap',       container);\n  bindInput('fa-gap',          'gap',            container);\n  bindInput('fa-height',       'height',         container);\n\n  /* ── アイテムコントロールのバインド ── */\n  function getItem() { return items[selectedItem]; }\n\n  function bindItemInput(id, key, parser) {\n    var el = document.getElementById(id);\n    el.addEventListener('input', function() {\n      getItem()[key] = parser ? parser(el.value) : el.value;\n      render();\n    });\n  }\n  function bindItemSel(id, key) {\n    var el = document.getElementById(id);\n    el.addEventListener('change', function() {\n      getItem()[key] = el.value;\n      render();\n    });\n  }\n\n  bindItemInput('fa-grow',        'grow',    Number);\n  bindItemInput('fa-shrink',      'shrink',  Number);\n  bindItemInput('fa-basis',       'basis',   null);\n  bindItemInput('fa-order',       'order',   Number);\n  bindItemSel  ('fa-align-self',  'alignSelf');\n  bindItemInput('fa-item-width',  'width',   null);\n  bindItemInput('fa-item-height', 'height',  null);\n  bindItemInput('fa-item-label',  'label',   null);\n\n  /* ── アイテム追加・削除 ── */\n  document.getElementById('fa-add-item').addEventListener('click', function() {\n    if (items.length \u003e= 10) return;\n    items.push(defaultItem(items.length));\n    selectedItem = items.length - 1;\n    render();\n  });\n\n  document.getElementById('fa-remove-item').addEventListener('click', function() {\n    if (items.length \u003c= 1) return;\n    items.splice(selectedItem, 1);\n    if (selectedItem \u003e= items.length) selectedItem = items.length - 1;\n    render();\n  });\n\n  /* ── コピーボタン ── */\n  copyBtn.addEventListener('click', function() {\n    var text = buildCSSText();\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(text).then(function() { flashCopy(); });\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = text;\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      flashCopy();\n    }\n  });\n  function flashCopy() {\n    copyBtn.textContent = 'コピー完了!';\n    copyBtn.classList.add('copied');\n    setTimeout(function() {\n      copyBtn.textContent = 'CSSをコピー';\n      copyBtn.classList.remove('copied');\n    }, 1800);\n  }\n\n  /* ── プリセット ── */\n  var PRESETS = {\n    navbar: {\n      container: { display:'flex', flexDirection:'row', justifyContent:'space-between',\n                   alignItems:'center', alignContent:'normal', flexWrap:'nowrap', gap:'0px', height:'56px' },\n      items: [\n        { grow:0, shrink:0, basis:'auto', order:0, alignSelf:'auto', width:'auto', height:'auto', label:'ロゴ', color:'#667eea' },\n        { grow:1, shrink:1, basis:'auto', order:0, alignSelf:'auto', width:'auto', height:'auto', label:'ナビリンク', color:'#4a5568' },\n        { grow:0, shrink:0, basis:'auto', order:0, alignSelf:'auto', width:'auto', height:'auto', label:'CTA', color:'#48bb78' }\n      ]\n    },\n    cardgrid: {\n      container: { display:'flex', flexDirection:'row', justifyContent:'flex-start',\n                   alignItems:'stretch', alignContent:'normal', flexWrap:'wrap', gap:'16px', height:'auto' },\n      items: [0,1,2,3,4,5].map(function(i) {\n        return { grow:0, shrink:0, basis:'calc(33% - 12px)', order:0, alignSelf:'auto', width:'auto', height:'120px', label:'カード'+(i+1), color:COLORS[i] };\n      })\n    },\n    holygrail: {\n      container: { display:'flex', flexDirection:'row', justifyContent:'flex-start',\n                   alignItems:'stretch', alignContent:'normal', flexWrap:'nowrap', gap:'0px', height:'320px' },\n      items: [\n        { grow:0, shrink:0, basis:'180px', order:0, alignSelf:'auto', width:'auto', height:'auto', label:'左サイドバー', color:'#667eea' },\n        { grow:1, shrink:1, basis:'auto', order:0, alignSelf:'auto', width:'auto', height:'auto', label:'メインコンテンツ', color:'#63b3ed' },\n        { grow:0, shrink:0, basis:'160px', order:0, alignSelf:'auto', width:'auto', height:'auto', label:'右サイドバー', color:'#b794f4' }\n      ]\n    },\n    sidebar: {\n      container: { display:'flex', flexDirection:'row', justifyContent:'flex-start',\n                   alignItems:'stretch', alignContent:'normal', flexWrap:'nowrap', gap:'0px', height:'340px' },\n      items: [\n        { grow:0, shrink:0, basis:'220px', order:0, alignSelf:'auto', width:'auto', height:'auto', label:'サイドバー', color:'#4a5568' },\n        { grow:1, shrink:1, basis:'auto', order:0, alignSelf:'auto', width:'auto', height:'auto', label:'コンテンツ', color:'#68d391' }\n      ]\n    },\n    centered: {\n      container: { display:'flex', flexDirection:'column', justifyContent:'center',\n                   alignItems:'center', alignContent:'normal', flexWrap:'nowrap', gap:'12px', height:'300px' },\n      items: [\n        { grow:0, shrink:0, basis:'auto', order:0, alignSelf:'auto', width:'auto', height:'auto', label:'中央コンテンツ', color:'#f6ad55' }\n      ]\n    }\n  };\n\n  document.querySelectorAll('#flex-app .fa-preset-btn').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      var p = PRESETS[btn.dataset.preset];\n      if (!p) return;\n      Object.assign(container, p.container);\n      items = p.items.map(function(it) { return Object.assign({}, it); });\n      selectedItem = 0;\n      syncContainerUI();\n      render();\n    });\n  });\n\n  function syncContainerUI() {\n    document.getElementById('fa-display').value        = container.display;\n    document.getElementById('fa-direction').value      = container.flexDirection;\n    document.getElementById('fa-justify').value        = container.justifyContent;\n    document.getElementById('fa-align-items').value    = container.alignItems;\n    document.getElementById('fa-align-content').value  = container.alignContent;\n    document.getElementById('fa-wrap').value           = container.flexWrap;\n    document.getElementById('fa-gap').value            = container.gap;\n    document.getElementById('fa-height').value         = container.height;\n  }\n\n  function syncItemUI() {\n    var it = getItem();\n    document.getElementById('fa-grow').value        = it.grow;\n    document.getElementById('fa-shrink').value      = it.shrink;\n    document.getElementById('fa-basis').value       = it.basis;\n    document.getElementById('fa-order').value       = it.order;\n    document.getElementById('fa-align-self').value  = it.alignSelf;\n    document.getElementById('fa-item-width').value  = it.width;\n    document.getElementById('fa-item-height').value = it.height;\n    document.getElementById('fa-item-label').value  = it.label;\n  }\n\n  /* ── CSSテキスト生成 ── */\n  function buildCSSText() {\n    var lines = [\n      '.container {',\n      '  display: ' + container.display + ';',\n      '  flex-direction: ' + container.flexDirection + ';',\n      '  justify-content: ' + container.justifyContent + ';',\n      '  align-items: ' + container.alignItems + ';'\n    ];\n    if (container.alignContent !== 'normal') {\n      lines.push('  align-content: ' + container.alignContent + ';');\n    }\n    if (container.flexWrap !== 'nowrap') {\n      lines.push('  flex-wrap: ' + container.flexWrap + ';');\n    }\n    if (container.gap !== '0px' \u0026\u0026 container.gap !== '0') {\n      lines.push('  gap: ' + container.gap + ';');\n    }\n    if (container.height \u0026\u0026 container.height !== 'auto') {\n      lines.push('  height: ' + container.height + ';');\n    }\n    lines.push('}');\n    lines.push('');\n\n    items.forEach(function(it, i) {\n      var sel = '.item-' + (i + 1);\n      var props = [];\n      if (it.grow !== 0)           props.push('  flex-grow: ' + it.grow + ';');\n      if (it.shrink !== 1)         props.push('  flex-shrink: ' + it.shrink + ';');\n      if (it.basis !== 'auto')     props.push('  flex-basis: ' + it.basis + ';');\n      if (it.order !== 0)          props.push('  order: ' + it.order + ';');\n      if (it.alignSelf !== 'auto') props.push('  align-self: ' + it.alignSelf + ';');\n      if (it.width !== 'auto')     props.push('  width: ' + it.width + ';');\n      if (it.height !== 'auto')    props.push('  height: ' + it.height + ';');\n      if (props.length \u003e 0) {\n        lines.push(sel + ' {');\n        props.forEach(function(p) { lines.push(p); });\n        lines.push('}');\n        lines.push('');\n      }\n    });\n\n    return lines.join('\\n');\n  }\n\n  /* ── CSS構文ハイライト描画 ── */\n  function renderCSS() {\n    var raw = buildCSSText();\n    var esc = raw\n      .replace(/\u0026/g,'\u0026amp;')\n      .replace(/\u003c/g,'\u0026lt;')\n      .replace(/\u003e/g,'\u0026gt;');\n\n    esc = esc.replace(/(\\.[\\w-]+(?:\\s*,\\s*\\.[\\w-]+)*)\\s*\\{/g, '\u003cspan class=\"tok-sel\"\u003e$1\u003c/span\u003e \u003cspan class=\"tok-punc\"\u003e{\u003c/span\u003e');\n    esc = esc.replace(/\\}/g, '\u003cspan class=\"tok-punc\"\u003e}\u003c/span\u003e');\n    esc = esc.replace(/([\\w-]+)(\\s*:\\s*)([^;\u003c\\n]+)(;)/g,\n      '\u003cspan class=\"tok-prop\"\u003e$1\u003c/span\u003e\u003cspan class=\"tok-punc\"\u003e$2\u003c/span\u003e\u003cspan class=\"tok-val\"\u003e$3\u003c/span\u003e\u003cspan class=\"tok-punc\"\u003e$4\u003c/span\u003e');\n\n    outputEl.innerHTML = esc;\n  }\n\n  /* ── タブ描画 ── */\n  function renderTabs() {\n    tabsEl.innerHTML = '';\n    items.forEach(function(it, i) {\n      var btn = document.createElement('button');\n      btn.className = 'fa-item-tab' + (i === selectedItem ? ' active' : '');\n      btn.textContent = it.label || ('アイテム' + (i + 1));\n      btn.addEventListener('click', function() {\n        selectedItem = i;\n        render();\n      });\n      tabsEl.appendChild(btn);\n    });\n  }\n\n  /* ── プレビュー描画 ── */\n  function renderPreview() {\n    preview.style.display        = container.display;\n    preview.style.flexDirection  = container.flexDirection;\n    preview.style.justifyContent = container.justifyContent;\n    preview.style.alignItems     = container.alignItems;\n    preview.style.alignContent   = container.alignContent;\n    preview.style.flexWrap       = container.flexWrap;\n    preview.style.gap            = container.gap;\n    preview.style.height         = container.height;\n\n    preview.innerHTML = '';\n    items.forEach(function(it, i) {\n      var el = document.createElement('div');\n      el.className = 'fa-flex-item' + (i === selectedItem ? ' selected' : '');\n      el.textContent = it.label || ('アイテム' + (i + 1));\n      el.style.background  = it.color;\n      el.style.flexGrow    = it.grow;\n      el.style.flexShrink  = it.shrink;\n      el.style.flexBasis   = it.basis;\n      el.style.order       = it.order;\n      el.style.alignSelf   = it.alignSelf;\n      if (it.width  !== 'auto') el.style.width  = it.width;\n      if (it.height !== 'auto') el.style.height = it.height;\n      el.style.padding = '8px';\n      el.addEventListener('click', function() {\n        selectedItem = i;\n        render();\n      });\n      preview.appendChild(el);\n    });\n  }\n\n  /* ── マスターレンダー ── */\n  function render() {\n    renderPreview();\n    renderTabs();\n    syncItemUI();\n    renderCSS();\n  }\n\n  /* ── 初期化 ── */\n  render();\n\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch3 id=\"関連ツール\"\u003e関連ツール\u003c/h3\u003e\n\u003cblockquote\u003e\n\u003cp\u003eボックスシャドウを生成 → \u003ca href=\"https://productivity-works.com/ja/tools/box-shadow-generator/\"\u003eCSSボックスシャドウジェネレーター\u003c/a\u003e\n\u003c/p\u003e","title":"CSS Flexboxジェネレーター — ビジュアルプレイグラウンド"},{"content":"URLを貼り付けるか、以下のフィールドを入力すると、Facebook・Twitter・LinkedIn・Google検索でページがどのように表示されるかをリアルタイムでプレビューできます。\nOGプロパティ設定 \u0026lt;div class=\u0026quot;og-section-label\u0026quot;\u0026gt;基本タグ\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;og-title\u0026quot;\u0026gt;og:title（タイトル）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;og-title\u0026quot; placeholder=\u0026quot;ページのタイトル\u0026quot; maxlength=\u0026quot;200\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-char-info\u0026quot; id=\u0026quot;og-title-count\u0026quot;\u0026gt;0 / 60\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;og-description\u0026quot;\u0026gt;og:description（説明文）\u0026lt;/label\u0026gt; \u0026lt;textarea id=\u0026quot;og-description\u0026quot; placeholder=\u0026quot;ページ内容の簡潔な説明...\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;div class=\u0026quot;og-char-info\u0026quot; id=\u0026quot;og-desc-count\u0026quot;\u0026gt;0 / 160\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;og-url\u0026quot;\u0026gt;og:url（ページURL）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;og-url\u0026quot; placeholder=\u0026quot;https://example.com/page\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;og-image\u0026quot;\u0026gt;og:image（画像URL）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;og-image\u0026quot; placeholder=\u0026quot;https://example.com/image.jpg\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-img-hint\u0026quot;\u0026gt;推奨サイズ: \u0026lt;span\u0026gt;1200 × 630 px\u0026lt;/span\u0026gt;（比率 1.91:1）· 最小 600 × 315 px · 最大 8 MB\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;og-type\u0026quot;\u0026gt;og:type（コンテンツ種別）\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;og-type\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;website\u0026quot;\u0026gt;website（Webサイト）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;article\u0026quot;\u0026gt;article（記事）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;product\u0026quot;\u0026gt;product（商品）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;video.other\u0026quot;\u0026gt;video.other（動画）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;music.song\u0026quot;\u0026gt;music.song（楽曲）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;book\u0026quot;\u0026gt;book（書籍）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;profile\u0026quot;\u0026gt;profile（プロフィール）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;og-site-name\u0026quot;\u0026gt;og:site_name（サイト名）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;og-site-name\u0026quot; placeholder=\u0026quot;あなたのサイト名\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-section-label\u0026quot; style=\u0026quot;margin-top:22px;\u0026quot;\u0026gt;Twitterカード設定\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;tw-card\u0026quot;\u0026gt;twitter:card（カード種別）\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;tw-card\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;summary_large_image\u0026quot;\u0026gt;summary_large_image（大きな画像）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;summary\u0026quot;\u0026gt;summary（正方形の小さな画像）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;tw-title\u0026quot;\u0026gt;twitter:title \u0026lt;em style=\u0026quot;font-weight:400;color:#9ca3af;\u0026quot;\u0026gt;（空欄の場合は og:title を使用）\u0026lt;/em\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;tw-title\u0026quot; placeholder=\u0026quot;Twitter専用タイトル（任意）\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-char-info\u0026quot; id=\u0026quot;tw-title-count\u0026quot;\u0026gt;0 / 70\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;tw-description\u0026quot;\u0026gt;twitter:description \u0026lt;em style=\u0026quot;font-weight:400;color:#9ca3af;\u0026quot;\u0026gt;（空欄の場合は og:description を使用）\u0026lt;/em\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;textarea id=\u0026quot;tw-description\u0026quot; placeholder=\u0026quot;Twitter専用説明文（任意）\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;div class=\u0026quot;og-char-info\u0026quot; id=\u0026quot;tw-desc-count\u0026quot;\u0026gt;0 / 200\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;tw-image\u0026quot;\u0026gt;twitter:image \u0026lt;em style=\u0026quot;font-weight:400;color:#9ca3af;\u0026quot;\u0026gt;（空欄の場合は og:image を使用）\u0026lt;/em\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;tw-image\u0026quot; placeholder=\u0026quot;https://example.com/twitter-image.jpg\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-img-hint\u0026quot;\u0026gt;summary_large_image: \u0026lt;span\u0026gt;1200 × 628 px\u0026lt;/span\u0026gt; · summary: \u0026lt;span\u0026gt;144 × 144 px\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-btn-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;og-btn og-btn-primary\u0026quot; id=\u0026quot;og-generate-btn\u0026quot;\u0026gt;HTMLメタタグを生成\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;og-btn og-btn-secondary\u0026quot; id=\u0026quot;og-clear-btn\u0026quot;\u0026gt;全てクリア\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; 画像サイズ推奨一覧 \u0026lt;table class=\u0026quot;og-dim-table\u0026quot;\u0026gt; \u0026lt;thead\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;th\u0026gt;プラットフォーム\u0026lt;/th\u0026gt; \u0026lt;th\u0026gt;推奨サイズ\u0026lt;/th\u0026gt; \u0026lt;th\u0026gt;比率\u0026lt;/th\u0026gt; \u0026lt;th\u0026gt;上限\u0026lt;/th\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/thead\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Facebook\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;1200 × 630 px\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;1.91:1\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;8 MB\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Twitter 大画像\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;1200 × 628 px\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;約1.91:1\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;5 MB\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Twitter 小画像\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;144 × 144 px\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;1:1\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;5 MB\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;LinkedIn\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;1200 × 627 px\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;1.91:1\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;5 MB\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Google検索\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;（テキストのみ）\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;—\u0026lt;/td\u0026gt; \u0026lt;td\u0026gt;—\u0026lt;/td\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;div style=\u0026quot;margin-top:20px;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-section-label\u0026quot;\u0026gt;文字数の目安\u0026lt;/div\u0026gt; \u0026lt;table class=\u0026quot;og-dim-table\u0026quot;\u0026gt; \u0026lt;thead\u0026gt; \u0026lt;tr\u0026gt;\u0026lt;th\u0026gt;プラットフォーム\u0026lt;/th\u0026gt;\u0026lt;th\u0026gt;タイトル\u0026lt;/th\u0026gt;\u0026lt;th\u0026gt;説明文\u0026lt;/th\u0026gt;\u0026lt;/tr\u0026gt; \u0026lt;/thead\u0026gt; \u0026lt;tbody\u0026gt; \u0026lt;tr\u0026gt;\u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Facebook OG\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約60文字\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約160文字\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt;\u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Twitter\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約70文字\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約200文字\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt;\u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;LinkedIn\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約119文字\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約300文字\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt; \u0026lt;tr\u0026gt;\u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Google検索\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約60文字\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約160文字\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt; \u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;margin-top:20px;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-section-label\u0026quot;\u0026gt;設定のコツ\u0026lt;/div\u0026gt; \u0026lt;ul style=\u0026quot;font-size:12.5px;color:#374151;padding-left:18px;line-height:1.9;\u0026quot;\u0026gt; \u0026lt;li\u0026gt;画像URLは必ずHTTPSを使用してください（HTTPはブロックされる場合があります）。\u0026lt;/li\u0026gt; \u0026lt;li\u0026gt;FacebookはOGデータをキャッシュします。\u0026lt;a href=\u0026quot;https://developers.facebook.com/tools/debug/\u0026quot; target=\u0026quot;_blank\u0026quot; rel=\u0026quot;noopener\u0026quot; style=\u0026quot;color:#4f6ef7;\u0026quot;\u0026gt;シェアデバッガー\u0026lt;/a\u0026gt;でキャッシュを更新できます。\u0026lt;/li\u0026gt; \u0026lt;li\u0026gt;Twitterは初回シェア時に画像をクロールします。144×144 px未満の画像は無視されます。\u0026lt;/li\u0026gt; \u0026lt;li\u0026gt;LinkedInは7日間キャッシュされます。新しいURLを投稿すると再クロールされます。\u0026lt;/li\u0026gt; \u0026lt;li\u0026gt;タイトルは60文字以内にするとGoogle検索での切り詰めを防げます。\u0026lt;/li\u0026gt; \u0026lt;li\u0026gt;og:titleと\u0026amp;lt;title\u0026amp;gt;タグの重複は可能な限り避けましょう。\u0026lt;/li\u0026gt; \u0026lt;/ul\u0026gt; \u0026lt;/div\u0026gt; ライブプレビュー \u0026lt;!-- Facebook --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;og-card-label\u0026quot;\u0026gt;Facebook\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-card-fb\u0026quot; id=\u0026quot;prev-fb\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-card-img\u0026quot; id=\u0026quot;prev-fb-img-wrap\u0026quot;\u0026gt; \u0026lt;span\u0026gt;画像URLを入力してください\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-card-body\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-card-domain\u0026quot; id=\u0026quot;prev-fb-domain\u0026quot;\u0026gt;example.com\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-card-title\u0026quot; id=\u0026quot;prev-fb-title\u0026quot;\u0026gt;ページタイトルがここに表示されます\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-card-desc\u0026quot; id=\u0026quot;prev-fb-desc\u0026quot;\u0026gt;ページの説明文がここに表示されます。\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Twitter --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;og-card-label\u0026quot;\u0026gt;Twitter / X\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-card-tw summary-large\u0026quot; id=\u0026quot;prev-tw\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-tw-inner\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-card-img-tw\u0026quot; id=\u0026quot;prev-tw-img-wrap\u0026quot; style=\u0026quot;aspect-ratio:2/1;\u0026quot;\u0026gt; \u0026lt;span\u0026gt;画像URLを入力してください\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-card-body-tw\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-card-domain-tw\u0026quot; id=\u0026quot;prev-tw-domain\u0026quot;\u0026gt;example.com\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-card-title-tw\u0026quot; id=\u0026quot;prev-tw-title\u0026quot;\u0026gt;ページタイトルがここに表示されます\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-card-desc-tw\u0026quot; id=\u0026quot;prev-tw-desc\u0026quot;\u0026gt;ページの説明文がここに表示されます。\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- LinkedIn --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;og-card-label\u0026quot;\u0026gt;LinkedIn\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-card-li\u0026quot; id=\u0026quot;prev-li\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-card-img-li\u0026quot; id=\u0026quot;prev-li-img-wrap\u0026quot;\u0026gt; \u0026lt;span\u0026gt;画像URLを入力してください\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-card-body-li\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-card-title-li\u0026quot; id=\u0026quot;prev-li-title\u0026quot;\u0026gt;ページタイトルがここに表示されます\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-card-domain-li\u0026quot; id=\u0026quot;prev-li-domain\u0026quot;\u0026gt;example.com\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Google SERP --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;og-card-label\u0026quot;\u0026gt;Google検索結果\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-card-google\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-serp-url\u0026quot;\u0026gt; \u0026lt;span id=\u0026quot;prev-g-sitename\u0026quot;\u0026gt;あなたのサイト\u0026lt;/span\u0026gt; \u0026amp;rsaquo; \u0026lt;span class=\u0026quot;og-serp-breadcrumb\u0026quot; id=\u0026quot;prev-g-breadcrumb\u0026quot;\u0026gt;example.com\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-serp-title\u0026quot; id=\u0026quot;prev-g-title\u0026quot;\u0026gt;ページタイトルがここに表示されます\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-serp-desc\u0026quot; id=\u0026quot;prev-g-desc\u0026quot;\u0026gt;ページの説明文がここに表示されます。Googleはクエリに関連性が高いと判断したページ内のテキストで説明を上書きする場合があります。\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 生成されたHTMLメタタグ クリップボードにコピー コピーしました! 📊 ビジネスの会計・経理もスマートに管理しませんか？ freeeなら請求書発行・確定申告・給与計算をクラウドで一元管理。個人事業主から法人まで対応。面倒な帳簿作業を自動化して、本業に集中できます。\nfreeeを無料で試す 関連ツール メタタグを生成する → メタタグジェネレーター ファビコンを作成する → ファビコンジェネレーター プレースホルダー画像を生成する → プレースホルダー画像ジェネレーター ","permalink":"https://productivity-works.com/ja/tools/og-preview/","summary":"\u003cp\u003eURLを貼り付けるか、以下のフィールドを入力すると、Facebook・Twitter・LinkedIn・Google検索でページがどのように表示されるかをリアルタイムでプレビューできます。\u003c/p\u003e\n\u003cdiv id=\"og-app\"\u003e\n\u003cstyle\u003e\n/* ── Reset \u0026 base ── */\n#og-app *,\n#og-app *::before,\n#og-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#og-app {\n  font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  font-size: 15px;\n  color: #1a1a2e;\n  line-height: 1.6;\n}\n\n/* ── Layout ── */\n#og-app .og-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 24px;\n  margin-top: 20px;\n}\n@media (max-width: 760px) {\n  #og-app .og-grid {\n    grid-template-columns: 1fr;\n  }\n}\n\n/* ── Panel ── */\n#og-app .og-panel {\n  background: #f8f9fc;\n  border: 1px solid #dde1ea;\n  border-radius: 10px;\n  padding: 22px 20px;\n}\n#og-app .og-panel h2 {\n  font-size: 15px;\n  font-weight: 700;\n  color: #2c3e6b;\n  margin-bottom: 16px;\n  padding-bottom: 10px;\n  border-bottom: 2px solid #dde1ea;\n  letter-spacing: 0.02em;\n}\n\n/* ── Form fields ── */\n#og-app .og-field {\n  margin-bottom: 14px;\n}\n#og-app .og-field label {\n  display: block;\n  font-size: 12px;\n  font-weight: 600;\n  color: #4a5378;\n  margin-bottom: 5px;\n  letter-spacing: 0.01em;\n}\n#og-app .og-field input,\n#og-app .og-field select,\n#og-app .og-field textarea {\n  width: 100%;\n  padding: 8px 11px;\n  border: 1px solid #c8cdd8;\n  border-radius: 6px;\n  font-size: 13px;\n  color: #1a1a2e;\n  background: #fff;\n  transition: border-color 0.18s;\n  outline: none;\n  font-family: inherit;\n}\n#og-app .og-field input:focus,\n#og-app .og-field select:focus,\n#og-app .og-field textarea:focus {\n  border-color: #4f6ef7;\n  box-shadow: 0 0 0 3px rgba(79,110,247,0.12);\n}\n#og-app .og-field textarea {\n  resize: vertical;\n  min-height: 64px;\n}\n\n/* ── Character counter ── */\n#og-app .og-char-info {\n  display: flex;\n  justify-content: flex-end;\n  font-size: 11px;\n  margin-top: 4px;\n  color: #888;\n  transition: color 0.2s;\n}\n#og-app .og-char-info.warn {\n  color: #d97706;\n  font-weight: 600;\n}\n#og-app .og-char-info.over {\n  color: #dc2626;\n  font-weight: 700;\n}\n\n/* ── Image hint ── */\n#og-app .og-img-hint {\n  font-size: 11px;\n  color: #6b7280;\n  margin-top: 5px;\n  line-height: 1.5;\n}\n#og-app .og-img-hint span {\n  display: inline-block;\n  background: #e8eeff;\n  color: #3b5bdb;\n  border-radius: 4px;\n  padding: 1px 6px;\n  font-weight: 600;\n  font-size: 10.5px;\n  margin-right: 4px;\n}\n\n/* ── Buttons ── */\n#og-app .og-btn-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-top: 18px;\n}\n#og-app .og-btn {\n  padding: 9px 18px;\n  border-radius: 7px;\n  border: none;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.18s, transform 0.1s;\n  font-family: inherit;\n}\n#og-app .og-btn:active {\n  transform: scale(0.97);\n}\n#og-app .og-btn-primary {\n  background: #4f6ef7;\n  color: #fff;\n}\n#og-app .og-btn-primary:hover {\n  background: #3a56d4;\n}\n#og-app .og-btn-secondary {\n  background: #e8eeff;\n  color: #3b5bdb;\n  border: 1px solid #c5d0ff;\n}\n#og-app .og-btn-secondary:hover {\n  background: #d5dfff;\n}\n#og-app .og-btn-success {\n  background: #059669;\n  color: #fff;\n}\n#og-app .og-btn-success:hover {\n  background: #047857;\n}\n\n/* ── Toast ── */\n#og-app .og-toast {\n  display: none;\n  position: fixed;\n  bottom: 28px;\n  right: 28px;\n  background: #1e293b;\n  color: #fff;\n  padding: 11px 20px;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 500;\n  z-index: 9999;\n  box-shadow: 0 4px 18px rgba(0,0,0,0.22);\n  animation: og-fadeIn 0.25s ease;\n}\n@keyframes og-fadeIn {\n  from { opacity: 0; transform: translateY(8px); }\n  to   { opacity: 1; transform: translateY(0); }\n}\n\n/* ── Section divider ── */\n#og-app .og-section-label {\n  font-size: 11px;\n  font-weight: 700;\n  color: #4f6ef7;\n  letter-spacing: 0.05em;\n  margin: 18px 0 10px;\n  padding-left: 2px;\n}\n\n/* ── Preview panels ── */\n#og-app .og-previews {\n  margin-top: 28px;\n}\n#og-app .og-previews h2 {\n  font-size: 17px;\n  font-weight: 700;\n  color: #2c3e6b;\n  margin-bottom: 18px;\n}\n#og-app .og-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n}\n@media (max-width: 680px) {\n  #og-app .og-preview-grid {\n    grid-template-columns: 1fr;\n  }\n}\n\n/* ── Facebook card ── */\n#og-app .og-card-fb {\n  border: 1px solid #dde1ea;\n  border-radius: 4px;\n  overflow: hidden;\n  background: #fff;\n  font-family: Helvetica, Arial, sans-serif;\n  max-width: 500px;\n}\n#og-app .og-card-fb .og-card-img {\n  width: 100%;\n  aspect-ratio: 1.91/1;\n  object-fit: cover;\n  background: #e5e7eb;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #9ca3af;\n  font-size: 13px;\n}\n#og-app .og-card-fb .og-card-img img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: block;\n}\n#og-app .og-card-fb .og-card-body {\n  padding: 10px 12px 12px;\n  border-top: 1px solid #dde1ea;\n  background: #f2f3f5;\n}\n#og-app .og-card-fb .og-card-domain {\n  font-size: 11px;\n  color: #606770;\n  text-transform: uppercase;\n  letter-spacing: 0.02em;\n  margin-bottom: 3px;\n}\n#og-app .og-card-fb .og-card-title {\n  font-size: 16px;\n  font-weight: 700;\n  color: #1c1e21;\n  line-height: 1.3;\n  margin-bottom: 4px;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n#og-app .og-card-fb .og-card-desc {\n  font-size: 14px;\n  color: #606770;\n  line-height: 1.4;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n\n/* ── Twitter card ── */\n#og-app .og-card-tw {\n  border: 1px solid #e1e8ed;\n  border-radius: 14px;\n  overflow: hidden;\n  background: #fff;\n  font-family: -apple-system, \"Segoe UI\", sans-serif;\n  max-width: 500px;\n}\n#og-app .og-card-tw.summary .og-tw-inner {\n  display: flex;\n  flex-direction: row;\n}\n#og-app .og-card-tw.summary .og-card-img-tw {\n  width: 120px;\n  min-width: 120px;\n  aspect-ratio: 1/1;\n  flex-shrink: 0;\n}\n#og-app .og-card-img-tw {\n  width: 100%;\n  background: #e5e7eb;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #9ca3af;\n  font-size: 13px;\n  overflow: hidden;\n}\n#og-app .og-card-img-tw img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: block;\n}\n#og-app .og-card-tw .og-card-body-tw {\n  padding: 10px 14px 12px;\n  flex: 1;\n}\n#og-app .og-card-tw .og-card-domain-tw {\n  font-size: 13px;\n  color: #8899a6;\n  margin-bottom: 3px;\n}\n#og-app .og-card-tw .og-card-title-tw {\n  font-size: 15px;\n  font-weight: 700;\n  color: #14171a;\n  line-height: 1.3;\n  margin-bottom: 3px;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n#og-app .og-card-tw .og-card-desc-tw {\n  font-size: 13px;\n  color: #657786;\n  line-height: 1.4;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n\n/* ── LinkedIn card ── */\n#og-app .og-card-li {\n  border: 1px solid #d6d6d6;\n  border-radius: 2px;\n  overflow: hidden;\n  background: #fff;\n  font-family: -apple-system, \"Segoe UI\", sans-serif;\n  max-width: 500px;\n}\n#og-app .og-card-li .og-card-img-li {\n  width: 100%;\n  aspect-ratio: 1.91/1;\n  background: #e5e7eb;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #9ca3af;\n  font-size: 13px;\n  overflow: hidden;\n}\n#og-app .og-card-li .og-card-img-li img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: block;\n}\n#og-app .og-card-li .og-card-body-li {\n  padding: 8px 12px 10px;\n  background: #f3f2ef;\n  border-top: 1px solid #d6d6d6;\n}\n#og-app .og-card-li .og-card-title-li {\n  font-size: 14px;\n  font-weight: 600;\n  color: rgba(0,0,0,0.9);\n  line-height: 1.35;\n  margin-bottom: 2px;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n#og-app .og-card-li .og-card-domain-li {\n  font-size: 12px;\n  color: rgba(0,0,0,0.6);\n}\n\n/* ── Google SERP ── */\n#og-app .og-card-google {\n  background: #fff;\n  padding: 14px 16px;\n  border: 1px solid #dde1ea;\n  border-radius: 8px;\n  max-width: 600px;\n  font-family: arial, sans-serif;\n}\n#og-app .og-card-google .og-serp-url {\n  font-size: 12px;\n  color: #202124;\n  line-height: 1.4;\n  margin-bottom: 4px;\n}\n#og-app .og-card-google .og-serp-breadcrumb {\n  font-size: 12px;\n  color: #5f6368;\n}\n#og-app .og-card-google .og-serp-title {\n  font-size: 20px;\n  color: #1a0dab;\n  line-height: 1.3;\n  margin-bottom: 3px;\n  display: -webkit-box;\n  -webkit-line-clamp: 1;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n#og-app .og-card-google .og-serp-desc {\n  font-size: 14px;\n  color: #4d5156;\n  line-height: 1.58;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n\n/* ── Card label ── */\n#og-app .og-card-label {\n  font-size: 11px;\n  font-weight: 700;\n  color: #6b7280;\n  letter-spacing: 0.05em;\n  margin-bottom: 7px;\n}\n\n/* ── Code output ── */\n#og-app .og-code-wrap {\n  margin-top: 24px;\n  display: none;\n}\n#og-app .og-code-wrap h3 {\n  font-size: 14px;\n  font-weight: 700;\n  color: #2c3e6b;\n  margin-bottom: 8px;\n}\n#og-app .og-code-box {\n  background: #0f172a;\n  color: #e2e8f0;\n  border-radius: 8px;\n  padding: 16px;\n  font-family: \"Fira Code\", \"Cascadia Code\", Consolas, monospace;\n  font-size: 12px;\n  line-height: 1.7;\n  overflow-x: auto;\n  white-space: pre;\n}\n\n/* ── Dimension table ── */\n#og-app .og-dim-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 12.5px;\n  margin-top: 4px;\n}\n#og-app .og-dim-table th {\n  text-align: left;\n  font-weight: 600;\n  color: #4a5378;\n  padding: 5px 8px;\n  background: #eef0f8;\n  border: 1px solid #dde1ea;\n}\n#og-app .og-dim-table td {\n  padding: 5px 8px;\n  border: 1px solid #dde1ea;\n  color: #374151;\n}\n#og-app .og-dim-table tr:nth-child(even) td {\n  background: #f8f9fc;\n}\n\n/* ── freee CTA ── */\n#og-app .og-freee-cta {\n  margin-top: 32px;\n  background: linear-gradient(135deg, #e8f4fd 0%, #f0f9ee 100%);\n  border: 1px solid #b3d9f7;\n  border-radius: 10px;\n  padding: 20px 22px;\n  display: flex;\n  align-items: flex-start;\n  gap: 16px;\n}\n@media (max-width: 600px) {\n  #og-app .og-freee-cta {\n    flex-direction: column;\n  }\n}\n#og-app .og-freee-cta .og-freee-icon {\n  font-size: 32px;\n  flex-shrink: 0;\n  line-height: 1;\n}\n#og-app .og-freee-cta .og-freee-body h3 {\n  font-size: 14px;\n  font-weight: 700;\n  color: #0f4c81;\n  margin-bottom: 5px;\n}\n#og-app .og-freee-cta .og-freee-body p {\n  font-size: 13px;\n  color: #374151;\n  line-height: 1.6;\n  margin-bottom: 10px;\n}\n#og-app .og-freee-cta .og-freee-body a.og-freee-link {\n  display: inline-block;\n  background: #0f6fbd;\n  color: #fff;\n  padding: 7px 16px;\n  border-radius: 6px;\n  font-size: 13px;\n  font-weight: 600;\n  text-decoration: none;\n  transition: background 0.18s;\n}\n#og-app .og-freee-cta .og-freee-body a.og-freee-link:hover {\n  background: #0a5699;\n}\n\u003c/style\u003e\n\u003cdiv class=\"og-grid\"\u003e\n  \u003c!-- ═══ 左: OGフィールド ═══ --\u003e\n  \u003cdiv class=\"og-panel\"\u003e\n    \u003ch2\u003eOGプロパティ設定\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div class=\u0026quot;og-section-label\u0026quot;\u0026gt;基本タグ\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;og-title\u0026quot;\u0026gt;og:title（タイトル）\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;og-title\u0026quot; placeholder=\u0026quot;ページのタイトル\u0026quot; maxlength=\u0026quot;200\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;og-char-info\u0026quot; id=\u0026quot;og-title-count\u0026quot;\u0026gt;0 / 60\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;og-description\u0026quot;\u0026gt;og:description（説明文）\u0026lt;/label\u0026gt;\n  \u0026lt;textarea id=\u0026quot;og-description\u0026quot; placeholder=\u0026quot;ページ内容の簡潔な説明...\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt;\n  \u0026lt;div class=\u0026quot;og-char-info\u0026quot; id=\u0026quot;og-desc-count\u0026quot;\u0026gt;0 / 160\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;og-url\u0026quot;\u0026gt;og:url（ページURL）\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;og-url\u0026quot; placeholder=\u0026quot;https://example.com/page\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;og-image\u0026quot;\u0026gt;og:image（画像URL）\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;og-image\u0026quot; placeholder=\u0026quot;https://example.com/image.jpg\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;og-img-hint\u0026quot;\u0026gt;推奨サイズ: \u0026lt;span\u0026gt;1200 × 630 px\u0026lt;/span\u0026gt;（比率 1.91:1）· 最小 600 × 315 px · 最大 8 MB\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;og-type\u0026quot;\u0026gt;og:type（コンテンツ種別）\u0026lt;/label\u0026gt;\n  \u0026lt;select id=\u0026quot;og-type\u0026quot;\u0026gt;\n    \u0026lt;option value=\u0026quot;website\u0026quot;\u0026gt;website（Webサイト）\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;article\u0026quot;\u0026gt;article（記事）\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;product\u0026quot;\u0026gt;product（商品）\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;video.other\u0026quot;\u0026gt;video.other（動画）\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;music.song\u0026quot;\u0026gt;music.song（楽曲）\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;book\u0026quot;\u0026gt;book（書籍）\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;profile\u0026quot;\u0026gt;profile（プロフィール）\u0026lt;/option\u0026gt;\n  \u0026lt;/select\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;og-site-name\u0026quot;\u0026gt;og:site_name（サイト名）\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;og-site-name\u0026quot; placeholder=\u0026quot;あなたのサイト名\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-section-label\u0026quot; style=\u0026quot;margin-top:22px;\u0026quot;\u0026gt;Twitterカード設定\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;tw-card\u0026quot;\u0026gt;twitter:card（カード種別）\u0026lt;/label\u0026gt;\n  \u0026lt;select id=\u0026quot;tw-card\u0026quot;\u0026gt;\n    \u0026lt;option value=\u0026quot;summary_large_image\u0026quot;\u0026gt;summary_large_image（大きな画像）\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;summary\u0026quot;\u0026gt;summary（正方形の小さな画像）\u0026lt;/option\u0026gt;\n  \u0026lt;/select\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;tw-title\u0026quot;\u0026gt;twitter:title \u0026lt;em style=\u0026quot;font-weight:400;color:#9ca3af;\u0026quot;\u0026gt;（空欄の場合は og:title を使用）\u0026lt;/em\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;tw-title\u0026quot; placeholder=\u0026quot;Twitter専用タイトル（任意）\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;og-char-info\u0026quot; id=\u0026quot;tw-title-count\u0026quot;\u0026gt;0 / 70\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;tw-description\u0026quot;\u0026gt;twitter:description \u0026lt;em style=\u0026quot;font-weight:400;color:#9ca3af;\u0026quot;\u0026gt;（空欄の場合は og:description を使用）\u0026lt;/em\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;textarea id=\u0026quot;tw-description\u0026quot; placeholder=\u0026quot;Twitter専用説明文（任意）\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt;\n  \u0026lt;div class=\u0026quot;og-char-info\u0026quot; id=\u0026quot;tw-desc-count\u0026quot;\u0026gt;0 / 200\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;tw-image\u0026quot;\u0026gt;twitter:image \u0026lt;em style=\u0026quot;font-weight:400;color:#9ca3af;\u0026quot;\u0026gt;（空欄の場合は og:image を使用）\u0026lt;/em\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;tw-image\u0026quot; placeholder=\u0026quot;https://example.com/twitter-image.jpg\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;og-img-hint\u0026quot;\u0026gt;summary_large_image: \u0026lt;span\u0026gt;1200 × 628 px\u0026lt;/span\u0026gt; · summary: \u0026lt;span\u0026gt;144 × 144 px\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-btn-row\u0026quot;\u0026gt;\n  \u0026lt;button class=\u0026quot;og-btn og-btn-primary\u0026quot; id=\u0026quot;og-generate-btn\u0026quot;\u0026gt;HTMLメタタグを生成\u0026lt;/button\u0026gt;\n  \u0026lt;button class=\u0026quot;og-btn og-btn-secondary\u0026quot; id=\u0026quot;og-clear-btn\u0026quot;\u0026gt;全てクリア\u0026lt;/button\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- ═══ 右: 画像サイズガイド ═══ --\u003e\n  \u003cdiv class=\"og-panel\"\u003e\n    \u003ch2\u003e画像サイズ推奨一覧\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;table class=\u0026quot;og-dim-table\u0026quot;\u0026gt;\n  \u0026lt;thead\u0026gt;\n    \u0026lt;tr\u0026gt;\n      \u0026lt;th\u0026gt;プラットフォーム\u0026lt;/th\u0026gt;\n      \u0026lt;th\u0026gt;推奨サイズ\u0026lt;/th\u0026gt;\n      \u0026lt;th\u0026gt;比率\u0026lt;/th\u0026gt;\n      \u0026lt;th\u0026gt;上限\u0026lt;/th\u0026gt;\n    \u0026lt;/tr\u0026gt;\n  \u0026lt;/thead\u0026gt;\n  \u0026lt;tbody\u0026gt;\n    \u0026lt;tr\u0026gt;\n      \u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Facebook\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;1200 × 630 px\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;1.91:1\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;8 MB\u0026lt;/td\u0026gt;\n    \u0026lt;/tr\u0026gt;\n    \u0026lt;tr\u0026gt;\n      \u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Twitter 大画像\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;1200 × 628 px\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;約1.91:1\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;5 MB\u0026lt;/td\u0026gt;\n    \u0026lt;/tr\u0026gt;\n    \u0026lt;tr\u0026gt;\n      \u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Twitter 小画像\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;144 × 144 px\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;1:1\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;5 MB\u0026lt;/td\u0026gt;\n    \u0026lt;/tr\u0026gt;\n    \u0026lt;tr\u0026gt;\n      \u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;LinkedIn\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;1200 × 627 px\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;1.91:1\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;5 MB\u0026lt;/td\u0026gt;\n    \u0026lt;/tr\u0026gt;\n    \u0026lt;tr\u0026gt;\n      \u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Google検索\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;（テキストのみ）\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;—\u0026lt;/td\u0026gt;\n      \u0026lt;td\u0026gt;—\u0026lt;/td\u0026gt;\n    \u0026lt;/tr\u0026gt;\n  \u0026lt;/tbody\u0026gt;\n\u0026lt;/table\u0026gt;\n\n\u0026lt;div style=\u0026quot;margin-top:20px;\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;og-section-label\u0026quot;\u0026gt;文字数の目安\u0026lt;/div\u0026gt;\n  \u0026lt;table class=\u0026quot;og-dim-table\u0026quot;\u0026gt;\n    \u0026lt;thead\u0026gt;\n      \u0026lt;tr\u0026gt;\u0026lt;th\u0026gt;プラットフォーム\u0026lt;/th\u0026gt;\u0026lt;th\u0026gt;タイトル\u0026lt;/th\u0026gt;\u0026lt;th\u0026gt;説明文\u0026lt;/th\u0026gt;\u0026lt;/tr\u0026gt;\n    \u0026lt;/thead\u0026gt;\n    \u0026lt;tbody\u0026gt;\n      \u0026lt;tr\u0026gt;\u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Facebook OG\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約60文字\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約160文字\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt;\n      \u0026lt;tr\u0026gt;\u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Twitter\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約70文字\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約200文字\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt;\n      \u0026lt;tr\u0026gt;\u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;LinkedIn\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約119文字\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約300文字\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt;\n      \u0026lt;tr\u0026gt;\u0026lt;td\u0026gt;\u0026lt;strong\u0026gt;Google検索\u0026lt;/strong\u0026gt;\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約60文字\u0026lt;/td\u0026gt;\u0026lt;td\u0026gt;約160文字\u0026lt;/td\u0026gt;\u0026lt;/tr\u0026gt;\n    \u0026lt;/tbody\u0026gt;\n  \u0026lt;/table\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div style=\u0026quot;margin-top:20px;\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;og-section-label\u0026quot;\u0026gt;設定のコツ\u0026lt;/div\u0026gt;\n  \u0026lt;ul style=\u0026quot;font-size:12.5px;color:#374151;padding-left:18px;line-height:1.9;\u0026quot;\u0026gt;\n    \u0026lt;li\u0026gt;画像URLは必ずHTTPSを使用してください（HTTPはブロックされる場合があります）。\u0026lt;/li\u0026gt;\n    \u0026lt;li\u0026gt;FacebookはOGデータをキャッシュします。\u0026lt;a href=\u0026quot;https://developers.facebook.com/tools/debug/\u0026quot; target=\u0026quot;_blank\u0026quot; rel=\u0026quot;noopener\u0026quot; style=\u0026quot;color:#4f6ef7;\u0026quot;\u0026gt;シェアデバッガー\u0026lt;/a\u0026gt;でキャッシュを更新できます。\u0026lt;/li\u0026gt;\n    \u0026lt;li\u0026gt;Twitterは初回シェア時に画像をクロールします。144×144 px未満の画像は無視されます。\u0026lt;/li\u0026gt;\n    \u0026lt;li\u0026gt;LinkedInは7日間キャッシュされます。新しいURLを投稿すると再クロールされます。\u0026lt;/li\u0026gt;\n    \u0026lt;li\u0026gt;タイトルは60文字以内にするとGoogle検索での切り詰めを防げます。\u0026lt;/li\u0026gt;\n    \u0026lt;li\u0026gt;og:titleと\u0026amp;lt;title\u0026amp;gt;タグの重複は可能な限り避けましょう。\u0026lt;/li\u0026gt;\n  \u0026lt;/ul\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ═══ ライブプレビュー ═══ --\u003e\n\u003cdiv class=\"og-previews\"\u003e\n  \u003ch2\u003eライブプレビュー\u003c/h2\u003e\n  \u003cdiv class=\"og-preview-grid\"\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;!-- Facebook --\u0026gt;\n\u0026lt;div\u0026gt;\n  \u0026lt;div class=\u0026quot;og-card-label\u0026quot;\u0026gt;Facebook\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;og-card-fb\u0026quot; id=\u0026quot;prev-fb\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;og-card-img\u0026quot; id=\u0026quot;prev-fb-img-wrap\u0026quot;\u0026gt;\n      \u0026lt;span\u0026gt;画像URLを入力してください\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;og-card-body\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;og-card-domain\u0026quot; id=\u0026quot;prev-fb-domain\u0026quot;\u0026gt;example.com\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;og-card-title\u0026quot; id=\u0026quot;prev-fb-title\u0026quot;\u0026gt;ページタイトルがここに表示されます\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;og-card-desc\u0026quot; id=\u0026quot;prev-fb-desc\u0026quot;\u0026gt;ページの説明文がここに表示されます。\u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Twitter --\u0026gt;\n\u0026lt;div\u0026gt;\n  \u0026lt;div class=\u0026quot;og-card-label\u0026quot;\u0026gt;Twitter / X\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;og-card-tw summary-large\u0026quot; id=\u0026quot;prev-tw\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;og-tw-inner\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;og-card-img-tw\u0026quot; id=\u0026quot;prev-tw-img-wrap\u0026quot; style=\u0026quot;aspect-ratio:2/1;\u0026quot;\u0026gt;\n        \u0026lt;span\u0026gt;画像URLを入力してください\u0026lt;/span\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;og-card-body-tw\u0026quot;\u0026gt;\n        \u0026lt;div class=\u0026quot;og-card-domain-tw\u0026quot; id=\u0026quot;prev-tw-domain\u0026quot;\u0026gt;example.com\u0026lt;/div\u0026gt;\n        \u0026lt;div class=\u0026quot;og-card-title-tw\u0026quot; id=\u0026quot;prev-tw-title\u0026quot;\u0026gt;ページタイトルがここに表示されます\u0026lt;/div\u0026gt;\n        \u0026lt;div class=\u0026quot;og-card-desc-tw\u0026quot; id=\u0026quot;prev-tw-desc\u0026quot;\u0026gt;ページの説明文がここに表示されます。\u0026lt;/div\u0026gt;\n      \u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- LinkedIn --\u0026gt;\n\u0026lt;div\u0026gt;\n  \u0026lt;div class=\u0026quot;og-card-label\u0026quot;\u0026gt;LinkedIn\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;og-card-li\u0026quot; id=\u0026quot;prev-li\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;og-card-img-li\u0026quot; id=\u0026quot;prev-li-img-wrap\u0026quot;\u0026gt;\n      \u0026lt;span\u0026gt;画像URLを入力してください\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;og-card-body-li\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;og-card-title-li\u0026quot; id=\u0026quot;prev-li-title\u0026quot;\u0026gt;ページタイトルがここに表示されます\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;og-card-domain-li\u0026quot; id=\u0026quot;prev-li-domain\u0026quot;\u0026gt;example.com\u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Google SERP --\u0026gt;\n\u0026lt;div\u0026gt;\n  \u0026lt;div class=\u0026quot;og-card-label\u0026quot;\u0026gt;Google検索結果\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;og-card-google\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;og-serp-url\u0026quot;\u0026gt;\n      \u0026lt;span id=\u0026quot;prev-g-sitename\u0026quot;\u0026gt;あなたのサイト\u0026lt;/span\u0026gt; \u0026amp;rsaquo;\n      \u0026lt;span class=\u0026quot;og-serp-breadcrumb\u0026quot; id=\u0026quot;prev-g-breadcrumb\u0026quot;\u0026gt;example.com\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;og-serp-title\u0026quot; id=\u0026quot;prev-g-title\u0026quot;\u0026gt;ページタイトルがここに表示されます\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;og-serp-desc\u0026quot; id=\u0026quot;prev-g-desc\u0026quot;\u0026gt;ページの説明文がここに表示されます。Googleはクエリに関連性が高いと判断したページ内のテキストで説明を上書きする場合があります。\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ═══ 生成コード ═══ --\u003e\n\u003cdiv class=\"og-code-wrap\" id=\"og-code-section\"\u003e\n  \u003ch3\u003e生成されたHTMLメタタグ\u003c/h3\u003e\n  \u003cdiv class=\"og-btn-row\" style=\"margin-bottom:10px;\"\u003e\n    \u003cbutton class=\"og-btn og-btn-success\" id=\"og-copy-btn\"\u003eクリップボードにコピー\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"og-code-box\" id=\"og-code-output\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"og-toast\" class=\"og-toast\"\u003eコピーしました!\u003c/div\u003e\n\u003c!-- ═══ freee CTA ═══ --\u003e\n\u003cdiv class=\"og-freee-cta\"\u003e\n  \u003cdiv class=\"og-freee-icon\"\u003e📊\u003c/div\u003e\n  \u003cdiv class=\"og-freee-body\"\u003e\n    \u003ch3\u003eビジネスの会計・経理もスマートに管理しませんか？\u003c/h3\u003e\n    \u003cp\u003efreeeなら請求書発行・確定申告・給与計算をクラウドで一元管理。個人事業主から法人まで対応。面倒な帳簿作業を自動化して、本業に集中できます。\u003c/p\u003e","title":"OGPプレビュー — SNSシェアデバッガー"},{"content":" プリセット フェードイン フェードアウト 左からスライド 右からスライド 下からスライド 上からスライド バウンス パルス シェイク スピン フリップ スウィング アニメーションプロパティ 時間（秒） 1s 遅延（秒） 0s タイミング関数 ease ease-in（加速） ease-out（減速） ease-in-out linear（一定） cubic-bezier（バック） steps(4, end)（ステップ） 繰り返し回数 1回 2回 3回 5回 無限 再生方向 normal（通常） reverse（逆方向） alternate（交互） alternate-reverse フィルモード none forwards backwards both ライブプレビュー CSS \u0026lt;div class=\u0026quot;speed-row\u0026quot;\u0026gt; \u0026lt;span\u0026gt;速度\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;speed-ctrl\u0026quot; min=\u0026quot;0.25\u0026quot; max=\u0026quot;4\u0026quot; step=\u0026quot;0.25\u0026quot; value=\u0026quot;1\u0026quot;\u0026gt; \u0026lt;span id=\u0026quot;lbl-speed\u0026quot;\u0026gt;1×\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;preview-controls\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;ctrl-btn btn-play\u0026quot; id=\u0026quot;btn-play\u0026quot;\u0026gt;\u0026amp;#9654; 再生\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;ctrl-btn btn-pause\u0026quot; id=\u0026quot;btn-pause\u0026quot;\u0026gt;\u0026amp;#10074;\u0026amp;#10074; 一時停止\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;ctrl-btn btn-reset\u0026quot; id=\u0026quot;btn-reset\u0026quot;\u0026gt;\u0026amp;#8635; リセット\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; キーフレームエディター ＋ キーフレーム追加 生成されたCSS コピー freee で会計・給与計算をもっとスマートに CSSアニメーションでWebサイトをリッチにしたら、バックオフィスも効率化しませんか？\nfreee 会計・freee 人事労務は、スモールビジネスの経理・給与計算を自動化します。\nまずは30日間の無料トライアルでお試しください。\nfreee を無料で試す \u0026rarr; 関連ツール Flexboxレイアウトを作成 → CSSフレックスボックスジェネレーター グラデーションを生成 → CSSグラデーションジェネレーター ボックスシャドウを作成 → CSSボックスシャドウジェネレーター ","permalink":"https://productivity-works.com/ja/tools/css-animation-generator/","summary":"\u003cdiv id=\"anim-app\"\u003e\n\u003cstyle\u003e\n/* ── スコープ済みスタイル — すべてのセレクターに #anim-app プレフィックス ── */\n#anim-app *,\n#anim-app *::before,\n#anim-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n#anim-app {\n  font-family: \"Hiragino Sans\", \"Noto Sans JP\", \"Yu Gothic UI\", -apple-system, BlinkMacSystemFont, sans-serif;\n  font-size: 14px;\n  color: #1a1a2e;\n  background: #f4f6fb;\n  border-radius: 12px;\n  padding: 24px;\n  max-width: 960px;\n  margin: 0 auto;\n}\n\n/* ── レイアウトグリッド ── */\n#anim-app .anim-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n}\n@media (max-width: 680px) {\n  #anim-app .anim-grid { grid-template-columns: 1fr; }\n}\n\n/* ── カード ── */\n#anim-app .anim-card {\n  background: #ffffff;\n  border: 1px solid #e0e4f0;\n  border-radius: 10px;\n  padding: 18px;\n}\n#anim-app .anim-card h3 {\n  font-size: 13px;\n  font-weight: 700;\n  letter-spacing: .04em;\n  text-transform: none;\n  color: #5b6af0;\n  margin-bottom: 14px;\n}\n\n/* ── フォームコントロール ── */\n#anim-app label {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  font-size: 12px;\n  font-weight: 600;\n  color: #444;\n  margin-bottom: 10px;\n}\n#anim-app input[type=\"text\"],\n#anim-app input[type=\"number\"],\n#anim-app input[type=\"color\"],\n#anim-app select {\n  font-size: 13px;\n  padding: 7px 10px;\n  border: 1px solid #d0d5e8;\n  border-radius: 6px;\n  background: #f9faff;\n  color: #1a1a2e;\n  width: 100%;\n  outline: none;\n  transition: border-color .2s;\n}\n#anim-app input[type=\"color\"] {\n  padding: 2px 4px;\n  height: 34px;\n  cursor: pointer;\n}\n#anim-app input:focus,\n#anim-app select:focus { border-color: #5b6af0; }\n\n#anim-app input[type=\"range\"] {\n  width: 100%;\n  accent-color: #5b6af0;\n  cursor: pointer;\n}\n#anim-app .range-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n#anim-app .range-row span {\n  font-size: 12px;\n  font-weight: 700;\n  color: #5b6af0;\n  min-width: 38px;\n  text-align: right;\n}\n\n/* ── プリセットボタン ── */\n#anim-app .preset-grid {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 7px;\n  margin-bottom: 4px;\n}\n#anim-app .preset-btn {\n  font-size: 12px;\n  font-weight: 600;\n  padding: 5px 12px;\n  border: 1.5px solid #d0d5e8;\n  border-radius: 20px;\n  background: #f4f6fb;\n  color: #444;\n  cursor: pointer;\n  transition: background .15s, border-color .15s, color .15s;\n}\n#anim-app .preset-btn:hover,\n#anim-app .preset-btn.active {\n  background: #5b6af0;\n  border-color: #5b6af0;\n  color: #fff;\n}\n\n/* ── キーフレームエディター ── */\n#anim-app .kf-list {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n#anim-app .kf-item {\n  border: 1px solid #e0e4f0;\n  border-radius: 8px;\n  padding: 10px 12px;\n  background: #f9faff;\n}\n#anim-app .kf-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 8px;\n}\n#anim-app .kf-pct {\n  font-size: 13px;\n  font-weight: 700;\n  color: #5b6af0;\n}\n#anim-app .kf-props {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 6px 10px;\n}\n#anim-app .kf-props label {\n  margin-bottom: 0;\n  font-size: 11px;\n}\n#anim-app .kf-del {\n  background: none;\n  border: none;\n  color: #c0392b;\n  font-size: 16px;\n  cursor: pointer;\n  line-height: 1;\n  padding: 0 2px;\n}\n#anim-app .kf-del:hover { color: #e74c3c; }\n#anim-app .add-kf-row {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n  margin-top: 10px;\n}\n#anim-app .add-kf-row input { width: 80px; flex-shrink: 0; }\n#anim-app .btn-add {\n  padding: 7px 14px;\n  font-size: 12px;\n  font-weight: 700;\n  border-radius: 6px;\n  border: none;\n  background: #5b6af0;\n  color: #fff;\n  cursor: pointer;\n  transition: background .2s;\n}\n#anim-app .btn-add:hover { background: #4454d8; }\n\n/* ── プレビューエリア ── */\n#anim-app .preview-area {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 16px;\n}\n#anim-app .preview-stage {\n  width: 100%;\n  height: 180px;\n  background: linear-gradient(135deg, #e8ecff 0%, #f4f6fb 100%);\n  border-radius: 10px;\n  border: 1px solid #d0d5e8;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  overflow: hidden;\n  position: relative;\n}\n#anim-app #preview-box {\n  width: 72px;\n  height: 72px;\n  background: #5b6af0;\n  border-radius: 10px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #fff;\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .02em;\n  user-select: none;\n  will-change: transform, opacity;\n}\n#anim-app .preview-controls {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  justify-content: center;\n}\n#anim-app .ctrl-btn {\n  padding: 8px 20px;\n  font-size: 13px;\n  font-weight: 700;\n  border-radius: 8px;\n  border: none;\n  cursor: pointer;\n  transition: opacity .2s;\n}\n#anim-app .ctrl-btn:hover { opacity: .85; }\n#anim-app .btn-play  { background: #27ae60; color: #fff; }\n#anim-app .btn-pause { background: #e67e22; color: #fff; }\n#anim-app .btn-reset { background: #636e72; color: #fff; }\n\n/* ── スピードスライダー ── */\n#anim-app .speed-row {\n  width: 100%;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  font-size: 12px;\n  font-weight: 600;\n  color: #444;\n}\n#anim-app .speed-row input { flex: 1; }\n#anim-app .speed-row span { min-width: 34px; color: #5b6af0; font-weight: 700; }\n\n/* ── 出力CSS ── */\n#anim-app .output-wrap {\n  grid-column: 1 / -1;\n}\n#anim-app .output-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 8px;\n}\n#anim-app .output-header h3 { margin-bottom: 0; }\n#anim-app .btn-copy {\n  padding: 6px 16px;\n  font-size: 12px;\n  font-weight: 700;\n  border-radius: 6px;\n  border: none;\n  background: #5b6af0;\n  color: #fff;\n  cursor: pointer;\n  transition: background .2s;\n}\n#anim-app .btn-copy:hover  { background: #4454d8; }\n#anim-app .btn-copy.copied { background: #27ae60; }\n#anim-app #css-output {\n  width: 100%;\n  min-height: 160px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 12px;\n  line-height: 1.6;\n  padding: 14px;\n  border: 1px solid #d0d5e8;\n  border-radius: 8px;\n  background: #1a1a2e;\n  color: #a0d8ef;\n  resize: vertical;\n  outline: none;\n}\n\n/* ── フル幅行 ── */\n#anim-app .full-row { grid-column: 1 / -1; }\n\n/* ── freee CTA ── */\n#anim-app .freee-cta {\n  grid-column: 1 / -1;\n  margin-top: 8px;\n  background: linear-gradient(135deg, #00b0be 0%, #0076be 100%);\n  border-radius: 10px;\n  padding: 20px 24px;\n  color: #fff;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n#anim-app .freee-cta h4 {\n  font-size: 15px;\n  font-weight: 700;\n  margin: 0;\n}\n#anim-app .freee-cta p {\n  font-size: 13px;\n  line-height: 1.6;\n  margin: 0;\n  opacity: .92;\n}\n#anim-app .freee-cta a.freee-btn {\n  display: inline-block;\n  background: #fff;\n  color: #0076be;\n  font-weight: 700;\n  font-size: 13px;\n  padding: 9px 22px;\n  border-radius: 8px;\n  text-decoration: none;\n  align-self: flex-start;\n  transition: opacity .2s;\n}\n#anim-app .freee-cta a.freee-btn:hover { opacity: .85; }\n\u003c/style\u003e\n\u003c!-- ══════════════════════════════\n     プリセット\n══════════════════════════════ --\u003e\n\u003cdiv class=\"anim-card full-row\" style=\"margin-bottom:0\"\u003e\n  \u003ch3\u003eプリセット\u003c/h3\u003e\n  \u003cdiv class=\"preset-grid\" id=\"preset-grid\"\u003e\n    \u003cbutton class=\"preset-btn\" data-preset=\"fadeIn\"\u003eフェードイン\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" data-preset=\"fadeOut\"\u003eフェードアウト\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" data-preset=\"slideInLeft\"\u003e左からスライド\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" data-preset=\"slideInRight\"\u003e右からスライド\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" data-preset=\"slideInUp\"\u003e下からスライド\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" data-preset=\"slideInDown\"\u003e上からスライド\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" data-preset=\"bounce\"\u003eバウンス\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" data-preset=\"pulse\"\u003eパルス\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" data-preset=\"shake\"\u003eシェイク\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" data-preset=\"spin\"\u003eスピン\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" data-preset=\"flip\"\u003eフリップ\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" data-preset=\"swing\"\u003eスウィング\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"anim-grid\" style=\"margin-top:20px\"\u003e\n\u003c!-- ══════════════════════════════\n     アニメーションプロパティ\n══════════════════════════════ --\u003e\n\u003cdiv class=\"anim-card\"\u003e\n  \u003ch3\u003eアニメーションプロパティ\u003c/h3\u003e\n\u003cp\u003e\u003clabel\u003e時間（秒）\n\u003cdiv class=\"range-row\"\u003e\n\u003cinput type=\"range\" id=\"prop-duration\" min=\"0.1\" max=\"10\" step=\"0.1\" value=\"1\"\u003e\n\u003cspan id=\"lbl-duration\"\u003e1s\u003c/span\u003e\n\u003c/div\u003e\n\u003c/label\u003e\u003c/p\u003e","title":"CSSアニメーションジェネレーター — キーフレームビルダー"},{"content":" 年齢計算 日数計算 生年月日 基準日（デフォルト: 今日） 計算する リセット 満年齢 総月数 ヶ月 総週数 週 総日数 日 総時間数 時間（概算） 📅 生まれた曜日 🌟 星座 🐉 干支（十二支） 🏯 和暦（生年） 🏯 和暦（基準日） 🎂 誕生日の元号 🎉 次の誕生日まで \u0026#127942; 人生のマイルストーン 開始日 終了日 計算する リセット 期間 日間 週数 週 月数（概算） ヶ月 年数（概算） 年 時間数 時間 📅 開始日の曜日 📅 終了日の曜日 正確な年齢の計算方法 年齢の計算は「誕生日の前日が終わった瞬間に年齢が加算される」という「年齢計算ニ関スル法律（明治35年）」に基づいています。つまり、誕生日の前日の午後12時（深夜0時）に満年齢が1つ増えるため、法律的には誕生日当日ではなく「誕生日の前日」に年齢が変わります。このツールでは、より直感的な「誕生日当日に年齢が増える」計算を採用しています。月・日の計算については、基準日の日付が誕生日の日付より小さい場合は前の月に繰り戻して残り日数を計算する「満年齢方式」を用いています。\n総日数・総時間数はあくまで概算であり、うるう秒や夏時間などは考慮していません。うるう年（2月29日生まれ）の場合、非うるう年の誕生日は2月28日または3月1日として扱うケースがありますが、本ツールでは2月28日を誕生日として計算します。正確な法的年齢判断が必要な場合は、専門家にご相談ください。\n年齢にまつわる豆知識 世界最長寿として認定されたフランス人女性ジャンヌ・カルマンは122歳164日（1875〜1997年）を生き、約44,724日という途方もない日数を過ごしました。日本では「人生の節目」を表す言葉が豊富で、60歳の「還暦」は干支が一巡することを意味し、赤いちゃんちゃんこで祝うのは「赤ちゃんに還る」という縁起から来ています。77歳「喜寿」は「喜」の草書体が七十七に見えることに由来し、88歳「米寿」は「米」の字を分解すると八十八になることから命名されました。また、1万時間の法則（マルコム・グラッドウェル著『天才！』で広まった概念）では、ある分野の専門家になるには約1万時間の練習が必要とされており、これは毎日3時間練習すると約9年、毎日8時間だと約3.4年に相当します。\n関連ツール BMIと適正体重をチェック → BMI計算ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール 長さ・重さ・温度を即座に変換 → 単位変換ツール 海外チームと時間を合わせる → タイムゾーン変換ツール — 世界中の都市間で時刻を即変換\nライフプランに合わせた資産管理を\n年齢とともに変わるお金の課題。家計管理・確定申告はクラウド会計ソフト「freee」で効率化しませんか？\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/age-calculator/","summary":"\u003cstyle\u003e\n  #age-app {\n    font-family: 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Noto Sans JP', sans-serif;\n    max-width: 720px;\n    margin: 0 auto;\n    padding: 16px;\n    color: #1c1917;\n  }\n  #age-app * { box-sizing: border-box; }\n\n  /* タブ切り替え */\n  .age-tabs {\n    display: flex;\n    gap: 8px;\n    margin-bottom: 20px;\n  }\n  .age-tab-btn {\n    flex: 1;\n    padding: 10px 8px;\n    border: 2px solid #f59e0b;\n    background: #fff;\n    color: #b45309;\n    font-size: 14px;\n    font-weight: 700;\n    border-radius: 8px;\n    cursor: pointer;\n    transition: background 0.2s, color 0.2s;\n  }\n  .age-tab-btn.active {\n    background: #f59e0b;\n    color: #fff;\n  }\n\n  /* 入力セクション */\n  .age-input-section {\n    background: #fffbeb;\n    border: 1.5px solid #fde68a;\n    border-radius: 12px;\n    padding: 20px;\n    margin-bottom: 20px;\n  }\n  .age-input-row {\n    display: flex;\n    gap: 12px;\n    flex-wrap: wrap;\n    align-items: flex-end;\n  }\n  .age-field {\n    display: flex;\n    flex-direction: column;\n    gap: 6px;\n    flex: 1;\n    min-width: 160px;\n  }\n  .age-field label {\n    font-size: 13px;\n    font-weight: 700;\n    color: #92400e;\n  }\n  .age-field input[type=\"date\"] {\n    padding: 10px 12px;\n    border: 1.5px solid #fcd34d;\n    border-radius: 8px;\n    font-size: 15px;\n    background: #fff;\n    color: #1c1917;\n    width: 100%;\n    outline: none;\n    transition: border-color 0.2s;\n  }\n  .age-field input[type=\"date\"]:focus {\n    border-color: #f59e0b;\n    box-shadow: 0 0 0 3px rgba(245,158,11,0.15);\n  }\n  .age-calc-btn {\n    padding: 10px 28px;\n    background: #f59e0b;\n    color: #fff;\n    border: none;\n    border-radius: 8px;\n    font-size: 15px;\n    font-weight: 700;\n    cursor: pointer;\n    transition: background 0.2s;\n    white-space: nowrap;\n    align-self: flex-end;\n  }\n  .age-calc-btn:hover { background: #d97706; }\n  .age-reset-btn {\n    padding: 10px 16px;\n    background: #fff;\n    color: #92400e;\n    border: 1.5px solid #fcd34d;\n    border-radius: 8px;\n    font-size: 14px;\n    font-weight: 700;\n    cursor: pointer;\n    transition: background 0.2s;\n    white-space: nowrap;\n    align-self: flex-end;\n  }\n  .age-reset-btn:hover { background: #fef3c7; }\n\n  /* 結果エリア */\n  .age-results { display: none; }\n  .age-results.visible { display: block; }\n\n  /* メイン年齢カード */\n  .age-main-card {\n    background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n    border-radius: 14px;\n    padding: 24px;\n    text-align: center;\n    color: #fff;\n    margin-bottom: 16px;\n    box-shadow: 0 4px 16px rgba(245,158,11,0.3);\n  }\n  .age-main-label {\n    font-size: 13px;\n    opacity: 0.85;\n    margin-bottom: 6px;\n    font-weight: 600;\n    letter-spacing: 0.05em;\n  }\n  .age-main-value {\n    font-size: 42px;\n    font-weight: 900;\n    line-height: 1;\n    margin-bottom: 4px;\n    letter-spacing: -1px;\n  }\n  .age-main-detail {\n    font-size: 16px;\n    opacity: 0.9;\n    font-weight: 600;\n  }\n\n  /* 統計グリッド */\n  .age-stats-grid {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 10px;\n    margin-bottom: 16px;\n  }\n  @media (min-width: 480px) {\n    .age-stats-grid { grid-template-columns: repeat(4, 1fr); }\n  }\n  .age-stat-card {\n    background: #fff;\n    border: 1.5px solid #fde68a;\n    border-radius: 10px;\n    padding: 14px 10px;\n    text-align: center;\n  }\n  .age-stat-label {\n    font-size: 11px;\n    color: #92400e;\n    font-weight: 700;\n    margin-bottom: 6px;\n    letter-spacing: 0.03em;\n  }\n  .age-stat-value {\n    font-size: 18px;\n    font-weight: 800;\n    color: #b45309;\n    line-height: 1;\n  }\n  .age-stat-unit {\n    font-size: 11px;\n    color: #78716c;\n    margin-top: 2px;\n  }\n\n  /* 情報カード */\n  .age-info-grid {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 10px;\n    margin-bottom: 16px;\n  }\n  @media (min-width: 560px) {\n    .age-info-grid { grid-template-columns: repeat(3, 1fr); }\n  }\n  .age-info-card {\n    background: #fff;\n    border: 1.5px solid #fde68a;\n    border-radius: 10px;\n    padding: 14px 12px;\n    text-align: center;\n  }\n  .age-info-icon {\n    font-size: 22px;\n    margin-bottom: 4px;\n  }\n  .age-info-label {\n    font-size: 11px;\n    color: #92400e;\n    font-weight: 700;\n    margin-bottom: 4px;\n  }\n  .age-info-value {\n    font-size: 15px;\n    font-weight: 800;\n    color: #1c1917;\n  }\n  .age-info-sub {\n    font-size: 11px;\n    color: #78716c;\n    margin-top: 2px;\n  }\n\n  /* 誕生日カウントダウン */\n  .age-countdown-card {\n    background: #fff7ed;\n    border: 1.5px solid #fed7aa;\n    border-radius: 10px;\n    padding: 16px;\n    margin-bottom: 16px;\n    display: flex;\n    align-items: center;\n    gap: 12px;\n  }\n  .age-countdown-icon { font-size: 28px; }\n  .age-countdown-text { flex: 1; }\n  .age-countdown-title {\n    font-size: 12px;\n    font-weight: 700;\n    color: #c2410c;\n    margin-bottom: 3px;\n  }\n  .age-countdown-value {\n    font-size: 20px;\n    font-weight: 900;\n    color: #ea580c;\n  }\n  .age-countdown-date {\n    font-size: 12px;\n    color: #78716c;\n    margin-top: 2px;\n  }\n\n  /* 世代ラベル */\n  .age-generation-card {\n    background: #fff;\n    border: 1.5px solid #fde68a;\n    border-radius: 10px;\n    padding: 14px 16px;\n    margin-bottom: 16px;\n    display: flex;\n    align-items: center;\n    gap: 10px;\n  }\n  .age-gen-badge {\n    background: #f59e0b;\n    color: #fff;\n    font-size: 13px;\n    font-weight: 800;\n    padding: 4px 12px;\n    border-radius: 20px;\n    white-space: nowrap;\n  }\n  .age-gen-desc {\n    font-size: 13px;\n    color: #57534e;\n    line-height: 1.5;\n  }\n\n  /* マイルストーン */\n  .age-milestone-section {\n    background: #fff;\n    border: 1.5px solid #fde68a;\n    border-radius: 10px;\n    padding: 16px;\n    margin-bottom: 16px;\n  }\n  .age-milestone-title {\n    font-size: 13px;\n    font-weight: 800;\n    color: #92400e;\n    margin-bottom: 12px;\n    display: flex;\n    align-items: center;\n    gap: 6px;\n  }\n  .age-milestone-list {\n    display: flex;\n    flex-direction: column;\n    gap: 8px;\n  }\n  .age-milestone-item {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    padding: 8px 10px;\n    border-radius: 8px;\n    font-size: 13px;\n  }\n  .age-milestone-item.past {\n    background: #f5f5f4;\n    color: #78716c;\n  }\n  .age-milestone-item.future {\n    background: #fffbeb;\n    border: 1px solid #fde68a;\n    color: #1c1917;\n  }\n  .age-milestone-item.today {\n    background: #fef3c7;\n    border: 1.5px solid #f59e0b;\n    color: #92400e;\n    font-weight: 700;\n  }\n  .age-milestone-dot {\n    width: 8px;\n    height: 8px;\n    border-radius: 50%;\n    flex-shrink: 0;\n  }\n  .past .age-milestone-dot { background: #a8a29e; }\n  .future .age-milestone-dot { background: #f59e0b; }\n  .today .age-milestone-dot { background: #ea580c; }\n  .age-milestone-name { flex: 1; font-weight: 600; }\n  .age-milestone-date { font-size: 12px; color: #78716c; }\n  .age-milestone-remain {\n    font-size: 12px;\n    font-weight: 700;\n    color: #d97706;\n  }\n\n  /* 日数計算モード */\n  .age-diff-result-card {\n    background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n    border-radius: 14px;\n    padding: 24px;\n    text-align: center;\n    color: #fff;\n    margin-bottom: 16px;\n    box-shadow: 0 4px 16px rgba(245,158,11,0.3);\n  }\n  .age-diff-sub-grid {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 10px;\n    margin-bottom: 16px;\n  }\n  @media (min-width: 480px) {\n    .age-diff-sub-grid { grid-template-columns: repeat(4, 1fr); }\n  }\n\n  /* エラーメッセージ */\n  .age-error {\n    background: #fef2f2;\n    border: 1.5px solid #fecaca;\n    color: #dc2626;\n    border-radius: 8px;\n    padding: 12px 16px;\n    font-size: 14px;\n    font-weight: 600;\n    margin-bottom: 12px;\n    display: none;\n  }\n  .age-error.visible { display: block; }\n\n  /* 区切り線 */\n  .age-divider {\n    border: none;\n    border-top: 1.5px solid #fde68a;\n    margin: 20px 0;\n  }\n\u003c/style\u003e\n\u003cdiv id=\"age-app\"\u003e\n  \u003c!-- タブ --\u003e\n  \u003cdiv class=\"age-tabs\"\u003e\n    \u003cbutton class=\"age-tab-btn active\" id=\"tab-age\" onclick=\"ageSwitchTab('age')\"\u003e年齢計算\u003c/button\u003e\n    \u003cbutton class=\"age-tab-btn\" id=\"tab-diff\" onclick=\"ageSwitchTab('diff')\"\u003e日数計算\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- 年齢計算モード --\u003e\n  \u003cdiv id=\"mode-age\"\u003e\n    \u003cdiv class=\"age-input-section\"\u003e\n      \u003cdiv class=\"age-input-row\"\u003e\n        \u003cdiv class=\"age-field\"\u003e\n          \u003clabel for=\"age-birth\"\u003e生年月日\u003c/label\u003e\n          \u003cinput type=\"date\" id=\"age-birth\" max=\"2099-12-31\"\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-field\"\u003e\n          \u003clabel for=\"age-base\"\u003e基準日（デフォルト: 今日）\u003c/label\u003e\n          \u003cinput type=\"date\" id=\"age-base\" max=\"2099-12-31\"\u003e\n        \u003c/div\u003e\n        \u003cbutton class=\"age-calc-btn\" onclick=\"ageCalculate()\"\u003e計算する\u003c/button\u003e\n        \u003cbutton class=\"age-reset-btn\" onclick=\"ageReset()\"\u003eリセット\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"age-error\" id=\"age-error\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"age-results\" id=\"age-results\"\u003e\n      \u003c!-- メイン年齢 --\u003e\n      \u003cdiv class=\"age-main-card\"\u003e\n        \u003cdiv class=\"age-main-label\"\u003e満年齢\u003c/div\u003e\n        \u003cdiv class=\"age-main-value\" id=\"res-age-years\"\u003e\u003c/div\u003e\n        \u003cdiv class=\"age-main-detail\" id=\"res-age-detail\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n      \u003c!-- 統計グリッド --\u003e\n      \u003cdiv class=\"age-stats-grid\"\u003e\n        \u003cdiv class=\"age-stat-card\"\u003e\n          \u003cdiv class=\"age-stat-label\"\u003e総月数\u003c/div\u003e\n          \u003cdiv class=\"age-stat-value\" id=\"res-total-months\"\u003e\u003c/div\u003e\n          \u003cdiv class=\"age-stat-unit\"\u003eヶ月\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-stat-card\"\u003e\n          \u003cdiv class=\"age-stat-label\"\u003e総週数\u003c/div\u003e\n          \u003cdiv class=\"age-stat-value\" id=\"res-total-weeks\"\u003e\u003c/div\u003e\n          \u003cdiv class=\"age-stat-unit\"\u003e週\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-stat-card\"\u003e\n          \u003cdiv class=\"age-stat-label\"\u003e総日数\u003c/div\u003e\n          \u003cdiv class=\"age-stat-value\" id=\"res-total-days\"\u003e\u003c/div\u003e\n          \u003cdiv class=\"age-stat-unit\"\u003e日\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-stat-card\"\u003e\n          \u003cdiv class=\"age-stat-label\"\u003e総時間数\u003c/div\u003e\n          \u003cdiv class=\"age-stat-value\" id=\"res-total-hours\"\u003e\u003c/div\u003e\n          \u003cdiv class=\"age-stat-unit\"\u003e時間（概算）\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003c!-- 情報グリッド --\u003e\n      \u003cdiv class=\"age-info-grid\"\u003e\n        \u003cdiv class=\"age-info-card\"\u003e\n          \u003cdiv class=\"age-info-icon\"\u003e📅\u003c/div\u003e\n          \u003cdiv class=\"age-info-label\"\u003e生まれた曜日\u003c/div\u003e\n          \u003cdiv class=\"age-info-value\" id=\"res-weekday\"\u003e\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-info-card\"\u003e\n          \u003cdiv class=\"age-info-icon\"\u003e🌟\u003c/div\u003e\n          \u003cdiv class=\"age-info-label\"\u003e星座\u003c/div\u003e\n          \u003cdiv class=\"age-info-value\" id=\"res-zodiac-west\"\u003e\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-info-card\"\u003e\n          \u003cdiv class=\"age-info-icon\"\u003e🐉\u003c/div\u003e\n          \u003cdiv class=\"age-info-label\"\u003e干支（十二支）\u003c/div\u003e\n          \u003cdiv class=\"age-info-value\" id=\"res-zodiac-east\"\u003e\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-info-card\"\u003e\n          \u003cdiv class=\"age-info-icon\"\u003e🏯\u003c/div\u003e\n          \u003cdiv class=\"age-info-label\"\u003e和暦（生年）\u003c/div\u003e\n          \u003cdiv class=\"age-info-value\" id=\"res-wareki\"\u003e\u003c/div\u003e\n          \u003cdiv class=\"age-info-sub\" id=\"res-wareki-sub\"\u003e\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-info-card\"\u003e\n          \u003cdiv class=\"age-info-icon\"\u003e🏯\u003c/div\u003e\n          \u003cdiv class=\"age-info-label\"\u003e和暦（基準日）\u003c/div\u003e\n          \u003cdiv class=\"age-info-value\" id=\"res-wareki-base\"\u003e\u003c/div\u003e\n          \u003cdiv class=\"age-info-sub\" id=\"res-wareki-base-sub\"\u003e\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-info-card\"\u003e\n          \u003cdiv class=\"age-info-icon\"\u003e🎂\u003c/div\u003e\n          \u003cdiv class=\"age-info-label\"\u003e誕生日の元号\u003c/div\u003e\n          \u003cdiv class=\"age-info-value\" id=\"res-wareki-era\"\u003e\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003c!-- カウントダウン --\u003e\n      \u003cdiv class=\"age-countdown-card\"\u003e\n        \u003cdiv class=\"age-countdown-icon\"\u003e🎉\u003c/div\u003e\n        \u003cdiv class=\"age-countdown-text\"\u003e\n          \u003cdiv class=\"age-countdown-title\"\u003e次の誕生日まで\u003c/div\u003e\n          \u003cdiv class=\"age-countdown-value\" id=\"res-countdown\"\u003e\u003c/div\u003e\n          \u003cdiv class=\"age-countdown-date\" id=\"res-next-birthday\"\u003e\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003c!-- 世代ラベル --\u003e\n      \u003cdiv class=\"age-generation-card\"\u003e\n        \u003cdiv class=\"age-gen-badge\" id=\"res-generation-badge\"\u003e\u003c/div\u003e\n        \u003cdiv class=\"age-gen-desc\" id=\"res-generation-desc\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n      \u003c!-- マイルストーン --\u003e\n      \u003cdiv class=\"age-milestone-section\"\u003e\n        \u003cdiv class=\"age-milestone-title\"\u003e\u0026#127942; 人生のマイルストーン\u003c/div\u003e\n        \u003cdiv class=\"age-milestone-list\" id=\"res-milestones\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 日数計算モード --\u003e\n  \u003cdiv id=\"mode-diff\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"age-input-section\"\u003e\n      \u003cdiv class=\"age-input-row\"\u003e\n        \u003cdiv class=\"age-field\"\u003e\n          \u003clabel for=\"diff-from\"\u003e開始日\u003c/label\u003e\n          \u003cinput type=\"date\" id=\"diff-from\" max=\"2099-12-31\"\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-field\"\u003e\n          \u003clabel for=\"diff-to\"\u003e終了日\u003c/label\u003e\n          \u003cinput type=\"date\" id=\"diff-to\" max=\"2099-12-31\"\u003e\n        \u003c/div\u003e\n        \u003cbutton class=\"age-calc-btn\" onclick=\"diffCalculate()\"\u003e計算する\u003c/button\u003e\n        \u003cbutton class=\"age-reset-btn\" onclick=\"diffReset()\"\u003eリセット\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"age-error\" id=\"diff-error\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"age-results\" id=\"diff-results\"\u003e\n      \u003cdiv class=\"age-diff-result-card\"\u003e\n        \u003cdiv class=\"age-main-label\" id=\"diff-label\"\u003e期間\u003c/div\u003e\n        \u003cdiv class=\"age-main-value\" id=\"diff-days-val\"\u003e\u003c/div\u003e\n        \u003cdiv class=\"age-main-detail\"\u003e日間\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"age-diff-sub-grid\"\u003e\n        \u003cdiv class=\"age-stat-card\"\u003e\n          \u003cdiv class=\"age-stat-label\"\u003e週数\u003c/div\u003e\n          \u003cdiv class=\"age-stat-value\" id=\"diff-weeks-val\"\u003e\u003c/div\u003e\n          \u003cdiv class=\"age-stat-unit\"\u003e週\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-stat-card\"\u003e\n          \u003cdiv class=\"age-stat-label\"\u003e月数（概算）\u003c/div\u003e\n          \u003cdiv class=\"age-stat-value\" id=\"diff-months-val\"\u003e\u003c/div\u003e\n          \u003cdiv class=\"age-stat-unit\"\u003eヶ月\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-stat-card\"\u003e\n          \u003cdiv class=\"age-stat-label\"\u003e年数（概算）\u003c/div\u003e\n          \u003cdiv class=\"age-stat-value\" id=\"diff-years-val\"\u003e\u003c/div\u003e\n          \u003cdiv class=\"age-stat-unit\"\u003e年\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-stat-card\"\u003e\n          \u003cdiv class=\"age-stat-label\"\u003e時間数\u003c/div\u003e\n          \u003cdiv class=\"age-stat-value\" id=\"diff-hours-val\"\u003e\u003c/div\u003e\n          \u003cdiv class=\"age-stat-unit\"\u003e時間\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"age-info-grid\" style=\"grid-template-columns: repeat(2,1fr);\"\u003e\n        \u003cdiv class=\"age-info-card\"\u003e\n          \u003cdiv class=\"age-info-icon\"\u003e📅\u003c/div\u003e\n          \u003cdiv class=\"age-info-label\"\u003e開始日の曜日\u003c/div\u003e\n          \u003cdiv class=\"age-info-value\" id=\"diff-from-weekday\"\u003e\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"age-info-card\"\u003e\n          \u003cdiv class=\"age-info-icon\"\u003e📅\u003c/div\u003e\n          \u003cdiv class=\"age-info-label\"\u003e終了日の曜日\u003c/div\u003e\n          \u003cdiv class=\"age-info-value\" id=\"diff-to-weekday\"\u003e\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  // ---- 初期化 ----\n  var todayStr = (function() {\n    var d = new Date();\n    var y = d.getFullYear();\n    var m = String(d.getMonth() + 1).padStart(2, '0');\n    var dd = String(d.getDate()).padStart(2, '0');\n    return y + '-' + m + '-' + dd;\n  })();\n  document.getElementById('age-base').value = todayStr;\n  document.getElementById('diff-to').value = todayStr;\n\n  // ---- タブ切り替え ----\n  window.ageSwitchTab = function(tab) {\n    document.getElementById('tab-age').classList.toggle('active', tab === 'age');\n    document.getElementById('tab-diff').classList.toggle('active', tab === 'diff');\n    document.getElementById('mode-age').style.display = tab === 'age' ? '' : 'none';\n    document.getElementById('mode-diff').style.display = tab === 'diff' ? '' : 'none';\n  };\n\n  // ---- 数値フォーマット ----\n  function fmt(n) { return n.toLocaleString('ja-JP'); }\n\n  // ---- 曜日 ----\n  var WEEKDAYS = ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'];\n\n  // ---- 星座 ----\n  function getZodiacWest(month, day) {\n    var signs = [\n      [1,20,'山羊座'], [2,18,'水瓶座'], [3,20,'魚座'], [4,19,'牡羊座'],\n      [5,20,'牡牛座'], [6,21,'双子座'], [7,22,'蟹座'], [8,22,'獅子座'],\n      [9,22,'乙女座'], [10,23,'天秤座'], [11,21,'蠍座'], [12,21,'射手座'], [12,31,'山羊座']\n    ];\n    for (var i = 0; i \u003c signs.length; i++) {\n      if (month \u003c signs[i][0] || (month === signs[i][0] \u0026\u0026 day \u003c= signs[i][1])) {\n        return signs[i][2];\n      }\n    }\n    return '山羊座';\n  }\n\n  // ---- 十二支 ----\n  var JUNISHI = ['子（ね）', '丑（うし）', '寅（とら）', '卯（う）', '辰（たつ）', '巳（み）',\n                 '午（うま）', '未（ひつじ）', '申（さる）', '酉（とり）', '戌（いぬ）', '亥（い）'];\n  function getJunishi(year) { return JUNISHI[(year - 4) % 12]; }\n\n  // ---- 和暦 ----\n  function getWareki(year, month, day) {\n    var d = year * 10000 + month * 100 + day;\n    if (d \u003e= 20190501) return { era: '令和', year: year - 2018, reading: 'れいわ' };\n    if (d \u003e= 19890108) return { era: '平成', year: year - 1988, reading: 'へいせい' };\n    if (d \u003e= 19261225) return { era: '昭和', year: year - 1925, reading: 'しょうわ' };\n    if (d \u003e= 19120730) return { era: '大正', year: year - 1911, reading: 'たいしょう' };\n    if (d \u003e= 18680125) return { era: '明治', year: year - 1867, reading: 'めいじ' };\n    return { era: '明治以前', year: year, reading: '' };\n  }\n  function warekiStr(w) {\n    return w.era + (w.year === 1 ? '元' : w.year) + '年';\n  }\n\n  // ---- 世代ラベル ----\n  function getGeneration(birthYear) {\n    if (birthYear \u003e= 2013) return { label: 'アルファ世代', desc: '2013年以降生まれ。デジタルネイティブの次世代。' };\n    if (birthYear \u003e= 1997) return { label: 'Z世代', desc: '1997〜2012年生まれ。スマホとSNSとともに育った世代。' };\n    if (birthYear \u003e= 1981) return { label: 'ミレニアル世代', desc: '1981〜1996年生まれ。インターネット普及期に青春を過ごした世代。' };\n    if (birthYear \u003e= 1975) return { label: 'ポスト団塊ジュニア', desc: '1975〜1980年生まれ。就職氷河期世代の前期にあたる。' };\n    if (birthYear \u003e= 1971) return { label: '氷河期世代（後期）', desc: '1971〜1974年生まれ。バブル崩壊後の厳しい就職戦線を経験。' };\n    if (birthYear \u003e= 1965) return { label: '氷河期世代', desc: '1965〜1970年生まれ。就職氷河期・ロストジェネレーションとも呼ばれる。' };\n    if (birthYear \u003e= 1955) return { label: 'バブル世代', desc: '1955〜1964年生まれ。バブル景気の恩恵を受けた世代。' };\n    if (birthYear \u003e= 1947) return { label: '団塊世代', desc: '1947〜1954年生まれ。戦後ベビーブームに生まれた世代。高度成長期を牽引。' };\n    if (birthYear \u003e= 1935) return { label: '焼け跡世代', desc: '1935〜1946年生まれ。戦争・復興期を経験した世代。' };\n    return { label: '昭和初期以前', desc: birthYear + '年生まれ。激動の昭和を生き抜いた世代。' };\n  }\n\n  // ---- 年齢計算 ----\n  function calcAge(birth, base) {\n    var by = birth.getFullYear(), bm = birth.getMonth() + 1, bd = birth.getDate();\n    var ty = base.getFullYear(), tm = base.getMonth() + 1, td = base.getDate();\n    var years = ty - by;\n    var months = tm - bm;\n    var days = td - bd;\n    if (days \u003c 0) {\n      var prevMonth = new Date(ty, base.getMonth(), 0);\n      days += prevMonth.getDate();\n      months -= 1;\n    }\n    if (months \u003c 0) { months += 12; years -= 1; }\n    return { years: years, months: months, days: days };\n  }\n\n  // ---- マイルストーン ----\n  function getMilestones(birthDate, baseDate, totalDays) {\n    var milestones = [\n      { name: '1,000日', days: 1000 },\n      { name: '3,000日', days: 3000 },\n      { name: '5,000日', days: 5000 },\n      { name: '7,000日', days: 7000 },\n      { name: '10,000日', days: 10000 },\n      { name: '20歳 成人', years: 20 },\n      { name: '25歳', years: 25 },\n      { name: '30歳', years: 30 },\n      { name: '1万時間（416.7日）', days: 417 },\n      { name: '40歳', years: 40 },\n      { name: '50歳', years: 50 },\n      { name: '60歳 還暦', years: 60 },\n      { name: '70歳 古希', years: 70 },\n      { name: '77歳 喜寿', years: 77 },\n      { name: '80歳 傘寿', years: 80 },\n      { name: '88歳 米寿', years: 88 },\n      { name: '90歳 卒寿', years: 90 },\n      { name: '99歳 白寿', years: 99 },\n      { name: '100歳 百寿', years: 100 },\n    ];\n    var result = [];\n    milestones.forEach(function(m) {\n      var targetDate;\n      if (m.years !== undefined) {\n        targetDate = new Date(birthDate.getFullYear() + m.years, birthDate.getMonth(), birthDate.getDate());\n      } else {\n        targetDate = new Date(birthDate.getTime() + m.days * 86400000);\n      }\n      var diffMs = targetDate - baseDate;\n      var diffDays = Math.round(diffMs / 86400000);\n      var status = diffDays \u003c 0 ? 'past' : (diffDays === 0 ? 'today' : 'future');\n      var dateStr = targetDate.getFullYear() + '年' + (targetDate.getMonth()+1) + '月' + targetDate.getDate() + '日';\n      var remainStr = '';\n      if (status === 'future') remainStr = 'あと' + fmt(diffDays) + '日';\n      else if (status === 'today') remainStr = '今日！';\n      else remainStr = fmt(-diffDays) + '日前';\n      result.push({ name: m.name, dateStr: dateStr, status: status, remainStr: remainStr });\n    });\n    result.sort(function(a, b) {\n      var order = { past: 0, today: 1, future: 2 };\n      return order[a.status] - order[b.status];\n    });\n    return result;\n  }\n\n  // ---- 年齢計算実行 ----\n  window.ageCalculate = function() {\n    var birthVal = document.getElementById('age-birth').value;\n    var baseVal = document.getElementById('age-base').value;\n    var errEl = document.getElementById('age-error');\n    var resEl = document.getElementById('age-results');\n\n    if (!birthVal) { errEl.textContent = '生年月日を入力してください。'; errEl.classList.add('visible'); resEl.classList.remove('visible'); return; }\n    if (!baseVal) { baseVal = todayStr; document.getElementById('age-base').value = todayStr; }\n\n    var birth = new Date(birthVal);\n    var base = new Date(baseVal);\n\n    if (isNaN(birth.getTime())) { errEl.textContent = '生年月日が正しくありません。'; errEl.classList.add('visible'); resEl.classList.remove('visible'); return; }\n    if (birth \u003e base) { errEl.textContent = '生年月日が基準日より後になっています。'; errEl.classList.add('visible'); resEl.classList.remove('visible'); return; }\n\n    errEl.classList.remove('visible');\n\n    var by = birth.getFullYear(), bm = birth.getMonth() + 1, bd = birth.getDate();\n    var ty = base.getFullYear(), tm = base.getMonth() + 1, td = base.getDate();\n\n    var age = calcAge(birth, base);\n    var totalMs = base - birth;\n    var totalDays = Math.floor(totalMs / 86400000);\n    var totalWeeks = Math.floor(totalDays / 7);\n    var totalMonths = age.years * 12 + age.months;\n    var totalHours = totalDays * 24;\n\n    // メイン\n    document.getElementById('res-age-years').textContent = age.years + '歳';\n    document.getElementById('res-age-detail').textContent = age.months + 'ヶ月 ' + age.days + '日';\n\n    // 統計\n    document.getElementById('res-total-months').textContent = fmt(totalMonths);\n    document.getElementById('res-total-weeks').textContent = fmt(totalWeeks);\n    document.getElementById('res-total-days').textContent = fmt(totalDays);\n    document.getElementById('res-total-hours').textContent = fmt(totalHours);\n\n    // 情報\n    document.getElementById('res-weekday').textContent = WEEKDAYS[birth.getDay()];\n    document.getElementById('res-zodiac-west').textContent = getZodiacWest(bm, bd);\n    document.getElementById('res-zodiac-east').textContent = getJunishi(by);\n\n    var warekiBirth = getWareki(by, bm, bd);\n    document.getElementById('res-wareki').textContent = warekiStr(warekiBirth);\n    document.getElementById('res-wareki-sub').textContent = warekiBirth.reading ? '（' + warekiBirth.reading + '）' : '';\n    document.getElementById('res-wareki-era').textContent = warekiBirth.era;\n\n    var warekiBase = getWareki(ty, tm, td);\n    document.getElementById('res-wareki-base').textContent = warekiStr(warekiBase);\n    document.getElementById('res-wareki-base-sub').textContent = warekiBase.reading ? '（' + warekiBase.reading + '）' : '';\n\n    // カウントダウン\n    var nextBirthday = new Date(ty, birth.getMonth(), bd);\n    if (nextBirthday \u003c= base) nextBirthday = new Date(ty + 1, birth.getMonth(), bd);\n    var countDays = Math.round((nextBirthday - base) / 86400000);\n    if (countDays === 0) {\n      document.getElementById('res-countdown').textContent = '今日が誕生日！';\n    } else {\n      document.getElementById('res-countdown').textContent = fmt(countDays) + '日';\n    }\n    document.getElementById('res-next-birthday').textContent =\n      nextBirthday.getFullYear() + '年' + (nextBirthday.getMonth()+1) + '月' + nextBirthday.getDate() + '日（' + WEEKDAYS[nextBirthday.getDay()] + '）';\n\n    // 世代\n    var gen = getGeneration(by);\n    document.getElementById('res-generation-badge').textContent = gen.label;\n    document.getElementById('res-generation-desc').textContent = gen.desc;\n\n    // マイルストーン\n    var milestones = getMilestones(birth, base, totalDays);\n    var html = '';\n    milestones.forEach(function(m) {\n      html += '\u003cdiv class=\"age-milestone-item ' + m.status + '\"\u003e' +\n        '\u003cdiv class=\"age-milestone-dot\"\u003e\u003c/div\u003e' +\n        '\u003cdiv class=\"age-milestone-name\"\u003e' + m.name + '\u003c/div\u003e' +\n        '\u003cdiv class=\"age-milestone-date\"\u003e' + m.dateStr + '\u003c/div\u003e' +\n        '\u003cdiv class=\"age-milestone-remain\"\u003e' + m.remainStr + '\u003c/div\u003e' +\n        '\u003c/div\u003e';\n    });\n    document.getElementById('res-milestones').innerHTML = html;\n\n    resEl.classList.add('visible');\n  };\n\n  window.ageReset = function() {\n    document.getElementById('age-birth').value = '';\n    document.getElementById('age-base').value = todayStr;\n    document.getElementById('age-error').classList.remove('visible');\n    document.getElementById('age-results').classList.remove('visible');\n  };\n\n  // ---- 日数計算実行 ----\n  window.diffCalculate = function() {\n    var fromVal = document.getElementById('diff-from').value;\n    var toVal = document.getElementById('diff-to').value;\n    var errEl = document.getElementById('diff-error');\n    var resEl = document.getElementById('diff-results');\n\n    if (!fromVal || !toVal) { errEl.textContent = '開始日と終了日を両方入力してください。'; errEl.classList.add('visible'); resEl.classList.remove('visible'); return; }\n\n    var fromDate = new Date(fromVal);\n    var toDate = new Date(toVal);\n\n    if (isNaN(fromDate.getTime()) || isNaN(toDate.getTime())) { errEl.textContent = '日付が正しくありません。'; errEl.classList.add('visible'); resEl.classList.remove('visible'); return; }\n\n    errEl.classList.remove('visible');\n\n    var earlier = fromDate \u003c= toDate ? fromDate : toDate;\n    var later = fromDate \u003c= toDate ? toDate : fromDate;\n    var earlierLabel = fromDate \u003c= toDate ? '開始日' : '終了日';\n    var laterLabel = fromDate \u003c= toDate ? '終了日' : '開始日';\n\n    var diffMs = later - earlier;\n    var diffDays = Math.round(diffMs / 86400000);\n    var diffWeeks = Math.floor(diffDays / 7);\n    var diffMonths = (diffDays / 30.4375).toFixed(1);\n    var diffYears = (diffDays / 365.25).toFixed(2);\n    var diffHours = diffDays * 24;\n\n    document.getElementById('diff-label').textContent =\n      earlierLabel + '〜' + laterLabel + ' の期間';\n    document.getElementById('diff-days-val').textContent = fmt(diffDays);\n    document.getElementById('diff-weeks-val').textContent = fmt(diffWeeks);\n    document.getElementById('diff-months-val').textContent = diffMonths;\n    document.getElementById('diff-years-val').textContent = diffYears;\n    document.getElementById('diff-hours-val').textContent = fmt(diffHours);\n    document.getElementById('diff-from-weekday').textContent = WEEKDAYS[fromDate.getDay()];\n    document.getElementById('diff-to-weekday').textContent = WEEKDAYS[toDate.getDay()];\n\n    resEl.classList.add('visible');\n  };\n\n  window.diffReset = function() {\n    document.getElementById('diff-from').value = '';\n    document.getElementById('diff-to').value = todayStr;\n    document.getElementById('diff-error').classList.remove('visible');\n    document.getElementById('diff-results').classList.remove('visible');\n  };\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"正確な年齢の計算方法\"\u003e正確な年齢の計算方法\u003c/h2\u003e\n\u003cp\u003e年齢の計算は「誕生日の前日が終わった瞬間に年齢が加算される」という「年齢計算ニ関スル法律（明治35年）」に基づいています。つまり、誕生日の前日の午後12時（深夜0時）に満年齢が1つ増えるため、法律的には誕生日当日ではなく「誕生日の前日」に年齢が変わります。このツールでは、より直感的な「誕生日当日に年齢が増える」計算を採用しています。月・日の計算については、基準日の日付が誕生日の日付より小さい場合は前の月に繰り戻して残り日数を計算する「満年齢方式」を用いています。\u003c/p\u003e","title":"年齢計算ツール - 生年月日から正確な年齢を計算"},{"content":"コードのインデントスタイルを瞬時に変換。2スペース・4スペース・タブを自由に切り替え、混在インデントを修正し、空白文字をプレビューしながら結果をコピーできます。\nタブ変換 → タブ⇔スペース変換 HTMLを整形 → HTML整形ツール 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 変換元： 自動検出 2スペース 4スペース タブ コードを貼り付けて検出 変換先： 2スペース 4スペース タブ レベル調整： \u0026#8722; 減らす \u0026#43; 増やす 行末空白を除去 混在インデントを修正 空白文字を表示 変換 入出力を入替 クリア ファイルを開く 入力 貼り付け 出力 コピー コピーしました！ 行数: 0 入力文字数: 0 出力文字数: 0 タブインデント行: 0 スペースインデント行: 0 混在行: 0 使い方：\n自動検出：全行の先頭空白を分析し、2スペース・4スペース・タブ・混在のいずれかを判定します。 再インデント：各行のインデント深さを元スタイルで測定し、変換先スタイルで再構築。相対的なネスト構造をそのまま保ちます。 レベル調整：スタイルを変えずに全行のインデントを1段階増減します。 混在修正：タブとスペースが混在した行を正規化してから変換します。 空白文字表示：スペースは ·（紫）、タブは →（琥珀）で表示し、変換結果を目視確認できます。 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/indent-converter/","summary":"\u003cp\u003eコードのインデントスタイルを瞬時に変換。2スペース・4スペース・タブを自由に切り替え、混在インデントを修正し、空白文字をプレビューしながら結果をコピーできます。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eタブ変換 → \u003ca href=\"https://productivity-works.com/ja/tools/tab-converter/\"\u003eタブ⇔スペース変換\u003c/a\u003e\n\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eHTMLを整形 → \u003ca href=\"https://productivity-works.com/ja/tools/html-beautifier/\"\u003eHTML整形ツール\u003c/a\u003e\n\u003c/p\u003e\u003c/blockquote\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e\n  \u003cspan style=\"font-size:13px;color:#0c4a6e;\"\u003efreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。\u003c/span\u003e\n  \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-block;margin-top:4px;padding:9px 20px;background:#0284c7;color:#fff;border-radius:7px;font-size:13px;font-weight:700;text-decoration:none;\"\u003efreeeを無料で試す →\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv id=\"ic-app\"\u003e\n\u003cstyle\u003e\n#ic-app *,#ic-app *::before,#ic-app *::after{box-sizing:border-box;margin:0;padding:0}\n#ic-app{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;font-size:14px;color:#1e293b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:20px;max-width:960px;margin-top:20px}\n#ic-app .ic-row{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-bottom:14px}\n#ic-app .ic-label{font-weight:600;font-size:13px;color:#475569;white-space:nowrap;min-width:90px}\n#ic-app .ic-btn-group{display:flex;gap:6px;flex-wrap:wrap}\n#ic-app .ic-btn{padding:7px 14px;border-radius:7px;border:1.5px solid #cbd5e1;background:#fff;color:#334155;font-size:13px;font-weight:500;cursor:pointer;transition:all .15s}\n#ic-app .ic-btn:hover{border-color:#6366f1;color:#6366f1}\n#ic-app .ic-btn.active{background:#6366f1;border-color:#6366f1;color:#fff}\n#ic-app .ic-btn.action{background:#6366f1;border-color:#6366f1;color:#fff;font-weight:600}\n#ic-app .ic-btn.action:hover{background:#4f46e5;border-color:#4f46e5}\n#ic-app .ic-btn.secondary{background:#f1f5f9;border-color:#cbd5e1;color:#475569}\n#ic-app .ic-btn.secondary:hover{border-color:#6366f1;color:#6366f1;background:#f1f5f9}\n#ic-app .ic-check-label{display:flex;align-items:center;gap:6px;font-size:13px;color:#475569;cursor:pointer;user-select:none}\n#ic-app .ic-check-label input{accent-color:#6366f1;width:15px;height:15px;cursor:pointer}\n#ic-app .ic-detect-badge{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;background:#f1f5f9;border:1.5px solid #e2e8f0;border-radius:20px;font-size:12px;color:#475569;font-weight:600}\n#ic-app .ic-detect-badge .dot{width:8px;height:8px;border-radius:50%;background:#94a3b8;display:inline-block}\n#ic-app .ic-detect-badge.detected-spaces-2 .dot{background:#10b981}\n#ic-app .ic-detect-badge.detected-spaces-4 .dot{background:#6366f1}\n#ic-app .ic-detect-badge.detected-tabs .dot{background:#f59e0b}\n#ic-app .ic-detect-badge.detected-mixed .dot{background:#ef4444}\n#ic-app .ic-panels{display:grid;grid-template-columns:1fr 1fr;gap:14px}\n@media(max-width:660px){#ic-app .ic-panels{grid-template-columns:1fr}}\n#ic-app .ic-panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}\n#ic-app .ic-panel-title{font-weight:600;font-size:13px;color:#64748b;letter-spacing:.02em}\n#ic-app .ic-panel-actions{display:flex;gap:6px;align-items:center}\n#ic-app textarea{width:100%;height:300px;padding:10px 12px;border:1.5px solid #e2e8f0;border-radius:8px;font-family:\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,monospace;font-size:13px;line-height:1.6;color:#1e293b;background:#fff;resize:vertical;outline:none;transition:border-color .15s}\n#ic-app textarea:focus{border-color:#6366f1}\n#ic-app .ic-preview{width:100%;height:300px;padding:10px 12px;border:1.5px solid #e2e8f0;border-radius:8px;font-family:\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,monospace;font-size:13px;line-height:1.6;background:#fff;overflow:auto;white-space:pre;word-break:normal;tab-size:4}\n#ic-app .ic-preview .ws-sp{color:#c4b5fd}\n#ic-app .ic-preview .ws-tab{color:#f59e0b}\n#ic-app .ic-stats{display:flex;gap:14px;flex-wrap:wrap;padding:10px 14px;background:#f1f5f9;border-radius:8px;margin-top:12px}\n#ic-app .ic-stat{font-size:12px;color:#64748b}\n#ic-app .ic-stat strong{color:#1e293b;font-weight:600}\n#ic-app .ic-divider{border:none;border-top:1px solid #e2e8f0;margin:14px 0}\n#ic-app .ic-copy-note{font-size:12px;color:#10b981;font-weight:600;display:none}\n#ic-app .ic-upload-wrap{position:relative;display:inline-block}\n#ic-app .ic-upload-wrap input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%}\n#ic-app .ic-increase-decrease{display:flex;gap:4px}\n\u003c/style\u003e\n\u003c!-- 変換元スタイル --\u003e\n\u003cdiv class=\"ic-row\"\u003e\n  \u003cspan class=\"ic-label\"\u003e変換元：\u003c/span\u003e\n  \u003cdiv class=\"ic-btn-group\" id=\"ic-from-group\"\u003e\n    \u003cbutton class=\"ic-btn active\" id=\"ic-from-auto\" onclick=\"icSetFrom('auto')\"\u003e自動検出\u003c/button\u003e\n    \u003cbutton class=\"ic-btn\" id=\"ic-from-2sp\" onclick=\"icSetFrom('2sp')\"\u003e2スペース\u003c/button\u003e\n    \u003cbutton class=\"ic-btn\" id=\"ic-from-4sp\" onclick=\"icSetFrom('4sp')\"\u003e4スペース\u003c/button\u003e\n    \u003cbutton class=\"ic-btn\" id=\"ic-from-tab\" onclick=\"icSetFrom('tab')\"\u003eタブ\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cspan class=\"ic-detect-badge\" id=\"ic-detect-badge\"\u003e\u003cspan class=\"dot\"\u003e\u003c/span\u003e\u003cspan id=\"ic-detect-text\"\u003eコードを貼り付けて検出\u003c/span\u003e\u003c/span\u003e\n\u003c/div\u003e\n\u003c!-- 変換先スタイル --\u003e\n\u003cdiv class=\"ic-row\"\u003e\n  \u003cspan class=\"ic-label\"\u003e変換先：\u003c/span\u003e\n  \u003cdiv class=\"ic-btn-group\"\u003e\n    \u003cbutton class=\"ic-btn\" id=\"ic-to-2sp\" onclick=\"icSetTo('2sp')\"\u003e2スペース\u003c/button\u003e\n    \u003cbutton class=\"ic-btn active\" id=\"ic-to-4sp\" onclick=\"icSetTo('4sp')\"\u003e4スペース\u003c/button\u003e\n    \u003cbutton class=\"ic-btn\" id=\"ic-to-tab\" onclick=\"icSetTo('tab')\"\u003eタブ\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- インデントレベル調整 --\u003e\n\u003cdiv class=\"ic-row\"\u003e\n  \u003cspan class=\"ic-label\"\u003eレベル調整：\u003c/span\u003e\n  \u003cdiv class=\"ic-increase-decrease\"\u003e\n    \u003cbutton class=\"ic-btn secondary\" onclick=\"icShiftIndent(-1)\"\u003e\u0026#8722; 減らす\u003c/button\u003e\n    \u003cbutton class=\"ic-btn secondary\" onclick=\"icShiftIndent(1)\"\u003e\u0026#43; 増やす\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- オプション --\u003e\n\u003cdiv class=\"ic-row\"\u003e\n  \u003clabel class=\"ic-check-label\"\u003e\u003cinput type=\"checkbox\" id=\"ic-trim\" onchange=\"icProcess()\"\u003e 行末空白を除去\u003c/label\u003e\n  \u003clabel class=\"ic-check-label\"\u003e\u003cinput type=\"checkbox\" id=\"ic-fix-mixed\" onchange=\"icProcess()\" checked\u003e 混在インデントを修正\u003c/label\u003e\n  \u003clabel class=\"ic-check-label\"\u003e\u003cinput type=\"checkbox\" id=\"ic-show-ws\" onchange=\"icProcess()\" checked\u003e 空白文字を表示\u003c/label\u003e\n\u003c/div\u003e\n\u003c!-- アクション --\u003e\n\u003cdiv class=\"ic-row\"\u003e\n  \u003cdiv class=\"ic-btn-group\"\u003e\n    \u003cbutton class=\"ic-btn action\" onclick=\"icProcess()\"\u003e変換\u003c/button\u003e\n    \u003cbutton class=\"ic-btn secondary\" onclick=\"icSwap()\"\u003e入出力を入替\u003c/button\u003e\n    \u003cbutton class=\"ic-btn secondary\" onclick=\"icClear()\"\u003eクリア\u003c/button\u003e\n    \u003cdiv class=\"ic-upload-wrap\"\u003e\n      \u003cbutton class=\"ic-btn secondary\"\u003eファイルを開く\u003c/button\u003e\n      \u003cinput type=\"file\" accept=\"text/*\" onchange=\"icUpload(event)\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003chr class=\"ic-divider\"\u003e\n\u003c!-- エディタパネル --\u003e\n\u003cdiv class=\"ic-panels\"\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"ic-panel-head\"\u003e\n      \u003cspan class=\"ic-panel-title\"\u003e入力\u003c/span\u003e\n      \u003cdiv class=\"ic-panel-actions\"\u003e\n        \u003cbutton class=\"ic-btn secondary\" style=\"padding:4px 10px;font-size:12px\" onclick=\"icPaste()\"\u003e貼り付け\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003ctextarea id=\"ic-input\" placeholder=\"コードをここに貼り付けてください...\" oninput=\"icProcess()\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"ic-panel-head\"\u003e\n      \u003cspan class=\"ic-panel-title\"\u003e出力\u003c/span\u003e\n      \u003cdiv class=\"ic-panel-actions\"\u003e\n        \u003cbutton class=\"ic-btn secondary\" style=\"padding:4px 10px;font-size:12px\" onclick=\"icCopy()\"\u003eコピー\u003c/button\u003e\n        \u003cspan class=\"ic-copy-note\" id=\"ic-copy-note\"\u003eコピーしました！\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ic-preview\" id=\"ic-output-preview\" aria-live=\"polite\"\u003e\u003c/div\u003e\n    \u003ctextarea id=\"ic-output-raw\" style=\"display:none\" readonly spellcheck=\"false\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 統計情報 --\u003e\n\u003cdiv class=\"ic-stats\" id=\"ic-stats\"\u003e\n  \u003cspan class=\"ic-stat\"\u003e行数: \u003cstrong id=\"ic-stat-lines\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n  \u003cspan class=\"ic-stat\"\u003e入力文字数: \u003cstrong id=\"ic-stat-in\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n  \u003cspan class=\"ic-stat\"\u003e出力文字数: \u003cstrong id=\"ic-stat-out\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n  \u003cspan class=\"ic-stat\"\u003eタブインデント行: \u003cstrong id=\"ic-stat-tabs\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n  \u003cspan class=\"ic-stat\"\u003eスペースインデント行: \u003cstrong id=\"ic-stat-spaces\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n  \u003cspan class=\"ic-stat\"\u003e混在行: \u003cstrong id=\"ic-stat-mixed\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var fromStyle = 'auto';\n  var toStyle = '4sp';\n  var shiftDelta = 0;\n\n  function detectStyle(lines){\n    var tabLines=0, sp2Lines=0, sp4Lines=0, mixedLines=0;\n    lines.forEach(function(l){\n      var m = l.match(/^(\\s+)/);\n      if(!m) return;\n      var lead = m[1];\n      var hasTab = /\\t/.test(lead);\n      var hasSp = / /.test(lead);\n      if(hasTab \u0026\u0026 hasSp){ mixedLines++; return; }\n      if(hasTab){ tabLines++; return; }\n      var n = lead.length;\n      if(n % 4 === 0) sp4Lines++;\n      else sp2Lines++;\n    });\n    var total = tabLines + sp2Lines + sp4Lines + mixedLines;\n    if(total === 0) return 'unknown';\n    if(mixedLines \u003e total * 0.15) return 'mixed';\n    if(tabLines \u003e sp2Lines \u0026\u0026 tabLines \u003e sp4Lines) return 'tab';\n    if(sp4Lines \u003e= sp2Lines) return '4sp';\n    return '2sp';\n  }\n\n  function updateDetectBadge(style){\n    var badge = document.getElementById('ic-detect-badge');\n    var text = document.getElementById('ic-detect-text');\n    badge.className = 'ic-detect-badge';\n    var labels = {\n      'unknown':'インデントなし',\n      '2sp':'検出: 2スペース',\n      '4sp':'検出: 4スペース',\n      'tab':'検出: タブ',\n      'mixed':'検出: 混在（修正します）'\n    };\n    var classes = {'2sp':'detected-spaces-2','4sp':'detected-spaces-4','tab':'detected-tabs','mixed':'detected-mixed'};\n    text.textContent = labels[style] || 'コードを貼り付けて検出';\n    if(classes[style]) badge.classList.add(classes[style]);\n  }\n\n  function buildIndent(level, style){\n    if(level \u003c= 0) return '';\n    if(style === 'tab') return '\\t'.repeat(level);\n    var size = style === '2sp' ? 2 : 4;\n    return ' '.repeat(size * level);\n  }\n\n  function convertLines(lines, srcStyle, dstStyle, fixMixed, trim, shift){\n    var detected = detectStyle(lines);\n    updateDetectBadge(detected);\n\n    return lines.map(function(line){\n      var m = line.match(/^(\\s*)([\\s\\S]*)$/);\n      var lead = m[1], rest = m[2];\n      if(!lead){\n        if(trim) rest = rest.replace(/[ \\t]+$/, '');\n        return rest;\n      }\n      var normalized = lead;\n      if(fixMixed \u0026\u0026 /\\t/.test(lead) \u0026\u0026 / /.test(lead)){\n        normalized = lead.replace(/\\t/g, '    ');\n      }\n      var hasTabs = /\\t/.test(normalized);\n      var src = srcStyle === 'auto' ? detected : srcStyle;\n      if(src === 'mixed' || src === 'unknown') src = hasTabs ? 'tab' : (normalized.length % 4 === 0 ? '4sp' : '2sp');\n      var level;\n      if(hasTabs \u0026\u0026 src !== 'tab'){\n        var expanded = normalized.replace(/\\t/g, (src==='2sp'?'  ':'    '));\n        var unit = src==='2sp' ? 2 : 4;\n        level = Math.floor(expanded.length / unit);\n      } else if(!hasTabs \u0026\u0026 src === 'tab'){\n        level = Math.floor(normalized.length / 4);\n      } else if(src === 'tab'){\n        level = normalized.length;\n      } else {\n        var u = src==='2sp' ? 2 : 4;\n        level = Math.floor(normalized.length / u);\n      }\n      level = Math.max(0, level + shift);\n      var newLead = buildIndent(level, dstStyle);\n      var out = newLead + rest;\n      if(trim) out = out.replace(/[ \\t]+$/, '');\n      return out;\n    });\n  }\n\n  function escHtml(s){\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  function renderPreview(text, showWs, dstStyle){\n    var el = document.getElementById('ic-output-preview');\n    if(!showWs){ el.textContent = text; return; }\n    var lines = text.split('\\n');\n    var html = lines.map(function(line){\n      var m = line.match(/^(\\s*)([\\s\\S]*)$/);\n      var lead = m[1], rest = m[2];\n      var leadHtml = '';\n      if(dstStyle === 'tab'){\n        leadHtml = escHtml(lead).replace(/\\t/g,'\u003cspan class=\"ws-tab\"\u003e\\u2192   \u003c/span\u003e');\n      } else {\n        leadHtml = escHtml(lead).replace(/ /g,'\u003cspan class=\"ws-sp\"\u003e\\u00b7\u003c/span\u003e');\n      }\n      return leadHtml + escHtml(rest);\n    }).join('\\n');\n    el.innerHTML = html;\n  }\n\n  function computeStats(lines){\n    var tabs=0, spaces=0, mixed=0;\n    lines.forEach(function(l){\n      var m = l.match(/^(\\s+)/);\n      if(!m) return;\n      var lead = m[1];\n      var hasT = /\\t/.test(lead), hasS = / /.test(lead);\n      if(hasT \u0026\u0026 hasS) mixed++;\n      else if(hasT) tabs++;\n      else spaces++;\n    });\n    return {tabs:tabs, spaces:spaces, mixed:mixed};\n  }\n\n  function process(){\n    var input = document.getElementById('ic-input').value;\n    var trim = document.getElementById('ic-trim').checked;\n    var fixMixed = document.getElementById('ic-fix-mixed').checked;\n    var showWs = document.getElementById('ic-show-ws').checked;\n    var lines = input.split('\\n');\n    var stats = computeStats(lines);\n    var outLines = convertLines(lines, fromStyle, toStyle, fixMixed, trim, shiftDelta);\n    var output = outLines.join('\\n');\n    document.getElementById('ic-output-raw').value = output;\n    renderPreview(output, showWs, toStyle);\n    document.getElementById('ic-stat-lines').textContent = lines.length;\n    document.getElementById('ic-stat-in').textContent = input.length;\n    document.getElementById('ic-stat-out').textContent = output.length;\n    document.getElementById('ic-stat-tabs').textContent = stats.tabs;\n    document.getElementById('ic-stat-spaces').textContent = stats.spaces;\n    document.getElementById('ic-stat-mixed').textContent = stats.mixed;\n    if(!input){\n      updateDetectBadge('unknown');\n      document.getElementById('ic-detect-text').textContent = 'コードを貼り付けて検出';\n    }\n  }\n\n  function setFrom(s){\n    fromStyle = s;\n    ['auto','2sp','4sp','tab'].forEach(function(k){\n      document.getElementById('ic-from-'+k).classList.toggle('active', k===s);\n    });\n    process();\n  }\n\n  function setTo(s){\n    toStyle = s;\n    ['2sp','4sp','tab'].forEach(function(k){\n      document.getElementById('ic-to-'+k).classList.toggle('active', k===s);\n    });\n    process();\n  }\n\n  function shiftIndent(delta){\n    shiftDelta += delta;\n    process();\n  }\n\n  function swap(){\n    var raw = document.getElementById('ic-output-raw').value;\n    document.getElementById('ic-input').value = raw;\n    shiftDelta = 0;\n    process();\n  }\n\n  function clear(){\n    document.getElementById('ic-input').value = '';\n    document.getElementById('ic-output-raw').value = '';\n    document.getElementById('ic-output-preview').textContent = '';\n    shiftDelta = 0;\n    ['ic-stat-lines','ic-stat-in','ic-stat-out','ic-stat-tabs','ic-stat-spaces','ic-stat-mixed'].forEach(function(id){\n      document.getElementById(id).textContent = '0';\n    });\n    updateDetectBadge('unknown');\n    document.getElementById('ic-detect-text').textContent = 'コードを貼り付けて検出';\n  }\n\n  function copy(){\n    var val = document.getElementById('ic-output-raw').value;\n    if(!val) return;\n    if(navigator.clipboard \u0026\u0026 navigator.clipboard.writeText){\n      navigator.clipboard.writeText(val).then(flashCopy);\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = val; ta.style.position='fixed'; ta.style.opacity='0';\n      document.body.appendChild(ta); ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      flashCopy();\n    }\n  }\n\n  function flashCopy(){\n    var note = document.getElementById('ic-copy-note');\n    note.style.display='inline';\n    setTimeout(function(){ note.style.display='none'; }, 1800);\n  }\n\n  function paste(){\n    if(navigator.clipboard \u0026\u0026 navigator.clipboard.readText){\n      navigator.clipboard.readText().then(function(t){\n        document.getElementById('ic-input').value = t;\n        shiftDelta = 0;\n        process();\n      });\n    }\n  }\n\n  function upload(e){\n    var file = e.target.files[0];\n    if(!file) return;\n    var reader = new FileReader();\n    reader.onload = function(ev){\n      document.getElementById('ic-input').value = ev.target.result;\n      shiftDelta = 0;\n      process();\n    };\n    reader.readAsText(file);\n    e.target.value = '';\n  }\n\n  window.icSetFrom = setFrom;\n  window.icSetTo = setTo;\n  window.icShiftIndent = shiftIndent;\n  window.icProcess = process;\n  window.icSwap = swap;\n  window.icClear = clear;\n  window.icCopy = copy;\n  window.icPaste = paste;\n  window.icUpload = upload;\n\n  process();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e使い方：\u003c/strong\u003e\u003c/p\u003e","title":"インデント変換ツール"},{"content":" 数字 サイコロ コイン リスト 最小値 最大値 生成数 \u0026lt;div class=\u0026quot;rng-toggle-row\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;rng-toggle\u0026quot; for=\u0026quot;rng-no-dup\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;rng-no-dup\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;rng-toggle-slider\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/label\u0026gt; \u0026lt;span class=\u0026quot;rng-toggle-label\u0026quot;\u0026gt;重複なし\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rng-result-box\u0026quot; id=\u0026quot;rng-number-result-box\u0026quot;\u0026gt; \u0026lt;div id=\u0026quot;rng-number-output\u0026quot; class=\u0026quot;rng-result-number\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rng-result-label\u0026quot; id=\u0026quot;rng-number-label\u0026quot;\u0026gt;生成ボタンを押してください\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rng-btn-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;rng-btn rng-btn-primary\u0026quot; onclick=\u0026quot;rngGenerateNumber()\u0026quot;\u0026gt;\u0026amp;#9656; 生成する\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;rng-btn rng-btn-secondary\u0026quot; onclick=\u0026quot;rngCopyResult()\u0026quot;\u0026gt;\u0026amp;#128203; コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; サイコロの数： \u0026#8722; 2個 + サイコロを振るボタンを押してください \u0026#9656; サイコロを振る ? コインを投げるボタンを押してください \u0026#9656; コインを投げる リスト（1行に1項目） — \u0026#9656; ランダムに選ぶ 生成履歴 クリア まだ履歴がありません。 使い方 数字モード： 最小値・最大値・生成数を入力して「生成する」を押すだけ。重複なしトグルをオンにすると、同じ数字が出ない抽選が可能です。\nサイコロモード： サイコロの個数（1〜6個）を選んで「サイコロを振る」を押すと、目のドット絵が表示されます。合計値も自動計算されます。\nコインモード： 「コインを投げる」でランダムに表・裏を判定。アニメーション付きで視覚的にも楽しめます。\nリストモード： テキストエリアに項目を1行ずつ入力し、「ランダムに選ぶ」を押すと1つをランダムに選択。出し物・当番・お昼ごはんのお店選びにも便利です。\n生成履歴： 生成した結果はすべて履歴に記録されます（最大30件）。\n関連ツール セキュアなパスワードをランダム生成 → パスワードジェネレーター タスクや作業時間を計測 → ストップウォッチ 抽選・キャンペーンのQRコードを作成 → QRコードジェネレーター 業務のデジタル化にはfreee\nfreeeを無料で試す\n","permalink":"https://productivity-works.com/ja/tools/random-number-generator/","summary":"\u003cdiv id=\"rng-app\"\u003e\n\u003cstyle\u003e\n#rng-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', Roboto, sans-serif;\n  max-width: 720px;\n  margin: 0 auto;\n  color: #e2e8f0;\n}\n\n#rng-app * {\n  box-sizing: border-box;\n}\n\n#rng-app .rng-card {\n  background: #1a0533;\n  border: 1px solid #4c1d95;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 16px;\n}\n\n#rng-app .rng-tabs {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 20px;\n  flex-wrap: wrap;\n}\n\n#rng-app .rng-tab {\n  flex: 1;\n  min-width: 80px;\n  padding: 10px 10px;\n  border: 1px solid #4c1d95;\n  border-radius: 8px;\n  background: #12002a;\n  color: #a78bfa;\n  cursor: pointer;\n  font-size: 13px;\n  font-weight: 500;\n  transition: all 0.2s;\n  text-align: center;\n  user-select: none;\n}\n\n#rng-app .rng-tab:hover {\n  border-color: #7c3aed;\n  color: #c4b5fd;\n}\n\n#rng-app .rng-tab.active {\n  background: #5b21b6;\n  border-color: #7c3aed;\n  color: #fff;\n}\n\n#rng-app .rng-result-box {\n  background: #0d001f;\n  border: 2px solid #4c1d95;\n  border-radius: 12px;\n  padding: 28px 20px;\n  text-align: center;\n  margin-bottom: 16px;\n  min-height: 100px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-direction: column;\n  position: relative;\n  overflow: hidden;\n}\n\n#rng-app .rng-result-number {\n  font-size: 56px;\n  font-weight: 800;\n  color: #a78bfa;\n  letter-spacing: -1px;\n  line-height: 1;\n  transition: opacity 0.15s;\n}\n\n#rng-app .rng-result-number.animating {\n  animation: rngSpinJa 0.5s ease-out;\n}\n\n@keyframes rngSpinJa {\n  0%   { opacity: 0; transform: translateY(-20px) scale(0.85); }\n  60%  { opacity: 1; transform: translateY(4px) scale(1.05); }\n  100% { opacity: 1; transform: translateY(0) scale(1); }\n}\n\n#rng-app .rng-result-label {\n  font-size: 12px;\n  color: #6d28d9;\n  margin-top: 8px;\n  letter-spacing: 0.05em;\n}\n\n#rng-app .rng-multi-results {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  justify-content: center;\n  padding: 10px 0;\n}\n\n#rng-app .rng-multi-chip {\n  background: #2e1065;\n  border: 1px solid #5b21b6;\n  border-radius: 8px;\n  padding: 8px 16px;\n  font-size: 20px;\n  font-weight: 700;\n  color: #c4b5fd;\n  animation: rngSpinJa 0.5s ease-out both;\n}\n\n#rng-app .rng-btn-row {\n  display: flex;\n  gap: 10px;\n}\n\n#rng-app .rng-btn {\n  padding: 12px 24px;\n  border-radius: 8px;\n  border: none;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: all 0.2s;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 6px;\n}\n\n#rng-app .rng-btn-primary {\n  background: #7c3aed;\n  color: #fff;\n  flex: 2;\n}\n\n#rng-app .rng-btn-primary:hover {\n  background: #6d28d9;\n  transform: translateY(-1px);\n  box-shadow: 0 4px 16px #7c3aed44;\n}\n\n#rng-app .rng-btn-primary:active {\n  transform: translateY(0);\n}\n\n#rng-app .rng-btn-secondary {\n  background: #2e1065;\n  color: #c4b5fd;\n  border: 1px solid #4c1d95;\n  flex: 1;\n}\n\n#rng-app .rng-btn-secondary:hover {\n  background: #3b0f8a;\n  color: #fff;\n}\n\n#rng-app .rng-field-row {\n  display: flex;\n  gap: 12px;\n  margin-bottom: 16px;\n  flex-wrap: wrap;\n}\n\n#rng-app .rng-field {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  flex: 1;\n  min-width: 80px;\n}\n\n#rng-app .rng-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #7c3aed;\n  letter-spacing: 0.06em;\n}\n\n#rng-app .rng-input {\n  background: #12002a;\n  border: 1px solid #4c1d95;\n  border-radius: 8px;\n  color: #e2e8f0;\n  font-size: 16px;\n  font-weight: 600;\n  padding: 10px 12px;\n  outline: none;\n  width: 100%;\n  transition: border-color 0.2s;\n}\n\n#rng-app .rng-input:focus {\n  border-color: #7c3aed;\n}\n\n#rng-app .rng-toggle-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 16px;\n}\n\n#rng-app .rng-toggle-label {\n  font-size: 14px;\n  color: #a78bfa;\n  cursor: pointer;\n  user-select: none;\n}\n\n#rng-app .rng-toggle {\n  position: relative;\n  width: 40px;\n  height: 22px;\n  flex-shrink: 0;\n}\n\n#rng-app .rng-toggle input {\n  opacity: 0;\n  width: 0;\n  height: 0;\n  position: absolute;\n}\n\n#rng-app .rng-toggle-slider {\n  position: absolute;\n  inset: 0;\n  background: #2e1065;\n  border: 1px solid #4c1d95;\n  border-radius: 22px;\n  cursor: pointer;\n  transition: 0.2s;\n}\n\n#rng-app .rng-toggle-slider:before {\n  content: '';\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  background: #6d28d9;\n  border-radius: 50%;\n  left: 2px;\n  top: 2px;\n  transition: 0.2s;\n}\n\n#rng-app .rng-toggle input:checked + .rng-toggle-slider {\n  background: #5b21b6;\n  border-color: #7c3aed;\n}\n\n#rng-app .rng-toggle input:checked + .rng-toggle-slider:before {\n  background: #c4b5fd;\n  transform: translateX(18px);\n}\n\n/* Dice */\n#rng-app .rng-dice-row {\n  display: flex;\n  gap: 14px;\n  justify-content: center;\n  flex-wrap: wrap;\n  padding: 10px 0;\n}\n\n#rng-app .rng-die {\n  width: 64px;\n  height: 64px;\n  background: #2e1065;\n  border: 2px solid #5b21b6;\n  border-radius: 12px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-direction: column;\n  position: relative;\n  animation: rngDiceRollJa 0.4s ease-out both;\n}\n\n@keyframes rngDiceRollJa {\n  0%   { transform: rotate(-20deg) scale(0.7); opacity: 0; }\n  60%  { transform: rotate(5deg) scale(1.08); opacity: 1; }\n  100% { transform: rotate(0deg) scale(1); opacity: 1; }\n}\n\n#rng-app .rng-die-dots {\n  display: grid;\n  width: 44px;\n  height: 44px;\n  padding: 4px;\n}\n\n#rng-app .rng-dot {\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background: #a78bfa;\n  margin: auto;\n}\n\n#rng-app .rng-dot.hidden {\n  background: transparent;\n}\n\n/* Coin */\n#rng-app .rng-coin-wrap {\n  perspective: 600px;\n  display: flex;\n  justify-content: center;\n  padding: 10px 0;\n}\n\n#rng-app .rng-coin {\n  width: 100px;\n  height: 100px;\n  border-radius: 50%;\n  background: linear-gradient(135deg, #7c3aed, #5b21b6);\n  border: 4px solid #a78bfa;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 22px;\n  font-weight: 800;\n  color: #fff;\n  box-shadow: 0 0 24px #7c3aed66;\n  transform-style: preserve-3d;\n}\n\n#rng-app .rng-coin.flipping {\n  animation: rngCoinFlipJa 0.7s ease-out;\n}\n\n@keyframes rngCoinFlipJa {\n  0%   { transform: rotateY(0deg); }\n  50%  { transform: rotateY(900deg) scale(0.85); }\n  100% { transform: rotateY(1800deg) scale(1); }\n}\n\n#rng-app .rng-coin-label {\n  font-size: 14px;\n  font-weight: 700;\n  color: #c4b5fd;\n  text-align: center;\n  margin-top: 10px;\n}\n\n/* List picker */\n#rng-app .rng-textarea {\n  background: #12002a;\n  border: 1px solid #4c1d95;\n  border-radius: 8px;\n  color: #e2e8f0;\n  font-size: 14px;\n  padding: 10px 12px;\n  width: 100%;\n  outline: none;\n  resize: vertical;\n  min-height: 100px;\n  font-family: inherit;\n  transition: border-color 0.2s;\n}\n\n#rng-app .rng-textarea:focus {\n  border-color: #7c3aed;\n}\n\n#rng-app .rng-list-result {\n  font-size: 28px;\n  font-weight: 800;\n  color: #a78bfa;\n  text-align: center;\n  min-height: 44px;\n  word-break: break-word;\n}\n\n/* History */\n#rng-app .rng-history-title {\n  font-size: 12px;\n  font-weight: 700;\n  color: #6d28d9;\n  letter-spacing: 0.06em;\n  margin-bottom: 10px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n#rng-app .rng-history-clear {\n  font-size: 11px;\n  color: #4c1d95;\n  cursor: pointer;\n  background: none;\n  border: none;\n  padding: 2px 6px;\n  border-radius: 4px;\n  transition: color 0.2s;\n}\n\n#rng-app .rng-history-clear:hover {\n  color: #7c3aed;\n}\n\n#rng-app .rng-history-list {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n  min-height: 32px;\n}\n\n#rng-app .rng-history-chip {\n  background: #1a0533;\n  border: 1px solid #3b0f8a;\n  border-radius: 20px;\n  padding: 4px 12px;\n  font-size: 13px;\n  color: #c4b5fd;\n}\n\n#rng-app .rng-section {\n  display: none;\n}\n\n#rng-app .rng-section.active {\n  display: block;\n}\n\n#rng-app .rng-dice-count-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 16px;\n  flex-wrap: wrap;\n}\n\n#rng-app .rng-dice-count-btn {\n  width: 36px;\n  height: 36px;\n  border-radius: 8px;\n  border: 1px solid #4c1d95;\n  background: #12002a;\n  color: #a78bfa;\n  font-size: 20px;\n  font-weight: 700;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: all 0.2s;\n  line-height: 1;\n}\n\n#rng-app .rng-dice-count-btn:hover {\n  background: #2e1065;\n  border-color: #7c3aed;\n  color: #fff;\n}\n\n#rng-app .rng-dice-count-val {\n  font-size: 16px;\n  font-weight: 700;\n  color: #c4b5fd;\n  min-width: 70px;\n  text-align: center;\n}\n\n#rng-app .rng-dice-sum {\n  font-size: 14px;\n  color: #6d28d9;\n  margin-top: 8px;\n  text-align: center;\n}\n\n@media (max-width: 480px) {\n  #rng-app .rng-card { padding: 16px; }\n  #rng-app .rng-result-number { font-size: 40px; }\n  #rng-app .rng-btn-row { flex-direction: column; }\n  #rng-app .rng-tab { font-size: 11px; padding: 8px 4px; }\n  #rng-app .rng-die { width: 52px; height: 52px; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"rng-card\"\u003e\n  \u003cdiv class=\"rng-tabs\"\u003e\n    \u003cdiv class=\"rng-tab active\" id=\"rng-tab-number\" onclick=\"rngSetMode('number')\"\u003e数字\u003c/div\u003e\n    \u003cdiv class=\"rng-tab\" id=\"rng-tab-dice\" onclick=\"rngSetMode('dice')\"\u003eサイコロ\u003c/div\u003e\n    \u003cdiv class=\"rng-tab\" id=\"rng-tab-coin\" onclick=\"rngSetMode('coin')\"\u003eコイン\u003c/div\u003e\n    \u003cdiv class=\"rng-tab\" id=\"rng-tab-list\" onclick=\"rngSetMode('list')\"\u003eリスト\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 数字モード --\u003e\n  \u003cdiv class=\"rng-section active\" id=\"rng-sec-number\"\u003e\n    \u003cdiv class=\"rng-field-row\"\u003e\n      \u003cdiv class=\"rng-field\"\u003e\n        \u003clabel class=\"rng-label\" for=\"rng-min\"\u003e最小値\u003c/label\u003e\n        \u003cinput class=\"rng-input\" type=\"number\" id=\"rng-min\" value=\"1\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"rng-field\"\u003e\n        \u003clabel class=\"rng-label\" for=\"rng-max\"\u003e最大値\u003c/label\u003e\n        \u003cinput class=\"rng-input\" type=\"number\" id=\"rng-max\" value=\"100\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"rng-field\"\u003e\n        \u003clabel class=\"rng-label\" for=\"rng-qty\"\u003e生成数\u003c/label\u003e\n        \u003cinput class=\"rng-input\" type=\"number\" id=\"rng-qty\" value=\"1\" min=\"1\" max=\"100\"\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div class=\u0026quot;rng-toggle-row\u0026quot;\u0026gt;\n  \u0026lt;label class=\u0026quot;rng-toggle\u0026quot; for=\u0026quot;rng-no-dup\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;rng-no-dup\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;rng-toggle-slider\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\n  \u0026lt;/label\u0026gt;\n  \u0026lt;span class=\u0026quot;rng-toggle-label\u0026quot;\u0026gt;重複なし\u0026lt;/span\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;rng-result-box\u0026quot; id=\u0026quot;rng-number-result-box\u0026quot;\u0026gt;\n  \u0026lt;div id=\u0026quot;rng-number-output\u0026quot; class=\u0026quot;rng-result-number\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;rng-result-label\u0026quot; id=\u0026quot;rng-number-label\u0026quot;\u0026gt;生成ボタンを押してください\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;rng-btn-row\u0026quot;\u0026gt;\n  \u0026lt;button class=\u0026quot;rng-btn rng-btn-primary\u0026quot; onclick=\u0026quot;rngGenerateNumber()\u0026quot;\u0026gt;\u0026amp;#9656; 生成する\u0026lt;/button\u0026gt;\n  \u0026lt;button class=\u0026quot;rng-btn rng-btn-secondary\u0026quot; onclick=\u0026quot;rngCopyResult()\u0026quot;\u0026gt;\u0026amp;#128203; コピー\u0026lt;/button\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- サイコロモード --\u003e\n  \u003cdiv class=\"rng-section\" id=\"rng-sec-dice\"\u003e\n    \u003cdiv class=\"rng-dice-count-row\"\u003e\n      \u003cspan class=\"rng-label\"\u003eサイコロの数：\u003c/span\u003e\n      \u003cbutton class=\"rng-dice-count-btn\" onclick=\"rngChangeDiceCount(-1)\"\u003e\u0026#8722;\u003c/button\u003e\n      \u003cspan class=\"rng-dice-count-val\" id=\"rng-dice-count-val\"\u003e2個\u003c/span\u003e\n      \u003cbutton class=\"rng-dice-count-btn\" onclick=\"rngChangeDiceCount(1)\"\u003e+\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"rng-result-box\" id=\"rng-dice-result-box\" style=\"flex-direction:column;gap:12px;\"\u003e\n      \u003cdiv class=\"rng-dice-row\" id=\"rng-dice-display\"\u003e\n        \u003cdiv style=\"color:#4c1d95;font-size:14px;\"\u003eサイコロを振るボタンを押してください\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"rng-dice-sum\" id=\"rng-dice-sum\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"rng-btn-row\"\u003e\n      \u003cbutton class=\"rng-btn rng-btn-primary\" onclick=\"rngRollDice()\"\u003e\u0026#9656; サイコロを振る\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- コインモード --\u003e\n  \u003cdiv class=\"rng-section\" id=\"rng-sec-coin\"\u003e\n    \u003cdiv class=\"rng-result-box\" id=\"rng-coin-result-box\" style=\"flex-direction:column;gap:12px;min-height:160px;\"\u003e\n      \u003cdiv class=\"rng-coin-wrap\"\u003e\n        \u003cdiv class=\"rng-coin\" id=\"rng-coin\"\u003e?\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"rng-coin-label\" id=\"rng-coin-label\"\u003eコインを投げるボタンを押してください\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"rng-btn-row\"\u003e\n      \u003cbutton class=\"rng-btn rng-btn-primary\" onclick=\"rngFlipCoin()\"\u003e\u0026#9656; コインを投げる\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- リストモード --\u003e\n  \u003cdiv class=\"rng-section\" id=\"rng-sec-list\"\u003e\n    \u003cdiv class=\"rng-field\" style=\"margin-bottom:12px;\"\u003e\n      \u003clabel class=\"rng-label\"\u003eリスト（1行に1項目）\u003c/label\u003e\n      \u003ctextarea class=\"rng-textarea\" id=\"rng-list-input\" placeholder=\"りんご\u0026#10;バナナ\u0026#10;さくらんぼ\u0026#10;ぶどう\u0026#10;メロン\"\u003e\u003c/textarea\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"rng-result-box\" id=\"rng-list-result-box\" style=\"min-height:80px;\"\u003e\n      \u003cdiv class=\"rng-list-result\" id=\"rng-list-output\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"rng-btn-row\"\u003e\n      \u003cbutton class=\"rng-btn rng-btn-primary\" onclick=\"rngPickFromList()\"\u003e\u0026#9656; ランダムに選ぶ\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 履歴 --\u003e\n\u003cdiv class=\"rng-card\"\u003e\n  \u003cdiv class=\"rng-history-title\"\u003e\n    \u003cspan\u003e生成履歴\u003c/span\u003e\n    \u003cbutton class=\"rng-history-clear\" onclick=\"rngClearHistory()\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"rng-history-list\" id=\"rng-history-list\"\u003e\n    \u003cspan style=\"color:#3b0f8a;font-size:13px;\"\u003eまだ履歴がありません。\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var rngMode = 'number';\n  var rngHistory = [];\n  var rngDiceCount = 2;\n  var rngLastNumbers = null;\n\n  window.rngSetMode = function(m) {\n    rngMode = m;\n    ['number','dice','coin','list'].forEach(function(x) {\n      document.getElementById('rng-tab-' + x).classList.toggle('active', x === m);\n      document.getElementById('rng-sec-' + x).classList.toggle('active', x === m);\n    });\n  };\n\n  window.rngChangeDiceCount = function(delta) {\n    rngDiceCount = Math.max(1, Math.min(6, rngDiceCount + delta));\n    document.getElementById('rng-dice-count-val').textContent = rngDiceCount + '個';\n  };\n\n  function randInt(min, max) {\n    min = Math.ceil(min);\n    max = Math.floor(max);\n    if (min \u003e max) { var t = min; min = max; max = t; }\n    var range = max - min + 1;\n    var arr = new Uint32Array(1);\n    var limit = Math.floor(4294967296 / range) * range;\n    do { crypto.getRandomValues(arr); } while (arr[0] \u003e= limit);\n    return min + (arr[0] % range);\n  }\n\n  function animateEl(el) {\n    el.classList.remove('animating');\n    void el.offsetWidth;\n    el.classList.add('animating');\n  }\n\n  function pushHistory(entry) {\n    rngHistory.unshift(entry);\n    if (rngHistory.length \u003e 30) rngHistory.pop();\n    renderHistory();\n  }\n\n  function renderHistory() {\n    var el = document.getElementById('rng-history-list');\n    if (rngHistory.length === 0) {\n      el.innerHTML = '\u003cspan style=\"color:#3b0f8a;font-size:13px;\"\u003eまだ履歴がありません。\u003c/span\u003e';\n      return;\n    }\n    el.innerHTML = '';\n    rngHistory.forEach(function(h) {\n      var chip = document.createElement('span');\n      chip.className = 'rng-history-chip';\n      chip.textContent = h;\n      el.appendChild(chip);\n    });\n  }\n\n  window.rngClearHistory = function() {\n    rngHistory = [];\n    renderHistory();\n  };\n\n  window.rngGenerateNumber = function() {\n    var min = parseInt(document.getElementById('rng-min').value);\n    var max = parseInt(document.getElementById('rng-max').value);\n    var qty = Math.max(1, Math.min(100, parseInt(document.getElementById('rng-qty').value) || 1));\n    var noDup = document.getElementById('rng-no-dup').checked;\n\n    if (isNaN(min) || isNaN(max)) return;\n    if (min \u003e max) { var t = min; min = max; max = t; }\n\n    var range = max - min + 1;\n    var outputEl = document.getElementById('rng-number-output');\n    var labelEl  = document.getElementById('rng-number-label');\n\n    if (qty === 1) {\n      var n = randInt(min, max);\n      rngLastNumbers = [n];\n      outputEl.innerHTML = '\u003cspan\u003e' + n + '\u003c/span\u003e';\n      outputEl.style.fontSize = '56px';\n      labelEl.textContent = '結果（範囲: ' + min + '〜' + max + '）';\n      animateEl(outputEl);\n      pushHistory(String(n));\n    } else {\n      var nums = [];\n      if (noDup \u0026\u0026 qty \u003e range) qty = range;\n      if (noDup) {\n        var pool = [];\n        for (var i = min; i \u003c= max; i++) pool.push(i);\n        for (var j = pool.length - 1; j \u003e 0; j--) {\n          var k = randInt(0, j);\n          var tmp = pool[j]; pool[j] = pool[k]; pool[k] = tmp;\n        }\n        nums = pool.slice(0, qty).sort(function(a,b){return a-b;});\n      } else {\n        for (var q = 0; q \u003c qty; q++) nums.push(randInt(min, max));\n        nums.sort(function(a,b){return a-b;});\n      }\n      rngLastNumbers = nums;\n      if (qty \u003c= 12) {\n        var chips = nums.map(function(n) {\n          return '\u003cspan class=\"rng-multi-chip\"\u003e' + n + '\u003c/span\u003e';\n        }).join('');\n        outputEl.innerHTML = '\u003cdiv class=\"rng-multi-results\"\u003e' + chips + '\u003c/div\u003e';\n        outputEl.style.fontSize = '16px';\n      } else {\n        outputEl.innerHTML = '\u003cspan\u003e' + nums.join(', ') + '\u003c/span\u003e';\n        outputEl.style.fontSize = '16px';\n      }\n      labelEl.textContent = qty + '個の数字（範囲: ' + min + '〜' + max + (noDup ? '・重複なし' : '') + '）';\n      pushHistory(nums.join(', '));\n    }\n  };\n\n  window.rngCopyResult = function() {\n    if (!rngLastNumbers) return;\n    navigator.clipboard.writeText(rngLastNumbers.join(', ')).then(function() {\n      var btn = document.querySelector('#rng-sec-number .rng-btn-secondary');\n      if (btn) { btn.textContent = 'コピーしました！'; setTimeout(function(){ btn.innerHTML = '\u0026#128203; コピー'; }, 1800); }\n    });\n  };\n\n  var DOT_LAYOUTS = {\n    1: [[0,0,0],[0,1,0],[0,0,0]],\n    2: [[1,0,0],[0,0,0],[0,0,1]],\n    3: [[1,0,0],[0,1,0],[0,0,1]],\n    4: [[1,0,1],[0,0,0],[1,0,1]],\n    5: [[1,0,1],[0,1,0],[1,0,1]],\n    6: [[1,0,1],[1,0,1],[1,0,1]]\n  };\n\n  function makeDie(val) {\n    var die = document.createElement('div');\n    die.className = 'rng-die';\n    var grid = document.createElement('div');\n    grid.className = 'rng-die-dots';\n    grid.style.gridTemplateColumns = 'repeat(3, 1fr)';\n    grid.style.gridTemplateRows = 'repeat(3, 1fr)';\n    var layout = DOT_LAYOUTS[val];\n    for (var r = 0; r \u003c 3; r++) {\n      for (var c = 0; c \u003c 3; c++) {\n        var dot = document.createElement('div');\n        dot.className = 'rng-dot' + (layout[r][c] ? '' : ' hidden');\n        grid.appendChild(dot);\n      }\n    }\n    die.appendChild(grid);\n    return die;\n  }\n\n  window.rngRollDice = function() {\n    var display = document.getElementById('rng-dice-display');\n    var sumEl   = document.getElementById('rng-dice-sum');\n    display.innerHTML = '';\n    var total = 0;\n    var vals = [];\n    for (var i = 0; i \u003c rngDiceCount; i++) {\n      var v = randInt(1, 6);\n      vals.push(v);\n      total += v;\n      (function(val, idx) {\n        var die = makeDie(val);\n        die.style.animationDelay = (idx * 80) + 'ms';\n        display.appendChild(die);\n      })(v, i);\n    }\n    sumEl.textContent = rngDiceCount \u003e 1 ? '合計: ' + total + '  （' + vals.join(' + ') + '）' : '出目: ' + vals[0];\n    pushHistory('サイコロ ' + vals.join('+') + (rngDiceCount \u003e 1 ? '=' + total : ''));\n  };\n\n  window.rngFlipCoin = function() {\n    var coin  = document.getElementById('rng-coin');\n    var label = document.getElementById('rng-coin-label');\n    coin.classList.remove('flipping');\n    void coin.offsetWidth;\n    coin.classList.add('flipping');\n    setTimeout(function() {\n      var result = randInt(0, 1);\n      coin.textContent = result ? '表' : '裏';\n      label.textContent = result ? '表（おもて）！' : '裏（うら）！';\n      pushHistory(result ? 'コイン: 表' : 'コイン: 裏');\n    }, 500);\n  };\n\n  window.rngPickFromList = function() {\n    var raw   = document.getElementById('rng-list-input').value;\n    var items = raw.split('\\n').map(function(s){ return s.trim(); }).filter(function(s){ return s.length \u003e 0; });\n    var outEl = document.getElementById('rng-list-output');\n    if (items.length === 0) {\n      outEl.textContent = 'リストに項目を入力してください。';\n      return;\n    }\n    var pick = items[randInt(0, items.length - 1)];\n    outEl.textContent = pick;\n    animateEl(outEl);\n    pushHistory('リスト: ' + pick);\n  };\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e数字モード：\u003c/strong\u003e 最小値・最大値・生成数を入力して「生成する」を押すだけ。重複なしトグルをオンにすると、同じ数字が出ない抽選が可能です。\u003c/p\u003e","title":"乱数生成ツール｜無料オンラインランダム数字ジェネレーター"},{"content":" CSS Flexbox プレイグラウンド すべてのFlexboxプロパティをビジュアルで実験できます。アイテムをクリックして個別プロパティを調整。生成CSSはそのままコピー可能。\nアイテム数 \u0026#8722; 3 個 \u0026#43; \u0026lt;!-- コンテナプロパティ --\u0026gt; \u0026lt;div class=\u0026quot;fb-panel\u0026quot; style=\u0026quot;margin-bottom:16px;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fb-panel-header\u0026quot;\u0026gt;コンテナのプロパティ\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fb-panel-body\u0026quot;\u0026gt; \u0026lt;p class=\u0026quot;fb-section-title\u0026quot;\u0026gt;flex-direction\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;fb-control-group\u0026quot;\u0026gt; \u0026lt;select class=\u0026quot;fb-select\u0026quot; id=\u0026quot;fb-flex-direction\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;row\u0026quot;\u0026gt;row — 横方向\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;row-reverse\u0026quot;\u0026gt;row-reverse — 横逆\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;column\u0026quot;\u0026gt;column — 縦方向\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;column-reverse\u0026quot;\u0026gt;column-reverse — 縦逆\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p class=\u0026quot;fb-section-title\u0026quot;\u0026gt;flex-wrap\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;fb-control-group\u0026quot;\u0026gt; \u0026lt;select class=\u0026quot;fb-select\u0026quot; id=\u0026quot;fb-flex-wrap\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;nowrap\u0026quot;\u0026gt;nowrap — 折り返しなし\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;wrap\u0026quot;\u0026gt;wrap — 折り返しあり\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;wrap-reverse\u0026quot;\u0026gt;wrap-reverse — 逆折り返し\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p class=\u0026quot;fb-section-title\u0026quot;\u0026gt;justify-content\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;fb-control-group\u0026quot;\u0026gt; \u0026lt;select class=\u0026quot;fb-select\u0026quot; id=\u0026quot;fb-justify-content\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;flex-start\u0026quot;\u0026gt;flex-start — 先頭寄せ\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-end\u0026quot;\u0026gt;flex-end — 末尾寄せ\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;center\u0026quot;\u0026gt;center — 中央\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;space-between\u0026quot;\u0026gt;space-between\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;space-around\u0026quot;\u0026gt;space-around\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;space-evenly\u0026quot;\u0026gt;space-evenly\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p class=\u0026quot;fb-section-title\u0026quot;\u0026gt;align-items\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;fb-control-group\u0026quot;\u0026gt; \u0026lt;select class=\u0026quot;fb-select\u0026quot; id=\u0026quot;fb-align-items\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;stretch\u0026quot;\u0026gt;stretch — 引き伸ばし\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-start\u0026quot;\u0026gt;flex-start\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-end\u0026quot;\u0026gt;flex-end\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;center\u0026quot;\u0026gt;center — 中央\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;baseline\u0026quot;\u0026gt;baseline\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p class=\u0026quot;fb-section-title\u0026quot;\u0026gt;align-content\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;fb-control-group\u0026quot;\u0026gt; \u0026lt;select class=\u0026quot;fb-select\u0026quot; id=\u0026quot;fb-align-content\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;normal\u0026quot;\u0026gt;normal\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-start\u0026quot;\u0026gt;flex-start\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-end\u0026quot;\u0026gt;flex-end\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;center\u0026quot;\u0026gt;center\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;space-between\u0026quot;\u0026gt;space-between\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;space-around\u0026quot;\u0026gt;space-around\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;space-evenly\u0026quot;\u0026gt;space-evenly\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;stretch\u0026quot;\u0026gt;stretch\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p class=\u0026quot;fb-section-title\u0026quot;\u0026gt;gap（間隔）\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;fb-control-group\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fb-range-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;fb-range\u0026quot; id=\u0026quot;fb-gap\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;40\u0026quot; value=\u0026quot;8\u0026quot; step=\u0026quot;2\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fb-range-val\u0026quot; id=\u0026quot;fb-gap-val\u0026quot;\u0026gt;8px\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- アイテムプロパティ --\u0026gt; \u0026lt;div class=\u0026quot;fb-panel\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fb-panel-header\u0026quot;\u0026gt;アイテムのプロパティ \u0026lt;span id=\u0026quot;fb-item-label\u0026quot; style=\u0026quot;opacity:0.75;font-weight:400;\u0026quot;\u0026gt;（アイテム1）\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fb-panel-body\u0026quot;\u0026gt; \u0026lt;p class=\u0026quot;fb-section-title\u0026quot;\u0026gt;order（順序）\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;fb-control-group\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fb-range-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;fb-range\u0026quot; id=\u0026quot;fb-order\u0026quot; min=\u0026quot;-5\u0026quot; max=\u0026quot;10\u0026quot; value=\u0026quot;0\u0026quot; step=\u0026quot;1\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fb-range-val\u0026quot; id=\u0026quot;fb-order-val\u0026quot;\u0026gt;0\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p class=\u0026quot;fb-section-title\u0026quot;\u0026gt;flex-grow（拡大）\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;fb-control-group\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fb-range-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;fb-range\u0026quot; id=\u0026quot;fb-flex-grow\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;10\u0026quot; value=\u0026quot;0\u0026quot; step=\u0026quot;1\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fb-range-val\u0026quot; id=\u0026quot;fb-flex-grow-val\u0026quot;\u0026gt;0\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p class=\u0026quot;fb-section-title\u0026quot;\u0026gt;flex-shrink（縮小）\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;fb-control-group\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fb-range-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;fb-range\u0026quot; id=\u0026quot;fb-flex-shrink\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;10\u0026quot; value=\u0026quot;1\u0026quot; step=\u0026quot;1\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fb-range-val\u0026quot; id=\u0026quot;fb-flex-shrink-val\u0026quot;\u0026gt;1\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p class=\u0026quot;fb-section-title\u0026quot;\u0026gt;flex-basis（基本サイズ）\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;fb-control-group\u0026quot;\u0026gt; \u0026lt;select class=\u0026quot;fb-select\u0026quot; id=\u0026quot;fb-flex-basis\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;auto\u0026quot;\u0026gt;auto\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;0\u0026quot;\u0026gt;0\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;50px\u0026quot;\u0026gt;50px\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;80px\u0026quot;\u0026gt;80px\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;100px\u0026quot;\u0026gt;100px\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;120px\u0026quot;\u0026gt;120px\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;150px\u0026quot;\u0026gt;150px\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;200px\u0026quot;\u0026gt;200px\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;25%\u0026quot;\u0026gt;25%\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;33%\u0026quot;\u0026gt;33%\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;50%\u0026quot;\u0026gt;50%\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p class=\u0026quot;fb-section-title\u0026quot;\u0026gt;align-self（個別揃え）\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;fb-control-group\u0026quot;\u0026gt; \u0026lt;select class=\u0026quot;fb-select\u0026quot; id=\u0026quot;fb-align-self\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;auto\u0026quot;\u0026gt;auto\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-start\u0026quot;\u0026gt;flex-start\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;flex-end\u0026quot;\u0026gt;flex-end\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;center\u0026quot;\u0026gt;center\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;baseline\u0026quot;\u0026gt;baseline\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;stretch\u0026quot;\u0026gt;stretch\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; ライブプレビュー \u0026lt;div class=\u0026quot;fb-code-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fb-code-header\u0026quot;\u0026gt; \u0026lt;span\u0026gt;生成CSS\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;fb-copy-btn\u0026quot; id=\u0026quot;fb-copy-btn\u0026quot;\u0026gt;CSSをコピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;pre class=\u0026quot;fb-code\u0026quot; id=\u0026quot;fb-code-output\u0026quot;\u0026gt;\u0026lt;/pre\u0026gt; \u0026lt;/div\u0026gt; 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\nclip-path作成 → CSS clip-pathメーカー CSS詳細度 → CSS詳細度計算 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; ","permalink":"https://productivity-works.com/ja/tools/flexbox-playground/","summary":"\u003cdiv id=\"fb-app\"\u003e\n\u003cstyle\u003e\n  #fb-app *, #fb-app *::before, #fb-app *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n  #fb-app {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", Roboto, sans-serif;\n    font-size: 14px;\n    color: #1a1a2e;\n    background: #f8f9ff;\n    border-radius: 12px;\n    padding: 24px;\n    max-width: 100%;\n    overflow: hidden;\n  }\n  #fb-app h2.fb-title {\n    font-size: 1.4rem;\n    font-weight: 700;\n    margin-bottom: 4px;\n    color: #1a1a2e;\n  }\n  #fb-app p.fb-subtitle {\n    color: #666;\n    margin-bottom: 20px;\n    font-size: 0.9rem;\n  }\n  #fb-app .fb-layout {\n    display: grid;\n    grid-template-columns: 300px 1fr;\n    gap: 20px;\n    align-items: start;\n  }\n  @media (max-width: 768px) {\n    #fb-app .fb-layout {\n      grid-template-columns: 1fr;\n    }\n  }\n  #fb-app .fb-panel {\n    background: #fff;\n    border: 1.5px solid #dde1ff;\n    border-radius: 10px;\n    overflow: hidden;\n  }\n  #fb-app .fb-panel-header {\n    background: linear-gradient(90deg, #4f46e5 0%, #7c3aed 100%);\n    color: #fff;\n    font-weight: 700;\n    font-size: 0.85rem;\n    padding: 9px 14px;\n    letter-spacing: 0.03em;\n  }\n  #fb-app .fb-panel-body {\n    padding: 14px;\n  }\n  #fb-app .fb-control-group {\n    margin-bottom: 12px;\n  }\n  #fb-app .fb-control-group:last-child {\n    margin-bottom: 0;\n  }\n  #fb-app .fb-label {\n    display: block;\n    font-size: 0.78rem;\n    font-weight: 600;\n    color: #4f46e5;\n    margin-bottom: 4px;\n    font-family: \"Courier New\", monospace;\n  }\n  #fb-app select.fb-select,\n  #fb-app input.fb-input {\n    width: 100%;\n    padding: 6px 10px;\n    border: 1.5px solid #c7d2fe;\n    border-radius: 7px;\n    font-size: 0.85rem;\n    color: #1a1a2e;\n    background: #f5f7ff;\n    appearance: none;\n    -webkit-appearance: none;\n    cursor: pointer;\n    outline: none;\n    transition: border-color 0.15s;\n  }\n  #fb-app select.fb-select:focus,\n  #fb-app input.fb-input:focus {\n    border-color: #4f46e5;\n    background: #fff;\n  }\n  #fb-app input[type=\"range\"].fb-range {\n    width: 100%;\n    accent-color: #4f46e5;\n    cursor: pointer;\n  }\n  #fb-app .fb-range-row {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n  }\n  #fb-app .fb-range-val {\n    min-width: 38px;\n    font-size: 0.82rem;\n    font-weight: 700;\n    color: #4f46e5;\n    text-align: right;\n  }\n  #fb-app .fb-section-title {\n    font-size: 0.72rem;\n    font-weight: 800;\n    text-transform: uppercase;\n    letter-spacing: 0.06em;\n    color: #7c3aed;\n    border-bottom: 1.5px solid #ede9fe;\n    padding-bottom: 4px;\n    margin-bottom: 10px;\n    margin-top: 14px;\n  }\n  #fb-app .fb-section-title:first-child {\n    margin-top: 0;\n  }\n  #fb-app .fb-item-count-row {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 14px;\n  }\n  #fb-app .fb-count-btn {\n    width: 28px;\n    height: 28px;\n    border-radius: 50%;\n    border: 2px solid #4f46e5;\n    background: #fff;\n    color: #4f46e5;\n    font-size: 1.1rem;\n    font-weight: 700;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    line-height: 1;\n    transition: all 0.15s;\n  }\n  #fb-app .fb-count-btn:hover {\n    background: #4f46e5;\n    color: #fff;\n  }\n  #fb-app .fb-count-display {\n    font-size: 0.9rem;\n    font-weight: 700;\n    min-width: 70px;\n    color: #1a1a2e;\n  }\n  #fb-app .fb-item-tabs {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 5px;\n    margin-bottom: 12px;\n  }\n  #fb-app .fb-item-tab {\n    padding: 4px 10px;\n    border-radius: 5px;\n    border: 1.5px solid #c7d2fe;\n    background: #f5f7ff;\n    font-size: 0.78rem;\n    font-weight: 600;\n    cursor: pointer;\n    color: #4f46e5;\n    transition: all 0.15s;\n  }\n  #fb-app .fb-item-tab.active {\n    background: #4f46e5;\n    color: #fff;\n    border-color: #4f46e5;\n  }\n  #fb-app .fb-item-tab:hover:not(.active) {\n    background: #ede9fe;\n  }\n  #fb-app .fb-right {\n    display: flex;\n    flex-direction: column;\n    gap: 20px;\n  }\n  #fb-app .fb-preview-wrap {\n    background: #fff;\n    border: 1.5px solid #dde1ff;\n    border-radius: 10px;\n    overflow: hidden;\n  }\n  #fb-app .fb-preview-header {\n    background: linear-gradient(90deg, #4f46e5 0%, #7c3aed 100%);\n    color: #fff;\n    font-weight: 700;\n    font-size: 0.85rem;\n    padding: 9px 14px;\n  }\n  #fb-app .fb-preview-container {\n    padding: 20px;\n    background: #f0f4ff;\n    min-height: 220px;\n    position: relative;\n  }\n  #fb-app .fb-preview-inner {\n    background: #e8eeff;\n    border: 2px dashed #a5b4fc;\n    border-radius: 8px;\n    min-height: 180px;\n    padding: 8px;\n    width: 100%;\n    overflow: auto;\n  }\n  #fb-app .fb-flex-container {\n    width: 100%;\n    min-height: 160px;\n  }\n  #fb-app .fb-flex-item {\n    min-width: 40px;\n    min-height: 50px;\n    border-radius: 7px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-weight: 800;\n    font-size: 1rem;\n    color: #fff;\n    text-shadow: 0 1px 3px rgba(0,0,0,0.25);\n    cursor: pointer;\n    transition: box-shadow 0.15s, outline 0.15s;\n  }\n  #fb-app .fb-flex-item.selected-item {\n    outline: 3px solid #1a1a2e;\n    outline-offset: 2px;\n  }\n  #fb-app .fb-code-wrap {\n    background: #fff;\n    border: 1.5px solid #dde1ff;\n    border-radius: 10px;\n    overflow: hidden;\n  }\n  #fb-app .fb-code-header {\n    background: linear-gradient(90deg, #4f46e5 0%, #7c3aed 100%);\n    color: #fff;\n    font-weight: 700;\n    font-size: 0.85rem;\n    padding: 9px 14px;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n  }\n  #fb-app .fb-copy-btn {\n    background: rgba(255,255,255,0.2);\n    border: 1.5px solid rgba(255,255,255,0.5);\n    color: #fff;\n    border-radius: 6px;\n    padding: 3px 12px;\n    font-size: 0.78rem;\n    font-weight: 700;\n    cursor: pointer;\n    transition: background 0.15s;\n  }\n  #fb-app .fb-copy-btn:hover {\n    background: rgba(255,255,255,0.35);\n  }\n  #fb-app .fb-copy-btn.copied {\n    background: #10b981;\n    border-color: #10b981;\n  }\n  #fb-app pre.fb-code {\n    margin: 0;\n    padding: 14px 16px;\n    background: #1e1b4b;\n    color: #c4b5fd;\n    font-family: \"Courier New\", Courier, monospace;\n    font-size: 0.82rem;\n    line-height: 1.6;\n    overflow-x: auto;\n    white-space: pre;\n  }\n  #fb-app pre.fb-code .fb-prop { color: #a5f3fc; }\n  #fb-app pre.fb-code .fb-val  { color: #fde68a; }\n  #fb-app pre.fb-code .fb-sel  { color: #86efac; }\n  #fb-app pre.fb-code .fb-brace{ color: #f0abfc; }\n\u003c/style\u003e\n\u003ch2 class=\"fb-title\"\u003eCSS Flexbox プレイグラウンド\u003c/h2\u003e\n\u003cp class=\"fb-subtitle\"\u003eすべてのFlexboxプロパティをビジュアルで実験できます。アイテムをクリックして個別プロパティを調整。生成CSSはそのままコピー可能。\u003c/p\u003e","title":"CSS Flexboxプレイグラウンド"},{"content":" すべて 1xx 情報 2xx 成功 3xx リダイレクト 4xx クライアントエラー 5xx サーバーエラー 条件に一致するステータスコードが見つかりません。 freee で業務を自動化しませんか？ API 開発をしながら経理・請求書・給与計算もまとめて効率化。\nfreee は中小企業・フリーランス向けのオールインワン業務管理クラウドです。 freee を無料で試す → 関連ツール 正規表現をテスト → Regex テスター JWT トークンをデコード → JWT デコーダー IP アドレス情報を確認 → IP アドレス情報 ","permalink":"https://productivity-works.com/ja/tools/http-status-codes/","summary":"\u003cdiv id=\"http-app\"\u003e\n\u003cstyle\u003e\n#http-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Noto Sans JP\", \"Segoe UI\", sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 16px 48px;\n  color: #1a1a2e;\n}\n\n/* ── コントロール ── */\n#http-app .hsc-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-bottom: 24px;\n}\n\n#http-app .hsc-search {\n  flex: 1 1 220px;\n  padding: 10px 14px;\n  border: 2px solid #d1d5db;\n  border-radius: 8px;\n  font-size: 15px;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#http-app .hsc-search:focus {\n  border-color: #4f46e5;\n}\n\n#http-app .hsc-filter-group {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n}\n\n#http-app .hsc-filter-btn {\n  padding: 8px 14px;\n  border: 2px solid transparent;\n  border-radius: 20px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: all 0.18s;\n  background: #f3f4f6;\n  color: #374151;\n}\n#http-app .hsc-filter-btn:hover,\n#http-app .hsc-filter-btn.active {\n  color: #fff;\n}\n#http-app .hsc-filter-btn[data-cat=\"all\"].active  { background: #4f46e5; }\n#http-app .hsc-filter-btn[data-cat=\"1xx\"].active  { background: #6366f1; }\n#http-app .hsc-filter-btn[data-cat=\"2xx\"].active  { background: #16a34a; }\n#http-app .hsc-filter-btn[data-cat=\"3xx\"].active  { background: #d97706; }\n#http-app .hsc-filter-btn[data-cat=\"4xx\"].active  { background: #dc2626; }\n#http-app .hsc-filter-btn[data-cat=\"5xx\"].active  { background: #7c3aed; }\n\n/* ── 件数 ── */\n#http-app .hsc-count {\n  font-size: 13px;\n  color: #6b7280;\n  margin-bottom: 16px;\n}\n\n/* ── カテゴリ見出し ── */\n#http-app .hsc-cat-heading {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin: 28px 0 10px;\n  font-size: 18px;\n  font-weight: 700;\n}\n#http-app .hsc-cat-badge {\n  display: inline-block;\n  padding: 3px 12px;\n  border-radius: 12px;\n  font-size: 13px;\n  font-weight: 700;\n  color: #fff;\n}\n#http-app .hsc-cat-badge.c1xx { background: #6366f1; }\n#http-app .hsc-cat-badge.c2xx { background: #16a34a; }\n#http-app .hsc-cat-badge.c3xx { background: #d97706; }\n#http-app .hsc-cat-badge.c4xx { background: #dc2626; }\n#http-app .hsc-cat-badge.c5xx { background: #7c3aed; }\n\n/* ── カード ── */\n#http-app .hsc-card {\n  border-radius: 10px;\n  border: 1.5px solid #e5e7eb;\n  margin-bottom: 8px;\n  overflow: hidden;\n  transition: box-shadow 0.18s;\n}\n#http-app .hsc-card:hover {\n  box-shadow: 0 2px 10px rgba(0,0,0,0.09);\n}\n#http-app .hsc-card.common {\n  border-width: 2px;\n}\n#http-app .hsc-card.c1xx.common { border-color: #6366f1; }\n#http-app .hsc-card.c2xx.common { border-color: #16a34a; }\n#http-app .hsc-card.c3xx.common { border-color: #d97706; }\n#http-app .hsc-card.c4xx.common { border-color: #dc2626; }\n#http-app .hsc-card.c5xx.common { border-color: #7c3aed; }\n\n#http-app .hsc-card-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 12px 16px;\n  cursor: pointer;\n  user-select: none;\n  background: #fff;\n}\n#http-app .hsc-card-header:hover {\n  background: #f9fafb;\n}\n\n#http-app .hsc-code-num {\n  font-size: 20px;\n  font-weight: 800;\n  min-width: 56px;\n  text-align: center;\n  padding: 4px 8px;\n  border-radius: 6px;\n  color: #fff;\n  letter-spacing: -0.5px;\n  flex-shrink: 0;\n}\n#http-app .hsc-code-num.c1xx { background: #6366f1; }\n#http-app .hsc-code-num.c2xx { background: #16a34a; }\n#http-app .hsc-code-num.c3xx { background: #d97706; }\n#http-app .hsc-code-num.c4xx { background: #dc2626; }\n#http-app .hsc-code-num.c5xx { background: #7c3aed; }\n\n#http-app .hsc-card-meta {\n  flex: 1;\n  min-width: 0;\n}\n#http-app .hsc-code-name {\n  font-size: 15px;\n  font-weight: 700;\n  color: #111827;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n#http-app .hsc-code-desc {\n  font-size: 13px;\n  color: #6b7280;\n  margin-top: 2px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n#http-app .hsc-common-star {\n  font-size: 11px;\n  font-weight: 700;\n  color: #fff;\n  background: #f59e0b;\n  padding: 2px 7px;\n  border-radius: 10px;\n  white-space: nowrap;\n  flex-shrink: 0;\n}\n\n#http-app .hsc-copy-btn {\n  flex-shrink: 0;\n  padding: 6px 12px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 6px;\n  font-size: 12px;\n  font-weight: 700;\n  background: #fff;\n  color: #374151;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#http-app .hsc-copy-btn:hover {\n  background: #4f46e5;\n  color: #fff;\n  border-color: #4f46e5;\n}\n#http-app .hsc-copy-btn.copied {\n  background: #16a34a;\n  color: #fff;\n  border-color: #16a34a;\n}\n\n#http-app .hsc-chevron {\n  flex-shrink: 0;\n  width: 20px;\n  height: 20px;\n  color: #9ca3af;\n  transition: transform 0.2s;\n}\n#http-app .hsc-card.open .hsc-chevron {\n  transform: rotate(180deg);\n}\n\n/* ── 詳細パネル ── */\n#http-app .hsc-detail {\n  display: none;\n  padding: 14px 20px 18px;\n  border-top: 1px solid #e5e7eb;\n  background: #f9fafb;\n  font-size: 14px;\n  line-height: 1.8;\n  color: #374151;\n}\n#http-app .hsc-card.open .hsc-detail {\n  display: block;\n}\n\n#http-app .hsc-detail h4 {\n  margin: 0 0 6px;\n  font-size: 12px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  color: #6b7280;\n}\n#http-app .hsc-detail p {\n  margin: 0 0 12px;\n}\n#http-app .hsc-detail .hsc-usecase {\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 6px;\n  padding: 10px 14px;\n  font-size: 13px;\n  color: #374151;\n}\n\n/* ── 検索結果なし ── */\n#http-app .hsc-no-results {\n  text-align: center;\n  padding: 48px 0;\n  color: #9ca3af;\n  font-size: 16px;\n  display: none;\n}\n\n/* ── freee CTA ── */\n#http-app .hsc-freee-cta {\n  margin-top: 48px;\n  padding: 24px 28px;\n  background: linear-gradient(135deg, #e0f2fe 0%, #ede9fe 100%);\n  border: 1.5px solid #bfdbfe;\n  border-radius: 14px;\n  text-align: center;\n}\n#http-app .hsc-freee-cta h3 {\n  font-size: 18px;\n  font-weight: 800;\n  margin: 0 0 8px;\n  color: #1e3a5f;\n}\n#http-app .hsc-freee-cta p {\n  font-size: 14px;\n  color: #374151;\n  margin: 0 0 16px;\n  line-height: 1.7;\n}\n#http-app .hsc-freee-cta a {\n  display: inline-block;\n  padding: 11px 28px;\n  background: #4f46e5;\n  color: #fff;\n  font-weight: 700;\n  font-size: 15px;\n  border-radius: 8px;\n  text-decoration: none;\n  transition: background 0.18s;\n}\n#http-app .hsc-freee-cta a:hover {\n  background: #3730a3;\n}\n\n/* ── モバイル ── */\n@media (max-width: 600px) {\n  #http-app .hsc-code-desc { display: none; }\n  #http-app .hsc-copy-btn { display: none; }\n  #http-app .hsc-freee-cta { padding: 18px 16px; }\n}\n\u003c/style\u003e\n\u003c!-- コントロール --\u003e\n\u003cdiv class=\"hsc-controls\"\u003e\n  \u003cinput\n    id=\"hscSearch\"\n    class=\"hsc-search\"\n    type=\"search\"\n    placeholder=\"コード番号またはキーワードで検索… 例: 404 または not found\"\n    aria-label=\"HTTPステータスコードを検索\"\n  /\u003e\n  \u003cdiv class=\"hsc-filter-group\" role=\"group\" aria-label=\"カテゴリで絞り込み\"\u003e\n    \u003cbutton class=\"hsc-filter-btn active\" data-cat=\"all\"\u003eすべて\u003c/button\u003e\n    \u003cbutton class=\"hsc-filter-btn\" data-cat=\"1xx\"\u003e1xx 情報\u003c/button\u003e\n    \u003cbutton class=\"hsc-filter-btn\" data-cat=\"2xx\"\u003e2xx 成功\u003c/button\u003e\n    \u003cbutton class=\"hsc-filter-btn\" data-cat=\"3xx\"\u003e3xx リダイレクト\u003c/button\u003e\n    \u003cbutton class=\"hsc-filter-btn\" data-cat=\"4xx\"\u003e4xx クライアントエラー\u003c/button\u003e\n    \u003cbutton class=\"hsc-filter-btn\" data-cat=\"5xx\"\u003e5xx サーバーエラー\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"hscCount\" class=\"hsc-count\"\u003e\u003c/div\u003e\n\u003c!-- JSによってレンダリングされるコードリスト --\u003e\n\u003cdiv id=\"hscList\"\u003e\u003c/div\u003e\n\u003cdiv id=\"hscNoResults\" class=\"hsc-no-results\"\u003e条件に一致するステータスコードが見つかりません。\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  var COMMON = [200,201,301,302,400,401,403,404,500,502,503];\n\n  var CODES = [\n    /* ── 1xx ── */\n    {\n      code: 100, name: \"Continue（継続）\",\n      desc: \"リクエストヘッダーを受信。クライアントは続行できます。\",\n      detail: \"サーバーがリクエストの最初の部分を受信し、クライアントが処理を続行してよいことを示す暫定レスポンスです。クライアントがすでにリクエストを完了している場合は無視してください。\",\n      usecase: \"クライアントが大きなリクエストボディを送信する前に Expect: 100-continue ヘッダーを送信するケース。サーバーが 100 を返すことでボディ受信準備完了を通知します。\"\n    },\n    {\n      code: 101, name: \"Switching Protocols（プロトコル切り替え）\",\n      desc: \"サーバーがプロトコルの切り替えに同意しました。\",\n      detail: \"クライアントからの Upgrade リクエストヘッダーに応答して送信され、サーバーが切り替えるプロトコルを示します。このレスポンスの空白行の直後にプロトコルが切り替わります。\",\n      usecase: \"HTTP 接続を WebSocket へアップグレードする場合（Upgrade: websocket ヘッダー）。サーバーは 101 を返してプロトコル切り替えを確認します。\"\n    },\n    {\n      code: 102, name: \"Processing（処理中）\",\n      desc: \"サーバーはリクエストを受信し処理中ですが、まだレスポンスはありません。\",\n      detail: \"WebDAV のレスポンスコードで、サーバーがリクエストを受信して処理中であるが、まだ使用可能なレスポンスがないことを示します。長時間処理中にクライアントがタイムアウトするのを防ぎます。\",\n      usecase: \"完了まで数秒以上かかる WebDAV 操作で、クライアントのタイムアウトを防ぐために使用します。\"\n    },\n    {\n      code: 103, name: \"Early Hints（早期ヒント）\",\n      desc: \"最終レスポンスの前に一部のレスポンスヘッダーを返します。\",\n      detail: \"サーバーが最終 HTTP メッセージの前に予備 HTTP ヘッダーを送信できるようにします。主に Link ヘッダーと組み合わせて、サーバーがレスポンスを準備している間にブラウザーがリソースをプリロードできるようにします。\",\n      usecase: \"メイン HTML レスポンスを生成しながら CSS/JS ファイルの Link ヘッダーを送信し、ブラウザーがアセットの先読みを早めに開始できるようにします。\"\n    },\n    /* ── 2xx ── */\n    {\n      code: 200, name: \"OK（成功）\",\n      desc: \"リクエストが成功しました。\",\n      detail: \"HTTP リクエスト成功に対する標準レスポンスです。実際のレスポンスはリクエストメソッドによって異なります。GET はリソースを返し、POST はアクションの結果を返し、HEAD はヘッダーのみを返します。Web 上で最も一般的なレスポンスコードです。\",\n      usecase: \"GET・POST・PUT・PATCH リクエストの標準成功レスポンス。ユーザーデータを返す API やページが正常に読み込まれる場合。\"\n    },\n    {\n      code: 201, name: \"Created（作成済み）\",\n      desc: \"リクエストが成功し、新しいリソースが作成されました。\",\n      detail: \"リクエストが成功し、その結果として新しいリソースが作成されたことを示します。レスポンスには通常、新規作成されたリソースを指す Location ヘッダーが含まれ、レスポンスボディには新リソースの表現が含まれることがあります。\",\n      usecase: \"POST /users で新しいユーザーを作成した後の REST API レスポンス。Location ヘッダーは /users/123 を指します。\"\n    },\n    {\n      code: 202, name: \"Accepted（受付済み）\",\n      desc: \"リクエストは受信されましたが、まだ処理されていません。\",\n      detail: \"リクエストは処理のために受け付けられましたが、処理はまだ完了していないことを示します。リクエストが最終的に処理されるかどうかは保証されません。通常、非同期操作に使用されます。\",\n      usecase: \"動画エンコードジョブの送信: サーバーはすぐにリクエストを受け付けますが、エンコードはバックグラウンドで行われます。\"\n    },\n    {\n      code: 203, name: \"Non-Authoritative Information（信頼できない情報）\",\n      desc: \"返されたメタデータはオリジンサーバーからのものではありません。\",\n      detail: \"返されたメタデータは、オリジンサーバーから利用可能なものと完全に同じではなく、ローカルまたはサードパーティのコピーから収集されたものです。主にミラーやバックアップで使用されます。\",\n      usecase: \"プロキシサーバーがオリジンと若干異なるキャッシュコピーから変更されたヘッダーまたはコンテンツを返す場合。\"\n    },\n    {\n      code: 204, name: \"No Content（コンテンツなし）\",\n      desc: \"レスポンスボディに送信するコンテンツはありません。\",\n      detail: \"リクエストは成功しましたが、クライアントは現在のページから離れる必要がないことを示します。DELETE リクエストの後や、レスポンスにボディが必要ない PUT/PATCH での更新時によく使用されます。\",\n      usecase: \"DELETE /items/42 が成功 — サーバーはボディなしで 204 を返します。UI を更新する必要がない自動保存操作にも使用されます。\"\n    },\n    {\n      code: 205, name: \"Reset Content（コンテンツリセット）\",\n      desc: \"このリクエストを送信したドキュメントビューをリセットしてください。\",\n      detail: \"リクエストを送信したドキュメントをリセットするようクライアントに指示します。204 No Content に似ていますが、フォーム送信後にフォームフィールドをクリアするなど、ドキュメントビューのリセットが必要です。\",\n      usecase: \"フォーム送信後、ユーザーが新しいデータを入力できるようにブラウザーにフォームフィールドをクリアするよう指示します。\"\n    },\n    {\n      code: 206, name: \"Partial Content（部分的コンテンツ）\",\n      desc: \"範囲リクエストにより部分的なコンテンツが配信されました。\",\n      detail: \"クライアントがリソースの一部のみを要求する Range ヘッダーを送信した場合に使用されます。レスポンスには配信された範囲を示す Content-Range ヘッダーが含まれている必要があります。再開可能なダウンロードや動画ストリーミングを可能にします。\",\n      usecase: \"動画ストリーミング: プレーヤーが Range: bytes=0-1048575 で先頭チャンクを要求。サーバーはそのチャンクで 206 を返します。\"\n    },\n    {\n      code: 207, name: \"Multi-Status（マルチステータス）\",\n      desc: \"複数リソースに関する情報を伝達します（WebDAV）。\",\n      detail: \"複数のステータスコードが適切な状況で、複数のリソースに関する情報を伝達する WebDAV レスポンスです。レスポンスボディは各リソースの個別ステータスコードを含む XML ドキュメントです。\",\n      usecase: \"WebDAV PROPFIND または COPY 操作で複数のリソースに影響し、それぞれ独自の成功/失敗ステータスを持つ場合。\"\n    },\n    {\n      code: 208, name: \"Already Reported（既に報告済み）\",\n      desc: \"DAV バインディングのメンバーはすでに列挙されています（WebDAV）。\",\n      detail: \"同じコレクションへの複数バインディングの内部メンバーを繰り返し列挙することを避けるため、DAV: propstat レスポンス要素内で使用されます。\",\n      usecase: \"WebDAV: コレクションに循環参照が含まれる場合の無限ループ防止。\"\n    },\n    {\n      code: 226, name: \"IM Used（IM 使用済み）\",\n      desc: \"サーバーはデルタエンコーディングを使用して GET リクエストを処理しました。\",\n      detail: \"サーバーはリソースへの GET リクエストを処理し、レスポンスは現在のインスタンスに適用された 1 つ以上のインスタンス操作の結果を表します。HTTP デルタエンコーディングで使用されます。\",\n      usecase: \"デルタエンコーディング: サーバーは以前キャッシュされたリソースバージョンからの変更（差分）のみを送信します。\"\n    },\n    /* ── 3xx ── */\n    {\n      code: 300, name: \"Multiple Choices（複数の選択肢）\",\n      desc: \"リクエストには複数の可能なレスポンスがあります。\",\n      detail: \"リクエストに対して複数の可能なレスポンスがあることを示します。ユーザーエージェントまたはユーザーはそのいずれかを選択する必要があります。自動的に選択する標準化された方法はありませんが、サーバーは優先される選択肢を示すことができます。\",\n      usecase: \"複数のフォーマット（HTML、JSON、XML）で利用可能なリソース — サーバーが選択肢を提示し、クライアントが 1 つを選びます。\"\n    },\n    {\n      code: 301, name: \"Moved Permanently（恒久移動）\",\n      desc: \"リクエストされたリソースの URL は永久に変更されました。\",\n      detail: \"リソースが新しい URL に恒久的に移動したことを示します。検索エンジンはリンクを新しい URL に更新します。ブラウザーはこのリダイレクトをキャッシュします。新しい URL は Location ヘッダーで提供されます。GET メソッドはリダイレクト後も GET に変更される場合があります。\",\n      usecase: \"HTTP から HTTPS へのリダイレクト、またはウェブサイトのドメイン変更。古い URL の SEO 価値が新しい URL に引き継がれます。\"\n    },\n    {\n      code: 302, name: \"Found（一時移動）\",\n      desc: \"URL は一時的に変更されています。\",\n      detail: \"リソースが一時的に別の URI で見つかることを示します。クライアントは元の URI を引き続き使用する必要があります。ブラウザーはリダイレクトを追いますが、恒久的にキャッシュしません。メソッドを変更してはならない場合は 307 が推奨されます。\",\n      usecase: \"Post/Redirect/Get パターン: フォーム POST が成功した後、ブラウザーを結果ページにリダイレクトして、更新時にフォームが再送信されないようにします。\"\n    },\n    {\n      code: 303, name: \"See Other（別のページを参照）\",\n      desc: \"常に GET を使用して別のページにリダイレクトします。\",\n      detail: \"リダイレクトが要求されたリソース自体ではなく、別のページ（確認ページなど）にリンクしていることを示します。302 とは異なり、元のメソッドに関係なく新しい URL への GET を常にトリガーします。\",\n      usecase: \"POST フォーム送信でリソースが作成された後、新しいリソースを表示する GET ページにブラウザーをリダイレクトします。\"\n    },\n    {\n      code: 304, name: \"Not Modified（未更新）\",\n      desc: \"レスポンスが変更されていないことをクライアントに伝えます。\",\n      detail: \"キャッシュに使用されます。レスポンスが変更されていないため、クライアントはすでに持っているキャッシュ版を使用できることを示します。レスポンスにボディを含めてはいけません。If-None-Match または If-Modified-Since を使用した条件付きリクエストによってトリガーされます。\",\n      usecase: \"ブラウザーが ETag 付きで If-None-Match: \\\"abc123\\\" を送信。サーバーはリソースが変更されていないことを確認 — クライアントはキャッシュを使用します。\"\n    },\n    {\n      code: 307, name: \"Temporary Redirect（一時リダイレクト）\",\n      desc: \"一時的なリダイレクト。メソッドは変更してはなりません。\",\n      detail: \"302 Found に似ていますが、リダイレクトされたリクエストが行われる際にメソッドとボディが変更されないことを保証します。POST がリダイレクトされた場合、新しいリクエストも POST になります。HTTP メソッドを保持する必要がある場合に使用します。\",\n      usecase: \"メンテナンス中に POST メソッドを保持しながら API POST エンドポイントを別のサーバーに一時的にルーティングします。\"\n    },\n    {\n      code: 308, name: \"Permanent Redirect（恒久リダイレクト）\",\n      desc: \"恒久的なリダイレクト。メソッドは変更してはなりません。\",\n      detail: \"301 Moved Permanently に似ていますが、メソッドとボディが変更されないことを保証します。検索エンジンはリンクを更新し、ブラウザーは恒久的にキャッシュし、HTTP メソッドは保持されます。307 の恒久版です。\",\n      usecase: \"クライアントが依然として POST（GET ではなく）を送信することを保証しながら、API エンドポイントを /v1/users から /v2/users に恒久移動します。\"\n    },\n    /* ── 4xx ── */\n    {\n      code: 400, name: \"Bad Request（不正なリクエスト）\",\n      desc: \"クライアントエラーのためサーバーはリクエストを処理できません。\",\n      detail: \"クライアント側のエラー（不正なリクエスト構文、無効なリクエストメッセージのフレーミング、または欺くようなリクエストルーティング）と思われるため、サーバーはリクエストを処理できないか処理しません。クライアントは変更なしにリクエストを繰り返すべきではありません。\",\n      usecase: \"API リクエストボディの必須フィールド欠落、不正な JSON、無効なクエリパラメーターの型。\"\n    },\n    {\n      code: 401, name: \"Unauthorized（認証が必要）\",\n      desc: \"認証が必要ですが、提供されていません。\",\n      detail: \"'Unauthorized（未認可）'という名前ですが、実際には「未認証」を意味します。クライアントはリクエストされたレスポンスを得るために自身を認証する必要があります。レスポンスにはリクエストされたリソースに適用可能なチャレンジを含む WWW-Authenticate ヘッダーを含める必要があります。\",\n      usecase: \"Authorization ヘッダーなしや無効/期限切れのトークンで保護された API エンドポイントにアクセスする場合。\"\n    },\n    {\n      code: 402, name: \"Payment Required（支払いが必要）\",\n      desc: \"将来の使用のために予約済み。レート制限に使用されることもあります。\",\n      detail: \"もともとデジタル決済システム向けに意図されていました。仕様が曖昧で、ほとんど使用されません。一部の API では、無料ティアのクォータを超えてサブスクリプションが必要な場合に使用します。\",\n      usecase: \"一部の SaaS API は無料ティアのクォータを超えた際に 402 を返し、有料プランが必要であることを示します。\"\n    },\n    {\n      code: 403, name: \"Forbidden（アクセス禁止）\",\n      desc: \"サーバーはリクエストを承認することを拒否します。\",\n      detail: \"クライアントの身元は判明していますが、コンテンツへのアクセス権がありません。401 とは異なり、再認証しても違いはありません。サーバーはリクエストを理解しましたが、認可を拒否します。\",\n      usecase: \"ログインしているユーザーが管理者専用ページにアクセスしようとする場合。または別のユーザーのプライベートデータにアクセスする場合。\"\n    },\n    {\n      code: 404, name: \"Not Found（見つかりません）\",\n      desc: \"サーバーはリクエストされたリソースを見つけられません。\",\n      detail: \"サーバーはリクエストされたリソースを見つけられません。これは URL が間違っている、リソースが存在したことがない、またはリソースが削除されたことを意味する場合があります。存在しないリソースのキャッチオールとしてよく使用されます。未認可クライアントからリソースの存在を隠すために 403 の代わりに 404 が返されることもあります。\",\n      usecase: \"削除されたブログ投稿、存在しないユーザー ID、または URL のタイプミスのリクエスト。\"\n    },\n    {\n      code: 405, name: \"Method Not Allowed（メソッドが許可されていません）\",\n      desc: \"リクエストメソッドはサポートされていません。\",\n      detail: \"リクエストメソッドはサーバーに認識されていますが、対象リソースではサポートされていません。サーバーはサポートされているメソッドを一覧表示する Allow ヘッダーを含める必要があります。\",\n      usecase: \"GET と POST のみをサポートするエンドポイントに DELETE リクエストを送信する場合。\"\n    },\n    {\n      code: 406, name: \"Not Acceptable（受け入れ不可）\",\n      desc: \"Accept ヘッダーに一致するコンテンツが見つかりませんでした。\",\n      detail: \"サーバーがリクエストで送信された Accept ヘッダーに一致するレスポンスを生成できないことを示します。例えば、クライアントが application/json のみを受け入れるが、サーバーが text/xml のみをサポートしている場合。\",\n      usecase: \"クライアントが Accept: application/json を送信するが、サーバーはそのリソースに対して XML のみを提供する場合。\"\n    },\n    {\n      code: 407, name: \"Proxy Authentication Required（プロキシ認証が必要）\",\n      desc: \"プロキシとの認証が必要です。\",\n      detail: \"401 と同様ですが、プロキシによる認証が必要です。プロキシはクライアントが認証するための Proxy-Authenticate ヘッダーを返す必要があります。\",\n      usecase: \"HTTP トラフィックが中間プロキシサーバーを通じて認証する必要がある企業環境。\"\n    },\n    {\n      code: 408, name: \"Request Timeout（リクエストタイムアウト）\",\n      desc: \"サーバーはリクエストの受信を待機中にタイムアウトしました。\",\n      detail: \"アイドル接続がシャットダウンされる際に一部のサーバーから送信されます。これはサーバーがこの未使用接続を閉じたいことを示します。Apache などの一部のサーバーで多く使用されます。\",\n      usecase: \"低速なクライアントがリクエストボディを送信するのに時間がかかりすぎた場合。サーバーはアイドルタイムアウト後に接続を閉じます。\"\n    },\n    {\n      code: 409, name: \"Conflict（競合）\",\n      desc: \"リクエストはリソースの現在の状態と競合しています。\",\n      detail: \"リクエストがサーバーの現在の状態と競合していることを示します。複数のリクエストがリソースを同時に編集している PUT リクエストで最も起こりやすいです。レスポンスボディは競合を説明する必要があります。\",\n      usecase: \"すでに存在するメールアドレスでユーザーを作成しようとする場合。または楽観的ロックシステムでのバージョン競合。\"\n    },\n    {\n      code: 410, name: \"Gone（削除済み）\",\n      desc: \"リソースは恒久的に削除され、戻ってきません。\",\n      detail: \"対象リソースへのアクセスが利用できなくなり、この状態が恒久的である可能性が高いことを示します。404 とは異なり、これは意図的な恒久削除を示します。検索エンジンに URL のインデックスを削除するよう通知するのに役立ちます。\",\n      usecase: \"廃止された製品。410 を送信することで、検索エンジンにインデックスから URL を削除するよう伝えます。\"\n    },\n    {\n      code: 411, name: \"Length Required（コンテンツ長が必要）\",\n      desc: \"Content-Length ヘッダーが必要です。\",\n      detail: \"サーバーは定義された Content-Length ヘッダーなしにリクエストを受け入れることを拒否します。クライアントは有効な Content-Length ヘッダーを追加すればリクエストを繰り返すことができます。\",\n      usecase: \"Content-Length ヘッダーを必要とするサーバーに、Content-Length ヘッダーなしで POST リクエストを送信する場合。\"\n    },\n    {\n      code: 412, name: \"Precondition Failed（前提条件の失敗）\",\n      desc: \"リソースへのアクセスが拒否されました。\",\n      detail: \"クライアントはサーバーが満たしていない前提条件をヘッダーに示しました。If-Match、If-None-Match、If-Modified-Since、If-Unmodified-Since ヘッダーを使用した条件付きリクエストで使用されます。\",\n      usecase: \"楽観的同時実行制御: クライアントがリソースを更新するために If-Match: \\\"old-etag\\\" を送信しますが、そのリソースはすでに他者によって変更されています。\"\n    },\n    {\n      code: 413, name: \"Content Too Large（コンテンツが大きすぎます）\",\n      desc: \"リクエストボディがサーバーの許容サイズを超えています。\",\n      detail: \"リクエストエンティティがサーバーで定義された制限より大きいです。サーバーは接続を閉じるか、状況が一時的であれば Retry-After ヘッダーを返すことがあります。\",\n      usecase: \"サーバーの最大許容アップロードサイズ（例: 10MB 超の画像）を超えるファイルのアップロード。\"\n    },\n    {\n      code: 414, name: \"URI Too Long（URI が長すぎます）\",\n      desc: \"リクエストされた URI がサーバーの処理可能な長さを超えています。\",\n      detail: \"提供された URI がサーバーが処理するには長すぎます。クライアントが長いクエリ文字列を持つ POST リクエストを GET リクエストに変換する場合に発生することがあります。\",\n      usecase: \"URL クエリ文字列に数千文字の検索クエリやフィルター。\"\n    },\n    {\n      code: 415, name: \"Unsupported Media Type（サポートされていないメディアタイプ）\",\n      desc: \"リクエストメディアタイプはサポートされていません。\",\n      detail: \"リクエストされたデータのメディアフォーマットがサーバーによってサポートされていないため、サーバーはリクエストを拒否しています。通常、Content-Type ヘッダーがサーバーの期待と一致しない場合にトリガーされます。\",\n      usecase: \"application/json のみを受け入れる API エンドポイントに text/plain を送信する場合。\"\n    },\n    {\n      code: 416, name: \"Range Not Satisfiable（範囲を満たせません）\",\n      desc: \"リクエストされた範囲を満たすことができません。\",\n      detail: \"リクエスト内の Range ヘッダーフィールドによって指定された範囲を満たすことができません。範囲が対象 URI のデータのサイズ外にある場合があります。レスポンスには実際のサイズを示すアスタリスク（*）を含む Content-Range ヘッダーが含まれます。\",\n      usecase: \"クライアントが 5000 バイトのファイルのバイト 9000-9999 をリクエストした場合 — 範囲がファイルの末尾を超えています。\"\n    },\n    {\n      code: 417, name: \"Expectation Failed（期待が失敗しました）\",\n      desc: \"Expect ヘッダーの期待を満たすことができません。\",\n      detail: \"Expect リクエストヘッダーフィールドによって示された期待をサーバーが満たすことができません。\",\n      usecase: \"クライアントが Expect: 100-continue を送信しますが、サーバーはその期待を満たすことができません（例: リクエストボディが大きすぎる）。\"\n    },\n    {\n      code: 418, name: \"I'm a Teapot（私はティーポットです）\",\n      desc: \"サーバーはティーポットなのでコーヒーを淹れることを拒否します。\",\n      detail: \"1998 年のエイプリルフールのジョークです（RFC 2324、Hyper Text Coffee Pot Control Protocol）。ティーポットでコーヒーを淹れようとする試みはこのエラーコードを返す必要があります。実際の HTTP サーバーによって実装されることは期待されていません。\",\n      usecase: \"API や開発者ツールのイースターエッグ。Google は https://www.google.com/teapot で 418 を返します。\"\n    },\n    {\n      code: 422, name: \"Unprocessable Content（処理できないコンテンツ）\",\n      desc: \"リクエストは整形式ですが意味的エラーがあります。\",\n      detail: \"サーバーはリクエストエンティティのコンテンツタイプを理解し、構文は正しいですが、含まれる指示を処理できませんでした。REST API でよく使用され、バリデーション失敗を示します — JSON は有効ですが、データがビジネスルールに違反しています。\",\n      usecase: \"有効な JSON ボディだがフィールドがバリデーションに失敗: age: -5 または email: 'メールではない'。\"\n    },\n    {\n      code: 423, name: \"Locked（ロック済み）\",\n      desc: \"アクセスされているリソースはロックされています（WebDAV）。\",\n      detail: \"アクセスされているリソースはロックされています。リソースがロックされて変更できない場合の WebDAV レスポンスです。\",\n      usecase: \"WebDAV: 別のユーザーがチェックアウトしているドキュメントは変更できません。\"\n    },\n    {\n      code: 424, name: \"Failed Dependency（依存関係の失敗）\",\n      desc: \"リクエストは失敗したリクエストに依存していたため失敗しました（WebDAV）。\",\n      detail: \"リクエストされたアクションが失敗した別のアクションに依存していたため、メソッドをリソースに対して実行できませんでした（WebDAV）。\",\n      usecase: \"WebDAV バッチ操作でバッチ内の先行操作が失敗した場合。\"\n    },\n    {\n      code: 425, name: \"Too Early（早すぎます）\",\n      desc: \"サーバーは再生される可能性のあるリクエストを処理するリスクを取りたくありません。\",\n      detail: \"サーバーが再生される可能性のあるリクエストを処理するリスクを取りたくないことを示します。TLS 早期データ（0-RTT）でのリプレイ攻撃を防ぐために使用されます。\",\n      usecase: \"TLS 1.3 早期データ: リプレイ攻撃を防ぐため、TLS ハンドシェイクで送信されたリクエストの処理をサーバーが拒否します。\"\n    },\n    {\n      code: 426, name: \"Upgrade Required（アップグレードが必要）\",\n      desc: \"クライアントは別のプロトコルに切り替える必要があります。\",\n      detail: \"サーバーは現在のプロトコルを使用してリクエストを実行することを拒否しますが、クライアントが別のプロトコルにアップグレードした後は実行する意思があります。サーバーは必要なプロトコルを示す Upgrade ヘッダーを含める必要があります。\",\n      usecase: \"サーバーがクライアントに HTTP/1.1 から HTTP/2 または HTTP から HTTPS へのアップグレードを要求する場合。\"\n    },\n    {\n      code: 428, name: \"Precondition Required（前提条件が必要）\",\n      desc: \"オリジンサーバーはリクエストを条件付きにすることを要求します。\",\n      detail: \"オリジンサーバーがリクエストを条件付きにすることを要求していることを示します。このレスポンスはクライアントがリソースの状態を GET し、それを変更し、PUT で書き戻すが、その間に第三者が状態を変更した「失われた更新」問題を防ぐためのものです。\",\n      usecase: \"API が、同時更新の競合を防ぐために更新リクエストに If-Match または If-Unmodified-Since ヘッダーを要求する場合。\"\n    },\n    {\n      code: 429, name: \"Too Many Requests（リクエストが多すぎます）\",\n      desc: \"ユーザーが一定時間内に多すぎるリクエストを送信しました（レート制限）。\",\n      detail: \"ユーザーが指定された時間内に多すぎるリクエストを送信したことを示します。レスポンスにはクライアントが新しいリクエストを行う前に待機すべき時間を示す Retry-After ヘッダーが含まれる場合があります。API レート制限の基本です。\",\n      usecase: \"API レート制限: クライアントが 1 分あたり 100 リクエストを超えた場合。サーバーは Retry-After: 30 とともに 429 を返します。\"\n    },\n    {\n      code: 431, name: \"Request Header Fields Too Large（リクエストヘッダーフィールドが大きすぎます）\",\n      desc: \"リクエストの HTTP ヘッダーが大きすぎます。\",\n      detail: \"サーバーはヘッダーフィールドが大きすぎるためリクエストを処理したくありません。リクエストヘッダーフィールドのサイズを縮小した後に再送信できます。過剰に大きな Cookie によって引き起こされることがよくあります。\",\n      usecase: \"時間をかけて蓄積された多すぎる Cookie や大きすぎる Cookie により、リクエストヘッダーがサーバーの制限を超える場合。\"\n    },\n    {\n      code: 451, name: \"Unavailable For Legal Reasons（法的理由により利用不可）\",\n      desc: \"リソースは法的要求により利用できません。\",\n      detail: \"ユーザーが法的に提供できないリソースを要求しました。レスポンスには制限を課したエンティティにリンクする rel=blocked-by を含む Link ヘッダーを含める必要があります。華氏 451 度（Fahrenheit 451）にちなんで命名されています。\",\n      usecase: \"著作権法、裁判所命令、または政府規制により特定の国でブロックされたコンテンツ。\"\n    },\n    /* ── 5xx ── */\n    {\n      code: 500, name: \"Internal Server Error（内部サーバーエラー）\",\n      desc: \"サーバーが予期しない条件に遭遇しました。\",\n      detail: \"予期しない条件に遭遇し、より具体的なメッセージが適切でない場合に与えられる汎用エラーメッセージです。サーバーが処理方法を知らないエラーに遭遇しました。サーバーサイドエラーのキャッチオールレスポンスです。\",\n      usecase: \"サーバーコードの未処理例外、エラーをスローするデータベースクエリ、または設定ミスのあるサーバー。\"\n    },\n    {\n      code: 501, name: \"Not Implemented（未実装）\",\n      desc: \"サーバーはリクエストメソッドをサポートしていません。\",\n      detail: \"サーバーはリクエストを実行するために必要な機能をサポートしていません。これはサーバーがリクエストメソッドを認識せず、リソースに対してそれをサポートできない場合の適切なレスポンスです。\",\n      usecase: \"GET と POST のみを実装しているサーバーが、サポートしていない PATCH リクエストを受信した場合に 501 を返します。\"\n    },\n    {\n      code: 502, name: \"Bad Gateway（不正なゲートウェイ）\",\n      desc: \"サーバーがアップストリームサーバーから無効なレスポンスを受け取りました。\",\n      detail: \"ゲートウェイまたはプロキシとして機能しているサーバーが、リクエストを実行しようとしてアクセスしたアップストリームサーバーから無効なレスポンスを受け取りました。問題はプロキシ自体ではなく、アップストリームサーバーです。\",\n      usecase: \"リバースプロキシ（Nginx）がアプリケーションサーバー（Node.js）に到達できない場合、またはアプリケーションサーバーがクラッシュして不正なレスポンスを返す場合。\"\n    },\n    {\n      code: 503, name: \"Service Unavailable（サービス利用不可）\",\n      desc: \"サーバーはリクエストを処理する準備ができていません。\",\n      detail: \"サーバーはリクエストを処理する準備ができていません。一般的な原因にはメンテナンスのためにダウンしているサーバーや過負荷のサーバーが含まれます。サービスが一時的に利用できない場合は Retry-After ヘッダーを含めるべきです。\",\n      usecase: \"メンテナンス中のサーバー、データベース接続プールの枯渇、またはトラフィックスパイク中にオートスケーリングがまだ機能していない場合。\"\n    },\n    {\n      code: 504, name: \"Gateway Timeout（ゲートウェイタイムアウト）\",\n      desc: \"ゲートウェイがアップストリームサーバーの応答を待機中にタイムアウトしました。\",\n      detail: \"ゲートウェイまたはプロキシとして機能しているサーバーが、リクエストを完了するためにアクセスする必要があるアップストリームサーバーからタイムリーなレスポンスを受け取れませんでした。502 とは異なり、アップストリームサーバーは応答しましたが、遅すぎました。\",\n      usecase: \"ロードバランサーがアプリケーションサーバーからの応答を待ちすぎる場合（例: 低速なデータベースクエリがタイムアウトを引き起こす）。\"\n    },\n    {\n      code: 505, name: \"HTTP Version Not Supported（HTTP バージョン非サポート）\",\n      desc: \"使用されている HTTP バージョンはサポートされていません。\",\n      detail: \"サーバーはリクエストで使用された HTTP バージョンをサポートしていません。レスポンスにはそのバージョンがサポートされていない理由と他にどのプロトコルがサポートされているかの説明を含める必要があります。\",\n      usecase: \"HTTP/1.1 までしかサポートしていないサーバーに HTTP/3 リクエストを送信する場合。\"\n    },\n    {\n      code: 506, name: \"Variant Also Negotiates（バリアントも交渉中）\",\n      desc: \"コンテンツネゴシエーションにおける内部サーバー設定エラー。\",\n      detail: \"リクエストのトランスペアレントコンテンツネゴシエーションが循環参照を引き起こします。内部サーバー設定エラーを示します。\",\n      usecase: \"バリアントリソース自体がコンテンツをネゴシエートするよう設定されているコンテンツネゴシエーションの設定ミス。\"\n    },\n    {\n      code: 507, name: \"Insufficient Storage（ストレージ不足）\",\n      desc: \"サーバーは表現を保存できません（WebDAV）。\",\n      detail: \"リクエストを正常に完了するために必要な表現を保存できないため、メソッドをリソースに対して実行できませんでした。一時的な場合があります。\",\n      usecase: \"WebDAV: サーバーのストレージクォータが一杯の場合にファイルをアップロードする。\"\n    },\n    {\n      code: 508, name: \"Loop Detected（ループ検出）\",\n      desc: \"サーバーが無限ループを検出しました（WebDAV）。\",\n      detail: \"サーバーは Depth: infinity を含むリクエストを処理中に無限ループを検出したため操作を終了しました。WebDAV で使用されます。\",\n      usecase: \"WebDAV COPY または MOVE 操作が循環ディレクトリ参照を作成する場合。\"\n    },\n    {\n      code: 510, name: \"Not Extended（拡張なし）\",\n      desc: \"サーバーがリクエストを実行するためにさらなる拡張が必要です。\",\n      detail: \"サーバーがそれを実行するためにリクエストへのさらなる拡張が必要です。HTTP 拡張フレームワーク（RFC 2774）で使用されます。\",\n      usecase: \"リクエストで指定された HTTP 拡張がサーバーによってサポートされていない場合。\"\n    },\n    {\n      code: 511, name: \"Network Authentication Required（ネットワーク認証が必要）\",\n      desc: \"クライアントはネットワークアクセスを得るために認証が必要です。\",\n      detail: \"ネットワークへのアクセスを制御するために使用されるインターセプトプロキシ（例: ホテルや空港のキャプティブポータル）による使用を意図しています。\",\n      usecase: \"ホテルの WiFi ポータル: ブラウザーがログインページにリダイレクトされます。インターセプトプロキシが 511 を返します。\"\n    }\n  ];\n\n  var CAT_CLASS = {\n    \"1xx\": \"c1xx\", \"2xx\": \"c2xx\", \"3xx\": \"c3xx\", \"4xx\": \"c4xx\", \"5xx\": \"c5xx\"\n  };\n\n  function getCat(code) {\n    return Math.floor(code / 100) + \"xx\";\n  }\n\n  function buildCard(item) {\n    var cat = getCat(item.code);\n    var cls = CAT_CLASS[cat];\n    var isCommon = COMMON.indexOf(item.code) !== -1;\n    var id = \"hsc-\" + item.code;\n\n    var commonBadge = isCommon\n      ? '\u003cspan class=\"hsc-common-star\"\u003e\u0026#9733; よく使われる\u003c/span\u003e'\n      : \"\";\n\n    return [\n      '\u003cdiv class=\"hsc-card ' + cls + (isCommon ? \" common\" : \"\") + '\" data-code=\"' + item.code + '\" data-cat=\"' + cat + '\" id=\"' + id + '\"\u003e',\n        '\u003cdiv class=\"hsc-card-header\" onclick=\"hscToggle(\\'' + id + '\\')\"\u003e',\n          '\u003cspan class=\"hsc-code-num ' + cls + '\"\u003e' + item.code + '\u003c/span\u003e',\n          '\u003cdiv class=\"hsc-card-meta\"\u003e',\n            '\u003cdiv class=\"hsc-code-name\"\u003e' + item.name + '\u003c/div\u003e',\n            '\u003cdiv class=\"hsc-code-desc\"\u003e' + item.desc + '\u003c/div\u003e',\n          '\u003c/div\u003e',\n          commonBadge,\n          '\u003cbutton class=\"hsc-copy-btn\" onclick=\"hscCopy(event, ' + item.code + ', \\'' + item.name + '\\')\" aria-label=\"' + item.code + ' ' + item.name + ' をコピー\"\u003eコピー\u003c/button\u003e',\n          '\u003csvg class=\"hsc-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpolyline points=\"6 9 12 15 18 9\"/\u003e\u003c/svg\u003e',\n        '\u003c/div\u003e',\n        '\u003cdiv class=\"hsc-detail\"\u003e',\n          '\u003ch4\u003e説明\u003c/h4\u003e',\n          '\u003cp\u003e' + item.detail + '\u003c/p\u003e","title":"HTTPステータスコード一覧 — クイックリファレンス"},{"content":" Cron式をビジュアル作成 毎分 毎時00分 毎日深夜0時 毎日9時 毎週日曜深夜 毎月1日深夜 平日9時 5分ごと 15分ごと 元日深夜（年次） 分（Minute） 時（Hour） 日（Month） 月（Month） 曜日（Week） * * * * * コピー 日本語での説明 毎分実行 次回5回の実行予定時刻 既存のCron式を検証 検証 クリア 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\nCron式 → Cron式ビルダー 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → ","permalink":"https://productivity-works.com/ja/tools/crontab-generator/","summary":"\u003cdiv id=\"cg-app\"\u003e\n\u003cstyle\u003e\n#cg-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', 'Meiryo', system-ui, sans-serif;\n  background: #0f0f13;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin: 0 auto;\n  max-width: 900px;\n  box-sizing: border-box;\n}\n#cg-app * { box-sizing: border-box; }\n\n#cg-app h2 {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #f1f5f9;\n  margin: 0 0 14px 0;\n}\n#cg-app h3 {\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #94a3b8;\n  margin: 0 0 12px 0;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n\n.cg-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 22px;\n}\n.cg-preset-btn {\n  padding: 6px 14px;\n  border-radius: 20px;\n  border: 1px solid #2d2d4d;\n  background: #1a1a24;\n  color: #a5b4fc;\n  font-size: 0.82rem;\n  font-weight: 700;\n  cursor: pointer;\n  font-family: inherit;\n  transition: background 0.15s, border-color 0.15s;\n}\n.cg-preset-btn:hover { background: #22224a; border-color: #6366f1; color: #c7d2fe; }\n.cg-preset-btn.active { background: #3730a3; border-color: #6366f1; color: #fff; }\n\n.cg-builder {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 10px;\n  padding: 18px;\n  margin-bottom: 18px;\n}\n.cg-fields {\n  display: grid;\n  grid-template-columns: repeat(5, 1fr);\n  gap: 12px;\n}\n.cg-field-label {\n  font-size: 0.72rem;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  margin-bottom: 6px;\n  display: block;\n}\n.cg-field-select {\n  width: 100%;\n  background: #0f0f18;\n  border: 1px solid #2d2d3d;\n  border-radius: 6px;\n  color: #e2e8f0;\n  font-size: 0.84rem;\n  padding: 7px 10px;\n  outline: none;\n  font-family: inherit;\n  cursor: pointer;\n  transition: border-color 0.2s;\n  appearance: none;\n  -webkit-appearance: none;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: right 8px center;\n  padding-right: 26px;\n}\n.cg-field-select:focus { border-color: #6366f1; }\n\n.cg-expr-wrap {\n  background: #12192e;\n  border: 1px solid #1e2a4a;\n  border-radius: 8px;\n  padding: 14px 16px;\n  margin-bottom: 16px;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  flex-wrap: wrap;\n}\n.cg-expr-code {\n  font-family: 'Courier New', 'Consolas', monospace;\n  font-size: 1.4rem;\n  font-weight: 700;\n  color: #7dd3fc;\n  letter-spacing: 0.06em;\n  flex: 1;\n  min-width: 200px;\n}\n.cg-btn {\n  padding: 7px 16px;\n  border-radius: 6px;\n  border: none;\n  font-size: 0.84rem;\n  font-weight: 700;\n  cursor: pointer;\n  font-family: inherit;\n  transition: background 0.15s, transform 0.1s;\n  white-space: nowrap;\n}\n.cg-btn:active { transform: scale(0.97); }\n.cg-btn-copy { background: #1a1a24; color: #a5b4fc; border: 1px solid #2d2d4d; }\n.cg-btn-copy:hover { background: #22224a; }\n.cg-btn-primary { background: #6366f1; color: #fff; }\n.cg-btn-primary:hover { background: #4f46e5; }\n.cg-btn-danger { background: #1a1a24; color: #f87171; border: 1px solid #3d2020; }\n.cg-btn-danger:hover { background: #2d1a1a; }\n\n.cg-desc-wrap {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 14px 16px;\n  margin-bottom: 18px;\n}\n.cg-desc-text {\n  font-size: 0.95rem;\n  color: #c7d2fe;\n  font-weight: 500;\n  line-height: 1.6;\n}\n\n.cg-runs-wrap {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 14px 16px;\n  margin-bottom: 18px;\n}\n.cg-run-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.cg-run-item {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  padding: 6px 0;\n  border-bottom: 1px solid #1e1e2c;\n  font-size: 0.88rem;\n}\n.cg-run-item:last-child { border-bottom: none; }\n.cg-run-num {\n  font-size: 0.72rem;\n  color: #475569;\n  width: 20px;\n  text-align: right;\n  flex-shrink: 0;\n}\n.cg-run-time {\n  font-family: 'Courier New', monospace;\n  color: #7dd3fc;\n  font-weight: 600;\n}\n.cg-run-rel {\n  color: #64748b;\n  font-size: 0.78rem;\n}\n\n.cg-validate-wrap {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 14px 16px;\n  margin-bottom: 20px;\n}\n.cg-validate-row {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n.cg-validate-input {\n  flex: 1;\n  min-width: 200px;\n  background: #0f0f18;\n  border: 1px solid #2d2d3d;\n  border-radius: 6px;\n  color: #e2e8f0;\n  font-size: 0.9rem;\n  font-family: 'Courier New', monospace;\n  padding: 8px 12px;\n  outline: none;\n  transition: border-color 0.2s;\n}\n.cg-validate-input:focus { border-color: #6366f1; }\n.cg-validate-input::placeholder { color: #3a3a5a; font-family: inherit; }\n.cg-validate-result {\n  margin-top: 10px;\n  font-size: 0.88rem;\n  min-height: 1.2em;\n  line-height: 1.5;\n}\n.cg-valid { color: #4ade80; }\n.cg-invalid { color: #f87171; }\n\n@media (max-width: 640px) {\n  #cg-app { padding: 16px 12px; }\n  .cg-fields { grid-template-columns: repeat(3, 1fr); }\n  .cg-expr-code { font-size: 1.1rem; }\n}\n@media (max-width: 400px) {\n  .cg-fields { grid-template-columns: repeat(2, 1fr); }\n}\n\u003c/style\u003e\n\u003ch2\u003eCron式をビジュアル作成\u003c/h2\u003e\n\u003c!-- プリセット --\u003e\n\u003cdiv class=\"cg-presets\" id=\"cg-presets\"\u003e\n  \u003cbutton class=\"cg-preset-btn\" data-expr=\"* * * * *\" onclick=\"cgApplyPreset(this)\"\u003e毎分\u003c/button\u003e\n  \u003cbutton class=\"cg-preset-btn\" data-expr=\"0 * * * *\" onclick=\"cgApplyPreset(this)\"\u003e毎時00分\u003c/button\u003e\n  \u003cbutton class=\"cg-preset-btn\" data-expr=\"0 0 * * *\" onclick=\"cgApplyPreset(this)\"\u003e毎日深夜0時\u003c/button\u003e\n  \u003cbutton class=\"cg-preset-btn\" data-expr=\"0 9 * * *\" onclick=\"cgApplyPreset(this)\"\u003e毎日9時\u003c/button\u003e\n  \u003cbutton class=\"cg-preset-btn\" data-expr=\"0 0 * * 0\" onclick=\"cgApplyPreset(this)\"\u003e毎週日曜深夜\u003c/button\u003e\n  \u003cbutton class=\"cg-preset-btn\" data-expr=\"0 0 1 * *\" onclick=\"cgApplyPreset(this)\"\u003e毎月1日深夜\u003c/button\u003e\n  \u003cbutton class=\"cg-preset-btn\" data-expr=\"0 9 * * 1-5\" onclick=\"cgApplyPreset(this)\"\u003e平日9時\u003c/button\u003e\n  \u003cbutton class=\"cg-preset-btn\" data-expr=\"*/5 * * * *\" onclick=\"cgApplyPreset(this)\"\u003e5分ごと\u003c/button\u003e\n  \u003cbutton class=\"cg-preset-btn\" data-expr=\"*/15 * * * *\" onclick=\"cgApplyPreset(this)\"\u003e15分ごと\u003c/button\u003e\n  \u003cbutton class=\"cg-preset-btn\" data-expr=\"0 0 1 1 *\" onclick=\"cgApplyPreset(this)\"\u003e元日深夜（年次）\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- フィールドビルダー --\u003e\n\u003cdiv class=\"cg-builder\"\u003e\n  \u003cdiv class=\"cg-fields\"\u003e\n    \u003cdiv class=\"cg-field-wrap\"\u003e\n      \u003clabel class=\"cg-field-label\" for=\"cg-min\"\u003e分（Minute）\u003c/label\u003e\n      \u003cselect class=\"cg-field-select\" id=\"cg-min\" onchange=\"cgUpdate()\"\u003e\u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cg-field-wrap\"\u003e\n      \u003clabel class=\"cg-field-label\" for=\"cg-hr\"\u003e時（Hour）\u003c/label\u003e\n      \u003cselect class=\"cg-field-select\" id=\"cg-hr\" onchange=\"cgUpdate()\"\u003e\u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cg-field-wrap\"\u003e\n      \u003clabel class=\"cg-field-label\" for=\"cg-dom\"\u003e日（Month）\u003c/label\u003e\n      \u003cselect class=\"cg-field-select\" id=\"cg-dom\" onchange=\"cgUpdate()\"\u003e\u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cg-field-wrap\"\u003e\n      \u003clabel class=\"cg-field-label\" for=\"cg-mon\"\u003e月（Month）\u003c/label\u003e\n      \u003cselect class=\"cg-field-select\" id=\"cg-mon\" onchange=\"cgUpdate()\"\u003e\u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cg-field-wrap\"\u003e\n      \u003clabel class=\"cg-field-label\" for=\"cg-dow\"\u003e曜日（Week）\u003c/label\u003e\n      \u003cselect class=\"cg-field-select\" id=\"cg-dow\" onchange=\"cgUpdate()\"\u003e\u003c/select\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Cron式出力 --\u003e\n\u003cdiv class=\"cg-expr-wrap\"\u003e\n  \u003cspan class=\"cg-expr-code\" id=\"cg-expr\"\u003e* * * * *\u003c/span\u003e\n  \u003cbutton class=\"cg-btn cg-btn-copy\" id=\"cg-copy-btn\" onclick=\"cgCopyExpr()\"\u003eコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- 日本語説明 --\u003e\n\u003cdiv class=\"cg-desc-wrap\"\u003e\n  \u003ch3\u003e日本語での説明\u003c/h3\u003e\n  \u003cdiv class=\"cg-desc-text\" id=\"cg-desc\"\u003e毎分実行\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 次回5回の実行時刻 --\u003e\n\u003cdiv class=\"cg-runs-wrap\"\u003e\n  \u003ch3\u003e次回5回の実行予定時刻\u003c/h3\u003e\n  \u003cul class=\"cg-run-list\" id=\"cg-run-list\"\u003e\u003c/ul\u003e\n\u003c/div\u003e\n\u003c!-- バリデーター --\u003e\n\u003cdiv class=\"cg-validate-wrap\"\u003e\n  \u003ch3\u003e既存のCron式を検証\u003c/h3\u003e\n  \u003cdiv class=\"cg-validate-row\"\u003e\n    \u003cinput class=\"cg-validate-input\" id=\"cg-val-input\" placeholder=\"例: 0 9 * * 1-5\" /\u003e\n    \u003cbutton class=\"cg-btn cg-btn-primary\" onclick=\"cgValidate()\"\u003e検証\u003c/button\u003e\n    \u003cbutton class=\"cg-btn cg-btn-danger\" onclick=\"cgClearValidate()\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cg-validate-result\" id=\"cg-val-result\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n\n  var FIELDS = {\n    min: {\n      el: null,\n      options: (function(){\n        var o = [{ v: '*', l: '毎分 (*)' }];\n        for (var i = 0; i \u003c= 59; i++) o.push({ v: String(i), l: i + '分' });\n        o.push({ v: '*/2', l: '2分ごと (*/2)' });\n        o.push({ v: '*/5', l: '5分ごと (*/5)' });\n        o.push({ v: '*/10', l: '10分ごと (*/10)' });\n        o.push({ v: '*/15', l: '15分ごと (*/15)' });\n        o.push({ v: '*/30', l: '30分ごと (*/30)' });\n        return o;\n      })()\n    },\n    hr: {\n      el: null,\n      options: (function(){\n        var o = [{ v: '*', l: '毎時 (*)' }];\n        for (var i = 0; i \u003c= 23; i++) o.push({ v: String(i), l: i + '時' });\n        o.push({ v: '*/2', l: '2時間ごと (*/2)' });\n        o.push({ v: '*/3', l: '3時間ごと (*/3)' });\n        o.push({ v: '*/6', l: '6時間ごと (*/6)' });\n        o.push({ v: '*/12', l: '12時間ごと (*/12)' });\n        return o;\n      })()\n    },\n    dom: {\n      el: null,\n      options: (function(){\n        var o = [{ v: '*', l: '毎日 (*)' }];\n        for (var i = 1; i \u003c= 31; i++) o.push({ v: String(i), l: i + '日' });\n        o.push({ v: '*/2', l: '2日ごと' });\n        o.push({ v: '1,15', l: '1日と15日' });\n        o.push({ v: 'L', l: '月末日' });\n        return o;\n      })()\n    },\n    mon: {\n      el: null,\n      options: [\n        { v: '*', l: '毎月 (*)' },\n        { v: '1', l: '1月' }, { v: '2', l: '2月' }, { v: '3', l: '3月' },\n        { v: '4', l: '4月' }, { v: '5', l: '5月' }, { v: '6', l: '6月' },\n        { v: '7', l: '7月' }, { v: '8', l: '8月' }, { v: '9', l: '9月' },\n        { v: '10', l: '10月' }, { v: '11', l: '11月' }, { v: '12', l: '12月' },\n        { v: '1-3', l: '第1四半期（1〜3月）' }, { v: '4-6', l: '第2四半期（4〜6月）' },\n        { v: '7-9', l: '第3四半期（7〜9月）' }, { v: '10-12', l: '第4四半期（10〜12月）' }\n      ]\n    },\n    dow: {\n      el: null,\n      options: [\n        { v: '*', l: '毎日（曜日問わず）(*)' },\n        { v: '0', l: '日曜日 (0)' }, { v: '1', l: '月曜日 (1)' }, { v: '2', l: '火曜日 (2)' },\n        { v: '3', l: '水曜日 (3)' }, { v: '4', l: '木曜日 (4)' }, { v: '5', l: '金曜日 (5)' },\n        { v: '6', l: '土曜日 (6)' },\n        { v: '1-5', l: '平日（月〜金）' }, { v: '0,6', l: '週末（土・日）' },\n        { v: '1,3,5', l: '月・水・金' }, { v: '2,4', l: '火・木' }\n      ]\n    }\n  };\n\n  var MONTHS_JA = ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'];\n  var DAYS_JA = ['日曜','月曜','火曜','水曜','木曜','金曜','土曜'];\n  var DAYS_SHORT_JA = ['日','月','火','水','木','金','土'];\n\n  function buildSelects() {\n    ['min','hr','dom','mon','dow'].forEach(function(key) {\n      var sel = document.getElementById('cg-' + key);\n      FIELDS[key].el = sel;\n      FIELDS[key].options.forEach(function(opt) {\n        var o = document.createElement('option');\n        o.value = opt.v; o.textContent = opt.l;\n        sel.appendChild(o);\n      });\n    });\n  }\n\n  function getExpr() {\n    return ['min','hr','dom','mon','dow'].map(function(k){ return FIELDS[k].el.value; }).join(' ');\n  }\n\n  function describe(expr) {\n    var parts = expr.trim().split(/\\s+/);\n    if (parts.length !== 5) return '無効なcron式です';\n    var min = parts[0], hr = parts[1], dom = parts[2], mon = parts[3], dow = parts[4];\n\n    if (expr === '* * * * *') return '毎分実行';\n    if (expr === '0 * * * *') return '毎時0分に実行';\n    if (expr === '0 0 * * *') return '毎日深夜0時（0:00）に実行';\n    if (expr === '0 0 * * 0') return '毎週日曜日の深夜0時に実行';\n    if (expr === '0 0 1 * *') return '毎月1日の深夜0時に実行';\n    if (expr === '0 0 1 1 *') return '毎年1月1日の深夜0時に実行';\n    if (expr === '0 9 * * 1-5') return '平日（月〜金）の毎朝9時に実行';\n\n    var desc_parts = [];\n\n    if (min === '*') desc_parts.push('毎分');\n    else if (min.startsWith('*/')) desc_parts.push(min.slice(2) + '分ごと');\n    else desc_parts.push(min + '分に');\n\n    if (hr === '*') { /* omit */ }\n    else if (hr.startsWith('*/')) desc_parts.push(hr.slice(2) + '時間ごと');\n    else desc_parts.push(hr + '時');\n\n    if (dom !== '*' \u0026\u0026 dom !== '*/1') {\n      if (dom === 'L') desc_parts.push('月末日');\n      else if (dom.includes('-')) desc_parts.push(dom + '日の間');\n      else if (dom.includes(',')) desc_parts.push(dom.replace(/,/g,'日・') + '日');\n      else if (dom.startsWith('*/')) desc_parts.push(dom.slice(2) + '日ごと');\n      else desc_parts.push(dom + '日に');\n    }\n\n    if (mon !== '*') {\n      if (mon.includes('-')) {\n        var sp = mon.split('-');\n        desc_parts.push((MONTHS_JA[parseInt(sp[0])-1]||sp[0]+'月') + '〜' + (MONTHS_JA[parseInt(sp[1])-1]||sp[1]+'月'));\n      } else if (mon.includes(',')) {\n        var ms = mon.split(',').map(function(m){ return MONTHS_JA[parseInt(m)-1]||m+'月'; });\n        desc_parts.push(ms.join('・'));\n      } else {\n        desc_parts.push(MONTHS_JA[parseInt(mon)-1] || mon + '月');\n      }\n    }\n\n    if (dow !== '*') {\n      if (dow === '1-5') desc_parts.push('平日（月〜金）');\n      else if (dow === '0,6' || dow === '6,0') desc_parts.push('週末（土・日）');\n      else if (dow.includes('-')) {\n        var sp2 = dow.split('-');\n        desc_parts.push((DAYS_SHORT_JA[parseInt(sp2[0])]||sp2[0]) + '〜' + (DAYS_SHORT_JA[parseInt(sp2[1])]||sp2[1]) + '曜日');\n      } else if (dow.includes(',')) {\n        var ds = dow.split(',').map(function(d){ return (DAYS_SHORT_JA[parseInt(d)]||d) + '曜'; });\n        desc_parts.push(ds.join('・'));\n      } else {\n        desc_parts.push(DAYS_JA[parseInt(dow)] || '曜日' + dow);\n      }\n    }\n\n    return desc_parts.length ? desc_parts.join(' ') + 'に実行' : 'カスタムスケジュール';\n  }\n\n  function nextRuns(expr, count) {\n    var parts = expr.trim().split(/\\s+/);\n    if (parts.length !== 5) return [];\n\n    function parseField(str, min, max) {\n      var values = [];\n      if (str === '*') {\n        for (var i = min; i \u003c= max; i++) values.push(i);\n        return values;\n      }\n      var segments = str.split(',');\n      segments.forEach(function(seg) {\n        seg = seg.trim();\n        if (seg === '*') {\n          for (var i = min; i \u003c= max; i++) values.push(i);\n        } else if (seg.startsWith('*/')) {\n          var step = parseInt(seg.slice(2));\n          for (var i = min; i \u003c= max; i += step) values.push(i);\n        } else if (seg.includes('-')) {\n          var rng = seg.split('-');\n          var from = parseInt(rng[0]), to = parseInt(rng[1]);\n          for (var i = from; i \u003c= to; i++) values.push(i);\n        } else {\n          var n = parseInt(seg);\n          if (!isNaN(n)) values.push(n);\n        }\n      });\n      return values.filter(function(v,i,a){ return a.indexOf(v)===i; }).sort(function(a,b){return a-b;});\n    }\n\n    try {\n      var mins = parseField(parts[0], 0, 59);\n      var hrs  = parseField(parts[1], 0, 23);\n      var doms = parts[2] === '*' ? null : parseField(parts[2], 1, 31);\n      var mons = parseField(parts[3], 1, 12);\n      var dows = parts[4] === '*' ? null : parseField(parts[4], 0, 6);\n\n      var runs = [];\n      var cur = new Date();\n      cur = new Date(cur.getFullYear(), cur.getMonth(), cur.getDate(), cur.getHours(), cur.getMinutes() + 1, 0);\n      var limit = 50000;\n\n      while (runs.length \u003c count \u0026\u0026 limit-- \u003e 0) {\n        var m = cur.getMonth() + 1;\n        var dom = cur.getDate();\n        var dow = cur.getDay();\n        var h = cur.getHours();\n        var mi = cur.getMinutes();\n\n        if (mons.indexOf(m) \u003e= 0\n          \u0026\u0026 (doms === null || doms.indexOf(dom) \u003e= 0)\n          \u0026\u0026 (dows === null || dows.indexOf(dow) \u003e= 0)\n          \u0026\u0026 hrs.indexOf(h) \u003e= 0\n          \u0026\u0026 mins.indexOf(mi) \u003e= 0) {\n          runs.push(new Date(cur));\n        }\n        cur = new Date(cur.getTime() + 60000);\n      }\n      return runs;\n    } catch(e) {\n      return [];\n    }\n  }\n\n  function relTimeJa(d) {\n    var diff = Math.round((d - Date.now()) / 1000);\n    if (diff \u003c 60) return diff + '秒後';\n    if (diff \u003c 3600) return Math.round(diff/60) + '分後';\n    if (diff \u003c 86400) return Math.round(diff/3600) + '時間後';\n    return Math.round(diff/86400) + '日後';\n  }\n\n  function padZ(n) { return n \u003c 10 ? '0' + n : String(n); }\n\n  function fmtDate(d) {\n    var wd = ['日','月','火','水','木','金','土'];\n    return d.getFullYear() + '/' + padZ(d.getMonth()+1) + '/' + padZ(d.getDate())\n      + '(' + wd[d.getDay()] + ') '\n      + padZ(d.getHours()) + ':' + padZ(d.getMinutes());\n  }\n\n  function renderRuns(expr) {\n    var list = document.getElementById('cg-run-list');\n    var runs = nextRuns(expr, 5);\n    if (!runs.length) {\n      list.innerHTML = '\u003cli class=\"cg-run-item\"\u003e\u003cspan style=\"color:#64748b;\"\u003eこの式では次回実行時刻を計算できませんでした。\u003c/span\u003e\u003c/li\u003e';\n      return;\n    }\n    list.innerHTML = runs.map(function(d, i) {\n      return '\u003cli class=\"cg-run-item\"\u003e'\n        + '\u003cspan class=\"cg-run-num\"\u003e' + (i+1) + '\u003c/span\u003e'\n        + '\u003cspan class=\"cg-run-time\"\u003e' + fmtDate(d) + '\u003c/span\u003e'\n        + '\u003cspan class=\"cg-run-rel\"\u003e' + relTimeJa(d) + '\u003c/span\u003e'\n        + '\u003c/li\u003e';\n    }).join('');\n  }\n\n  function cgUpdate() {\n    var expr = getExpr();\n    document.getElementById('cg-expr').textContent = expr;\n    document.getElementById('cg-desc').textContent = describe(expr);\n    renderRuns(expr);\n    document.querySelectorAll('.cg-preset-btn').forEach(function(b){\n      b.classList.toggle('active', b.getAttribute('data-expr') === expr);\n    });\n  }\n\n  window.cgApplyPreset = function(btn) {\n    var expr = btn.getAttribute('data-expr');\n    var parts = expr.split(' ');\n    var keys = ['min','hr','dom','mon','dow'];\n    keys.forEach(function(k, i) {\n      var sel = FIELDS[k].el;\n      var found = false;\n      for (var j = 0; j \u003c sel.options.length; j++) {\n        if (sel.options[j].value === parts[i]) { sel.selectedIndex = j; found = true; break; }\n      }\n      if (!found) sel.selectedIndex = 0;\n    });\n    cgUpdate();\n  };\n\n  window.cgCopyExpr = function() {\n    var expr = getExpr();\n    var btn = document.getElementById('cg-copy-btn');\n    try {\n      if (navigator.clipboard) {\n        navigator.clipboard.writeText(expr).then(function(){\n          btn.textContent = 'コピー完了!';\n          setTimeout(function(){ btn.textContent = 'コピー'; }, 1600);\n        });\n      } else {\n        var ta = document.createElement('textarea');\n        ta.value = expr;\n        document.body.appendChild(ta);\n        ta.select();\n        document.execCommand('copy');\n        document.body.removeChild(ta);\n        btn.textContent = 'コピー完了!';\n        setTimeout(function(){ btn.textContent = 'コピー'; }, 1600);\n      }\n    } catch(e) {}\n  };\n\n  function validateExpr(expr) {\n    var parts = expr.trim().split(/\\s+/);\n    if (parts.length !== 5) return { ok: false, msg: 'cron式はスペース区切りの5フィールド（分 時 日 月 曜日）で入力してください。' };\n    var ranges = [[0,59],[0,23],[1,31],[1,12],[0,7]];\n    var names  = ['分','時','日','月','曜日'];\n    for (var i = 0; i \u003c 5; i++) {\n      var f = parts[i];\n      if (f === '*') continue;\n      if (/^\\*\\/\\d+$/.test(f)) {\n        var step = parseInt(f.slice(2));\n        if (step \u003c 1) return { ok: false, msg: '\"' + names[i] + '\" フィールド: ステップ値は1以上にしてください。' };\n        continue;\n      }\n      var segs = f.split(',');\n      for (var j = 0; j \u003c segs.length; j++) {\n        var seg = segs[j].trim();\n        if (/^\\d+$/.test(seg)) {\n          var n = parseInt(seg);\n          if (n \u003c ranges[i][0] || n \u003e ranges[i][1]) {\n            return { ok: false, msg: '\"' + names[i] + '\" フィールド: 値 ' + n + ' は範囲外です（' + ranges[i][0] + '〜' + ranges[i][1] + '）。' };\n          }\n        } else if (/^\\d+-\\d+$/.test(seg)) {\n          var rp = seg.split('-').map(Number);\n          if (rp[0] \u003e rp[1]) return { ok: false, msg: '\"' + names[i] + '\" フィールド: 範囲の開始値は終了値以下にしてください。' };\n          if (rp[0] \u003c ranges[i][0] || rp[1] \u003e ranges[i][1]) {\n            return { ok: false, msg: '\"' + names[i] + '\" フィールド: 範囲 ' + seg + ' は許容範囲外です（' + ranges[i][0] + '〜' + ranges[i][1] + '）。' };\n          }\n        } else if (/^\\d+-\\d+\\/\\d+$/.test(seg)) {\n          continue;\n        } else if (seg === 'L' \u0026\u0026 i === 2) {\n          continue;\n        } else {\n          return { ok: false, msg: '\"' + names[i] + '\" フィールド: 認識できない値 \"' + seg + '\"。' };\n        }\n      }\n    }\n    return { ok: true, msg: '有効なcron式です: ' + describe(parts.join(' ')) };\n  }\n\n  window.cgValidate = function() {\n    var val = document.getElementById('cg-val-input').value.trim();\n    var res = document.getElementById('cg-val-result');\n    if (!val) { res.textContent = '検証するcron式を入力してください。'; res.className = 'cg-validate-result'; return; }\n    var r = validateExpr(val);\n    res.textContent = r.msg;\n    res.className = 'cg-validate-result ' + (r.ok ? 'cg-valid' : 'cg-invalid');\n    if (r.ok) {\n      var parts = val.trim().split(/\\s+/);\n      var keys = ['min','hr','dom','mon','dow'];\n      keys.forEach(function(k, i) {\n        var sel = FIELDS[k].el;\n        for (var j = 0; j \u003c sel.options.length; j++) {\n          if (sel.options[j].value === parts[i]) { sel.selectedIndex = j; break; }\n        }\n      });\n      cgUpdate();\n    }\n  };\n\n  window.cgClearValidate = function() {\n    document.getElementById('cg-val-input').value = '';\n    document.getElementById('cg-val-result').textContent = '';\n    document.getElementById('cg-val-result').className = 'cg-validate-result';\n  };\n\n  buildSelects();\n  cgUpdate();\n\n  document.getElementById('cg-val-input').addEventListener('keydown', function(e){\n    if (e.key === 'Enter') cgValidate();\n  });\n\n})();\n\u003c/script\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e確定申告・会計をもっとラクに？\u003c/strong\u003e \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計\u003c/a\u003e\n なら、フリーランスの経費管理もクラウドで簡単。\u003c/p\u003e","title":"Crontab生成ツール"},{"content":" 前景色（テキスト色）と背景色を入力するだけで、WCAG 2.1 コントラスト比を即座に計算します。通常テキスト・大きなテキスト・UIコンポーネントそれぞれについて、AA・AAAレベルの合否をリアルタイムで確認できます。\n前景色（テキスト） \u0026#8644; 背景色 コントラスト比 21:1 最高コントラスト ライブプレビュー 通常テキストのサンプル 大きなテキスト 人気のカラーペア freee会計でデザイン制作の経費管理もラクラク アクセシビリティ対応のデザイン業務や外注費も、freee会計なら自動仕訳でスマートに管理。確定申告もまとめてサポートします。 チームのカラーパレットをドキュメント化しよう 承認済みのアクセシブルな色の組み合わせは、Notion のデザインシステムページにまとめておくとチーム全体で再利用できます。 関連ツール カラーネームファインダー 色覚シミュレーター ","permalink":"https://productivity-works.com/ja/tools/contrast-checker/","summary":"\u003cdiv id=\"cc-app\"\u003e\n\u003cstyle\u003e\n#cc-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Meiryo\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a1a1a;\n}\n#cc-app *, #cc-app *::before, #cc-app *::after {\n  box-sizing: border-box;\n}\n#cc-app h2 {\n  font-size: 1.4rem;\n  font-weight: 700;\n  margin: 0 0 1rem;\n  color: #111;\n}\n#cc-app h3 {\n  font-size: 1.05rem;\n  font-weight: 600;\n  margin: 0 0 0.75rem;\n  color: #333;\n}\n#cc-app .cc-intro {\n  font-size: 0.97rem;\n  color: #555;\n  margin-bottom: 1.75rem;\n  line-height: 1.7;\n}\n#cc-app .cc-pickers-row {\n  display: flex;\n  gap: 1.25rem;\n  align-items: flex-end;\n  flex-wrap: wrap;\n  margin-bottom: 1.25rem;\n}\n#cc-app .cc-picker-group {\n  flex: 1;\n  min-width: 200px;\n}\n#cc-app .cc-picker-label {\n  display: block;\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #555;\n  letter-spacing: 0.03em;\n  margin-bottom: 0.5rem;\n}\n#cc-app .cc-picker-inner {\n  display: flex;\n  align-items: center;\n  gap: 0.6rem;\n  border: 1.5px solid #d0d5dd;\n  border-radius: 8px;\n  padding: 0.45rem 0.75rem;\n  background: #fff;\n}\n#cc-app .cc-picker-inner input[type=\"color\"] {\n  width: 38px;\n  height: 38px;\n  border: none;\n  border-radius: 6px;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  flex-shrink: 0;\n}\n#cc-app .cc-hex-input {\n  flex: 1;\n  border: none;\n  outline: none;\n  font-size: 1rem;\n  font-family: \"Courier New\", monospace;\n  font-weight: 600;\n  color: #1a1a1a;\n  background: transparent;\n  width: 90px;\n}\n#cc-app .cc-swap-btn {\n  background: #f4f5f7;\n  border: 1.5px solid #d0d5dd;\n  border-radius: 8px;\n  padding: 0.6rem 1.1rem;\n  cursor: pointer;\n  font-size: 1.25rem;\n  transition: background 0.15s;\n  flex-shrink: 0;\n  align-self: flex-end;\n  line-height: 1;\n}\n#cc-app .cc-swap-btn:hover {\n  background: #e8eaed;\n}\n#cc-app .cc-ratio-card {\n  background: linear-gradient(135deg, #1e3a5f 0%, #2d5a9e 100%);\n  color: #fff;\n  border-radius: 12px;\n  padding: 1.5rem 2rem;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 1.5rem;\n  flex-wrap: wrap;\n  gap: 1rem;\n}\n#cc-app .cc-ratio-label {\n  font-size: 0.88rem;\n  opacity: 0.85;\n  font-weight: 500;\n  margin-bottom: 0.25rem;\n}\n#cc-app .cc-ratio-value {\n  font-size: 2.8rem;\n  font-weight: 800;\n  line-height: 1;\n  letter-spacing: -0.02em;\n}\n#cc-app .cc-ratio-tag {\n  font-size: 0.8rem;\n  opacity: 0.75;\n  margin-top: 0.3rem;\n}\n#cc-app .cc-preview-box {\n  border-radius: 10px;\n  padding: 1.25rem 1.75rem;\n  min-width: 220px;\n  border: 1px solid rgba(255,255,255,0.2);\n}\n#cc-app .cc-preview-label {\n  font-size: 0.75rem;\n  opacity: 0.8;\n  font-weight: 600;\n  margin-bottom: 0.4rem;\n}\n#cc-app .cc-preview-normal {\n  font-size: 1rem;\n  margin-bottom: 0.35rem;\n}\n#cc-app .cc-preview-large {\n  font-size: 1.4rem;\n  font-weight: 700;\n}\n#cc-app .cc-results-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n  gap: 1rem;\n  margin-bottom: 1.75rem;\n}\n#cc-app .cc-result-card {\n  background: #fff;\n  border: 1.5px solid #e2e6ea;\n  border-radius: 10px;\n  padding: 1.1rem 1.25rem;\n}\n#cc-app .cc-result-card.pass {\n  border-left: 4px solid #22c55e;\n}\n#cc-app .cc-result-card.fail {\n  border-left: 4px solid #ef4444;\n}\n#cc-app .cc-result-type {\n  font-size: 0.78rem;\n  font-weight: 700;\n  letter-spacing: 0.07em;\n  color: #888;\n  margin-bottom: 0.3rem;\n}\n#cc-app .cc-result-name {\n  font-size: 0.97rem;\n  font-weight: 600;\n  color: #1a1a1a;\n  margin-bottom: 0.5rem;\n}\n#cc-app .cc-result-req {\n  font-size: 0.82rem;\n  color: #777;\n  margin-bottom: 0.5rem;\n}\n#cc-app .cc-badge {\n  display: inline-block;\n  padding: 0.2rem 0.7rem;\n  border-radius: 999px;\n  font-size: 0.82rem;\n  font-weight: 700;\n}\n#cc-app .cc-badge.pass {\n  background: #dcfce7;\n  color: #166534;\n}\n#cc-app .cc-badge.fail {\n  background: #fee2e2;\n  color: #991b1b;\n}\n#cc-app .cc-section-title {\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #888;\n  margin: 1.75rem 0 0.85rem;\n  padding-bottom: 0.4rem;\n  border-bottom: 1px solid #e8eaed;\n  letter-spacing: 0.04em;\n}\n#cc-app .cc-suggestions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.6rem;\n  margin-bottom: 1.75rem;\n}\n#cc-app .cc-sug-btn {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  padding: 0.4rem 0.85rem;\n  border-radius: 7px;\n  border: 1.5px solid #d0d5dd;\n  cursor: pointer;\n  font-size: 0.83rem;\n  font-weight: 500;\n  background: #fff;\n  transition: all 0.15s;\n  color: #333;\n}\n#cc-app .cc-sug-btn:hover {\n  border-color: #2d5a9e;\n  background: #f0f4ff;\n}\n#cc-app .cc-sug-swatch {\n  display: inline-flex;\n  gap: 2px;\n}\n#cc-app .cc-sug-swatch span {\n  display: inline-block;\n  width: 14px;\n  height: 14px;\n  border-radius: 3px;\n  border: 1px solid rgba(0,0,0,0.12);\n}\n#cc-app .cc-cta-box {\n  background: #f0f7ff;\n  border: 1.5px solid #bfdbfe;\n  border-radius: 10px;\n  padding: 1.25rem 1.5rem;\n  margin-top: 2rem;\n  font-size: 0.92rem;\n  color: #1e3a5f;\n  line-height: 1.7;\n}\n#cc-app .cc-cta-box strong {\n  display: block;\n  font-size: 1rem;\n  margin-bottom: 0.4rem;\n  color: #1a1a1a;\n}\n#cc-app .cc-cta-box a {\n  color: #2d5a9e;\n  font-weight: 700;\n  text-decoration: underline;\n}\n#cc-app .cc-freee-box {\n  background: #fff7ed;\n  border: 1.5px solid #fed7aa;\n  border-radius: 10px;\n  padding: 1.25rem 1.5rem;\n  margin-top: 1rem;\n  font-size: 0.92rem;\n  color: #7c3409;\n  line-height: 1.7;\n}\n#cc-app .cc-freee-box strong {\n  display: block;\n  font-size: 1rem;\n  margin-bottom: 0.4rem;\n  color: #431407;\n}\n#cc-app .cc-freee-box a {\n  color: #c2410c;\n  font-weight: 700;\n  text-decoration: underline;\n}\n#cc-app .cc-related {\n  margin-top: 2rem;\n  padding-top: 1.25rem;\n  border-top: 1px solid #e8eaed;\n}\n#cc-app .cc-related-links {\n  display: flex;\n  gap: 1rem;\n  flex-wrap: wrap;\n  margin-top: 0.75rem;\n}\n#cc-app .cc-related-links a {\n  display: inline-block;\n  padding: 0.45rem 1rem;\n  background: #f4f5f7;\n  border: 1.5px solid #d0d5dd;\n  border-radius: 7px;\n  color: #2d5a9e;\n  font-size: 0.88rem;\n  font-weight: 600;\n  text-decoration: none;\n  transition: all 0.15s;\n}\n#cc-app .cc-related-links a:hover {\n  background: #e8edf7;\n  border-color: #2d5a9e;\n}\n@media (max-width: 540px) {\n  #cc-app .cc-ratio-card {\n    flex-direction: column;\n    align-items: flex-start;\n  }\n  #cc-app .cc-pickers-row {\n    flex-direction: column;\n  }\n  #cc-app .cc-swap-btn {\n    align-self: center;\n  }\n}\n\u003c/style\u003e\n\u003cp class=\"cc-intro\"\u003e前景色（テキスト色）と背景色を入力するだけで、WCAG 2.1 コントラスト比を即座に計算します。通常テキスト・大きなテキスト・UIコンポーネントそれぞれについて、AA・AAAレベルの合否をリアルタイムで確認できます。\u003c/p\u003e","title":"カラーコントラストチェッカー"},{"content":"ブラウザタブ・ブックマーク・Google検索結果・スマホのホーム画面でファビコンがどう見えるかを確認できます。すべてブラウザ内で完結し、画像はサーバーにアップロードされません。\n関連ツール： ファビコンを生成 → ファビコンジェネレーター | メタタグ → メタタグジェネレーター ここにファビコンをドラッグ＆ドロップ\nPNG・ICO・SVG・JPG・WebP に対応\nファイルを選択 上のエリアにファビコンをアップロードするとプレビューとサイズチェックが表示されます。 サイズ別プレビュー ブラウザ・コンテキスト別プレビュー ダークモードで表示 Webサイト運営の経費管理もかんたんに\nfreee会計なら、ドメイン・サーバー費用の経費精算もクラウドで一元管理。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n関連ツール： ファビコンを生成 → ファビコンジェネレーター | メタタグ → メタタグジェネレーター ","permalink":"https://productivity-works.com/ja/tools/favicon-checker/","summary":"\u003cp\u003eブラウザタブ・ブックマーク・Google検索結果・スマホのホーム画面でファビコンがどう見えるかを確認できます。すべてブラウザ内で完結し、画像はサーバーにアップロードされません。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e関連ツール：\u003c/strong\u003e ファビコンを生成 → \u003ca href=\"https://productivity-works.com/ja/tools/favicon-generator/\"\u003eファビコンジェネレーター\u003c/a\u003e\n  |  メタタグ → \u003ca href=\"https://productivity-works.com/ja/tools/meta-tag-generator/\"\u003eメタタグジェネレーター\u003c/a\u003e\n\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv id=\"fc-app\"\u003e\n\u003cstyle\u003e\n#fc-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#fc-app *, #fc-app *::before, #fc-app *::after {\n  box-sizing: border-box;\n}\n#fc-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin: 1.4rem 0 0.6rem;\n  color: #0f172a;\n}\n#fc-drop-zone {\n  border: 2.5px dashed #94a3b8;\n  border-radius: 12px;\n  padding: 36px 24px;\n  text-align: center;\n  cursor: pointer;\n  transition: border-color 0.2s, background 0.2s;\n  background: #f8fafc;\n  position: relative;\n}\n#fc-drop-zone.fc-drag-over {\n  border-color: #3b82f6;\n  background: #eff6ff;\n}\n#fc-drop-zone p {\n  margin: 0 0 10px;\n  color: #64748b;\n  font-size: 0.95rem;\n}\n#fc-drop-zone input[type=\"file\"] {\n  display: none;\n}\n#fc-upload-btn {\n  display: inline-block;\n  padding: 9px 22px;\n  background: #3b82f6;\n  color: #fff;\n  border-radius: 8px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  cursor: pointer;\n  border: none;\n  transition: background 0.18s;\n}\n#fc-upload-btn:hover { background: #2563eb; }\n#fc-file-info {\n  display: none;\n  margin-top: 14px;\n  padding: 12px 16px;\n  background: #f1f5f9;\n  border-radius: 8px;\n  font-size: 0.88rem;\n  color: #475569;\n  text-align: left;\n}\n#fc-file-info span { display: inline-block; margin-right: 18px; }\n#fc-file-info strong { color: #1e293b; }\n#fc-warnings {\n  margin-top: 10px;\n  display: none;\n}\n.fc-warn {\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n  padding: 8px 12px;\n  background: #fef3c7;\n  border-left: 3px solid #f59e0b;\n  border-radius: 6px;\n  margin-bottom: 6px;\n  font-size: 0.85rem;\n  color: #92400e;\n}\n.fc-warn-icon { flex-shrink: 0; font-size: 1rem; }\n#fc-size-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));\n  gap: 12px;\n  margin-top: 8px;\n}\n.fc-size-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 12px;\n  text-align: center;\n}\n.fc-size-card canvas {\n  display: block;\n  margin: 0 auto 6px;\n  image-rendering: pixelated;\n  border: 1px solid #e2e8f0;\n  border-radius: 4px;\n}\n.fc-size-label {\n  font-size: 0.8rem;\n  font-weight: 600;\n  color: #475569;\n}\n.fc-size-usage {\n  font-size: 0.72rem;\n  color: #94a3b8;\n  margin-top: 2px;\n}\n.fc-size-ok { color: #16a34a; font-size: 0.75rem; margin-top: 3px; font-weight: 600; }\n.fc-size-warn { color: #dc2626; font-size: 0.75rem; margin-top: 3px; font-weight: 600; }\n\n#fc-previews { margin-top: 4px; }\n#fc-dark-toggle {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  cursor: pointer;\n  font-size: 0.85rem;\n  color: #475569;\n  user-select: none;\n  margin-bottom: 14px;\n}\n#fc-dark-toggle input { cursor: pointer; }\n\n.fc-preview-block {\n  margin-bottom: 20px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  overflow: hidden;\n}\n.fc-preview-label {\n  padding: 8px 14px;\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  border-bottom: 1px solid #e2e8f0;\n  background: #f8fafc;\n}\n.fc-preview-inner {\n  padding: 20px 20px;\n}\n.fc-preview-inner.fc-dark { background: #1e293b; }\n.fc-preview-inner.fc-light { background: #ffffff; }\n\n.fc-chrome-tab {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 6px 14px 6px 10px;\n  background: #fff;\n  border-radius: 8px 8px 0 0;\n  border: 1px solid #d1d5db;\n  border-bottom: none;\n  font-size: 0.82rem;\n  color: #374151;\n  min-width: 140px;\n  max-width: 200px;\n  box-shadow: 0 -1px 3px rgba(0,0,0,0.06);\n}\n.fc-chrome-tab.fc-dark { background: #374151; color: #f9fafb; border-color: #4b5563; }\n.fc-chrome-tab canvas { width: 16px; height: 16px; flex-shrink: 0; border-radius: 2px; }\n.fc-tab-title { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; flex: 1; }\n.fc-tab-close { font-size: 0.75rem; color: #9ca3af; flex-shrink: 0; }\n.fc-tab-bar { background: #e5e7eb; padding: 6px 8px 0; border-radius: 4px; display: inline-flex; }\n.fc-tab-bar.fc-dark { background: #1f2937; }\n\n.fc-safari-bar { background: #f2f2f7; padding: 10px 12px; border-radius: 4px; display: flex; align-items: center; gap: 10px; }\n.fc-safari-bar.fc-dark { background: #2c2c2e; }\n.fc-safari-urlbar { flex: 1; background: #fff; border-radius: 8px; padding: 5px 10px; font-size: 0.8rem; color: #6b7280; display: flex; align-items: center; gap: 6px; }\n.fc-safari-urlbar.fc-dark { background: #3a3a3c; color: #aeaeb2; }\n.fc-safari-urlbar canvas { width: 14px; height: 14px; border-radius: 2px; flex-shrink: 0; }\n\n.fc-firefox-bar { background: #f0f0f4; padding: 8px 10px 0; border-radius: 4px; display: inline-flex; }\n.fc-firefox-bar.fc-dark { background: #2b2a33; }\n.fc-firefox-tab { display: inline-flex; align-items: center; gap: 6px; padding: 7px 12px; background: #fff; border-radius: 6px 6px 0 0; font-size: 0.82rem; color: #374151; min-width: 140px; box-shadow: 0 -1px 4px rgba(0,0,0,0.08); }\n.fc-firefox-tab.fc-dark { background: #42414d; color: #fbfbfe; }\n.fc-firefox-tab canvas { width: 16px; height: 16px; flex-shrink: 0; border-radius: 2px; }\n\n.fc-bookmarks-bar { display: flex; align-items: center; gap: 2px; padding: 4px 10px; background: #f3f4f6; border-radius: 4px; border: 1px solid #e5e7eb; flex-wrap: wrap; }\n.fc-bookmarks-bar.fc-dark { background: #374151; border-color: #4b5563; }\n.fc-bookmark-item { display: inline-flex; align-items: center; gap: 5px; padding: 3px 8px; border-radius: 4px; font-size: 0.8rem; color: #374151; cursor: default; }\n.fc-bookmark-item:hover { background: rgba(0,0,0,0.06); }\n.fc-bookmark-item.fc-dark { color: #d1d5db; }\n.fc-bookmark-item canvas { width: 16px; height: 16px; border-radius: 2px; flex-shrink: 0; }\n\n.fc-google-result { padding: 4px 0; max-width: 480px; }\n.fc-google-site-row { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }\n.fc-google-site-row canvas { width: 18px; height: 18px; border-radius: 50%; flex-shrink: 0; }\n.fc-google-site-name { font-size: 0.82rem; color: #202124; font-weight: 600; }\n.fc-google-site-name.fc-dark { color: #bdc1c6; }\n.fc-google-site-url { font-size: 0.78rem; color: #5f6368; }\n.fc-google-title { font-size: 1.1rem; color: #1a0dab; font-weight: 400; line-height: 1.3; cursor: pointer; }\n.fc-google-title.fc-dark { color: #8ab4f8; }\n.fc-google-desc { font-size: 0.83rem; color: #4d5156; margin-top: 2px; }\n.fc-google-desc.fc-dark { color: #9aa0a6; }\n\n.fc-mobile-screen { display: inline-flex; flex-direction: column; gap: 20px; padding: 20px 16px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 20px; min-width: 200px; }\n.fc-mobile-screen.fc-dark { background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%); }\n.fc-mobile-row { display: flex; gap: 16px; justify-content: center; }\n.fc-app-icon-wrap { display: flex; flex-direction: column; align-items: center; gap: 5px; }\n.fc-app-icon { width: 60px; height: 60px; border-radius: 14px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.3); background: #fff; display: flex; align-items: center; justify-content: center; }\n.fc-app-icon canvas { width: 60px; height: 60px; border-radius: 14px; display: block; }\n.fc-app-icon-name { font-size: 0.7rem; color: #fff; text-align: center; max-width: 60px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; text-shadow: 0 1px 3px rgba(0,0,0,0.5); }\n\n.fc-taskbar { display: flex; align-items: center; gap: 2px; padding: 6px 8px; background: #1a1a2a; border-radius: 6px; }\n.fc-taskbar-item { display: flex; align-items: center; gap: 8px; padding: 5px 10px; border-radius: 4px; background: rgba(255,255,255,0.08); border-bottom: 2px solid #3b82f6; font-size: 0.8rem; color: #f1f5f9; }\n.fc-taskbar-item canvas { width: 20px; height: 20px; flex-shrink: 0; }\n\n#fc-placeholder-msg { margin-top: 28px; padding: 24px; background: #f8fafc; border: 1.5px dashed #cbd5e1; border-radius: 10px; text-align: center; color: #94a3b8; font-size: 0.9rem; }\n#fc-sections { display: none; }\n\u003c/style\u003e\n\u003cdiv id=\"fc-drop-zone\"\u003e\n  \u003cp\u003eここにファビコンをドラッグ＆ドロップ\u003c/p\u003e","title":"ファビコンチェッカー"},{"content":" バッテリー持続時間計算ツール スマートフォン・ノートPC・タブレット・IoTセンサー・ドローンなど、あらゆるデバイスのバッテリー稼働時間を即座に試算できます。必要な電池容量の逆算や充電時間の見積もりにも対応しています。\n稼働時間を計算 必要容量を逆算 充電時間を計算 デバイスプリセット スマートフォン タブレット ノートPC IoTセンサー ドローン ワイヤレスイヤホン スマートウォッチ 電動アシスト自転車 \u0026lt;h3\u0026gt;バッテリー容量\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt; \u0026lt;div\u0026gt; \u0026lt;label\u0026gt;容量（mAh）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bl-mah\u0026quot; value=\u0026quot;4000\u0026quot; min=\u0026quot;1\u0026quot; step=\u0026quot;100\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;label\u0026gt;バッテリー電圧（V）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bl-voltage\u0026quot; value=\u0026quot;3.7\u0026quot; min=\u0026quot;0.1\u0026quot; step=\u0026quot;0.1\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;h3\u0026gt;消費電力\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;power-toggle\u0026quot;\u0026gt; \u0026lt;label\u0026gt;\u0026lt;input type=\u0026quot;radio\u0026quot; name=\u0026quot;bl-power-mode\u0026quot; value=\u0026quot;ma\u0026quot; checked onchange=\u0026quot;blTogglePowerMode()\u0026quot;\u0026gt; 電流（mA）で入力\u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;\u0026lt;input type=\u0026quot;radio\u0026quot; name=\u0026quot;bl-power-mode\u0026quot; value=\u0026quot;w\u0026quot; onchange=\u0026quot;blTogglePowerMode()\u0026quot;\u0026gt; ワット数（W）で入力\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt; \u0026lt;div id=\u0026quot;bl-ma-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;消費電流（mA）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bl-ma\u0026quot; value=\u0026quot;150\u0026quot; min=\u0026quot;0.1\u0026quot; step=\u0026quot;10\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;bl-w-field\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt; \u0026lt;label\u0026gt;消費電力（W）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bl-w\u0026quot; value=\u0026quot;0.555\u0026quot; min=\u0026quot;0.001\u0026quot; step=\u0026quot;0.1\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;slider-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;効率係数: \u0026lt;strong id=\u0026quot;bl-eff-label\u0026quot;\u0026gt;85%\u0026lt;/strong\u0026gt; \u0026lt;span class=\u0026quot;badge\u0026quot;\u0026gt;実使用ロスを考慮\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bl-efficiency\u0026quot; min=\u0026quot;70\u0026quot; max=\u0026quot;95\u0026quot; value=\u0026quot;85\u0026quot; step=\u0026quot;1\u0026quot; oninput=\u0026quot;document.getElementById('bl-eff-label').textContent=this.value+'%'\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;slider-labels\u0026quot;\u0026gt;\u0026lt;span\u0026gt;70%（劣化）\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt;80%\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt;90%\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt;95%（理想）\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;calc-btn\u0026quot; onclick=\u0026quot;blCalculateRuntime()\u0026quot;\u0026gt;稼働時間を計算する\u0026lt;/button\u0026gt; -- バッテリーエネルギー -- 実効消費電力 -- 適用効率 -- 稼働時間（小数） -- 目標稼働時間の設定 目標時間（時間） 目標時間（分） 電圧（V） 消費電流（mA） 効率係数（%） 必要容量を計算する -- 最低限必要な容量 -- 推奨容量（+20%バッファ） -- 必要エネルギー（Wh） -- 適用効率 -- 充電時間シミュレーター バッテリー容量（mAh） 充電器出力（W） バッテリー電圧（V） 現在の残量（%） 充電効率: 90% 75%85%95%98% 充電時間を計算する -- 80%まで（急速充電目安） -- 100%まで（満充電） -- 充電レート（mA） -- 投入エネルギー（Wh） -- バッテリーを長持ちさせるコツ 完全放電を避ける。リチウムイオン電池は残量20〜80%の範囲で使うと寿命が延びます。0%まで使い切ることを繰り返すと劣化が加速します。 画面輝度を下げる。ディスプレイはモバイル機器で最大の電力消費源です。輝度を30%下げるだけで稼働時間が15〜20%改善する場合があります。 バックグラウンドアプリの更新を制限する。アプリが裏で常時同期していると、気づかないうちに10〜25%のバッテリーを消費します。 温度管理に気をつける。低温では放電が早まり、高温では劣化が加速します。理想的な使用温度は15〜25℃です。 省電力モードや機内モードを活用する。Wi-Fi・LTE・Bluetoothの無線送受信は電力消費が大きいです。不要な無線はオフに。 できるだけ低速充電を選ぶ。急速充電は熱を発生させ、長期的にバッテリーセルを傷めます。余裕があるときは普通充電が長寿命につながります。 充電器は適切な出力のものを使う。推奨外の充電器は効率を下げ、セルにストレスを与えます。メーカー推奨の出力を守りましょう。 長期保管は残量50%で。数週間以上使わない場合は、残量50%前後にしてから涼しい場所に保管してください。 計算方法について 基本的な計算式は次のとおりです：\n稼働時間（時間）＝ 容量（mAh）× 効率 ÷ 消費電流（mA）\nワット時で計算する場合：\n稼働時間（時間）＝ 容量（mAh）× 電圧（V）× 効率 ÷ 消費電力（W）÷ 1000\n効率係数は、バッテリーセルの発熱損失、電源管理ICでの変換ロス、負荷がかかった状態では定格容量まで完全に使えないといった実使用上の損失を考慮した補正値です。リチウムイオン電池の一般的な目安は85%。劣化したバッテリーや低温環境では70〜75%程度を見込んでください。\nIT機器の経費管理を効率化 → freee会計で固定資産を自動管理\n","permalink":"https://productivity-works.com/ja/tools/battery-life-calculator/","summary":"\u003cdiv id=\"bl-app\"\u003e\n\u003cstyle\u003e\n#bl-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic\", \"Meiryo\", sans-serif;\n  max-width: 780px;\n  margin: 0 auto;\n  color: #1a1a2e;\n  line-height: 1.7;\n}\n#bl-app h2 {\n  font-size: 1.4rem;\n  font-weight: 700;\n  margin: 1.6rem 0 0.8rem;\n  color: #16213e;\n}\n#bl-app h3 {\n  font-size: 1.05rem;\n  font-weight: 600;\n  margin: 1.2rem 0 0.5rem;\n  color: #0f3460;\n}\n#bl-app .card {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 1.4rem 1.6rem;\n  margin-bottom: 1.2rem;\n}\n#bl-app .card-blue {\n  background: #eff6ff;\n  border-color: #bfdbfe;\n}\n#bl-app .card-green {\n  background: #f0fdf4;\n  border-color: #bbf7d0;\n}\n#bl-app .card-amber {\n  background: #fffbeb;\n  border-color: #fde68a;\n}\n#bl-app .tabs {\n  display: flex;\n  gap: 0;\n  border-radius: 8px;\n  overflow: hidden;\n  border: 1px solid #cbd5e1;\n  margin-bottom: 1.2rem;\n}\n#bl-app .tab-btn {\n  flex: 1;\n  padding: 0.6rem 0.8rem;\n  background: #f1f5f9;\n  border: none;\n  cursor: pointer;\n  font-size: 0.85rem;\n  font-weight: 500;\n  color: #475569;\n  transition: background 0.15s, color 0.15s;\n}\n#bl-app .tab-btn.active {\n  background: #2563eb;\n  color: #fff;\n}\n#bl-app .tab-btn:hover:not(.active) {\n  background: #e2e8f0;\n}\n#bl-app .field-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n  margin-bottom: 0.8rem;\n}\n#bl-app .field-row.three {\n  grid-template-columns: 1fr 1fr 1fr;\n}\n@media (max-width: 540px) {\n  #bl-app .field-row,\n  #bl-app .field-row.three {\n    grid-template-columns: 1fr;\n  }\n}\n#bl-app label {\n  display: block;\n  font-size: 0.82rem;\n  font-weight: 600;\n  color: #374151;\n  margin-bottom: 0.3rem;\n}\n#bl-app input[type=\"number\"],\n#bl-app select {\n  width: 100%;\n  padding: 0.5rem 0.7rem;\n  border: 1px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 1rem;\n  background: #fff;\n  color: #1a1a2e;\n  box-sizing: border-box;\n  transition: border-color 0.15s;\n}\n#bl-app input[type=\"number\"]:focus,\n#bl-app select:focus {\n  outline: none;\n  border-color: #2563eb;\n  box-shadow: 0 0 0 3px rgba(37,99,235,0.12);\n}\n#bl-app .slider-row {\n  margin-bottom: 0.8rem;\n}\n#bl-app input[type=\"range\"] {\n  width: 100%;\n  accent-color: #2563eb;\n  margin-top: 0.3rem;\n}\n#bl-app .slider-labels {\n  display: flex;\n  justify-content: space-between;\n  font-size: 0.78rem;\n  color: #64748b;\n  margin-top: 0.1rem;\n}\n#bl-app .presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n}\n#bl-app .preset-btn {\n  padding: 0.35rem 0.85rem;\n  border: 1px solid #93c5fd;\n  border-radius: 20px;\n  background: #eff6ff;\n  color: #1d4ed8;\n  font-size: 0.82rem;\n  font-weight: 500;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#bl-app .preset-btn:hover {\n  background: #dbeafe;\n}\n#bl-app .calc-btn {\n  display: inline-block;\n  padding: 0.65rem 2rem;\n  background: #2563eb;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 1rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s;\n  margin-top: 0.4rem;\n}\n#bl-app .calc-btn:hover {\n  background: #1d4ed8;\n}\n#bl-app .result-box {\n  background: #fff;\n  border: 2px solid #2563eb;\n  border-radius: 12px;\n  padding: 1.2rem 1.4rem;\n  margin-top: 1rem;\n  display: none;\n}\n#bl-app .result-box.visible {\n  display: block;\n}\n#bl-app .result-main {\n  font-size: 2rem;\n  font-weight: 800;\n  color: #2563eb;\n  margin-bottom: 0.3rem;\n}\n#bl-app .result-sub {\n  color: #475569;\n  font-size: 0.95rem;\n}\n#bl-app .result-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 0.8rem;\n  margin-top: 0.8rem;\n}\n#bl-app .result-item {\n  background: #f1f5f9;\n  border-radius: 8px;\n  padding: 0.7rem 1rem;\n}\n#bl-app .result-item .lbl {\n  font-size: 0.78rem;\n  color: #64748b;\n  font-weight: 600;\n}\n#bl-app .result-item .val {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #1e293b;\n  margin-top: 0.1rem;\n}\n#bl-app .tips-list {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n#bl-app .tips-list li {\n  padding: 0.45rem 0 0.45rem 1.6rem;\n  position: relative;\n  font-size: 0.95rem;\n  border-bottom: 1px solid #e2e8f0;\n}\n#bl-app .tips-list li:last-child {\n  border-bottom: none;\n}\n#bl-app .tips-list li::before {\n  content: \"✓\";\n  position: absolute;\n  left: 0;\n  color: #16a34a;\n  font-weight: 700;\n}\n#bl-app .cta-box {\n  background: #fef3c7;\n  border: 1px solid #fbbf24;\n  border-radius: 10px;\n  padding: 1rem 1.4rem;\n  margin-top: 1.6rem;\n  font-size: 0.95rem;\n}\n#bl-app .cta-box a {\n  color: #b45309;\n  font-weight: 600;\n}\n#bl-app .section-divider {\n  border: none;\n  border-top: 2px solid #e2e8f0;\n  margin: 1.6rem 0;\n}\n#bl-app .power-toggle {\n  display: flex;\n  gap: 0.8rem;\n  margin-bottom: 0.8rem;\n}\n#bl-app .power-toggle label {\n  display: flex;\n  align-items: center;\n  gap: 0.3rem;\n  font-size: 0.9rem;\n  font-weight: 500;\n  cursor: pointer;\n}\n#bl-app .badge {\n  display: inline-block;\n  background: #dcfce7;\n  color: #15803d;\n  font-size: 0.75rem;\n  font-weight: 700;\n  padding: 0.15rem 0.5rem;\n  border-radius: 10px;\n  vertical-align: middle;\n  margin-left: 0.3rem;\n}\n\u003c/style\u003e\n\u003ch2\u003eバッテリー持続時間計算ツール\u003c/h2\u003e\n\u003cp\u003eスマートフォン・ノートPC・タブレット・IoTセンサー・ドローンなど、あらゆるデバイスのバッテリー稼働時間を即座に試算できます。必要な電池容量の逆算や充電時間の見積もりにも対応しています。\u003c/p\u003e","title":"バッテリー持続時間計算ツール - デバイスの稼働時間を推定"},{"content":"本ページにはアフィリエイトリンクが含まれています。\nローン返済計算ツール 借入金額・金利・返済期間を入力すると、月々の返済額と総利息コストを瞬時に計算します。\n借入金額（円） $5,000$200,000$500,000 年利（%） 1%6.5%15% 返済期間（年） 1年15年30年 月々の返済額 $1,742 借入元金 $200,000 総利息 $113,538 返済総額 $313,538 前提条件： 固定金利・元利均等返済（アモチゼーション）で計算。住宅ローンの場合、固定資産税・火災保険・団体信用生命保険等は含みません。 利息を節約する方法 繰り上げ返済を活用する: 月々わずかな繰り上げ返済でも、総利息を大幅に削減し返済期間を短縮できます 金利低下時に借り換える: 現在の金利より1%以上低くなったタイミングでの借り換えが有効です 返済期間を短くする: 15年ローンは月々の返済額は高くなりますが、30年ローンと比べて総利息を劇的に削減できます 信用情報を改善する: 信用スコアが高いほど将来のローン金利が下がります よくある質問 Q: このツールはどんなローンに対応していますか？ 固定金利・元利均等返済のあらゆるローンに対応しています。住宅ローン・自動車ローン・無担保ローン・学生ローンなど。\nQ: 実際の返済額が試算と異なるのはなぜですか？ 実際の返済額には固定資産税・火災保険・団体信用生命保険（住宅ローンの場合）が含まれることがあり、これらは本ツールの計算には含まれていません。住宅ローンの詳細な試算には住宅ローン計算ツール をご利用ください。\nQ: 借金返済と投資、どちらを優先すべきですか？ 一般的には、ローンの金利が期待投資リターン（株式の歴史的平均で年7〜10%程度）より高い場合は借金返済を優先しましょう。金利が低い（年4〜5%未満）場合は、長期的に見て投資の方が有利なケースもあります。\n完済後にすべきこと ローンを完済したら、その返済額分を資産形成に振り向けましょう。\n緊急資金を確保する — 生活費の3〜6か月分を高金利の普通預金・定期預金に積み立てる 資産運用を始める — 複利計算ツール で、解放された返済額を投資した場合の成長をシミュレーション 予算計画を立てる — 予算プランナー で増えた余剰資金を賢く配分する 手取り額を把握する — 給与計算ツール で実際の手取り収入を確認する 関連ツール 老後資金計算ツール — iDeCo・NISAの将来資産をシミュレーション 複利計算ツール — 投資の長期成長を確認 予算プランナー — 月次支出を最適化 給与計算ツール — 手取り額を計算 住宅ローン計算ツール — 税金・保険込みの住宅ローン試算 FX損益計算ツール — FXトレードの損益シミュレーション 資産管理を効率化 → freee会計で家計を自動管理 ","permalink":"https://productivity-works.com/ja/tools/loan-repayment-calculator/","summary":"\u003cp\u003e\u003cem\u003e本ページにはアフィリエイトリンクが含まれています。\u003c/em\u003e\u003c/p\u003e\n\u003ch1 id=\"ローン返済計算ツール\"\u003eローン返済計算ツール\u003c/h1\u003e\n\u003cp\u003e借入金額・金利・返済期間を入力すると、\u003cstrong\u003e月々の返済額\u003c/strong\u003eと\u003cstrong\u003e総利息コスト\u003c/strong\u003eを瞬時に計算します。\u003c/p\u003e\n\u003cdiv id=\"loan-calc\" style=\"max-width:640px;margin:0 auto;padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e借入金額（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"loanAmt\" min=\"5000\" max=\"500000\" step=\"5000\" value=\"200000\" oninput=\"calcLoan()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e$5,000\u003c/span\u003e\u003cspan id=\"loanAmtVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e$200,000\u003c/span\u003e\u003cspan\u003e$500,000\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e年利（%）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"loanRate\" min=\"1\" max=\"15\" step=\"0.25\" value=\"6.5\" oninput=\"calcLoan()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1%\u003c/span\u003e\u003cspan id=\"loanRateVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e6.5%\u003c/span\u003e\u003cspan\u003e15%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:24px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e返済期間（年）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"loanYears\" min=\"1\" max=\"30\" step=\"1\" value=\"15\" oninput=\"calcLoan()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1年\u003c/span\u003e\u003cspan id=\"loanYearsVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e15年\u003c/span\u003e\u003cspan\u003e30年\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#1e40af;color:white;border-radius:8px;padding:20px;text-align:center;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:14px;margin-bottom:4px;\"\u003e月々の返済額\u003c/div\u003e\n\u003cdiv id=\"monthlyPayment\" style=\"font-size:36px;font-weight:bold;\"\u003e$1,742\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"background:#e0f2fe;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e借入元金\u003c/div\u003e\n\u003cdiv id=\"loanPrincipal\" style=\"font-size:16px;font-weight:bold;color:#0369a1;\"\u003e$200,000\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#fee2e2;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e総利息\u003c/div\u003e\n\u003cdiv id=\"totalInterest\" style=\"font-size:16px;font-weight:bold;color:#dc2626;\"\u003e$113,538\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#fef3c7;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e返済総額\u003c/div\u003e\n\u003cdiv id=\"totalCost\" style=\"font-size:16px;font-weight:bold;color:#d97706;\"\u003e$313,538\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f1f5f9;border-radius:8px;padding:12px;font-size:13px;color:#475569;\"\u003e\n\u003cstrong\u003e前提条件：\u003c/strong\u003e 固定金利・元利均等返済（アモチゼーション）で計算。住宅ローンの場合、固定資産税・火災保険・団体信用生命保険等は含みません。\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction calcLoan(){\n  var P=parseInt(document.getElementById('loanAmt').value);\n  var r=parseFloat(document.getElementById('loanRate').value)/100/12;\n  var n=parseInt(document.getElementById('loanYears').value)*12;\n  var payment=P*(r*Math.pow(1+r,n))/(Math.pow(1+r,n)-1);\n  var totalCost=payment*n;\n  var totalInterest=totalCost-P;\n\n  document.getElementById('loanAmtVal').textContent='$'+P.toLocaleString();\n  document.getElementById('loanRateVal').textContent=(r*1200).toFixed(2)+'%';\n  var yrs=document.getElementById('loanYears').value;\n  document.getElementById('loanYearsVal').textContent=yrs+(yrs==='1'?' 年':' 年');\n  document.getElementById('monthlyPayment').textContent='$'+Math.floor(payment).toLocaleString();\n  document.getElementById('loanPrincipal').textContent='$'+P.toLocaleString();\n  document.getElementById('totalInterest').textContent='$'+Math.floor(totalInterest).toLocaleString();\n  document.getElementById('totalCost').textContent='$'+Math.floor(totalCost).toLocaleString();\n}\ncalcLoan();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"利息を節約する方法\"\u003e利息を節約する方法\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e繰り上げ返済を活用する\u003c/strong\u003e: 月々わずかな繰り上げ返済でも、総利息を大幅に削減し返済期間を短縮できます\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e金利低下時に借り換える\u003c/strong\u003e: 現在の金利より1%以上低くなったタイミングでの借り換えが有効です\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e返済期間を短くする\u003c/strong\u003e: 15年ローンは月々の返済額は高くなりますが、30年ローンと比べて総利息を劇的に削減できます\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e信用情報を改善する\u003c/strong\u003e: 信用スコアが高いほど将来のローン金利が下がります\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"よくある質問\"\u003eよくある質問\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eQ: このツールはどんなローンに対応していますか？\u003c/strong\u003e\n固定金利・元利均等返済のあらゆるローンに対応しています。住宅ローン・自動車ローン・無担保ローン・学生ローンなど。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eQ: 実際の返済額が試算と異なるのはなぜですか？\u003c/strong\u003e\n実際の返済額には固定資産税・火災保険・団体信用生命保険（住宅ローンの場合）が含まれることがあり、これらは本ツールの計算には含まれていません。住宅ローンの詳細な試算には\u003ca href=\"https://productivity-works.com/tools/mortgage-calculator/\"\u003e住宅ローン計算ツール\u003c/a\u003e\nをご利用ください。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eQ: 借金返済と投資、どちらを優先すべきですか？\u003c/strong\u003e\n一般的には、ローンの金利が期待投資リターン（株式の歴史的平均で年7〜10%程度）より高い場合は借金返済を優先しましょう。金利が低い（年4〜5%未満）場合は、長期的に見て投資の方が有利なケースもあります。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"完済後にすべきこと\"\u003e完済後にすべきこと\u003c/h2\u003e\n\u003cp\u003eローンを完済したら、その返済額分を資産形成に振り向けましょう。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e緊急資金を確保する\u003c/strong\u003e — 生活費の3〜6か月分を高金利の普通預金・定期預金に積み立てる\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e資産運用を始める\u003c/strong\u003e — \u003ca href=\"https://productivity-works.com/tools/compound-interest-calculator/\"\u003e複利計算ツール\u003c/a\u003e\nで、解放された返済額を投資した場合の成長をシミュレーション\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e予算計画を立てる\u003c/strong\u003e — \u003ca href=\"https://productivity-works.com/tools/budget-planner/\"\u003e予算プランナー\u003c/a\u003e\nで増えた余剰資金を賢く配分する\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e手取り額を把握する\u003c/strong\u003e — \u003ca href=\"https://productivity-works.com/tools/salary-calculator/\"\u003e給与計算ツール\u003c/a\u003e\nで実際の手取り収入を確認する\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/tools/retirement-calculator/\"\u003e老後資金計算ツール\u003c/a\u003e\n — iDeCo・NISAの将来資産をシミュレーション\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/tools/compound-interest-calculator/\"\u003e複利計算ツール\u003c/a\u003e\n — 投資の長期成長を確認\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/tools/budget-planner/\"\u003e予算プランナー\u003c/a\u003e\n — 月次支出を最適化\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/tools/salary-calculator/\"\u003e給与計算ツール\u003c/a\u003e\n — 手取り額を計算\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/tools/mortgage-calculator/\"\u003e住宅ローン計算ツール\u003c/a\u003e\n — 税金・保険込みの住宅ローン試算\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/tools/forex-profit-calculator/\"\u003eFX損益計算ツール\u003c/a\u003e\n — FXトレードの損益シミュレーション\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003cblockquote\u003e\n\u003cp\u003e資産管理を効率化 → \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計で家計を自動管理\u003c/a\u003e\n\u003c/p\u003e","title":"ローン返済計算ツール | 月々の返済額を無料で試算"},{"content":" 体脂肪率計算ツール 男性 女性 身長 cm 体重 kg ウエスト周囲径 cm 首周囲径 cm ヒップ周囲径 cm 年齢 歳 体脂肪率を計算する\n--% -- 必須脂肪 アスリート フィットネス 平均 肥満 --% 米海軍式 --% BMI推定法 -- kg 除脂肪体重 -- kg 体脂肪量 --% 体脂肪率 --% 除脂肪（筋肉・骨・水分） 計算方法について：「米海軍式（US Navy法）」は、ウエスト・首・ヒップ（女性）の周囲径を使った対数計算式で、米軍で採用されている実績ある方法です。「BMI推定法」はDeurenbergらの式（BF% = 1.20×BMI + 0.23×年齢 − 10.8×性別係数 − 5.4）を使用します。両者の平均値を表示しています。より正確な計測にはDEXA法（二重エネルギーX線吸収法）を推奨します。 体脂肪率カテゴリ一覧 カテゴリ男性女性 必須脂肪2〜5%10〜13% アスリート6〜13%14〜20% フィットネス14〜17%21〜24% 平均的18〜24%25〜31% 肥満25%以上32%以上 健康管理も仕事も効率化 → freee会計で日々の管理を自動化\n関連ツール BMI計算 → BMI計算ツール カロリー計算 → カロリー計算ツール 水分摂取量計算 → 水分摂取量計算ツール ","permalink":"https://productivity-works.com/ja/tools/body-fat-calculator/","summary":"\u003cdiv id=\"bf-app\"\u003e\n\u003cstyle\u003e\n#bf-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Yu Gothic UI', Meiryo, sans-serif;\n  max-width: 720px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#bf-app * { box-sizing: border-box; }\n#bf-app h2 {\n  font-size: 1.3rem;\n  font-weight: 700;\n  margin: 1.5rem 0 0.75rem;\n  color: #0f3460;\n  border-left: 4px solid #e94560;\n  padding-left: 0.6rem;\n}\n#bf-app .gender-row {\n  display: flex;\n  gap: 12px;\n  margin-bottom: 1.2rem;\n}\n#bf-app .gender-btn {\n  flex: 1;\n  padding: 12px;\n  border: 2px solid #dde3f0;\n  border-radius: 10px;\n  background: #f8faff;\n  cursor: pointer;\n  font-size: 1rem;\n  font-weight: 700;\n  color: #555;\n  transition: all 0.2s;\n}\n#bf-app .gender-btn.active {\n  border-color: #e94560;\n  background: #fff0f3;\n  color: #e94560;\n}\n#bf-app .input-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 1.2rem;\n}\n#bf-app .input-group {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n#bf-app .input-group label {\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #555;\n  letter-spacing: 0.03em;\n}\n#bf-app .input-group .input-wrap {\n  position: relative;\n}\n#bf-app .input-group input {\n  width: 100%;\n  padding: 10px 44px 10px 12px;\n  border: 2px solid #dde3f0;\n  border-radius: 8px;\n  font-size: 1rem;\n  background: #f8faff;\n  transition: border-color 0.2s;\n  outline: none;\n}\n#bf-app .input-group input:focus {\n  border-color: #0f3460;\n  background: #fff;\n}\n#bf-app .input-group .unit {\n  position: absolute;\n  right: 10px;\n  top: 50%;\n  transform: translateY(-50%);\n  font-size: 0.78rem;\n  color: #888;\n  font-weight: 700;\n  pointer-events: none;\n}\n#bf-app .calc-btn {\n  width: 100%;\n  padding: 14px;\n  background: linear-gradient(135deg, #0f3460, #e94560);\n  color: #fff;\n  border: none;\n  border-radius: 10px;\n  font-size: 1.1rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.2s;\n  margin-bottom: 1.5rem;\n  letter-spacing: 0.05em;\n}\n#bf-app .calc-btn:hover { opacity: 0.9; }\n#bf-app .results {\n  display: none;\n  animation: bfFadeIn 0.4s ease;\n}\n@keyframes bfFadeIn {\n  from { opacity: 0; transform: translateY(12px); }\n  to   { opacity: 1; transform: translateY(0); }\n}\n#bf-app .result-hero {\n  text-align: center;\n  background: linear-gradient(135deg, #0f3460 0%, #16213e 100%);\n  border-radius: 14px;\n  padding: 2rem 1rem 1.5rem;\n  color: #fff;\n  margin-bottom: 1.2rem;\n}\n#bf-app .result-hero .pct {\n  font-size: 3.5rem;\n  font-weight: 800;\n  line-height: 1;\n  margin-bottom: 0.3rem;\n}\n#bf-app .result-hero .cat-badge {\n  display: inline-block;\n  padding: 4px 18px;\n  border-radius: 20px;\n  font-size: 0.95rem;\n  font-weight: 700;\n  margin-bottom: 1rem;\n}\n#bf-app .gauge-container {\n  margin: 0.8rem auto 0;\n  max-width: 420px;\n}\n#bf-app .gauge-bar {\n  height: 18px;\n  border-radius: 9px;\n  background: linear-gradient(to right, #4caf50, #8bc34a, #ffeb3b, #ff9800, #f44336);\n  position: relative;\n  overflow: visible;\n}\n#bf-app .gauge-needle {\n  position: absolute;\n  top: -6px;\n  width: 4px;\n  height: 30px;\n  background: #fff;\n  border-radius: 2px;\n  transform: translateX(-50%);\n  box-shadow: 0 0 0 2px rgba(0,0,0,0.4);\n  transition: left 0.6s cubic-bezier(0.34,1.56,0.64,1);\n}\n#bf-app .gauge-labels {\n  display: flex;\n  justify-content: space-between;\n  margin-top: 6px;\n  font-size: 0.65rem;\n  color: rgba(255,255,255,0.75);\n}\n#bf-app .stats-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n  margin-bottom: 1.2rem;\n}\n#bf-app .stat-card {\n  background: #f8faff;\n  border: 2px solid #dde3f0;\n  border-radius: 12px;\n  padding: 1rem;\n  text-align: center;\n}\n#bf-app .stat-card .stat-val {\n  font-size: 1.75rem;\n  font-weight: 800;\n  color: #0f3460;\n}\n#bf-app .stat-card .stat-lbl {\n  font-size: 0.76rem;\n  color: #777;\n  font-weight: 600;\n  margin-top: 2px;\n}\n#bf-app .chart-wrap {\n  display: flex;\n  align-items: center;\n  gap: 1.5rem;\n  background: #f8faff;\n  border: 2px solid #dde3f0;\n  border-radius: 12px;\n  padding: 1.2rem 1.5rem;\n  margin-bottom: 1.2rem;\n}\n#bf-app canvas#bfPie {\n  flex-shrink: 0;\n}\n#bf-app .legend { flex: 1; }\n#bf-app .legend-item {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 10px;\n  font-size: 0.9rem;\n}\n#bf-app .legend-dot {\n  width: 14px;\n  height: 14px;\n  border-radius: 4px;\n  flex-shrink: 0;\n}\n#bf-app .legend-val {\n  font-weight: 800;\n  font-size: 1rem;\n  color: #0f3460;\n}\n#bf-app .methods-note {\n  background: #fffbf0;\n  border: 1px solid #ffe082;\n  border-radius: 10px;\n  padding: 1rem 1.2rem;\n  font-size: 0.84rem;\n  color: #7a6000;\n  line-height: 1.7;\n  margin-bottom: 1.2rem;\n}\n#bf-app .category-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.85rem;\n  margin-bottom: 1.5rem;\n}\n#bf-app .category-table th {\n  background: #0f3460;\n  color: #fff;\n  padding: 8px 12px;\n  text-align: left;\n  font-weight: 700;\n}\n#bf-app .category-table td {\n  padding: 7px 12px;\n  border-bottom: 1px solid #eee;\n}\n#bf-app .category-table tr:nth-child(even) td { background: #f8faff; }\n#bf-app .category-table tr.highlight td {\n  background: #fff0f3 !important;\n  font-weight: 700;\n  color: #e94560;\n}\n#bf-app .cta-box {\n  background: linear-gradient(135deg, #f0f4ff, #fff0f3);\n  border: 2px solid #dde3f0;\n  border-radius: 12px;\n  padding: 1.2rem 1.5rem;\n  margin-top: 1.5rem;\n  font-size: 0.92rem;\n  line-height: 1.7;\n  color: #333;\n}\n#bf-app .cta-box p { margin: 0; }\n#bf-app .cta-box a { color: #0f3460; font-weight: 700; }\n#bf-app .error-msg {\n  color: #e94560;\n  font-size: 0.88rem;\n  font-weight: 600;\n  margin-bottom: 0.8rem;\n  display: none;\n  padding: 8px 12px;\n  background: #fff0f3;\n  border-radius: 8px;\n  border: 1px solid #ffc0cb;\n}\n@media (max-width: 500px) {\n  #bf-app .input-grid { grid-template-columns: 1fr; }\n  #bf-app .stats-grid { grid-template-columns: 1fr 1fr; }\n  #bf-app .chart-wrap { flex-direction: column; }\n}\n\u003c/style\u003e\n\u003ch2\u003e体脂肪率計算ツール\u003c/h2\u003e\n\u003cdiv class=\"gender-row\"\u003e\n  \u003cbutton class=\"gender-btn active\" id=\"btnMale\" onclick=\"bfSetGender('male')\"\u003e男性\u003c/button\u003e\n  \u003cbutton class=\"gender-btn\" id=\"btnFemale\" onclick=\"bfSetGender('female')\"\u003e女性\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"input-grid\"\u003e\n  \u003cdiv class=\"input-group\"\u003e\n    \u003clabel\u003e身長\u003c/label\u003e\n    \u003cdiv class=\"input-wrap\"\u003e\n      \u003cinput type=\"number\" id=\"bfHeight\" placeholder=\"170\" min=\"100\" max=\"250\" value=\"\"\u003e\n      \u003cspan class=\"unit\"\u003ecm\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"input-group\"\u003e\n    \u003clabel\u003e体重\u003c/label\u003e\n    \u003cdiv class=\"input-wrap\"\u003e\n      \u003cinput type=\"number\" id=\"bfWeight\" placeholder=\"65\" min=\"30\" max=\"300\" value=\"\"\u003e\n      \u003cspan class=\"unit\"\u003ekg\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"input-group\"\u003e\n    \u003clabel\u003eウエスト周囲径\u003c/label\u003e\n    \u003cdiv class=\"input-wrap\"\u003e\n      \u003cinput type=\"number\" id=\"bfWaist\" placeholder=\"82\" min=\"40\" max=\"200\" value=\"\"\u003e\n      \u003cspan class=\"unit\"\u003ecm\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"input-group\"\u003e\n    \u003clabel\u003e首周囲径\u003c/label\u003e\n    \u003cdiv class=\"input-wrap\"\u003e\n      \u003cinput type=\"number\" id=\"bfNeck\" placeholder=\"37\" min=\"20\" max=\"80\" value=\"\"\u003e\n      \u003cspan class=\"unit\"\u003ecm\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"input-group\" id=\"hipGroup\" style=\"display:none;\"\u003e\n    \u003clabel\u003eヒップ周囲径\u003c/label\u003e\n    \u003cdiv class=\"input-wrap\"\u003e\n      \u003cinput type=\"number\" id=\"bfHip\" placeholder=\"94\" min=\"50\" max=\"200\" value=\"\"\u003e\n      \u003cspan class=\"unit\"\u003ecm\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"input-group\"\u003e\n    \u003clabel\u003e年齢\u003c/label\u003e\n    \u003cdiv class=\"input-wrap\"\u003e\n      \u003cinput type=\"number\" id=\"bfAge\" placeholder=\"30\" min=\"10\" max=\"120\" value=\"\"\u003e\n      \u003cspan class=\"unit\"\u003e歳\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"error-msg\" id=\"bfError\"\u003e\u003c/div\u003e\n\u003cp\u003e\u003cbutton class=\"calc-btn\" onclick=\"bfCalculate()\"\u003e体脂肪率を計算する\u003c/button\u003e\u003c/p\u003e","title":"体脂肪率計算ツール - 体脂肪率を簡単推定"},{"content":" \u0026#10003; 検証 \u0026#9776; 整形 \u0026#8644; 圧縮 \u0026#9654; ツリー表示 \u0026#10005; クリア \u0026#8613; JSONファイルを開く インデント: スペース 2 スペース 4 タブ サンプル: — サンプルを読み込む — ユーザーオブジェクト 配列 ネスト構造 \u0026#128193; .json ファイルをここにドロップ、またはクリックして選択 \u0026#9432; JSONを貼り付け・入力して「検証」または「整形」をクリックしてください。 パス: — 入力 出力 コピー ツリービュー Raw 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール JSON⇔CSV変換 → JSON⇔CSV変換ツール HTMLを整形 → HTML整形ツール 正規表現テスト → 正規表現テスター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 ChatGPT API初心者向け完全ガイド【2026年版・サンプルコード付き】 ","permalink":"https://productivity-works.com/ja/tools/json-validator/","summary":"\u003cdiv id=\"jv-app\"\u003e\n\u003cstyle\u003e\n#jv-app *, #jv-app *::before, #jv-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n#jv-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", Roboto, sans-serif;\n  font-size: 14px;\n  color: #1e293b;\n  line-height: 1.6;\n}\n\n/* ── Toolbar ── */\n#jv-app .jv-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n  margin-bottom: 10px;\n}\n\n#jv-app .jv-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 7px 14px;\n  border: none;\n  border-radius: 6px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n  white-space: nowrap;\n  line-height: 1;\n}\n#jv-app .jv-btn:active { transform: scale(0.97); }\n#jv-app .jv-btn-primary   { background: #2563eb; color: #fff; }\n#jv-app .jv-btn-primary:hover   { background: #1d4ed8; }\n#jv-app .jv-btn-secondary { background: #e2e8f0; color: #334155; }\n#jv-app .jv-btn-secondary:hover { background: #cbd5e1; }\n#jv-app .jv-btn-success   { background: #16a34a; color: #fff; }\n#jv-app .jv-btn-success:hover   { background: #15803d; }\n#jv-app .jv-btn-orange    { background: #d97706; color: #fff; }\n#jv-app .jv-btn-orange:hover    { background: #b45309; }\n#jv-app .jv-btn-danger    { background: #dc2626; color: #fff; }\n#jv-app .jv-btn-danger:hover    { background: #b91c1c; }\n#jv-app .jv-btn-purple    { background: #7c3aed; color: #fff; }\n#jv-app .jv-btn-purple:hover    { background: #6d28d9; }\n\n/* ── Options bar ── */\n#jv-app .jv-options-bar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  align-items: center;\n  padding: 8px 12px;\n  background: #f1f5f9;\n  border-radius: 8px;\n  margin-bottom: 10px;\n}\n\n#jv-app .jv-select {\n  padding: 6px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  background: #fff;\n  color: #334155;\n  cursor: pointer;\n}\n#jv-app .jv-options-bar label {\n  font-size: 13px;\n  color: #475569;\n  display: flex;\n  align-items: center;\n  gap: 5px;\n}\n\n/* ── Panels ── */\n#jv-app .jv-panels {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n  margin-bottom: 12px;\n}\n@media (max-width: 660px) {\n  #jv-app .jv-panels { grid-template-columns: 1fr; }\n}\n\n#jv-app .jv-pane-label {\n  font-size: 11px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #64748b;\n  margin-bottom: 5px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n#jv-app .jv-pane-label .jv-copy-btn {\n  padding: 3px 9px;\n  background: #e2e8f0;\n  color: #334155;\n  border: none;\n  border-radius: 5px;\n  font-size: 11px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s;\n  text-transform: none;\n  letter-spacing: 0;\n}\n#jv-app .jv-pane-label .jv-copy-btn:hover { background: #cbd5e1; }\n\n#jv-app textarea {\n  width: 100%;\n  height: 320px;\n  padding: 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-family: \"JetBrains Mono\", \"Fira Code\", \"Cascadia Code\", Consolas, monospace;\n  font-size: 12.5px;\n  line-height: 1.65;\n  resize: vertical;\n  background: #f8fafc;\n  color: #0f172a;\n  transition: border-color 0.15s;\n}\n#jv-app textarea:focus { outline: none; border-color: #2563eb; }\n#jv-app textarea.jv-error  { border-color: #dc2626; background: #fff5f5; }\n#jv-app textarea.jv-valid  { border-color: #16a34a; }\n\n/* ── Status badge ── */\n#jv-app .jv-status {\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n  padding: 10px 14px;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 500;\n  margin-bottom: 12px;\n  min-height: 42px;\n}\n#jv-app .jv-status.jv-status-idle    { background: #f1f5f9; color: #64748b; }\n#jv-app .jv-status.jv-status-valid   { background: #f0fdf4; color: #15803d; border: 1px solid #bbf7d0; }\n#jv-app .jv-status.jv-status-error   { background: #fef2f2; color: #b91c1c; border: 1px solid #fecaca; }\n#jv-app .jv-status-icon { font-size: 16px; line-height: 1.3; flex-shrink: 0; }\n#jv-app .jv-status-msg  { flex: 1; word-break: break-all; font-family: \"JetBrains Mono\", Consolas, monospace; font-size: 12px; }\n\n/* ── Stats bar ── */\n#jv-app .jv-stats {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 12px;\n}\n#jv-app .jv-stat-pill {\n  padding: 4px 11px;\n  background: #e0f2fe;\n  color: #0369a1;\n  border-radius: 20px;\n  font-size: 12px;\n  font-weight: 600;\n}\n\n/* ── Path display ── */\n#jv-app .jv-path-bar {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 7px 12px;\n  background: #fefce8;\n  border: 1px solid #fde68a;\n  border-radius: 7px;\n  margin-bottom: 10px;\n  font-size: 12px;\n  font-family: \"JetBrains Mono\", Consolas, monospace;\n  color: #92400e;\n  min-height: 34px;\n  word-break: break-all;\n}\n#jv-app .jv-path-bar .jv-path-label {\n  font-weight: 700;\n  flex-shrink: 0;\n  color: #78350f;\n}\n\n/* ── Tree view ── */\n#jv-app .jv-tree-wrap {\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  background: #f8fafc;\n  padding: 12px 14px;\n  max-height: 420px;\n  overflow: auto;\n  font-family: \"JetBrains Mono\", \"Fira Code\", Consolas, monospace;\n  font-size: 12px;\n  line-height: 1.7;\n  display: none;\n}\n#jv-app .jv-tree-wrap.jv-visible { display: block; }\n\n#jv-app .jv-tree-node { padding-left: 0; }\n#jv-app .jv-tree-children { padding-left: 18px; border-left: 1.5px dotted #cbd5e1; margin-left: 6px; }\n\n#jv-app .jv-node-row {\n  display: flex;\n  align-items: baseline;\n  gap: 4px;\n  cursor: pointer;\n  border-radius: 4px;\n  padding: 1px 4px;\n  user-select: none;\n}\n#jv-app .jv-node-row:hover { background: #e0f2fe; }\n\n#jv-app .jv-toggle {\n  display: inline-block;\n  width: 14px;\n  text-align: center;\n  color: #94a3b8;\n  font-size: 10px;\n  flex-shrink: 0;\n}\n#jv-app .jv-key   { color: #7c3aed; font-weight: 600; }\n#jv-app .jv-colon { color: #64748b; margin-right: 2px; }\n#jv-app .jv-val-string  { color: #059669; }\n#jv-app .jv-val-number  { color: #2563eb; }\n#jv-app .jv-val-bool    { color: #d97706; font-weight: 600; }\n#jv-app .jv-val-null    { color: #94a3b8; font-style: italic; }\n#jv-app .jv-val-bracket { color: #64748b; }\n#jv-app .jv-count       { color: #94a3b8; font-size: 10px; margin-left: 3px; }\n\n/* ── Tab group ── */\n#jv-app .jv-tabs {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #e2e8f0;\n  margin-bottom: 10px;\n}\n#jv-app .jv-tab {\n  padding: 7px 16px;\n  font-size: 13px;\n  font-weight: 600;\n  color: #64748b;\n  border: none;\n  background: none;\n  cursor: pointer;\n  border-bottom: 2px solid transparent;\n  margin-bottom: -2px;\n  transition: color 0.15s, border-color 0.15s;\n}\n#jv-app .jv-tab:hover { color: #2563eb; }\n#jv-app .jv-tab.active { color: #2563eb; border-bottom-color: #2563eb; }\n\n/* ── File upload ── */\n#jv-app .jv-upload-zone {\n  border: 2px dashed #94a3b8;\n  border-radius: 8px;\n  padding: 14px 20px;\n  text-align: center;\n  font-size: 13px;\n  color: #64748b;\n  cursor: pointer;\n  transition: border-color 0.15s, background 0.15s;\n  margin-bottom: 10px;\n}\n#jv-app .jv-upload-zone:hover { border-color: #2563eb; background: #eff6ff; color: #1d4ed8; }\n#jv-app input[type=\"file\"] { display: none; }\n\n/* ── Output section ── */\n#jv-app .jv-output-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 5px;\n}\n\u003c/style\u003e\n\u003c!-- ── Toolbar ── --\u003e\n\u003cdiv class=\"jv-toolbar\"\u003e\n  \u003cbutton class=\"jv-btn jv-btn-primary\" onclick=\"jvValidate()\"\u003e\u0026#10003; 検証\u003c/button\u003e\n  \u003cbutton class=\"jv-btn jv-btn-success\" onclick=\"jvFormat()\"\u003e\u0026#9776; 整形\u003c/button\u003e\n  \u003cbutton class=\"jv-btn jv-btn-orange\"  onclick=\"jvMinify()\"\u003e\u0026#8644; 圧縮\u003c/button\u003e\n  \u003cbutton class=\"jv-btn jv-btn-purple\"  onclick=\"jvToggleTree()\"\u003e\u0026#9654; ツリー表示\u003c/button\u003e\n  \u003cbutton class=\"jv-btn jv-btn-secondary\" onclick=\"jvClear()\"\u003e\u0026#10005; クリア\u003c/button\u003e\n  \u003clabel class=\"jv-btn jv-btn-secondary\" style=\"cursor:pointer;\" for=\"jv-file-input\"\u003e\u0026#8613; JSONファイルを開く\u003c/label\u003e\n  \u003cinput type=\"file\" id=\"jv-file-input\" accept=\".json,application/json\" onchange=\"jvLoadFile(event)\"\u003e\n\u003c/div\u003e\n\u003c!-- ── Options ── --\u003e\n\u003cdiv class=\"jv-options-bar\"\u003e\n  \u003clabel\u003eインデント:\n    \u003cselect class=\"jv-select\" id=\"jv-indent\"\u003e\n      \u003coption value=\"2\" selected\u003eスペース 2\u003c/option\u003e\n      \u003coption value=\"4\"\u003eスペース 4\u003c/option\u003e\n      \u003coption value=\"tab\"\u003eタブ\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/label\u003e\n  \u003clabel\u003eサンプル:\n    \u003cselect class=\"jv-select\" id=\"jv-sample\" onchange=\"jvLoadSample()\"\u003e\n      \u003coption value=\"\"\u003e— サンプルを読み込む —\u003c/option\u003e\n      \u003coption value=\"user\"\u003eユーザーオブジェクト\u003c/option\u003e\n      \u003coption value=\"array\"\u003e配列\u003c/option\u003e\n      \u003coption value=\"nested\"\u003eネスト構造\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/label\u003e\n\u003c/div\u003e\n\u003c!-- ── Upload drop zone ── --\u003e\n\u003cdiv class=\"jv-upload-zone\" id=\"jv-drop-zone\"\n  ondragover=\"event.preventDefault();this.style.borderColor='#2563eb';this.style.background='#eff6ff';\"\n  ondragleave=\"this.style.borderColor='';this.style.background='';\"\n  ondrop=\"jvHandleDrop(event)\"\n  onclick=\"document.getElementById('jv-file-input').click()\"\u003e\n  \u0026#128193; \u003cstrong\u003e.json\u003c/strong\u003e ファイルをここにドロップ、またはクリックして選択\n\u003c/div\u003e\n\u003c!-- ── Status ── --\u003e\n\u003cdiv class=\"jv-status jv-status-idle\" id=\"jv-status\"\u003e\n  \u003cspan class=\"jv-status-icon\"\u003e\u0026#9432;\u003c/span\u003e\n  \u003cspan class=\"jv-status-msg\"\u003eJSONを貼り付け・入力して「検証」または「整形」をクリックしてください。\u003c/span\u003e\n\u003c/div\u003e\n\u003c!-- ── Stats ── --\u003e\n\u003cdiv class=\"jv-stats\" id=\"jv-stats\" style=\"display:none;\"\u003e\u003c/div\u003e\n\u003c!-- ── Path display ── --\u003e\n\u003cdiv class=\"jv-path-bar\" id=\"jv-path-bar\" style=\"display:none;\"\u003e\n  \u003cspan class=\"jv-path-label\"\u003eパス:\u003c/span\u003e\n  \u003cspan id=\"jv-path-text\"\u003e—\u003c/span\u003e\n\u003c/div\u003e\n\u003c!-- ── Input / Output panels ── --\u003e\n\u003cdiv class=\"jv-panels\"\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"jv-pane-label\"\u003e入力\u003c/div\u003e\n    \u003ctextarea id=\"jv-input\" placeholder='JSONをここに貼り付け…\u0026#10;\u0026#10;例:\u0026#10;{\u0026#10;  \"name\": \"山田太郎\",\u0026#10;  \"age\": 30\u0026#10;}' spellcheck=\"false\" oninput=\"jvOnInput()\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"jv-pane-label\"\u003e\n      出力\n      \u003cbutton class=\"jv-copy-btn\" onclick=\"jvCopyOutput()\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003ctextarea id=\"jv-output\" readonly placeholder=\"整形・圧縮した結果がここに表示されます…\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ── Tabs: Tree / Raw ── --\u003e\n\u003cdiv class=\"jv-tabs\"\u003e\n  \u003cbutton class=\"jv-tab active\" id=\"jv-tab-tree\" onclick=\"jvSwitchTab('tree')\"\u003eツリービュー\u003c/button\u003e\n  \u003cbutton class=\"jv-tab\" id=\"jv-tab-raw\"  onclick=\"jvSwitchTab('raw')\"\u003eRaw\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- ── Tree view container ── --\u003e\n\u003cdiv class=\"jv-tree-wrap jv-visible\" id=\"jv-tree\"\u003e\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  /* ── Samples ── */\n  const SAMPLES = {\n    user: '{\\n  \"id\": 1,\\n  \"name\": \"山田太郎\",\\n  \"age\": 30,\\n  \"email\": \"yamada@example.com\",\\n  \"address\": {\\n    \"prefecture\": \"東京都\",\\n    \"city\": \"渋谷区\",\\n    \"zip\": \"150-0001\"\\n  },\\n  \"tags\": [\"エンジニア\", \"デザイナー\"],\\n  \"active\": true,\\n  \"score\": null\\n}',\n    array: '[\\n  { \"id\": 1, \"product\": \"商品A\", \"price\": 980, \"inStock\": true },\\n  { \"id\": 2, \"product\": \"商品B\", \"price\": 1480, \"inStock\": false },\\n  { \"id\": 3, \"product\": \"商品C\", \"price\": 420, \"inStock\": true }\\n]',\n    nested: '{\\n  \"company\": \"株式会社サンプル\",\\n  \"founded\": 2010,\\n  \"departments\": [\\n    {\\n      \"name\": \"エンジニアリング\",\\n      \"headcount\": 42,\\n      \"lead\": { \"name\": \"鈴木一郎\", \"email\": \"suzuki@sample.co.jp\" }\\n    },\\n    {\\n      \"name\": \"マーケティング\",\\n      \"headcount\": 18,\\n      \"lead\": { \"name\": \"佐藤花子\", \"email\": \"sato@sample.co.jp\" }\\n    }\\n  ],\\n  \"listed\": false,\\n  \"revenue\": null\\n}'\n  };\n\n  /* ── Helpers ── */\n  function el(id) { return document.getElementById(id); }\n\n  function getIndent() {\n    const v = el('jv-indent').value;\n    return v === 'tab' ? '\\t' : parseInt(v, 10);\n  }\n\n  function setStatus(type, icon, msg) {\n    const s = el('jv-status');\n    s.className = 'jv-status jv-status-' + type;\n    s.innerHTML = '\u003cspan class=\"jv-status-icon\"\u003e' + icon + '\u003c/span\u003e\u003cspan class=\"jv-status-msg\"\u003e' + escHtml(msg) + '\u003c/span\u003e';\n  }\n\n  function escHtml(s) {\n    return String(s).replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  function showStats(parsed, rawLen) {\n    const statsEl = el('jv-stats');\n    const depth = calcDepth(parsed);\n    const keys  = countKeys(parsed);\n    statsEl.style.display = 'flex';\n    statsEl.innerHTML =\n      pill('キー数: ' + keys) +\n      pill('深さ: ' + depth) +\n      pill('サイズ: ' + fmtBytes(rawLen)) +\n      pill('型: ' + (Array.isArray(parsed) ? '配列' : typeof parsed === 'object' \u0026\u0026 parsed !== null ? 'オブジェクト' : typeof parsed));\n  }\n\n  function pill(t) { return '\u003cspan class=\"jv-stat-pill\"\u003e' + escHtml(t) + '\u003c/span\u003e'; }\n\n  function fmtBytes(n) {\n    if (n \u003c 1024) return n + ' B';\n    if (n \u003c 1024*1024) return (n/1024).toFixed(1) + ' KB';\n    return (n/1024/1024).toFixed(2) + ' MB';\n  }\n\n  function calcDepth(v, d) {\n    d = d || 0;\n    if (v \u0026\u0026 typeof v === 'object') {\n      const vals = Object.values(v);\n      if (!vals.length) return d + 1;\n      return Math.max(...vals.map(c =\u003e calcDepth(c, d + 1)));\n    }\n    return d;\n  }\n\n  function countKeys(v) {\n    if (!v || typeof v !== 'object') return 0;\n    let c = Object.keys(v).length;\n    Object.values(v).forEach(ch =\u003e { c += countKeys(ch); });\n    return c;\n  }\n\n  /* ── Parse with error location ── */\n  function parseWithLocation(text) {\n    try {\n      return { ok: true, value: JSON.parse(text) };\n    } catch (e) {\n      const msg = e.message;\n      const posMatch = msg.match(/position (\\d+)/i);\n      let lineNum = null, colNum = null, hint = msg;\n      if (posMatch) {\n        const pos = parseInt(posMatch[1], 10);\n        const before = text.slice(0, pos);\n        const lines = before.split('\\n');\n        lineNum = lines.length;\n        colNum = lines[lines.length - 1].length + 1;\n        hint = msg.replace(/position \\d+/i, '行 ' + lineNum + '、列 ' + colNum);\n      }\n      return { ok: false, message: hint, line: lineNum, col: colNum };\n    }\n  }\n\n  /* ── Core actions ── */\n  window.jvValidate = function () {\n    const raw = el('jv-input').value.trim();\n    if (!raw) { setStatus('idle', '\u0026#9432;', '入力が空です。'); return; }\n    const result = parseWithLocation(raw);\n    if (result.ok) {\n      el('jv-input').className = 'jv-valid';\n      setStatus('valid', '\u0026#10003;', '有効なJSONです');\n      showStats(result.value, raw.length);\n      renderTree(result.value);\n    } else {\n      el('jv-input').className = 'jv-error';\n      setStatus('error', '\u0026#10007;', 'SyntaxError: ' + result.message);\n      el('jv-stats').style.display = 'none';\n      el('jv-tree').innerHTML = '';\n    }\n  };\n\n  window.jvFormat = function () {\n    const raw = el('jv-input').value.trim();\n    if (!raw) { setStatus('idle', '\u0026#9432;', '入力が空です。'); return; }\n    const result = parseWithLocation(raw);\n    if (!result.ok) {\n      el('jv-input').className = 'jv-error';\n      setStatus('error', '\u0026#10007;', 'SyntaxError: ' + result.message);\n      return;\n    }\n    const formatted = JSON.stringify(result.value, null, getIndent());\n    el('jv-output').value = formatted;\n    el('jv-input').className = 'jv-valid';\n    setStatus('valid', '\u0026#10003;', '整形しました');\n    showStats(result.value, raw.length);\n    renderTree(result.value);\n  };\n\n  window.jvMinify = function () {\n    const raw = el('jv-input').value.trim();\n    if (!raw) { setStatus('idle', '\u0026#9432;', '入力が空です。'); return; }\n    const result = parseWithLocation(raw);\n    if (!result.ok) {\n      el('jv-input').className = 'jv-error';\n      setStatus('error', '\u0026#10007;', 'SyntaxError: ' + result.message);\n      return;\n    }\n    const minified = JSON.stringify(result.value);\n    el('jv-output').value = minified;\n    el('jv-input').className = 'jv-valid';\n    setStatus('valid', '\u0026#10003;', '圧縮しました — ' + fmtBytes(minified.length));\n    showStats(result.value, raw.length);\n    renderTree(result.value);\n  };\n\n  window.jvClear = function () {\n    el('jv-input').value = '';\n    el('jv-output').value = '';\n    el('jv-input').className = '';\n    el('jv-stats').style.display = 'none';\n    el('jv-tree').innerHTML = '';\n    el('jv-path-bar').style.display = 'none';\n    el('jv-sample').value = '';\n    setStatus('idle', '\u0026#9432;', 'JSONを貼り付け・入力して「検証」または「整形」をクリックしてください。');\n  };\n\n  window.jvCopyOutput = function () {\n    const out = el('jv-output');\n    if (!out.value) return;\n    navigator.clipboard.writeText(out.value).then(function () {\n      const btn = document.querySelector('#jv-app .jv-copy-btn');\n      const orig = btn.textContent;\n      btn.textContent = 'コピーしました!';\n      setTimeout(function () { btn.textContent = orig; }, 1500);\n    }).catch(function () {\n      out.select();\n      document.execCommand('copy');\n    });\n  };\n\n  window.jvOnInput = function () {\n    el('jv-input').className = '';\n    setStatus('idle', '\u0026#9432;', 'JSONを貼り付け・入力して「検証」または「整形」をクリックしてください。');\n    el('jv-stats').style.display = 'none';\n    el('jv-tree').innerHTML = '';\n    el('jv-path-bar').style.display = 'none';\n  };\n\n  window.jvLoadSample = function () {\n    const key = el('jv-sample').value;\n    if (!key || !SAMPLES[key]) return;\n    el('jv-input').value = SAMPLES[key];\n    el('jv-input').className = '';\n    setStatus('idle', '\u0026#9432;', 'サンプルを読み込みました。「整形」または「検証」をクリックしてください。');\n    el('jv-stats').style.display = 'none';\n    el('jv-tree').innerHTML = '';\n    el('jv-path-bar').style.display = 'none';\n  };\n\n  /* ── File upload ── */\n  window.jvLoadFile = function (e) {\n    const file = e.target.files[0];\n    if (!file) return;\n    const reader = new FileReader();\n    reader.onload = function (ev) {\n      el('jv-input').value = ev.target.result;\n      el('jv-input').className = '';\n      setStatus('idle', '\u0026#9432;', 'ファイルを読み込みました: ' + file.name + ' (' + fmtBytes(file.size) + ')。「検証」または「整形」をクリックしてください。');\n      el('jv-stats').style.display = 'none';\n      el('jv-tree').innerHTML = '';\n    };\n    reader.readAsText(file);\n    e.target.value = '';\n  };\n\n  window.jvHandleDrop = function (e) {\n    e.preventDefault();\n    const dropZone = el('jv-drop-zone');\n    dropZone.style.borderColor = '';\n    dropZone.style.background = '';\n    const file = e.dataTransfer.files[0];\n    if (!file) return;\n    const reader = new FileReader();\n    reader.onload = function (ev) {\n      el('jv-input').value = ev.target.result;\n      el('jv-input').className = '';\n      setStatus('idle', '\u0026#9432;', 'ドロップされたファイルを読み込みました: ' + file.name + '。「検証」または「整形」をクリックしてください。');\n      el('jv-stats').style.display = 'none';\n      el('jv-tree').innerHTML = '';\n    };\n    reader.readAsText(file);\n  };\n\n  /* ── Tab switching ── */\n  window.jvSwitchTab = function (tab) {\n    el('jv-tab-tree').classList.toggle('active', tab === 'tree');\n    el('jv-tab-raw').classList.toggle('active',  tab === 'raw');\n    el('jv-tree').classList.toggle('jv-visible', tab === 'tree');\n  };\n\n  /* ── Tree toggle ── */\n  window.jvToggleTree = function () {\n    const wrap = el('jv-tree');\n    const raw  = el('jv-input').value.trim();\n    if (!raw) { setStatus('idle', '\u0026#9432;', '入力が空です。'); return; }\n    const result = parseWithLocation(raw);\n    if (!result.ok) {\n      setStatus('error', '\u0026#10007;', 'SyntaxError: ' + result.message);\n      return;\n    }\n    renderTree(result.value);\n    jvSwitchTab('tree');\n    showStats(result.value, raw.length);\n    setStatus('valid', '\u0026#10003;', 'ツリーを表示しました');\n  };\n\n  /* ── Tree renderer ── */\n  function renderTree(data) {\n    const wrap = el('jv-tree');\n    wrap.innerHTML = '';\n    wrap.appendChild(buildNode(data, '$', null, '$'));\n  }\n\n  function buildNode(value, key, parentEl, path) {\n    const div = document.createElement('div');\n    div.className = 'jv-tree-node';\n\n    if (value !== null \u0026\u0026 typeof value === 'object') {\n      const isArr   = Array.isArray(value);\n      const entries = isArr ? value.map((v, i) =\u003e [i, v]) : Object.entries(value);\n      const count   = entries.length;\n      const open    = isArr ? '[' : '{';\n      const close   = isArr ? ']' : '}';\n\n      const row = document.createElement('div');\n      row.className = 'jv-node-row';\n\n      const toggle = document.createElement('span');\n      toggle.className = 'jv-toggle';\n      toggle.textContent = count ? '▼' : ' ';\n\n      const keySpan = document.createElement('span');\n      keySpan.className = 'jv-key';\n      if (key !== null) keySpan.textContent = isNaN(key) ? '\"' + key + '\"' : key;\n\n      const colonSpan = document.createElement('span');\n      colonSpan.className = 'jv-colon';\n      if (key !== null) colonSpan.textContent = ': ';\n\n      const bracketSpan = document.createElement('span');\n      bracketSpan.className = 'jv-val-bracket';\n      bracketSpan.textContent = open;\n\n      const countSpan = document.createElement('span');\n      countSpan.className = 'jv-count';\n      countSpan.textContent = count + '件';\n\n      row.appendChild(toggle);\n      if (key !== null) { row.appendChild(keySpan); row.appendChild(colonSpan); }\n      row.appendChild(bracketSpan);\n      row.appendChild(countSpan);\n      div.appendChild(row);\n\n      const childWrap = document.createElement('div');\n      childWrap.className = 'jv-tree-children';\n      entries.forEach(function ([k, v]) {\n        const childPath = isArr ? path + '[' + k + ']' : path + '.' + k;\n        childWrap.appendChild(buildNode(v, k, childWrap, childPath));\n      });\n      div.appendChild(childWrap);\n\n      const closeRow = document.createElement('div');\n      closeRow.className = 'jv-node-row';\n      closeRow.innerHTML = '\u003cspan class=\"jv-toggle\"\u003e \u003c/span\u003e\u003cspan class=\"jv-val-bracket\"\u003e' + close + '\u003c/span\u003e';\n      div.appendChild(closeRow);\n\n      if (count \u003e 0) {\n        let collapsed = false;\n        row.addEventListener('click', function (e) {\n          e.stopPropagation();\n          collapsed = !collapsed;\n          childWrap.style.display = collapsed ? 'none' : '';\n          closeRow.style.display  = collapsed ? 'none' : '';\n          toggle.textContent = collapsed ? '▶' : '▼';\n          countSpan.style.display = collapsed ? '' : 'none';\n          if (collapsed) {\n            bracketSpan.textContent = open + '…' + close;\n          } else {\n            bracketSpan.textContent = open;\n          }\n          showPath(path);\n        });\n      }\n\n      row.addEventListener('click', function (e) { e.stopPropagation(); showPath(path); });\n\n    } else {\n      const row = document.createElement('div');\n      row.className = 'jv-node-row';\n      row.title = path;\n\n      const toggle = document.createElement('span');\n      toggle.className = 'jv-toggle';\n      toggle.textContent = ' ';\n\n      const keySpan = document.createElement('span');\n      keySpan.className = 'jv-key';\n      if (key !== null) keySpan.textContent = isNaN(key) ? '\"' + key + '\"' : key;\n\n      const colonSpan = document.createElement('span');\n      colonSpan.className = 'jv-colon';\n      if (key !== null) colonSpan.textContent = ': ';\n\n      const valSpan = document.createElement('span');\n      if (typeof value === 'string') {\n        valSpan.className = 'jv-val-string';\n        valSpan.textContent = '\"' + value + '\"';\n      } else if (typeof value === 'boolean') {\n        valSpan.className = 'jv-val-bool';\n        valSpan.textContent = String(value);\n      } else if (value === null) {\n        valSpan.className = 'jv-val-null';\n        valSpan.textContent = 'null';\n      } else {\n        valSpan.className = 'jv-val-number';\n        valSpan.textContent = String(value);\n      }\n\n      row.appendChild(toggle);\n      if (key !== null) { row.appendChild(keySpan); row.appendChild(colonSpan); }\n      row.appendChild(valSpan);\n      div.appendChild(row);\n\n      row.addEventListener('click', function (e) { e.stopPropagation(); showPath(path); });\n    }\n\n    return div;\n  }\n\n  function showPath(path) {\n    const bar = el('jv-path-bar');\n    bar.style.display = 'flex';\n    el('jv-path-text').textContent = path;\n  }\n\n})();\n\u003c/script\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"JSONバリデーター＆フォーマッター"},{"content":" 行列の入力 行列 A サイズ 2 × 2 3 × 3 4 × 4 5 × 5 ランダム入力 クリア (A) 行列 B サイズ 2 × 2 3 × 3 4 × 4 5 × 5 ランダム入力 クリア (B) スカラー (k)： スカラー倍算（k × A）に使用 演算の選択 A + B（加算） A − B（減算） A × B（乗算） det(A)（行列式） A⁻¹（逆行列） Aᵀ（転置） k × A（スカラー倍） 計算する 計算結果 演算を選択して「計算する」を押してください。 途中式・計算手順 💼 事業の数字管理はfreeeで自動化 請求書・経費・確定申告まで一括管理。個人事業主・中小企業に選ばれるクラウド会計ソフト。\nfreeeを試す（無料） ※本リンクはアフィリエイトリンクです。\n関連ツール 関数電卓 パーセント計算ツール 使い方 サイズを選択 — 行列 A・B それぞれのサイズ（2×2〜5×5）を選択します。 数値を入力 — 各セルをクリックして数値を入力。「ランダム入力」でテスト値を自動入力できます。 演算を選択 — A+B・A−B・A×B・det(A)・A⁻¹・Aᵀ・k×A から選択します。 計算する — 「計算する」ボタンを押すと結果と計算手順が表示されます。 対応演算一覧 演算 説明 条件 A + B 成分ごとの加算 同じサイズ A − B 成分ごとの減算 同じサイズ A × B 行列の積 A の列数 = B の行数 det(A) 余因子展開で行列式 正方行列 A A⁻¹ ガウス・ジョルダン法で逆行列 正則な正方行列 A Aᵀ 転置行列 任意の行列 A k × A スカラー倍 任意の行列 A 行列とは？ 行列（ぎょうれつ）とは、数値を長方形状に並べた数学的な構造です。線形代数の基礎であり、機械学習・コンピュータグラフィックス・物理シミュレーション・データ科学など幅広い分野で活用されています。\n正方行列：行数と列数が等しい行列（行列式・逆行列の計算に必要） 行列式：行列の「体積スケーリング」を表すスカラー値。0なら正則ではない 逆行列：A × A⁻¹ = I（単位行列）となる行列 転置行列：行と列を入れ替えた行列 ","permalink":"https://productivity-works.com/ja/tools/matrix-calculator/","summary":"\u003cdiv id=\"mx-app\"\u003e\n\u003cstyle\u003e\n#mx-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", Roboto, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#mx-app h2 {\n  font-size: 1.25rem;\n  font-weight: 700;\n  margin: 0 0 0.75rem 0;\n  color: #1a1a2e;\n}\n#mx-app .mx-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 1.25rem;\n  margin-bottom: 1rem;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n}\n#mx-app .mx-row {\n  display: flex;\n  gap: 1rem;\n  flex-wrap: wrap;\n}\n#mx-app .mx-col {\n  flex: 1;\n  min-width: 200px;\n}\n#mx-app .mx-label {\n  font-size: 0.8rem;\n  font-weight: 600;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 0.4rem;\n  display: block;\n}\n#mx-app select {\n  width: 100%;\n  padding: 0.45rem 0.6rem;\n  border: 1px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 0.9rem;\n  background: #f8fafc;\n  color: #1a1a2e;\n  cursor: pointer;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#mx-app select:focus {\n  border-color: #6366f1;\n}\n#mx-app .mx-grid-wrap {\n  overflow-x: auto;\n}\n#mx-app .mx-grid {\n  display: inline-grid;\n  gap: 4px;\n  margin-top: 0.5rem;\n  padding: 0.5rem;\n  background: #f1f5f9;\n  border-radius: 8px;\n  border: 2px solid #e2e8f0;\n}\n#mx-app .mx-grid input {\n  width: 56px;\n  height: 44px;\n  text-align: center;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 0.95rem;\n  font-weight: 600;\n  color: #1a1a2e;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.2s, box-shadow 0.2s;\n  -moz-appearance: textfield;\n}\n#mx-app .mx-grid input::-webkit-outer-spin-button,\n#mx-app .mx-grid input::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n}\n#mx-app .mx-grid input:focus {\n  border-color: #6366f1;\n  box-shadow: 0 0 0 3px rgba(99,102,241,0.12);\n}\n#mx-app .mx-scalar-row {\n  display: flex;\n  align-items: center;\n  gap: 0.75rem;\n  margin-top: 0.75rem;\n  flex-wrap: wrap;\n}\n#mx-app .mx-scalar-row label {\n  font-size: 0.875rem;\n  font-weight: 600;\n  color: #475569;\n}\n#mx-app .mx-scalar-row input {\n  width: 80px;\n  padding: 0.4rem 0.5rem;\n  border: 1px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 0.95rem;\n  text-align: center;\n  outline: none;\n  -moz-appearance: textfield;\n}\n#mx-app .mx-scalar-row input::-webkit-outer-spin-button,\n#mx-app .mx-scalar-row input::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n}\n#mx-app .mx-scalar-row input:focus {\n  border-color: #6366f1;\n  box-shadow: 0 0 0 3px rgba(99,102,241,0.12);\n}\n#mx-app .mx-btns {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin-top: 0.75rem;\n}\n#mx-app .mx-btn {\n  padding: 0.5rem 1rem;\n  border: none;\n  border-radius: 8px;\n  font-size: 0.875rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.18s, transform 0.12s, box-shadow 0.18s;\n  outline: none;\n}\n#mx-app .mx-btn:active {\n  transform: scale(0.97);\n}\n#mx-app .mx-btn-primary {\n  background: #6366f1;\n  color: #fff;\n  box-shadow: 0 2px 6px rgba(99,102,241,0.25);\n}\n#mx-app .mx-btn-primary:hover {\n  background: #4f46e5;\n  box-shadow: 0 4px 12px rgba(99,102,241,0.35);\n}\n#mx-app .mx-btn-secondary {\n  background: #f1f5f9;\n  color: #475569;\n  border: 1px solid #e2e8f0;\n}\n#mx-app .mx-btn-secondary:hover {\n  background: #e2e8f0;\n}\n#mx-app .mx-btn-danger {\n  background: #fef2f2;\n  color: #dc2626;\n  border: 1px solid #fecaca;\n}\n#mx-app .mx-btn-danger:hover {\n  background: #fee2e2;\n}\n#mx-app .mx-ops {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin-bottom: 0.75rem;\n}\n#mx-app .mx-op-btn {\n  padding: 0.5rem 0.9rem;\n  border: 2px solid #e2e8f0;\n  border-radius: 8px;\n  font-size: 0.875rem;\n  font-weight: 700;\n  cursor: pointer;\n  background: #fff;\n  color: #475569;\n  transition: all 0.18s;\n}\n#mx-app .mx-op-btn:hover {\n  border-color: #6366f1;\n  color: #6366f1;\n  background: #f5f3ff;\n}\n#mx-app .mx-op-btn.active {\n  background: #6366f1;\n  color: #fff;\n  border-color: #6366f1;\n  box-shadow: 0 2px 8px rgba(99,102,241,0.3);\n}\n#mx-app .mx-result-area {\n  background: #0f172a;\n  color: #e2e8f0;\n  border-radius: 10px;\n  padding: 1.25rem;\n  min-height: 80px;\n  font-family: \"JetBrains Mono\", \"Fira Code\", \"Courier New\", monospace;\n  font-size: 0.92rem;\n  line-height: 1.8;\n  white-space: pre;\n  overflow-x: auto;\n}\n#mx-app .mx-result-area.error {\n  background: #1c0a0a;\n  color: #f87171;\n}\n#mx-app .mx-result-area.success {\n  background: #0a1628;\n  color: #93c5fd;\n}\n#mx-app .mx-steps {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 1rem 1.25rem;\n  font-family: \"JetBrains Mono\", \"Fira Code\", \"Courier New\", monospace;\n  font-size: 0.82rem;\n  line-height: 1.8;\n  color: #475569;\n  white-space: pre-wrap;\n  overflow-x: auto;\n  margin-top: 0.75rem;\n}\n#mx-app .mx-matrix-label {\n  font-size: 1.1rem;\n  font-weight: 800;\n  color: #6366f1;\n  margin-bottom: 0.25rem;\n}\n#mx-app .mx-info {\n  font-size: 0.82rem;\n  color: #94a3b8;\n  margin-top: 0.4rem;\n}\n#mx-app .mx-freee-cta {\n  background: linear-gradient(135deg, #1a56db 0%, #1e40af 100%);\n  color: #fff;\n  border-radius: 14px;\n  padding: 1.5rem 1.75rem;\n  margin: 1.5rem 0;\n  display: flex;\n  align-items: center;\n  gap: 1.25rem;\n  flex-wrap: wrap;\n  box-shadow: 0 4px 16px rgba(26,86,219,0.25);\n}\n#mx-app .mx-freee-cta .mx-freee-icon {\n  font-size: 2.5rem;\n  flex-shrink: 0;\n}\n#mx-app .mx-freee-cta .mx-freee-text h3 {\n  font-size: 1.05rem;\n  font-weight: 800;\n  margin: 0 0 0.3rem 0;\n  color: #fff;\n}\n#mx-app .mx-freee-cta .mx-freee-text p {\n  font-size: 0.85rem;\n  color: #bfdbfe;\n  margin: 0;\n  line-height: 1.5;\n}\n#mx-app .mx-freee-cta a.mx-freee-btn {\n  display: inline-block;\n  background: #fff;\n  color: #1a56db;\n  font-weight: 800;\n  font-size: 0.9rem;\n  padding: 0.6rem 1.3rem;\n  border-radius: 9px;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: all 0.18s;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.15);\n  flex-shrink: 0;\n}\n#mx-app .mx-freee-cta a.mx-freee-btn:hover {\n  background: #eff6ff;\n  box-shadow: 0 4px 14px rgba(0,0,0,0.18);\n}\n#mx-app .mx-freee-footer {\n  font-size: 0.72rem;\n  color: #94a3b8;\n  margin-top: 0.5rem;\n  text-align: center;\n}\n#mx-app .mx-related {\n  margin-top: 2rem;\n  padding-top: 1.25rem;\n  border-top: 1px solid #e2e8f0;\n}\n#mx-app .mx-related h3 {\n  font-size: 0.9rem;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 0.6rem;\n}\n#mx-app .mx-related-links {\n  display: flex;\n  gap: 0.75rem;\n  flex-wrap: wrap;\n}\n#mx-app .mx-related-links a {\n  color: #6366f1;\n  text-decoration: none;\n  font-weight: 600;\n  font-size: 0.9rem;\n  padding: 0.35rem 0.75rem;\n  border: 1px solid #c7d2fe;\n  border-radius: 8px;\n  transition: all 0.18s;\n}\n#mx-app .mx-related-links a:hover {\n  background: #6366f1;\n  color: #fff;\n  border-color: #6366f1;\n}\n\u003c/style\u003e\n\u003cdiv class=\"mx-card\"\u003e\n  \u003ch2\u003e行列の入力\u003c/h2\u003e\n  \u003cdiv class=\"mx-row\"\u003e\n    \u003cdiv class=\"mx-col\"\u003e\n      \u003cdiv class=\"mx-matrix-label\"\u003e行列 A\u003c/div\u003e\n      \u003clabel class=\"mx-label\"\u003eサイズ\u003c/label\u003e\n      \u003cselect id=\"mx-size-a\"\u003e\n        \u003coption value=\"2\"\u003e2 × 2\u003c/option\u003e\n        \u003coption value=\"3\" selected\u003e3 × 3\u003c/option\u003e\n        \u003coption value=\"4\"\u003e4 × 4\u003c/option\u003e\n        \u003coption value=\"5\"\u003e5 × 5\u003c/option\u003e\n      \u003c/select\u003e\n      \u003cdiv class=\"mx-grid-wrap\"\u003e\n        \u003cdiv class=\"mx-grid\" id=\"mx-grid-a\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"mx-btns\"\u003e\n        \u003cbutton class=\"mx-btn mx-btn-secondary\" id=\"mx-rand-a\"\u003eランダム入力\u003c/button\u003e\n        \u003cbutton class=\"mx-btn mx-btn-danger\" id=\"mx-clear-a\"\u003eクリア (A)\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"mx-col\"\u003e\n      \u003cdiv class=\"mx-matrix-label\"\u003e行列 B\u003c/div\u003e\n      \u003clabel class=\"mx-label\"\u003eサイズ\u003c/label\u003e\n      \u003cselect id=\"mx-size-b\"\u003e\n        \u003coption value=\"2\"\u003e2 × 2\u003c/option\u003e\n        \u003coption value=\"3\" selected\u003e3 × 3\u003c/option\u003e\n        \u003coption value=\"4\"\u003e4 × 4\u003c/option\u003e\n        \u003coption value=\"5\"\u003e5 × 5\u003c/option\u003e\n      \u003c/select\u003e\n      \u003cdiv class=\"mx-grid-wrap\"\u003e\n        \u003cdiv class=\"mx-grid\" id=\"mx-grid-b\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"mx-btns\"\u003e\n        \u003cbutton class=\"mx-btn mx-btn-secondary\" id=\"mx-rand-b\"\u003eランダム入力\u003c/button\u003e\n        \u003cbutton class=\"mx-btn mx-btn-danger\" id=\"mx-clear-b\"\u003eクリア (B)\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mx-scalar-row\"\u003e\n    \u003clabel for=\"mx-scalar\"\u003eスカラー (k)：\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"mx-scalar\" value=\"2\" step=\"any\"\u003e\n    \u003cspan class=\"mx-info\"\u003eスカラー倍算（k × A）に使用\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mx-card\"\u003e\n  \u003ch2\u003e演算の選択\u003c/h2\u003e\n  \u003cdiv class=\"mx-ops\"\u003e\n    \u003cbutton class=\"mx-op-btn active\" data-op=\"add\"\u003eA + B（加算）\u003c/button\u003e\n    \u003cbutton class=\"mx-op-btn\" data-op=\"sub\"\u003eA − B（減算）\u003c/button\u003e\n    \u003cbutton class=\"mx-op-btn\" data-op=\"mul\"\u003eA × B（乗算）\u003c/button\u003e\n    \u003cbutton class=\"mx-op-btn\" data-op=\"det\"\u003edet(A)（行列式）\u003c/button\u003e\n    \u003cbutton class=\"mx-op-btn\" data-op=\"inv\"\u003eA⁻¹（逆行列）\u003c/button\u003e\n    \u003cbutton class=\"mx-op-btn\" data-op=\"tra\"\u003eAᵀ（転置）\u003c/button\u003e\n    \u003cbutton class=\"mx-op-btn\" data-op=\"scalar\"\u003ek × A（スカラー倍）\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mx-btns\"\u003e\n    \u003cbutton class=\"mx-btn mx-btn-primary\" id=\"mx-calc\"\u003e計算する\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mx-card\"\u003e\n  \u003ch2\u003e計算結果\u003c/h2\u003e\n  \u003cdiv class=\"mx-result-area\" id=\"mx-result\"\u003e演算を選択して「計算する」を押してください。\u003c/div\u003e\n  \u003cdiv id=\"mx-steps-wrap\" style=\"display:none\"\u003e\n    \u003ch2 style=\"margin-top:1rem\"\u003e途中式・計算手順\u003c/h2\u003e\n    \u003cdiv class=\"mx-steps\" id=\"mx-steps\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mx-freee-cta\"\u003e\n  \u003cdiv class=\"mx-freee-icon\"\u003e💼\u003c/div\u003e\n  \u003cdiv class=\"mx-freee-text\"\u003e\n    \u003ch3\u003e事業の数字管理はfreeeで自動化\u003c/h3\u003e\n    \u003cp\u003e請求書・経費・確定申告まで一括管理。個人事業主・中小企業に選ばれるクラウド会計ソフト。\u003c/p\u003e","title":"行列計算ツール"},{"content":"ブラウザだけで使えるホワイトノイズジェネレーターです。ホワイト・ピンク・ブラウンノイズと雨音を自由にミックスして、集中・リラックス・睡眠をサポートします。インストール不要・会員登録不要で今すぐ使えます。\nホワイトノイズジェネレーター ノイズタイプ（個別音量・ON/OFF） ホワイトノイズフラットスペクトル 50% ピンクノイズ1/f スペクトル 50% ブラウンノイズ1/f² スペクトル 50% 雨音バンドパスフィルター 50% マスターコントロール マスター音量 70% 再生する タイマー: OFF 15分 30分 60分 2時間 波形ビジュアライゼーション 再生ボタンを押してスタート 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → ポモドーロで集中 → ポモドーロタイマー タイピング速度を測定 → タイピング速度テスト ダミーテキストを生成 → Lorem Ipsumジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/noise-generator/","summary":"\u003cp\u003eブラウザだけで使えるホワイトノイズジェネレーターです。ホワイト・ピンク・ブラウンノイズと雨音を自由にミックスして、集中・リラックス・睡眠をサポートします。インストール不要・会員登録不要で今すぐ使えます。\u003c/p\u003e\n\u003cdiv id=\"ng-app\"\u003e\n\u003cstyle\u003e\n#ng-app {\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  max-width: 640px;\n  margin: 0 auto;\n  padding: 0;\n  color: #1e293b;\n  box-sizing: border-box;\n}\n#ng-app *, #ng-app *::before, #ng-app *::after {\n  box-sizing: inherit;\n}\n#ng-app .ng-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 14px;\n  padding: 22px 20px;\n  margin-bottom: 16px;\n}\n#ng-app .ng-title {\n  font-size: 18px;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 0 0 18px 0;\n  letter-spacing: -0.3px;\n}\n#ng-app .ng-section-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n  margin-bottom: 14px;\n}\n#ng-app .ng-noise-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 14px;\n  padding: 12px 14px;\n  background: #ffffff;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  transition: border-color 0.2s, box-shadow 0.2s;\n}\n#ng-app .ng-noise-row.active {\n  border-color: #7dd3fc;\n  box-shadow: 0 0 0 3px rgba(125, 211, 252, 0.15);\n}\n#ng-app .ng-noise-toggle {\n  appearance: none;\n  -webkit-appearance: none;\n  width: 40px;\n  height: 22px;\n  background: #cbd5e1;\n  border-radius: 11px;\n  position: relative;\n  cursor: pointer;\n  flex-shrink: 0;\n  transition: background 0.2s;\n  border: none;\n  outline: none;\n}\n#ng-app .ng-noise-toggle::after {\n  content: \"\";\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  background: #fff;\n  border-radius: 50%;\n  top: 3px;\n  left: 3px;\n  transition: transform 0.2s;\n  box-shadow: 0 1px 3px rgba(0,0,0,0.2);\n}\n#ng-app .ng-noise-toggle:checked {\n  background: #0ea5e9;\n}\n#ng-app .ng-noise-toggle:checked::after {\n  transform: translateX(18px);\n}\n#ng-app .ng-noise-name {\n  font-size: 14px;\n  font-weight: 600;\n  color: #334155;\n  min-width: 110px;\n  flex-shrink: 0;\n}\n#ng-app .ng-noise-name small {\n  display: block;\n  font-size: 11px;\n  font-weight: 400;\n  color: #94a3b8;\n  margin-top: 1px;\n}\n#ng-app .ng-vol-slider {\n  flex: 1;\n  -webkit-appearance: none;\n  appearance: none;\n  height: 5px;\n  border-radius: 3px;\n  background: linear-gradient(to right, #0ea5e9 var(--val, 50%), #e2e8f0 var(--val, 50%));\n  outline: none;\n  cursor: pointer;\n}\n#ng-app .ng-vol-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 17px;\n  height: 17px;\n  border-radius: 50%;\n  background: #0284c7;\n  cursor: pointer;\n  box-shadow: 0 1px 4px rgba(2,132,199,0.35);\n  transition: transform 0.15s;\n}\n#ng-app .ng-vol-slider::-webkit-slider-thumb:hover {\n  transform: scale(1.2);\n}\n#ng-app .ng-vol-slider::-moz-range-thumb {\n  width: 17px;\n  height: 17px;\n  border-radius: 50%;\n  background: #0284c7;\n  cursor: pointer;\n  border: none;\n  box-shadow: 0 1px 4px rgba(2,132,199,0.35);\n}\n#ng-app .ng-vol-value {\n  font-size: 12px;\n  color: #64748b;\n  min-width: 34px;\n  text-align: right;\n  flex-shrink: 0;\n}\n#ng-app .ng-master-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 14px;\n}\n#ng-app .ng-master-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  min-width: 90px;\n  flex-shrink: 0;\n}\n#ng-app .ng-play-btn {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  width: 100%;\n  padding: 13px 0;\n  background: #0284c7;\n  color: #fff;\n  border: none;\n  border-radius: 10px;\n  font-size: 16px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.2s, transform 0.1s;\n  margin-bottom: 14px;\n  letter-spacing: 0.2px;\n}\n#ng-app .ng-play-btn:hover {\n  background: #0369a1;\n}\n#ng-app .ng-play-btn:active {\n  transform: scale(0.98);\n}\n#ng-app .ng-play-btn.playing {\n  background: #64748b;\n}\n#ng-app .ng-play-btn.playing:hover {\n  background: #475569;\n}\n#ng-app .ng-timer-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n#ng-app .ng-timer-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  flex-shrink: 0;\n}\n#ng-app .ng-timer-btn {\n  padding: 6px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 20px;\n  background: #fff;\n  color: #475569;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#ng-app .ng-timer-btn:hover {\n  border-color: #7dd3fc;\n  color: #0369a1;\n  background: #f0f9ff;\n}\n#ng-app .ng-timer-btn.selected {\n  background: #0ea5e9;\n  border-color: #0ea5e9;\n  color: #fff;\n}\n#ng-app .ng-timer-display {\n  font-size: 13px;\n  font-weight: 700;\n  color: #0369a1;\n  margin-left: auto;\n  flex-shrink: 0;\n}\n#ng-app .ng-canvas-wrap {\n  background: #0f172a;\n  border-radius: 10px;\n  overflow: hidden;\n  margin-bottom: 0;\n}\n#ng-app canvas {\n  display: block;\n  width: 100%;\n  height: 80px;\n}\n#ng-app .ng-status {\n  text-align: center;\n  font-size: 12px;\n  color: #94a3b8;\n  margin-top: 10px;\n}\n@media (max-width: 480px) {\n  #ng-app .ng-noise-name {\n    min-width: 80px;\n  }\n  #ng-app .ng-play-btn {\n    font-size: 15px;\n    padding: 12px 0;\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"ng-card\"\u003e\n  \u003cdiv class=\"ng-title\"\u003eホワイトノイズジェネレーター\u003c/div\u003e\n  \u003cdiv class=\"ng-section-label\"\u003eノイズタイプ（個別音量・ON/OFF）\u003c/div\u003e\n  \u003c!-- White --\u003e\n  \u003cdiv class=\"ng-noise-row\" id=\"ng-row-white\"\u003e\n    \u003cinput type=\"checkbox\" class=\"ng-noise-toggle\" id=\"ng-tog-white\" checked\u003e\n    \u003cdiv class=\"ng-noise-name\"\u003eホワイトノイズ\u003csmall\u003eフラットスペクトル\u003c/small\u003e\u003c/div\u003e\n    \u003cinput type=\"range\" class=\"ng-vol-slider\" id=\"ng-vol-white\" min=\"0\" max=\"100\" value=\"50\"\u003e\n    \u003cdiv class=\"ng-vol-value\" id=\"ng-vv-white\"\u003e50%\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Pink --\u003e\n  \u003cdiv class=\"ng-noise-row\" id=\"ng-row-pink\"\u003e\n    \u003cinput type=\"checkbox\" class=\"ng-noise-toggle\" id=\"ng-tog-pink\"\u003e\n    \u003cdiv class=\"ng-noise-name\"\u003eピンクノイズ\u003csmall\u003e1/f スペクトル\u003c/small\u003e\u003c/div\u003e\n    \u003cinput type=\"range\" class=\"ng-vol-slider\" id=\"ng-vol-pink\" min=\"0\" max=\"100\" value=\"50\"\u003e\n    \u003cdiv class=\"ng-vol-value\" id=\"ng-vv-pink\"\u003e50%\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Brown --\u003e\n  \u003cdiv class=\"ng-noise-row\" id=\"ng-row-brown\"\u003e\n    \u003cinput type=\"checkbox\" class=\"ng-noise-toggle\" id=\"ng-tog-brown\"\u003e\n    \u003cdiv class=\"ng-noise-name\"\u003eブラウンノイズ\u003csmall\u003e1/f² スペクトル\u003c/small\u003e\u003c/div\u003e\n    \u003cinput type=\"range\" class=\"ng-vol-slider\" id=\"ng-vol-brown\" min=\"0\" max=\"100\" value=\"50\"\u003e\n    \u003cdiv class=\"ng-vol-value\" id=\"ng-vv-brown\"\u003e50%\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Rain --\u003e\n  \u003cdiv class=\"ng-noise-row\" id=\"ng-row-rain\"\u003e\n    \u003cinput type=\"checkbox\" class=\"ng-noise-toggle\" id=\"ng-tog-rain\"\u003e\n    \u003cdiv class=\"ng-noise-name\"\u003e雨音\u003csmall\u003eバンドパスフィルター\u003c/small\u003e\u003c/div\u003e\n    \u003cinput type=\"range\" class=\"ng-vol-slider\" id=\"ng-vol-rain\" min=\"0\" max=\"100\" value=\"50\"\u003e\n    \u003cdiv class=\"ng-vol-value\" id=\"ng-vv-rain\"\u003e50%\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ng-section-label\" style=\"margin-top:8px;\"\u003eマスターコントロール\u003c/div\u003e\n  \u003c!-- Master volume --\u003e\n  \u003cdiv class=\"ng-master-row\"\u003e\n    \u003cdiv class=\"ng-master-label\"\u003eマスター音量\u003c/div\u003e\n    \u003cinput type=\"range\" class=\"ng-vol-slider\" id=\"ng-master-vol\" min=\"0\" max=\"100\" value=\"70\"\u003e\n    \u003cdiv class=\"ng-vol-value\" id=\"ng-vv-master\"\u003e70%\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Play button --\u003e\n  \u003cbutton class=\"ng-play-btn\" id=\"ng-play-btn\"\u003e\n    \u003csvg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\u003e\u003cpolygon points=\"5,3 19,12 5,21\"/\u003e\u003c/svg\u003e\n    再生する\n  \u003c/button\u003e\n  \u003c!-- Timer --\u003e\n  \u003cdiv class=\"ng-timer-row\"\u003e\n    \u003cdiv class=\"ng-timer-label\"\u003eタイマー:\u003c/div\u003e\n    \u003cbutton class=\"ng-timer-btn selected\" data-min=\"0\"\u003eOFF\u003c/button\u003e\n    \u003cbutton class=\"ng-timer-btn\" data-min=\"15\"\u003e15分\u003c/button\u003e\n    \u003cbutton class=\"ng-timer-btn\" data-min=\"30\"\u003e30分\u003c/button\u003e\n    \u003cbutton class=\"ng-timer-btn\" data-min=\"60\"\u003e60分\u003c/button\u003e\n    \u003cbutton class=\"ng-timer-btn\" data-min=\"120\"\u003e2時間\u003c/button\u003e\n    \u003cdiv class=\"ng-timer-display\" id=\"ng-timer-display\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Visualizer --\u003e\n\u003cdiv class=\"ng-card\" style=\"padding:14px 14px 14px;\"\u003e\n  \u003cdiv class=\"ng-section-label\" style=\"margin-bottom:10px;\"\u003e波形ビジュアライゼーション\u003c/div\u003e\n  \u003cdiv class=\"ng-canvas-wrap\"\u003e\n    \u003ccanvas id=\"ng-canvas\" height=\"80\"\u003e\u003c/canvas\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ng-status\" id=\"ng-status\"\u003e再生ボタンを押してスタート\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  \"use strict\";\n\n  // --- State ---\n  var ctx = null;\n  var masterGain = null;\n  var analyser = null;\n  var animFrame = null;\n  var isPlaying = false;\n  var timerMinutes = 0;\n  var timerEndTime = null;\n  var timerInterval = null;\n\n  var noiseTypes = [\"white\", \"pink\", \"brown\", \"rain\"];\n  var nodes = {}; // per noise type: { processor, gainNode }\n\n  // Pink noise state (Voss-McCartney)\n  var pinkState = { b0:0, b1:0, b2:0, b3:0, b4:0, b5:0, b6:0 };\n  // Brown noise state\n  var brownState = { last: 0 };\n  // Rain filter state (ScriptProcessorNode + BiquadFilter)\n  var rainFilter = null;\n\n  // --- DOM refs ---\n  var playBtn = document.getElementById(\"ng-play-btn\");\n  var masterSlider = document.getElementById(\"ng-master-vol\");\n  var masterDisplay = document.getElementById(\"ng-vv-master\");\n  var timerDisplay = document.getElementById(\"ng-timer-display\");\n  var statusEl = document.getElementById(\"ng-status\");\n  var canvas = document.getElementById(\"ng-canvas\");\n  var canvasCtx = canvas.getContext(\"2d\");\n\n  // --- Slider fill helper ---\n  function updateSliderFill(slider) {\n    var pct = ((slider.value - slider.min) / (slider.max - slider.min) * 100).toFixed(1) + \"%\";\n    slider.style.setProperty(\"--val\", pct);\n  }\n\n  // --- Volume slider wiring ---\n  noiseTypes.forEach(function(type) {\n    var slider = document.getElementById(\"ng-vol-\" + type);\n    var display = document.getElementById(\"ng-vv-\" + type);\n    var toggle = document.getElementById(\"ng-tog-\" + type);\n    var row = document.getElementById(\"ng-row-\" + type);\n\n    updateSliderFill(slider);\n\n    slider.addEventListener(\"input\", function() {\n      display.textContent = slider.value + \"%\";\n      updateSliderFill(slider);\n      if (nodes[type] \u0026\u0026 nodes[type].gainNode) {\n        nodes[type].gainNode.gain.setTargetAtTime(\n          parseFloat(slider.value) / 100 * (toggle.checked ? 1 : 0),\n          ctx.currentTime, 0.02\n        );\n      }\n    });\n\n    toggle.addEventListener(\"change\", function() {\n      row.classList.toggle(\"active\", toggle.checked);\n      if (nodes[type] \u0026\u0026 nodes[type].gainNode) {\n        var vol = parseFloat(slider.value) / 100;\n        nodes[type].gainNode.gain.setTargetAtTime(\n          toggle.checked ? vol : 0,\n          ctx.currentTime, 0.05\n        );\n      }\n    });\n\n    // Init active state\n    if (toggle.checked) row.classList.add(\"active\");\n  });\n\n  masterSlider.addEventListener(\"input\", function() {\n    masterDisplay.textContent = masterSlider.value + \"%\";\n    updateSliderFill(masterSlider);\n    if (masterGain) {\n      masterGain.gain.setTargetAtTime(\n        parseFloat(masterSlider.value) / 100,\n        ctx.currentTime, 0.02\n      );\n    }\n  });\n  updateSliderFill(masterSlider);\n\n  // --- Audio init ---\n  function initAudio() {\n    if (ctx) return;\n    ctx = new (window.AudioContext || window.webkitAudioContext)();\n    masterGain = ctx.createGain();\n    masterGain.gain.value = parseFloat(masterSlider.value) / 100;\n    masterGain.connect(ctx.destination);\n\n    analyser = ctx.createAnalyser();\n    analyser.fftSize = 1024;\n    analyser.smoothingTimeConstant = 0.8;\n    masterGain.connect(analyser);\n\n    createNoiseNodes();\n  }\n\n  function bufferSize() { return 4096; }\n\n  function createNoiseNodes() {\n    // White\n    nodes.white = createScriptNode(function(buf) {\n      for (var i = 0; i \u003c buf.length; i++) {\n        buf[i] = Math.random() * 2 - 1;\n      }\n    }, \"white\");\n\n    // Pink (Voss-McCartney)\n    nodes.pink = createScriptNode(function(buf) {\n      var b0 = pinkState.b0, b1 = pinkState.b1, b2 = pinkState.b2,\n          b3 = pinkState.b3, b4 = pinkState.b4, b5 = pinkState.b5, b6 = pinkState.b6;\n      for (var i = 0; i \u003c buf.length; i++) {\n        var white = Math.random() * 2 - 1;\n        b0 = 0.99886 * b0 + white * 0.0555179;\n        b1 = 0.99332 * b1 + white * 0.0750759;\n        b2 = 0.96900 * b2 + white * 0.1538520;\n        b3 = 0.86650 * b3 + white * 0.3104856;\n        b4 = 0.55000 * b4 + white * 0.5329522;\n        b5 = -0.7616 * b5 - white * 0.0168980;\n        var pink = b0 + b1 + b2 + b3 + b4 + b5 + b6 + white * 0.5362;\n        b6 = white * 0.115926;\n        buf[i] = pink * 0.11;\n      }\n      pinkState.b0 = b0; pinkState.b1 = b1; pinkState.b2 = b2;\n      pinkState.b3 = b3; pinkState.b4 = b4; pinkState.b5 = b5; pinkState.b6 = b6;\n    }, \"pink\");\n\n    // Brown (leaky integrator)\n    nodes.brown = createScriptNode(function(buf) {\n      var last = brownState.last;\n      for (var i = 0; i \u003c buf.length; i++) {\n        var white = Math.random() * 2 - 1;\n        last = (last + 0.02 * white) / 1.02;\n        buf[i] = last * 3.5;\n      }\n      brownState.last = last;\n    }, \"brown\");\n\n    // Rain (bandpass filtered white noise)\n    var bpFilter = ctx.createBiquadFilter();\n    bpFilter.type = \"bandpass\";\n    bpFilter.frequency.value = 600;\n    bpFilter.Q.value = 0.8;\n    var bpFilter2 = ctx.createBiquadFilter();\n    bpFilter2.type = \"bandpass\";\n    bpFilter2.frequency.value = 1800;\n    bpFilter2.Q.value = 1.2;\n\n    var rainGainNode = ctx.createGain();\n    var rainVol = parseFloat(document.getElementById(\"ng-vol-rain\").value) / 100;\n    var rainToggle = document.getElementById(\"ng-tog-rain\");\n    rainGainNode.gain.value = rainToggle.checked ? rainVol : 0;\n    rainGainNode.connect(masterGain);\n\n    // Split signal to both bandpass filters\n    var rainMerge = ctx.createGain();\n    rainMerge.gain.value = 0.5;\n    bpFilter.connect(rainMerge);\n    bpFilter2.connect(rainMerge);\n    rainMerge.connect(rainGainNode);\n\n    var rainProc = ctx.createScriptProcessor(bufferSize(), 1, 1);\n    rainProc.onaudioprocess = function(e) {\n      if (!isPlaying) return;\n      var out = e.outputBuffer.getChannelData(0);\n      for (var i = 0; i \u003c out.length; i++) {\n        out[i] = Math.random() * 2 - 1;\n      }\n    };\n    rainProc.connect(bpFilter);\n    rainProc.connect(bpFilter2);\n\n    nodes.rain = { processor: rainProc, gainNode: rainGainNode, filter: [bpFilter, bpFilter2], merge: rainMerge };\n  }\n\n  function createScriptNode(fillFn, type) {\n    var toggle = document.getElementById(\"ng-tog-\" + type);\n    var volSlider = document.getElementById(\"ng-vol-\" + type);\n    var gainNode = ctx.createGain();\n    gainNode.gain.value = toggle.checked ? parseFloat(volSlider.value) / 100 : 0;\n    gainNode.connect(masterGain);\n\n    var proc = ctx.createScriptProcessor(bufferSize(), 1, 1);\n    proc.onaudioprocess = function(e) {\n      if (!isPlaying) return;\n      var out = e.outputBuffer.getChannelData(0);\n      fillFn(out);\n    };\n    proc.connect(gainNode);\n    return { processor: proc, gainNode: gainNode };\n  }\n\n  // --- Play / Pause ---\n  playBtn.addEventListener(\"click\", function() {\n    if (!isPlaying) {\n      startPlay();\n    } else {\n      stopPlay();\n    }\n  });\n\n  function startPlay() {\n    initAudio();\n    if (ctx.state === \"suspended\") ctx.resume();\n    isPlaying = true;\n    playBtn.classList.add(\"playing\");\n    playBtn.innerHTML = '\u003csvg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\u003e\u003crect x=\"6\" y=\"4\" width=\"4\" height=\"16\"/\u003e\u003crect x=\"14\" y=\"4\" width=\"4\" height=\"16\"/\u003e\u003c/svg\u003e 一時停止';\n    statusEl.textContent = \"再生中...\";\n    drawWave();\n    startTimer();\n  }\n\n  function stopPlay() {\n    isPlaying = false;\n    playBtn.classList.remove(\"playing\");\n    playBtn.innerHTML = '\u003csvg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\u003e\u003cpolygon points=\"5,3 19,12 5,21\"/\u003e\u003c/svg\u003e 再生する';\n    statusEl.textContent = \"一時停止中\";\n    if (animFrame) { cancelAnimationFrame(animFrame); animFrame = null; }\n    clearInterval(timerInterval);\n    timerInterval = null;\n    timerEndTime = null;\n    timerDisplay.textContent = \"\";\n    // Clear canvas\n    canvasCtx.fillStyle = \"#0f172a\";\n    canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n  }\n\n  // --- Canvas wave ---\n  function drawWave() {\n    if (!isPlaying) return;\n    animFrame = requestAnimationFrame(drawWave);\n    var W = canvas.offsetWidth;\n    var H = canvas.offsetHeight;\n    if (canvas.width !== W) canvas.width = W;\n    if (canvas.height !== H || canvas.height \u003c 1) canvas.height = 80;\n\n    var bufLen = analyser.frequencyBinCount;\n    var data = new Uint8Array(bufLen);\n    analyser.getByteTimeDomainData(data);\n\n    canvasCtx.fillStyle = \"#0f172a\";\n    canvasCtx.fillRect(0, 0, W, canvas.height);\n\n    canvasCtx.lineWidth = 2;\n    canvasCtx.strokeStyle = \"#38bdf8\";\n    canvasCtx.beginPath();\n    var sliceWidth = W / bufLen;\n    var x = 0;\n    for (var i = 0; i \u003c bufLen; i++) {\n      var v = data[i] / 128.0;\n      var y = (v * canvas.height) / 2;\n      if (i === 0) canvasCtx.moveTo(x, y);\n      else canvasCtx.lineTo(x, y);\n      x += sliceWidth;\n    }\n    canvasCtx.lineTo(W, canvas.height / 2);\n    canvasCtx.stroke();\n  }\n\n  // --- Timer ---\n  document.querySelectorAll(\"#ng-app .ng-timer-btn\").forEach(function(btn) {\n    btn.addEventListener(\"click\", function() {\n      document.querySelectorAll(\"#ng-app .ng-timer-btn\").forEach(function(b){ b.classList.remove(\"selected\"); });\n      btn.classList.add(\"selected\");\n      timerMinutes = parseInt(btn.dataset.min, 10);\n      if (isPlaying) {\n        clearInterval(timerInterval);\n        timerInterval = null;\n        timerEndTime = null;\n        timerDisplay.textContent = \"\";\n        startTimer();\n      }\n    });\n  });\n\n  function startTimer() {\n    clearInterval(timerInterval);\n    timerDisplay.textContent = \"\";\n    if (timerMinutes \u003c= 0) return;\n    timerEndTime = Date.now() + timerMinutes * 60 * 1000;\n    updateTimerDisplay();\n    timerInterval = setInterval(function() {\n      var remaining = timerEndTime - Date.now();\n      if (remaining \u003c= 0) {\n        stopPlay();\n        timerDisplay.textContent = \"\";\n        statusEl.textContent = \"タイマー終了\";\n        return;\n      }\n      updateTimerDisplay();\n    }, 1000);\n  }\n\n  function updateTimerDisplay() {\n    if (!timerEndTime) { timerDisplay.textContent = \"\"; return; }\n    var remaining = Math.max(0, timerEndTime - Date.now());\n    var h = Math.floor(remaining / 3600000);\n    var m = Math.floor((remaining % 3600000) / 60000);\n    var s = Math.floor((remaining % 60000) / 1000);\n    var parts = [];\n    if (h \u003e 0) parts.push(h + \"時間\");\n    parts.push(pad(m) + \"分\");\n    parts.push(pad(s) + \"秒\");\n    timerDisplay.textContent = \"残り \" + parts.join(\"\");\n  }\n\n  function pad(n) { return n \u003c 10 ? \"0\" + n : \"\" + n; }\n\n  // Init canvas background\n  (function() {\n    canvas.width = canvas.offsetWidth || 600;\n    canvas.height = 80;\n    canvasCtx.fillStyle = \"#0f172a\";\n    canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n    // Draw idle center line\n    canvasCtx.strokeStyle = \"#1e3a4a\";\n    canvasCtx.lineWidth = 1;\n    canvasCtx.beginPath();\n    canvasCtx.moveTo(0, 40);\n    canvasCtx.lineTo(canvas.width, 40);\n    canvasCtx.stroke();\n  })();\n})();\n\u003c/script\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"ホワイトノイズジェネレーター"},{"content":"画面上でドラッグして距離を計測。カーソルの正確な座標をリアルタイム追跡し、画面DPIを自動検出。定規の色・長さを自由にカスタマイズできます。インストール不要で今すぐ使えます。\n向き: 水平 垂直 両方 長さ: 500 px 色: 単位: px cm インチ DPI: 検出中… リセット x: 0 y: 0 計測距離 — ピクセル センチメートル — cm インチ — in 画面 DPI — dots per inch 使い方: マウスを動かすと座標をリアルタイム表示。エリア内でドラッグすると距離を計測。定規の向き・長さ・色・単位を上部で変更できます。タッチ操作にも対応しています。 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 画面解像度確認 → 画面解像度ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/pixel-ruler/","summary":"\u003cp\u003e画面上でドラッグして距離を計測。カーソルの正確な座標をリアルタイム追跡し、画面DPIを自動検出。定規の色・長さを自由にカスタマイズできます。インストール不要で今すぐ使えます。\u003c/p\u003e\n\u003cdiv id=\"pr-app\"\u003e\n\u003cstyle\u003e\n/* ── Reset ──────────────────────────────────────────────────── */\n#pr-app *, #pr-app *::before, #pr-app *::after {\n  box-sizing: border-box; margin: 0; padding: 0;\n}\n#pr-app {\n  font-family: system-ui, -apple-system, sans-serif;\n  font-size: 14px;\n  color: #1a1a2e;\n  line-height: 1.5;\n  user-select: none;\n}\n\n/* ── Controls bar ───────────────────────────────────────────── */\n#pr-app .pr-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  align-items: center;\n  background: #f8f9fc;\n  border: 1px solid #e2e6f0;\n  border-radius: 12px;\n  padding: 14px 16px;\n  margin-bottom: 16px;\n}\n#pr-app .pr-ctrl-group {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 13px;\n  color: #374151;\n}\n#pr-app .pr-ctrl-group label {\n  font-weight: 600;\n  white-space: nowrap;\n}\n#pr-app .pr-ctrl-group input[type=\"range\"] {\n  width: 100px;\n  accent-color: #6366f1;\n}\n#pr-app .pr-ctrl-group input[type=\"color\"] {\n  width: 34px;\n  height: 30px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 6px;\n  cursor: pointer;\n  padding: 2px;\n  background: #fff;\n}\n#pr-app .pr-ctrl-group select {\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  padding: 5px 8px;\n  font-size: 13px;\n  background: #fff;\n  cursor: pointer;\n  outline: none;\n}\n#pr-app .pr-ctrl-group select:focus { border-color: #6366f1; }\n#pr-app .pr-sep {\n  width: 1px;\n  height: 28px;\n  background: #e2e6f0;\n}\n\n/* ── DPI info ───────────────────────────────────────────────── */\n#pr-app .pr-dpi-badge {\n  font-size: 12px;\n  background: #eef2ff;\n  color: #4338ca;\n  padding: 3px 10px;\n  border-radius: 20px;\n  font-weight: 600;\n  border: 1px solid #c7d2fe;\n}\n\n/* ── Canvas area ────────────────────────────────────────────── */\n#pr-app .pr-canvas-wrap {\n  position: relative;\n  background: #fff;\n  border: 1px solid #e2e6f0;\n  border-radius: 12px;\n  overflow: hidden;\n  height: 380px;\n  cursor: crosshair;\n}\n\n/* ── Coordinate display ─────────────────────────────────────── */\n#pr-app .pr-coords {\n  position: absolute;\n  top: 10px;\n  right: 14px;\n  background: rgba(15,23,42,.82);\n  color: #f8fafc;\n  font-size: 12px;\n  font-family: monospace;\n  padding: 6px 12px;\n  border-radius: 6px;\n  pointer-events: none;\n  z-index: 10;\n  white-space: nowrap;\n}\n\n/* ── Measurement label ──────────────────────────────────────── */\n#pr-app .pr-measure-label {\n  position: absolute;\n  background: rgba(15,23,42,.82);\n  color: #f8fafc;\n  font-size: 12px;\n  font-family: monospace;\n  padding: 4px 10px;\n  border-radius: 6px;\n  pointer-events: none;\n  z-index: 10;\n  white-space: nowrap;\n}\n\n/* ── Canvas ─────────────────────────────────────────────────── */\n#pr-app canvas {\n  display: block;\n  width: 100%;\n  height: 100%;\n}\n\n/* ── Info row ───────────────────────────────────────────────── */\n#pr-app .pr-info-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  margin-top: 14px;\n}\n#pr-app .pr-info-card {\n  flex: 1;\n  min-width: 140px;\n  background: #f8f9fc;\n  border: 1px solid #e2e6f0;\n  border-radius: 10px;\n  padding: 14px 16px;\n}\n#pr-app .pr-info-card .pr-ic-label {\n  font-size: 11px;\n  color: #6b7280;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: .07em;\n  margin-bottom: 4px;\n}\n#pr-app .pr-info-card .pr-ic-val {\n  font-size: 20px;\n  font-weight: 800;\n  color: #1a1a2e;\n  font-family: monospace;\n}\n#pr-app .pr-info-card .pr-ic-sub {\n  font-size: 11px;\n  color: #6b7280;\n  margin-top: 2px;\n}\n\n/* ── Instructions ───────────────────────────────────────────── */\n#pr-app .pr-hint {\n  font-size: 12px;\n  color: #6b7280;\n  margin-top: 10px;\n  padding: 10px 14px;\n  background: #f8f9fc;\n  border-radius: 8px;\n  border-left: 3px solid #6366f1;\n}\n\n/* ── Buttons ────────────────────────────────────────────────── */\n#pr-app .pr-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 7px 14px;\n  border-radius: 7px;\n  border: 1.5px solid #d1d5db;\n  background: #fff;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  color: #374151;\n  transition: background .15s;\n}\n#pr-app .pr-btn:hover { background: #f3f4f6; }\n#pr-app .pr-btn-primary {\n  background: #6366f1;\n  color: #fff;\n  border-color: #6366f1;\n}\n#pr-app .pr-btn-primary:hover { background: #4f46e5; }\n\u003c/style\u003e\n\u003c!-- コントロール --\u003e\n\u003cdiv class=\"pr-controls\"\u003e\n  \u003cdiv class=\"pr-ctrl-group\"\u003e\n    \u003clabel\u003e向き:\u003c/label\u003e\n    \u003cselect id=\"pr-orient\"\u003e\n      \u003coption value=\"h\"\u003e水平\u003c/option\u003e\n      \u003coption value=\"v\"\u003e垂直\u003c/option\u003e\n      \u003coption value=\"both\"\u003e両方\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pr-sep\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"pr-ctrl-group\"\u003e\n    \u003clabel\u003e長さ:\u003c/label\u003e\n    \u003cinput type=\"range\" id=\"pr-length\" min=\"100\" max=\"900\" value=\"500\"\u003e\n    \u003cspan id=\"pr-length-lbl\"\u003e500 px\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pr-sep\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"pr-ctrl-group\"\u003e\n    \u003clabel\u003e色:\u003c/label\u003e\n    \u003cinput type=\"color\" id=\"pr-color\" value=\"#6366f1\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pr-sep\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"pr-ctrl-group\"\u003e\n    \u003clabel\u003e単位:\u003c/label\u003e\n    \u003cselect id=\"pr-unit\"\u003e\n      \u003coption value=\"px\"\u003epx\u003c/option\u003e\n      \u003coption value=\"cm\"\u003ecm\u003c/option\u003e\n      \u003coption value=\"in\"\u003eインチ\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pr-sep\"\u003e\u003c/div\u003e\n  \u003cspan class=\"pr-dpi-badge\" id=\"pr-dpi-badge\"\u003eDPI: 検出中…\u003c/span\u003e\n  \u003cbutton class=\"pr-btn pr-btn-primary\" id=\"pr-reset-btn\"\u003eリセット\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- キャンバスエリア --\u003e\n\u003cdiv class=\"pr-canvas-wrap\" id=\"pr-canvas-wrap\"\u003e\n  \u003ccanvas id=\"pr-canvas\"\u003e\u003c/canvas\u003e\n  \u003cdiv class=\"pr-coords\" id=\"pr-coords\"\u003ex: 0 　 y: 0\u003c/div\u003e\n  \u003cdiv class=\"pr-measure-label\" id=\"pr-meas-label\" style=\"display:none;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 計測結果 --\u003e\n\u003cdiv class=\"pr-info-row\"\u003e\n  \u003cdiv class=\"pr-info-card\"\u003e\n    \u003cdiv class=\"pr-ic-label\"\u003e計測距離\u003c/div\u003e\n    \u003cdiv class=\"pr-ic-val\" id=\"pr-val-px\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"pr-ic-sub\"\u003eピクセル\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pr-info-card\"\u003e\n    \u003cdiv class=\"pr-ic-label\"\u003eセンチメートル\u003c/div\u003e\n    \u003cdiv class=\"pr-ic-val\" id=\"pr-val-cm\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"pr-ic-sub\"\u003ecm\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pr-info-card\"\u003e\n    \u003cdiv class=\"pr-ic-label\"\u003eインチ\u003c/div\u003e\n    \u003cdiv class=\"pr-ic-val\" id=\"pr-val-in\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"pr-ic-sub\"\u003ein\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pr-info-card\"\u003e\n    \u003cdiv class=\"pr-ic-label\"\u003e画面 DPI\u003c/div\u003e\n    \u003cdiv class=\"pr-ic-val\" id=\"pr-val-dpi\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"pr-ic-sub\"\u003edots per inch\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp class=\"pr-hint\"\u003e\n  \u003cstrong\u003e使い方:\u003c/strong\u003e マウスを動かすと座標をリアルタイム表示。エリア内でドラッグすると距離を計測。定規の向き・長さ・色・単位を上部で変更できます。タッチ操作にも対応しています。\n\u003c/p\u003e","title":"ピクセル定規ツール — 無料オンライン画面計測"},{"content":"アカウント登録不要・データ送信なし。情報を入力してテンプレートを選ぶだけで、プロフェッショナルなメール署名をすぐに作成できます。生成されたHTMLをGmail・Outlook・Apple Mailにそのまま貼り付けて使用してください。\n署名情報を入力 \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;氏名\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sa-name\u0026quot; placeholder=\u0026quot;山田 太郎\u0026quot; oninput=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;役職\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sa-title\u0026quot; placeholder=\u0026quot;シニアプロダクトデザイナー\u0026quot; oninput=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;会社名\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sa-company\u0026quot; placeholder=\u0026quot;株式会社〇〇\u0026quot; oninput=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;電話番号\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sa-phone\u0026quot; placeholder=\u0026quot;03-0000-0000\u0026quot; oninput=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;メールアドレス\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;email\u0026quot; id=\u0026quot;sa-email\u0026quot; placeholder=\u0026quot;taro@example.co.jp\u0026quot; oninput=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ウェブサイト\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sa-website\u0026quot; placeholder=\u0026quot;https://example.co.jp\u0026quot; oninput=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;LinkedIn URL\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sa-linkedin\u0026quot; placeholder=\u0026quot;https://linkedin.com/in/taro-yamada\u0026quot; oninput=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;Twitter / X アカウント\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sa-twitter\u0026quot; placeholder=\u0026quot;@taro_yamada\u0026quot; oninput=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;GitHub ユーザー名\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sa-github\u0026quot; placeholder=\u0026quot;taro-yamada\u0026quot; oninput=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-panel\u0026quot; style=\u0026quot;margin-top:20px;\u0026quot;\u0026gt; \u0026lt;h2\u0026gt;スタイル設定\u0026lt;/h2\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;レイアウト\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;sa-layout\u0026quot; onchange=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;horizontal\u0026quot;\u0026gt;横並び（写真左・テキスト右）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;vertical\u0026quot;\u0026gt;縦並び（積み重ね）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;カラーテーマ\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;sa-swatches\u0026quot; id=\u0026quot;sa-swatches\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;sa-swatch active\u0026quot; data-color=\u0026quot;#6366f1\u0026quot; style=\u0026quot;background:#6366f1\u0026quot; onclick=\u0026quot;saPick(this)\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;sa-swatch\u0026quot; data-color=\u0026quot;#0ea5e9\u0026quot; style=\u0026quot;background:#0ea5e9\u0026quot; onclick=\u0026quot;saPick(this)\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;sa-swatch\u0026quot; data-color=\u0026quot;#10b981\u0026quot; style=\u0026quot;background:#10b981\u0026quot; onclick=\u0026quot;saPick(this)\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;sa-swatch\u0026quot; data-color=\u0026quot;#f59e0b\u0026quot; style=\u0026quot;background:#f59e0b\u0026quot; onclick=\u0026quot;saPick(this)\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;sa-swatch\u0026quot; data-color=\u0026quot;#ef4444\u0026quot; style=\u0026quot;background:#ef4444\u0026quot; onclick=\u0026quot;saPick(this)\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;sa-swatch\u0026quot; data-color=\u0026quot;#8b5cf6\u0026quot; style=\u0026quot;background:#8b5cf6\u0026quot; onclick=\u0026quot;saPick(this)\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;sa-swatch\u0026quot; data-color=\u0026quot;#1e293b\u0026quot; style=\u0026quot;background:#1e293b\u0026quot; onclick=\u0026quot;saPick(this)\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;sa-swatch\u0026quot; data-color=\u0026quot;#64748b\u0026quot; style=\u0026quot;background:#64748b\u0026quot; onclick=\u0026quot;saPick(this)\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;フォント\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;sa-font\u0026quot; onchange=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;Arial, Helvetica, sans-serif\u0026quot;\u0026gt;Arial（標準・安全）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;Georgia, serif\u0026quot;\u0026gt;Georgia（クラシック）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;'Courier New', monospace\u0026quot;\u0026gt;Courier New（開発者向け）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;Verdana, Geneva, sans-serif\u0026quot;\u0026gt;Verdana\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;Trebuchet MS, sans-serif\u0026quot;\u0026gt;Trebuchet MS\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;区切り線のスタイル\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;sa-sep\u0026quot; onchange=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;solid\u0026quot;\u0026gt;実線\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;dashed\u0026quot;\u0026gt;破線\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;dotted\u0026quot;\u0026gt;点線\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;none\u0026quot;\u0026gt;なし\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;写真プレースホルダー\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;sa-photo\u0026quot; onchange=\u0026quot;saRender()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;circle\u0026quot;\u0026gt;円形アバター\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;square\u0026quot;\u0026gt;正方形アバター\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;none\u0026quot;\u0026gt;なし\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; テンプレート ビジネス クリエイティブ ミニマル 開発者 \u0026lt;div class=\u0026quot;sa-preview-label\u0026quot;\u0026gt;ライブプレビュー\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-preview-wrap\u0026quot;\u0026gt; \u0026lt;div id=\u0026quot;sa-preview\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-actions\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;sa-btn sa-btn-primary\u0026quot; onclick=\u0026quot;saCopyHTML()\u0026quot;\u0026gt;HTMLをコピー\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;sa-btn sa-btn-secondary\u0026quot; onclick=\u0026quot;saToggleCode()\u0026quot;\u0026gt;HTMLを表示\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;sa-btn sa-btn-secondary\u0026quot; onclick=\u0026quot;saReset()\u0026quot;\u0026gt;リセット\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;span class=\u0026quot;sa-toast\u0026quot; id=\u0026quot;sa-toast\u0026quot;\u0026gt;クリップボードにコピーしました！\u0026lt;/span\u0026gt; \u0026lt;textarea class=\u0026quot;sa-html-out\u0026quot; id=\u0026quot;sa-html-out\u0026quot; readonly\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; メールクライアントへの設置方法 Gmail への設置手順 上の「HTMLをコピー」ボタンをクリックします。 Gmailを開き、右上の歯車アイコン → 「すべての設定を表示」をクリック。 「全般」タブを開き、「署名」セクションまでスクロールして「新規作成」をクリック。 署名名を入力（例：「ビジネス用」）し、署名入力欄の中をクリック。 ツールバー内の「⋮ その他のオプション」→「HTMLとして編集」を選択。 コピーしたHTMLを貼り付けて「OK」をクリック。 ページ下部の「変更を保存」をクリックして完了。 Outlook（Windows・Mac）への設置手順 上の「HTMLをコピー」ボタンをクリックします。 Outlookで「新しいメール」を開く。 「挿入」→「署名」→「署名…」を選択。 「新規」をクリックして名前を付け、編集エリアをクリック。 メモ帳にHTMLを貼り付けて sig.htm として保存。 Outlook署名エディターの「ソース / HTML」ボタンからHTMLを貼り付けるか、保存した .htm ファイルをドラッグ。 「OK」をクリックし、必要に応じてデフォルト署名として設定して完了。 Apple Mail（macOS）への設置手順 上の「HTMLをコピー」ボタンをクリックします。 「メール」→「設定」→「署名」を開く。 アカウントを選択して「+」で新しい署名を追加。 署名本文に仮のテキスト（例：「x」）を入力してメールを終了。 ターミナルを開いて open ~/Library/Mail を実行。 「V10（またはご使用のバージョン）→ アカウントフォルダ → Data → Signatures」に移動。 .mailsignature ファイルをテキストエディターで開き、仮テキスト部分をコピーしたHTMLに置き換えて保存。 メールを再起動して完了。 関連する無料ツール メタタグジェネレーター プライバシーポリシージェネレーター HTMLテーブルジェネレーター freee で請求書・経費管理もスマートに メール署名が整ったら、次は業務効率化。freee の無料プランで請求書作成・経費精算・確定申告をまとめて管理できます。\nfreee を無料で試す メール署名をより効果的にするコツ 情報は簡潔に。 4〜6行を目安にしましょう。情報が多すぎると読まれにくくなり、かえって印象が薄れます。\nメール安全フォントを使う。 このツールはArial・Georgia・Verdanaなどのウェブセーフフォントをデフォルトとしており、外部フォントの読み込みなしにあらゆるメールクライアントで正しく表示されます。\n画像は控えめに。 多くのメールクライアントはデフォルトで画像をブロックします。ロゴを使う場合は安定したURLにホストした \u0026lt;img\u0026gt; タグを利用してください。生成されたHTMLに手動で追加するのが最も確実です。\n送信前にテスト。 署名を設定したら、まず自分宛にテストメールを送り、モバイルとデスクトップ両方で表示を確認しましょう。\n定期的に更新。 役職や連絡先が変わった際は忘れずに署名も更新してください。常に正確な情報を相手に届けることが信頼の基本です。\n関連ツール Email Template Builder → Email Template Builderツール メールアドレス検証 → メールアドレス検証ツール 関連記事 不動産営業向けChatGPTプロンプト集 完全ガイド2026 不動産営業 ChatGPTで物件紹介メールを3分で作成する方法 ","permalink":"https://productivity-works.com/ja/tools/email-signature-generator/","summary":"\u003cp\u003eアカウント登録不要・データ送信なし。情報を入力してテンプレートを選ぶだけで、プロフェッショナルなメール署名をすぐに作成できます。生成されたHTMLをGmail・Outlook・Apple Mailにそのまま貼り付けて使用してください。\u003c/p\u003e\n\u003cdiv id=\"sig-app\"\u003e\n\u003cstyle\u003e\n/* ── スコープ済みスタイル: すべてのセレクターに #sig-app プレフィックス ── */\n#sig-app *,\n#sig-app *::before,\n#sig-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\u003cp\u003e#sig-app {\nfont-family: \u0026ldquo;Hiragino Sans\u0026rdquo;, \u0026ldquo;Hiragino Kaku Gothic ProN\u0026rdquo;, \u0026ldquo;Noto Sans JP\u0026rdquo;, \u0026ldquo;Yu Gothic\u0026rdquo;, Meiryo, -apple-system, sans-serif;\nfont-size: 15px;\ncolor: #1a1a1a;\nline-height: 1.6;\nmax-width: 960px;\nmargin: 0 auto;\npadding: 0 16px 48px;\n}\u003c/p\u003e\n\u003cp\u003e/* ── レイアウトグリッド ── */\n#sig-app .sa-grid {\ndisplay: grid;\ngrid-template-columns: 1fr 1fr;\ngap: 32px;\nmargin-top: 32px;\n}\n@media (max-width: 680px) {\n#sig-app .sa-grid { grid-template-columns: 1fr; }\n}\u003c/p\u003e","title":"メール署名ジェネレーター — 無料プロフェッショナルツール"},{"content":" テキストを入力してください テキストをコピー クリア 0 単語数 0 文字数\n（スペース含む） 0 文字数\n（スペース除く） 0 文の数 0 段落数 0.0 平均単語長 0% ユニーク語率 \u0026nbsp;（0 / 0 語） \u0026#128214; 0秒 読了時間（225語/分） \u0026#127897; 0秒 朗読時間（130語/分） 可読性スコア（英文テキスト向け） Flesch Reading Ease（0〜100、高いほど読みやすい） — 0 難解60 標準100 易しい テキストを入力すると計算されます Flesch-Kincaid グレードレベル（米国学年相当） — K学年8年16+（大学） テキストを入力すると計算されます 頻出キーワード（上位10件） テキストを入力するとキーワード分析が表示されます 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n文字数カウント → 文字数カウンター 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール Case Converter → Case Converterツール Character Counter → Character Counterツール Lorem Ipsum Generator → Lorem Ipsum Generatorツール 関連記事 AIで高品質な文章を作成するコツ7つ【プロが使うテクニック】 AI要約ツール おすすめ無料10選【2026年版】用途別に徹底比較 ChatGPTプロンプトの書き方コツ【2026年版】すぐ使える例文テンプレート付き ","permalink":"https://productivity-works.com/ja/tools/text-statistics/","summary":"\u003cdiv id=\"ts-app\"\u003e\n\u003cstyle\u003e\n#ts-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', 'Meiryo', system-ui, sans-serif;\n  background: #0f0f13;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin: 0 auto;\n  max-width: 980px;\n  box-sizing: border-box;\n}\n#ts-app * { box-sizing: border-box; }\n\n#ts-app h2 {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #f1f5f9;\n  margin: 0 0 12px 0;\n}\n#ts-app h3 {\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #94a3b8;\n  margin: 0 0 10px 0;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n\n#ts-textarea {\n  width: 100%;\n  min-height: 170px;\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  color: #e2e8f0;\n  font-size: 0.97rem;\n  padding: 12px 14px;\n  resize: vertical;\n  font-family: inherit;\n  transition: border-color 0.2s;\n  outline: none;\n  line-height: 1.7;\n}\n#ts-textarea:focus { border-color: #6366f1; }\n#ts-textarea::placeholder { color: #4a4a6a; }\n\n.ts-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 10px;\n  margin-bottom: 22px;\n}\n.ts-btn {\n  padding: 7px 16px;\n  border-radius: 6px;\n  border: none;\n  font-size: 0.84rem;\n  font-weight: 700;\n  cursor: pointer;\n  font-family: inherit;\n  transition: background 0.15s, transform 0.1s;\n}\n.ts-btn:active { transform: scale(0.97); }\n.ts-btn-primary { background: #6366f1; color: #fff; }\n.ts-btn-primary:hover { background: #4f46e5; }\n.ts-btn-danger { background: #1a1a24; color: #f87171; border: 1px solid #3d2020; }\n.ts-btn-danger:hover { background: #2d1a1a; }\n.ts-btn-copy { background: #1a1a24; color: #a5b4fc; border: 1px solid #2d2d4d; }\n.ts-btn-copy:hover { background: #22224a; }\n\n.ts-stats-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n  gap: 10px;\n  margin-bottom: 20px;\n}\n.ts-stat-card {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 12px 14px;\n  text-align: center;\n}\n.ts-stat-value {\n  font-size: 1.45rem;\n  font-weight: 700;\n  color: #a5b4fc;\n  line-height: 1.2;\n}\n.ts-stat-label {\n  font-size: 0.73rem;\n  color: #64748b;\n  margin-top: 4px;\n  line-height: 1.4;\n}\n\n.ts-time-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n  gap: 10px;\n  margin-bottom: 20px;\n}\n.ts-time-card {\n  background: #161b2e;\n  border: 1px solid #1e2a4a;\n  border-radius: 8px;\n  padding: 12px 16px;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n.ts-time-icon { font-size: 1.4rem; line-height: 1; }\n.ts-time-val {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #7dd3fc;\n}\n.ts-time-desc { font-size: 0.73rem; color: #64748b; margin-top: 2px; }\n\n.ts-readability-wrap {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 16px;\n  margin-bottom: 20px;\n}\n.ts-scores-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-top: 10px;\n}\n.ts-score-label {\n  font-size: 0.75rem;\n  color: #64748b;\n  margin-bottom: 6px;\n}\n.ts-score-num {\n  font-size: 1.6rem;\n  font-weight: 700;\n  color: #f1f5f9;\n  line-height: 1;\n}\n.ts-score-desc {\n  font-size: 0.78rem;\n  color: #94a3b8;\n  margin-top: 5px;\n}\n.ts-rbar-track {\n  background: #0f0f18;\n  border-radius: 99px;\n  height: 8px;\n  margin: 8px 0 4px;\n  overflow: hidden;\n}\n.ts-rbar-fill {\n  height: 100%;\n  border-radius: 99px;\n  transition: width 0.4s ease, background 0.4s;\n}\n.ts-rbar-labels {\n  display: flex;\n  justify-content: space-between;\n  font-size: 0.68rem;\n  color: #475569;\n}\n\n.ts-section {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 16px;\n  margin-bottom: 20px;\n}\n.ts-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.85rem;\n}\n.ts-table th {\n  text-align: left;\n  color: #64748b;\n  font-size: 0.73rem;\n  font-weight: 700;\n  padding: 6px 10px;\n  border-bottom: 1px solid #2d2d3d;\n}\n.ts-table td {\n  padding: 7px 10px;\n  color: #e2e8f0;\n  border-bottom: 1px solid #1e1e2c;\n}\n.ts-table tr:last-child td { border-bottom: none; }\n.ts-table tr:hover td { background: #20202e; }\n.ts-density-bar {\n  display: inline-block;\n  height: 6px;\n  border-radius: 3px;\n  background: #6366f1;\n  vertical-align: middle;\n  margin-right: 6px;\n  transition: width 0.3s;\n}\n\n.ts-unique-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  background: #12192e;\n  border: 1px solid #1e2a4a;\n  border-radius: 8px;\n  padding: 10px 16px;\n  margin-bottom: 20px;\n  font-size: 0.88rem;\n  color: #94a3b8;\n}\n.ts-unique-pct {\n  font-size: 1.4rem;\n  font-weight: 700;\n  color: #34d399;\n}\n\n.ts-empty {\n  color: #3a3a5a;\n  font-size: 0.84rem;\n  text-align: center;\n  padding: 14px 0;\n}\n\n@media (max-width: 600px) {\n  #ts-app { padding: 16px 12px; }\n  .ts-stats-grid { grid-template-columns: repeat(2, 1fr); }\n  .ts-time-grid { grid-template-columns: 1fr 1fr; }\n  .ts-scores-row { grid-template-columns: 1fr; }\n}\n\u003c/style\u003e\n\u003ch2\u003eテキストを入力してください\u003c/h2\u003e\n\u003ctextarea id=\"ts-textarea\" placeholder=\"ここにテキストを貼り付けるか入力してください…\"\u003e\u003c/textarea\u003e\n\u003cdiv class=\"ts-toolbar\"\u003e\n  \u003cbutton class=\"ts-btn ts-btn-copy\" onclick=\"tsCopyText()\"\u003eテキストをコピー\u003c/button\u003e\n  \u003cbutton class=\"ts-btn ts-btn-danger\" onclick=\"tsClear()\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- 基本統計 --\u003e\n\u003cdiv class=\"ts-stats-grid\"\u003e\n  \u003cdiv class=\"ts-stat-card\"\u003e\n    \u003cdiv class=\"ts-stat-value\" id=\"ts-words\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"ts-stat-label\"\u003e単語数\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ts-stat-card\"\u003e\n    \u003cdiv class=\"ts-stat-value\" id=\"ts-chars\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"ts-stat-label\"\u003e文字数\u003cbr\u003e（スペース含む）\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ts-stat-card\"\u003e\n    \u003cdiv class=\"ts-stat-value\" id=\"ts-chars-no\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"ts-stat-label\"\u003e文字数\u003cbr\u003e（スペース除く）\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ts-stat-card\"\u003e\n    \u003cdiv class=\"ts-stat-value\" id=\"ts-sentences\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"ts-stat-label\"\u003e文の数\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ts-stat-card\"\u003e\n    \u003cdiv class=\"ts-stat-value\" id=\"ts-paragraphs\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"ts-stat-label\"\u003e段落数\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ts-stat-card\"\u003e\n    \u003cdiv class=\"ts-stat-value\" id=\"ts-avg-word\"\u003e0.0\u003c/div\u003e\n    \u003cdiv class=\"ts-stat-label\"\u003e平均単語長\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ユニーク語率 --\u003e\n\u003cdiv class=\"ts-unique-badge\"\u003e\n  \u003cspan class=\"ts-unique-pct\" id=\"ts-unique-pct\"\u003e0%\u003c/span\u003e\n  \u003cspan\u003eユニーク語率 \u0026nbsp;（\u003cspan id=\"ts-unique-count\"\u003e0\u003c/span\u003e / \u003cspan id=\"ts-unique-total\"\u003e0\u003c/span\u003e 語）\u003c/span\u003e\n\u003c/div\u003e\n\u003c!-- 読了・朗読時間 --\u003e\n\u003cdiv class=\"ts-time-grid\"\u003e\n  \u003cdiv class=\"ts-time-card\"\u003e\n    \u003cdiv class=\"ts-time-icon\"\u003e\u0026#128214;\u003c/div\u003e\n    \u003cdiv\u003e\n      \u003cdiv class=\"ts-time-val\" id=\"ts-read-time\"\u003e0秒\u003c/div\u003e\n      \u003cdiv class=\"ts-time-desc\"\u003e読了時間（225語/分）\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ts-time-card\"\u003e\n    \u003cdiv class=\"ts-time-icon\"\u003e\u0026#127897;\u003c/div\u003e\n    \u003cdiv\u003e\n      \u003cdiv class=\"ts-time-val\" id=\"ts-speak-time\"\u003e0秒\u003c/div\u003e\n      \u003cdiv class=\"ts-time-desc\"\u003e朗読時間（130語/分）\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 可読性スコア --\u003e\n\u003cdiv class=\"ts-readability-wrap\"\u003e\n  \u003ch3\u003e可読性スコア（英文テキスト向け）\u003c/h3\u003e\n  \u003cdiv class=\"ts-scores-row\"\u003e\n    \u003c!-- Flesch Reading Ease --\u003e\n    \u003cdiv class=\"ts-score-block\"\u003e\n      \u003cdiv class=\"ts-score-label\"\u003eFlesch Reading Ease（0〜100、高いほど読みやすい）\u003c/div\u003e\n      \u003cdiv class=\"ts-score-num\" id=\"ts-fre-score\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"ts-rbar-track\"\u003e\n        \u003cdiv class=\"ts-rbar-fill\" id=\"ts-fre-fill\" style=\"width:0%;background:#6366f1;\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"ts-rbar-labels\"\u003e\u003cspan\u003e0 難解\u003c/span\u003e\u003cspan\u003e60 標準\u003c/span\u003e\u003cspan\u003e100 易しい\u003c/span\u003e\u003c/div\u003e\n      \u003cdiv class=\"ts-score-desc\" id=\"ts-fre-desc\"\u003eテキストを入力すると計算されます\u003c/div\u003e\n    \u003c/div\u003e\n    \u003c!-- Flesch-Kincaid Grade Level --\u003e\n    \u003cdiv class=\"ts-score-block\"\u003e\n      \u003cdiv class=\"ts-score-label\"\u003eFlesch-Kincaid グレードレベル（米国学年相当）\u003c/div\u003e\n      \u003cdiv class=\"ts-score-num\" id=\"ts-fkg-score\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"ts-rbar-track\"\u003e\n        \u003cdiv class=\"ts-rbar-fill\" id=\"ts-fkg-fill\" style=\"width:0%;background:#6366f1;\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"ts-rbar-labels\"\u003e\u003cspan\u003eK学年\u003c/span\u003e\u003cspan\u003e8年\u003c/span\u003e\u003cspan\u003e16+（大学）\u003c/span\u003e\u003c/div\u003e\n      \u003cdiv class=\"ts-score-desc\" id=\"ts-fkg-desc\"\u003eテキストを入力すると計算されます\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 頻出キーワード --\u003e\n\u003cdiv class=\"ts-section\"\u003e\n  \u003ch3\u003e頻出キーワード（上位10件）\u003c/h3\u003e\n  \u003cdiv id=\"ts-keywords-wrap\"\u003e\u003cdiv class=\"ts-empty\"\u003eテキストを入力するとキーワード分析が表示されます\u003c/div\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var STOP_EN = new Set([\n    'a','an','the','and','but','or','nor','for','yet','so','in','on','at','to',\n    'of','by','up','as','is','it','its','be','was','are','were','been','being',\n    'have','has','had','do','does','did','will','would','could','should','may',\n    'might','shall','can','this','that','these','those','i','you','he','she','we',\n    'they','my','your','his','her','our','their','me','him','us','them','what',\n    'which','who','when','where','why','how','all','each','every','both','few',\n    'more','most','other','some','such','no','not','only','own','same','than',\n    'too','very','just','because','if','then','there','here','about','into',\n    'through','during','before','after','above','below','from','with','without',\n    'also','any','get','got','use','used','one','two','three','new','good','like'\n  ]);\n  var STOP_JA = new Set([\n    'の','に','は','を','た','が','で','て','と','し','れ','さ','ある','いる','も',\n    'する','から','な','こと','として','い','や','れる','など','なっ','ない','この',\n    'ため','その','あっ','よう','また','もの','という','あり','まで','られ','なる',\n    'へ','か','だ','これ','によって','により','おり','より','による','ず','なり','られる'\n  ]);\n\n  function getWords(t) { return t.match(/\\b[a-zA-Z']+\\b/g) || []; }\n\n  function getJaChars(t) {\n    return (t.match(/[\\u3000-\\u9fff\\uf900-\\ufaff\\uff01-\\uffee]/g) || []);\n  }\n\n  function getSentences(t) {\n    var s = t.trim();\n    if (!s) return 0;\n    var m = s.match(/[^。！？.!?]*[。！？.!?]+/g);\n    return m ? m.length : (s.length \u003e 0 ? 1 : 0);\n  }\n\n  function getParagraphs(t) {\n    var s = t.trim();\n    if (!s) return 0;\n    return s.split(/\\n\\s*\\n+/).filter(function(p){ return p.trim().length \u003e 0; }).length || 1;\n  }\n\n  function formatTime(mins) {\n    if (mins === 0) return '0秒';\n    if (mins \u003c 1) return Math.round(mins * 60) + '秒';\n    var m = Math.floor(mins);\n    var s = Math.round((mins - m) * 60);\n    if (s === 0) return m + '分';\n    return m + '分' + s + '秒';\n  }\n\n  function countSyllables(word) {\n    word = word.toLowerCase().replace(/[^a-z]/g, '');\n    if (!word) return 0;\n    if (word.length \u003c= 3) return 1;\n    word = word.replace(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/, '');\n    word = word.replace(/^y/, '');\n    var m = word.match(/[aeiouy]{1,2}/g);\n    return m ? Math.max(1, m.length) : 1;\n  }\n\n  function computeReadability(words, sentences) {\n    if (!words.length || !sentences) return null;\n    var syl = words.reduce(function(a,w){ return a + countSyllables(w); }, 0);\n    var asl = words.length / sentences;\n    var asw = syl / words.length;\n    var fre = 206.835 - 1.015 * asl - 84.6 * asw;\n    fre = Math.round(Math.max(0, Math.min(100, fre)));\n    var fkg = 0.39 * asl + 11.8 * asw - 15.59;\n    fkg = Math.max(0, fkg);\n    return { fre: fre, fkg: parseFloat(fkg.toFixed(1)) };\n  }\n\n  function freLabel(s) {\n    if (s \u003e= 90) return 'とても簡単（小学5年生レベル）';\n    if (s \u003e= 80) return '簡単（小学6年生レベル）';\n    if (s \u003e= 70) return 'やや簡単（中学1年生レベル）';\n    if (s \u003e= 60) return '標準（中学2〜3年生レベル）';\n    if (s \u003e= 50) return 'やや難しい（高校レベル）';\n    if (s \u003e= 30) return '難しい（大学レベル）';\n    return '非常に難しい（専門家レベル）';\n  }\n\n  function freColor(s) {\n    if (s \u003e= 70) return '#4ade80';\n    if (s \u003e= 50) return '#facc15';\n    if (s \u003e= 30) return '#fb923c';\n    return '#f87171';\n  }\n\n  function fkgLabel(g) {\n    if (g \u003c= 1) return '幼稚園・小学低学年相当';\n    if (g \u003c= 6) return '小学校レベル';\n    if (g \u003c= 8) return '中学校レベル';\n    if (g \u003c= 12) return '高校レベル';\n    if (g \u003c= 16) return '大学レベル';\n    return '大学院・専門家レベル';\n  }\n\n  function fkgColor(g) {\n    if (g \u003c= 6) return '#4ade80';\n    if (g \u003c= 9) return '#facc15';\n    if (g \u003c= 12) return '#fb923c';\n    return '#f87171';\n  }\n\n  function esc(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  function analyze() {\n    var text = document.getElementById('ts-textarea').value;\n    var words = getWords(text);\n    var wc = words.length;\n    var jaChars = getJaChars(text);\n    var totalTokens = wc + jaChars.length;\n\n    var sentences = getSentences(text);\n    var paragraphs = getParagraphs(text);\n    var avgLen = wc \u003e 0\n      ? (words.reduce(function(a,w){ return a + w.replace(/'/g,'').length; }, 0) / wc).toFixed(1)\n      : '0.0';\n\n    // Unique words (EN)\n    var lower = words.map(function(w){ return w.toLowerCase(); });\n    var uniqueSet = new Set(lower);\n    var uniqueCount = uniqueSet.size;\n    var uniquePct = wc \u003e 0 ? Math.round((uniqueCount / wc) * 100) : 0;\n\n    document.getElementById('ts-words').textContent = totalTokens.toLocaleString();\n    document.getElementById('ts-chars').textContent = text.length.toLocaleString();\n    document.getElementById('ts-chars-no').textContent = text.replace(/\\s/g,'').length.toLocaleString();\n    document.getElementById('ts-sentences').textContent = sentences.toLocaleString();\n    document.getElementById('ts-paragraphs').textContent = paragraphs.toLocaleString();\n    document.getElementById('ts-avg-word').textContent = avgLen;\n\n    document.getElementById('ts-unique-pct').textContent = uniquePct + '%';\n    document.getElementById('ts-unique-count').textContent = uniqueCount.toLocaleString();\n    document.getElementById('ts-unique-total').textContent = wc.toLocaleString();\n\n    document.getElementById('ts-read-time').textContent = formatTime(totalTokens / 225);\n    document.getElementById('ts-speak-time').textContent = formatTime(totalTokens / 130);\n\n    var rd = words.length \u003e= 5 ? computeReadability(words, sentences) : null;\n    var freScoreEl = document.getElementById('ts-fre-score');\n    var freDescEl  = document.getElementById('ts-fre-desc');\n    var freFillEl  = document.getElementById('ts-fre-fill');\n    var fkgScoreEl = document.getElementById('ts-fkg-score');\n    var fkgDescEl  = document.getElementById('ts-fkg-desc');\n    var fkgFillEl  = document.getElementById('ts-fkg-fill');\n\n    if (!rd) {\n      freScoreEl.textContent = '\\u2014'; freDescEl.textContent = 'テキストを入力すると計算されます';\n      freFillEl.style.width = '0%'; freFillEl.style.background = '#6366f1';\n      fkgScoreEl.textContent = '\\u2014'; fkgDescEl.textContent = 'テキストを入力すると計算されます';\n      fkgFillEl.style.width = '0%'; fkgFillEl.style.background = '#6366f1';\n    } else {\n      freScoreEl.textContent = rd.fre;\n      freDescEl.textContent = freLabel(rd.fre);\n      freFillEl.style.width = rd.fre + '%';\n      freFillEl.style.background = freColor(rd.fre);\n\n      fkgScoreEl.textContent = rd.fkg;\n      fkgDescEl.textContent = fkgLabel(rd.fkg);\n      var fkgPct = Math.min(100, Math.round((rd.fkg / 16) * 100));\n      fkgFillEl.style.width = fkgPct + '%';\n      fkgFillEl.style.background = fkgColor(rd.fkg);\n    }\n\n    // Keywords\n    var wrap = document.getElementById('ts-keywords-wrap');\n    if (!text.trim()) {\n      wrap.innerHTML = '\u003cdiv class=\"ts-empty\"\u003eテキストを入力するとキーワード分析が表示されます\u003c/div\u003e';\n      return;\n    }\n    var freq = {};\n    lower.forEach(function(lw) {\n      if (!STOP_EN.has(lw) \u0026\u0026 lw.replace(/'/g,'').length \u003e 1) {\n        freq[lw] = (freq[lw] || 0) + 1;\n      }\n    });\n    // Japanese phrase tokens\n    var jaParts = text.match(/[^\\s、。！？\\n,.!?「」『』【】\\u3000]+/g) || [];\n    jaParts.forEach(function(p) {\n      if (/[\\u3040-\\u9fff]/.test(p) \u0026\u0026 p.length \u003e= 2) {\n        if (!STOP_JA.has(p)) freq[p] = (freq[p] || 0) + 1;\n      }\n    });\n    var sorted = Object.keys(freq).sort(function(a,b){ return freq[b]-freq[a]; }).slice(0,10);\n    if (!sorted.length) {\n      wrap.innerHTML = '\u003cdiv class=\"ts-empty\"\u003e有効なキーワードが見つかりませんでした\u003c/div\u003e';\n      return;\n    }\n    var maxC = freq[sorted[0]];\n    var totalRef = Math.max(totalTokens, 1);\n    var html = '\u003ctable class=\"ts-table\"\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003eキーワード\u003c/th\u003e\u003cth\u003e出現数\u003c/th\u003e\u003cth\u003e密度\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e';\n    sorted.forEach(function(word, i) {\n      var c = freq[word];\n      var d = ((c / totalRef) * 100).toFixed(2);\n      var bw = Math.round((c / maxC) * 90);\n      html += '\u003ctr\u003e'\n        + '\u003ctd style=\"color:#475569;\"\u003e' + (i+1) + '\u003c/td\u003e'\n        + '\u003ctd style=\"color:#a5b4fc;font-weight:700;\"\u003e' + esc(word) + '\u003c/td\u003e'\n        + '\u003ctd\u003e' + c + '\u003c/td\u003e'\n        + '\u003ctd\u003e\u003cspan class=\"ts-density-bar\" style=\"width:' + bw + 'px\"\u003e\u003c/span\u003e' + d + '%\u003c/td\u003e'\n        + '\u003c/tr\u003e';\n    });\n    html += '\u003c/tbody\u003e\u003c/table\u003e';\n    wrap.innerHTML = html;\n  }\n\n  window.tsClear = function() {\n    document.getElementById('ts-textarea').value = '';\n    analyze();\n  };\n\n  window.tsCopyText = function() {\n    var ta = document.getElementById('ts-textarea');\n    ta.select();\n    try { document.execCommand('copy'); } catch(e) {}\n    ta.setSelectionRange(0, 0);\n  };\n\n  document.getElementById('ts-textarea').addEventListener('input', analyze);\n  analyze();\n})();\n\u003c/script\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e確定申告・会計をもっとラクに？\u003c/strong\u003e \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計\u003c/a\u003e\n なら、フリーランスの経費管理もクラウドで簡単。\u003c/p\u003e","title":"テキスト統計分析ツール"},{"content":"Unixタイムスタンプを瞬時に変換 — エポック値を貼り付けると人間が読める日時を表示。日時を入力するとタイムスタンプに変換。ライブクロック・複数フォーマット・ミリ秒対応・タイムゾーン選択付き。\n現在のUnixタイムスタンプ（自動更新） — — 共通設定 単位： 秒（seconds） ミリ秒（ms） タイムゾーン： タイムスタンプ → 日時に変換 現在時刻を使用 日時 → タイムスタンプに変換 現在時刻を使用 よく使うタイムスタンプ（参照用） イベント Unix（秒） 日時（UTC） freeeで会計・請求書をもっとラクに タイムスタンプの確認だけでなく、日々の会計処理・請求書発行・給与計算も自動化しませんか？freeeならタイムログ・経費精算・確定申告まで一括管理できます。\nfreeeを無料で試す Unixタイムスタンプとは？ Unixタイムスタンプ（エポック時間）は、1970年1月1日 00:00:00 UTC から経過した秒数（またはミリ秒数）です。データベース・API・ログファイル・プログラミング言語で広く使われる共通の時間表現です。\nフォーマット 例 秒（標準） 1700000000 ミリ秒（JavaScript等） 1700000000000 ISO 8601 2023-11-15T07:13:20+09:00 RFC 2822 Wed, 15 Nov 2023 07:13:20 +0900 ヒント： 13桁ならミリ秒、10桁なら秒です。上の単位セレクターで切り替えてください。\n関連ツール タイムゾーンを変換 → タイムゾーン変換ツール Cron式を生成 → Cron式ジェネレーター 年齢を計算 → 年齢計算ツール ","permalink":"https://productivity-works.com/ja/tools/timestamp-converter/","summary":"\u003cp\u003e\u003cstrong\u003eUnixタイムスタンプを瞬時に変換\u003c/strong\u003e — エポック値を貼り付けると人間が読める日時を表示。日時を入力するとタイムスタンプに変換。ライブクロック・複数フォーマット・ミリ秒対応・タイムゾーン選択付き。\u003c/p\u003e\n\u003cdiv id=\"ts-app\"\u003e\n\u003cstyle\u003e\n  #ts-app *,\n  #ts-app *::before,\n  #ts-app *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n  #ts-app {\n    font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo,\n                 -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    font-size: 15px;\n    line-height: 1.7;\n    color: #1a1a2e;\n    max-width: 800px;\n  }\n  #ts-app .ts-section {\n    background: #f8f9ff;\n    border: 1px solid #e0e4f0;\n    border-radius: 10px;\n    padding: 20px 24px;\n    margin-bottom: 20px;\n  }\n  #ts-app .ts-section-title {\n    font-size: 12px;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n    color: #6366f1;\n    margin-bottom: 14px;\n  }\n  #ts-app .ts-live-clock {\n    background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n    border-radius: 10px;\n    padding: 20px 24px;\n    margin-bottom: 20px;\n    color: #fff;\n  }\n  #ts-app .ts-live-label {\n    font-size: 12px;\n    font-weight: 600;\n    letter-spacing: 0.06em;\n    opacity: 0.8;\n    margin-bottom: 6px;\n  }\n  #ts-app .ts-live-value {\n    font-size: 36px;\n    font-weight: 700;\n    font-variant-numeric: tabular-nums;\n    letter-spacing: 0.02em;\n    word-break: break-all;\n  }\n  #ts-app .ts-live-sub {\n    font-size: 13px;\n    opacity: 0.75;\n    margin-top: 4px;\n    font-variant-numeric: tabular-nums;\n  }\n  #ts-app .ts-controls-row {\n    display: flex;\n    gap: 10px;\n    align-items: center;\n    flex-wrap: wrap;\n    margin-bottom: 16px;\n  }\n  #ts-app .ts-toggle-group {\n    display: flex;\n    border: 1px solid #c7d0ea;\n    border-radius: 6px;\n    overflow: hidden;\n  }\n  #ts-app .ts-toggle-btn {\n    padding: 7px 16px;\n    font-size: 13px;\n    font-weight: 600;\n    border: none;\n    background: #fff;\n    color: #555;\n    cursor: pointer;\n    transition: background 0.15s, color 0.15s;\n  }\n  #ts-app .ts-toggle-btn.active {\n    background: #6366f1;\n    color: #fff;\n  }\n  #ts-app .ts-toggle-btn:hover:not(.active) {\n    background: #eef0ff;\n  }\n  #ts-app select,\n  #ts-app input[type=\"text\"],\n  #ts-app input[type=\"number\"],\n  #ts-app input[type=\"datetime-local\"] {\n    padding: 8px 12px;\n    font-size: 14px;\n    border: 1px solid #c7d0ea;\n    border-radius: 6px;\n    background: #fff;\n    color: #1a1a2e;\n    outline: none;\n    transition: border-color 0.15s;\n    font-family: inherit;\n  }\n  #ts-app select:focus,\n  #ts-app input[type=\"text\"]:focus,\n  #ts-app input[type=\"number\"]:focus,\n  #ts-app input[type=\"datetime-local\"]:focus {\n    border-color: #6366f1;\n    box-shadow: 0 0 0 3px rgba(99,102,241,0.12);\n  }\n  #ts-app .ts-input-row {\n    display: flex;\n    gap: 10px;\n    align-items: center;\n    flex-wrap: wrap;\n    margin-bottom: 14px;\n  }\n  #ts-app .ts-input-wide {\n    flex: 1;\n    min-width: 200px;\n    font-family: \"SFMono-Regular\", Consolas, monospace;\n  }\n  #ts-app .ts-btn {\n    padding: 8px 18px;\n    font-size: 14px;\n    font-weight: 600;\n    border: none;\n    border-radius: 6px;\n    cursor: pointer;\n    background: #6366f1;\n    color: #fff;\n    transition: background 0.15s, transform 0.1s;\n    white-space: nowrap;\n    font-family: inherit;\n  }\n  #ts-app .ts-btn:hover { background: #4f46e5; }\n  #ts-app .ts-btn:active { transform: scale(0.97); }\n  #ts-app .ts-btn-secondary {\n    background: #fff;\n    color: #6366f1;\n    border: 1px solid #c7d0ea;\n  }\n  #ts-app .ts-btn-secondary:hover { background: #eef0ff; }\n  #ts-app .ts-results {\n    display: flex;\n    flex-direction: column;\n    gap: 8px;\n  }\n  #ts-app .ts-result-row {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    background: #fff;\n    border: 1px solid #e0e4f0;\n    border-radius: 7px;\n    padding: 10px 14px;\n    flex-wrap: wrap;\n  }\n  #ts-app .ts-result-label {\n    font-size: 11px;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.06em;\n    color: #888;\n    min-width: 120px;\n    flex-shrink: 0;\n  }\n  #ts-app .ts-result-value {\n    font-family: \"SFMono-Regular\", Consolas, monospace;\n    font-size: 13px;\n    color: #1a1a2e;\n    flex: 1;\n    word-break: break-all;\n    min-width: 150px;\n  }\n  #ts-app .ts-copy-btn {\n    padding: 4px 12px;\n    font-size: 12px;\n    font-weight: 600;\n    border: 1px solid #c7d0ea;\n    border-radius: 5px;\n    background: #fff;\n    color: #6366f1;\n    cursor: pointer;\n    transition: background 0.15s, color 0.15s;\n    flex-shrink: 0;\n    font-family: inherit;\n  }\n  #ts-app .ts-copy-btn:hover {\n    background: #6366f1;\n    color: #fff;\n    border-color: #6366f1;\n  }\n  #ts-app .ts-copy-btn.copied {\n    background: #10b981;\n    color: #fff;\n    border-color: #10b981;\n  }\n  #ts-app .ts-error {\n    color: #ef4444;\n    font-size: 13px;\n    margin-top: 6px;\n    min-height: 18px;\n  }\n  #ts-app .ts-ref-table {\n    width: 100%;\n    border-collapse: collapse;\n    font-size: 13.5px;\n  }\n  #ts-app .ts-ref-table th {\n    text-align: left;\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: 0.06em;\n    color: #888;\n    padding: 6px 10px;\n    border-bottom: 1px solid #e0e4f0;\n  }\n  #ts-app .ts-ref-table td {\n    padding: 9px 10px;\n    border-bottom: 1px solid #f0f2fa;\n    vertical-align: middle;\n  }\n  #ts-app .ts-ref-table tr:last-child td { border-bottom: none; }\n  #ts-app .ts-ref-table .ts-mono {\n    font-family: \"SFMono-Regular\", Consolas, monospace;\n  }\n  #ts-app .ts-ref-table .ts-ref-copy {\n    padding: 3px 10px;\n    font-size: 11px;\n    font-weight: 600;\n    border: 1px solid #c7d0ea;\n    border-radius: 4px;\n    background: #fff;\n    color: #6366f1;\n    cursor: pointer;\n    transition: background 0.15s, color 0.15s;\n    font-family: inherit;\n  }\n  #ts-app .ts-ref-table .ts-ref-copy:hover {\n    background: #6366f1;\n    color: #fff;\n    border-color: #6366f1;\n  }\n  #ts-app .ts-tz-row {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    flex-wrap: wrap;\n    margin-bottom: 14px;\n  }\n  #ts-app .ts-tz-label {\n    font-size: 13px;\n    font-weight: 600;\n    color: #555;\n    white-space: nowrap;\n  }\n  #ts-app select.ts-tz-select { min-width: 220px; }\n  #ts-app .ts-freee-cta {\n    background: #fff7ed;\n    border: 1px solid #fed7aa;\n    border-radius: 10px;\n    padding: 18px 22px;\n    margin-top: 24px;\n  }\n  #ts-app .ts-freee-cta-title {\n    font-size: 14px;\n    font-weight: 700;\n    color: #c2410c;\n    margin-bottom: 6px;\n  }\n  #ts-app .ts-freee-cta p {\n    font-size: 13px;\n    color: #7c3a1e;\n    margin-bottom: 10px;\n  }\n  #ts-app .ts-freee-btn {\n    display: inline-block;\n    padding: 9px 22px;\n    background: #f97316;\n    color: #fff;\n    font-weight: 700;\n    font-size: 14px;\n    border-radius: 6px;\n    text-decoration: none;\n    transition: background 0.15s;\n  }\n  #ts-app .ts-freee-btn:hover { background: #ea6c00; }\n  @media (max-width: 540px) {\n    #ts-app .ts-live-value { font-size: 26px; }\n    #ts-app .ts-result-label { min-width: 100px; }\n    #ts-app .ts-ref-table { font-size: 12px; }\n    #ts-app .ts-ref-table th, #ts-app .ts-ref-table td { padding: 7px 6px; }\n  }\n\u003c/style\u003e\n\u003c!-- ライブクロック --\u003e\n\u003cdiv class=\"ts-live-clock\"\u003e\n  \u003cdiv class=\"ts-live-label\"\u003e現在のUnixタイムスタンプ（自動更新）\u003c/div\u003e\n  \u003cdiv class=\"ts-live-value\" id=\"ts-live-val\"\u003e—\u003c/div\u003e\n  \u003cdiv class=\"ts-live-sub\" id=\"ts-live-sub\"\u003e—\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- グローバル設定 --\u003e\n\u003cdiv class=\"ts-section\"\u003e\n  \u003cdiv class=\"ts-section-title\"\u003e共通設定\u003c/div\u003e\n  \u003cdiv class=\"ts-controls-row\"\u003e\n    \u003cspan style=\"font-size:13px;font-weight:600;color:#555;\"\u003e単位：\u003c/span\u003e\n    \u003cdiv class=\"ts-toggle-group\"\u003e\n      \u003cbutton class=\"ts-toggle-btn active\" id=\"ts-unit-sec\" onclick=\"tsSetUnit('s')\"\u003e秒（seconds）\u003c/button\u003e\n      \u003cbutton class=\"ts-toggle-btn\" id=\"ts-unit-ms\" onclick=\"tsSetUnit('ms')\"\u003eミリ秒（ms）\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ts-tz-row\"\u003e\n    \u003cspan class=\"ts-tz-label\"\u003eタイムゾーン：\u003c/span\u003e\n    \u003cselect class=\"ts-tz-select\" id=\"ts-tz-select\" onchange=\"tsOnTzChange()\"\u003e\u003c/select\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- タイムスタンプ → 日時 --\u003e\n\u003cdiv class=\"ts-section\"\u003e\n  \u003cdiv class=\"ts-section-title\"\u003eタイムスタンプ → 日時に変換\u003c/div\u003e\n  \u003cdiv class=\"ts-input-row\"\u003e\n    \u003cinput type=\"number\" class=\"ts-input-wide\" id=\"ts-ts-input\"\n      placeholder=\"タイムスタンプを入力（例：1700000000）\" oninput=\"tsConvertTs()\" /\u003e\n    \u003cbutton class=\"ts-btn ts-btn-secondary\" onclick=\"tsUseNow()\"\u003e現在時刻を使用\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ts-error\" id=\"ts-ts-error\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"ts-results\" id=\"ts-ts-results\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 日時 → タイムスタンプ --\u003e\n\u003cdiv class=\"ts-section\"\u003e\n  \u003cdiv class=\"ts-section-title\"\u003e日時 → タイムスタンプに変換\u003c/div\u003e\n  \u003cdiv class=\"ts-input-row\"\u003e\n    \u003cinput type=\"datetime-local\" id=\"ts-dt-input\" oninput=\"tsConvertDt()\" /\u003e\n    \u003cbutton class=\"ts-btn ts-btn-secondary\" onclick=\"tsDtUseNow()\"\u003e現在時刻を使用\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ts-results\" id=\"ts-dt-results\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- よく使うタイムスタンプ --\u003e\n\u003cdiv class=\"ts-section\"\u003e\n  \u003cdiv class=\"ts-section-title\"\u003eよく使うタイムスタンプ（参照用）\u003c/div\u003e\n  \u003ctable class=\"ts-ref-table\"\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n        \u003cth\u003eイベント\u003c/th\u003e\n        \u003cth\u003eUnix（秒）\u003c/th\u003e\n        \u003cth\u003e日時（UTC）\u003c/th\u003e\n        \u003cth\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody id=\"ts-ref-body\"\u003e\u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  \"use strict\";\n\n  // ── State ────────────────────────────────────────────────\n  var unit = \"s\";\n  var tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n  var liveTimer = null;\n\n  // ── ラベル（日本語） ─────────────────────────────────────\n  var LABELS = {\n    utc:      \"UTC\",\n    local:    \"現地時刻\",\n    iso:      \"ISO 8601\",\n    rfc:      \"RFC 2822\",\n    relative: \"相対時間\",\n    unixSec:  \"Unix（秒）\",\n    unixMs:   \"Unix（ミリ秒）\"\n  };\n\n  // ── タイムゾーンリスト ───────────────────────────────────\n  var commonTzList = [\n    \"UTC\",\n    \"Asia/Tokyo\",\"Asia/Seoul\",\"Asia/Shanghai\",\"Asia/Singapore\",\"Asia/Bangkok\",\n    \"Asia/Kolkata\",\"Asia/Dubai\",\"Asia/Dhaka\",\n    \"Europe/London\",\"Europe/Paris\",\"Europe/Berlin\",\"Europe/Moscow\",\"Europe/Istanbul\",\n    \"America/New_York\",\"America/Chicago\",\"America/Denver\",\"America/Los_Angeles\",\n    \"America/Sao_Paulo\",\"America/Toronto\",\"America/Vancouver\",\n    \"Australia/Sydney\",\"Pacific/Auckland\",\"Pacific/Honolulu\"\n  ];\n\n  function buildTzSelect() {\n    var sel = document.getElementById(\"ts-tz-select\");\n    var allTz = [];\n    try {\n      if (Intl.supportedValuesOf) allTz = Intl.supportedValuesOf(\"timeZone\");\n    } catch(e) {}\n    if (allTz.length === 0) allTz = commonTzList;\n    var seen = {}, sorted = [];\n    allTz.forEach(function(z) { if (!seen[z]) { seen[z]=1; sorted.push(z); } });\n    sorted.sort();\n    var localTz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n    sel.innerHTML = \"\";\n    sorted.forEach(function(z) {\n      var opt = document.createElement(\"option\");\n      opt.value = z; opt.textContent = z;\n      if (z === localTz) opt.selected = true;\n      sel.appendChild(opt);\n    });\n    tz = sel.value;\n  }\n\n  function tsOnTzChange() {\n    tz = document.getElementById(\"ts-tz-select\").value;\n    tsConvertTs(); tsConvertDt(); renderRef();\n  }\n  window.tsOnTzChange = tsOnTzChange;\n\n  // ── 単位切り替え ─────────────────────────────────────────\n  function tsSetUnit(u) {\n    unit = u;\n    document.getElementById(\"ts-unit-sec\").classList.toggle(\"active\", u === \"s\");\n    document.getElementById(\"ts-unit-ms\").classList.toggle(\"active\", u === \"ms\");\n    startLiveClock();\n    tsConvertTs(); tsConvertDt(); renderRef();\n  }\n  window.tsSetUnit = tsSetUnit;\n\n  // ── ライブクロック ───────────────────────────────────────\n  function startLiveClock() {\n    if (liveTimer) clearInterval(liveTimer);\n    tickClock();\n    liveTimer = setInterval(tickClock, unit === \"ms\" ? 100 : 1000);\n  }\n\n  function tickClock() {\n    var now = Date.now();\n    var val = unit === \"ms\" ? now : Math.floor(now / 1000);\n    document.getElementById(\"ts-live-val\").textContent = val.toLocaleString(\"ja-JP\");\n    document.getElementById(\"ts-live-sub\").textContent =\n      formatInTz(new Date(now), tz, {\n        year:\"numeric\", month:\"2-digit\", day:\"2-digit\",\n        hour:\"2-digit\", minute:\"2-digit\", second:\"2-digit\",\n        timeZoneName:\"short\"\n      });\n  }\n\n  // ── ユーティリティ ───────────────────────────────────────\n  function formatInTz(date, timezone, opts) {\n    try {\n      return date.toLocaleString(\"ja-JP\", Object.assign({timeZone: timezone}, opts));\n    } catch(e) {\n      return date.toLocaleString(\"ja-JP\", opts);\n    }\n  }\n\n  function toIso8601(date, timezone) {\n    try {\n      var fmt = new Intl.DateTimeFormat(\"sv-SE\", {\n        timeZone: timezone,\n        year:\"numeric\", month:\"2-digit\", day:\"2-digit\",\n        hour:\"2-digit\", minute:\"2-digit\", second:\"2-digit\"\n      });\n      var parts = {};\n      fmt.formatToParts(date).forEach(function(p) { parts[p.type] = p.value; });\n      var base = parts.year+\"-\"+parts.month+\"-\"+parts.day+\"T\"+\n                 parts.hour+\":\"+parts.minute+\":\"+parts.second;\n      var utcMs = Date.parse(date.toLocaleString(\"en-US\", {timeZone:\"UTC\"}));\n      var localMs = Date.parse(date.toLocaleString(\"en-US\", {timeZone:timezone}));\n      var diffMin = Math.round((localMs - utcMs) / 60000);\n      var sign = diffMin \u003e= 0 ? \"+\" : \"-\";\n      var abs = Math.abs(diffMin);\n      var hh = String(Math.floor(abs/60)).padStart(2,\"0\");\n      var mm = String(abs%60).padStart(2,\"0\");\n      return base + sign + hh + \":\" + mm;\n    } catch(e) { return date.toISOString(); }\n  }\n\n  function toRfc2822(date) {\n    try {\n      var parts = {};\n      new Intl.DateTimeFormat(\"en-US\", {\n        timeZone: tz,\n        weekday:\"short\", day:\"2-digit\", month:\"short\", year:\"numeric\",\n        hour:\"2-digit\", minute:\"2-digit\", second:\"2-digit\", hour12:false\n      }).formatToParts(date).forEach(function(p){ parts[p.type] = p.value; });\n      var utcMs2 = Date.parse(date.toLocaleString(\"en-US\", {timeZone:\"UTC\"}));\n      var localMs2 = Date.parse(date.toLocaleString(\"en-US\", {timeZone:tz}));\n      var diffMin2 = Math.round((localMs2 - utcMs2) / 60000);\n      var sign2 = diffMin2 \u003e= 0 ? \"+\" : \"-\";\n      var abs2 = Math.abs(diffMin2);\n      var hh2 = String(Math.floor(abs2/60)).padStart(2,\"0\");\n      var mm2 = String(abs2%60).padStart(2,\"0\");\n      return (parts.weekday||\"\")+\", \"+(parts.day||\"\").replace(/\\D/g,\"\")+\" \"+\n             (parts.month||\"\")+\" \"+(parts.year||\"\")+\" \"+\n             (parts.hour||\"\").replace(/\\D/g,\"\").padStart(2,\"0\")+\":\"+\n             (parts.minute||\"\").padStart(2,\"0\")+\":\"+\n             (parts.second||\"\").padStart(2,\"0\")+\" \"+sign2+hh2+mm2;\n    } catch(e) { return date.toString(); }\n  }\n\n  function relativeTime(date) {\n    var diffMs = Date.now() - date.getTime();\n    var abs = Math.abs(diffMs);\n    var suffix = diffMs \u003e= 0 ? \"前\" : \"後\";\n    if (abs \u003c 5000)    return \"たった今\";\n    if (abs \u003c 60000)   return Math.round(abs/1000)+\"秒\"+suffix;\n    if (abs \u003c 3600000) return Math.round(abs/60000)+\"分\"+suffix;\n    if (abs \u003c 86400000) return Math.round(abs/3600000)+\"時間\"+suffix;\n    if (abs \u003c 2592000000) return Math.round(abs/86400000)+\"日\"+suffix;\n    if (abs \u003c 31536000000) return Math.round(abs/2592000000)+\"ヶ月\"+suffix;\n    return Math.round(abs/31536000000)+\"年\"+suffix;\n  }\n\n  function tsToDate(val) {\n    var n = parseFloat(val);\n    if (isNaN(n)) return null;\n    return new Date(unit === \"ms\" ? n : n * 1000);\n  }\n\n  // ── タイムスタンプ → 日時 ────────────────────────────────\n  function tsConvertTs() {\n    var raw = document.getElementById(\"ts-ts-input\").value.trim();\n    var errEl = document.getElementById(\"ts-ts-error\");\n    var resEl = document.getElementById(\"ts-ts-results\");\n    errEl.textContent = \"\";\n    if (!raw) { resEl.innerHTML = \"\"; return; }\n    var date = tsToDate(raw);\n    if (!date || isNaN(date.getTime())) {\n      errEl.textContent = \"無効なタイムスタンプです。数値を入力してください。\";\n      resEl.innerHTML = \"\"; return;\n    }\n    renderDateResults(resEl, date);\n  }\n  window.tsConvertTs = tsConvertTs;\n\n  function renderDateResults(container, date) {\n    var rows = [\n      { label: LABELS.utc,     value: date.toUTCString() },\n      { label: LABELS.local,   value: formatInTz(date, tz, {\n          year:\"numeric\", month:\"long\", day:\"numeric\", weekday:\"long\",\n          hour:\"2-digit\", minute:\"2-digit\", second:\"2-digit\", timeZoneName:\"short\"\n        })\n      },\n      { label: LABELS.iso,     value: toIso8601(date, tz) },\n      { label: LABELS.rfc,     value: toRfc2822(date) },\n      { label: LABELS.relative, value: relativeTime(date) },\n      { label: LABELS.unixSec, value: String(Math.floor(date.getTime()/1000)) },\n      { label: LABELS.unixMs,  value: String(date.getTime()) }\n    ];\n    container.innerHTML = rows.map(function(r) {\n      var id = \"tsrv-ja-\"+r.label.replace(/[^\\w]/g,\"_\");\n      return '\u003cdiv class=\"ts-result-row\"\u003e' +\n        '\u003cspan class=\"ts-result-label\"\u003e'+r.label+'\u003c/span\u003e' +\n        '\u003cspan class=\"ts-result-value\" id=\"'+id+'\"\u003e'+escHtml(r.value)+'\u003c/span\u003e' +\n        '\u003cbutton class=\"ts-copy-btn\" onclick=\"tsCopy(this,\\''+id+'\\')\"\u003eコピー\u003c/button\u003e' +\n        '\u003c/div\u003e';\n    }).join(\"\");\n  }\n\n  // ── 日時 → タイムスタンプ ────────────────────────────────\n  function tsConvertDt() {\n    var raw = document.getElementById(\"ts-dt-input\").value;\n    var resEl = document.getElementById(\"ts-dt-results\");\n    if (!raw) { resEl.innerHTML = \"\"; return; }\n    var date = parseDatetimeLocalAsTz(raw, tz);\n    if (!date || isNaN(date.getTime())) { resEl.innerHTML = \"\"; return; }\n    renderDateResults(resEl, date);\n  }\n  window.tsConvertDt = tsConvertDt;\n\n  function parseDatetimeLocalAsTz(s, timezone) {\n    if (!s) return null;\n    var parts = s.match(/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2}))?$/);\n    if (!parts) return null;\n    var iso = parts[1]+\"-\"+parts[2]+\"-\"+parts[3]+\"T\"+(parts[4]||\"00\")+\":\"+(parts[5]||\"00\")+\":\"+(parts[6]||\"00\");\n    var naive = new Date(iso + \"Z\");\n    if (isNaN(naive.getTime())) return null;\n    try {\n      var wallStr = naive.toLocaleString(\"sv-SE\", {timeZone: timezone});\n      var wParts = wallStr.match(/(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})/);\n      if (!wParts) return naive;\n      var wallMs = Date.UTC(+wParts[1],+wParts[2]-1,+wParts[3],+wParts[4],+wParts[5],+wParts[6]);\n      var naiveMs = Date.UTC(+parts[1],+parts[2]-1,+parts[3],+parts[4],+parts[5],+(parts[6]||0));\n      return new Date(naive.getTime() + (naiveMs - wallMs));\n    } catch(e) { return naive; }\n  }\n\n  // ── 現在時刻ボタン ───────────────────────────────────────\n  function tsUseNow() {\n    var now = Date.now();\n    document.getElementById(\"ts-ts-input\").value = unit === \"ms\" ? now : Math.floor(now/1000);\n    tsConvertTs();\n  }\n  window.tsUseNow = tsUseNow;\n\n  function tsDtUseNow() {\n    var now = new Date();\n    var y  = now.getFullYear();\n    var mo = String(now.getMonth()+1).padStart(2,\"0\");\n    var d  = String(now.getDate()).padStart(2,\"0\");\n    var h  = String(now.getHours()).padStart(2,\"0\");\n    var mi = String(now.getMinutes()).padStart(2,\"0\");\n    document.getElementById(\"ts-dt-input\").value = y+\"-\"+mo+\"-\"+d+\"T\"+h+\":\"+mi;\n    tsConvertDt();\n  }\n  window.tsDtUseNow = tsDtUseNow;\n\n  // ── コピー ───────────────────────────────────────────────\n  function tsCopy(btn, id) {\n    var el = document.getElementById(id);\n    if (!el) return;\n    var text = el.textContent;\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(text).then(function() { flashCopy(btn); });\n    } else {\n      var ta = document.createElement(\"textarea\");\n      ta.value = text;\n      document.body.appendChild(ta); ta.select();\n      document.execCommand(\"copy\"); document.body.removeChild(ta);\n      flashCopy(btn);\n    }\n  }\n  window.tsCopy = tsCopy;\n\n  function flashCopy(btn) {\n    var orig = btn.textContent;\n    btn.textContent = \"コピー済み！\";\n    btn.classList.add(\"copied\");\n    setTimeout(function() { btn.textContent = orig; btn.classList.remove(\"copied\"); }, 1500);\n  }\n\n  // ── 参照テーブル ─────────────────────────────────────────\n  var refEvents = [\n    { name: \"Unixエポック（基準点）\",      ts: 0 },\n    { name: \"Y2K（2000年1月1日）\",         ts: 946684800 },\n    { name: \"9.11テロ（2001年9月11日）\",   ts: 1000166400 },\n    { name: \"Unix 10億秒\",                 ts: 1000000000 },\n    { name: \"Unix 15億秒\",                 ts: 1500000000 },\n    { name: \"Unix 20億秒\",                 ts: 2000000000 },\n    { name: \"2030年1月1日\",                ts: 1893456000 },\n    { name: \"現在時刻\",                    ts: -1 },\n  ];\n\n  function renderRef() {\n    var body = document.getElementById(\"ts-ref-body\");\n    if (!body) return;\n    body.innerHTML = refEvents.map(function(ev) {\n      var secVal = ev.ts === -1 ? Math.floor(Date.now()/1000) : ev.ts;\n      var msVal  = ev.ts === -1 ? Date.now() : ev.ts * 1000;\n      var displayVal = unit === \"ms\" ? msVal : secVal;\n      var date = new Date(secVal * 1000);\n      var utcStr = date.toUTCString();\n      var copyId = \"tsref-ja-\"+ev.name.replace(/[^\\w]/g,\"_\");\n      return '\u003ctr\u003e'+\n        '\u003ctd\u003e'+escHtml(ev.name)+'\u003c/td\u003e'+\n        '\u003ctd class=\"ts-mono\" id=\"'+copyId+'\"\u003e'+displayVal+'\u003c/td\u003e'+\n        '\u003ctd\u003e'+escHtml(utcStr)+'\u003c/td\u003e'+\n        '\u003ctd\u003e\u003cbutton class=\"ts-ref-copy\" onclick=\"tsCopy(this,\\''+copyId+'\\')\"\u003eコピー\u003c/button\u003e\u003c/td\u003e'+\n        '\u003c/tr\u003e';\n    }).join(\"\");\n  }\n\n  function escHtml(s) {\n    return String(s)\n      .replace(/\u0026/g,\"\u0026amp;\").replace(/\u003c/g,\"\u0026lt;\")\n      .replace(/\u003e/g,\"\u0026gt;\").replace(/\"/g,\"\u0026quot;\");\n  }\n\n  // ── 初期化 ───────────────────────────────────────────────\n  buildTzSelect();\n  startLiveClock();\n  renderRef();\n\n})();\n\u003c/script\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv class=\"ts-freee-cta\"\u003e\n  \u003cdiv class=\"ts-freee-cta-title\"\u003efreeeで会計・請求書をもっとラクに\u003c/div\u003e\n  \u003cp\u003eタイムスタンプの確認だけでなく、日々の会計処理・請求書発行・給与計算も自動化しませんか？freeeならタイムログ・経費精算・確定申告まで一括管理できます。\u003c/p\u003e","title":"Unixタイムスタンプ変換ツール — エポック時間"},{"content":"無料のブラウザ完結型画像圧縮ツール — 画像はサーバーにアップロードされません。品質・フォーマットを調整してすぐにダウンロードできます。\nクリックまたはドラッグ＆ドロップで画像を追加\nJPEG · PNG · WebP · GIF · BMP 対応\n品質 80% 出力フォーマット JPEG PNG WebP 画像を圧縮する\n元のサイズ — 圧縮後のサイズ — 削減率 — 圧縮前 圧縮後 圧縮画像をダウンロード リセット / 別の画像をアップロード\n仕組み： 画像はお使いのデバイス内で処理され、サーバーには送信されません。ブラウザがHTML5 Canvasに画像を描画し、選択した品質レベルでcanvas.toBlob()を使って再エンコードします。\n使い方のヒント：\n写真にはJPEGが最もファイルサイズを小さくできます。透過が必要な場合はPNGまたはWebPを選択してください。 品質75〜85%程度なら、多くの場合オリジナルと見分けがつきません。 WebPはJPEGやPNGより高い圧縮率を実現できる場合があります。 関連ツール\n画像リサイズ → 画像リサイズツール 画像切り抜き → 画像クロッパー 確定申告・会計をもっとラクに？ freee会計 関連記事 無料AI画像生成ツール比較2026年版【目的別おすすめランキング】 AI画像生成おすすめツール比較2026年版【無料・有料・日本語対応】 ","permalink":"https://productivity-works.com/ja/tools/image-compressor/","summary":"\u003cp\u003e無料のブラウザ完結型画像圧縮ツール — 画像はサーバーにアップロードされません。品質・フォーマットを調整してすぐにダウンロードできます。\u003c/p\u003e\n\u003cdiv id=\"ic-app\"\u003e\n\u003cstyle\u003e\n#ic-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", sans-serif;\n  max-width: 780px;\n  margin: 0 auto;\n  color: #1a1a1a;\n}\n#ic-app * { box-sizing: border-box; }\n\u003cp\u003e#ic-drop-zone {\nborder: 2px dashed #ccc;\nborder-radius: 12px;\npadding: 48px 24px;\ntext-align: center;\ncursor: pointer;\ntransition: border-color 0.2s, background 0.2s;\nbackground: #fafafa;\nmargin-bottom: 24px;\n}\n#ic-drop-zone:hover, #ic-drop-zone.ic-dragover {\nborder-color: #4f8ef7;\nbackground: #f0f5ff;\n}\n#ic-drop-zone svg { display: block; margin: 0 auto 12px; }\n#ic-drop-zone p { margin: 0; color: #555; font-size: 0.97rem; }\n#ic-drop-zone strong { color: #333; }\n#ic-file-input { display: none; }\u003c/p\u003e","title":"画像圧縮ツール"},{"content":"マージン・ボーダー・パディング・コンテンツのサイズをリアルタイムで調整。Chrome DevToolsと同じ色分けで図が即座に更新され、コピー可能なCSSも自動生成されます。\n設定 \u0026lt;!-- Presets --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;bm-section-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;bm-section-label\u0026quot; style=\u0026quot;background:#e8eaff;color:#3a3a6e;\u0026quot;\u0026gt;プリセット\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bm-presets\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;bm-preset-btn active\u0026quot; onclick=\u0026quot;bmApplyPreset('card',this)\u0026quot;\u0026gt;カード\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bm-preset-btn\u0026quot; onclick=\u0026quot;bmApplyPreset('button',this)\u0026quot;\u0026gt;ボタン\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bm-preset-btn\u0026quot; onclick=\u0026quot;bmApplyPreset('input',this)\u0026quot;\u0026gt;入力欄\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bm-preset-btn\u0026quot; onclick=\u0026quot;bmApplyPreset('container',this)\u0026quot;\u0026gt;コンテナ\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bm-preset-btn\u0026quot; onclick=\u0026quot;bmApplyPreset('reset',this)\u0026quot;\u0026gt;リセット\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Box-sizing --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;bm-section-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;bm-section-label\u0026quot; style=\u0026quot;background:#e8eaff;color:#3a3a6e;\u0026quot;\u0026gt;box-sizing\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bm-sizing-toggle\u0026quot;\u0026gt; \u0026lt;label\u0026gt;\u0026lt;input type=\u0026quot;radio\u0026quot; name=\u0026quot;bm-sizing\u0026quot; value=\u0026quot;content-box\u0026quot; onchange=\u0026quot;bmUpdate()\u0026quot;\u0026gt; content-box\u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;\u0026lt;input type=\u0026quot;radio\u0026quot; name=\u0026quot;bm-sizing\u0026quot; value=\u0026quot;border-box\u0026quot; onchange=\u0026quot;bmUpdate()\u0026quot; checked\u0026gt; border-box\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Content --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;bm-section-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;bm-section-label bm-label-content\u0026quot;\u0026gt;コンテンツ\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bm-four-grid\u0026quot;\u0026gt; \u0026lt;label\u0026gt;幅 (width)\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-cw\u0026quot; value=\u0026quot;200\u0026quot; min=\u0026quot;20\u0026quot; max=\u0026quot;800\u0026quot; oninput=\u0026quot;bmUpdate()\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;高さ (height)\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-ch\u0026quot; value=\u0026quot;100\u0026quot; min=\u0026quot;20\u0026quot; max=\u0026quot;800\u0026quot; oninput=\u0026quot;bmUpdate()\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Padding --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;bm-section-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;bm-section-label bm-label-padding\u0026quot;\u0026gt;パディング\u0026lt;/span\u0026gt; \u0026lt;label class=\u0026quot;bm-link-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;bm-link-padding\u0026quot; checked onchange=\u0026quot;bmLinkChanged('padding')\u0026quot;\u0026gt; 全辺連動\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bm-four-grid\u0026quot;\u0026gt; \u0026lt;label\u0026gt;上\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-pt\u0026quot; value=\u0026quot;16\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; oninput=\u0026quot;bmSideInput('padding','t')\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;右\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-pr\u0026quot; value=\u0026quot;16\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; oninput=\u0026quot;bmSideInput('padding','r')\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;下\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-pb\u0026quot; value=\u0026quot;16\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; oninput=\u0026quot;bmSideInput('padding','b')\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;左\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-pl\u0026quot; value=\u0026quot;16\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; oninput=\u0026quot;bmSideInput('padding','l')\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Border --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;bm-section-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;bm-section-label bm-label-border\u0026quot;\u0026gt;ボーダー\u0026lt;/span\u0026gt; \u0026lt;label class=\u0026quot;bm-link-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;bm-link-border\u0026quot; checked onchange=\u0026quot;bmLinkChanged('border')\u0026quot;\u0026gt; 全辺連動\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bm-four-grid\u0026quot;\u0026gt; \u0026lt;label\u0026gt;上\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-bt\u0026quot; value=\u0026quot;1\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;50\u0026quot; oninput=\u0026quot;bmSideInput('border','t')\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;右\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-br\u0026quot; value=\u0026quot;1\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;50\u0026quot; oninput=\u0026quot;bmSideInput('border','r')\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;下\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-bb\u0026quot; value=\u0026quot;1\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;50\u0026quot; oninput=\u0026quot;bmSideInput('border','b')\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;左\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-bl\u0026quot; value=\u0026quot;1\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;50\u0026quot; oninput=\u0026quot;bmSideInput('border','l')\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bm-border-style-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ボーダースタイル\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;bm-bstyle\u0026quot; onchange=\u0026quot;bmUpdate()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;solid\u0026quot; selected\u0026gt;solid\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;dashed\u0026quot;\u0026gt;dashed\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;dotted\u0026quot;\u0026gt;dotted\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;double\u0026quot;\u0026gt;double\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;groove\u0026quot;\u0026gt;groove\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;none\u0026quot;\u0026gt;none\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Margin --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;bm-section-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;bm-section-label bm-label-margin\u0026quot;\u0026gt;マージン\u0026lt;/span\u0026gt; \u0026lt;label class=\u0026quot;bm-link-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;bm-link-margin\u0026quot; checked onchange=\u0026quot;bmLinkChanged('margin')\u0026quot;\u0026gt; 全辺連動\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bm-four-grid\u0026quot;\u0026gt; \u0026lt;label\u0026gt;上\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-mt\u0026quot; value=\u0026quot;16\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; oninput=\u0026quot;bmSideInput('margin','t')\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;右\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-mr\u0026quot; value=\u0026quot;16\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; oninput=\u0026quot;bmSideInput('margin','r')\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;下\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-mb\u0026quot; value=\u0026quot;16\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; oninput=\u0026quot;bmSideInput('margin','b')\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;左\u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;bm-ml\u0026quot; value=\u0026quot;16\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; oninput=\u0026quot;bmSideInput('margin','l')\u0026quot;\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; ボックスモデル図 margin border padding 200 × 100 content \u0026lt;!-- Computed size --\u0026gt; \u0026lt;div class=\u0026quot;bm-totals\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;bm-total-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;bm-total-val\u0026quot; id=\u0026quot;bm-total-w\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bm-total-lbl\u0026quot;\u0026gt;合計幅（px）\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bm-total-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;bm-total-val\u0026quot; id=\u0026quot;bm-total-h\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bm-total-lbl\u0026quot;\u0026gt;合計高さ（px）\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 生成CSS CSSをコピー フリーランス・個人事業主の会計をかんたんに freee会計なら請求書・経費・確定申告をまるごとクラウド管理。面倒な帳簿付けから解放されます。\nfreeeを無料で試す 使い方 プリセットを選ぶ — カード・ボタン・入力欄・コンテナから典型的な値を一発ロード。 各値を調整 — マージン・ボーダー・パディング・コンテンツの上下左右を個別に設定。「全辺連動」チェックで4辺を一括変更。 box-sizingを切り替え — content-box と border-box で合計サイズがどう変わるか確認。 図を読む — 色分けはChrome DevToolsと同じ：オレンジ=マージン、黄=ボーダー、緑=パディング、青=コンテンツ。 CSSをコピー — 「CSSをコピー」を押してスタイルシートに貼り付けるだけ。 CSSボックスモデルとは すべてのHTML要素は4層の矩形で構成されています。\n層 色 説明 コンテンツ 青 テキストや子要素が配置される領域。width / height で指定。 パディング 緑 コンテンツとボーダーの間の余白。背景色がここまで適用される。 ボーダー 黄 要素の境界線。太さ・スタイル・色を指定できる。 マージン オレンジ ボーダー外側の余白。要素間の間隔を作る。背景色は適用されない。 content-box と border-box の違い content-box（CSS デフォルト）では width はコンテンツ領域のみ。パディングとボーダーはその外側に加算されます。\nborder-box では width にパディングとボーダーが含まれます。レイアウト計算が直感的になるため、現代のプロジェクトではほぼ必須です。\n/* グローバル推奨設定 */ *, *::before, *::after { box-sizing: border-box; } マージン ショートハンド早見表 記法 意味 margin: 16px 4辺すべて 16px margin: 8px 16px 上下 8px、左右 16px margin: 8px 16px 24px 上 8px、左右 16px、下 24px margin: 8px 12px 16px 20px 上 / 右 / 下 / 左 関連ツール CSSスペーシングジェネレーター — 一貫したスペーシングスケールを生成 CSSグリッドジェネレーター — グリッドレイアウトをビジュアルで構築 フレックスボックスジェネレーター — Flexコンテナとアイテムを直感的に設計 ※本ページにはアフィリエイト広告（A8.net）が含まれています。ご支援いただくことでツールの無料提供を継続できます。\n","permalink":"https://productivity-works.com/ja/tools/box-model-visualizer/","summary":"\u003cp\u003eマージン・ボーダー・パディング・コンテンツのサイズをリアルタイムで調整。Chrome DevToolsと同じ色分けで図が即座に更新され、コピー可能なCSSも自動生成されます。\u003c/p\u003e\n\u003cdiv id=\"bm-app\"\u003e\n\u003cstyle\u003e\n  #bm-app *,\n  #bm-app *::before,\n  #bm-app *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n\u003cp\u003e#bm-app {\nfont-family: -apple-system, BlinkMacSystemFont, \u0026ldquo;Segoe UI\u0026rdquo;, Roboto, \u0026ldquo;Hiragino Sans\u0026rdquo;, \u0026ldquo;Yu Gothic\u0026rdquo;, sans-serif;\nfont-size: 14px;\ncolor: #1a1a2e;\nbackground: #f5f7ff;\nborder-radius: 12px;\npadding: 24px;\nmax-width: 960px;\nmargin: 0 auto;\n}\u003c/p\u003e\n\u003cp\u003e/* ── Layout ─────────────────────────────────────────────── */\n#bm-app .bm-layout {\ndisplay: grid;\ngrid-template-columns: 1fr 1fr;\ngap: 24px;\n}\n@media (max-width: 700px) {\n#bm-app .bm-layout { grid-template-columns: 1fr; }\n}\u003c/p\u003e","title":"CSSボックスモデル ビジュアライザー"},{"content":" アスキーアートジェネレーター テキストを入力してスタイルを選ぶだけ。大きなASCIIアートバナーを瞬時に生成します。\nテキスト入力（英数字・スペース対応） フォントスタイル スタンダード\n#文字ブロック バナー\n=と|の幅広 シャドウ\n/と_の影付き シン\n細線ミニマル ブロック\n█ソリッド 文字幅 狭い（×1） 標準（×2） 広い（×3） カスタム塗り文字 向き 横書き 左右反転 生成する 出力: — コピー ここに生成されたASCIIアートが表示されます 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → QRコードを作成 → QRコードジェネレーター ダミー画像を作成 → プレースホルダー画像生成ツール Unicode文字を検索 → Unicode文字マップ 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/ascii-art-generator/","summary":"\u003cdiv id=\"aa-app\"\u003e\n\u003cstyle\u003e\n#aa-app *,#aa-app *::before,#aa-app *::after{box-sizing:border-box;margin:0;padding:0;}\n#aa-app{font-family:'Helvetica Neue',Arial,'Hiragino Kaku Gothic ProN','Hiragino Sans',Meiryo,sans-serif;color:#1e293b;background:#f8fafc;border-radius:12px;padding:24px;max-width:860px;margin:0 auto;}\n#aa-app h2{font-size:1.4rem;font-weight:700;color:#0f172a;margin-bottom:4px;}\n#aa-app .aa-subtitle{font-size:0.88rem;color:#64748b;margin-bottom:20px;}\n#aa-app .aa-section{margin-bottom:16px;}\n#aa-app label.aa-label{display:block;font-size:0.82rem;font-weight:600;color:#475569;margin-bottom:6px;}\n#aa-app textarea#aa-input{width:100%;padding:10px 12px;border:1.5px solid #cbd5e1;border-radius:8px;font-size:1rem;resize:vertical;min-height:64px;background:#fff;color:#1e293b;outline:none;transition:border-color .2s;}\n#aa-app textarea#aa-input:focus{border-color:#3b82f6;}\n#aa-app .aa-font-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px;}\n#aa-app .aa-font-btn{padding:8px 10px;border:1.5px solid #cbd5e1;border-radius:8px;background:#fff;cursor:pointer;font-size:0.83rem;color:#334155;font-weight:500;text-align:center;transition:all .15s;}\n#aa-app .aa-font-btn:hover{border-color:#3b82f6;background:#eff6ff;color:#1d4ed8;}\n#aa-app .aa-font-btn.active{border-color:#2563eb;background:#dbeafe;color:#1e3a8a;font-weight:700;}\n#aa-app .aa-options-row{display:flex;flex-wrap:wrap;gap:14px;align-items:flex-end;}\n#aa-app .aa-opt-group{display:flex;flex-direction:column;gap:5px;}\n#aa-app .aa-opt-group label{font-size:0.8rem;font-weight:600;color:#475569;}\n#aa-app select.aa-select,#aa-app input.aa-text-input{padding:7px 10px;border:1.5px solid #cbd5e1;border-radius:7px;background:#fff;color:#1e293b;font-size:0.88rem;outline:none;}\n#aa-app select.aa-select:focus,#aa-app input.aa-text-input:focus{border-color:#3b82f6;}\n#aa-app input.aa-text-input{width:90px;}\n#aa-app .aa-generate-btn{padding:10px 28px;background:#2563eb;color:#fff;border:none;border-radius:8px;font-size:0.95rem;font-weight:700;cursor:pointer;transition:background .2s;align-self:flex-end;}\n#aa-app .aa-generate-btn:hover{background:#1d4ed8;}\n#aa-app .aa-output-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;}\n#aa-app .aa-output-meta{font-size:0.8rem;color:#64748b;}\n#aa-app .aa-copy-btn{padding:6px 16px;background:#0f172a;color:#fff;border:none;border-radius:6px;font-size:0.82rem;font-weight:600;cursor:pointer;transition:background .2s;}\n#aa-app .aa-copy-btn:hover{background:#1e293b;}\n#aa-app .aa-copy-btn.copied{background:#16a34a;}\n#aa-app pre#aa-output{background:#0f172a;color:#a3e635;border-radius:10px;padding:20px;overflow-x:auto;font-family:'Courier New',Courier,monospace;font-size:0.7rem;line-height:1.25;white-space:pre;min-height:80px;border:1.5px solid #1e293b;}\n#aa-app .aa-empty-hint{color:#94a3b8;font-size:0.88rem;font-style:italic;}\n@media(max-width:540px){\n  #aa-app{padding:14px;}\n  #aa-app pre#aa-output{font-size:0.55rem;}\n}\n\u003c/style\u003e\n\u003ch2\u003eアスキーアートジェネレーター\u003c/h2\u003e\n\u003cp class=\"aa-subtitle\"\u003eテキストを入力してスタイルを選ぶだけ。大きなASCIIアートバナーを瞬時に生成します。\u003c/p\u003e","title":"アスキーアートジェネレーター"},{"content":" ベースカラーを選んでハーモニータイプを選択するだけで、HEX・RGB・HSL値・CSSカスタムプロパティ・WCAGコントラスト比を一括生成します。アップロード不要・登録不要、すべてブラウザ内で完結します。\nベースカラー HEX値 配色タイプ 補色（コンプリメンタリー） 類似色（アナロガス） トライアド スプリット補色 テトラード（4色） モノクロマティック \u0026nbsp; 生成する まとめてコピー： 全HEXをコピー CSS変数をコピー CSSカスタムプロパティ（変数） コピー アクセシビリティ — コントラスト比（WCAG 2.1） 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → カラーパレット → カラーパレット生成 カラー変換 → RGB⇔HEX変換 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/color-scheme-generator/","summary":"\u003cdiv id=\"cs-app\"\u003e\n\u003cstyle\u003e\n#cs-app *,#cs-app *::before,#cs-app *::after{box-sizing:border-box;margin:0;padding:0}\n#cs-app{font-family:-apple-system,BlinkMacSystemFont,'Hiragino Kaku Gothic ProN','Noto Sans JP',sans-serif;color:#1a1a2e;--accent:#6c63ff;--radius:10px;--shadow:0 4px 24px rgba(0,0,0,.10)}\n#cs-app a{color:var(--accent)}\n\n/* Layout */\n#cs-app .cs-wrap{max-width:900px;margin:0 auto;padding:0 0 56px}\n#cs-app .cs-lead{font-size:.96rem;color:#555;margin-bottom:24px;line-height:1.75}\n\n/* Controls */\n#cs-app .cs-controls{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;margin-bottom:28px;background:#f7f7fc;border-radius:var(--radius);padding:20px 22px}\n#cs-app .cs-group{display:flex;flex-direction:column;gap:6px}\n#cs-app .cs-group label{font-size:.75rem;font-weight:700;color:#555;text-transform:uppercase;letter-spacing:.04em}\n#cs-app .cs-color-pick{width:64px;height:46px;border:2px solid #ddd;border-radius:8px;cursor:pointer;padding:2px;background:#fff}\n#cs-app .cs-color-pick:hover{border-color:var(--accent)}\n#cs-app .cs-select{height:46px;padding:0 14px;border:2px solid #ddd;border-radius:8px;font-size:.9rem;background:#fff;cursor:pointer;outline:none;transition:border-color .2s;min-width:200px}\n#cs-app .cs-select:focus{border-color:var(--accent)}\n#cs-app .cs-hex-input{height:46px;padding:0 12px;border:2px solid #ddd;border-radius:8px;font-size:.9rem;font-family:monospace;width:110px;outline:none;transition:border-color .2s}\n#cs-app .cs-hex-input:focus{border-color:var(--accent)}\n#cs-app .cs-btn{height:46px;padding:0 22px;border:none;border-radius:8px;font-size:.9rem;font-weight:700;cursor:pointer;transition:transform .1s,opacity .2s;white-space:nowrap}\n#cs-app .cs-btn:active{transform:scale(.97)}\n#cs-app .cs-btn-primary{background:var(--accent);color:#fff}\n#cs-app .cs-btn-primary:hover{opacity:.87}\n#cs-app .cs-btn-secondary{background:#fff;color:#333;border:2px solid #ddd}\n#cs-app .cs-btn-secondary:hover{border-color:#aaa}\n#cs-app .cs-btn-sm{height:34px;padding:0 14px;font-size:.8rem}\n\n/* Scheme label */\n#cs-app .cs-scheme-label{font-size:1rem;font-weight:700;color:#1a1a2e;margin-bottom:16px;display:flex;align-items:center;gap:10px}\n#cs-app .cs-scheme-label span{font-size:.8rem;font-weight:500;color:#888;font-style:italic}\n\n/* Swatches grid */\n#cs-app .cs-swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:16px;margin-bottom:28px}\n@media(max-width:600px){#cs-app .cs-swatches{grid-template-columns:repeat(2,1fr)}}\n@media(max-width:360px){#cs-app .cs-swatches{grid-template-columns:1fr}}\n\n#cs-app .cs-swatch-card{border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);background:#fff;transition:transform .18s}\n#cs-app .cs-swatch-card:hover{transform:translateY(-3px)}\n#cs-app .cs-swatch-block{height:140px;position:relative;cursor:pointer;display:flex;align-items:center;justify-content:center}\n#cs-app .cs-swatch-copy-hint{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.18);opacity:0;transition:opacity .2s;font-size:.82rem;font-weight:700;letter-spacing:.02em}\n#cs-app .cs-swatch-block:hover .cs-swatch-copy-hint{opacity:1}\n#cs-app .cs-swatch-role{position:absolute;top:8px;left:10px;font-size:.68rem;font-weight:700;letter-spacing:.04em;padding:2px 7px;border-radius:4px;background:rgba(255,255,255,.72);backdrop-filter:blur(4px);color:#333}\n\n#cs-app .cs-swatch-info{padding:12px 12px 14px;display:flex;flex-direction:column;gap:3px}\n#cs-app .cs-swatch-hex{font-size:.95rem;font-weight:700;letter-spacing:.03em;color:#1a1a2e}\n#cs-app .cs-swatch-rgb{font-size:.72rem;color:#777;font-family:monospace}\n#cs-app .cs-swatch-hsl{font-size:.72rem;color:#777;font-family:monospace}\n#cs-app .cs-swatch-copy-btn{margin-top:6px;height:28px;padding:0 10px;font-size:.73rem;font-weight:600;border:1.5px solid #ddd;border-radius:6px;background:#fff;cursor:pointer;transition:background .15s,border-color .15s;align-self:flex-start}\n#cs-app .cs-swatch-copy-btn:hover{background:#f0f0ff;border-color:var(--accent);color:var(--accent)}\n\n/* Contrast table */\n#cs-app .cs-contrast-section{margin-bottom:28px}\n#cs-app .cs-section-title{font-size:.95rem;font-weight:700;color:#1a1a2e;margin-bottom:14px;padding-bottom:8px;border-bottom:2px solid #f0f0f5}\n#cs-app .cs-contrast-grid{display:grid;gap:8px}\n#cs-app .cs-contrast-row{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:8px;background:#fafafa;border:1px solid #eee;flex-wrap:wrap}\n#cs-app .cs-contrast-swatch-pair{display:flex;gap:4px;flex-shrink:0}\n#cs-app .cs-contrast-dot{width:22px;height:22px;border-radius:50%;border:1.5px solid rgba(0,0,0,.12)}\n#cs-app .cs-contrast-label{font-size:.82rem;color:#444;flex:1;min-width:120px;font-family:monospace}\n#cs-app .cs-contrast-ratio{font-size:.88rem;font-weight:700;padding:3px 10px;border-radius:20px;white-space:nowrap}\n#cs-app .cs-ratio-aaa{background:#d1fae5;color:#065f46}\n#cs-app .cs-ratio-aa{background:#dbeafe;color:#1e3a8a}\n#cs-app .cs-ratio-fail{background:#fee2e2;color:#991b1b}\n#cs-app .cs-wcag-badge{font-size:.7rem;font-weight:700;padding:2px 7px;border-radius:4px;background:#e5e7eb;color:#374151}\n#cs-app .cs-wcag-aaa{background:#a7f3d0;color:#064e3b}\n#cs-app .cs-wcag-aa{background:#bfdbfe;color:#1e40af}\n#cs-app .cs-wcag-fail{background:#fecaca;color:#7f1d1d}\n\n/* CSS Variables output */\n#cs-app .cs-css-section{margin-bottom:28px}\n#cs-app .cs-css-box{position:relative;background:#1a1a2e;border-radius:var(--radius);padding:20px 20px 20px 24px;font-family:'Courier New',monospace;font-size:.82rem;line-height:1.8;color:#e2e8f0;overflow-x:auto}\n#cs-app .cs-css-box .cs-var-comment{color:#718096}\n#cs-app .cs-css-box .cs-var-name{color:#81e6d9}\n#cs-app .cs-css-box .cs-var-val{color:#fbd38d}\n#cs-app .cs-css-copy-btn{position:absolute;top:12px;right:12px;height:30px;padding:0 14px;font-size:.75rem;font-weight:700;background:rgba(255,255,255,.12);color:#e2e8f0;border:1px solid rgba(255,255,255,.2);border-radius:6px;cursor:pointer;transition:background .15s}\n#cs-app .cs-css-copy-btn:hover{background:rgba(255,255,255,.22)}\n\n/* Copy all */\n#cs-app .cs-copy-all-bar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:32px;align-items:center}\n#cs-app .cs-copy-all-bar span{font-size:.82rem;color:#666}\n\n/* Toast */\n#cs-app .cs-toast{position:fixed;bottom:32px;left:50%;transform:translateX(-50%) translateY(80px);background:#1a1a2e;color:#fff;padding:11px 26px;border-radius:50px;font-size:.87rem;font-weight:600;opacity:0;transition:opacity .25s,transform .25s;z-index:9999;pointer-events:none}\n#cs-app .cs-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}\n\n/* Scheme description */\n#cs-app .cs-desc{font-size:.84rem;color:#555;margin-bottom:20px;padding:12px 16px;background:#f7f7fc;border-left:3px solid var(--accent);border-radius:0 8px 8px 0;line-height:1.7}\n\u003c/style\u003e\n\u003cdiv class=\"cs-wrap\"\u003e\n\u003cp class=\"cs-lead\"\u003eベースカラーを選んでハーモニータイプを選択するだけで、HEX・RGB・HSL値・CSSカスタムプロパティ・WCAGコントラスト比を一括生成します。アップロード不要・登録不要、すべてブラウザ内で完結します。\u003c/p\u003e","title":"配色ジェネレーター"},{"content":"Unicode文字セットを閲覧・検索できるツールです。カテゴリを選ぶか文字名を入力し、気になる文字をクリックするとコードポイント・HTMLエンティティ・CSS値・UTF-8バイト列をコピーできます。\n\u0026#x2715; 関連ツール: HTMLエンティティエンコーダー 絵文字ピッカー モールス信号変換 事業の帳簿・請求書管理もスムーズに\nfreee会計なら、売上・経費の記録から確定申告・決算書の作成まで、クラウドで一括管理。 銀行口座・クレジットカードと自動連携し、入力の手間を大幅に削減できます。 freee会計を無料で試す \u0026rarr; 使い方 カテゴリを選択 — 「矢印」「数学」「通貨」などのボタンをクリックして文字一覧を表示します。 検索 — 文字名（例: arrow left）またはコードポイント（例: U+2192）を入力すると全カテゴリを横断して絞り込みます。 文字をクリック — 詳細パネルに文字・Unicodeコードポイント・HTMLエンティティ（10進・16進）・CSS content 値・UTF-8バイト列が表示されます。各項目に「コピー」ボタンがあります。 各項目の意味 項目 例 使いどころ コードポイント U+2192 ドキュメントや仕様書での参照 HTML（10進） \u0026amp;#8594; HTMLへの埋め込み（エンコード問題を回避） HTML（16進） \u0026amp;#x2192; 同上、16進表記 CSS content値 '\\2192' ::before / ::after 疑似要素での使用 UTF-8バイト列 0xE2 0x86 0x92 バイナリストリームやファイルエンコーディングの確認 関連ツール HTMLエンティティエンコーダー — HTMLエンティティの一括エンコード・デコード 絵文字ピッカー — スキントーン・キーワード対応の絵文字ブラウザ モールス信号変換 — テキストとモールス信号の相互変換 ","permalink":"https://productivity-works.com/ja/tools/unicode-character-map/","summary":"\u003cp\u003eUnicode文字セットを閲覧・検索できるツールです。カテゴリを選ぶか文字名を入力し、気になる文字をクリックするとコードポイント・HTMLエンティティ・CSS値・UTF-8バイト列をコピーできます。\u003c/p\u003e\n\u003cdiv id=\"umap-app\"\u003e\n\u003cstyle\u003e\n/* ── スコープ付きスタイル: すべてのルールを #umap-app でプレフィックス ── */\n#umap-app {\n  font-family: system-ui, -apple-system, \"Helvetica Neue\", sans-serif;\n  max-width: 960px;\n  margin: 0 auto;\n  color: #1a1a1a;\n}\n#umap-app *,\n#umap-app *::before,\n#umap-app *::after {\n  box-sizing: border-box;\n}\n\n/* コントロール */\n#umap-app .umap-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-bottom: 18px;\n}\n#umap-app .umap-search {\n  flex: 1 1 220px;\n  padding: 10px 14px;\n  font-size: 1rem;\n  border: 2px solid #d1d5db;\n  border-radius: 8px;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#umap-app .umap-search:focus {\n  border-color: #6366f1;\n}\n#umap-app .umap-category-wrap {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n}\n#umap-app .umap-cat-btn {\n  padding: 7px 14px;\n  font-size: 0.85rem;\n  border: 2px solid #d1d5db;\n  border-radius: 20px;\n  background: #fff;\n  cursor: pointer;\n  transition: background 0.15s, border-color 0.15s, color 0.15s;\n  white-space: nowrap;\n}\n#umap-app .umap-cat-btn:hover {\n  border-color: #6366f1;\n  color: #6366f1;\n}\n#umap-app .umap-cat-btn.active {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n\n/* ステータスバー */\n#umap-app .umap-status {\n  font-size: 0.82rem;\n  color: #6b7280;\n  margin-bottom: 12px;\n  min-height: 1.2em;\n}\n\n/* グリッド */\n#umap-app .umap-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(72px, 1fr));\n  gap: 8px;\n  margin-bottom: 24px;\n}\n#umap-app .umap-cell {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 10px 4px 6px;\n  border: 1.5px solid #e5e7eb;\n  border-radius: 8px;\n  cursor: pointer;\n  background: #fafafa;\n  transition: border-color 0.15s, background 0.15s, transform 0.1s;\n  min-height: 72px;\n  position: relative;\n  user-select: none;\n}\n#umap-app .umap-cell:hover {\n  border-color: #6366f1;\n  background: #eef2ff;\n  transform: translateY(-2px);\n}\n#umap-app .umap-cell:active {\n  transform: translateY(0);\n}\n#umap-app .umap-cell.copied {\n  border-color: #10b981;\n  background: #d1fae5;\n}\n#umap-app .umap-glyph {\n  font-size: 1.6rem;\n  line-height: 1;\n  margin-bottom: 4px;\n}\n#umap-app .umap-cp {\n  font-size: 0.62rem;\n  color: #9ca3af;\n  font-family: monospace;\n}\n\n/* 詳細パネル */\n#umap-app .umap-detail {\n  display: none;\n  border: 2px solid #6366f1;\n  border-radius: 12px;\n  padding: 20px 24px;\n  background: #f5f3ff;\n  margin-bottom: 24px;\n  position: relative;\n}\n#umap-app .umap-detail.visible {\n  display: block;\n}\n#umap-app .umap-detail-close {\n  position: absolute;\n  top: 12px;\n  right: 14px;\n  background: none;\n  border: none;\n  font-size: 1.2rem;\n  cursor: pointer;\n  color: #6b7280;\n  line-height: 1;\n}\n#umap-app .umap-detail-glyph {\n  font-size: 3.5rem;\n  line-height: 1;\n  margin-bottom: 12px;\n}\n#umap-app .umap-detail-name {\n  font-weight: 700;\n  font-size: 1rem;\n  margin-bottom: 14px;\n  color: #374151;\n}\n#umap-app .umap-detail-rows {\n  display: grid;\n  grid-template-columns: auto 1fr auto;\n  gap: 10px 16px;\n  align-items: center;\n}\n#umap-app .umap-detail-label {\n  font-size: 0.8rem;\n  color: #6b7280;\n  white-space: nowrap;\n}\n#umap-app .umap-detail-value {\n  font-family: monospace;\n  font-size: 0.92rem;\n  color: #1a1a1a;\n  word-break: break-all;\n}\n#umap-app .umap-copy-btn {\n  padding: 4px 12px;\n  font-size: 0.78rem;\n  background: #6366f1;\n  color: #fff;\n  border: none;\n  border-radius: 6px;\n  cursor: pointer;\n  transition: background 0.15s;\n  white-space: nowrap;\n}\n#umap-app .umap-copy-btn:hover {\n  background: #4f46e5;\n}\n#umap-app .umap-copy-btn.ok {\n  background: #10b981;\n}\n\n/* トースト通知 */\n#umap-app .umap-toast {\n  position: fixed;\n  bottom: 28px;\n  left: 50%;\n  transform: translateX(-50%) translateY(20px);\n  background: #1f2937;\n  color: #fff;\n  padding: 10px 22px;\n  border-radius: 24px;\n  font-size: 0.9rem;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 0.25s, transform 0.25s;\n  z-index: 9999;\n  white-space: nowrap;\n}\n#umap-app .umap-toast.show {\n  opacity: 1;\n  transform: translateX(-50%) translateY(0);\n}\n\n/* 結果なし */\n#umap-app .umap-empty {\n  text-align: center;\n  color: #9ca3af;\n  padding: 48px 0;\n  font-size: 1rem;\n}\n\n/* 関連リンク */\n#umap-app .umap-related {\n  border-top: 1px solid #e5e7eb;\n  padding-top: 18px;\n  margin-top: 8px;\n  font-size: 0.88rem;\n  color: #6b7280;\n}\n#umap-app .umap-related a {\n  color: #6366f1;\n  text-decoration: none;\n  margin-right: 14px;\n}\n#umap-app .umap-related a:hover {\n  text-decoration: underline;\n}\n\n/* freee CTA */\n#umap-app .umap-cta {\n  margin-top: 32px;\n  padding: 20px 24px;\n  background: linear-gradient(135deg, #e0e7ff 0%, #f0fdf4 100%);\n  border: 1px solid #c7d2fe;\n  border-radius: 12px;\n  font-size: 0.9rem;\n  color: #374151;\n  line-height: 1.6;\n}\n#umap-app .umap-cta strong {\n  color: #4338ca;\n}\n#umap-app .umap-cta a.umap-cta-link {\n  display: inline-block;\n  margin-top: 10px;\n  padding: 8px 20px;\n  background: #4338ca;\n  color: #fff;\n  border-radius: 8px;\n  text-decoration: none;\n  font-weight: 600;\n  font-size: 0.88rem;\n  transition: background 0.15s;\n}\n#umap-app .umap-cta a.umap-cta-link:hover {\n  background: #3730a3;\n}\n\n/* モバイル */\n@media (max-width: 600px) {\n  #umap-app .umap-grid {\n    grid-template-columns: repeat(auto-fill, minmax(60px, 1fr));\n    gap: 6px;\n  }\n  #umap-app .umap-glyph {\n    font-size: 1.3rem;\n  }\n  #umap-app .umap-detail-rows {\n    grid-template-columns: auto 1fr;\n  }\n  #umap-app .umap-copy-btn {\n    grid-column: 1 / -1;\n  }\n  #umap-app .umap-detail-glyph {\n    font-size: 2.5rem;\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"umap-controls\"\u003e\n  \u003cinput\n    class=\"umap-search\"\n    id=\"umap-search\"\n    type=\"search\"\n    placeholder=\"文字名またはコードポイントで検索（例: arrow、U+2192）\"\n    autocomplete=\"off\"\n  /\u003e\n\u003c/div\u003e\n\u003cdiv class=\"umap-controls\" style=\"margin-top:-4px\"\u003e\n  \u003cdiv class=\"umap-category-wrap\" id=\"umap-cats\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"umap-status\" id=\"umap-status\"\u003e\u003c/div\u003e\n\u003cdiv class=\"umap-detail\" id=\"umap-detail\"\u003e\n  \u003cbutton class=\"umap-detail-close\" id=\"umap-detail-close\" title=\"閉じる\"\u003e\u0026#x2715;\u003c/button\u003e\n  \u003cdiv class=\"umap-detail-glyph\" id=\"umap-dg\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"umap-detail-name\" id=\"umap-dn\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"umap-detail-rows\" id=\"umap-dr\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"umap-grid\" id=\"umap-grid\"\u003e\u003c/div\u003e\n\u003cdiv class=\"umap-toast\" id=\"umap-toast\"\u003e\u003c/div\u003e\n\u003cdiv class=\"umap-related\"\u003e\n  関連ツール:\n  \u003ca href=\"/tools/html-entity-encoder/\"\u003eHTMLエンティティエンコーダー\u003c/a\u003e\n  \u003ca href=\"/tools/emoji-picker/\"\u003e絵文字ピッカー\u003c/a\u003e\n  \u003ca href=\"/tools/morse-code-translator/\"\u003eモールス信号変換\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"umap-cta\"\u003e\n  \u003cstrong\u003e事業の帳簿・請求書管理もスムーズに\u003c/strong\u003e\u003cbr\u003e\n  freee会計なら、売上・経費の記録から確定申告・決算書の作成まで、クラウドで一括管理。\n  銀行口座・クレジットカードと自動連携し、入力の手間を大幅に削減できます。\n  \u003cbr\u003e\n  \u003ca class=\"umap-cta-link\" href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\"\u003e\n    freee会計を無料で試す \u0026rarr;\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  \"use strict\";\n\n  /* ── 文字データ ── */\n  var CATS = [\n    {\n      id: \"arrows\",\n      label: \"矢印\",\n      chars: [\n        [0x2190, \"LEFTWARDS ARROW\"],\n        [0x2191, \"UPWARDS ARROW\"],\n        [0x2192, \"RIGHTWARDS ARROW\"],\n        [0x2193, \"DOWNWARDS ARROW\"],\n        [0x2194, \"LEFT RIGHT ARROW\"],\n        [0x2195, \"UP DOWN ARROW\"],\n        [0x2196, \"NORTH WEST ARROW\"],\n        [0x2197, \"NORTH EAST ARROW\"],\n        [0x2198, \"SOUTH EAST ARROW\"],\n        [0x2199, \"SOUTH WEST ARROW\"],\n        [0x219a, \"LEFTWARDS ARROW WITH STROKE\"],\n        [0x219b, \"RIGHTWARDS ARROW WITH STROKE\"],\n        [0x219c, \"LEFTWARDS WAVE ARROW\"],\n        [0x219d, \"RIGHTWARDS WAVE ARROW\"],\n        [0x219e, \"LEFTWARDS TWO HEADED ARROW\"],\n        [0x21a0, \"RIGHTWARDS TWO HEADED ARROW\"],\n        [0x21a2, \"LEFTWARDS ARROW WITH TAIL\"],\n        [0x21a3, \"RIGHTWARDS ARROW WITH TAIL\"],\n        [0x21a6, \"RIGHTWARDS ARROW FROM BAR\"],\n        [0x21a9, \"LEFTWARDS ARROW WITH HOOK\"],\n        [0x21aa, \"RIGHTWARDS ARROW WITH HOOK\"],\n        [0x21b0, \"UPWARDS ARROW WITH TIP LEFTWARDS\"],\n        [0x21b1, \"UPWARDS ARROW WITH TIP RIGHTWARDS\"],\n        [0x21b2, \"DOWNWARDS ARROW WITH TIP LEFTWARDS\"],\n        [0x21b3, \"DOWNWARDS ARROW WITH TIP RIGHTWARDS\"],\n        [0x21b4, \"RIGHTWARDS ARROW WITH CORNER DOWNWARDS\"],\n        [0x21b5, \"DOWNWARDS ARROW WITH CORNER LEFTWARDS\"],\n        [0x21b6, \"ANTICLOCKWISE TOP SEMICIRCLE ARROW\"],\n        [0x21b7, \"CLOCKWISE TOP SEMICIRCLE ARROW\"],\n        [0x21ba, \"ANTICLOCKWISE OPEN CIRCLE ARROW\"],\n        [0x21bb, \"CLOCKWISE OPEN CIRCLE ARROW\"],\n        [0x21bc, \"LEFTWARDS HARPOON WITH BARB UPWARDS\"],\n        [0x21c0, \"RIGHTWARDS HARPOON WITH BARB UPWARDS\"],\n        [0x21c4, \"RIGHTWARDS ARROW OVER LEFTWARDS ARROW\"],\n        [0x21c6, \"LEFTWARDS ARROW OVER RIGHTWARDS ARROW\"],\n        [0x21c7, \"LEFTWARDS PAIRED ARROWS\"],\n        [0x21c8, \"UPWARDS PAIRED ARROWS\"],\n        [0x21c9, \"RIGHTWARDS PAIRED ARROWS\"],\n        [0x21ca, \"DOWNWARDS PAIRED ARROWS\"],\n        [0x21cb, \"LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON\"],\n        [0x21cc, \"RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON\"],\n        [0x21cd, \"LEFTWARDS DOUBLE ARROW WITH STROKE\"],\n        [0x21ce, \"LEFT RIGHT DOUBLE ARROW WITH STROKE\"],\n        [0x21cf, \"RIGHTWARDS DOUBLE ARROW WITH STROKE\"],\n        [0x21d0, \"LEFTWARDS DOUBLE ARROW\"],\n        [0x21d1, \"UPWARDS DOUBLE ARROW\"],\n        [0x21d2, \"RIGHTWARDS DOUBLE ARROW\"],\n        [0x21d3, \"DOWNWARDS DOUBLE ARROW\"],\n        [0x21d4, \"LEFT RIGHT DOUBLE ARROW\"],\n        [0x21d5, \"UP DOWN DOUBLE ARROW\"],\n        [0x21e6, \"LEFTWARDS WHITE ARROW\"],\n        [0x21e7, \"UPWARDS WHITE ARROW\"],\n        [0x21e8, \"RIGHTWARDS WHITE ARROW\"],\n        [0x21e9, \"DOWNWARDS WHITE ARROW\"],\n        [0x27a1, \"BLACK RIGHTWARDS ARROW\"],\n        [0x2b05, \"LEFTWARDS BLACK ARROW\"],\n        [0x2b06, \"UPWARDS BLACK ARROW\"],\n        [0x2b07, \"DOWNWARDS BLACK ARROW\"],\n        [0x2b95, \"RIGHTWARDS BLACK ARROW\"],\n      ],\n    },\n    {\n      id: \"math\",\n      label: \"数学\",\n      chars: [\n        [0x00b1, \"PLUS-MINUS SIGN\"],\n        [0x00d7, \"MULTIPLICATION SIGN\"],\n        [0x00f7, \"DIVISION SIGN\"],\n        [0x2200, \"FOR ALL\"],\n        [0x2202, \"PARTIAL DIFFERENTIAL\"],\n        [0x2203, \"THERE EXISTS\"],\n        [0x2204, \"THERE DOES NOT EXIST\"],\n        [0x2205, \"EMPTY SET\"],\n        [0x2207, \"NABLA\"],\n        [0x2208, \"ELEMENT OF\"],\n        [0x2209, \"NOT AN ELEMENT OF\"],\n        [0x220b, \"CONTAINS AS MEMBER\"],\n        [0x220f, \"N-ARY PRODUCT\"],\n        [0x2211, \"N-ARY SUMMATION\"],\n        [0x2212, \"MINUS SIGN\"],\n        [0x2213, \"MINUS-OR-PLUS SIGN\"],\n        [0x2217, \"ASTERISK OPERATOR\"],\n        [0x221a, \"SQUARE ROOT\"],\n        [0x221b, \"CUBE ROOT\"],\n        [0x221c, \"FOURTH ROOT\"],\n        [0x221e, \"INFINITY\"],\n        [0x2220, \"ANGLE\"],\n        [0x2221, \"MEASURED ANGLE\"],\n        [0x2222, \"SPHERICAL ANGLE\"],\n        [0x2223, \"DIVIDES\"],\n        [0x2225, \"PARALLEL TO\"],\n        [0x2227, \"LOGICAL AND\"],\n        [0x2228, \"LOGICAL OR\"],\n        [0x2229, \"INTERSECTION\"],\n        [0x222a, \"UNION\"],\n        [0x222b, \"INTEGRAL\"],\n        [0x222c, \"DOUBLE INTEGRAL\"],\n        [0x222d, \"TRIPLE INTEGRAL\"],\n        [0x2236, \"RATIO\"],\n        [0x2237, \"PROPORTION\"],\n        [0x223c, \"TILDE OPERATOR\"],\n        [0x2243, \"ASYMPTOTICALLY EQUAL TO\"],\n        [0x2245, \"APPROXIMATELY EQUAL TO\"],\n        [0x2248, \"ALMOST EQUAL TO\"],\n        [0x2249, \"NOT ALMOST EQUAL TO\"],\n        [0x2260, \"NOT EQUAL TO\"],\n        [0x2261, \"IDENTICAL TO\"],\n        [0x2262, \"NOT IDENTICAL TO\"],\n        [0x2264, \"LESS-THAN OR EQUAL TO\"],\n        [0x2265, \"GREATER-THAN OR EQUAL TO\"],\n        [0x226a, \"MUCH LESS-THAN\"],\n        [0x226b, \"MUCH GREATER-THAN\"],\n        [0x2282, \"SUBSET OF\"],\n        [0x2283, \"SUPERSET OF\"],\n        [0x2284, \"NOT A SUBSET OF\"],\n        [0x2286, \"SUBSET OF OR EQUAL TO\"],\n        [0x2287, \"SUPERSET OF OR EQUAL TO\"],\n        [0x2295, \"CIRCLED PLUS\"],\n        [0x2297, \"CIRCLED TIMES\"],\n        [0x22c5, \"DOT OPERATOR\"],\n        [0x25b3, \"WHITE UP-POINTING TRIANGLE\"],\n        [0x03c0, \"GREEK SMALL LETTER PI\"],\n        [0x03b1, \"GREEK SMALL LETTER ALPHA\"],\n        [0x03b2, \"GREEK SMALL LETTER BETA\"],\n        [0x03b3, \"GREEK SMALL LETTER GAMMA\"],\n      ],\n    },\n    {\n      id: \"currency\",\n      label: \"通貨\",\n      chars: [\n        [0x0024, \"DOLLAR SIGN\"],\n        [0x00a2, \"CENT SIGN\"],\n        [0x00a3, \"POUND SIGN\"],\n        [0x00a4, \"CURRENCY SIGN\"],\n        [0x00a5, \"YEN SIGN\"],\n        [0x20a0, \"EURO-CURRENCY SIGN\"],\n        [0x20a1, \"COLON SIGN\"],\n        [0x20a2, \"CRUZEIRO SIGN\"],\n        [0x20a3, \"FRENCH FRANC SIGN\"],\n        [0x20a4, \"LIRA SIGN\"],\n        [0x20a6, \"NAIRA SIGN\"],\n        [0x20a7, \"PESETA SIGN\"],\n        [0x20a8, \"RUPEE SIGN\"],\n        [0x20a9, \"WON SIGN\"],\n        [0x20aa, \"NEW SHEQEL SIGN\"],\n        [0x20ab, \"DONG SIGN\"],\n        [0x20ac, \"EURO SIGN\"],\n        [0x20ad, \"KIP SIGN\"],\n        [0x20ae, \"TUGRIK SIGN\"],\n        [0x20af, \"DRACHMA SIGN\"],\n        [0x20b0, \"GERMAN PENNY SIGN\"],\n        [0x20b1, \"PESO SIGN\"],\n        [0x20b2, \"GUARANI SIGN\"],\n        [0x20b3, \"AUSTRAL SIGN\"],\n        [0x20b4, \"HRYVNIA SIGN\"],\n        [0x20b5, \"CEDI SIGN\"],\n        [0x20b6, \"LIVRE TOURNOIS SIGN\"],\n        [0x20b8, \"TENGE SIGN\"],\n        [0x20b9, \"INDIAN RUPEE SIGN\"],\n        [0x20ba, \"TURKISH LIRA SIGN\"],\n        [0x20bb, \"NORDIC MARK SIGN\"],\n        [0x20bc, \"MANAT SIGN\"],\n        [0x20bd, \"RUBLE SIGN\"],\n        [0x20be, \"LARI SIGN\"],\n        [0x20bf, \"BITCOIN SIGN\"],\n        [0x09f3, \"BENGALI RUPEE SIGN\"],\n        [0x0af1, \"GUJARATI RUPEE SIGN\"],\n        [0x0bf9, \"TAMIL RUPEE SIGN\"],\n      ],\n    },\n    {\n      id: \"symbols\",\n      label: \"記号\",\n      chars: [\n        [0x00a9, \"COPYRIGHT SIGN\"],\n        [0x00ae, \"REGISTERED SIGN\"],\n        [0x2122, \"TRADE MARK SIGN\"],\n        [0x00b0, \"DEGREE SIGN\"],\n        [0x00b5, \"MICRO SIGN\"],\n        [0x00b6, \"PILCROW SIGN\"],\n        [0x00a7, \"SECTION SIGN\"],\n        [0x2020, \"DAGGER\"],\n        [0x2021, \"DOUBLE DAGGER\"],\n        [0x2022, \"BULLET\"],\n        [0x2023, \"TRIANGULAR BULLET\"],\n        [0x2026, \"HORIZONTAL ELLIPSIS\"],\n        [0x2030, \"PER MILLE SIGN\"],\n        [0x2031, \"PER TEN THOUSAND SIGN\"],\n        [0x2032, \"PRIME\"],\n        [0x2033, \"DOUBLE PRIME\"],\n        [0x2034, \"TRIPLE PRIME\"],\n        [0x2035, \"REVERSED PRIME\"],\n        [0x203b, \"REFERENCE MARK\"],\n        [0x203c, \"DOUBLE EXCLAMATION MARK\"],\n        [0x203d, \"INTERROBANG\"],\n        [0x2047, \"DOUBLE QUESTION MARK\"],\n        [0x2048, \"QUESTION EXCLAMATION MARK\"],\n        [0x2049, \"EXCLAMATION QUESTION MARK\"],\n        [0x2116, \"NUMERO SIGN\"],\n        [0x211e, \"PRESCRIPTION TAKE\"],\n        [0x2120, \"SERVICE MARK\"],\n        [0x2126, \"OHM SIGN\"],\n        [0x212b, \"ANGSTROM SIGN\"],\n        [0x2139, \"INFORMATION SOURCE\"],\n        [0x231a, \"WATCH\"],\n        [0x231b, \"HOURGLASS\"],\n        [0x2328, \"KEYBOARD\"],\n        [0x23ce, \"RETURN SYMBOL\"],\n        [0x23f0, \"ALARM CLOCK\"],\n        [0x23f3, \"HOURGLASS WITH FLOWING SAND\"],\n        [0x2602, \"UMBRELLA\"],\n        [0x2603, \"SNOWMAN\"],\n        [0x2604, \"COMET\"],\n        [0x260e, \"BLACK TELEPHONE\"],\n        [0x2615, \"HOT BEVERAGE\"],\n        [0x2620, \"SKULL AND CROSSBONES\"],\n        [0x2622, \"RADIOACTIVE SIGN\"],\n        [0x2623, \"BIOHAZARD SIGN\"],\n        [0x262e, \"PEACE SYMBOL\"],\n        [0x262f, \"YIN YANG\"],\n        [0x2639, \"WHITE FROWNING FACE\"],\n        [0x263a, \"WHITE SMILING FACE\"],\n        [0x2640, \"FEMALE SIGN\"],\n        [0x2642, \"MALE SIGN\"],\n        [0x2660, \"BLACK SPADE SUIT\"],\n        [0x2663, \"BLACK CLUB SUIT\"],\n        [0x2665, \"BLACK HEART SUIT\"],\n        [0x2666, \"BLACK DIAMOND SUIT\"],\n        [0x2713, \"CHECK MARK\"],\n        [0x2714, \"HEAVY CHECK MARK\"],\n        [0x2715, \"MULTIPLICATION X\"],\n        [0x2716, \"HEAVY MULTIPLICATION X\"],\n      ],\n    },\n    {\n      id: \"dingbats\",\n      label: \"装飾記号\",\n      chars: [\n        [0x2701, \"UPPER BLADE SCISSORS\"],\n        [0x2702, \"BLACK SCISSORS\"],\n        [0x2703, \"LOWER BLADE SCISSORS\"],\n        [0x2704, \"WHITE SCISSORS\"],\n        [0x2706, \"TELEPHONE LOCATION SIGN\"],\n        [0x2708, \"AIRPLANE\"],\n        [0x2709, \"ENVELOPE\"],\n        [0x270a, \"RAISED FIST\"],\n        [0x270b, \"RAISED HAND\"],\n        [0x270c, \"VICTORY HAND\"],\n        [0x270d, \"WRITING HAND\"],\n        [0x270e, \"LOWER RIGHT PENCIL\"],\n        [0x270f, \"PENCIL\"],\n        [0x2710, \"UPPER RIGHT PENCIL\"],\n        [0x2711, \"WHITE NIB\"],\n        [0x2712, \"BLACK NIB\"],\n        [0x2713, \"CHECK MARK\"],\n        [0x2714, \"HEAVY CHECK MARK\"],\n        [0x2715, \"MULTIPLICATION X\"],\n        [0x2716, \"HEAVY MULTIPLICATION X\"],\n        [0x2717, \"BALLOT X\"],\n        [0x2718, \"HEAVY BALLOT X\"],\n        [0x271a, \"HEAVY GREEK CROSS\"],\n        [0x271b, \"OPEN CENTRE CROSS\"],\n        [0x2720, \"MALTESE CROSS\"],\n        [0x2721, \"STAR OF DAVID\"],\n        [0x2726, \"BLACK FOUR POINTED STAR\"],\n        [0x2727, \"WHITE FOUR POINTED STAR\"],\n        [0x2728, \"SPARKLES\"],\n        [0x2729, \"STRESS OUTLINED WHITE STAR\"],\n        [0x272a, \"CIRCLED WHITE STAR\"],\n        [0x272b, \"OPEN CENTRE BLACK STAR\"],\n        [0x272c, \"BLACK CENTRE WHITE STAR\"],\n        [0x272d, \"OUTLINED BLACK STAR\"],\n        [0x272f, \"PINWHEEL STAR\"],\n        [0x2730, \"SHADOWED WHITE STAR\"],\n        [0x2731, \"HEAVY ASTERISK\"],\n        [0x2732, \"OPEN CENTRE ASTERISK\"],\n        [0x2733, \"EIGHT SPOKED ASTERISK\"],\n        [0x2734, \"EIGHT POINTED BLACK STAR\"],\n        [0x2736, \"SIX POINTED BLACK STAR\"],\n        [0x2739, \"TWELVE POINTED BLACK STAR\"],\n        [0x273a, \"SIXTEEN POINTED ASTERISK\"],\n        [0x273f, \"BLACK FLORETTE\"],\n        [0x2740, \"WHITE FLORETTE\"],\n        [0x2744, \"SNOWFLAKE\"],\n        [0x2762, \"HEAVY EXCLAMATION MARK ORNAMENT\"],\n        [0x2763, \"HEAVY HEART EXCLAMATION MARK ORNAMENT\"],\n        [0x2764, \"HEAVY BLACK HEART\"],\n        [0x2765, \"ROTATED HEAVY BLACK HEART BULLET\"],\n        [0x2767, \"ROTATED FLORAL HEART BULLET\"],\n      ],\n    },\n    {\n      id: \"box\",\n      label: \"罫線\",\n      chars: [\n        [0x2500, \"BOX DRAWINGS LIGHT HORIZONTAL\"],\n        [0x2501, \"BOX DRAWINGS HEAVY HORIZONTAL\"],\n        [0x2502, \"BOX DRAWINGS LIGHT VERTICAL\"],\n        [0x2503, \"BOX DRAWINGS HEAVY VERTICAL\"],\n        [0x2504, \"BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL\"],\n        [0x2505, \"BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL\"],\n        [0x2506, \"BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL\"],\n        [0x2507, \"BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL\"],\n        [0x2508, \"BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL\"],\n        [0x2509, \"BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL\"],\n        [0x250c, \"BOX DRAWINGS LIGHT DOWN AND RIGHT\"],\n        [0x250d, \"BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY\"],\n        [0x250e, \"BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT\"],\n        [0x250f, \"BOX DRAWINGS HEAVY DOWN AND RIGHT\"],\n        [0x2510, \"BOX DRAWINGS LIGHT DOWN AND LEFT\"],\n        [0x2511, \"BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY\"],\n        [0x2512, \"BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT\"],\n        [0x2513, \"BOX DRAWINGS HEAVY DOWN AND LEFT\"],\n        [0x2514, \"BOX DRAWINGS LIGHT UP AND RIGHT\"],\n        [0x2515, \"BOX DRAWINGS UP LIGHT AND RIGHT HEAVY\"],\n        [0x2516, \"BOX DRAWINGS UP HEAVY AND RIGHT LIGHT\"],\n        [0x2517, \"BOX DRAWINGS HEAVY UP AND RIGHT\"],\n        [0x2518, \"BOX DRAWINGS LIGHT UP AND LEFT\"],\n        [0x2519, \"BOX DRAWINGS UP LIGHT AND LEFT HEAVY\"],\n        [0x251a, \"BOX DRAWINGS UP HEAVY AND LEFT LIGHT\"],\n        [0x251b, \"BOX DRAWINGS HEAVY UP AND LEFT\"],\n        [0x251c, \"BOX DRAWINGS LIGHT VERTICAL AND RIGHT\"],\n        [0x251d, \"BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY\"],\n        [0x2520, \"BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT\"],\n        [0x2523, \"BOX DRAWINGS HEAVY VERTICAL AND RIGHT\"],\n        [0x2524, \"BOX DRAWINGS LIGHT VERTICAL AND LEFT\"],\n        [0x252c, \"BOX DRAWINGS LIGHT DOWN AND HORIZONTAL\"],\n        [0x2534, \"BOX DRAWINGS LIGHT UP AND HORIZONTAL\"],\n        [0x253c, \"BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL\"],\n        [0x2550, \"BOX DRAWINGS DOUBLE HORIZONTAL\"],\n        [0x2551, \"BOX DRAWINGS DOUBLE VERTICAL\"],\n        [0x2554, \"BOX DRAWINGS DOUBLE DOWN AND RIGHT\"],\n        [0x2557, \"BOX DRAWINGS DOUBLE DOWN AND LEFT\"],\n        [0x255a, \"BOX DRAWINGS DOUBLE UP AND RIGHT\"],\n        [0x255d, \"BOX DRAWINGS DOUBLE UP AND LEFT\"],\n        [0x256c, \"BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL\"],\n        [0x2580, \"UPPER HALF BLOCK\"],\n        [0x2584, \"LOWER HALF BLOCK\"],\n        [0x2588, \"FULL BLOCK\"],\n        [0x258c, \"LEFT HALF BLOCK\"],\n        [0x2590, \"RIGHT HALF BLOCK\"],\n        [0x2591, \"LIGHT SHADE\"],\n        [0x2592, \"MEDIUM SHADE\"],\n        [0x2593, \"DARK SHADE\"],\n        [0x25a0, \"BLACK SQUARE\"],\n        [0x25a1, \"WHITE SQUARE\"],\n        [0x25aa, \"BLACK SMALL SQUARE\"],\n        [0x25ab, \"WHITE SMALL SQUARE\"],\n        [0x25b2, \"BLACK UP-POINTING TRIANGLE\"],\n        [0x25b6, \"BLACK RIGHT-POINTING TRIANGLE\"],\n        [0x25bc, \"BLACK DOWN-POINTING TRIANGLE\"],\n        [0x25c0, \"BLACK LEFT-POINTING TRIANGLE\"],\n        [0x25c6, \"BLACK DIAMOND\"],\n        [0x25c7, \"WHITE DIAMOND\"],\n        [0x25cf, \"BLACK CIRCLE\"],\n        [0x25d8, \"INVERSE BULLET\"],\n        [0x25e6, \"WHITE BULLET\"],\n      ],\n    },\n    {\n      id: \"greek\",\n      label: \"ギリシャ文字\",\n      chars: [\n        [0x0391, \"GREEK CAPITAL LETTER ALPHA\"],\n        [0x0392, \"GREEK CAPITAL LETTER BETA\"],\n        [0x0393, \"GREEK CAPITAL LETTER GAMMA\"],\n        [0x0394, \"GREEK CAPITAL LETTER DELTA\"],\n        [0x0395, \"GREEK CAPITAL LETTER EPSILON\"],\n        [0x0396, \"GREEK CAPITAL LETTER ZETA\"],\n        [0x0397, \"GREEK CAPITAL LETTER ETA\"],\n        [0x0398, \"GREEK CAPITAL LETTER THETA\"],\n        [0x0399, \"GREEK CAPITAL LETTER IOTA\"],\n        [0x039a, \"GREEK CAPITAL LETTER KAPPA\"],\n        [0x039b, \"GREEK CAPITAL LETTER LAMDA\"],\n        [0x039c, \"GREEK CAPITAL LETTER MU\"],\n        [0x039d, \"GREEK CAPITAL LETTER NU\"],\n        [0x039e, \"GREEK CAPITAL LETTER XI\"],\n        [0x039f, \"GREEK CAPITAL LETTER OMICRON\"],\n        [0x03a0, \"GREEK CAPITAL LETTER PI\"],\n        [0x03a1, \"GREEK CAPITAL LETTER RHO\"],\n        [0x03a3, \"GREEK CAPITAL LETTER SIGMA\"],\n        [0x03a4, \"GREEK CAPITAL LETTER TAU\"],\n        [0x03a5, \"GREEK CAPITAL LETTER UPSILON\"],\n        [0x03a6, \"GREEK CAPITAL LETTER PHI\"],\n        [0x03a7, \"GREEK CAPITAL LETTER CHI\"],\n        [0x03a8, \"GREEK CAPITAL LETTER PSI\"],\n        [0x03a9, \"GREEK CAPITAL LETTER OMEGA\"],\n        [0x03b1, \"GREEK SMALL LETTER ALPHA\"],\n        [0x03b2, \"GREEK SMALL LETTER BETA\"],\n        [0x03b3, \"GREEK SMALL LETTER GAMMA\"],\n        [0x03b4, \"GREEK SMALL LETTER DELTA\"],\n        [0x03b5, \"GREEK SMALL LETTER EPSILON\"],\n        [0x03b6, \"GREEK SMALL LETTER ZETA\"],\n        [0x03b7, \"GREEK SMALL LETTER ETA\"],\n        [0x03b8, \"GREEK SMALL LETTER THETA\"],\n        [0x03b9, \"GREEK SMALL LETTER IOTA\"],\n        [0x03ba, \"GREEK SMALL LETTER KAPPA\"],\n        [0x03bb, \"GREEK SMALL LETTER LAMDA\"],\n        [0x03bc, \"GREEK SMALL LETTER MU\"],\n        [0x03bd, \"GREEK SMALL LETTER NU\"],\n        [0x03be, \"GREEK SMALL LETTER XI\"],\n        [0x03bf, \"GREEK SMALL LETTER OMICRON\"],\n        [0x03c0, \"GREEK SMALL LETTER PI\"],\n        [0x03c1, \"GREEK SMALL LETTER RHO\"],\n        [0x03c3, \"GREEK SMALL LETTER SIGMA\"],\n        [0x03c4, \"GREEK SMALL LETTER TAU\"],\n        [0x03c5, \"GREEK SMALL LETTER UPSILON\"],\n        [0x03c6, \"GREEK SMALL LETTER PHI\"],\n        [0x03c7, \"GREEK SMALL LETTER CHI\"],\n        [0x03c8, \"GREEK SMALL LETTER PSI\"],\n        [0x03c9, \"GREEK SMALL LETTER OMEGA\"],\n      ],\n    },\n    {\n      id: \"cyrillic\",\n      label: \"キリル文字\",\n      chars: [\n        [0x0410, \"CYRILLIC CAPITAL LETTER A\"],\n        [0x0411, \"CYRILLIC CAPITAL LETTER BE\"],\n        [0x0412, \"CYRILLIC CAPITAL LETTER VE\"],\n        [0x0413, \"CYRILLIC CAPITAL LETTER GHE\"],\n        [0x0414, \"CYRILLIC CAPITAL LETTER DE\"],\n        [0x0415, \"CYRILLIC CAPITAL LETTER IE\"],\n        [0x0416, \"CYRILLIC CAPITAL LETTER ZHE\"],\n        [0x0417, \"CYRILLIC CAPITAL LETTER ZE\"],\n        [0x0418, \"CYRILLIC CAPITAL LETTER I\"],\n        [0x0419, \"CYRILLIC CAPITAL LETTER SHORT I\"],\n        [0x041a, \"CYRILLIC CAPITAL LETTER KA\"],\n        [0x041b, \"CYRILLIC CAPITAL LETTER EL\"],\n        [0x041c, \"CYRILLIC CAPITAL LETTER EM\"],\n        [0x041d, \"CYRILLIC CAPITAL LETTER EN\"],\n        [0x041e, \"CYRILLIC CAPITAL LETTER O\"],\n        [0x041f, \"CYRILLIC CAPITAL LETTER PE\"],\n        [0x0420, \"CYRILLIC CAPITAL LETTER ER\"],\n        [0x0421, \"CYRILLIC CAPITAL LETTER ES\"],\n        [0x0422, \"CYRILLIC CAPITAL LETTER TE\"],\n        [0x0423, \"CYRILLIC CAPITAL LETTER U\"],\n        [0x0424, \"CYRILLIC CAPITAL LETTER EF\"],\n        [0x0425, \"CYRILLIC CAPITAL LETTER HA\"],\n        [0x0426, \"CYRILLIC CAPITAL LETTER TSE\"],\n        [0x0427, \"CYRILLIC CAPITAL LETTER CHE\"],\n        [0x0428, \"CYRILLIC CAPITAL LETTER SHA\"],\n        [0x0429, \"CYRILLIC CAPITAL LETTER SHCHA\"],\n        [0x042a, \"CYRILLIC CAPITAL LETTER HARD SIGN\"],\n        [0x042b, \"CYRILLIC CAPITAL LETTER YERU\"],\n        [0x042c, \"CYRILLIC CAPITAL LETTER SOFT SIGN\"],\n        [0x042d, \"CYRILLIC CAPITAL LETTER E\"],\n        [0x042e, \"CYRILLIC CAPITAL LETTER YU\"],\n        [0x042f, \"CYRILLIC CAPITAL LETTER YA\"],\n        [0x0430, \"CYRILLIC SMALL LETTER A\"],\n        [0x0431, \"CYRILLIC SMALL LETTER BE\"],\n        [0x0432, \"CYRILLIC SMALL LETTER VE\"],\n        [0x0433, \"CYRILLIC SMALL LETTER GHE\"],\n        [0x0434, \"CYRILLIC SMALL LETTER DE\"],\n        [0x0435, \"CYRILLIC SMALL LETTER IE\"],\n        [0x0436, \"CYRILLIC SMALL LETTER ZHE\"],\n        [0x0437, \"CYRILLIC SMALL LETTER ZE\"],\n        [0x0438, \"CYRILLIC SMALL LETTER I\"],\n        [0x0439, \"CYRILLIC SMALL LETTER SHORT I\"],\n        [0x043a, \"CYRILLIC SMALL LETTER KA\"],\n        [0x043b, \"CYRILLIC SMALL LETTER EL\"],\n        [0x043c, \"CYRILLIC SMALL LETTER EM\"],\n        [0x043d, \"CYRILLIC SMALL LETTER EN\"],\n        [0x043e, \"CYRILLIC SMALL LETTER O\"],\n        [0x043f, \"CYRILLIC SMALL LETTER PE\"],\n        [0x0440, \"CYRILLIC SMALL LETTER ER\"],\n        [0x0441, \"CYRILLIC SMALL LETTER ES\"],\n        [0x0442, \"CYRILLIC SMALL LETTER TE\"],\n        [0x0443, \"CYRILLIC SMALL LETTER U\"],\n        [0x0444, \"CYRILLIC SMALL LETTER EF\"],\n        [0x0445, \"CYRILLIC SMALL LETTER HA\"],\n        [0x0446, \"CYRILLIC SMALL LETTER TSE\"],\n        [0x0447, \"CYRILLIC SMALL LETTER CHE\"],\n        [0x0448, \"CYRILLIC SMALL LETTER SHA\"],\n        [0x0449, \"CYRILLIC SMALL LETTER SHCHA\"],\n        [0x044a, \"CYRILLIC SMALL LETTER HARD SIGN\"],\n        [0x044b, \"CYRILLIC SMALL LETTER YERU\"],\n        [0x044c, \"CYRILLIC SMALL LETTER SOFT SIGN\"],\n        [0x044d, \"CYRILLIC SMALL LETTER E\"],\n        [0x044e, \"CYRILLIC SMALL LETTER YU\"],\n        [0x044f, \"CYRILLIC SMALL LETTER YA\"],\n      ],\n    },\n    {\n      id: \"emoji\",\n      label: \"絵文字\",\n      chars: [\n        [0x1f600, \"GRINNING FACE\"],\n        [0x1f601, \"GRINNING FACE WITH SMILING EYES\"],\n        [0x1f602, \"FACE WITH TEARS OF JOY\"],\n        [0x1f603, \"SMILING FACE WITH OPEN MOUTH\"],\n        [0x1f604, \"SMILING FACE WITH OPEN MOUTH AND SMILING EYES\"],\n        [0x1f605, \"SMILING FACE WITH OPEN MOUTH AND COLD SWEAT\"],\n        [0x1f607, \"SMILING FACE WITH HALO\"],\n        [0x1f608, \"SMILING FACE WITH HORNS\"],\n        [0x1f609, \"WINKING FACE\"],\n        [0x1f60a, \"SMILING FACE WITH SMILING EYES\"],\n        [0x1f60b, \"FACE SAVOURING DELICIOUS FOOD\"],\n        [0x1f60d, \"SMILING FACE WITH HEART-SHAPED EYES\"],\n        [0x1f60e, \"SMILING FACE WITH SUNGLASSES\"],\n        [0x1f610, \"NEUTRAL FACE\"],\n        [0x1f611, \"EXPRESSIONLESS FACE\"],\n        [0x1f614, \"PENSIVE FACE\"],\n        [0x1f615, \"CONFUSED FACE\"],\n        [0x1f618, \"FACE THROWING A KISS\"],\n        [0x1f61a, \"KISSING FACE WITH CLOSED EYES\"],\n        [0x1f61c, \"FACE WITH STUCK-OUT TONGUE AND WINKING EYE\"],\n        [0x1f620, \"ANGRY FACE\"],\n        [0x1f621, \"POUTING FACE\"],\n        [0x1f622, \"CRYING FACE\"],\n        [0x1f625, \"DISAPPOINTED BUT RELIEVED FACE\"],\n        [0x1f628, \"FEARFUL FACE\"],\n        [0x1f62d, \"LOUDLY CRYING FACE\"],\n        [0x1f631, \"FACE SCREAMING IN FEAR\"],\n        [0x1f634, \"SLEEPING FACE\"],\n        [0x1f637, \"FACE WITH MEDICAL MASK\"],\n        [0x1f638, \"GRINNING CAT FACE WITH SMILING EYES\"],\n        [0x1f44d, \"THUMBS UP SIGN\"],\n        [0x1f44e, \"THUMBS DOWN SIGN\"],\n        [0x1f44f, \"CLAPPING HANDS SIGN\"],\n        [0x1f450, \"OPEN HANDS SIGN\"],\n        [0x1f451, \"CROWN\"],\n        [0x1f452, \"WOMANS HAT\"],\n        [0x1f453, \"EYEGLASSES\"],\n        [0x1f454, \"NECKTIE\"],\n        [0x1f455, \"T-SHIRT\"],\n        [0x1f456, \"JEANS\"],\n        [0x1f457, \"DRESS\"],\n        [0x1f458, \"KIMONO\"],\n        [0x1f459, \"BIKINI\"],\n        [0x1f4a9, \"PILE OF POO\"],\n        [0x1f4af, \"HUNDRED POINTS SYMBOL\"],\n        [0x1f525, \"FIRE\"],\n        [0x1f389, \"PARTY POPPER\"],\n        [0x1f38a, \"CONFETTI BALL\"],\n        [0x1f3b5, \"MUSICAL NOTE\"],\n        [0x1f3b6, \"MULTIPLE MUSICAL NOTES\"],\n        [0x1f31f, \"GLOWING STAR\"],\n        [0x2764, \"HEAVY BLACK HEART\"],\n        [0x1f49a, \"GREEN HEART\"],\n        [0x1f49b, \"YELLOW HEART\"],\n        [0x1f49c, \"PURPLE HEART\"],\n        [0x1f499, \"BLUE HEART\"],\n        [0x1f498, \"HEART WITH ARROW\"],\n      ],\n    },\n  ];\n\n  /* ── 全文字リスト（横断検索用） ── */\n  var ALL_CHARS = [];\n  CATS.forEach(function (cat) {\n    cat.chars.forEach(function (ch) {\n      ALL_CHARS.push({ cp: ch[0], name: ch[1], cat: cat.id });\n    });\n  });\n\n  /* ── 状態 ── */\n  var activeCat = \"arrows\";\n  var activeSearch = \"\";\n  var selectedChar = null;\n\n  /* ── DOM参照 ── */\n  var grid = document.getElementById(\"umap-grid\");\n  var statusEl = document.getElementById(\"umap-status\");\n  var searchEl = document.getElementById(\"umap-search\");\n  var catsEl = document.getElementById(\"umap-cats\");\n  var detail = document.getElementById(\"umap-detail\");\n  var detailGlyph = document.getElementById(\"umap-dg\");\n  var detailName = document.getElementById(\"umap-dn\");\n  var detailRows = document.getElementById(\"umap-dr\");\n  var toastEl = document.getElementById(\"umap-toast\");\n  var toastTimer = null;\n\n  /* ── ユーティリティ ── */\n  function cpToStr(cp) {\n    return String.fromCodePoint(cp);\n  }\n\n  function cpToHex(cp) {\n    return cp.toString(16).toUpperCase().padStart(4, \"0\");\n  }\n\n  function cpToCodePoint(cp) {\n    return \"U+\" + cpToHex(cp);\n  }\n\n  function cpToHtmlDec(cp) {\n    return \"\u0026#\" + cp + \";\";\n  }\n\n  function cpToHtmlHex(cp) {\n    return \"\u0026#x\" + cpToHex(cp) + \";\";\n  }\n\n  function cpToCss(cp) {\n    return '\\\\' + cp.toString(16).toUpperCase();\n  }\n\n  function cpToUtf8(cp) {\n    var utf8 = [];\n    if (cp \u003c 0x80) {\n      utf8.push(cp);\n    } else if (cp \u003c 0x800) {\n      utf8.push(0xc0 | (cp \u003e\u003e 6));\n      utf8.push(0x80 | (cp \u0026 0x3f));\n    } else if (cp \u003c 0x10000) {\n      utf8.push(0xe0 | (cp \u003e\u003e 12));\n      utf8.push(0x80 | ((cp \u003e\u003e 6) \u0026 0x3f));\n      utf8.push(0x80 | (cp \u0026 0x3f));\n    } else {\n      utf8.push(0xf0 | (cp \u003e\u003e 18));\n      utf8.push(0x80 | ((cp \u003e\u003e 12) \u0026 0x3f));\n      utf8.push(0x80 | ((cp \u003e\u003e 6) \u0026 0x3f));\n      utf8.push(0x80 | (cp \u0026 0x3f));\n    }\n    return utf8.map(function (b) {\n      return \"0x\" + b.toString(16).toUpperCase().padStart(2, \"0\");\n    }).join(\" \");\n  }\n\n  function showToast(msg) {\n    toastEl.textContent = msg;\n    toastEl.classList.add(\"show\");\n    clearTimeout(toastTimer);\n    toastTimer = setTimeout(function () {\n      toastEl.classList.remove(\"show\");\n    }, 1800);\n  }\n\n  function copyText(text) {\n    if (navigator.clipboard \u0026\u0026 navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).catch(function () {\n        fallbackCopy(text);\n      });\n    } else {\n      fallbackCopy(text);\n    }\n  }\n\n  function fallbackCopy(text) {\n    var ta = document.createElement(\"textarea\");\n    ta.value = text;\n    ta.style.position = \"fixed\";\n    ta.style.opacity = \"0\";\n    document.body.appendChild(ta);\n    ta.select();\n    try { document.execCommand(\"copy\"); } catch (e) {}\n    document.body.removeChild(ta);\n  }\n\n  /* ── フィルタリング ── */\n  function getFilteredChars() {\n    var q = activeSearch.trim().toLowerCase();\n    if (q === \"\") {\n      var cat = CATS.find(function (c) { return c.id === activeCat; });\n      return cat ? cat.chars.map(function (ch) {\n        return { cp: ch[0], name: ch[1] };\n      }) : [];\n    }\n    // コードポイント検索\n    var cpMatch = q.match(/^u\\+?([0-9a-f]{4,6})$/i) || q.match(/^0x([0-9a-f]{4,6})$/i);\n    if (!cpMatch) cpMatch = q.match(/^([0-9a-f]{4,6})$/i);\n    if (cpMatch) {\n      var target = parseInt(cpMatch[1], 16);\n      return ALL_CHARS.filter(function (c) { return c.cp === target; });\n    }\n    return ALL_CHARS.filter(function (c) {\n      return c.name.toLowerCase().indexOf(q) !== -1;\n    });\n  }\n\n  /* ── グリッド描画 ── */\n  function renderGrid() {\n    var chars = getFilteredChars();\n    statusEl.textContent = chars.length + \" 文字を表示中\";\n    grid.innerHTML = \"\";\n    if (chars.length === 0) {\n      var empty = document.createElement(\"div\");\n      empty.className = \"umap-empty\";\n      empty.style.gridColumn = \"1 / -1\";\n      empty.textContent = \"文字が見つかりません。\";\n      grid.appendChild(empty);\n      return;\n    }\n    chars.forEach(function (ch) {\n      var cell = document.createElement(\"div\");\n      cell.className = \"umap-cell\";\n      cell.title = ch.name + \"\\n\" + cpToCodePoint(ch.cp);\n      var glyph = document.createElement(\"div\");\n      glyph.className = \"umap-glyph\";\n      glyph.textContent = cpToStr(ch.cp);\n      var cpLabel = document.createElement(\"div\");\n      cpLabel.className = \"umap-cp\";\n      cpLabel.textContent = cpToCodePoint(ch.cp);\n      cell.appendChild(glyph);\n      cell.appendChild(cpLabel);\n      cell.addEventListener(\"click\", function () {\n        openDetail(ch.cp, ch.name, cell);\n        cell.classList.add(\"copied\");\n        setTimeout(function () { cell.classList.remove(\"copied\"); }, 700);\n      });\n      grid.appendChild(cell);\n    });\n  }\n\n  /* ── 詳細パネル ── */\n  function openDetail(cp, name, _cell) {\n    selectedChar = { cp: cp, name: name };\n    detailGlyph.textContent = cpToStr(cp);\n    detailName.textContent = name + \" — \" + cpToCodePoint(cp);\n\n    var rows = [\n      { label: \"文字\", value: cpToStr(cp) },\n      { label: \"コードポイント\", value: cpToCodePoint(cp) },\n      { label: \"HTML（10進）\", value: cpToHtmlDec(cp) },\n      { label: \"HTML（16進）\", value: cpToHtmlHex(cp) },\n      { label: \"CSS content値\", value: \"'\" + cpToCss(cp) + \"'\" },\n      { label: \"UTF-8バイト列\", value: cpToUtf8(cp) },\n    ];\n\n    detailRows.innerHTML = \"\";\n    rows.forEach(function (row) {\n      var lbl = document.createElement(\"div\");\n      lbl.className = \"umap-detail-label\";\n      lbl.textContent = row.label;\n\n      var val = document.createElement(\"div\");\n      val.className = \"umap-detail-value\";\n      val.textContent = row.value;\n\n      var btn = document.createElement(\"button\");\n      btn.className = \"umap-copy-btn\";\n      btn.textContent = \"コピー\";\n      (function (v, b) {\n        b.addEventListener(\"click\", function () {\n          copyText(v);\n          b.textContent = \"コピー完了\";\n          b.classList.add(\"ok\");\n          showToast(\"コピーしました: \" + v);\n          setTimeout(function () {\n            b.textContent = \"コピー\";\n            b.classList.remove(\"ok\");\n          }, 1500);\n        });\n      })(row.value, btn);\n\n      detailRows.appendChild(lbl);\n      detailRows.appendChild(val);\n      detailRows.appendChild(btn);\n    });\n\n    detail.classList.add(\"visible\");\n    detail.scrollIntoView({ behavior: \"smooth\", block: \"nearest\" });\n  }\n\n  document.getElementById(\"umap-detail-close\").addEventListener(\"click\", function () {\n    detail.classList.remove(\"visible\");\n    selectedChar = null;\n  });\n\n  /* ── カテゴリボタン生成 ── */\n  CATS.forEach(function (cat) {\n    var btn = document.createElement(\"button\");\n    btn.className = \"umap-cat-btn\" + (cat.id === activeCat ? \" active\" : \"\");\n    btn.textContent = cat.label;\n    btn.addEventListener(\"click\", function () {\n      activeCat = cat.id;\n      activeSearch = \"\";\n      searchEl.value = \"\";\n      document.querySelectorAll(\"#umap-app .umap-cat-btn\").forEach(function (b) {\n        b.classList.remove(\"active\");\n      });\n      btn.classList.add(\"active\");\n      detail.classList.remove(\"visible\");\n      renderGrid();\n    });\n    catsEl.appendChild(btn);\n  });\n\n  /* ── 検索 ── */\n  var searchDebounce;\n  searchEl.addEventListener(\"input\", function () {\n    clearTimeout(searchDebounce);\n    searchDebounce = setTimeout(function () {\n      activeSearch = searchEl.value;\n      if (activeSearch.trim() !== \"\") {\n        document.querySelectorAll(\"#umap-app .umap-cat-btn\").forEach(function (b) {\n          b.classList.remove(\"active\");\n        });\n      } else {\n        document.querySelectorAll(\"#umap-app .umap-cat-btn\")[\n          CATS.findIndex(function (c) { return c.id === activeCat; })\n        ].classList.add(\"active\");\n      }\n      detail.classList.remove(\"visible\");\n      renderGrid();\n    }, 200);\n  });\n\n  /* ── 初期化 ── */\n  renderGrid();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch3 id=\"使い方\"\u003e使い方\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eカテゴリを選択\u003c/strong\u003e — 「矢印」「数学」「通貨」などのボタンをクリックして文字一覧を表示します。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e検索\u003c/strong\u003e — 文字名（例: \u003ccode\u003earrow left\u003c/code\u003e）またはコードポイント（例: \u003ccode\u003eU+2192\u003c/code\u003e）を入力すると全カテゴリを横断して絞り込みます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e文字をクリック\u003c/strong\u003e — 詳細パネルに文字・Unicodeコードポイント・HTMLエンティティ（10進・16進）・CSS \u003ccode\u003econtent\u003c/code\u003e 値・UTF-8バイト列が表示されます。各項目に「コピー」ボタンがあります。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"各項目の意味\"\u003e各項目の意味\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e例\u003c/th\u003e\n          \u003cth\u003e使いどころ\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eコードポイント\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003eU+2192\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eドキュメントや仕様書での参照\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eHTML（10進）\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e\u0026amp;#8594;\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eHTMLへの埋め込み（エンコード問題を回避）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eHTML（16進）\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e\u0026amp;#x2192;\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e同上、16進表記\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eCSS content値\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e'\\2192'\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e::before\u003c/code\u003e / \u003ccode\u003e::after\u003c/code\u003e 疑似要素での使用\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eUTF-8バイト列\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e0xE2 0x86 0x92\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eバイナリストリームやファイルエンコーディングの確認\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"関連ツール\"\u003e関連ツール\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/tools/html-entity-encoder/\"\u003eHTMLエンティティエンコーダー\u003c/a\u003e\n — HTMLエンティティの一括エンコード・デコード\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/tools/emoji-picker/\"\u003e絵文字ピッカー\u003c/a\u003e\n — スキントーン・キーワード対応の絵文字ブラウザ\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/tools/morse-code-translator/\"\u003eモールス信号変換\u003c/a\u003e\n — テキストとモールス信号の相互変換\u003c/li\u003e\n\u003c/ul\u003e","title":"Unicode文字マップ — 記号検索ツール"},{"content":" — 都市を選んで追加 — + 追加 リセット デジタル時計 アナログ時計 ミーティングプランナー 基準タイムゾーン： 比較する 海外取引の会計管理もかんたんに\nfreee会計なら、外貨取引の仕訳・経費精算もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → タイムスタンプ変換 → タイムスタンプ変換ツール \u0026nbsp;|\u0026nbsp; タイムゾーン変換 → タイムゾーン変換ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/world-clock/","summary":"\u003cdiv id=\"wc-app\"\u003e\n\u003cstyle\u003e\n#wc-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", Roboto, sans-serif;\n  max-width: 1100px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#wc-app * { box-sizing: border-box; }\n#wc-app h2 {\n  font-size: 1.3rem;\n  font-weight: 700;\n  margin: 0 0 14px 0;\n  color: #0f172a;\n}\n#wc-app .wc-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-bottom: 20px;\n  align-items: center;\n}\n#wc-app .wc-search {\n  flex: 1;\n  min-width: 200px;\n  padding: 9px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 14px;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#wc-app .wc-search:focus { border-color: #3b82f6; }\n#wc-app .wc-city-select {\n  flex: 1;\n  min-width: 200px;\n  padding: 9px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 14px;\n  background: #fff;\n  outline: none;\n  cursor: pointer;\n}\n#wc-app .wc-btn {\n  padding: 9px 18px;\n  background: #3b82f6;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.2s;\n  white-space: nowrap;\n}\n#wc-app .wc-btn:hover { background: #2563eb; }\n#wc-app .wc-btn-secondary {\n  background: #f1f5f9;\n  color: #334155;\n  border: 1.5px solid #cbd5e1;\n}\n#wc-app .wc-btn-secondary:hover { background: #e2e8f0; }\n#wc-app .wc-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n  gap: 16px;\n  margin-bottom: 28px;\n}\n#wc-app .wc-card {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 16px 18px;\n  position: relative;\n  transition: box-shadow 0.2s;\n}\n#wc-app .wc-card:hover { box-shadow: 0 4px 16px rgba(0,0,0,0.08); }\n#wc-app .wc-card.day { border-top: 3px solid #f59e0b; }\n#wc-app .wc-card.night { border-top: 3px solid #6366f1; background: #f8f7ff; }\n#wc-app .wc-card-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  margin-bottom: 8px;\n}\n#wc-app .wc-city-name {\n  font-size: 15px;\n  font-weight: 700;\n  color: #0f172a;\n}\n#wc-app .wc-day-night {\n  font-size: 20px;\n  line-height: 1;\n}\n#wc-app .wc-tz-label {\n  font-size: 11px;\n  color: #94a3b8;\n  margin-bottom: 4px;\n}\n#wc-app .wc-time {\n  font-size: 28px;\n  font-weight: 800;\n  color: #0f172a;\n  letter-spacing: -0.5px;\n  font-variant-numeric: tabular-nums;\n}\n#wc-app .wc-date {\n  font-size: 12px;\n  color: #64748b;\n  margin-top: 2px;\n}\n#wc-app .wc-diff {\n  font-size: 12px;\n  color: #3b82f6;\n  margin-top: 4px;\n  font-weight: 600;\n}\n#wc-app .wc-remove-btn {\n  position: absolute;\n  top: 8px;\n  right: 8px;\n  background: none;\n  border: none;\n  color: #94a3b8;\n  cursor: pointer;\n  font-size: 16px;\n  padding: 2px 5px;\n  border-radius: 4px;\n  line-height: 1;\n  transition: color 0.2s, background 0.2s;\n}\n#wc-app .wc-remove-btn:hover { color: #ef4444; background: #fee2e2; }\n#wc-app .wc-canvas-wrap {\n  display: flex;\n  justify-content: center;\n  margin-top: 8px;\n}\n#wc-app canvas.wc-analog { display: block; }\n#wc-app .wc-section {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px 22px;\n  margin-bottom: 24px;\n}\n#wc-app .wc-planner-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  align-items: center;\n  margin-bottom: 16px;\n}\n#wc-app .wc-planner-select,\n#wc-app .wc-planner-input {\n  padding: 8px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 14px;\n  background: #fff;\n  outline: none;\n}\n#wc-app .wc-planner-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n#wc-app .wc-planner-table th {\n  text-align: left;\n  padding: 6px 10px;\n  background: #e2e8f0;\n  color: #475569;\n  font-weight: 600;\n  border-radius: 4px;\n}\n#wc-app .wc-planner-table td {\n  padding: 7px 10px;\n  border-bottom: 1px solid #f1f5f9;\n  color: #334155;\n}\n#wc-app .wc-planner-table tr:last-child td { border-bottom: none; }\n#wc-app .wc-toggle-row {\n  display: flex;\n  gap: 10px;\n  margin-bottom: 16px;\n  flex-wrap: wrap;\n}\n#wc-app .wc-toggle-btn {\n  padding: 6px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 20px;\n  background: #fff;\n  font-size: 13px;\n  cursor: pointer;\n  transition: all 0.2s;\n  color: #475569;\n}\n#wc-app .wc-toggle-btn.active {\n  background: #3b82f6;\n  border-color: #3b82f6;\n  color: #fff;\n}\n#wc-app .wc-crosslinks {\n  font-size: 13px;\n  color: #64748b;\n  margin-top: 10px;\n  padding-top: 10px;\n  border-top: 1px solid #e2e8f0;\n}\n#wc-app .wc-crosslinks a { color: #3b82f6; text-decoration: none; }\n#wc-app .wc-crosslinks a:hover { text-decoration: underline; }\n@media (max-width: 600px) {\n  #wc-app .wc-grid { grid-template-columns: 1fr 1fr; gap: 10px; }\n  #wc-app .wc-time { font-size: 22px; }\n  #wc-app .wc-controls { flex-direction: column; }\n}\n@media (max-width: 380px) {\n  #wc-app .wc-grid { grid-template-columns: 1fr; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"wc-controls\"\u003e\n  \u003cinput type=\"text\" id=\"wc-search\" class=\"wc-search\" placeholder=\"都市名を検索...\" /\u003e\n  \u003cselect id=\"wc-city-select\" class=\"wc-city-select\"\u003e\n    \u003coption value=\"\"\u003e— 都市を選んで追加 —\u003c/option\u003e\n  \u003c/select\u003e\n  \u003cbutton id=\"wc-add-btn\" class=\"wc-btn\"\u003e+ 追加\u003c/button\u003e\n  \u003cbutton id=\"wc-reset-btn\" class=\"wc-btn wc-btn-secondary\"\u003eリセット\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wc-toggle-row\"\u003e\n  \u003cbutton class=\"wc-toggle-btn active\" data-view=\"digital\"\u003eデジタル時計\u003c/button\u003e\n  \u003cbutton class=\"wc-toggle-btn\" data-view=\"analog\"\u003eアナログ時計\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"wc-grid\" class=\"wc-grid\"\u003e\u003c/div\u003e\n\u003cdiv class=\"wc-section\"\u003e\n  \u003ch2\u003eミーティングプランナー\u003c/h2\u003e\n  \u003cdiv class=\"wc-planner-row\"\u003e\n    \u003clabel style=\"font-size:14px;color:#475569;font-weight:600;\"\u003e基準タイムゾーン：\u003c/label\u003e\n    \u003cselect id=\"wc-planner-tz\" class=\"wc-planner-select\"\u003e\u003c/select\u003e\n    \u003cinput type=\"time\" id=\"wc-planner-time\" class=\"wc-planner-input\" value=\"09:00\" /\u003e\n    \u003cbutton id=\"wc-planner-calc\" class=\"wc-btn\"\u003e比較する\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"wc-planner-result\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wc-freee-cta\" style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e海外取引の会計管理もかんたんに\u003c/p\u003e","title":"世界時計 - タイムゾーン比較ツール"},{"content":" カラープレビュー（クリックでHEXコピー）\nクリックして色を選択 HEX 入力 コピー カラー値 HEX #667EEA コピー RGB rgb(102, 126, 234) コピー HSL hsl(231, 77%, 66%) コピー RGB スライダー R（赤） G（緑） B（青） HSL スライダー H（色相） S（彩度）% L（明度）% 配色パレット生成 補色（コンプリメンタリー） 類似色（アナログ） トライアド（3色） 分割補色 コントラストチェッカー（WCAG 2.1） 前景色 サンプルテキスト Aa 背景色 --コントラスト比 AA AAA カラー履歴（直近10色） まだ色を選択していません CSS コード出力 CSSをコピー カラーピッカーの使い方 簡単なガイド\n色を選ぶ — カラープレビューの下にあるカラー入力ボタンをクリックして色を選択するか、HEXコードを直接入力してください。 スライダーで微調整 — RGBまたはHSLスライダーをドラッグして色を細かく調整できます。数値入力欄への直接入力も可能です。 コードをコピー — 使用したい形式（HEX / RGB / HSL）の「コピー」ボタンをクリックすれば、クリップボードにコピーされます。 配色パレット — 補色・類似色・トライアド・分割補色のスウォッチをクリックすると、その色に切り替えられます。 コントラスト確認 — 前景色と背景色を選択して、WCAG AA / AAAの合否を即座に確認しましょう。 配色の基礎知識 補色とコントラストの重要性\n補色とは色相環で正反対に位置する色の組み合わせです。例えば青とオレンジ、赤と緑などが代表例で、互いを引き立て合う視覚的な緊張感を生み出します。デザインにおいてアクセントカラーを選ぶ際には補色関係を活用することで、情報が自然と目に飛び込んでくるビジュアルを作ることができます。類似色（アナログカラー）は調和のとれた穏やかな印象を与えるため、背景やグラデーションに適しています。\nアクセシビリティと色のコントラスト\nWebデザインにおいてコントラスト比はアクセシビリティの根幹です。WCAG 2.1ガイドラインでは、通常テキストに対してAA基準（4.5:1以上）、より高いAAA基準（7:1以上）が定められています。特に視覚障害や色覚多様性を持つユーザーにとって、十分なコントラストは可読性を大きく左右します。フォントサイズが18px以上（または太字14px以上）の大きなテキストはAA基準が3:1に緩和されますが、デザイン全体を通して適切なコントラスト比を保つことがユーザー体験の向上につながります。\n関連ツール JSONデータを即座に整形・検証 → JSONフォーマッター 文字数・単語数をリアルタイムでカウント → 文字数カウンター 安全なパスワードを即座に生成 → パスワード生成ツール グラデーションをビジュアルで作成 → CSSグラデーションジェネレーター — 美しいCSSグラデーションを視覚的に生成\nダミーテキストを生成 → ダミーテキスト生成ツール — レイアウト確認用のプレースホルダーを即作成\nデザイナー・クリエイターの経理を効率化\nクリエイティブな仕事に集中したいのに、請求書作成や経費管理に時間を取られていませんか？クラウド会計ソフト「freee」なら、バックオフィス業務を大幅に削減できます。\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/color-picker/","summary":"\u003cdiv id=\"color-app\"\u003e\n\u003cstyle\u003e\n#color-app {\n  font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#color-app * { box-sizing: border-box; }\n\n/* Layout */\n.ca-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n}\n@media (max-width: 640px) {\n  .ca-grid { grid-template-columns: 1fr; }\n}\n\n/* Card */\n.ca-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n  margin-bottom: 20px;\n}\n.ca-card h3 {\n  margin: 0 0 14px;\n  font-size: 15px;\n  font-weight: 700;\n  color: #2d3748;\n  border-bottom: 2px solid #f0f0f0;\n  padding-bottom: 8px;\n}\n\n/* Preview panel */\n.ca-preview {\n  width: 100%;\n  aspect-ratio: 1 / 1;\n  border-radius: 12px;\n  border: 1px solid #e2e8f0;\n  transition: background 0.15s;\n  cursor: pointer;\n  min-height: 160px;\n}\n.ca-preview-label {\n  text-align: center;\n  font-size: 13px;\n  color: #718096;\n  margin-top: 6px;\n}\n\n/* Native color input */\n.ca-native-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 16px;\n}\n.ca-native-input {\n  width: 56px;\n  height: 56px;\n  border: none;\n  border-radius: 8px;\n  cursor: pointer;\n  padding: 2px;\n  background: none;\n}\n.ca-native-label {\n  font-size: 14px;\n  color: #4a5568;\n}\n\n/* HEX field */\n.ca-hex-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 18px;\n}\n.ca-hex-input {\n  flex: 1;\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e0;\n  border-radius: 8px;\n  font-size: 16px;\n  font-family: 'Courier New', monospace;\n  letter-spacing: 1px;\n  text-transform: uppercase;\n  outline: none;\n  transition: border-color 0.2s;\n}\n.ca-hex-input:focus { border-color: #667eea; }\n.ca-hex-input.invalid { border-color: #e53e3e; background: #fff5f5; }\n\n/* Copy button */\n.ca-copy-btn {\n  padding: 8px 14px;\n  border: 1.5px solid #cbd5e0;\n  border-radius: 8px;\n  background: #f7fafc;\n  font-size: 13px;\n  cursor: pointer;\n  transition: all 0.15s;\n  white-space: nowrap;\n  color: #4a5568;\n}\n.ca-copy-btn:hover { background: #667eea; color: #fff; border-color: #667eea; }\n.ca-copy-btn.copied { background: #38a169; color: #fff; border-color: #38a169; }\n\n/* Sliders section */\n.ca-slider-group { margin-bottom: 16px; }\n.ca-slider-label-row {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 4px;\n}\n.ca-slider-label { font-size: 13px; font-weight: 600; color: #4a5568; }\n.ca-slider-num {\n  width: 54px;\n  padding: 3px 6px;\n  border: 1.5px solid #cbd5e0;\n  border-radius: 6px;\n  font-size: 13px;\n  text-align: center;\n  outline: none;\n}\n.ca-slider-num:focus { border-color: #667eea; }\n.ca-slider {\n  width: 100%;\n  height: 8px;\n  border-radius: 4px;\n  outline: none;\n  cursor: pointer;\n  -webkit-appearance: none;\n  appearance: none;\n}\n.ca-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 18px; height: 18px;\n  border-radius: 50%;\n  background: #fff;\n  border: 2px solid #667eea;\n  cursor: pointer;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.2);\n}\n.ca-slider::-moz-range-thumb {\n  width: 18px; height: 18px;\n  border-radius: 50%;\n  background: #fff;\n  border: 2px solid #667eea;\n  cursor: pointer;\n}\n\n/* RGB slider tracks */\n#ca-r-slider { background: linear-gradient(to right, #000, #f00); }\n#ca-g-slider { background: linear-gradient(to right, #000, #0f0); }\n#ca-b-slider { background: linear-gradient(to right, #000, #00f); }\n#ca-h-slider { background: linear-gradient(to right, hsl(0,100%,50%), hsl(30,100%,50%), hsl(60,100%,50%), hsl(90,100%,50%), hsl(120,100%,50%), hsl(150,100%,50%), hsl(180,100%,50%), hsl(210,100%,50%), hsl(240,100%,50%), hsl(270,100%,50%), hsl(300,100%,50%), hsl(330,100%,50%), hsl(360,100%,50%)); }\n#ca-s-slider { background: linear-gradient(to right, #808080, #f00); }\n#ca-l-slider { background: linear-gradient(to right, #000, #808080, #fff); }\n\n/* Format output rows */\n.ca-format-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 10px;\n}\n.ca-format-label {\n  font-size: 12px;\n  font-weight: 700;\n  color: #667eea;\n  width: 36px;\n  flex-shrink: 0;\n}\n.ca-format-value {\n  flex: 1;\n  padding: 7px 10px;\n  background: #f7fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 7px;\n  font-size: 13px;\n  font-family: 'Courier New', monospace;\n  color: #2d3748;\n  user-select: all;\n}\n\n/* Palette */\n.ca-palette-grid {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 12px;\n}\n.ca-palette-item { }\n.ca-palette-title {\n  font-size: 12px;\n  font-weight: 600;\n  color: #718096;\n  margin-bottom: 6px;\n}\n.ca-palette-swatches {\n  display: flex;\n  gap: 6px;\n  flex-wrap: wrap;\n}\n.ca-swatch {\n  width: 36px;\n  height: 36px;\n  border-radius: 8px;\n  border: 1px solid rgba(0,0,0,0.1);\n  cursor: pointer;\n  transition: transform 0.15s;\n  position: relative;\n}\n.ca-swatch:hover { transform: scale(1.15); }\n.ca-swatch-hex {\n  font-size: 10px;\n  color: #718096;\n  margin-top: 2px;\n  font-family: monospace;\n}\n@media (max-width: 640px) {\n  .ca-palette-grid { grid-template-columns: 1fr; }\n}\n\n/* Contrast checker */\n.ca-contrast-section { }\n.ca-contrast-pair {\n  display: flex;\n  gap: 10px;\n  margin-bottom: 12px;\n  align-items: center;\n}\n.ca-contrast-pair label { font-size: 13px; color: #4a5568; width: 70px; flex-shrink: 0; }\n.ca-contrast-color-input {\n  width: 44px; height: 44px;\n  border: none; border-radius: 8px;\n  padding: 2px; background: none; cursor: pointer;\n}\n.ca-contrast-preview {\n  flex: 1;\n  padding: 10px 14px;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  border: 1px solid #e2e8f0;\n  text-align: center;\n}\n.ca-contrast-result {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  gap: 8px;\n  margin-top: 10px;\n}\n.ca-contrast-badge {\n  padding: 8px 4px;\n  border-radius: 8px;\n  text-align: center;\n  font-size: 12px;\n  font-weight: 700;\n}\n.ca-contrast-badge .ratio { font-size: 16px; display: block; margin-bottom: 2px; }\n.ca-badge-pass { background: #c6f6d5; color: #276749; }\n.ca-badge-fail { background: #fed7d7; color: #9b2c2c; }\n\n/* History */\n.ca-history-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n.ca-hist-swatch {\n  width: 38px;\n  height: 38px;\n  border-radius: 8px;\n  border: 1px solid rgba(0,0,0,0.12);\n  cursor: pointer;\n  transition: transform 0.15s;\n  position: relative;\n}\n.ca-hist-swatch:hover { transform: scale(1.15); }\n.ca-hist-empty { font-size: 13px; color: #a0aec0; }\n\n/* CSS output */\n.ca-css-output {\n  background: #1a1a2e;\n  color: #e2e8f0;\n  border-radius: 8px;\n  padding: 14px;\n  font-size: 12px;\n  font-family: 'Courier New', monospace;\n  white-space: pre-wrap;\n  line-height: 1.7;\n  overflow-x: auto;\n}\n\u003c/style\u003e\n\u003c!-- ===== APP HTML ===== --\u003e\n\u003cdiv class=\"ca-card\"\u003e\n  \u003cdiv class=\"ca-grid\"\u003e\n    \u003c!-- Left: Preview + Native --\u003e\n    \u003cdiv\u003e\n      \u003cdiv id=\"ca-preview\" class=\"ca-preview\" title=\"クリックでコピー\"\u003e\u003c/div\u003e\n      \u003cp class=\"ca-preview-label\"\u003eカラープレビュー（クリックでHEXコピー）\u003c/p\u003e","title":"カラーピッカー｜HEX・RGB・HSL変換＆パレット作成【無料】"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n時給換算ツール｜年収↔時給を自動変換【月収・日給も】 時給と年収の換算は、就職・転職・副業・フリーランス案件を比較するときに欠かせません。このツールでは「時給 → 年収」「年収 → 時給」の両方向を瞬時に計算。日給・週給・月収もまとめて表示し、残業代シミュレーションや時給アップの年収インパクトも確認できます。\n⏱ 時給 → 年収 💴 年収 → 時給 入力 \u0026lt;div class=\u0026quot;jk-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;時給\u0026lt;span id=\u0026quot;disp-hourly-rate\u0026quot;\u0026gt;1,500\u0026lt;/span\u0026gt; 円\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;jk-number-wrap\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;inp-hourly-rate\u0026quot; value=\u0026quot;1500\u0026quot; min=\u0026quot;100\u0026quot; max=\u0026quot;100000\u0026quot; step=\u0026quot;10\u0026quot; oninput=\u0026quot;jkCalcHourly()\u0026quot; aria-label=\u0026quot;時給（円）\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;jk-unit\u0026quot;\u0026gt;円 / 時間\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;週の勤務時間\u0026lt;span id=\u0026quot;disp-hourly-wh\u0026quot;\u0026gt;40\u0026lt;/span\u0026gt; 時間\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;jk-range\u0026quot; id=\u0026quot;inp-hourly-wh\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;60\u0026quot; value=\u0026quot;40\u0026quot; oninput=\u0026quot;jkCalcHourly()\u0026quot; aria-label=\u0026quot;週の勤務時間\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;年間勤務週数\u0026lt;span id=\u0026quot;disp-hourly-wk\u0026quot;\u0026gt;52\u0026lt;/span\u0026gt; 週\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;jk-range\u0026quot; id=\u0026quot;inp-hourly-wk\u0026quot; min=\u0026quot;48\u0026quot; max=\u0026quot;52\u0026quot; value=\u0026quot;52\u0026quot; oninput=\u0026quot;jkCalcHourly()\u0026quot; aria-label=\u0026quot;年間勤務週数\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- 結果 --\u0026gt; \u0026lt;div class=\u0026quot;jk-results\u0026quot; id=\u0026quot;results-hourly\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;日給（8時間換算）\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-value\u0026quot; id=\u0026quot;res-h-daily\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 日\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;週給\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-value\u0026quot; id=\u0026quot;res-h-weekly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 週\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;月収（÷12）\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-value\u0026quot; id=\u0026quot;res-h-monthly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 月\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;年収\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-value highlight\u0026quot; id=\u0026quot;res-h-annual\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 年\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 入力 \u0026lt;div class=\u0026quot;jk-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;年収\u0026lt;span id=\u0026quot;disp-annual-val\u0026quot;\u0026gt;400\u0026lt;/span\u0026gt; 万円\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;jk-number-wrap\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;inp-annual-val\u0026quot; value=\u0026quot;400\u0026quot; min=\u0026quot;50\u0026quot; max=\u0026quot;10000\u0026quot; step=\u0026quot;10\u0026quot; oninput=\u0026quot;jkCalcAnnual()\u0026quot; aria-label=\u0026quot;年収（万円）\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;jk-unit\u0026quot;\u0026gt;万円 / 年\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;週の勤務時間\u0026lt;span id=\u0026quot;disp-annual-wh\u0026quot;\u0026gt;40\u0026lt;/span\u0026gt; 時間\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;jk-range\u0026quot; id=\u0026quot;inp-annual-wh\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;60\u0026quot; value=\u0026quot;40\u0026quot; oninput=\u0026quot;jkCalcAnnual()\u0026quot; aria-label=\u0026quot;週の勤務時間\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;年間勤務週数\u0026lt;span id=\u0026quot;disp-annual-wk\u0026quot;\u0026gt;52\u0026lt;/span\u0026gt; 週\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;jk-range\u0026quot; id=\u0026quot;inp-annual-wk\u0026quot; min=\u0026quot;48\u0026quot; max=\u0026quot;52\u0026quot; value=\u0026quot;52\u0026quot; oninput=\u0026quot;jkCalcAnnual()\u0026quot; aria-label=\u0026quot;年間勤務週数\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- 結果 --\u0026gt; \u0026lt;div class=\u0026quot;jk-results\u0026quot; id=\u0026quot;results-annual\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;時給\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-value highlight\u0026quot; id=\u0026quot;res-a-hourly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 時間\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;日給（8時間換算）\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-value\u0026quot; id=\u0026quot;res-a-daily\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 日\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;週給\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-value\u0026quot; id=\u0026quot;res-a-weekly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 週\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;月収（÷12）\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-value\u0026quot; id=\u0026quot;res-a-monthly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 月\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 残業代シミュレーション（法定割増 1.25倍） 通常時給 — 円/時 残業時給（×1.25） — 円/時 月20h残業の追加収入 — 円/月 時給アップの年収インパクト 時給アップ幅 アップ後の時給 年収増加額 アップ後の年収 計算中... クイックリファレンス（週40h・年52週の場合） 時給 日給（8h） 月収 年収 時給を上げる方法 1. スキルアップで市場価値を高める 資格取得や専門スキルの習得は、転職・交渉の両面で時給アップに直結します。IT・会計・語学などの需要が高いスキルは特に効果的です。\n2. 転職で年収テーブルをリセットする 同じ仕事内容でも、企業規模や業種によって時給に大きな差があります。転職エージェントに現在の時給・年収を開示した上で上位の求人を紹介してもらうのが最短ルートです。\n3. 副業・フリーランス案件で時給単価を上げる 本業以外に週数時間だけフリーランス案件を受けると、実質時給が大幅に改善します。クラウドソーシングや直接契約でスタートできます。\n4. 残業ではなく「単価」を上げる意識を持つ 長時間労働で年収を増やすアプローチは限界があります。同じ時間でより高い単価を得られるポジション・職種へのシフトを意識しましょう。\n年収アップの転職を相談する → doda転職エージェント 関連ツール 年収から手取りを計算 → 手取り計算シミュレーター 所得税・住民税を計算 → 所得税シミュレーター フリーランスの適正時給を計算 → フリーランス報酬計算ツール 転職時の年収変化を計算 → 転職年収シミュレーター ","permalink":"https://productivity-works.com/ja/tools/jikyuu-kansan-calculator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"時給換算ツール年収時給を自動変換月収日給も\"\u003e時給換算ツール｜年収↔時給を自動変換【月収・日給も】\u003c/h1\u003e\n\u003cp\u003e時給と年収の換算は、就職・転職・副業・フリーランス案件を比較するときに欠かせません。このツールでは「時給 → 年収」「年収 → 時給」の両方向を瞬時に計算。日給・週給・月収もまとめて表示し、残業代シミュレーションや時給アップの年収インパクトも確認できます。\u003c/p\u003e\n\u003cstyle\u003e\n/* ===== ツール全体 ===== */\n#jikyuu-tool {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", sans-serif;\n  max-width: 720px;\n  margin: 2rem auto;\n  color: #1f2937;\n}\n\n/* モード切替タブ */\n.jk-tabs {\n  display: flex;\n  border-radius: 10px;\n  overflow: hidden;\n  border: 2px solid #059669;\n  margin-bottom: 1.5rem;\n}\n.jk-tab {\n  flex: 1;\n  padding: 0.85rem 1rem;\n  background: #fff;\n  border: none;\n  cursor: pointer;\n  font-size: 1rem;\n  font-weight: 600;\n  color: #059669;\n  transition: background 0.2s, color 0.2s;\n}\n.jk-tab.active {\n  background: #059669;\n  color: #fff;\n}\n.jk-tab:not(.active):hover {\n  background: #d1fae5;\n}\n\n/* 入力パネル */\n.jk-card {\n  background: #f0fdf4;\n  border: 1px solid #6ee7b7;\n  border-radius: 12px;\n  padding: 1.5rem;\n  margin-bottom: 1.25rem;\n}\n.jk-card h3 {\n  margin: 0 0 1rem;\n  font-size: 1rem;\n  color: #065f46;\n  border-left: 4px solid #059669;\n  padding-left: 0.6rem;\n}\n\n/* ラベル + 数値行 */\n.jk-field {\n  margin-bottom: 1.1rem;\n}\n.jk-field label {\n  display: flex;\n  justify-content: space-between;\n  align-items: baseline;\n  font-size: 0.9rem;\n  font-weight: 600;\n  color: #374151;\n  margin-bottom: 0.35rem;\n}\n.jk-field label span {\n  font-size: 1.05rem;\n  color: #059669;\n  font-weight: 700;\n}\n\n/* 数値入力 */\n.jk-number-wrap {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n.jk-number-wrap input[type=\"number\"] {\n  width: 130px;\n  padding: 0.55rem 0.75rem;\n  border: 2px solid #6ee7b7;\n  border-radius: 8px;\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #065f46;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.2s;\n}\n.jk-number-wrap input[type=\"number\"]:focus {\n  border-color: #059669;\n}\n.jk-number-wrap .jk-unit {\n  font-size: 0.9rem;\n  color: #6b7280;\n  font-weight: 600;\n}\n\n/* スライダー */\ninput[type=\"range\"].jk-range {\n  -webkit-appearance: none;\n  width: 100%;\n  height: 6px;\n  border-radius: 3px;\n  background: #a7f3d0;\n  outline: none;\n  cursor: pointer;\n  margin-top: 0.3rem;\n}\ninput[type=\"range\"].jk-range::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  background: #059669;\n  cursor: pointer;\n  box-shadow: 0 2px 6px rgba(5,150,105,0.4);\n}\ninput[type=\"range\"].jk-range::-moz-range-thumb {\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  background: #059669;\n  cursor: pointer;\n  border: none;\n}\n\n/* 結果グリッド */\n.jk-results {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 0.85rem;\n  margin-bottom: 1.25rem;\n}\n@media (max-width: 480px) {\n  .jk-results { grid-template-columns: 1fr; }\n}\n.jk-result-box {\n  background: #fff;\n  border: 1px solid #a7f3d0;\n  border-radius: 10px;\n  padding: 1rem;\n  text-align: center;\n}\n.jk-result-box .jk-res-label {\n  font-size: 0.8rem;\n  color: #6b7280;\n  margin-bottom: 0.3rem;\n}\n.jk-result-box .jk-res-value {\n  font-size: 1.5rem;\n  font-weight: 800;\n  color: #059669;\n}\n.jk-result-box .jk-res-value.highlight {\n  font-size: 1.9rem;\n  color: #047857;\n}\n.jk-result-box .jk-res-sub {\n  font-size: 0.75rem;\n  color: #9ca3af;\n  margin-top: 0.15rem;\n}\n\n/* 残業代パネル */\n.jk-overtime {\n  background: #fff7ed;\n  border: 1px solid #fed7aa;\n  border-radius: 12px;\n  padding: 1.25rem;\n  margin-bottom: 1.25rem;\n}\n.jk-overtime h3 {\n  margin: 0 0 0.85rem;\n  font-size: 1rem;\n  color: #92400e;\n  border-left: 4px solid #f59e0b;\n  padding-left: 0.6rem;\n}\n.jk-overtime-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 0.7rem;\n}\n@media (max-width: 480px) {\n  .jk-overtime-grid { grid-template-columns: 1fr; }\n}\n.jk-ot-box {\n  background: #fffbeb;\n  border: 1px solid #fde68a;\n  border-radius: 8px;\n  padding: 0.75rem;\n  text-align: center;\n}\n.jk-ot-box .jk-ot-label {\n  font-size: 0.75rem;\n  color: #78716c;\n  margin-bottom: 0.25rem;\n}\n.jk-ot-box .jk-ot-value {\n  font-size: 1.15rem;\n  font-weight: 700;\n  color: #b45309;\n}\n.jk-overtime-note {\n  font-size: 0.78rem;\n  color: #9ca3af;\n  margin-top: 0.7rem;\n}\n\n/* 時給アップ比較 */\n.jk-impact {\n  background: #eff6ff;\n  border: 1px solid #bfdbfe;\n  border-radius: 12px;\n  padding: 1.25rem;\n  margin-bottom: 1.25rem;\n}\n.jk-impact h3 {\n  margin: 0 0 0.85rem;\n  font-size: 1rem;\n  color: #1e40af;\n  border-left: 4px solid #3b82f6;\n  padding-left: 0.6rem;\n}\n.jk-impact-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n}\n.jk-impact-table th {\n  background: #dbeafe;\n  color: #1e3a8a;\n  padding: 0.5rem 0.75rem;\n  text-align: center;\n  font-weight: 700;\n}\n.jk-impact-table td {\n  padding: 0.5rem 0.75rem;\n  text-align: center;\n  border-bottom: 1px solid #e5e7eb;\n}\n.jk-impact-table tr:last-child td {\n  border-bottom: none;\n}\n.jk-impact-table .plus {\n  color: #059669;\n  font-weight: 700;\n}\n.jk-impact-table tr:hover td {\n  background: #f0f9ff;\n}\n\n/* クイックリファレンス */\n.jk-quickref {\n  background: #fafafa;\n  border: 1px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 1.25rem;\n  margin-bottom: 1.25rem;\n}\n.jk-quickref h3 {\n  margin: 0 0 0.85rem;\n  font-size: 1rem;\n  color: #374151;\n  border-left: 4px solid #9ca3af;\n  padding-left: 0.6rem;\n}\n.jk-quickref table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n}\n.jk-quickref th {\n  background: #f3f4f6;\n  color: #374151;\n  padding: 0.5rem 0.75rem;\n  text-align: center;\n  font-weight: 700;\n}\n.jk-quickref td {\n  padding: 0.5rem 0.75rem;\n  text-align: right;\n  border-bottom: 1px solid #f3f4f6;\n  color: #374151;\n}\n.jk-quickref td:first-child {\n  text-align: center;\n  font-weight: 700;\n  color: #059669;\n}\n.jk-quickref tr:last-child td {\n  border-bottom: none;\n}\n.jk-quickref tr:hover td {\n  background: #f9fafb;\n}\n\n/* 非表示制御 */\n.jk-mode-section { display: none; }\n.jk-mode-section.active { display: block; }\n\u003c/style\u003e\n\u003cdiv id=\"jikyuu-tool\"\u003e\n  \u003c!-- モード切替タブ --\u003e\n  \u003cdiv class=\"jk-tabs\" role=\"tablist\" aria-label=\"計算モード\"\u003e\n    \u003cbutton class=\"jk-tab active\" id=\"tab-hourly\" role=\"tab\" aria-selected=\"true\" onclick=\"jkSwitchMode('hourly')\"\u003e⏱ 時給 → 年収\u003c/button\u003e\n    \u003cbutton class=\"jk-tab\" id=\"tab-annual\" role=\"tab\" aria-selected=\"false\" onclick=\"jkSwitchMode('annual')\"\u003e💴 年収 → 時給\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- ===== モード①: 時給 → 年収 ===== --\u003e\n  \u003cdiv class=\"jk-mode-section active\" id=\"section-hourly\"\u003e\n    \u003cdiv class=\"jk-card\"\u003e\n      \u003ch3\u003e入力\u003c/h3\u003e\n\u003cpre\u003e\u003ccode\u003e  \u0026lt;div class=\u0026quot;jk-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;時給\u0026lt;span id=\u0026quot;disp-hourly-rate\u0026quot;\u0026gt;1,500\u0026lt;/span\u0026gt; 円\u0026lt;/label\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-number-wrap\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;inp-hourly-rate\u0026quot; value=\u0026quot;1500\u0026quot; min=\u0026quot;100\u0026quot; max=\u0026quot;100000\u0026quot; step=\u0026quot;10\u0026quot;\n        oninput=\u0026quot;jkCalcHourly()\u0026quot; aria-label=\u0026quot;時給（円）\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;jk-unit\u0026quot;\u0026gt;円 / 時間\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;jk-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;週の勤務時間\u0026lt;span id=\u0026quot;disp-hourly-wh\u0026quot;\u0026gt;40\u0026lt;/span\u0026gt; 時間\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;jk-range\u0026quot; id=\u0026quot;inp-hourly-wh\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;60\u0026quot; value=\u0026quot;40\u0026quot;\n      oninput=\u0026quot;jkCalcHourly()\u0026quot; aria-label=\u0026quot;週の勤務時間\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;jk-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;年間勤務週数\u0026lt;span id=\u0026quot;disp-hourly-wk\u0026quot;\u0026gt;52\u0026lt;/span\u0026gt; 週\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;jk-range\u0026quot; id=\u0026quot;inp-hourly-wk\u0026quot; min=\u0026quot;48\u0026quot; max=\u0026quot;52\u0026quot; value=\u0026quot;52\u0026quot;\n      oninput=\u0026quot;jkCalcHourly()\u0026quot; aria-label=\u0026quot;年間勤務週数\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- 結果 --\u0026gt;\n\u0026lt;div class=\u0026quot;jk-results\u0026quot; id=\u0026quot;results-hourly\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;日給（8時間換算）\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-value\u0026quot; id=\u0026quot;res-h-daily\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 日\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;週給\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-value\u0026quot; id=\u0026quot;res-h-weekly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 週\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;月収（÷12）\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-value\u0026quot; id=\u0026quot;res-h-monthly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 月\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;年収\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-value highlight\u0026quot; id=\u0026quot;res-h-annual\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 年\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- ===== モード②: 年収 → 時給 ===== --\u003e\n  \u003cdiv class=\"jk-mode-section\" id=\"section-annual\"\u003e\n    \u003cdiv class=\"jk-card\"\u003e\n      \u003ch3\u003e入力\u003c/h3\u003e\n\u003cpre\u003e\u003ccode\u003e  \u0026lt;div class=\u0026quot;jk-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;年収\u0026lt;span id=\u0026quot;disp-annual-val\u0026quot;\u0026gt;400\u0026lt;/span\u0026gt; 万円\u0026lt;/label\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-number-wrap\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;inp-annual-val\u0026quot; value=\u0026quot;400\u0026quot; min=\u0026quot;50\u0026quot; max=\u0026quot;10000\u0026quot; step=\u0026quot;10\u0026quot;\n        oninput=\u0026quot;jkCalcAnnual()\u0026quot; aria-label=\u0026quot;年収（万円）\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;jk-unit\u0026quot;\u0026gt;万円 / 年\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;jk-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;週の勤務時間\u0026lt;span id=\u0026quot;disp-annual-wh\u0026quot;\u0026gt;40\u0026lt;/span\u0026gt; 時間\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;jk-range\u0026quot; id=\u0026quot;inp-annual-wh\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;60\u0026quot; value=\u0026quot;40\u0026quot;\n      oninput=\u0026quot;jkCalcAnnual()\u0026quot; aria-label=\u0026quot;週の勤務時間\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;jk-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;年間勤務週数\u0026lt;span id=\u0026quot;disp-annual-wk\u0026quot;\u0026gt;52\u0026lt;/span\u0026gt; 週\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;jk-range\u0026quot; id=\u0026quot;inp-annual-wk\u0026quot; min=\u0026quot;48\u0026quot; max=\u0026quot;52\u0026quot; value=\u0026quot;52\u0026quot;\n      oninput=\u0026quot;jkCalcAnnual()\u0026quot; aria-label=\u0026quot;年間勤務週数\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- 結果 --\u0026gt;\n\u0026lt;div class=\u0026quot;jk-results\u0026quot; id=\u0026quot;results-annual\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;時給\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-value highlight\u0026quot; id=\u0026quot;res-a-hourly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 時間\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;日給（8時間換算）\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-value\u0026quot; id=\u0026quot;res-a-daily\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 日\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;週給\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-value\u0026quot; id=\u0026quot;res-a-weekly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 週\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;jk-result-box\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-label\u0026quot;\u0026gt;月収（÷12）\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-value\u0026quot; id=\u0026quot;res-a-monthly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;jk-res-sub\u0026quot;\u0026gt;円 / 月\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- ===== 残業代パネル（常時） ===== --\u003e\n  \u003cdiv class=\"jk-overtime\" id=\"panel-overtime\"\u003e\n    \u003ch3\u003e残業代シミュレーション（法定割増 1.25倍）\u003c/h3\u003e\n    \u003cdiv id=\"overtime-content\"\u003e\n      \u003cdiv class=\"jk-overtime-grid\"\u003e\n        \u003cdiv class=\"jk-ot-box\"\u003e\n          \u003cdiv class=\"jk-ot-label\"\u003e通常時給\u003c/div\u003e\n          \u003cdiv class=\"jk-ot-value\" id=\"ot-base\"\u003e—\u003c/div\u003e\n          \u003cdiv style=\"font-size:0.72rem;color:#9ca3af;\"\u003e円/時\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"jk-ot-box\"\u003e\n          \u003cdiv class=\"jk-ot-label\"\u003e残業時給（×1.25）\u003c/div\u003e\n          \u003cdiv class=\"jk-ot-value\" id=\"ot-rate\"\u003e—\u003c/div\u003e\n          \u003cdiv style=\"font-size:0.72rem;color:#9ca3af;\"\u003e円/時\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"jk-ot-box\"\u003e\n          \u003cdiv class=\"jk-ot-label\"\u003e月20h残業の追加収入\u003c/div\u003e\n          \u003cdiv class=\"jk-ot-value\" id=\"ot-monthly\"\u003e—\u003c/div\u003e\n          \u003cdiv style=\"font-size:0.72rem;color:#9ca3af;\"\u003e円/月\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003cp id=\"overtime-msg\" class=\"jk-overtime-note\" style=\"margin-top:0.6rem;\"\u003e\u003c/p\u003e","title":"時給換算ツール｜年収↔時給を自動変換【月収・日給も】"},{"content":" テキスト比較ツール 2つのテキストの差分を即座に検出・ハイライト表示します\n空白を無視 大文字小文字を無視 単語レベル差分 元のテキスト 変更後のテキスト ⇄ 入れ替え 比較する クリア 差分をコピー クリップボードにコピーしました 追加: 0行 削除: 0行 変更なし: 0行 類似度: 0% 差分結果 追加 削除 変更なし テキスト比較ツールの使い方 元のテキストを貼り付ける — 左側のテキストエリアに比較元のテキストを入力または貼り付けます。 変更後のテキストを貼り付ける — 右側に比較先のテキストを入力します。 オプションを設定する — 必要に応じて「空白を無視」「大文字小文字を無視」「単語レベル差分」を選択します。 「比較する」ボタンを押す — 差分が緑（追加）・赤（削除）でハイライト表示されます。 統計を確認する — 追加・削除・変更なし行数と類似度（%）が表示されます。 差分をコピーする — 「差分をコピー」ボタンで結果をクリップボードに保存できます。 ヒント: Ctrl + Enter（Mac: ⌘ + Enter）のショートカットでも比較を実行できます。\n関連ツール JSONデータを整形・検証 → JSONフォーマッター 正規表現をテスト → 正規表現テスター 文字数をリアルタイムでカウント → 文字数カウンター マークダウンエディターが必要？ → マークダウンプレビュー — リアルタイムでプレビュー\n契約書・文書管理を効率化\nテキストの差分チェックと同様に、ビジネス文書の管理も効率化しませんか？クラウド会計ソフト「freee」なら、請求書の作成から経費管理まで一元化できます。\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/text-diff/","summary":"\u003cdiv id=\"diff-app\"\u003e\n\u003cstyle\u003e\n#diff-app {\n  font-family: 'Segoe UI', 'Hiragino Sans', 'Meiryo', sans-serif;\n  color: #334155;\n  max-width: 1100px;\n  margin: 0 auto;\n  padding: 0 8px;\n  box-sizing: border-box;\n}\n\n#diff-app * {\n  box-sizing: border-box;\n}\n\n.diff-header {\n  text-align: center;\n  margin-bottom: 24px;\n}\n\n.diff-header h2 {\n  font-size: 1.4rem;\n  color: #334155;\n  margin: 0 0 6px;\n}\n\n.diff-header p {\n  color: #64748b;\n  font-size: 0.9rem;\n  margin: 0;\n}\n\n.diff-options {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  align-items: center;\n  margin-bottom: 16px;\n  padding: 12px 16px;\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n}\n\n.diff-options label {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 0.875rem;\n  color: #334155;\n  cursor: pointer;\n  user-select: none;\n}\n\n.diff-options input[type=\"checkbox\"] {\n  width: 16px;\n  height: 16px;\n  accent-color: #334155;\n  cursor: pointer;\n}\n\n.diff-options-sep {\n  flex: 1;\n}\n\n.diff-input-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 16px;\n}\n\n@media (max-width: 640px) {\n  .diff-input-row {\n    grid-template-columns: 1fr;\n  }\n}\n\n.diff-input-group {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n\n.diff-input-group label {\n  font-size: 0.875rem;\n  font-weight: 600;\n  color: #334155;\n}\n\n.diff-input-group textarea {\n  width: 100%;\n  height: 220px;\n  padding: 10px 12px;\n  border: 2px solid #e2e8f0;\n  border-radius: 8px;\n  font-family: 'Consolas', 'Courier New', monospace;\n  font-size: 0.85rem;\n  color: #334155;\n  background: #fff;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.15s;\n  line-height: 1.6;\n}\n\n.diff-input-group textarea:focus {\n  border-color: #334155;\n}\n\n.diff-actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  justify-content: center;\n  margin-bottom: 20px;\n}\n\n.btn {\n  padding: 9px 20px;\n  border: none;\n  border-radius: 7px;\n  font-size: 0.875rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, opacity 0.15s;\n  white-space: nowrap;\n}\n\n.btn:active {\n  opacity: 0.8;\n}\n\n.btn-primary {\n  background: #334155;\n  color: #fff;\n  font-size: 1rem;\n  padding: 11px 32px;\n}\n\n.btn-primary:hover {\n  background: #1e293b;\n}\n\n.btn-secondary {\n  background: #e2e8f0;\n  color: #334155;\n}\n\n.btn-secondary:hover {\n  background: #cbd5e1;\n}\n\n.btn-swap {\n  background: #f1f5f9;\n  color: #334155;\n  border: 1px solid #cbd5e1;\n}\n\n.btn-swap:hover {\n  background: #e2e8f0;\n}\n\n.btn-copy {\n  background: #f0fdf4;\n  color: #166534;\n  border: 1px solid #bbf7d0;\n}\n\n.btn-copy:hover {\n  background: #dcfce7;\n}\n\n.diff-stats {\n  display: none;\n  flex-wrap: wrap;\n  gap: 12px;\n  align-items: center;\n  justify-content: center;\n  margin-bottom: 16px;\n  padding: 12px 16px;\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n}\n\n.diff-stats.visible {\n  display: flex;\n}\n\n.stat-badge {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 5px 12px;\n  border-radius: 20px;\n  font-size: 0.82rem;\n  font-weight: 600;\n}\n\n.stat-added {\n  background: #dcfce7;\n  color: #166534;\n}\n\n.stat-removed {\n  background: #fee2e2;\n  color: #991b1b;\n}\n\n.stat-unchanged {\n  background: #f1f5f9;\n  color: #475569;\n}\n\n.stat-similarity {\n  background: #eff6ff;\n  color: #1d4ed8;\n}\n\n.diff-output {\n  display: none;\n  border: 2px solid #e2e8f0;\n  border-radius: 8px;\n  overflow: hidden;\n  margin-bottom: 16px;\n}\n\n.diff-output.visible {\n  display: block;\n}\n\n.diff-output-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 8px 16px;\n  background: #f8fafc;\n  border-bottom: 1px solid #e2e8f0;\n  font-size: 0.82rem;\n  font-weight: 600;\n  color: #64748b;\n}\n\n.diff-output-legend {\n  display: flex;\n  gap: 12px;\n  flex-wrap: wrap;\n}\n\n.legend-item {\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  font-size: 0.78rem;\n}\n\n.legend-dot {\n  width: 12px;\n  height: 12px;\n  border-radius: 3px;\n  flex-shrink: 0;\n}\n\n.legend-added { background: #bbf7d0; }\n.legend-removed { background: #fecaca; }\n.legend-unchanged { background: #f1f5f9; border: 1px solid #e2e8f0; }\n\n.diff-lines {\n  font-family: 'Consolas', 'Courier New', monospace;\n  font-size: 0.82rem;\n  overflow-x: auto;\n  max-height: 500px;\n  overflow-y: auto;\n}\n\n.diff-line {\n  display: flex;\n  align-items: stretch;\n  min-height: 24px;\n  line-height: 1.6;\n}\n\n.diff-line:hover {\n  filter: brightness(0.97);\n}\n\n.diff-line-num {\n  display: flex;\n  align-items: flex-start;\n  padding: 2px 8px;\n  min-width: 40px;\n  text-align: right;\n  color: #94a3b8;\n  background: #f8fafc;\n  border-right: 1px solid #e2e8f0;\n  user-select: none;\n  font-size: 0.78rem;\n  flex-shrink: 0;\n  padding-top: 4px;\n}\n\n.diff-line-sign {\n  display: flex;\n  align-items: flex-start;\n  padding: 2px 8px 2px 6px;\n  min-width: 28px;\n  font-weight: 700;\n  flex-shrink: 0;\n  padding-top: 4px;\n}\n\n.diff-line-content {\n  flex: 1;\n  padding: 2px 12px 2px 4px;\n  white-space: pre-wrap;\n  word-break: break-all;\n  padding-top: 4px;\n}\n\n.line-added {\n  background: #f0fdf4;\n}\n\n.line-added .diff-line-num {\n  background: #dcfce7;\n  color: #166534;\n}\n\n.line-added .diff-line-sign {\n  background: #dcfce7;\n  color: #166534;\n}\n\n.line-removed {\n  background: #fff5f5;\n}\n\n.line-removed .diff-line-num {\n  background: #fee2e2;\n  color: #991b1b;\n}\n\n.line-removed .diff-line-sign {\n  background: #fee2e2;\n  color: #991b1b;\n}\n\n.line-unchanged {\n  background: #fff;\n}\n\n.line-unchanged .diff-line-num {\n  background: #f8fafc;\n  color: #94a3b8;\n}\n\n.line-unchanged .diff-line-sign {\n  background: #f8fafc;\n  color: #cbd5e1;\n}\n\n/* Word-level diff highlights */\n.word-added {\n  background: #86efac;\n  border-radius: 2px;\n  padding: 0 1px;\n}\n\n.word-removed {\n  background: #fca5a5;\n  border-radius: 2px;\n  padding: 0 1px;\n  text-decoration: line-through;\n}\n\n.diff-empty {\n  text-align: center;\n  padding: 40px 20px;\n  color: #94a3b8;\n  font-size: 0.9rem;\n  background: #f8fafc;\n}\n\n.copy-success {\n  display: none;\n  text-align: center;\n  color: #166534;\n  font-size: 0.82rem;\n  margin-top: -12px;\n  margin-bottom: 12px;\n  font-weight: 600;\n}\n\n.copy-success.visible {\n  display: block;\n}\n\u003c/style\u003e\n\u003cdiv class=\"diff-header\"\u003e\n  \u003ch2\u003eテキスト比較ツール\u003c/h2\u003e\n  \u003cp\u003e2つのテキストの差分を即座に検出・ハイライト表示します\u003c/p\u003e","title":"テキスト比較ツール - 無料オンラインテキスト差分チェック"},{"content":" URLエンコード・デコードツール モード： エンコード デコード 範囲： コンポーネント (encodeURIComponent) URL全体 (encodeURI) 入力テキスト / URL 0 文字 エンコード結果 0 文字 エンコード実行 コピー クリア \u0026#8645; 入れ替え 自動判定: ON encodeURIComponent — エンコードされない文字：A–Z a–z 0–9 - _ . ! ~ * ' ( )。クエリパラメータやパスセグメントのエンコードに最適。 エンコードされた文字の内訳 元の文字 エンコード後 Unicodeコード 説明 使い方 URLエンコード（パーセントエンコーディング）は、URLとして安全でない文字を %XX 形式に変換します。XX は文字のUTF-8バイト値の16進数表現です。\nモードの使い分け モード 関数 エンコードされない文字 encodeURIComponent クエリパラメータやパスセグメント単体のエンコード A–Z a–z 0–9 - _ . ! ~ * ' ( ) encodeURI URL全体のエンコード（構造を保持） 上記に加え ; , / ? : @ \u0026amp; = + $ # よく使われる文字のエンコード例 文字 エンコード後 用途 スペース %20 パス内の区切り \u0026amp; %26 クエリ値内のアンパサンド = %3D クエリ値内の等号 + %2B クエリ値内のプラス記号 # %23 URL内のハッシュ ? %3F URL内の疑問符 よくある使用例 日本語URLのエンコード — 日本語ドメインやパスを含むURLを安全な形式に変換 APIのクエリパラメータ — 特殊文字を含む検索キーワードをパラメータとして送信 フォームデータの処理 — HTML フォームのPOSTデータに含まれる文字列の変換 エンコード済みURLの確認 — %E3%81%82 などのエンコード文字列を元のテキストに戻す Webサイト運営の経費管理もかんたんに\nfreee会計なら、ドメイン・サーバー費用の経費精算もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\nHTMLエンティティを変換 → HTMLエンティティエンコーダー 各種エンコーディング → 万能エンコーダー/デコーダー ","permalink":"https://productivity-works.com/ja/tools/url-encoder-decoder/","summary":"\u003cdiv id=\"ue-app\"\u003e\n\u003cstyle\u003e\n#ue-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", \"Segoe UI\", sans-serif;\n  max-width: 820px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#ue-app * {\n  box-sizing: border-box;\n}\n#ue-app h2.ue-title {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 0 0 16px 0;\n}\n#ue-app .ue-card {\n  background: #ffffff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 20px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.05);\n}\n/* Mode toggle */\n#ue-app .ue-mode-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  flex-wrap: wrap;\n  margin-bottom: 20px;\n}\n#ue-app .ue-mode-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n}\n#ue-app .ue-toggle-group {\n  display: flex;\n  background: #f1f5f9;\n  border-radius: 8px;\n  padding: 3px;\n  gap: 2px;\n}\n#ue-app .ue-toggle-btn {\n  padding: 7px 18px;\n  border: none;\n  border-radius: 6px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  background: transparent;\n  color: #64748b;\n  transition: background 0.15s, color 0.15s;\n}\n#ue-app .ue-toggle-btn.active {\n  background: #ffffff;\n  color: #0f172a;\n  box-shadow: 0 1px 3px rgba(0,0,0,0.12);\n}\n#ue-app .ue-scope-group {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n  align-items: center;\n}\n#ue-app .ue-scope-label {\n  font-size: 13px;\n  color: #64748b;\n  font-weight: 500;\n}\n#ue-app .ue-scope-btn {\n  padding: 5px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  background: #fff;\n  color: #475569;\n  transition: border-color 0.15s, background 0.15s, color 0.15s;\n}\n#ue-app .ue-scope-btn.active {\n  border-color: #3b82f6;\n  background: #eff6ff;\n  color: #1d4ed8;\n}\n/* Textarea area */\n#ue-app .ue-io-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n}\n@media (max-width: 600px) {\n  #ue-app .ue-io-row { grid-template-columns: 1fr; }\n}\n#ue-app .ue-io-block {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n#ue-app .ue-io-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n#ue-app .ue-io-title {\n  font-size: 12px;\n  font-weight: 700;\n  color: #64748b;\n  letter-spacing: 0.03em;\n}\n#ue-app .ue-char-count {\n  font-size: 11px;\n  color: #94a3b8;\n}\n#ue-app textarea {\n  width: 100%;\n  min-height: 160px;\n  padding: 12px 14px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  font-family: \"SFMono-Regular\", \"Fira Code\", \"Consolas\", monospace;\n  font-size: 13px;\n  line-height: 1.6;\n  color: #1e293b;\n  background: #f8fafc;\n  resize: vertical;\n  transition: border-color 0.15s;\n  outline: none;\n}\n#ue-app textarea:focus {\n  border-color: #3b82f6;\n  background: #fff;\n}\n#ue-app textarea.ue-output {\n  background: #f0fdf4;\n  border-color: #bbf7d0;\n  color: #14532d;\n}\n#ue-app textarea.ue-output-decode {\n  background: #fefce8;\n  border-color: #fde68a;\n  color: #78350f;\n}\n/* Action bar */\n#ue-app .ue-action-bar {\n  display: flex;\n  gap: 10px;\n  align-items: center;\n  flex-wrap: wrap;\n  margin-top: 16px;\n}\n#ue-app .ue-btn {\n  padding: 9px 20px;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.15s, transform 0.1s;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n#ue-app .ue-btn:active { transform: scale(0.97); }\n#ue-app .ue-btn-primary {\n  background: #3b82f6;\n  color: #fff;\n}\n#ue-app .ue-btn-primary:hover { opacity: 0.88; }\n#ue-app .ue-btn-secondary {\n  background: #f1f5f9;\n  color: #475569;\n  border: 1.5px solid #e2e8f0;\n}\n#ue-app .ue-btn-secondary:hover { background: #e2e8f0; }\n#ue-app .ue-btn-copy {\n  background: #10b981;\n  color: #fff;\n}\n#ue-app .ue-btn-copy:hover { opacity: 0.88; }\n#ue-app .ue-auto-badge {\n  margin-left: auto;\n  font-size: 11px;\n  color: #6366f1;\n  font-weight: 600;\n  background: #eef2ff;\n  border-radius: 5px;\n  padding: 3px 9px;\n  border: 1px solid #c7d2fe;\n}\n/* Breakdown table */\n#ue-app .ue-breakdown {\n  margin-top: 20px;\n}\n#ue-app .ue-breakdown-title {\n  font-size: 12px;\n  font-weight: 700;\n  color: #64748b;\n  letter-spacing: 0.03em;\n  margin-bottom: 10px;\n}\n#ue-app .ue-table-wrap {\n  overflow-x: auto;\n  border-radius: 8px;\n  border: 1.5px solid #e2e8f0;\n}\n#ue-app table.ue-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n#ue-app table.ue-table th {\n  background: #f8fafc;\n  color: #64748b;\n  font-weight: 700;\n  padding: 8px 14px;\n  text-align: left;\n  border-bottom: 1.5px solid #e2e8f0;\n}\n#ue-app table.ue-table td {\n  padding: 7px 14px;\n  border-bottom: 1px solid #f1f5f9;\n  font-family: \"SFMono-Regular\", \"Fira Code\", monospace;\n  vertical-align: middle;\n}\n#ue-app table.ue-table tr:last-child td { border-bottom: none; }\n#ue-app table.ue-table tr:nth-child(even) td { background: #f8fafc; }\n#ue-app .ue-char-orig { color: #1e293b; font-weight: 600; }\n#ue-app .ue-char-enc  { color: #1d4ed8; }\n#ue-app .ue-char-note { color: #64748b; font-size: 12px; font-family: inherit; }\n/* Toast */\n#ue-app .ue-toast {\n  position: fixed;\n  bottom: 28px;\n  right: 28px;\n  background: #0f172a;\n  color: #fff;\n  padding: 11px 20px;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 0.25s;\n  z-index: 9999;\n  box-shadow: 0 4px 16px rgba(0,0,0,0.25);\n}\n#ue-app .ue-toast.show { opacity: 1; }\n/* Info box */\n#ue-app .ue-info {\n  background: #eff6ff;\n  border: 1px solid #bfdbfe;\n  border-radius: 8px;\n  padding: 12px 16px;\n  font-size: 13px;\n  color: #1d4ed8;\n  margin-top: 16px;\n  line-height: 1.6;\n}\n\u003c/style\u003e\n\u003cdiv class=\"ue-card\"\u003e\n  \u003ch2 class=\"ue-title\"\u003eURLエンコード・デコードツール\u003c/h2\u003e\n  \u003c!-- Mode toggle --\u003e\n  \u003cdiv class=\"ue-mode-row\"\u003e\n    \u003cspan class=\"ue-mode-label\"\u003eモード：\u003c/span\u003e\n    \u003cdiv class=\"ue-toggle-group\"\u003e\n      \u003cbutton class=\"ue-toggle-btn active\" id=\"ue-mode-encode\" onclick=\"ueSetMode('encode')\"\u003eエンコード\u003c/button\u003e\n      \u003cbutton class=\"ue-toggle-btn\" id=\"ue-mode-decode\" onclick=\"ueSetMode('decode')\"\u003eデコード\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ue-scope-group\" id=\"ue-scope-group\"\u003e\n      \u003cspan class=\"ue-scope-label\"\u003e範囲：\u003c/span\u003e\n      \u003cbutton class=\"ue-scope-btn active\" id=\"ue-scope-component\" onclick=\"ueSetScope('component')\"\u003eコンポーネント \u003cspan style=\"font-weight:400;font-size:11px;\"\u003e(encodeURIComponent)\u003c/span\u003e\u003c/button\u003e\n      \u003cbutton class=\"ue-scope-btn\" id=\"ue-scope-full\" onclick=\"ueSetScope('full')\"\u003eURL全体 \u003cspan style=\"font-weight:400;font-size:11px;\"\u003e(encodeURI)\u003c/span\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- I/O --\u003e\n  \u003cdiv class=\"ue-io-row\"\u003e\n    \u003cdiv class=\"ue-io-block\"\u003e\n      \u003cdiv class=\"ue-io-header\"\u003e\n        \u003cspan class=\"ue-io-title\" id=\"ue-input-label\"\u003e入力テキスト / URL\u003c/span\u003e\n        \u003cspan class=\"ue-char-count\" id=\"ue-input-count\"\u003e0 文字\u003c/span\u003e\n      \u003c/div\u003e\n      \u003ctextarea id=\"ue-input\" placeholder=\"テキストまたはURLを貼り付けてください…\" oninput=\"ueOnInput()\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ue-io-block\"\u003e\n      \u003cdiv class=\"ue-io-header\"\u003e\n        \u003cspan class=\"ue-io-title\" id=\"ue-output-label\"\u003eエンコード結果\u003c/span\u003e\n        \u003cspan class=\"ue-char-count\" id=\"ue-output-count\"\u003e0 文字\u003c/span\u003e\n      \u003c/div\u003e\n      \u003ctextarea id=\"ue-output\" class=\"ue-output\" readonly placeholder=\"結果がここに表示されます…\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Actions --\u003e\n  \u003cdiv class=\"ue-action-bar\"\u003e\n    \u003cbutton class=\"ue-btn ue-btn-primary\" onclick=\"ueProcess()\"\u003e\n      \u003csvg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpolyline points=\"5 12 12 5 19 12\"/\u003e\u003cpolyline points=\"5 19 12 12 19 19\"/\u003e\u003c/svg\u003e\n      \u003cspan id=\"ue-process-label\"\u003eエンコード実行\u003c/span\u003e\n    \u003c/button\u003e\n    \u003cbutton class=\"ue-btn ue-btn-copy\" onclick=\"ueCopyResult()\"\u003e\n      \u003csvg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003crect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/\u003e\u003cpath d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\"/\u003e\u003c/svg\u003e\n      コピー\n    \u003c/button\u003e\n    \u003cbutton class=\"ue-btn ue-btn-secondary\" onclick=\"ueClear()\"\u003eクリア\u003c/button\u003e\n    \u003cbutton class=\"ue-btn ue-btn-secondary\" onclick=\"ueSwap()\"\u003e\u0026#8645; 入れ替え\u003c/button\u003e\n    \u003cspan class=\"ue-auto-badge\" id=\"ue-auto-badge\"\u003e自動判定: ON\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ue-info\" id=\"ue-scope-info\"\u003e\n    \u003cstrong\u003eencodeURIComponent\u003c/strong\u003e — エンコードされない文字：\u003ccode\u003eA–Z a–z 0–9 - _ . ! ~ * ' ( )\u003c/code\u003e。クエリパラメータやパスセグメントのエンコードに最適。\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Breakdown table --\u003e\n\u003cdiv class=\"ue-card ue-breakdown\" id=\"ue-breakdown-card\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"ue-breakdown-title\"\u003eエンコードされた文字の内訳\u003c/div\u003e\n  \u003cdiv class=\"ue-table-wrap\"\u003e\n    \u003ctable class=\"ue-table\"\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\n          \u003cth\u003e元の文字\u003c/th\u003e\n          \u003cth\u003eエンコード後\u003c/th\u003e\n          \u003cth\u003eUnicodeコード\u003c/th\u003e\n          \u003cth\u003e説明\u003c/th\u003e\n        \u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody id=\"ue-breakdown-body\"\u003e\u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ue-toast\" id=\"ue-toast\"\u003e\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var mode = 'encode';\n  var scope = 'component';\n\n  var charNotes = {\n    ' ': 'スペース',\n    '!': '感嘆符',\n    '\"': '二重引用符',\n    '#': 'ハッシュ（フラグメント）',\n    '$': 'ドル記号',\n    '%': 'パーセント記号',\n    '\u0026': 'アンパサンド',\n    \"'\": 'アポストロフィ',\n    '(': '左括弧',\n    ')': '右括弧',\n    '*': 'アスタリスク',\n    '+': 'プラス記号',\n    ',': 'カンマ',\n    '/': 'スラッシュ',\n    ':': 'コロン',\n    ';': 'セミコロン',\n    '=': '等号',\n    '?': '疑問符',\n    '@': 'アットマーク',\n    '[': '左角括弧',\n    ']': '右角括弧',\n  };\n\n  window.ueSetMode = function(m) {\n    mode = m;\n    document.getElementById('ue-mode-encode').classList.toggle('active', m === 'encode');\n    document.getElementById('ue-mode-decode').classList.toggle('active', m === 'decode');\n    document.getElementById('ue-scope-group').style.display = m === 'encode' ? '' : 'none';\n    document.getElementById('ue-scope-info').style.display = m === 'encode' ? '' : 'none';\n    document.getElementById('ue-process-label').textContent = m === 'encode' ? 'エンコード実行' : 'デコード実行';\n    document.getElementById('ue-input-label').textContent = m === 'encode' ? '入力テキスト / URL' : 'エンコード済みURL';\n    document.getElementById('ue-output-label').textContent = m === 'encode' ? 'エンコード結果' : 'デコード結果';\n    var out = document.getElementById('ue-output');\n    out.className = m === 'encode' ? 'ue-output' : 'ue-output-decode';\n    ueOnInput();\n  };\n\n  window.ueSetScope = function(s) {\n    scope = s;\n    document.getElementById('ue-scope-component').classList.toggle('active', s === 'component');\n    document.getElementById('ue-scope-full').classList.toggle('active', s === 'full');\n    var info = document.getElementById('ue-scope-info');\n    if (s === 'component') {\n      info.innerHTML = '\u003cstrong\u003eencodeURIComponent\u003c/strong\u003e — エンコードされない文字：\u003ccode\u003eA–Z a–z 0–9 - _ . ! ~ * \\' ( )\u003c/code\u003e。クエリパラメータやパスセグメントのエンコードに最適。';\n    } else {\n      info.innerHTML = '\u003cstrong\u003eencodeURI\u003c/strong\u003e — URIとして有効な文字はエンコードされません：\u003ccode\u003eA–Z a–z 0–9 ; , / ? : @ \u0026 = + $ - _ . ! ~ * \\' ( ) #\u003c/code\u003e。URL全体の構造を保ちながらエンコードする場合に使用。';\n    }\n    ueOnInput();\n  };\n\n  function ueEncode(text) {\n    if (scope === 'component') return encodeURIComponent(text);\n    return encodeURI(text);\n  }\n\n  function ueDecode(text) {\n    try {\n      return decodeURIComponent(text);\n    } catch(e) {\n      try { return decodeURI(text); } catch(e2) { return text; }\n    }\n  }\n\n  function ueAutoDetect(text) {\n    return /%[0-9A-Fa-f]{2}/.test(text) ? 'decode' : 'encode';\n  }\n\n  window.ueOnInput = function() {\n    var input = document.getElementById('ue-input').value;\n    document.getElementById('ue-input-count').textContent = input.length + ' 文字';\n    if (input.length \u003e 0) {\n      var detected = ueAutoDetect(input);\n      var badge = document.getElementById('ue-auto-badge');\n      badge.textContent = '自動判定: ' + (detected === 'decode' ? 'デコード' : 'エンコード');\n    } else {\n      document.getElementById('ue-auto-badge').textContent = '自動判定: ON';\n    }\n    ueProcess();\n  };\n\n  window.ueProcess = function() {\n    var input = document.getElementById('ue-input').value;\n    if (!input) {\n      document.getElementById('ue-output').value = '';\n      document.getElementById('ue-output-count').textContent = '0 文字';\n      document.getElementById('ue-breakdown-card').style.display = 'none';\n      return;\n    }\n    var result;\n    try {\n      result = mode === 'encode' ? ueEncode(input) : ueDecode(input);\n    } catch(e) {\n      result = 'エラー: ' + e.message;\n    }\n    document.getElementById('ue-output').value = result;\n    document.getElementById('ue-output-count').textContent = result.length + ' 文字';\n    if (mode === 'encode') ueRenderBreakdown(input, result);\n    else document.getElementById('ue-breakdown-card').style.display = 'none';\n  };\n\n  function ueRenderBreakdown(original, encoded) {\n    var rows = [];\n    var seen = {};\n    for (var i = 0; i \u003c original.length; i++) {\n      var ch = original[i];\n      var encCh;\n      try {\n        encCh = scope === 'component' ? encodeURIComponent(ch) : encodeURI(ch);\n      } catch(e) { encCh = ch; }\n      if (encCh !== ch \u0026\u0026 !seen[ch]) {\n        seen[ch] = true;\n        var codePoint = ch.codePointAt ? ch.codePointAt(0) : ch.charCodeAt(0);\n        var note = charNotes[ch] || (codePoint \u003e 127 ? 'ASCII以外の文字' : '特殊文字');\n        rows.push({ orig: ch, enc: encCh, uni: 'U+' + codePoint.toString(16).toUpperCase().padStart(4,'0'), note: note });\n      }\n    }\n    var tbody = document.getElementById('ue-breakdown-body');\n    var card = document.getElementById('ue-breakdown-card');\n    if (rows.length === 0) { card.style.display = 'none'; return; }\n    card.style.display = '';\n    tbody.innerHTML = rows.map(function(r) {\n      var disp = r.orig === ' ' ? '\u0026nbsp;（スペース）' : r.orig.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;');\n      return '\u003ctr\u003e\u003ctd class=\"ue-char-orig\"\u003e' + disp + '\u003c/td\u003e\u003ctd class=\"ue-char-enc\"\u003e' + r.enc + '\u003c/td\u003e\u003ctd class=\"ue-char-enc\"\u003e' + r.uni + '\u003c/td\u003e\u003ctd class=\"ue-char-note\"\u003e' + r.note + '\u003c/td\u003e\u003c/tr\u003e';\n    }).join('');\n  }\n\n  window.ueCopyResult = function() {\n    var val = document.getElementById('ue-output').value;\n    if (!val) return;\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(val).then(function() { ueShowToast('クリップボードにコピーしました！'); });\n    } else {\n      var ta = document.getElementById('ue-output');\n      ta.select();\n      document.execCommand('copy');\n      ueShowToast('クリップボードにコピーしました！');\n    }\n  };\n\n  window.ueClear = function() {\n    document.getElementById('ue-input').value = '';\n    document.getElementById('ue-output').value = '';\n    document.getElementById('ue-input-count').textContent = '0 文字';\n    document.getElementById('ue-output-count').textContent = '0 文字';\n    document.getElementById('ue-breakdown-card').style.display = 'none';\n    document.getElementById('ue-auto-badge').textContent = '自動判定: ON';\n  };\n\n  window.ueSwap = function() {\n    var out = document.getElementById('ue-output').value;\n    document.getElementById('ue-input').value = out;\n    ueOnInput();\n  };\n\n  function ueShowToast(msg) {\n    var t = document.getElementById('ue-toast');\n    t.textContent = msg;\n    t.classList.add('show');\n    setTimeout(function() { t.classList.remove('show'); }, 2000);\n  }\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eURLエンコード\u003c/strong\u003e（パーセントエンコーディング）は、URLとして安全でない文字を \u003ccode\u003e%XX\u003c/code\u003e 形式に変換します。\u003ccode\u003eXX\u003c/code\u003e は文字のUTF-8バイト値の16進数表現です。\u003c/p\u003e","title":"URLエンコード・デコードツール"},{"content":" ↻ 情報を更新\n画面・ディスプレイ情報 画面解像度— ビューポートサイズ— デバイスピクセル比— 色深度— 向き（オリエンテーション）— タッチ対応— ブラウザ・システム情報 ブラウザ— OS— 言語— オンライン状態— Cookie有効— ハードウェアスレッド数— リフレッシュレート測定 「測定開始」をクリックするとrequestAnimationFrameを使ってディスプレイのリフレッシュレートを推定します。 — Hz リフレッシュレートを測定 ディスプレイテストパターン テストをクリックするとフルスクリーンで表示されます。画面をクリックすると終了します。\nカラーバー グレースケール ドット抜け（黒） ドット抜け（白） ドット抜け（赤） ドット抜け（緑） ドット抜け（青） 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 画面解像度 → 画面解像度ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/screen-recorder-info/","summary":"\u003cdiv id=\"si-app\"\u003e\n\u003cstyle\u003e\n#si-app {\n  font-family: 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Noto Sans JP', -apple-system, sans-serif;\n  max-width: 680px;\n  margin: 0 auto;\n  color: #1e293b;\n  box-sizing: border-box;\n}\n#si-app *, #si-app *::before, #si-app *::after {\n  box-sizing: border-box;\n}\n#si-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin: 0 0 12px 0;\n  color: #0f172a;\n}\n#si-app .si-card {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n  margin-bottom: 16px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.05);\n}\n#si-app .si-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 10px 16px;\n}\n#si-app .si-row {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n}\n#si-app .si-label {\n  font-size: 11px;\n  font-weight: 600;\n  color: #94a3b8;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#si-app .si-value {\n  font-size: 15px;\n  font-weight: 700;\n  color: #0f172a;\n  word-break: break-all;\n}\n#si-app .si-value.good { color: #059669; }\n#si-app .si-value.warn { color: #d97706; }\n#si-app .si-section-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #475569;\n  margin-bottom: 12px;\n  padding-bottom: 6px;\n  border-bottom: 1.5px solid #f1f5f9;\n}\n#si-app .si-btn-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 4px;\n}\n#si-app .si-btn {\n  padding: 8px 14px;\n  border: 1.5px solid #cbd5e1;\n  background: #f8fafc;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  color: #334155;\n  cursor: pointer;\n  transition: background 0.15s, border-color 0.15s;\n}\n#si-app .si-btn:hover {\n  background: #e0f2fe;\n  border-color: #7dd3fc;\n  color: #0369a1;\n}\n#si-app .si-refresh-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 7px 14px;\n  background: #6366f1;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  margin-bottom: 14px;\n  transition: background 0.15s;\n}\n#si-app .si-refresh-btn:hover { background: #4f46e5; }\n#si-app .si-fps-bar {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 8px;\n}\n#si-app .si-fps-track {\n  flex: 1;\n  height: 8px;\n  background: #e2e8f0;\n  border-radius: 4px;\n  overflow: hidden;\n}\n#si-app .si-fps-fill {\n  height: 100%;\n  background: #22c55e;\n  border-radius: 4px;\n  transition: width 0.5s;\n}\n#si-app .si-overlay {\n  display: none;\n  position: fixed;\n  top: 0; left: 0; right: 0; bottom: 0;\n  z-index: 999999;\n  cursor: pointer;\n}\n#si-app .si-colorbar {\n  display: flex;\n  height: 80px;\n  border-radius: 8px;\n  overflow: hidden;\n  margin-top: 8px;\n}\n#si-app .si-colorbar div { flex: 1; }\n#si-app .si-gray {\n  height: 40px;\n  border-radius: 8px;\n  margin-top: 8px;\n  background: linear-gradient(to right, #000 0%, #fff 100%);\n}\n@media (max-width: 480px) {\n  #si-app .si-grid { grid-template-columns: 1fr; }\n}\n\u003c/style\u003e\n\u003cp\u003e\u003cbutton class=\"si-refresh-btn\" onclick=\"siRefresh()\"\u003e↻ 情報を更新\u003c/button\u003e\u003c/p\u003e","title":"画面情報＆ディスプレイテスト"},{"content":"正規表現をブラウザ上でビジュアル解析。パターンを入力するとトークンごとに日本語で意味を表示し、テスト文字列のマッチをハイライト表示します。登録不要、外部ライブラリなし。\n正規表現パターン / / g i m s コピー よく使うパターン メールアドレス URL 電話番号（日本） 郵便番号 日付（漢字） 日付 YYYY-MM-DD IPアドレス 日本語（漢字・かな） ビジュアル解説 上にパターンを入力するとトークンごとの解説が表示されます。 アンカー 量指定子 エスケープ / 特殊 文字クラス グループ 選択（OR） ワイルドカード リテラル テスト文字列 マッチハイライト マッチ結果がここに表示されます。 マッチ数: — 文字数: 0 マッチ詳細・キャプチャグループ まだマッチがありません。 開発業務の経費管理もかんたんに\nfreee会計なら、クラウドサービス・開発ツールの経費精算もまとめて管理。確定申告もラクラク。無料トライアル実施中。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連ツール → 正規表現テスター · 正規表現チートシート ","permalink":"https://productivity-works.com/ja/tools/regex-visualizer/","summary":"\u003cp\u003e正規表現をブラウザ上でビジュアル解析。パターンを入力するとトークンごとに日本語で意味を表示し、テスト文字列のマッチをハイライト表示します。登録不要、外部ライブラリなし。\u003c/p\u003e\n\u003cdiv id=\"rv-app\"\u003e\n\u003cstyle\u003e\n  #rv-app *, #rv-app *::before, #rv-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\u003cp\u003e#rv-app {\nfont-family: -apple-system, BlinkMacSystemFont, \u0026ldquo;Hiragino Sans\u0026rdquo;, \u0026ldquo;Meiryo\u0026rdquo;, \u0026ldquo;Segoe UI\u0026rdquo;, sans-serif;\nfont-size: 14px;\ncolor: #1e293b;\nmax-width: 900px;\nmargin: 0 auto;\n}\u003c/p\u003e\n\u003cp\u003e#rv-app .rv-card {\nbackground: #fff;\nborder: 1px solid #e2e8f0;\nborder-radius: 10px;\npadding: 18px 20px;\nmargin-bottom: 14px;\n}\u003c/p\u003e\n\u003cp\u003e#rv-app .rv-label {\nfont-size: 11px;\nfont-weight: 700;\nletter-spacing: .06em;\ntext-transform: uppercase;\ncolor: #64748b;\nmargin-bottom: 10px;\n}\u003c/p\u003e\n\u003cp\u003e/* Pattern row */\n#rv-app .rv-pattern-row {\ndisplay: flex;\nalign-items: center;\ngap: 8px;\nflex-wrap: wrap;\n}\n#rv-app .rv-slash {\nfont-size: 22px;\ncolor: #94a3b8;\nfont-family: \u0026ldquo;Fira Mono\u0026rdquo;, \u0026ldquo;Consolas\u0026rdquo;, monospace;\nflex-shrink: 0;\n}\n#rv-app #rv-pattern {\nflex: 1;\nmin-width: 180px;\nfont-family: \u0026ldquo;Fira Mono\u0026rdquo;, \u0026ldquo;Consolas\u0026rdquo;, monospace;\nfont-size: 15px;\npadding: 8px 12px;\nborder: 1.5px solid #cbd5e1;\nborder-radius: 7px;\noutline: none;\ncolor: #1e293b;\nbackground: #f8fafc;\ntransition: border-color .15s;\n}\n#rv-app #rv-pattern:focus { border-color: #6366f1; background: #fff; }\u003c/p\u003e","title":"正規表現ビジュアライザー"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n転職年収シミュレーター【2026年版】 現在の年収と転職後の年収を入力して、手取り額の変化・税金・社会保険料の比較・生涯収入の差額を自動計算します。\n現在の年収 年収（万円） 450万円 転職後の年収 年収（万円） 550万円 年齢 22歳30歳59歳 生涯収入シミュレーション 転職で年収はどれくらい上がるのか 厚生労働省「令和5年雇用動向調査」によると、転職者の約36%が前職より賃金が増加しています。特に20代後半〜30代前半の転職では、年収50万〜100万円アップの事例が多く見られます。\nただし、年収が上がっても税金・社会保険料が増えるため、手取りベースでの比較が重要です。このシミュレーターはその差額を可視化します。\n転職で年収を上げるためのポイント 市場価値を正確に把握する — 転職サイトのスカウト機能で自分の市場価値を確認 現職での実績を数字で整理する — 売上○%増、コスト○万円削減など 複数のオファーを比較する — 1社だけでなく3社以上の選考を並行して進める 年収以外の条件も考慮する — 残業時間、福利厚生、リモートワーク制度なども含めた総合判断が重要 転職活動を効率的に進めるなら、スカウト型転職サービスの活用がおすすめです。「dodaスカウトの使い方と評判 」で詳しく解説しています。\n転職後にフリーランスを検討している方は、確定申告が必要になります。freee会計 なら開業届から確定申告までガイドに沿って完結できます。\n関連記事\n手取り計算シミュレーター 副業税金計算ツール iDeCo節税シミュレーター 住宅ローンシミュレーター 関連記事 50代転職 AI活用準備ガイド2026 未経験からの完全ロードマップ 50代転職 ChatGPTで職務経歴書を劇的に改善する5つのプロンプト dodaスカウトの使い方と評判｜返信率を上げるプロフィール設定術【2026年版】 ","permalink":"https://productivity-works.com/ja/tools/tenshoku-nenshu-simulator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"転職年収シミュレーター2026年版\"\u003e転職年収シミュレーター【2026年版】\u003c/h1\u003e\n\u003cp\u003e現在の年収と転職後の年収を入力して、\u003cstrong\u003e手取り額の変化\u003c/strong\u003e・\u003cstrong\u003e税金・社会保険料の比較\u003c/strong\u003e・\u003cstrong\u003e生涯収入の差額\u003c/strong\u003eを自動計算します。\u003c/p\u003e\n\u003cdiv id=\"tc-calc\" style=\"max-width:680px;margin:0 auto;font-family:'Noto Sans JP',sans-serif;\"\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:20px;\"\u003e\n\u003cdiv\u003e\n\u003ch3 style=\"margin:0 0 12px;color:#64748b;font-size:14px;text-align:center;\"\u003e現在の年収\u003c/h3\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:13px;\"\u003e年収（万円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"curSalary\" min=\"200\" max=\"2000\" step=\"10\" value=\"450\" oninput=\"calcTC()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"text-align:center;font-weight:bold;font-size:22px;color:#64748b;\" id=\"curSalVal\"\u003e450万円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003ch3 style=\"margin:0 0 12px;color:#2563eb;font-size:14px;text-align:center;\"\u003e転職後の年収\u003c/h3\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:13px;\"\u003e年収（万円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"newSalary\" min=\"200\" max=\"2000\" step=\"10\" value=\"550\" oninput=\"calcTC()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"text-align:center;font-weight:bold;font-size:22px;color:#2563eb;\" id=\"newSalVal\"\u003e550万円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:13px;\"\u003e年齢\u003c/label\u003e\n\u003cinput type=\"range\" id=\"age\" min=\"22\" max=\"59\" step=\"1\" value=\"30\" oninput=\"calcTC()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e22歳\u003c/span\u003e\u003cspan id=\"ageVal\" style=\"font-weight:bold;font-size:16px;color:#2563eb;\"\u003e30歳\u003c/span\u003e\u003cspan\u003e59歳\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"tcResult\" style=\"margin-top:20px;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"tcCompare\" style=\"margin-top:24px;padding:24px;border:2px solid #10b981;border-radius:12px;background:#f0fdf4;\"\u003e\u003c/div\u003e\n\u003cdiv style=\"margin-top:24px;padding:24px;border:2px solid #f59e0b;border-radius:12px;background:#fffbeb;\"\u003e\n\u003ch3 style=\"margin:0 0 12px;color:#92400e;font-size:16px;\"\u003e生涯収入シミュレーション\u003c/h3\u003e\n\u003cdiv id=\"tcLifetime\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction fmt(n){return Math.round(n).toLocaleString('ja-JP');}\n\nfunction calcTax(annual){\n  var income=annual;\n  // 給与所得控除\n  var deduction;\n  if(income\u003c=1625000) deduction=550000;\n  else if(income\u003c=1800000) deduction=income*0.4-100000;\n  else if(income\u003c=3600000) deduction=income*0.3+80000;\n  else if(income\u003c=6600000) deduction=income*0.2+440000;\n  else if(income\u003c=8500000) deduction=income*0.1+1100000;\n  else deduction=1950000;\n\n  var taxableIncome=Math.max(0,income-deduction-480000); // 基礎控除48万\n\n  // 所得税\n  var incomeTax;\n  if(taxableIncome\u003c=1950000) incomeTax=taxableIncome*0.05;\n  else if(taxableIncome\u003c=3300000) incomeTax=taxableIncome*0.10-97500;\n  else if(taxableIncome\u003c=6950000) incomeTax=taxableIncome*0.20-427500;\n  else if(taxableIncome\u003c=9000000) incomeTax=taxableIncome*0.23-636000;\n  else if(taxableIncome\u003c=18000000) incomeTax=taxableIncome*0.33-1536000;\n  else if(taxableIncome\u003c=40000000) incomeTax=taxableIncome*0.40-2796000;\n  else incomeTax=taxableIncome*0.45-4796000;\n\n  // 復興特別所得税\n  incomeTax=incomeTax*1.021;\n\n  // 住民税（概算10%）\n  var residentTax=taxableIncome*0.10+5000;\n\n  // 社会保険料（概算15%）\n  var socialIns=income*0.15;\n\n  var totalDeductions=incomeTax+residentTax+socialIns;\n  var takeHome=income-totalDeductions;\n\n  return {\n    gross:income,\n    incomeTax:Math.max(0,incomeTax),\n    residentTax:Math.max(0,residentTax),\n    socialIns:socialIns,\n    totalDeductions:totalDeductions,\n    takeHome:Math.max(0,takeHome)\n  };\n}\n\nfunction calcTC(){\n  var cur=+document.getElementById('curSalary').value;\n  var nw=+document.getElementById('newSalary').value;\n  var age=+document.getElementById('age').value;\n\n  document.getElementById('curSalVal').textContent=fmt(cur)+'万円';\n  document.getElementById('newSalVal').textContent=fmt(nw)+'万円';\n  document.getElementById('ageVal').textContent=age+'歳';\n\n  var curT=calcTax(cur*10000);\n  var newT=calcTax(nw*10000);\n  var diff=nw-cur;\n  var pct=cur\u003e0?((nw-cur)/cur*100):0;\n  var takeHomeDiff=(newT.takeHome-curT.takeHome)/10000;\n\n  // Result summary\n  var color=diff\u003e=0?'#10b981':'#ef4444';\n  var arrow=diff\u003e=0?'+':'';\n  var html='\u003cdiv style=\"text-align:center;padding:16px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e';\n  html+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003e年収変化\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:32px;font-weight:bold;color:'+color+';\"\u003e'+arrow+fmt(diff)+'\u003cspan style=\"font-size:16px;\"\u003e万円\u003c/span\u003e \u003cspan style=\"font-size:18px;\"\u003e('+arrow+pct.toFixed(1)+'%)\u003c/span\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:13px;color:#64748b;margin-top:4px;\"\u003e手取り変化: \u003cstrong style=\"color:'+color+';\"\u003e'+arrow+fmt(Math.round(takeHomeDiff))+'万円/年\u003c/strong\u003e　（月 '+arrow+fmt(Math.round(takeHomeDiff/12))+'万円）\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n  document.getElementById('tcResult').innerHTML=html;\n\n  // Comparison table\n  var chtml='\u003ch3 style=\"margin:0 0 12px;color:#166534;font-size:16px;\"\u003e税金・社会保険料の比較（年額）\u003c/h3\u003e';\n  chtml+='\u003ctable style=\"width:100%;border-collapse:collapse;font-size:14px;\"\u003e';\n  chtml+='\u003ctr style=\"border-bottom:2px solid #10b981;\"\u003e\u003cth style=\"text-align:left;padding:8px;\"\u003e項目\u003c/th\u003e\u003cth style=\"text-align:right;padding:8px;\"\u003e現在\u003c/th\u003e\u003cth style=\"text-align:right;padding:8px;\"\u003e転職後\u003c/th\u003e\u003cth style=\"text-align:right;padding:8px;\"\u003e差額\u003c/th\u003e\u003c/tr\u003e';\n\n  var rows=[\n    ['額面年収',curT.gross,newT.gross],\n    ['所得税',curT.incomeTax,newT.incomeTax],\n    ['住民税',curT.residentTax,newT.residentTax],\n    ['社会保険料',curT.socialIns,newT.socialIns],\n    ['手取り年収',curT.takeHome,newT.takeHome]\n  ];\n\n  for(var i=0;i\u003crows.length;i++){\n    var bg=i%2===0?'#fff':'#f0fdf4';\n    var bold=i===rows.length-1?'font-weight:bold;':'';\n    var d=(rows[i][2]-rows[i][1])/10000;\n    var dc=d\u003e=0?'#10b981':'#ef4444';\n    var ds=d\u003e=0?'+':'';\n    chtml+='\u003ctr style=\"background:'+bg+';'+bold+'\"\u003e';\n    chtml+='\u003ctd style=\"padding:8px;\"\u003e'+rows[i][0]+'\u003c/td\u003e';\n    chtml+='\u003ctd style=\"padding:8px;text-align:right;\"\u003e'+fmt(Math.round(rows[i][1]/10000))+'万円\u003c/td\u003e';\n    chtml+='\u003ctd style=\"padding:8px;text-align:right;\"\u003e'+fmt(Math.round(rows[i][2]/10000))+'万円\u003c/td\u003e';\n    chtml+='\u003ctd style=\"padding:8px;text-align:right;color:'+dc+';\"\u003e'+ds+fmt(Math.round(d))+'万円\u003c/td\u003e';\n    chtml+='\u003c/tr\u003e';\n  }\n  chtml+='\u003c/table\u003e';\n\n  var curRate=(curT.takeHome/curT.gross*100).toFixed(1);\n  var newRate=(newT.takeHome/newT.gross*100).toFixed(1);\n  chtml+='\u003cdiv style=\"margin-top:12px;text-align:center;font-size:13px;color:#64748b;\"\u003e手取り率: 現在 \u003cstrong\u003e'+curRate+'%\u003c/strong\u003e → 転職後 \u003cstrong\u003e'+newRate+'%\u003c/strong\u003e\u003c/div\u003e';\n  document.getElementById('tcCompare').innerHTML=chtml;\n\n  // Lifetime income\n  var yearsToRetire=60-age;\n  if(yearsToRetire\u003c1)yearsToRetire=1;\n  var curLifetime=curT.takeHome*yearsToRetire;\n  var newLifetime=newT.takeHome*yearsToRetire;\n  var lifetimeDiff=(newLifetime-curLifetime)/10000;\n  var lcolor=lifetimeDiff\u003e=0?'#10b981':'#ef4444';\n  var larrow=lifetimeDiff\u003e=0?'+':'';\n\n  var lhtml='\u003cdiv style=\"text-align:center;margin-bottom:16px;\"\u003e';\n  lhtml+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003e60歳までの手取り累計差額（'+yearsToRetire+'年間）\u003c/div\u003e';\n  lhtml+='\u003cdiv style=\"font-size:28px;font-weight:bold;color:'+lcolor+';\"\u003e'+larrow+fmt(Math.round(lifetimeDiff))+'\u003cspan style=\"font-size:14px;\"\u003e万円\u003c/span\u003e\u003c/div\u003e';\n  lhtml+='\u003c/div\u003e';\n\n  lhtml+='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;text-align:center;\"\u003e';\n  lhtml+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;\"\u003e\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e現在のまま\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;\"\u003e'+fmt(Math.round(curLifetime/10000))+'\u003cspan style=\"font-size:12px;\"\u003e万円\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  lhtml+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;\"\u003e\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e転職後\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;color:#2563eb;\"\u003e'+fmt(Math.round(newLifetime/10000))+'\u003cspan style=\"font-size:12px;\"\u003e万円\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  lhtml+='\u003c/div\u003e';\n\n  lhtml+='\u003cdiv style=\"margin-top:12px;font-size:12px;color:#92400e;text-align:center;\"\u003e※昇給・退職金・インフレ等は考慮していない概算値です。実際の金額とは異なります。\u003c/div\u003e';\n  document.getElementById('tcLifetime').innerHTML=lhtml;\n}\n\ndocument.addEventListener('DOMContentLoaded',function(){calcTC();});\ncalcTC();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"転職で年収はどれくらい上がるのか\"\u003e転職で年収はどれくらい上がるのか\u003c/h2\u003e\n\u003cp\u003e厚生労働省「令和5年雇用動向調査」によると、転職者の約36%が前職より賃金が増加しています。特に20代後半〜30代前半の転職では、年収50万〜100万円アップの事例が多く見られます。\u003c/p\u003e","title":"転職年収シミュレーター｜手取り・税金・生涯収入を比較計算【2026年版】"},{"content":" CSS transform とは？ transform プロパティを使うと、ドキュメントのレイアウトを崩さずに、要素を視覚的に移動・回転・拡縮・傾斜させることができます。トランスフォームはGPUアクセラレーション対応で、アニメーションとの相性も抜群です。\nCSS Transformジェネレーター スライダーを動かしてリアルタイムでトランスフォームを調整し、CSSをコピーボタンで即座にコードを取得できます。\nプリセット：\nフリップ チルト ズーム 3D回転 リセット 移動 (Translate) X軸移動 0px Y軸移動 0px \u0026lt;div class=\u0026quot;ctgja-section-title\u0026quot;\u0026gt;回転 (Rotate)\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-row\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;ctgja-rot\u0026quot;\u0026gt;回転角度\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;ctgja-rot\u0026quot; min=\u0026quot;-360\u0026quot; max=\u0026quot;360\u0026quot; value=\u0026quot;0\u0026quot; step=\u0026quot;1\u0026quot; oninput=\u0026quot;ctgjaUpdate()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ctgja-val\u0026quot; id=\u0026quot;ctgja-rot-val\u0026quot;\u0026gt;0deg\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-section-title\u0026quot;\u0026gt;拡縮 (Scale)\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-row\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;ctgja-sx\u0026quot;\u0026gt;X軸拡縮\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;ctgja-sx\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;3\u0026quot; value=\u0026quot;1\u0026quot; step=\u0026quot;0.01\u0026quot; oninput=\u0026quot;ctgjaUpdate()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ctgja-val\u0026quot; id=\u0026quot;ctgja-sx-val\u0026quot;\u0026gt;1.00\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-row\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;ctgja-sy\u0026quot;\u0026gt;Y軸拡縮\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;ctgja-sy\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;3\u0026quot; value=\u0026quot;1\u0026quot; step=\u0026quot;0.01\u0026quot; oninput=\u0026quot;ctgjaUpdate()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ctgja-val\u0026quot; id=\u0026quot;ctgja-sy-val\u0026quot;\u0026gt;1.00\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-section-title\u0026quot;\u0026gt;傾斜 (Skew)\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-row\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;ctgja-skx\u0026quot;\u0026gt;X軸傾斜\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;ctgja-skx\u0026quot; min=\u0026quot;-60\u0026quot; max=\u0026quot;60\u0026quot; value=\u0026quot;0\u0026quot; step=\u0026quot;1\u0026quot; oninput=\u0026quot;ctgjaUpdate()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ctgja-val\u0026quot; id=\u0026quot;ctgja-skx-val\u0026quot;\u0026gt;0deg\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-row\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;ctgja-sky\u0026quot;\u0026gt;Y軸傾斜\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;ctgja-sky\u0026quot; min=\u0026quot;-60\u0026quot; max=\u0026quot;60\u0026quot; value=\u0026quot;0\u0026quot; step=\u0026quot;1\u0026quot; oninput=\u0026quot;ctgjaUpdate()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ctgja-val\u0026quot; id=\u0026quot;ctgja-sky-val\u0026quot;\u0026gt;0deg\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-section-title\u0026quot;\u0026gt;遠近感 (Perspective)\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-perspective-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ctgja-persp-en\u0026quot; onchange=\u0026quot;ctgjaUpdate()\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;ctgja-persp-en\u0026quot;\u0026gt;遠近感を有効化\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-row\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;ctgja-persp\u0026quot;\u0026gt;奥行き距離\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;ctgja-persp\u0026quot; min=\u0026quot;100\u0026quot; max=\u0026quot;2000\u0026quot; value=\u0026quot;600\u0026quot; step=\u0026quot;10\u0026quot; oninput=\u0026quot;ctgjaUpdate()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ctgja-val\u0026quot; id=\u0026quot;ctgja-persp-val\u0026quot;\u0026gt;600px\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-preview-panel\u0026quot;\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-preview-label\u0026quot;\u0026gt;ライブプレビュー\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-preview-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ctgja-subject\u0026quot; id=\u0026quot;ctgja-subject\u0026quot;\u0026gt;ボックス\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-preview-label\u0026quot;\u0026gt;生成されたCSS\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-output\u0026quot; id=\u0026quot;ctgja-output\u0026quot;\u0026gt;\u0026lt;span class=\u0026quot;ctgja-prop\u0026quot;\u0026gt;transform\u0026lt;/span\u0026gt;: \u0026lt;span class=\u0026quot;ctgja-val-text\u0026quot;\u0026gt;none\u0026lt;/span\u0026gt;;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-btn-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;ctgja-btn ctgja-btn-primary\u0026quot; onclick=\u0026quot;ctgjaCopy()\u0026quot;\u0026gt;CSSをコピー\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;ctgja-btn ctgja-btn-secondary\u0026quot; onclick=\u0026quot;ctgjaApplyPreset('reset')\u0026quot;\u0026gt;すべてリセット\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ctgja-copy-notice\u0026quot; id=\u0026quot;ctgja-copy-notice\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; トランスフォーム関数の解説 関数 構文 説明 translate() translate(x, y) 要素をX・Y軸方向に移動 rotate() rotate(deg) 正の値で時計回り、負の値で反時計回りに回転 scale() scale(x, y) 要素を拡縮。1が原寸、-1で反転 skew() skew(xdeg, ydeg) 各軸に沿って要素を傾斜 perspective() perspective(px) 3D空間の奥行き感を設定 トランスフォームの順序に注意 複数のトランスフォームは右から左の順に適用されます。translate(50px, 0) rotate(45deg) は「まず回転してから移動」という意味になります。順序を変えると見た目が変わるので注意が必要です。\nパフォーマンスのコツ アニメーションには transform と opacity を優先的に使用してください — レイアウトと描画の処理をスキップできます。 頻繁にアニメーションする要素には will-change: transform を追加しましょう。 静的な要素への will-change の多用は GPUメモリを消費するため避けてください。 3D トランスフォームのサンプル /* 親要素で3D空間を設定 */ .container { perspective: 600px; } /* 子要素に3D変換を適用 */ .card { transform: rotateY(30deg) rotateX(10deg); transform-style: preserve-3d; backface-visibility: hidden; } 関連ツール CSSアニメーションジェネレーター — キーフレームアニメーションをビジュアルで作成 CSS Flexboxジェネレーター — フレックスレイアウトをライブプレビューで設計 CSS ボックスシャドウジェネレーター — 多層シャドウをインタラクティブに作成 freee会計で経理をもっとスマートに 個人事業主・フリーランスの方に。確定申告・請求書・経費管理をクラウドで一元化。面倒な帳簿付けを自動化して、本業に集中しましょう。\nfreeeを無料で試す ","permalink":"https://productivity-works.com/ja/tools/css-transform-generator/","summary":"\u003cdiv id=\"css-transform-gen-ja-root\"\u003e\n\u003cstyle\u003e\n#css-transform-gen-ja-root {\n  font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#css-transform-gen-ja-root *,\n#css-transform-gen-ja-root *::before,\n#css-transform-gen-ja-root *::after {\n  box-sizing: border-box;\n}\n#css-transform-gen-ja-root .ctgja-layout {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 24px;\n  margin-bottom: 24px;\n}\n@media (max-width: 640px) {\n  #css-transform-gen-ja-root .ctgja-layout {\n    grid-template-columns: 1fr;\n  }\n}\n#css-transform-gen-ja-root .ctgja-controls {\n  background: #f8f9ff;\n  border: 1px solid #dde1f0;\n  border-radius: 12px;\n  padding: 20px;\n}\n#css-transform-gen-ja-root .ctgja-preview-panel {\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n}\n#css-transform-gen-ja-root .ctgja-preview-box {\n  background: #f0f4ff;\n  border: 1px solid #dde1f0;\n  border-radius: 12px;\n  min-height: 280px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  overflow: hidden;\n  position: relative;\n}\n#css-transform-gen-ja-root .ctgja-preview-label {\n  font-size: 11px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #7b82a6;\n  margin-bottom: 12px;\n}\n#css-transform-gen-ja-root .ctgja-subject {\n  width: 100px;\n  height: 100px;\n  background: linear-gradient(135deg, #4f6ef7 0%, #7c3aed 100%);\n  border-radius: 8px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #fff;\n  font-size: 13px;\n  font-weight: 700;\n  transition: transform 0.15s ease;\n  will-change: transform;\n  user-select: none;\n}\n#css-transform-gen-ja-root .ctgja-section-title {\n  font-size: 12px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #4f6ef7;\n  margin: 16px 0 10px;\n  padding-bottom: 4px;\n  border-bottom: 1px solid #e2e6fb;\n}\n#css-transform-gen-ja-root .ctgja-section-title:first-child {\n  margin-top: 0;\n}\n#css-transform-gen-ja-root .ctgja-row {\n  display: grid;\n  grid-template-columns: 110px 1fr 58px;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 10px;\n}\n#css-transform-gen-ja-root .ctgja-row label {\n  font-size: 13px;\n  color: #3a3f5c;\n  font-weight: 500;\n}\n#css-transform-gen-ja-root .ctgja-row input[type=\"range\"] {\n  width: 100%;\n  accent-color: #4f6ef7;\n  cursor: pointer;\n}\n#css-transform-gen-ja-root .ctgja-row .ctgja-val {\n  font-size: 12px;\n  font-weight: 700;\n  color: #4f6ef7;\n  text-align: right;\n  white-space: nowrap;\n}\n#css-transform-gen-ja-root .ctgja-output {\n  background: #1a1a2e;\n  border-radius: 10px;\n  padding: 14px 16px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 13px;\n  color: #a8b4ff;\n  word-break: break-all;\n  line-height: 1.6;\n  min-height: 60px;\n  white-space: pre-wrap;\n}\n#css-transform-gen-ja-root .ctgja-output span.ctgja-prop {\n  color: #7ee8a2;\n}\n#css-transform-gen-ja-root .ctgja-output span.ctgja-val-text {\n  color: #ffd97d;\n}\n#css-transform-gen-ja-root .ctgja-btn-row {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n#css-transform-gen-ja-root .ctgja-btn {\n  padding: 9px 18px;\n  border: none;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n}\n#css-transform-gen-ja-root .ctgja-btn:active {\n  transform: scale(0.97);\n}\n#css-transform-gen-ja-root .ctgja-btn-primary {\n  background: #4f6ef7;\n  color: #fff;\n}\n#css-transform-gen-ja-root .ctgja-btn-primary:hover {\n  background: #3a57e8;\n}\n#css-transform-gen-ja-root .ctgja-btn-secondary {\n  background: #e8eaff;\n  color: #4f6ef7;\n}\n#css-transform-gen-ja-root .ctgja-btn-secondary:hover {\n  background: #d4d9ff;\n}\n#css-transform-gen-ja-root .ctgja-presets-row {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n  margin-bottom: 20px;\n}\n#css-transform-gen-ja-root .ctgja-preset-btn {\n  padding: 6px 14px;\n  border: 1.5px solid #dde1f0;\n  border-radius: 20px;\n  background: #fff;\n  font-size: 12px;\n  font-weight: 700;\n  color: #4a4f72;\n  cursor: pointer;\n  transition: border-color 0.15s, background 0.15s, color 0.15s;\n}\n#css-transform-gen-ja-root .ctgja-preset-btn:hover {\n  border-color: #4f6ef7;\n  color: #4f6ef7;\n  background: #f0f3ff;\n}\n#css-transform-gen-ja-root .ctgja-copy-notice {\n  font-size: 12px;\n  color: #22c55e;\n  font-weight: 700;\n  min-height: 18px;\n  transition: opacity 0.3s;\n}\n#css-transform-gen-ja-root .ctgja-perspective-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 10px;\n}\n#css-transform-gen-ja-root .ctgja-perspective-row input[type=\"checkbox\"] {\n  accent-color: #4f6ef7;\n  width: 15px;\n  height: 15px;\n  cursor: pointer;\n}\n#css-transform-gen-ja-root .ctgja-perspective-row label {\n  font-size: 13px;\n  color: #3a3f5c;\n  font-weight: 500;\n  cursor: pointer;\n}\n#css-transform-gen-ja-root .ctgja-freee-cta {\n  background: linear-gradient(135deg, #e8f5e9 0%, #f1f8e9 100%);\n  border: 1.5px solid #a5d6a7;\n  border-radius: 12px;\n  padding: 20px 24px;\n  margin-top: 32px;\n}\n#css-transform-gen-ja-root .ctgja-freee-cta h3 {\n  margin: 0 0 8px;\n  font-size: 16px;\n  color: #1b5e20;\n}\n#css-transform-gen-ja-root .ctgja-freee-cta p {\n  margin: 0 0 14px;\n  font-size: 14px;\n  color: #2e7d32;\n  line-height: 1.6;\n}\n#css-transform-gen-ja-root .ctgja-freee-cta a {\n  display: inline-block;\n  padding: 10px 22px;\n  background: #2e7d32;\n  color: #fff;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 700;\n  text-decoration: none;\n  transition: background 0.15s;\n}\n#css-transform-gen-ja-root .ctgja-freee-cta a:hover {\n  background: #1b5e20;\n}\n\u003c/style\u003e\n\u003ch2 id=\"css-transform-とは\"\u003eCSS \u003ccode\u003etransform\u003c/code\u003e とは？\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003etransform\u003c/code\u003e プロパティを使うと、ドキュメントのレイアウトを崩さずに、要素を視覚的に移動・回転・拡縮・傾斜させることができます。トランスフォームはGPUアクセラレーション対応で、アニメーションとの相性も抜群です。\u003c/p\u003e","title":"CSS Transformジェネレーター — ビジュアルプレイグラウンド"},{"content":" フォントサイズ変換ツール px・rem・em・pt・%・vwを即座に相互変換。基準サイズ変更・ライブプレビュー・変換表付き。\n基準フォントサイズ（Base） ルート基準サイズ (px): ブラウザ標準は16px。プロジェクトに合わせて変更してください。 単位変換 — どのフィールドにも入力できます \u0026lt;div class=\u0026quot;fs-unit-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-label\u0026quot;\u0026gt;px — ピクセル\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-input-row\u0026quot;\u0026gt; \u0026lt;input class=\u0026quot;fs-unit-input\u0026quot; id=\u0026quot;fs-px\u0026quot; type=\u0026quot;number\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;0.5\u0026quot; placeholder=\u0026quot;16\u0026quot; /\u0026gt; \u0026lt;button class=\u0026quot;fs-copy-btn\u0026quot; data-copy=\u0026quot;fs-px\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-desc\u0026quot;\u0026gt;絶対単位。画面の物理ピクセル数\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-label\u0026quot;\u0026gt;rem — ルートEM\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-input-row\u0026quot;\u0026gt; \u0026lt;input class=\u0026quot;fs-unit-input\u0026quot; id=\u0026quot;fs-rem\u0026quot; type=\u0026quot;number\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;0.0625\u0026quot; placeholder=\u0026quot;1\u0026quot; /\u0026gt; \u0026lt;button class=\u0026quot;fs-copy-btn\u0026quot; data-copy=\u0026quot;fs-rem\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-desc\u0026quot;\u0026gt;ルート要素（html）のフォントサイズ基準\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-label\u0026quot;\u0026gt;em — 親要素EM\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-input-row\u0026quot;\u0026gt; \u0026lt;input class=\u0026quot;fs-unit-input\u0026quot; id=\u0026quot;fs-em\u0026quot; type=\u0026quot;number\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;0.0625\u0026quot; placeholder=\u0026quot;1\u0026quot; /\u0026gt; \u0026lt;button class=\u0026quot;fs-copy-btn\u0026quot; data-copy=\u0026quot;fs-em\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-desc\u0026quot;\u0026gt;親要素のフォントサイズを基準とした相対単位\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-label\u0026quot;\u0026gt;pt — ポイント\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-input-row\u0026quot;\u0026gt; \u0026lt;input class=\u0026quot;fs-unit-input\u0026quot; id=\u0026quot;fs-pt\u0026quot; type=\u0026quot;number\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;0.5\u0026quot; placeholder=\u0026quot;12\u0026quot; /\u0026gt; \u0026lt;button class=\u0026quot;fs-copy-btn\u0026quot; data-copy=\u0026quot;fs-pt\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-desc\u0026quot;\u0026gt;印刷単位。1pt = 1/72インチ = 約1.333px\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-label\u0026quot;\u0026gt;% — パーセント\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-input-row\u0026quot;\u0026gt; \u0026lt;input class=\u0026quot;fs-unit-input\u0026quot; id=\u0026quot;fs-pct\u0026quot; type=\u0026quot;number\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;1\u0026quot; placeholder=\u0026quot;100\u0026quot; /\u0026gt; \u0026lt;button class=\u0026quot;fs-copy-btn\u0026quot; data-copy=\u0026quot;fs-pct\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-desc\u0026quot;\u0026gt;親/ルートフォントサイズに対する割合\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-label\u0026quot;\u0026gt;vw — ビューポート幅\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-input-row\u0026quot;\u0026gt; \u0026lt;input class=\u0026quot;fs-unit-input\u0026quot; id=\u0026quot;fs-vw\u0026quot; type=\u0026quot;number\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;0.01\u0026quot; placeholder=\u0026quot;1\u0026quot; /\u0026gt; \u0026lt;button class=\u0026quot;fs-copy-btn\u0026quot; data-copy=\u0026quot;fs-vw\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fs-unit-desc\u0026quot;\u0026gt;1vw = ビューポート幅の1%（基準1440px）\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; ライブプレビュー 素早い茶色の狐が怠惰な犬を飛び越える。The quick brown fox. 表示サイズ: 16px\n変換表 — よく使うサイズ一覧 px rem em pt % vw (1440px) 基準サイズ 16px で計算。上記で基準を変更すると自動更新されます。\n変換計算式 px → rem rem = px ÷ 基準px 例: 24px ÷ 16 = 1.5rem rem → px px = rem × 基準px 例: 1.5rem × 16 = 24px px → em em = px ÷ 親要素px 親=ルートの場合はremと同値 px → pt pt = px × 0.75 例: 16px × 0.75 = 12pt px → % % = (px ÷ 基準px) × 100 例: (16 ÷ 16) × 100 = 100% px → vw vw = (px ÷ vp幅) × 100 vp幅 = ビューポート幅（デフォルト1440px） 関連ツール タイポグラフィスケールジェネレーター CSS変数ジェネレーター フリーランス・個人事業主の方へ — freeeで経理を自動化 Web開発・デザイン案件の請求書作成・経費管理・確定申告を freee でまとめて効率化。無料プランから始められます。\nfreeeを無料で試す ※ 本ページのfreeeリンクはアフィリエイトリンクを含む場合があります（A8.net）。\n","permalink":"https://productivity-works.com/ja/tools/font-size-converter/","summary":"\u003cdiv id=\"fs-app\"\u003e\n\u003cstyle\u003e\n#fs-app *,\n#fs-app *::before,\n#fs-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#fs-app {\n  font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  color: #1a1a2e;\n  line-height: 1.7;\n  max-width: 860px;\n  margin: 0 auto;\n  padding: 0 16px;\n}\n\n/* Hero */\n#fs-app .fs-hero {\n  background: linear-gradient(135deg, #0ea5e9 0%, #6366f1 100%);\n  color: #fff;\n  border-radius: 14px;\n  padding: 36px 28px 28px;\n  margin-bottom: 24px;\n  text-align: center;\n}\n\n#fs-app .fs-hero h2 {\n  font-size: 1.65rem;\n  font-weight: 800;\n  margin-bottom: 8px;\n  letter-spacing: -0.01em;\n}\n\n#fs-app .fs-hero p {\n  font-size: 0.95rem;\n  opacity: 0.9;\n}\n\n/* Cards */\n#fs-app .fs-card {\n  background: #ffffff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 20px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.05);\n}\n\n#fs-app .fs-section-title {\n  font-size: 0.75rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  color: #0ea5e9;\n  margin-bottom: 16px;\n}\n\n/* Base font size row */\n#fs-app .fs-base-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  flex-wrap: wrap;\n}\n\n#fs-app .fs-base-row label {\n  font-size: 0.875rem;\n  font-weight: 600;\n  color: #374151;\n  white-space: nowrap;\n}\n\n#fs-app .fs-base-input {\n  width: 80px;\n  padding: 7px 10px;\n  border: 1px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 0.95rem;\n  color: #1a1a2e;\n  background: #f8fafc;\n  transition: border-color 0.15s;\n}\n\n#fs-app .fs-base-input:focus {\n  outline: none;\n  border-color: #0ea5e9;\n  background: #fff;\n}\n\n#fs-app .fs-base-note {\n  font-size: 0.8rem;\n  color: #64748b;\n}\n\n/* Converter grid */\n#fs-app .fs-converter-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  gap: 14px;\n}\n\n#fs-app .fs-unit-block {\n  background: #f8fafc;\n  border: 2px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 16px;\n  transition: border-color 0.15s, box-shadow 0.15s;\n}\n\n#fs-app .fs-unit-block:focus-within {\n  border-color: #0ea5e9;\n  box-shadow: 0 0 0 3px rgba(14,165,233,0.12);\n}\n\n#fs-app .fs-unit-label {\n  font-size: 0.72rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  color: #64748b;\n  margin-bottom: 8px;\n}\n\n#fs-app .fs-unit-input-row {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n#fs-app .fs-unit-input {\n  flex: 1;\n  min-width: 0;\n  padding: 8px 10px;\n  border: 1px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 1.05rem;\n  font-weight: 600;\n  color: #1a1a2e;\n  background: #fff;\n  transition: border-color 0.15s;\n}\n\n#fs-app .fs-unit-input:focus {\n  outline: none;\n  border-color: #0ea5e9;\n}\n\n#fs-app .fs-copy-btn {\n  flex-shrink: 0;\n  padding: 7px 10px;\n  background: #e0f2fe;\n  border: none;\n  border-radius: 7px;\n  color: #0369a1;\n  font-size: 0.78rem;\n  font-weight: 700;\n  cursor: pointer;\n  white-space: nowrap;\n  transition: background 0.15s, color 0.15s;\n}\n\n#fs-app .fs-copy-btn:hover {\n  background: #0ea5e9;\n  color: #fff;\n}\n\n#fs-app .fs-copy-btn.copied {\n  background: #22c55e;\n  color: #fff;\n}\n\n#fs-app .fs-unit-desc {\n  font-size: 0.7rem;\n  color: #94a3b8;\n  margin-top: 6px;\n}\n\n/* Live Preview */\n#fs-app .fs-preview-box {\n  border: 1px dashed #cbd5e1;\n  border-radius: 8px;\n  padding: 20px 18px;\n  min-height: 80px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: #f8fafc;\n  overflow: hidden;\n}\n\n#fs-app .fs-preview-text {\n  font-weight: 600;\n  color: #1a1a2e;\n  transition: font-size 0.2s;\n  word-break: break-word;\n  text-align: center;\n  line-height: 1.4;\n}\n\n#fs-app .fs-preview-meta {\n  font-size: 0.8rem;\n  color: #64748b;\n  margin-top: 10px;\n  text-align: center;\n}\n\n/* Conversion Table */\n#fs-app .fs-table-wrap {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n#fs-app .fs-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.875rem;\n  min-width: 560px;\n}\n\n#fs-app .fs-table thead tr {\n  background: #0ea5e9;\n  color: #fff;\n}\n\n#fs-app .fs-table thead th {\n  padding: 10px 12px;\n  font-weight: 700;\n  text-align: right;\n  letter-spacing: 0.03em;\n}\n\n#fs-app .fs-table thead th:first-child {\n  text-align: center;\n  border-radius: 8px 0 0 0;\n}\n\n#fs-app .fs-table thead th:last-child {\n  border-radius: 0 8px 0 0;\n}\n\n#fs-app .fs-table tbody tr:nth-child(odd) {\n  background: #f8fafc;\n}\n\n#fs-app .fs-table tbody tr:hover {\n  background: #e0f2fe;\n}\n\n#fs-app .fs-table tbody td {\n  padding: 9px 12px;\n  border-bottom: 1px solid #f1f5f9;\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n  color: #374151;\n}\n\n#fs-app .fs-table tbody td:first-child {\n  text-align: center;\n  font-weight: 700;\n  color: #0ea5e9;\n}\n\n#fs-app .fs-table-note {\n  font-size: 0.75rem;\n  color: #94a3b8;\n  margin-top: 8px;\n}\n\n/* Formulas */\n#fs-app .fs-formula-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n  gap: 12px;\n}\n\n#fs-app .fs-formula-item {\n  background: #f8fafc;\n  border-left: 3px solid #0ea5e9;\n  border-radius: 0 8px 8px 0;\n  padding: 12px 14px;\n}\n\n#fs-app .fs-formula-unit {\n  font-size: 0.7rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  color: #0ea5e9;\n  margin-bottom: 4px;\n}\n\n#fs-app .fs-formula-eq {\n  font-family: \"SF Mono\", \"Fira Code\", \"Consolas\", monospace;\n  font-size: 0.82rem;\n  color: #1e293b;\n  margin-bottom: 3px;\n}\n\n#fs-app .fs-formula-note {\n  font-size: 0.7rem;\n  color: #64748b;\n}\n\n/* freee CTA */\n#fs-app .fs-freee-cta {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 20px;\n  background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%);\n  border: 1.5px solid #86efac;\n  border-radius: 12px;\n  padding: 22px 24px;\n  margin-bottom: 20px;\n}\n\n#fs-app .fs-freee-cta-text h3 {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #15803d;\n  margin-bottom: 5px;\n}\n\n#fs-app .fs-freee-cta-text p {\n  font-size: 0.85rem;\n  color: #166534;\n  line-height: 1.6;\n}\n\n#fs-app .fs-freee-btn {\n  flex-shrink: 0;\n  display: inline-block;\n  padding: 11px 22px;\n  background: #16a34a;\n  color: #fff;\n  font-size: 0.88rem;\n  font-weight: 700;\n  border-radius: 8px;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: background 0.15s;\n}\n\n#fs-app .fs-freee-btn:hover {\n  background: #15803d;\n}\n\n/* Related Tools */\n#fs-app .fs-crosslinks {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-top: 4px;\n}\n\n#fs-app .fs-crosslinks a {\n  color: #0ea5e9;\n  text-decoration: none;\n  font-size: 0.85rem;\n  font-weight: 600;\n  padding: 5px 12px;\n  border: 1.5px solid #bae6fd;\n  border-radius: 20px;\n  transition: background 0.15s, color 0.15s, border-color 0.15s;\n}\n\n#fs-app .fs-crosslinks a:hover {\n  background: #0ea5e9;\n  color: #fff;\n  border-color: #0ea5e9;\n}\n\n/* Responsive */\n@media (max-width: 600px) {\n  #fs-app .fs-hero { padding: 28px 18px 22px; }\n  #fs-app .fs-hero h2 { font-size: 1.35rem; }\n  #fs-app .fs-card { padding: 18px 14px; }\n  #fs-app .fs-converter-grid { grid-template-columns: 1fr 1fr; }\n  #fs-app .fs-freee-cta { flex-direction: column; text-align: center; }\n}\n\n@media (max-width: 400px) {\n  #fs-app .fs-converter-grid { grid-template-columns: 1fr; }\n}\n\u003c/style\u003e\n\u003c!-- Hero --\u003e\n\u003cdiv class=\"fs-hero\"\u003e\n  \u003ch2\u003eフォントサイズ変換ツール\u003c/h2\u003e\n  \u003cp\u003epx・rem・em・pt・%・vwを即座に相互変換。基準サイズ変更・ライブプレビュー・変換表付き。\u003c/p\u003e","title":"フォントサイズ変換ツール"},{"content":" クレジットカード番号を入力すると、Luhnアルゴリズムで書式の正当性を検証し、カードネットワークを自動判別します。すべての処理はブラウザ内で完結し、入力データがサーバーに送信されることはありません。 カードネットワーク •••• •••• •••• •••• 有効期限 ••/•• —— カード番号 検証する クリア カードネットワーク — 桁数 — Luhn検証 — IIN / BIN — テスト用カード番号を生成 数学的に正当な番号です。実在するカード口座とは無関係で、決済には使用できません。開発・学習目的のみにご利用ください。 全ネットワークを生成 Luhnアルゴリズムの仕組み 上でカード番号を入力すると、ステップごとの計算過程を表示します。 重要なご注意： このツールは番号の書式（Luhnチェックサム）のみを検証します。実際にカードが存在するか、利用可能残高があるかは確認できません。本物のカード番号は絶対に入力しないでください。テストには上記の生成番号をご利用ください。 クレジットカードの経費管理を自動化しませんか？\nfreee会計なら、クレジットカード明細を自動取り込みして仕訳まで自動化。手入力の手間をゼロに近づけられます。 freee会計でクレジットカード明細を自動取込 ","permalink":"https://productivity-works.com/ja/tools/credit-card-validator/","summary":"\u003cdiv id=\"ccv-app\"\u003e\n\u003cstyle\u003e\n#ccv-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Noto Sans JP', 'Segoe UI', Roboto, sans-serif;\n  max-width: 760px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#ccv-app * { box-sizing: border-box; }\n\n#ccv-app .ccv-intro {\n  background: #f0f4ff;\n  border-left: 4px solid #4a6cf7;\n  padding: 14px 18px;\n  border-radius: 0 8px 8px 0;\n  margin-bottom: 28px;\n  font-size: 0.95rem;\n  color: #444;\n  line-height: 1.7;\n}\n\n/* Card Visual */\n#ccv-app .ccv-card-visual {\n  width: 340px;\n  height: 200px;\n  border-radius: 16px;\n  margin: 0 auto 28px;\n  position: relative;\n  padding: 24px 28px;\n  color: #fff;\n  background: linear-gradient(135deg, #1a1a2e 0%, #16213e 60%, #0f3460 100%);\n  box-shadow: 0 10px 40px rgba(0,0,0,0.25);\n  overflow: hidden;\n  transition: background 0.4s ease;\n}\n#ccv-app .ccv-card-visual::before {\n  content: '';\n  position: absolute;\n  top: -40px; right: -40px;\n  width: 180px; height: 180px;\n  border-radius: 50%;\n  background: rgba(255,255,255,0.05);\n}\n#ccv-app .ccv-card-visual::after {\n  content: '';\n  position: absolute;\n  bottom: -60px; right: 40px;\n  width: 200px; height: 200px;\n  border-radius: 50%;\n  background: rgba(255,255,255,0.04);\n}\n#ccv-app .ccv-card-visual.visa-card    { background: linear-gradient(135deg, #1a1f71 0%, #1565c0 100%); }\n#ccv-app .ccv-card-visual.mc-card      { background: linear-gradient(135deg, #eb001b 0%, #f79e1b 100%); }\n#ccv-app .ccv-card-visual.amex-card    { background: linear-gradient(135deg, #007b5e 0%, #00b09b 100%); }\n#ccv-app .ccv-card-visual.discover-card { background: linear-gradient(135deg, #f7941d 0%, #ffd200 100%); }\n#ccv-app .ccv-card-visual.jcb-card     { background: linear-gradient(135deg, #003087 0%, #009246 100%); }\n#ccv-app .ccv-card-visual.diners-card  { background: linear-gradient(135deg, #4a4a4a 0%, #888 100%); }\n\n#ccv-app .ccv-card-brand {\n  font-size: 1.1rem;\n  font-weight: 700;\n  letter-spacing: 2px;\n  text-transform: uppercase;\n  opacity: 0.9;\n  margin-bottom: 30px;\n}\n#ccv-app .ccv-card-number-display {\n  font-size: 1.3rem;\n  letter-spacing: 4px;\n  font-family: 'Courier New', monospace;\n  margin-bottom: 20px;\n  word-spacing: 8px;\n}\n#ccv-app .ccv-card-footer {\n  display: flex;\n  justify-content: space-between;\n  font-size: 0.75rem;\n  opacity: 0.7;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n}\n\n/* Input Area */\n#ccv-app .ccv-input-section {\n  background: #fff;\n  border: 2px solid #e0e7ff;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 20px;\n}\n#ccv-app .ccv-label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #333;\n  font-size: 0.95rem;\n}\n#ccv-app .ccv-input-row {\n  display: flex;\n  gap: 12px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n#ccv-app .ccv-number-input {\n  flex: 1;\n  min-width: 200px;\n  padding: 14px 18px;\n  font-size: 1.2rem;\n  letter-spacing: 3px;\n  font-family: 'Courier New', monospace;\n  border: 2px solid #d0d8ff;\n  border-radius: 10px;\n  outline: none;\n  transition: border-color 0.2s;\n  background: #fafbff;\n}\n#ccv-app .ccv-number-input:focus  { border-color: #4a6cf7; background: #fff; }\n#ccv-app .ccv-number-input.valid  { border-color: #22c55e; background: #f0fff4; }\n#ccv-app .ccv-number-input.invalid{ border-color: #ef4444; background: #fff5f5; }\n\n#ccv-app .ccv-btn {\n  padding: 14px 22px;\n  border: none;\n  border-radius: 10px;\n  font-size: 0.95rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.2s;\n}\n#ccv-app .ccv-btn-primary {\n  background: #4a6cf7;\n  color: #fff;\n}\n#ccv-app .ccv-btn-primary:hover { background: #3a5ce6; transform: translateY(-1px); }\n#ccv-app .ccv-btn-secondary {\n  background: #f0f4ff;\n  color: #4a6cf7;\n  border: 2px solid #d0d8ff;\n}\n#ccv-app .ccv-btn-secondary:hover { background: #e0e7ff; }\n\n/* Result Badge */\n#ccv-app .ccv-result-badge {\n  display: none;\n  align-items: center;\n  gap: 10px;\n  padding: 14px 20px;\n  border-radius: 10px;\n  font-weight: 600;\n  font-size: 1rem;\n  margin-top: 16px;\n}\n#ccv-app .ccv-result-badge.show  { display: flex; }\n#ccv-app .ccv-result-badge.valid-badge {\n  background: #f0fff4;\n  border: 2px solid #22c55e;\n  color: #15803d;\n}\n#ccv-app .ccv-result-badge.invalid-badge {\n  background: #fff5f5;\n  border: 2px solid #ef4444;\n  color: #b91c1c;\n}\n#ccv-app .ccv-result-icon { font-size: 1.4rem; }\n\n/* Card Details */\n#ccv-app .ccv-details-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n  gap: 12px;\n  margin-top: 16px;\n}\n#ccv-app .ccv-detail-box {\n  background: #f8faff;\n  border: 1px solid #e0e7ff;\n  border-radius: 10px;\n  padding: 12px 16px;\n  text-align: center;\n}\n#ccv-app .ccv-detail-label {\n  font-size: 0.72rem;\n  color: #888;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  margin-bottom: 6px;\n}\n#ccv-app .ccv-detail-value {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #1a1a2e;\n}\n\n/* Generate Section */\n#ccv-app .ccv-generate-section {\n  background: #fff;\n  border: 2px solid #e0e7ff;\n  border-radius: 12px;\n  padding: 20px 24px;\n  margin-bottom: 20px;\n}\n#ccv-app .ccv-generate-section h3 {\n  margin: 0 0 6px;\n  font-size: 1rem;\n  color: #333;\n}\n#ccv-app .ccv-generate-note {\n  font-size: 0.8rem;\n  color: #888;\n  margin-bottom: 14px;\n  line-height: 1.6;\n}\n#ccv-app .ccv-test-cards {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 12px;\n}\n#ccv-app .ccv-test-chip {\n  padding: 6px 14px;\n  background: #f0f4ff;\n  border: 1px solid #d0d8ff;\n  border-radius: 20px;\n  font-size: 0.85rem;\n  font-family: 'Courier New', monospace;\n  cursor: pointer;\n  transition: all 0.15s;\n  color: #4a6cf7;\n}\n#ccv-app .ccv-test-chip:hover { background: #e0e7ff; transform: translateY(-1px); }\n#ccv-app .ccv-test-chip-label {\n  font-size: 0.75rem;\n  color: #888;\n  font-family: sans-serif;\n  margin-right: 4px;\n}\n\n/* Luhn Explanation */\n#ccv-app .ccv-luhn-section {\n  background: #fff;\n  border: 2px solid #e0e7ff;\n  border-radius: 12px;\n  padding: 20px 24px;\n  margin-bottom: 20px;\n}\n#ccv-app .ccv-luhn-section h3 {\n  margin: 0 0 12px;\n  font-size: 1rem;\n  color: #333;\n}\n#ccv-app .ccv-luhn-steps { display: none; }\n#ccv-app .ccv-luhn-steps.show { display: block; }\n#ccv-app .ccv-luhn-step {\n  background: #f8faff;\n  border-radius: 8px;\n  padding: 12px 16px;\n  margin-bottom: 10px;\n  font-size: 0.88rem;\n  border-left: 3px solid #4a6cf7;\n  line-height: 1.6;\n}\n#ccv-app .ccv-luhn-step-title {\n  font-weight: 700;\n  color: #4a6cf7;\n  margin-bottom: 4px;\n}\n#ccv-app .ccv-digit-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 4px;\n  margin-top: 6px;\n}\n#ccv-app .ccv-digit-cell {\n  width: 32px;\n  height: 32px;\n  border-radius: 6px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 0.8rem;\n  font-weight: 600;\n  font-family: 'Courier New', monospace;\n}\n#ccv-app .ccv-digit-cell.orig    { background: #e0e7ff; color: #4a6cf7; }\n#ccv-app .ccv-digit-cell.doubled { background: #fef3c7; color: #92400e; }\n#ccv-app .ccv-digit-cell.check   { background: #dcfce7; color: #15803d; }\n\n#ccv-app .ccv-luhn-placeholder {\n  color: #aaa;\n  font-size: 0.88rem;\n  font-style: italic;\n}\n\n/* Disclaimer */\n#ccv-app .ccv-disclaimer {\n  background: #fffbeb;\n  border: 1px solid #fcd34d;\n  border-radius: 10px;\n  padding: 14px 18px;\n  font-size: 0.85rem;\n  color: #78350f;\n  margin-bottom: 24px;\n  line-height: 1.7;\n}\n#ccv-app .ccv-disclaimer strong { color: #92400e; }\n\n/* freee CTA */\n#ccv-app .ccv-freee-cta {\n  background: linear-gradient(135deg, #e8f4fd 0%, #dbeafe 100%);\n  border: 2px solid #93c5fd;\n  border-radius: 12px;\n  padding: 20px 24px;\n  margin-bottom: 24px;\n}\n#ccv-app .ccv-freee-cta p {\n  margin: 0 0 10px;\n  font-size: 0.92rem;\n  color: #1e40af;\n  font-weight: 600;\n}\n#ccv-app .ccv-freee-cta small {\n  display: block;\n  color: #64748b;\n  font-size: 0.8rem;\n  margin-bottom: 12px;\n  line-height: 1.6;\n}\n#ccv-app .ccv-freee-btn {\n  display: inline-block;\n  background: #2563eb;\n  color: #fff;\n  padding: 10px 20px;\n  border-radius: 8px;\n  font-size: 0.9rem;\n  font-weight: 700;\n  text-decoration: none;\n  transition: background 0.2s;\n}\n#ccv-app .ccv-freee-btn:hover { background: #1d4ed8; text-decoration: none; color: #fff; }\n\n@media (max-width: 480px) {\n  #ccv-app .ccv-card-visual { width: 100%; }\n  #ccv-app .ccv-input-row { flex-direction: column; align-items: stretch; }\n  #ccv-app .ccv-btn { width: 100%; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"ccv-intro\"\u003e\nクレジットカード番号を入力すると、Luhnアルゴリズムで書式の正当性を検証し、カードネットワークを自動判別します。すべての処理はブラウザ内で完結し、入力データがサーバーに送信されることはありません。\n\u003c/div\u003e\n\u003c!-- カードビジュアル --\u003e\n\u003cdiv class=\"ccv-card-visual\" id=\"ccvCardVisual\"\u003e\n  \u003cdiv class=\"ccv-card-brand\" id=\"ccvCardBrand\"\u003eカードネットワーク\u003c/div\u003e\n  \u003cdiv class=\"ccv-card-number-display\" id=\"ccvCardDisplay\"\u003e•••• •••• •••• ••••\u003c/div\u003e\n  \u003cdiv class=\"ccv-card-footer\"\u003e\n    \u003cspan\u003e有効期限 ••/••\u003c/span\u003e\n    \u003cspan id=\"ccvCardFooterBrand\"\u003e——\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 入力エリア --\u003e\n\u003cdiv class=\"ccv-input-section\"\u003e\n  \u003clabel class=\"ccv-label\" for=\"ccvInput\"\u003eカード番号\u003c/label\u003e\n  \u003cdiv class=\"ccv-input-row\"\u003e\n    \u003cinput\n      type=\"text\"\n      id=\"ccvInput\"\n      class=\"ccv-number-input\"\n      placeholder=\"4111 1111 1111 1111\"\n      maxlength=\"23\"\n      inputmode=\"numeric\"\n      autocomplete=\"off\"\n    /\u003e\n    \u003cbutton class=\"ccv-btn ccv-btn-primary\" onclick=\"ccvValidate()\"\u003e検証する\u003c/button\u003e\n    \u003cbutton class=\"ccv-btn ccv-btn-secondary\" onclick=\"ccvClear()\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ccv-result-badge\" id=\"ccvResultBadge\"\u003e\n    \u003cspan class=\"ccv-result-icon\" id=\"ccvResultIcon\"\u003e\u003c/span\u003e\n    \u003cspan id=\"ccvResultText\"\u003e\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ccv-details-grid\" id=\"ccvDetailsGrid\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"ccv-detail-box\"\u003e\n      \u003cdiv class=\"ccv-detail-label\"\u003eカードネットワーク\u003c/div\u003e\n      \u003cdiv class=\"ccv-detail-value\" id=\"ccvDetailNetwork\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ccv-detail-box\"\u003e\n      \u003cdiv class=\"ccv-detail-label\"\u003e桁数\u003c/div\u003e\n      \u003cdiv class=\"ccv-detail-value\" id=\"ccvDetailLength\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ccv-detail-box\"\u003e\n      \u003cdiv class=\"ccv-detail-label\"\u003eLuhn検証\u003c/div\u003e\n      \u003cdiv class=\"ccv-detail-value\" id=\"ccvDetailLuhn\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ccv-detail-box\"\u003e\n      \u003cdiv class=\"ccv-detail-label\"\u003eIIN / BIN\u003c/div\u003e\n      \u003cdiv class=\"ccv-detail-value\" id=\"ccvDetailBin\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- テスト番号の生成 --\u003e\n\u003cdiv class=\"ccv-generate-section\"\u003e\n  \u003ch3\u003eテスト用カード番号を生成\u003c/h3\u003e\n  \u003cdiv class=\"ccv-generate-note\"\u003e数学的に正当な番号です。実在するカード口座とは無関係で、決済には使用できません。開発・学習目的のみにご利用ください。\u003c/div\u003e\n  \u003cdiv style=\"display:flex; flex-wrap:wrap; gap:10px;\"\u003e\n    \u003cbutton class=\"ccv-btn ccv-btn-secondary\" onclick=\"ccvGenerateAll()\"\u003e全ネットワークを生成\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ccv-test-cards\" id=\"ccvTestCards\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Luhnアルゴリズム解説 --\u003e\n\u003cdiv class=\"ccv-luhn-section\"\u003e\n  \u003ch3\u003eLuhnアルゴリズムの仕組み\u003c/h3\u003e\n  \u003cdiv class=\"ccv-luhn-placeholder\" id=\"ccvLuhnPlaceholder\"\u003e上でカード番号を入力すると、ステップごとの計算過程を表示します。\u003c/div\u003e\n  \u003cdiv class=\"ccv-luhn-steps\" id=\"ccvLuhnSteps\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 注意事項 --\u003e\n\u003cdiv class=\"ccv-disclaimer\"\u003e\n  \u003cstrong\u003e重要なご注意：\u003c/strong\u003e このツールは番号の書式（Luhnチェックサム）のみを検証します。実際にカードが存在するか、利用可能残高があるかは確認できません。本物のカード番号は絶対に入力しないでください。テストには上記の生成番号をご利用ください。\n\u003c/div\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv class=\"ccv-freee-cta\"\u003e\n  \u003cp\u003eクレジットカードの経費管理を自動化しませんか？\u003c/p\u003e","title":"クレジットカード番号検証ツール - Luhnアルゴリズムチェッカー"},{"content":"老後の資産をどう準備するか、具体的な数字で確認できる無料ツールです。公的年金（国民年金・厚生年金）と自分の積立を合わせて、毎月の収支や資産の持続年数をグラフ付きでシミュレーションできます。\nプリセットシナリオ 安定型 バランス型 積極型 基本情報 現在の年齢 歳 退職年齢 歳 現在の貯蓄額 万円 毎月の積立額 万円/月 予想年間利回り % 予想インフレ率 % 希望する毎月の生活費 万円/月 想定寿命 歳 公的年金 国民年金（基礎年金） 加入月数 月（最大480） 約 65,000 円/月 厚生年金 平均月収 万円 加入月数 月（35年=420） 約 67,000 円/月 シミュレーション開始\n資産推移（5年ごと） 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 手取り額を計算 → 手取り計算ツール 家計を見直す → 50/30/20 家計バランス計算 複利を計算 → 複利計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/pension-simulator/","summary":"\u003cp\u003e老後の資産をどう準備するか、具体的な数字で確認できる無料ツールです。公的年金（国民年金・厚生年金）と自分の積立を合わせて、毎月の収支や資産の持続年数をグラフ付きでシミュレーションできます。\u003c/p\u003e\n\u003cdiv id=\"ps-app\"\u003e\n\u003cstyle\u003e\n#ps-app {\n  font-family: system-ui, -apple-system, sans-serif;\n  color: #1e293b;\n  max-width: 780px;\n  margin: 0 auto;\n  padding: 0 4px;\n  box-sizing: border-box;\n}\n#ps-app *, #ps-app *::before, #ps-app *::after {\n  box-sizing: border-box;\n}\n#ps-app h2 {\n  font-size: 17px;\n  font-weight: 700;\n  color: #1e293b;\n  margin: 20px 0 12px;\n  padding-bottom: 6px;\n  border-bottom: 2px solid #cbd5e1;\n}\n#ps-app .ps-section {\n  background: #f8fafc;\n  border: 1px solid #cbd5e1;\n  border-radius: 10px;\n  padding: 18px 20px;\n  margin-bottom: 18px;\n}\n#ps-app .ps-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n  gap: 14px;\n}\n#ps-app .ps-field {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n#ps-app .ps-field label {\n  font-size: 13px;\n  color: #475569;\n  font-weight: 600;\n}\n#ps-app .ps-field input[type=\"number\"] {\n  padding: 8px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 15px;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.15s;\n  width: 100%;\n}\n#ps-app .ps-field input[type=\"number\"]:focus {\n  outline: none;\n  border-color: #3b82f6;\n}\n#ps-app .ps-field .ps-hint {\n  font-size: 11px;\n  color: #94a3b8;\n}\n#ps-app .ps-pension-row {\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n  gap: 12px;\n  padding: 10px 0;\n  border-bottom: 1px solid #e2e8f0;\n}\n#ps-app .ps-pension-row:last-child {\n  border-bottom: none;\n}\n#ps-app .ps-pension-row label.ps-check-label {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 14px;\n  font-weight: 700;\n  color: #1e293b;\n  min-width: 140px;\n  cursor: pointer;\n}\n#ps-app .ps-pension-row input[type=\"checkbox\"] {\n  width: 17px;\n  height: 17px;\n  accent-color: #3b82f6;\n  cursor: pointer;\n}\n#ps-app .ps-pension-inputs {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  flex: 1;\n}\n#ps-app .ps-pension-inputs .ps-field {\n  min-width: 130px;\n  max-width: 200px;\n}\n#ps-app .ps-pension-est {\n  font-size: 12px;\n  color: #0369a1;\n  background: #e0f2fe;\n  border-radius: 6px;\n  padding: 4px 10px;\n  font-weight: 600;\n  white-space: nowrap;\n  align-self: center;\n}\n#ps-app .ps-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 16px;\n}\n#ps-app .ps-preset-btn {\n  padding: 7px 18px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 20px;\n  background: #fff;\n  color: #475569;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#ps-app .ps-preset-btn:hover {\n  background: #f1f5f9;\n  border-color: #94a3b8;\n  color: #1e293b;\n}\n#ps-app .ps-run-btn {\n  display: block;\n  width: 100%;\n  padding: 14px;\n  background: #1e40af;\n  color: #fff;\n  font-size: 16px;\n  font-weight: 700;\n  border: none;\n  border-radius: 9px;\n  cursor: pointer;\n  transition: background 0.15s;\n  margin-bottom: 24px;\n}\n#ps-app .ps-run-btn:hover {\n  background: #1d4ed8;\n}\n#ps-app .ps-results {\n  display: none;\n}\n#ps-app .ps-results.visible {\n  display: block;\n}\n#ps-app .ps-cards {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));\n  gap: 12px;\n  margin-bottom: 20px;\n}\n#ps-app .ps-card {\n  background: #fff;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 10px;\n  padding: 14px 16px;\n  text-align: center;\n}\n#ps-app .ps-card .ps-card-label {\n  font-size: 12px;\n  color: #64748b;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n#ps-app .ps-card .ps-card-value {\n  font-size: 22px;\n  font-weight: 800;\n  color: #1e293b;\n  line-height: 1.1;\n}\n#ps-app .ps-card .ps-card-unit {\n  font-size: 12px;\n  color: #94a3b8;\n  font-weight: 500;\n}\n#ps-app .ps-card.green { border-color: #86efac; background: #f0fdf4; }\n#ps-app .ps-card.green .ps-card-value { color: #16a34a; }\n#ps-app .ps-card.orange { border-color: #fdba74; background: #fff7ed; }\n#ps-app .ps-card.orange .ps-card-value { color: #ea580c; }\n#ps-app .ps-card.red { border-color: #fca5a5; background: #fef2f2; }\n#ps-app .ps-card.red .ps-card-value { color: #dc2626; }\n#ps-app .ps-status-bar {\n  padding: 12px 16px;\n  border-radius: 9px;\n  font-size: 14px;\n  font-weight: 700;\n  margin-bottom: 20px;\n  text-align: center;\n}\n#ps-app .ps-status-bar.green { background: #dcfce7; color: #15803d; }\n#ps-app .ps-status-bar.orange { background: #ffedd5; color: #c2410c; }\n#ps-app .ps-status-bar.red { background: #fee2e2; color: #b91c1c; }\n#ps-app .ps-chart-wrap {\n  background: #fff;\n  border: 1px solid #cbd5e1;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 20px;\n  overflow: hidden;\n}\n#ps-app .ps-chart-title {\n  font-size: 14px;\n  font-weight: 700;\n  color: #475569;\n  margin-bottom: 10px;\n  text-align: center;\n}\n#ps-app canvas#ps-chart {\n  width: 100%;\n  height: auto;\n  display: block;\n}\n#ps-app .ps-needed {\n  background: #f8fafc;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 9px;\n  padding: 14px 18px;\n  font-size: 14px;\n  color: #1e293b;\n  margin-bottom: 20px;\n}\n#ps-app .ps-needed span {\n  font-weight: 800;\n  color: #1e40af;\n  font-size: 18px;\n}\n\u003c/style\u003e\n\u003cdiv class=\"ps-section\"\u003e\n  \u003ch2\u003eプリセットシナリオ\u003c/h2\u003e\n  \u003cdiv class=\"ps-presets\"\u003e\n    \u003cbutton class=\"ps-preset-btn\" onclick=\"psApplyPreset('stable')\"\u003e安定型\u003c/button\u003e\n    \u003cbutton class=\"ps-preset-btn\" onclick=\"psApplyPreset('balance')\"\u003eバランス型\u003c/button\u003e\n    \u003cbutton class=\"ps-preset-btn\" onclick=\"psApplyPreset('active')\"\u003e積極型\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ps-section\"\u003e\n  \u003ch2\u003e基本情報\u003c/h2\u003e\n  \u003cdiv class=\"ps-grid\"\u003e\n    \u003cdiv class=\"ps-field\"\u003e\n      \u003clabel for=\"ps-age\"\u003e現在の年齢\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"ps-age\" value=\"30\" min=\"18\" max=\"70\"\u003e\n      \u003cspan class=\"ps-hint\"\u003e歳\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ps-field\"\u003e\n      \u003clabel for=\"ps-retire-age\"\u003e退職年齢\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"ps-retire-age\" value=\"65\" min=\"50\" max=\"75\"\u003e\n      \u003cspan class=\"ps-hint\"\u003e歳\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ps-field\"\u003e\n      \u003clabel for=\"ps-savings\"\u003e現在の貯蓄額\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"ps-savings\" value=\"500\" min=\"0\"\u003e\n      \u003cspan class=\"ps-hint\"\u003e万円\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ps-field\"\u003e\n      \u003clabel for=\"ps-monthly\"\u003e毎月の積立額\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"ps-monthly\" value=\"3\" min=\"0\" step=\"0.5\"\u003e\n      \u003cspan class=\"ps-hint\"\u003e万円/月\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ps-field\"\u003e\n      \u003clabel for=\"ps-return\"\u003e予想年間利回り\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"ps-return\" value=\"5\" min=\"0\" max=\"20\" step=\"0.1\"\u003e\n      \u003cspan class=\"ps-hint\"\u003e%\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ps-field\"\u003e\n      \u003clabel for=\"ps-inflation\"\u003e予想インフレ率\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"ps-inflation\" value=\"2\" min=\"0\" max=\"10\" step=\"0.1\"\u003e\n      \u003cspan class=\"ps-hint\"\u003e%\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ps-field\"\u003e\n      \u003clabel for=\"ps-living\"\u003e希望する毎月の生活費\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"ps-living\" value=\"25\" min=\"1\" step=\"0.5\"\u003e\n      \u003cspan class=\"ps-hint\"\u003e万円/月\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ps-field\"\u003e\n      \u003clabel for=\"ps-lifespan\"\u003e想定寿命\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"ps-lifespan\" value=\"90\" min=\"70\" max=\"110\"\u003e\n      \u003cspan class=\"ps-hint\"\u003e歳\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ps-section\"\u003e\n  \u003ch2\u003e公的年金\u003c/h2\u003e\n  \u003cdiv class=\"ps-pension-row\"\u003e\n    \u003clabel class=\"ps-check-label\"\u003e\n      \u003cinput type=\"checkbox\" id=\"ps-kokumin\" checked\u003e\n      国民年金（基礎年金）\n    \u003c/label\u003e\n    \u003cdiv class=\"ps-pension-inputs\"\u003e\n      \u003cdiv class=\"ps-field\"\u003e\n        \u003clabel for=\"ps-kokumin-months\"\u003e加入月数\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"ps-kokumin-months\" value=\"480\" min=\"0\" max=\"480\"\u003e\n        \u003cspan class=\"ps-hint\"\u003e月（最大480）\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ps-pension-est\" id=\"ps-kokumin-est\"\u003e約 65,000 円/月\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ps-pension-row\"\u003e\n    \u003clabel class=\"ps-check-label\"\u003e\n      \u003cinput type=\"checkbox\" id=\"ps-kousei\" checked\u003e\n      厚生年金\n    \u003c/label\u003e\n    \u003cdiv class=\"ps-pension-inputs\"\u003e\n      \u003cdiv class=\"ps-field\"\u003e\n        \u003clabel for=\"ps-kousei-salary\"\u003e平均月収\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"ps-kousei-salary\" value=\"35\" min=\"0\" step=\"1\"\u003e\n        \u003cspan class=\"ps-hint\"\u003e万円\u003c/span\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"ps-field\"\u003e\n        \u003clabel for=\"ps-kousei-months\"\u003e加入月数\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"ps-kousei-months\" value=\"420\" min=\"0\"\u003e\n        \u003cspan class=\"ps-hint\"\u003e月（35年=420）\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ps-pension-est\" id=\"ps-kousei-est\"\u003e約 67,000 円/月\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003cbutton class=\"ps-run-btn\" onclick=\"psRun()\"\u003eシミュレーション開始\u003c/button\u003e\u003c/p\u003e","title":"年金シミュレーター｜将来の受給額を年齢・加入期間から自動計算【2026年版】"},{"content":"ブラウザだけで動作するCSVエディター。貼り付けまたはファイルアップロードでインポートし、セルを直接編集、行・列の追加削除、ソート、フィルタリング、CSVエクスポートまで一括対応。サーバー送信なし・外部ライブラリなし。\nCSVをインポート 区切り文字: カンマ (,)タブ (\\t)セミコロン (;)パイプ (|) 1行目を見出しにする 貼り付けからインポート \u0026#128196; CSVファイルをアップロード サンプルを読み込む + 行を追加 + 列を追加 全消去 データがありません。 CSVをエクスポート CSV生成 クリップボードにコピー CSVをダウンロード 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール JSON⇔CSV変換ツール Markdownテーブル生成 関連ツール JSON⇔CSV変換 → JSON⇔CSV変換ツール Markdownテーブル → Markdownテーブル生成 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 AIでExcel作業を自動化する方法【マクロ不要で誰でもできる】 Excel関数よく使うもの一覧【2026年版・コピペ即使える】仕事で役立つ厳選50選 ","permalink":"https://productivity-works.com/ja/tools/csv-editor/","summary":"\u003cp\u003eブラウザだけで動作するCSVエディター。貼り付けまたはファイルアップロードでインポートし、セルを直接編集、行・列の追加削除、ソート、フィルタリング、CSVエクスポートまで一括対応。サーバー送信なし・外部ライブラリなし。\u003c/p\u003e\n\u003cstyle\u003e\n#csv-app*,#csv-app*::before,#csv-app*::after{box-sizing:border-box;margin:0;padding:0}\n#csv-app{font-family:-apple-system,BlinkMacSystemFont,'Hiragino Kaku Gothic ProN','Hiragino Sans','Yu Gothic',Meiryo,sans-serif;font-size:15px;color:#1f2937;line-height:1.6;max-width:980px;margin:1.5rem auto}\n#csv-app h2{font-size:.95rem;font-weight:700;color:#111827;margin-bottom:.45rem}\n#csv-app .ca-toolbar{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;background:#f9fafb;border:1px solid #e5e7eb;border-radius:9px;padding:.65rem .9rem;margin-bottom:.9rem}\n#csv-app .ca-btn{padding:.38rem .85rem;border:none;border-radius:6px;font-size:.82rem;font-weight:600;cursor:pointer;transition:background .13s,opacity .13s;white-space:nowrap}\n#csv-app .ca-btn:disabled{opacity:.38;cursor:not-allowed}\n#csv-app .ca-btn-blue{background:#2563eb;color:#fff}\n#csv-app .ca-btn-blue:hover:not(:disabled){background:#1d4ed8}\n#csv-app .ca-btn-green{background:#059669;color:#fff}\n#csv-app .ca-btn-green:hover:not(:disabled){background:#047857}\n#csv-app .ca-btn-red{background:#ef4444;color:#fff}\n#csv-app .ca-btn-red:hover:not(:disabled){background:#dc2626}\n#csv-app .ca-btn-gray{background:#e5e7eb;color:#374151}\n#csv-app .ca-btn-gray:hover:not(:disabled){background:#d1d5db}\n#csv-app .ca-btn-orange{background:#f59e0b;color:#fff}\n#csv-app .ca-btn-orange:hover:not(:disabled){background:#d97706}\n#csv-app .ca-sep{width:1px;height:24px;background:#d1d5db;margin:0 .15rem}\n#csv-app .ca-search{padding:.36rem .7rem;border:1.5px solid #d1d5db;border-radius:6px;font-size:.82rem;color:#374151;outline:none;width:200px;transition:border-color .13s}\n#csv-app .ca-search:focus{border-color:#2563eb;box-shadow:0 0 0 3px rgba(37,99,235,.1)}\n#csv-app .ca-import-area{display:flex;flex-direction:column;gap:.65rem;margin-bottom:1rem}\n#csv-app .ca-import-row{display:flex;flex-wrap:wrap;gap:.5rem;align-items:flex-start}\n#csv-app textarea.ca-paste{width:100%;height:140px;padding:.6rem .75rem;border:1.5px solid #d1d5db;border-radius:8px;font-family:'SFMono-Regular',Consolas,'Liberation Mono',Menlo,monospace;font-size:.78rem;line-height:1.55;color:#1f2937;background:#fff;resize:vertical;outline:none;transition:border-color .13s}\n#csv-app textarea.ca-paste:focus{border-color:#2563eb;box-shadow:0 0 0 3px rgba(37,99,235,.1)}\n#csv-app .ca-file-label{display:inline-flex;align-items:center;gap:.35rem;padding:.38rem .85rem;background:#f3f4f6;border:1.5px dashed #9ca3af;border-radius:7px;font-size:.82rem;font-weight:600;color:#4b5563;cursor:pointer;transition:background .13s,border-color .13s}\n#csv-app .ca-file-label:hover{background:#e5e7eb;border-color:#6b7280}\n#csv-app input[type=file].ca-file-input{display:none}\n#csv-app .ca-opt-row{display:flex;flex-wrap:wrap;gap:.65rem 1.2rem;align-items:center;font-size:.8rem;color:#4b5563}\n#csv-app .ca-opt-row label{display:flex;align-items:center;gap:.3rem;cursor:pointer;user-select:none}\n#csv-app .ca-opt-row select{padding:.25rem .45rem;border:1px solid #d1d5db;border-radius:5px;font-size:.8rem;color:#374151;background:#fff;cursor:pointer}\n#csv-app .ca-opt-row input[type=checkbox]{width:14px;height:14px;accent-color:#2563eb;cursor:pointer}\n#csv-app .ca-table-wrap{overflow:auto;border:1.5px solid #d1d5db;border-radius:10px;max-height:480px;margin-bottom:.75rem;position:relative}\n#csv-app .ca-table-wrap table{border-collapse:collapse;font-size:.8rem;min-width:100%;table-layout:auto}\n#csv-app .ca-table-wrap thead{position:sticky;top:0;z-index:10}\n#csv-app .ca-table-wrap th.ca-th-num{background:#f3f4f6;color:#6b7280;font-weight:600;padding:.38rem .55rem;border-bottom:2px solid #d1d5db;border-right:1px solid #e5e7eb;min-width:38px;text-align:center;position:sticky;left:0;z-index:12}\n#csv-app .ca-table-wrap th.ca-th-col{background:#eff6ff;color:#1e3a8a;font-weight:700;padding:.38rem .5rem;border-bottom:2px solid #bfdbfe;border-right:1px solid #dbeafe;white-space:nowrap;cursor:default;min-width:90px}\n#csv-app .ca-table-wrap th.ca-th-col .ca-th-inner{display:flex;align-items:center;gap:0;min-height:26px}\n#csv-app .ca-table-wrap th.ca-th-col .ca-th-name{flex:1;outline:none;border:none;background:transparent;font:inherit;font-weight:700;color:#1e3a8a;cursor:text;min-width:60px;padding:0 2px}\n#csv-app .ca-table-wrap th.ca-th-col .ca-sort-btn{background:none;border:none;padding:2px 3px;cursor:pointer;font-size:.75rem;color:#6b7280;line-height:1;border-radius:3px;flex-shrink:0}\n#csv-app .ca-table-wrap th.ca-th-col .ca-sort-btn:hover{background:#dbeafe;color:#1d4ed8}\n#csv-app .ca-table-wrap th.ca-th-col .ca-sort-btn.ca-sort-active{color:#2563eb}\n#csv-app .ca-table-wrap th.ca-th-col .ca-del-col-btn{background:none;border:none;padding:2px 3px;cursor:pointer;font-size:.7rem;color:#9ca3af;line-height:1;border-radius:3px;flex-shrink:0;opacity:0;transition:opacity .12s}\n#csv-app .ca-table-wrap th.ca-th-col:hover .ca-del-col-btn{opacity:1}\n#csv-app .ca-table-wrap th.ca-th-col .ca-del-col-btn:hover{background:#fee2e2;color:#dc2626}\n#csv-app .ca-table-wrap td.ca-td-num{background:#f9fafb;color:#9ca3af;font-size:.72rem;text-align:center;padding:.3rem .4rem;border-bottom:1px solid #f3f4f6;border-right:1px solid #e5e7eb;min-width:38px;position:sticky;left:0;z-index:2}\n#csv-app .ca-table-wrap td.ca-td-cell{padding:0;border-bottom:1px solid #f3f4f6;border-right:1px solid #f3f4f6}\n#csv-app .ca-table-wrap td.ca-td-cell input{display:block;width:100%;height:100%;padding:.32rem .55rem;border:none;outline:none;background:transparent;font-family:inherit;font-size:.8rem;color:#1f2937;min-height:30px}\n#csv-app .ca-table-wrap td.ca-td-cell input:focus{background:#eff6ff;box-shadow:inset 0 0 0 2px #2563eb}\n#csv-app .ca-table-wrap tr:nth-child(even) td{background:#f9fafb}\n#csv-app .ca-table-wrap tr:nth-child(even) td.ca-td-num{background:#f3f4f6}\n#csv-app .ca-table-wrap tr:nth-child(even) td.ca-td-cell input{background:transparent}\n#csv-app .ca-table-wrap tr:nth-child(even) td.ca-td-cell input:focus{background:#eff6ff}\n#csv-app .ca-table-wrap td.ca-td-del{padding:.3rem .35rem;border-bottom:1px solid #f3f4f6;text-align:center;vertical-align:middle}\n#csv-app .ca-table-wrap td.ca-td-del button{background:none;border:none;cursor:pointer;color:#d1d5db;font-size:.85rem;line-height:1;border-radius:4px;padding:2px 5px;transition:color .12s,background .12s}\n#csv-app .ca-table-wrap td.ca-td-del button:hover{color:#ef4444;background:#fee2e2}\n#csv-app .ca-table-wrap th.ca-th-del{background:#f3f4f6;border-bottom:2px solid #d1d5db;border-right:1px solid #e5e7eb;padding:.38rem .35rem;min-width:32px}\n#csv-app .ca-status{display:flex;justify-content:space-between;align-items:center;font-size:.78rem;color:#6b7280;margin-bottom:.5rem;flex-wrap:wrap;gap:.3rem}\n#csv-app .ca-status .ca-filtered-note{color:#d97706;font-weight:600}\n#csv-app .ca-msg{font-size:.8rem;padding:.3rem .65rem;border-radius:5px;margin-bottom:.5rem;display:none}\n#csv-app .ca-msg.err{background:#fef2f2;color:#dc2626;border:1px solid #fca5a5;display:block}\n#csv-app .ca-msg.ok{background:#ecfdf5;color:#059669;border:1px solid #6ee7b7;display:block}\n#csv-app .ca-export-wrap{display:flex;flex-direction:column;gap:.5rem}\n#csv-app .ca-export-row{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}\n#csv-app textarea.ca-export-ta{width:100%;height:120px;padding:.55rem .7rem;border:1.5px solid #d1d5db;border-radius:8px;font-family:'SFMono-Regular',Consolas,'Liberation Mono',Menlo,monospace;font-size:.76rem;line-height:1.5;color:#374151;background:#f8fafc;resize:vertical;outline:none}\n#csv-app .ca-empty{text-align:center;padding:2.5rem 1rem;color:#9ca3af;font-size:.88rem}\n#csv-app .ca-related{background:#f8fafc;border:1.5px solid #e5e7eb;border-radius:10px;padding:1rem 1.2rem;margin-top:1.6rem}\n#csv-app .ca-related h3{font-size:.9rem;font-weight:700;margin-bottom:.6rem;color:#374151}\n#csv-app .ca-related-links{display:flex;flex-wrap:wrap;gap:.45rem}\n#csv-app .ca-related-links a{display:inline-block;padding:.32rem .8rem;background:#eff6ff;color:#1d4ed8;border:1px solid #bfdbfe;border-radius:6px;font-size:.8rem;font-weight:600;text-decoration:none;transition:background .13s}\n#csv-app .ca-related-links a:hover{background:#dbeafe}\n@media(max-width:640px){#csv-app .ca-search{width:100%}#csv-app .ca-toolbar{gap:.4rem}#csv-app .ca-sep{display:none}}\n\u003c/style\u003e\n\u003cdiv id=\"csv-app\"\u003e\n\u003cdiv class=\"ca-import-area\"\u003e\n  \u003ch2\u003eCSVをインポート\u003c/h2\u003e\n  \u003cdiv class=\"ca-opt-row\"\u003e\n    \u003clabel\u003e区切り文字: \u003cselect id=\"ca-delim\"\u003e\u003coption value=\",\"\u003eカンマ (,)\u003c/option\u003e\u003coption value=\"\t\"\u003eタブ (\\t)\u003c/option\u003e\u003coption value=\";\"\u003eセミコロン (;)\u003c/option\u003e\u003coption value=\"|\"\u003eパイプ (|)\u003c/option\u003e\u003c/select\u003e\u003c/label\u003e\n    \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"ca-has-header\" checked\u003e 1行目を見出しにする\u003c/label\u003e\n  \u003c/div\u003e\n  \u003ctextarea class=\"ca-paste\" id=\"ca-paste\" placeholder=\"CSVをここに貼り付け（例: 名前,年齢,都市\u0026#10;Alice,30,東京\u0026#10;Bob,25,大阪）\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"ca-import-row\"\u003e\n    \u003cbutton class=\"ca-btn ca-btn-blue\" id=\"ca-import-paste-btn\"\u003e貼り付けからインポート\u003c/button\u003e\n    \u003clabel class=\"ca-file-label\"\u003e\u003cspan\u003e\u0026#128196; CSVファイルをアップロード\u003c/span\u003e\u003cinput type=\"file\" class=\"ca-file-input\" id=\"ca-file-input\" accept=\".csv,text/csv,text/plain\"\u003e\u003c/label\u003e\n    \u003cbutton class=\"ca-btn ca-btn-gray\" id=\"ca-load-sample-btn\"\u003eサンプルを読み込む\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ca-msg\" id=\"ca-msg\"\u003e\u003c/div\u003e\n\u003cdiv id=\"ca-editor-section\" style=\"display:none\"\u003e\n  \u003cdiv class=\"ca-toolbar\"\u003e\n    \u003cinput class=\"ca-search\" id=\"ca-search\" type=\"search\" placeholder=\"行を検索・フィルター...\"\u003e\n    \u003cdiv class=\"ca-sep\"\u003e\u003c/div\u003e\n    \u003cbutton class=\"ca-btn ca-btn-green\" id=\"ca-add-row-btn\"\u003e+ 行を追加\u003c/button\u003e\n    \u003cbutton class=\"ca-btn ca-btn-green\" id=\"ca-add-col-btn\"\u003e+ 列を追加\u003c/button\u003e\n    \u003cdiv class=\"ca-sep\"\u003e\u003c/div\u003e\n    \u003cbutton class=\"ca-btn ca-btn-gray\" id=\"ca-clear-btn\"\u003e全消去\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ca-status\"\u003e\n    \u003cspan id=\"ca-status-text\"\u003e\u003c/span\u003e\n    \u003cspan id=\"ca-filtered-note\" class=\"ca-filtered-note\" style=\"display:none\"\u003e\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ca-table-wrap\" id=\"ca-table-wrap\"\u003e\n    \u003cdiv class=\"ca-empty\"\u003eデータがありません。\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ca-export-wrap\" style=\"margin-top:.9rem\"\u003e\n    \u003ch2\u003eCSVをエクスポート\u003c/h2\u003e\n    \u003cdiv class=\"ca-export-row\"\u003e\n      \u003cbutton class=\"ca-btn ca-btn-blue\" id=\"ca-generate-btn\"\u003eCSV生成\u003c/button\u003e\n      \u003cbutton class=\"ca-btn ca-btn-green\" id=\"ca-copy-btn\" disabled\u003eクリップボードにコピー\u003c/button\u003e\n      \u003cbutton class=\"ca-btn ca-btn-orange\" id=\"ca-download-btn\" disabled\u003eCSVをダウンロード\u003c/button\u003e\n    \u003c/div\u003e\n    \u003ctextarea class=\"ca-export-ta\" id=\"ca-export-ta\" readonly placeholder=\"「CSV生成」をクリックするとここにプレビューが表示されます...\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"CSVエディター"},{"content":"ビジュアルエディターでHTMLテーブルを作成 — コード不要。セルをクリックして編集、行や列の追加・削除、スタイルの選択、CSVデータのインポートができます。完成したHTMLコードをワンクリックでコピー。\nグリッド編集 + 行を追加 − 最終行を削除 + 列を追加 − 最終列を削除 全クリア ヘッダー行 枠線 縞模様行 ホバー効果 サイズ: 標準 コンパクト ゆったり CSSプリセット: プレーンHTML Bootstrapスタイル Tailwindスタイル セルの結合 選択セルを結合 結合を解除 セルをクリックで選択、Shift+クリックで範囲選択 CSV / TSV インポート CSVインポート TSVインポート ライブプレビュー エクスポート HTMLコード CSV Markdown コピー HTMLをダウンロード CSVをダウンロード .mdをダウンロード 📊 請求書・帳票もfreeeでラクラク管理 表データの作成から経理・請求書発行まで、freeeならすべてをひとつにまとめて自動化できます。30日間無料トライアル実施中。\nfreeeを無料で試す コピーしました! 関連ツール Markdownテーブルを生成 → Markdownテーブルジェネレーター JSONをCSVに変換 → JSON to CSV コンバーター SQLクエリを整形 → SQLフォーマッター ","permalink":"https://productivity-works.com/ja/tools/html-table-generator/","summary":"\u003cp\u003eビジュアルエディターでHTMLテーブルを作成 — コード不要。セルをクリックして編集、行や列の追加・削除、スタイルの選択、CSVデータのインポートができます。完成したHTMLコードをワンクリックでコピー。\u003c/p\u003e\n\u003cdiv id=\"ht-app\"\u003e\n\u003cstyle\u003e\n/* ── スコープ: すべてのスタイルは #ht-app プレフィックス付き ── */\n#ht-app {\n  font-family: system-ui, -apple-system, 'Hiragino Sans', 'Yu Gothic UI', sans-serif;\n  font-size: 14px;\n  color: #1a1a1a;\n  max-width: 100%;\n}\n#ht-app * { box-sizing: border-box; }\n\n/* ツールバー */\n#ht-app .ht-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n  margin-bottom: 12px;\n}\n#ht-app .ht-btn {\n  padding: 6px 12px;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  background: #fff;\n  cursor: pointer;\n  font-size: 13px;\n  transition: background 0.15s, border-color 0.15s;\n  white-space: nowrap;\n}\n#ht-app .ht-btn:hover { background: #f3f4f6; border-color: #9ca3af; }\n#ht-app .ht-btn.ht-btn-primary {\n  background: #2563eb; color: #fff; border-color: #2563eb;\n}\n#ht-app .ht-btn.ht-btn-primary:hover { background: #1d4ed8; border-color: #1d4ed8; }\n#ht-app .ht-btn.ht-btn-danger {\n  background: #fff; color: #dc2626; border-color: #fca5a5;\n}\n#ht-app .ht-btn.ht-btn-danger:hover { background: #fef2f2; }\n#ht-app .ht-btn.ht-active {\n  background: #eff6ff; border-color: #2563eb; color: #2563eb;\n}\n\n/* セクションラベル */\n#ht-app .ht-section { margin-bottom: 12px; }\n#ht-app .ht-section-title {\n  font-size: 11px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: #6b7280;\n  margin-bottom: 6px;\n}\n\n/* オプション行 */\n#ht-app .ht-options {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  align-items: center;\n  margin-bottom: 12px;\n  padding: 10px 12px;\n  background: #f9fafb;\n  border: 1px solid #e5e7eb;\n  border-radius: 8px;\n}\n#ht-app .ht-option-group {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 13px;\n}\n#ht-app .ht-option-group label { cursor: pointer; user-select: none; }\n#ht-app .ht-select {\n  padding: 4px 8px;\n  border: 1px solid #d1d5db;\n  border-radius: 5px;\n  background: #fff;\n  font-size: 13px;\n  cursor: pointer;\n}\n\n/* スプレッドシートグリッド */\n#ht-app .ht-grid-wrap {\n  overflow-x: auto;\n  margin-bottom: 14px;\n  border: 1px solid #d1d5db;\n  border-radius: 8px;\n}\n#ht-app .ht-grid {\n  border-collapse: collapse;\n  min-width: 100%;\n}\n#ht-app .ht-grid th,\n#ht-app .ht-grid td {\n  border: 1px solid #d1d5db;\n  padding: 0;\n  min-width: 80px;\n  max-width: 240px;\n  position: relative;\n}\n#ht-app .ht-grid .ht-col-ctrl td {\n  background: #f3f4f6;\n  text-align: center;\n  font-size: 11px;\n  color: #6b7280;\n  padding: 4px 2px;\n  cursor: pointer;\n  white-space: nowrap;\n}\n#ht-app .ht-grid .ht-col-ctrl td:hover { background: #fef2f2; color: #dc2626; }\n\n#ht-app .ht-cell-input {\n  width: 100%;\n  min-height: 32px;\n  padding: 6px 8px;\n  border: none;\n  outline: none;\n  background: transparent;\n  font-size: 13px;\n  font-family: inherit;\n  resize: none;\n  display: block;\n}\n#ht-app .ht-cell-input:focus {\n  background: #eff6ff;\n  outline: 2px solid #2563eb;\n  outline-offset: -2px;\n  border-radius: 2px;\n}\n#ht-app .ht-header-cell .ht-cell-input {\n  font-weight: 600;\n  background: #f0f9ff;\n}\n#ht-app .ht-header-cell { background: #e0f2fe; }\n#ht-app .ht-cell-selected { outline: 2px solid #f59e0b !important; outline-offset: -2px; }\n\n/* インポートエリア */\n#ht-app .ht-import-area {\n  width: 100%;\n  height: 80px;\n  padding: 8px;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  font-size: 12px;\n  font-family: monospace;\n  resize: vertical;\n  background: #fff;\n}\n#ht-app .ht-import-area:focus { outline: 2px solid #2563eb; border-color: transparent; }\n\n/* プレビューエリア */\n#ht-app .ht-preview-wrap {\n  overflow-x: auto;\n  border: 1px solid #d1d5db;\n  border-radius: 8px;\n  padding: 16px;\n  background: #fff;\n  margin-bottom: 14px;\n}\n\n/* コード出力 */\n#ht-app .ht-code-wrap {\n  position: relative;\n  margin-bottom: 8px;\n}\n#ht-app .ht-code-output {\n  width: 100%;\n  height: 160px;\n  padding: 10px;\n  font-family: 'Courier New', monospace;\n  font-size: 12px;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  background: #1e1e2e;\n  color: #cdd6f4;\n  resize: vertical;\n}\n#ht-app .ht-copy-btn {\n  position: absolute;\n  top: 8px;\n  right: 8px;\n  padding: 4px 10px;\n  font-size: 12px;\n  background: #374151;\n  color: #f3f4f6;\n  border: 1px solid #4b5563;\n  border-radius: 4px;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#ht-app .ht-copy-btn:hover { background: #4b5563; }\n#ht-app .ht-copy-btn.ht-copied { background: #16a34a; border-color: #16a34a; }\n\n/* タブ */\n#ht-app .ht-tabs {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #e5e7eb;\n  margin-bottom: 10px;\n}\n#ht-app .ht-tab {\n  padding: 7px 16px;\n  font-size: 13px;\n  cursor: pointer;\n  border: none;\n  background: none;\n  color: #6b7280;\n  border-bottom: 2px solid transparent;\n  margin-bottom: -2px;\n  transition: color 0.15s;\n}\n#ht-app .ht-tab:hover { color: #111; }\n#ht-app .ht-tab.ht-tab-active { color: #2563eb; border-bottom-color: #2563eb; font-weight: 600; }\n\n/* トースト通知 */\n#ht-app .ht-toast {\n  display: none;\n  position: fixed;\n  bottom: 24px;\n  left: 50%;\n  transform: translateX(-50%);\n  background: #111827;\n  color: #f9fafb;\n  padding: 10px 20px;\n  border-radius: 8px;\n  font-size: 13px;\n  z-index: 9999;\n  box-shadow: 0 4px 12px rgba(0,0,0,0.3);\n  pointer-events: none;\n}\n#ht-app .ht-toast.ht-show { display: block; }\n\n/* 区切り線 */\n#ht-app .ht-divider {\n  border: none;\n  border-top: 1px solid #e5e7eb;\n  margin: 14px 0;\n}\n\n/* freee CTAバナー */\n#ht-app .ht-freee-cta {\n  margin-top: 24px;\n  padding: 18px 20px;\n  background: linear-gradient(135deg, #e8f5e9 0%, #f0fdf4 100%);\n  border: 1px solid #86efac;\n  border-radius: 10px;\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  flex-wrap: wrap;\n}\n#ht-app .ht-freee-cta-icon {\n  font-size: 32px;\n  flex-shrink: 0;\n}\n#ht-app .ht-freee-cta-body {\n  flex: 1;\n  min-width: 180px;\n}\n#ht-app .ht-freee-cta-body strong {\n  display: block;\n  font-size: 15px;\n  color: #166534;\n  margin-bottom: 4px;\n}\n#ht-app .ht-freee-cta-body p {\n  font-size: 13px;\n  color: #15803d;\n  margin: 0;\n}\n#ht-app .ht-freee-cta-link {\n  display: inline-block;\n  padding: 9px 18px;\n  background: #16a34a;\n  color: #fff;\n  border-radius: 6px;\n  font-size: 13px;\n  font-weight: 600;\n  text-decoration: none;\n  white-space: nowrap;\n  flex-shrink: 0;\n  transition: background 0.15s;\n}\n#ht-app .ht-freee-cta-link:hover { background: #15803d; }\n\n/* レスポンシブ */\n@media (max-width: 600px) {\n  #ht-app .ht-btn { padding: 5px 9px; font-size: 12px; }\n  #ht-app .ht-options { gap: 8px; }\n  #ht-app .ht-cell-input { font-size: 12px; min-height: 28px; padding: 4px 6px; }\n  #ht-app .ht-freee-cta { flex-direction: column; align-items: flex-start; gap: 10px; }\n}\n\u003c/style\u003e\n\u003c!-- ── ツールバー ── --\u003e\n\u003cdiv class=\"ht-section\"\u003e\n  \u003cdiv class=\"ht-section-title\"\u003eグリッド編集\u003c/div\u003e\n  \u003cdiv class=\"ht-toolbar\"\u003e\n    \u003cbutton class=\"ht-btn\" id=\"ht-add-row\"\u003e+ 行を追加\u003c/button\u003e\n    \u003cbutton class=\"ht-btn ht-btn-danger\" id=\"ht-del-row\"\u003e− 最終行を削除\u003c/button\u003e\n    \u003cbutton class=\"ht-btn\" id=\"ht-add-col\"\u003e+ 列を追加\u003c/button\u003e\n    \u003cbutton class=\"ht-btn ht-btn-danger\" id=\"ht-del-col\"\u003e− 最終列を削除\u003c/button\u003e\n    \u003cbutton class=\"ht-btn\" id=\"ht-clear-all\"\u003e全クリア\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ── オプション ── --\u003e\n\u003cdiv class=\"ht-options\"\u003e\n  \u003cdiv class=\"ht-option-group\"\u003e\n    \u003cinput type=\"checkbox\" id=\"ht-opt-header\" checked\u003e\n    \u003clabel for=\"ht-opt-header\"\u003eヘッダー行\u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ht-option-group\"\u003e\n    \u003cinput type=\"checkbox\" id=\"ht-opt-border\" checked\u003e\n    \u003clabel for=\"ht-opt-border\"\u003e枠線\u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ht-option-group\"\u003e\n    \u003cinput type=\"checkbox\" id=\"ht-opt-striped\"\u003e\n    \u003clabel for=\"ht-opt-striped\"\u003e縞模様行\u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ht-option-group\"\u003e\n    \u003cinput type=\"checkbox\" id=\"ht-opt-hover\"\u003e\n    \u003clabel for=\"ht-opt-hover\"\u003eホバー効果\u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ht-option-group\"\u003e\n    \u003clabel for=\"ht-opt-size\"\u003eサイズ:\u003c/label\u003e\n    \u003cselect class=\"ht-select\" id=\"ht-opt-size\"\u003e\n      \u003coption value=\"normal\"\u003e標準\u003c/option\u003e\n      \u003coption value=\"compact\"\u003eコンパクト\u003c/option\u003e\n      \u003coption value=\"spacious\"\u003eゆったり\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ht-option-group\"\u003e\n    \u003clabel for=\"ht-opt-preset\"\u003eCSSプリセット:\u003c/label\u003e\n    \u003cselect class=\"ht-select\" id=\"ht-opt-preset\"\u003e\n      \u003coption value=\"plain\"\u003eプレーンHTML\u003c/option\u003e\n      \u003coption value=\"bootstrap\"\u003eBootstrapスタイル\u003c/option\u003e\n      \u003coption value=\"tailwind\"\u003eTailwindスタイル\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ── グリッド ── --\u003e\n\u003cdiv class=\"ht-grid-wrap\"\u003e\n  \u003ctable class=\"ht-grid\" id=\"ht-grid\"\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c!-- ── セル結合 ── --\u003e\n\u003cdiv class=\"ht-section\"\u003e\n  \u003cdiv class=\"ht-section-title\"\u003eセルの結合\u003c/div\u003e\n  \u003cdiv class=\"ht-toolbar\"\u003e\n    \u003cbutton class=\"ht-btn\" id=\"ht-merge-sel\"\u003e選択セルを結合\u003c/button\u003e\n    \u003cbutton class=\"ht-btn\" id=\"ht-unmerge-sel\"\u003e結合を解除\u003c/button\u003e\n    \u003cspan style=\"font-size:12px;color:#6b7280;align-self:center;\"\u003eセルをクリックで選択、Shift+クリックで範囲選択\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003chr class=\"ht-divider\"\u003e\n\u003c!-- ── インポート ── --\u003e\n\u003cdiv class=\"ht-section\"\u003e\n  \u003cdiv class=\"ht-section-title\"\u003eCSV / TSV インポート\u003c/div\u003e\n  \u003ctextarea class=\"ht-import-area\" id=\"ht-import-txt\" placeholder=\"CSVまたはTSVデータをここに貼り付けて「インポート」をクリック…\u0026#10;名前,年齢,都市\u0026#10;田中太郎,30,東京\u0026#10;佐藤花子,25,大阪\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"ht-toolbar\" style=\"margin-top:6px;\"\u003e\n    \u003cbutton class=\"ht-btn ht-btn-primary\" id=\"ht-import-csv\"\u003eCSVインポート\u003c/button\u003e\n    \u003cbutton class=\"ht-btn\" id=\"ht-import-tsv\"\u003eTSVインポート\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003chr class=\"ht-divider\"\u003e\n\u003c!-- ── ライブプレビュー ── --\u003e\n\u003cdiv class=\"ht-section\"\u003e\n  \u003cdiv class=\"ht-section-title\"\u003eライブプレビュー\u003c/div\u003e\n  \u003cdiv class=\"ht-preview-wrap\" id=\"ht-preview-wrap\"\u003e\n    \u003ctable id=\"ht-preview\"\u003e\u003c/table\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ── エクスポート ── --\u003e\n\u003cdiv class=\"ht-section\"\u003e\n  \u003cdiv class=\"ht-section-title\"\u003eエクスポート\u003c/div\u003e\n  \u003cdiv class=\"ht-tabs\"\u003e\n    \u003cbutton class=\"ht-tab ht-tab-active\" data-tab=\"html\"\u003eHTMLコード\u003c/button\u003e\n    \u003cbutton class=\"ht-tab\" data-tab=\"csv\"\u003eCSV\u003c/button\u003e\n    \u003cbutton class=\"ht-tab\" data-tab=\"md\"\u003eMarkdown\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ht-code-wrap\"\u003e\n    \u003ctextarea class=\"ht-code-output\" id=\"ht-code-output\" readonly\u003e\u003c/textarea\u003e\n    \u003cbutton class=\"ht-copy-btn\" id=\"ht-copy-btn\"\u003eコピー\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ht-toolbar\"\u003e\n    \u003cbutton class=\"ht-btn ht-btn-primary\" id=\"ht-dl-html\"\u003eHTMLをダウンロード\u003c/button\u003e\n    \u003cbutton class=\"ht-btn\" id=\"ht-dl-csv\"\u003eCSVをダウンロード\u003c/button\u003e\n    \u003cbutton class=\"ht-btn\" id=\"ht-dl-md\"\u003e.mdをダウンロード\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ── freee CTAバナー ── --\u003e\n\u003cdiv class=\"ht-freee-cta\"\u003e\n  \u003cdiv class=\"ht-freee-cta-icon\"\u003e📊\u003c/div\u003e\n  \u003cdiv class=\"ht-freee-cta-body\"\u003e\n    \u003cstrong\u003e請求書・帳票もfreeeでラクラク管理\u003c/strong\u003e\n    \u003cp\u003e表データの作成から経理・請求書発行まで、freeeならすべてをひとつにまとめて自動化できます。30日間無料トライアル実施中。\u003c/p\u003e","title":"HTMLテーブルジェネレーター — 無料オンラインツール"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n資産管理シミュレーター 現金・投資・不動産などの資産と、ローン・借入金などの負債を入力するだけで、あなたの純資産を自動計算します。年代別の平均値との比較や目標設定もできます。\n資産 現金・預金 （普通預金・定期預金・緊急予備資金） 万円 投資資産 （株式・投信・NISA・iDeCo・仮想通貨） 万円 不動産 （自宅評価額・投資用不動産） 万円 その他 （車・貴金属・保険解約返戻金・事業資産） 万円 資産合計 0 万円 負債 住宅ローン残高 万円 自動車ローン 万円 教育ローン・奨学金 万円 クレジットカード残高 万円 その他借入 万円 負債合計 0 万円 純資産（総資産 − 負債） 0 万円 負債比率: 0% 資産内訳 現金・預金 投資資産 不動産 その他 負債内訳 住宅ローン 自動車 教育 カード その他 年代別の純資産平均との比較 あなたの年代を選択 選択してください 20代 30代 40代 50代 60代 70代以上 年代 中央値（二人以上世帯） 比較 20代165万円— 30代526万円— 40代825万円— 50代1,253万円— 60代1,819万円— 70代以上1,905万円— 出典: 家計の金融行動に関する世論調査（金融広報中央委員会）\n目標純資産の設定 目標純資産（万円） 万円 目標達成率 0% 純資産とは？なぜ大切なのか **純資産（ネットワース）**とは、保有する全資産から全負債を差し引いた金額です。\n純資産 ＝ 総資産 − 総負債\n給与や年収は「フロー（流れ）」を示す指標ですが、純資産は「ストック（蓄積）」を示す指標です。純資産を把握することで、以下のことが分かります。\n財務的自由度: 純資産が高いほど、万一の収入減少に対する耐久力がある 老後の安心感: 将来の年金以外に頼れる資産がどれだけあるか 借入余力: 住宅購入や事業拡大のための融資審査で重視される 資産形成の進捗: 毎年計測することで、資産形成が順調かどうか確認できる 負債比率（総負債 ÷ 総資産）が50%を超えている場合は、高金利の負債を優先的に返済することを検討しましょう。\n純資産を増やす5つの方法 1. 収入を増やす 副業・スキルアップ・転職・昇給交渉など、収入の柱を増やすことが最も直接的な手段です。収入が増えた分をそのまま資産形成に回す仕組みをつくることが重要です。\n2. 支出を減らす 毎月の固定費（家賃・通信費・保険料・サブスク）を見直すだけで、年間数十万円の差が出ることがあります。収入を増やすより即効性があります。\n3. 高金利負債を返済する クレジットカードのリボ払い（年率15〜18%）やカードローンは、資産形成の大きな障害です。投資リターンより金利が高い負債は、返済を最優先にしましょう。\n4. 投資を始める 現金だけでは物価上昇に負けます。新NISAやiDeCoを活用して、インデックス投資信託などで長期・積立・分散投資を行いましょう。年利3〜5%の複利効果は長期間で絶大な力を発揮します。\n5. 固定費を見直す 住宅ローンの借り換え、格安スマホへの乗り換え、不要な保険の解約など、一度見直すだけで毎月の支出が大きく変わります。固定費削減の効果は毎月・永続的に続きます。\n関連ツール FIRE（経済的自立）までの年数を計算 → FIREシミュレーター 毎月の支出を見直す → 家計簿シミュレーター 貯蓄目標を計算 → 貯蓄目標シミュレーター 借入返済を計画 → 借金返済シミュレーター 住宅ローン返済額を確認 → 住宅ローンシミュレーター NISAで資産を増やす → NISAシミュレーター 教育費の準備状況を確認 → 教育費シミュレーター 関連記事 老後2,000万円問題の対策 新NISA始め方 副業の始め方 30代の保険見直しガイド 住宅ローンの賢い選び方 資産管理・家計管理なら**freee会計（無料トライアルあり） **がおすすめ\nProductivity Works 無料ツール 当サイトの計算ツールはすべて完全無料、ブラウザ上で動作し、データは一切保存されません。\n全ツール一覧はこちら 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/tools/shisan-simulator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"資産管理シミュレーター\"\u003e資産管理シミュレーター\u003c/h1\u003e\n\u003cp\u003e現金・投資・不動産などの\u003cstrong\u003e資産\u003c/strong\u003eと、ローン・借入金などの\u003cstrong\u003e負債\u003c/strong\u003eを入力するだけで、あなたの\u003cstrong\u003e純資産\u003c/strong\u003eを自動計算します。年代別の平均値との比較や目標設定もできます。\u003c/p\u003e\n\u003cdiv id=\"ss-calc\" style=\"max-width:720px;margin:0 auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Hiragino Sans',sans-serif;color:#1e293b !important;color-scheme:light;\"\u003e\n\u003c!-- 資産セクション --\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #059669;border-radius:12px;background:#f0fdf4;margin-bottom:20px;\"\u003e\n\u003ch2 style=\"margin:0 0 20px 0;font-size:20px;color:#059669;\"\u003e資産\u003c/h2\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;color:#1e293b !important;\"\u003e現金・預金 \u003cspan style=\"font-weight:normal;color:#64748b;\"\u003e（普通預金・定期預金・緊急予備資金）\u003c/span\u003e\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"ssCash\" min=\"0\" step=\"1\" value=\"0\" oninput=\"calcSS()\" style=\"flex:1;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:16px;color:#1e293b !important;background:#fff !important;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;color:#1e293b !important;\"\u003e投資資産 \u003cspan style=\"font-weight:normal;color:#64748b;\"\u003e（株式・投信・NISA・iDeCo・仮想通貨）\u003c/span\u003e\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"ssInvest\" min=\"0\" step=\"1\" value=\"0\" oninput=\"calcSS()\" style=\"flex:1;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:16px;color:#1e293b !important;background:#fff !important;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;color:#1e293b !important;\"\u003e不動産 \u003cspan style=\"font-weight:normal;color:#64748b;\"\u003e（自宅評価額・投資用不動産）\u003c/span\u003e\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"ssRealty\" min=\"0\" step=\"1\" value=\"0\" oninput=\"calcSS()\" style=\"flex:1;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:16px;color:#1e293b !important;background:#fff !important;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;color:#1e293b !important;\"\u003eその他 \u003cspan style=\"font-weight:normal;color:#64748b;\"\u003e（車・貴金属・保険解約返戻金・事業資産）\u003c/span\u003e\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"ssOtherAsset\" min=\"0\" step=\"1\" value=\"0\" oninput=\"calcSS()\" style=\"flex:1;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:16px;color:#1e293b !important;background:#fff !important;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:16px;background:#dcfce7;border-radius:8px;display:flex;justify-content:space-between;align-items:center;\"\u003e\n\u003cspan style=\"font-weight:bold;font-size:16px;color:#059669;\"\u003e資産合計\u003c/span\u003e\n\u003cspan id=\"ssTotalAsset\" style=\"font-size:28px;font-weight:bold;color:#059669;\"\u003e0 万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 負債セクション --\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #dc2626;border-radius:12px;background:#fef2f2;margin-bottom:20px;\"\u003e\n\u003ch2 style=\"margin:0 0 20px 0;font-size:20px;color:#dc2626;\"\u003e負債\u003c/h2\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;color:#1e293b !important;\"\u003e住宅ローン残高\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"ssHomeLoan\" min=\"0\" step=\"1\" value=\"0\" oninput=\"calcSS()\" style=\"flex:1;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:16px;color:#1e293b !important;background:#fff !important;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;color:#1e293b !important;\"\u003e自動車ローン\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"ssCarLoan\" min=\"0\" step=\"1\" value=\"0\" oninput=\"calcSS()\" style=\"flex:1;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:16px;color:#1e293b !important;background:#fff !important;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;color:#1e293b !important;\"\u003e教育ローン・奨学金\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"ssEduLoan\" min=\"0\" step=\"1\" value=\"0\" oninput=\"calcSS()\" style=\"flex:1;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:16px;color:#1e293b !important;background:#fff !important;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;color:#1e293b !important;\"\u003eクレジットカード残高\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"ssCreditCard\" min=\"0\" step=\"1\" value=\"0\" oninput=\"calcSS()\" style=\"flex:1;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:16px;color:#1e293b !important;background:#fff !important;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;color:#1e293b !important;\"\u003eその他借入\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"ssOtherDebt\" min=\"0\" step=\"1\" value=\"0\" oninput=\"calcSS()\" style=\"flex:1;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:16px;color:#1e293b !important;background:#fff !important;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:16px;background:#fee2e2;border-radius:8px;display:flex;justify-content:space-between;align-items:center;\"\u003e\n\u003cspan style=\"font-weight:bold;font-size:16px;color:#dc2626;\"\u003e負債合計\u003c/span\u003e\n\u003cspan id=\"ssTotalDebt\" style=\"font-size:28px;font-weight:bold;color:#dc2626;\"\u003e0 万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 結果パネル --\u003e\n\u003cdiv id=\"ssResults\" style=\"padding:24px;border-radius:12px;background:#eef2ff;border:2px solid #4f46e5;margin-bottom:20px;\"\u003e\n\u003cdiv style=\"text-align:center;margin-bottom:24px;\"\u003e\n\u003cdiv style=\"font-size:14px;color:#64748b;margin-bottom:4px;\"\u003e純資産（総資産 − 負債）\u003c/div\u003e\n\u003cdiv id=\"ssNetWorth\" style=\"font-size:48px;font-weight:bold;color:#4f46e5;line-height:1.1;\"\u003e0 万円\u003c/div\u003e\n\u003cdiv id=\"ssDebtRatio\" style=\"font-size:14px;color:#64748b;margin-top:8px;\"\u003e負債比率: 0%\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 資産内訳バー --\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003cdiv style=\"font-weight:bold;font-size:14px;margin-bottom:8px;\"\u003e資産内訳\u003c/div\u003e\n\u003cdiv style=\"height:28px;background:#e2e8f0;border-radius:14px;overflow:hidden;display:flex;\"\u003e\n\u003cdiv id=\"ssBarCash\" style=\"background:#059669;height:100%;transition:width 0.3s;width:0%;\" title=\"現金・預金\"\u003e\u003c/div\u003e\n\u003cdiv id=\"ssBarInvest\" style=\"background:#10b981;height:100%;transition:width 0.3s;width:0%;\" title=\"投資資産\"\u003e\u003c/div\u003e\n\u003cdiv id=\"ssBarRealty\" style=\"background:#34d399;height:100%;transition:width 0.3s;width:0%;\" title=\"不動産\"\u003e\u003c/div\u003e\n\u003cdiv id=\"ssBarOtherAsset\" style=\"background:#6ee7b7;height:100%;transition:width 0.3s;width:0%;\" title=\"その他\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:#64748b;margin-top:8px;\"\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#059669;border-radius:2px;\"\u003e\u003c/span\u003e 現金・預金\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#10b981;border-radius:2px;\"\u003e\u003c/span\u003e 投資資産\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#34d399;border-radius:2px;\"\u003e\u003c/span\u003e 不動産\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#6ee7b7;border-radius:2px;\"\u003e\u003c/span\u003e その他\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 負債内訳バー --\u003e\n\u003cdiv id=\"ssDebtBreakdownWrap\"\u003e\n\u003cdiv style=\"font-weight:bold;font-size:14px;margin-bottom:8px;\"\u003e負債内訳\u003c/div\u003e\n\u003cdiv style=\"height:28px;background:#e2e8f0;border-radius:14px;overflow:hidden;display:flex;\"\u003e\n\u003cdiv id=\"ssBarHomeLoan\" style=\"background:#dc2626;height:100%;transition:width 0.3s;width:0%;\" title=\"住宅ローン\"\u003e\u003c/div\u003e\n\u003cdiv id=\"ssBarCarLoan\" style=\"background:#ef4444;height:100%;transition:width 0.3s;width:0%;\" title=\"自動車ローン\"\u003e\u003c/div\u003e\n\u003cdiv id=\"ssBarEduLoan\" style=\"background:#f87171;height:100%;transition:width 0.3s;width:0%;\" title=\"教育ローン・奨学金\"\u003e\u003c/div\u003e\n\u003cdiv id=\"ssBarCredit\" style=\"background:#fca5a5;height:100%;transition:width 0.3s;width:0%;\" title=\"クレジットカード\"\u003e\u003c/div\u003e\n\u003cdiv id=\"ssBarOtherDebt\" style=\"background:#fecaca;height:100%;transition:width 0.3s;width:0%;\" title=\"その他借入\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:#64748b;margin-top:8px;\"\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#dc2626;border-radius:2px;\"\u003e\u003c/span\u003e 住宅ローン\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#ef4444;border-radius:2px;\"\u003e\u003c/span\u003e 自動車\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#f87171;border-radius:2px;\"\u003e\u003c/span\u003e 教育\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#fca5a5;border-radius:2px;\"\u003e\u003c/span\u003e カード\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#fecaca;border-radius:2px;\"\u003e\u003c/span\u003e その他\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 年代別比較 --\u003e\n\u003cdiv style=\"padding:24px;border-radius:12px;background:#f8fafc;border:1px solid #e2e8f0;margin-bottom:20px;\"\u003e\n\u003ch3 style=\"margin:0 0 16px 0;font-size:18px;\"\u003e年代別の純資産平均との比較\u003c/h3\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;color:#1e293b !important;\"\u003eあなたの年代を選択\u003c/label\u003e\n\u003cselect id=\"ssAge\" onchange=\"calcSS()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b !important;background:#fff !important;\"\u003e\n\u003coption value=\"\"\u003e選択してください\u003c/option\u003e\n\u003coption value=\"20\"\u003e20代\u003c/option\u003e\n\u003coption value=\"30\"\u003e30代\u003c/option\u003e\n\u003coption value=\"40\"\u003e40代\u003c/option\u003e\n\u003coption value=\"50\"\u003e50代\u003c/option\u003e\n\u003coption value=\"60\"\u003e60代\u003c/option\u003e\n\u003coption value=\"70\"\u003e70代以上\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;font-size:14px;\"\u003e\n\u003cthead\u003e\n\u003ctr style=\"background:#4f46e5;color:white;\"\u003e\n\u003cth style=\"padding:10px 12px;text-align:left;border-radius:8px 0 0 0;\"\u003e年代\u003c/th\u003e\n\u003cth style=\"padding:10px 12px;text-align:right;\"\u003e中央値（二人以上世帯）\u003c/th\u003e\n\u003cth style=\"padding:10px 12px;text-align:center;border-radius:0 8px 0 0;\"\u003e比較\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody id=\"ssAgeTable\"\u003e\n\u003ctr style=\"background:white;\"\u003e\u003ctd style=\"padding:10px 12px;border-bottom:1px solid #e2e8f0;\"\u003e20代\u003c/td\u003e\u003ctd style=\"padding:10px 12px;text-align:right;border-bottom:1px solid #e2e8f0;\"\u003e165万円\u003c/td\u003e\u003ctd style=\"padding:10px 12px;text-align:center;border-bottom:1px solid #e2e8f0;\" id=\"ssCmp20\"\u003e—\u003c/td\u003e\u003c/tr\u003e\n\u003ctr style=\"background:#f8fafc;\"\u003e\u003ctd style=\"padding:10px 12px;border-bottom:1px solid #e2e8f0;\"\u003e30代\u003c/td\u003e\u003ctd style=\"padding:10px 12px;text-align:right;border-bottom:1px solid #e2e8f0;\"\u003e526万円\u003c/td\u003e\u003ctd style=\"padding:10px 12px;text-align:center;border-bottom:1px solid #e2e8f0;\" id=\"ssCmp30\"\u003e—\u003c/td\u003e\u003c/tr\u003e\n\u003ctr style=\"background:white;\"\u003e\u003ctd style=\"padding:10px 12px;border-bottom:1px solid #e2e8f0;\"\u003e40代\u003c/td\u003e\u003ctd style=\"padding:10px 12px;text-align:right;border-bottom:1px solid #e2e8f0;\"\u003e825万円\u003c/td\u003e\u003ctd style=\"padding:10px 12px;text-align:center;border-bottom:1px solid #e2e8f0;\" id=\"ssCmp40\"\u003e—\u003c/td\u003e\u003c/tr\u003e\n\u003ctr style=\"background:#f8fafc;\"\u003e\u003ctd style=\"padding:10px 12px;border-bottom:1px solid #e2e8f0;\"\u003e50代\u003c/td\u003e\u003ctd style=\"padding:10px 12px;text-align:right;border-bottom:1px solid #e2e8f0;\"\u003e1,253万円\u003c/td\u003e\u003ctd style=\"padding:10px 12px;text-align:center;border-bottom:1px solid #e2e8f0;\" id=\"ssCmp50\"\u003e—\u003c/td\u003e\u003c/tr\u003e\n\u003ctr style=\"background:white;\"\u003e\u003ctd style=\"padding:10px 12px;border-bottom:1px solid #e2e8f0;\"\u003e60代\u003c/td\u003e\u003ctd style=\"padding:10px 12px;text-align:right;border-bottom:1px solid #e2e8f0;\"\u003e1,819万円\u003c/td\u003e\u003ctd style=\"padding:10px 12px;text-align:center;border-bottom:1px solid #e2e8f0;\" id=\"ssCmp60\"\u003e—\u003c/td\u003e\u003c/tr\u003e\n\u003ctr style=\"background:#f8fafc;\"\u003e\u003ctd style=\"padding:10px 12px;\"\u003e70代以上\u003c/td\u003e\u003ctd style=\"padding:10px 12px;text-align:right;\"\u003e1,905万円\u003c/td\u003e\u003ctd style=\"padding:10px 12px;text-align:center;\" id=\"ssCmp70\"\u003e—\u003c/td\u003e\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdiv id=\"ssAgeComment\" style=\"margin-top:12px;padding:12px;border-radius:8px;font-size:14px;display:none;\"\u003e\u003c/div\u003e\n\u003cp style=\"font-size:12px;color:#94a3b8;margin-top:8px;margin-bottom:0;\"\u003e出典: 家計の金融行動に関する世論調査（金融広報中央委員会）\u003c/p\u003e","title":"資産管理シミュレーター｜総資産・純資産を自動計算【2026年版】"},{"content":"2つのJSONを貼り付けるだけで、追加・削除・変更されたキーを色分けして一覧表示。ドット記法のパス付き。サーバー送信なし、登録不要。\n\u0026#8644; 比較する \u0026#8645; 入れ替え { } 左を整形 { } 右を整形 サンプル クリア 左（変更前） 右（変更後） 両方のパネルにJSONを貼り付けて「比較する」をクリックしてください。 API・開発ツールの経費管理もかんたんに\nfreee会計なら、クラウドサービス・開発ツールの経費精算もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 使い方 左パネルに変更前のJSONを貼り付けます 右パネルに変更後のJSONを貼り付けます 「比較する」ボタンをクリック（両方入力後700ms後に自動比較） 色分けされた差分一覧を確認します 色 記号 意味 緑 + 右にのみ存在するキー（追加） 赤 − 左にのみ存在するキー（削除） 黄 ~ 両方に存在するが値が変化したキー 主な機能 再帰的な深い比較 — ネストしたオブジェクトや配列も完全にトレース ドット記法パス — user.email、tags[2] のように変更箇所の正確な位置を表示 サマリー統計 — 追加・削除・変更の件数を一目で確認 整形ボタン — ミニファイされたJSONを比較前に整形 入れ替えボタン — 変更前・変更後を一発で反転 サンプルJSON — 実際のユーザーオブジェクト差分をすぐ体験 キーボードショートカット — Ctrl+Enter（Mac: Cmd+Enter）で素早く比較 こんな場面で活躍 APIレスポンスの変化確認（本番 vs ステージング） 設定ファイルの環境差異チェック（dev / prod） フロントエンドとバックエンドのデータ形式の照合 JSONスキーマ移行前後の差分確認 デバッグ時の状態オブジェクト比較 JSONをバリデーション・整形 → JSONフォーマッター テキストを行単位で比較 → テキスト差分比較ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/json-diff/","summary":"\u003cp\u003e2つのJSONを貼り付けるだけで、追加・削除・変更されたキーを色分けして一覧表示。ドット記法のパス付き。サーバー送信なし、登録不要。\u003c/p\u003e\n\u003cdiv id=\"jd-app\"\u003e\n\u003cstyle\u003e\n#jd-app *,\n#jd-app *::before,\n#jd-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#jd-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", Roboto, sans-serif;\n  font-size: 14px;\n  color: #1e293b;\n  line-height: 1.6;\n}\n#jd-app .jd-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n  margin-bottom: 14px;\n}\n#jd-app .jd-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 7px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  background: #fff;\n  color: #334155;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, border-color 0.15s;\n  white-space: nowrap;\n}\n#jd-app .jd-btn:hover { background: #f1f5f9; border-color: #94a3b8; }\n#jd-app .jd-btn.primary {\n  background: #6366f1;\n  color: #fff;\n  border-color: #6366f1;\n}\n#jd-app .jd-btn.primary:hover { background: #4f46e5; border-color: #4f46e5; }\n#jd-app .jd-panels {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n  margin-bottom: 12px;\n}\n@media (max-width: 640px) {\n  #jd-app .jd-panels { grid-template-columns: 1fr; }\n}\n#jd-app .jd-panel-label {\n  font-size: 12px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 5px;\n}\n#jd-app textarea.jd-input {\n  width: 100%;\n  height: 220px;\n  padding: 10px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-family: \"SF Mono\", \"Fira Code\", \"Cascadia Code\", monospace;\n  font-size: 12.5px;\n  line-height: 1.6;\n  color: #1e293b;\n  background: #f8fafc;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#jd-app textarea.jd-input:focus { border-color: #6366f1; background: #fff; }\n#jd-app textarea.jd-input.error { border-color: #ef4444; background: #fff5f5; }\n#jd-app .jd-parse-error {\n  font-size: 12px;\n  color: #ef4444;\n  margin-top: 4px;\n  min-height: 16px;\n}\n#jd-app .jd-stats {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  margin-bottom: 14px;\n}\n#jd-app .jd-stat {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 5px 12px;\n  border-radius: 20px;\n  font-size: 13px;\n  font-weight: 600;\n}\n#jd-app .jd-stat.added   { background: #dcfce7; color: #15803d; }\n#jd-app .jd-stat.removed { background: #fee2e2; color: #b91c1c; }\n#jd-app .jd-stat.changed { background: #fef9c3; color: #92400e; }\n#jd-app .jd-stat.same    { background: #f1f5f9; color: #475569; }\n#jd-app .jd-stat-dot {\n  width: 9px; height: 9px;\n  border-radius: 50%;\n  flex-shrink: 0;\n}\n#jd-app .jd-stat.added   .jd-stat-dot { background: #16a34a; }\n#jd-app .jd-stat.removed .jd-stat-dot { background: #dc2626; }\n#jd-app .jd-stat.changed .jd-stat-dot { background: #d97706; }\n#jd-app .jd-stat.same    .jd-stat-dot { background: #94a3b8; }\n#jd-app .jd-tree {\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  overflow: hidden;\n  background: #fff;\n}\n#jd-app .jd-row {\n  display: flex;\n  align-items: baseline;\n  border-bottom: 1px solid #f1f5f9;\n  font-family: \"SF Mono\", \"Fira Code\", \"Cascadia Code\", monospace;\n  font-size: 12.5px;\n  line-height: 1.7;\n}\n#jd-app .jd-row:last-child { border-bottom: none; }\n#jd-app .jd-row.added   { background: #f0fdf4; }\n#jd-app .jd-row.removed { background: #fff5f5; }\n#jd-app .jd-row.changed { background: #fefce8; }\n#jd-app .jd-row-badge {\n  width: 26px;\n  flex-shrink: 0;\n  text-align: center;\n  font-weight: 700;\n  font-size: 13px;\n  padding: 0 4px;\n  align-self: stretch;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n#jd-app .jd-row.added   .jd-row-badge { color: #16a34a; background: #dcfce7; }\n#jd-app .jd-row.removed .jd-row-badge { color: #dc2626; background: #fee2e2; }\n#jd-app .jd-row.changed .jd-row-badge { color: #d97706; background: #fef9c3; }\n#jd-app .jd-row-body {\n  padding: 4px 12px;\n  flex: 1;\n  overflow-wrap: anywhere;\n}\n#jd-app .jd-row-path {\n  color: #6366f1;\n  font-weight: 600;\n}\n#jd-app .jd-row-sep {\n  color: #94a3b8;\n  margin: 0 5px;\n}\n#jd-app .jd-val-old {\n  text-decoration: line-through;\n  color: #dc2626;\n}\n#jd-app .jd-val-new { color: #16a34a; }\n#jd-app .jd-val-added   { color: #15803d; }\n#jd-app .jd-val-removed { color: #b91c1c; }\n#jd-app .jd-empty-state {\n  text-align: center;\n  padding: 40px 20px;\n  color: #94a3b8;\n  font-size: 14px;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", Roboto, sans-serif;\n}\n#jd-app .jd-identical {\n  text-align: center;\n  padding: 28px 20px;\n  color: #16a34a;\n  font-size: 15px;\n  font-weight: 600;\n  background: #f0fdf4;\n  border-radius: 10px;\n  border: 1.5px solid #bbf7d0;\n}\n\u003c/style\u003e\n\u003cdiv class=\"jd-toolbar\"\u003e\n  \u003cbutton class=\"jd-btn primary\" id=\"jd-compare\"\u003e\u0026#8644; 比較する\u003c/button\u003e\n  \u003cbutton class=\"jd-btn\" id=\"jd-swap\"\u003e\u0026#8645; 入れ替え\u003c/button\u003e\n  \u003cbutton class=\"jd-btn\" id=\"jd-fmt-left\"\u003e{ } 左を整形\u003c/button\u003e\n  \u003cbutton class=\"jd-btn\" id=\"jd-fmt-right\"\u003e{ } 右を整形\u003c/button\u003e\n  \u003cbutton class=\"jd-btn\" id=\"jd-sample\"\u003eサンプル\u003c/button\u003e\n  \u003cbutton class=\"jd-btn\" id=\"jd-clear\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"jd-panels\"\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"jd-panel-label\"\u003e左（変更前）\u003c/div\u003e\n    \u003ctextarea class=\"jd-input\" id=\"jd-left\" placeholder='{\"name\": \"田中太郎\", \"age\": 30}'\u003e\u003c/textarea\u003e\n    \u003cdiv class=\"jd-parse-error\" id=\"jd-err-left\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"jd-panel-label\"\u003e右（変更後）\u003c/div\u003e\n    \u003ctextarea class=\"jd-input\" id=\"jd-right\" placeholder='{\"name\": \"田中太郎\", \"age\": 31}'\u003e\u003c/textarea\u003e\n    \u003cdiv class=\"jd-parse-error\" id=\"jd-err-right\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"jd-stats\" id=\"jd-stats\" style=\"display:none;\"\u003e\u003c/div\u003e\n\u003cdiv id=\"jd-result-wrap\"\u003e\n  \u003cdiv class=\"jd-empty-state\"\u003e両方のパネルにJSONを貼り付けて「比較する」をクリックしてください。\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  function esc(s) {\n    return String(s)\n      .replace(/\u0026/g,'\u0026amp;')\n      .replace(/\u003c/g,'\u0026lt;')\n      .replace(/\u003e/g,'\u0026gt;')\n      .replace(/\"/g,'\u0026quot;');\n  }\n\n  function formatVal(v) {\n    if (v === null) return '\u003cspan style=\"color:#7c3aed\"\u003enull\u003c/span\u003e';\n    if (typeof v === 'boolean') return '\u003cspan style=\"color:#0891b2\"\u003e' + v + '\u003c/span\u003e';\n    if (typeof v === 'number') return '\u003cspan style=\"color:#0369a1\"\u003e' + v + '\u003c/span\u003e';\n    if (typeof v === 'string') return '\u003cspan style=\"color:#b45309\"\u003e\"' + esc(v) + '\"\u003c/span\u003e';\n    if (Array.isArray(v)) return '\u003cspan style=\"color:#64748b\"\u003e[配列(' + v.length + '件)]\u003c/span\u003e';\n    return '\u003cspan style=\"color:#64748b\"\u003e{オブジェクト}\u003c/span\u003e';\n  }\n\n  function isPrimitive(v) {\n    return v === null || typeof v !== 'object';\n  }\n\n  function typeOf(v) {\n    if (v === null) return 'null';\n    if (Array.isArray(v)) return 'array';\n    return typeof v;\n  }\n\n  function deepDiff(left, right, path, results) {\n    results = results || [];\n    path = path || '';\n\n    var lt = typeOf(left);\n    var rt = typeOf(right);\n\n    if (lt !== rt) {\n      results.push({ type: 'changed', path: path || '(root)', oldVal: left, newVal: right });\n      return results;\n    }\n\n    if (lt === 'object') {\n      var allKeys = new Set(Object.keys(left).concat(Object.keys(right)));\n      allKeys.forEach(function(key) {\n        var childPath = path ? path + '.' + key : key;\n        if (!Object.prototype.hasOwnProperty.call(left, key)) {\n          collectAll(right[key], childPath, 'added', results);\n        } else if (!Object.prototype.hasOwnProperty.call(right, key)) {\n          collectAll(left[key], childPath, 'removed', results);\n        } else {\n          deepDiff(left[key], right[key], childPath, results);\n        }\n      });\n    } else if (lt === 'array') {\n      var maxLen = Math.max(left.length, right.length);\n      for (var i = 0; i \u003c maxLen; i++) {\n        var childPath = (path || '(root)') + '[' + i + ']';\n        if (i \u003e= left.length) {\n          collectAll(right[i], childPath, 'added', results);\n        } else if (i \u003e= right.length) {\n          collectAll(left[i], childPath, 'removed', results);\n        } else {\n          deepDiff(left[i], right[i], childPath, results);\n        }\n      }\n    } else {\n      if (left !== right) {\n        results.push({ type: 'changed', path: path || '(root)', oldVal: left, newVal: right });\n      }\n    }\n\n    return results;\n  }\n\n  function collectAll(node, path, type, results) {\n    if (isPrimitive(node) || typeOf(node) === 'null') {\n      results.push({ type: type, path: path, val: node });\n      return;\n    }\n    if (Array.isArray(node)) {\n      if (node.length === 0) {\n        results.push({ type: type, path: path, val: node });\n        return;\n      }\n      node.forEach(function(item, i) {\n        collectAll(item, path + '[' + i + ']', type, results);\n      });\n    } else {\n      var keys = Object.keys(node);\n      if (keys.length === 0) {\n        results.push({ type: type, path: path, val: node });\n        return;\n      }\n      keys.forEach(function(k) {\n        collectAll(node[k], path + '.' + k, type, results);\n      });\n    }\n  }\n\n  function renderDiff(diffs) {\n    if (diffs.length === 0) {\n      return '\u003cdiv class=\"jd-identical\"\u003e\u0026#10003; 差分なし — 2つのJSONは同一です。\u003c/div\u003e';\n    }\n\n    var html = '\u003cdiv class=\"jd-tree\"\u003e';\n\n    diffs.forEach(function(d) {\n      if (d.type === 'added') {\n        html += '\u003cdiv class=\"jd-row added\"\u003e';\n        html += '\u003cdiv class=\"jd-row-badge\"\u003e+\u003c/div\u003e';\n        html += '\u003cdiv class=\"jd-row-body\"\u003e';\n        html += '\u003cspan class=\"jd-row-path\"\u003e' + esc(d.path) + '\u003c/span\u003e';\n        html += '\u003cspan class=\"jd-row-sep\"\u003e\u0026#8594;\u003c/span\u003e';\n        html += '\u003cspan class=\"jd-val-added\"\u003e' + formatVal(d.val) + '\u003c/span\u003e';\n        html += '\u003c/div\u003e\u003c/div\u003e';\n      } else if (d.type === 'removed') {\n        html += '\u003cdiv class=\"jd-row removed\"\u003e';\n        html += '\u003cdiv class=\"jd-row-badge\"\u003e\u0026minus;\u003c/div\u003e';\n        html += '\u003cdiv class=\"jd-row-body\"\u003e';\n        html += '\u003cspan class=\"jd-row-path\"\u003e' + esc(d.path) + '\u003c/span\u003e';\n        html += '\u003cspan class=\"jd-row-sep\"\u003e\u0026#8594;\u003c/span\u003e';\n        html += '\u003cspan class=\"jd-val-removed\"\u003e' + formatVal(d.val) + '\u003c/span\u003e';\n        html += '\u003c/div\u003e\u003c/div\u003e';\n      } else if (d.type === 'changed') {\n        html += '\u003cdiv class=\"jd-row changed\"\u003e';\n        html += '\u003cdiv class=\"jd-row-badge\"\u003e~\u003c/div\u003e';\n        html += '\u003cdiv class=\"jd-row-body\"\u003e';\n        html += '\u003cspan class=\"jd-row-path\"\u003e' + esc(d.path) + '\u003c/span\u003e';\n        html += '\u003cspan class=\"jd-row-sep\"\u003e:\u003c/span\u003e ';\n        html += '\u003cspan class=\"jd-val-old\"\u003e' + formatVal(d.oldVal) + '\u003c/span\u003e';\n        html += ' \u003cspan class=\"jd-row-sep\"\u003e\u0026#8594;\u003c/span\u003e ';\n        html += '\u003cspan class=\"jd-val-new\"\u003e' + formatVal(d.newVal) + '\u003c/span\u003e';\n        html += '\u003c/div\u003e\u003c/div\u003e';\n      }\n    });\n\n    html += '\u003c/div\u003e';\n    return html;\n  }\n\n  function renderStats(diffs) {\n    var added = 0, removed = 0, changed = 0;\n    diffs.forEach(function(d) {\n      if (d.type === 'added') added++;\n      else if (d.type === 'removed') removed++;\n      else if (d.type === 'changed') changed++;\n    });\n    var total = added + removed + changed;\n    return (\n      '\u003cdiv class=\"jd-stat added\"\u003e\u003cdiv class=\"jd-stat-dot\"\u003e\u003c/div\u003e' + added + ' 件追加\u003c/div\u003e' +\n      '\u003cdiv class=\"jd-stat removed\"\u003e\u003cdiv class=\"jd-stat-dot\"\u003e\u003c/div\u003e' + removed + ' 件削除\u003c/div\u003e' +\n      '\u003cdiv class=\"jd-stat changed\"\u003e\u003cdiv class=\"jd-stat-dot\"\u003e\u003c/div\u003e' + changed + ' 件変更\u003c/div\u003e' +\n      '\u003cdiv class=\"jd-stat same\"\u003e\u003cdiv class=\"jd-stat-dot\"\u003e\u003c/div\u003e合計 ' + total + ' 件の差分\u003c/div\u003e'\n    );\n  }\n\n  function tryParse(str, errEl, inputEl) {\n    errEl.textContent = '';\n    inputEl.classList.remove('error');\n    var s = str.trim();\n    if (!s) return null;\n    try {\n      return JSON.parse(s);\n    } catch (e) {\n      errEl.textContent = 'パースエラー: ' + e.message;\n      inputEl.classList.add('error');\n      return undefined;\n    }\n  }\n\n  var leftEl   = document.getElementById('jd-left');\n  var rightEl  = document.getElementById('jd-right');\n  var errLeft  = document.getElementById('jd-err-left');\n  var errRight = document.getElementById('jd-err-right');\n  var statsEl  = document.getElementById('jd-stats');\n  var resultEl = document.getElementById('jd-result-wrap');\n\n  function runCompare() {\n    var leftParsed  = tryParse(leftEl.value,  errLeft,  leftEl);\n    var rightParsed = tryParse(rightEl.value, errRight, rightEl);\n\n    if (leftParsed === undefined || rightParsed === undefined) {\n      statsEl.style.display = 'none';\n      resultEl.innerHTML = '\u003cdiv class=\"jd-empty-state\"\u003e上のパースエラーを修正してから比較してください。\u003c/div\u003e';\n      return;\n    }\n    if (leftParsed === null \u0026\u0026 rightParsed === null \u0026\u0026 !leftEl.value.trim() \u0026\u0026 !rightEl.value.trim()) {\n      statsEl.style.display = 'none';\n      resultEl.innerHTML = '\u003cdiv class=\"jd-empty-state\"\u003e両方のパネルにJSONを貼り付けて「比較する」をクリックしてください。\u003c/div\u003e';\n      return;\n    }\n\n    var diffs = deepDiff(leftParsed, rightParsed);\n    statsEl.style.display = 'flex';\n    statsEl.innerHTML = renderStats(diffs);\n    resultEl.innerHTML = renderDiff(diffs);\n  }\n\n  function formatInput(el, errEl) {\n    var parsed = tryParse(el.value, errEl, el);\n    if (parsed === undefined) return;\n    if (parsed === null \u0026\u0026 !el.value.trim()) return;\n    el.value = JSON.stringify(parsed, null, 2);\n    errEl.textContent = '';\n    el.classList.remove('error');\n  }\n\n  var sampleLeft = {\n    \"ユーザー\": {\n      \"id\": 1,\n      \"名前\": \"田中太郎\",\n      \"メール\": \"tanaka@example.com\",\n      \"役割\": \"管理者\",\n      \"有効\": true,\n      \"スコア\": 95\n    },\n    \"設定\": {\n      \"テーマ\": \"ダーク\",\n      \"通知\": true,\n      \"言語\": \"ja\"\n    },\n    \"タグ\": [\"開発者\", \"テスター\"]\n  };\n\n  var sampleRight = {\n    \"ユーザー\": {\n      \"id\": 1,\n      \"名前\": \"田中太郎\",\n      \"メール\": \"tanaka@newdomain.com\",\n      \"役割\": \"編集者\",\n      \"有効\": false,\n      \"スコア\": 98,\n      \"部署\": \"エンジニアリング\"\n    },\n    \"設定\": {\n      \"テーマ\": \"ライト\",\n      \"通知\": true,\n      \"言語\": \"ja\",\n      \"タイムゾーン\": \"Asia/Tokyo\"\n    },\n    \"タグ\": [\"開発者\", \"レビュアー\", \"リード\"]\n  };\n\n  document.getElementById('jd-compare').addEventListener('click', runCompare);\n\n  document.getElementById('jd-swap').addEventListener('click', function() {\n    var tmp = leftEl.value;\n    leftEl.value = rightEl.value;\n    rightEl.value = tmp;\n    errLeft.textContent = '';\n    errRight.textContent = '';\n    leftEl.classList.remove('error');\n    rightEl.classList.remove('error');\n  });\n\n  document.getElementById('jd-fmt-left').addEventListener('click', function() {\n    formatInput(leftEl, errLeft);\n  });\n\n  document.getElementById('jd-fmt-right').addEventListener('click', function() {\n    formatInput(rightEl, errRight);\n  });\n\n  document.getElementById('jd-sample').addEventListener('click', function() {\n    leftEl.value  = JSON.stringify(sampleLeft,  null, 2);\n    rightEl.value = JSON.stringify(sampleRight, null, 2);\n    errLeft.textContent  = '';\n    errRight.textContent = '';\n    leftEl.classList.remove('error');\n    rightEl.classList.remove('error');\n    runCompare();\n  });\n\n  document.getElementById('jd-clear').addEventListener('click', function() {\n    leftEl.value  = '';\n    rightEl.value = '';\n    errLeft.textContent  = '';\n    errRight.textContent = '';\n    leftEl.classList.remove('error');\n    rightEl.classList.remove('error');\n    statsEl.style.display = 'none';\n    resultEl.innerHTML = '\u003cdiv class=\"jd-empty-state\"\u003e両方のパネルにJSONを貼り付けて「比較する」をクリックしてください。\u003c/div\u003e';\n  });\n\n  var debTimer;\n  function maybeAutoCompare() {\n    clearTimeout(debTimer);\n    debTimer = setTimeout(function() {\n      if (leftEl.value.trim() \u0026\u0026 rightEl.value.trim()) {\n        runCompare();\n      }\n    }, 700);\n  }\n  leftEl.addEventListener('input',  maybeAutoCompare);\n  rightEl.addEventListener('input', maybeAutoCompare);\n\n  document.addEventListener('keydown', function(e) {\n    if ((e.ctrlKey || e.metaKey) \u0026\u0026 e.key === 'Enter') {\n      e.preventDefault();\n      runCompare();\n    }\n  });\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv class=\"jd-freee-cta\" style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003eAPI・開発ツールの経費管理もかんたんに\u003c/p\u003e","title":"JSON差分比較ツール"},{"content":" プレーンテキスト / 生のHTML ","permalink":"https://productivity-works.com/ja/tools/html-entity-converter/","summary":"\u003cstyle\u003e\n#hec-app *,#hec-app *::before,#hec-app *::after{box-sizing:border-box;margin:0;padding:0}\n#hec-app{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;max-width:900px;margin:0 auto;padding:16px;color:#1a1a2e}\n#hec-app h2{font-size:1.1rem;font-weight:600;margin-bottom:12px;color:#333}\n#hec-app .hec-panels{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:12px}\n@media(max-width:600px){#hec-app .hec-panels{grid-template-columns:1fr}}\n#hec-app .hec-panel label{display:block;font-size:.85rem;font-weight:600;color:#555;margin-bottom:6px}\n#hec-app textarea{width:100%;height:200px;padding:10px;border:1.5px solid #d0d5e8;border-radius:8px;font-size:.9rem;font-family:monospace;resize:vertical;background:#fafbff;transition:border-color .2s}\n#hec-app textarea:focus{outline:none;border-color:#4f6bed}\n#hec-app .hec-controls{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-bottom:20px}\n#hec-app button{padding:9px 20px;border:none;border-radius:7px;font-size:.9rem;font-weight:600;cursor:pointer;transition:background .2s,transform .1s}\n#hec-app button:active{transform:scale(.97)}\n#hec-app .btn-encode{background:#4f6bed;color:#fff}\n#hec-app .btn-encode:hover{background:#3a55d4}\n#hec-app .btn-decode{background:#22a67a;color:#fff}\n#hec-app .btn-decode:hover{background:#198a64}\n#hec-app .btn-copy-raw{background:#f0f2ff;color:#4f6bed;border:1.5px solid #c8cffa}\n#hec-app .btn-copy-raw:hover{background:#e0e4ff}\n#hec-app .btn-copy-enc{background:#f0f2ff;color:#22a67a;border:1.5px solid #b2e6d4}\n#hec-app .btn-copy-enc:hover{background:#e0f7f0}\n#hec-app .btn-clear{background:#f5f5f5;color:#666;border:1.5px solid #ddd}\n#hec-app .btn-clear:hover{background:#ebebeb}\n#hec-app .hec-toast{position:fixed;bottom:24px;right:24px;background:#333;color:#fff;padding:9px 18px;border-radius:8px;font-size:.85rem;opacity:0;pointer-events:none;transition:opacity .3s;z-index:9999}\n#hec-app .hec-toast.show{opacity:1}\n#hec-app .hec-ref{margin-top:8px}\n#hec-app .hec-ref h3{font-size:1rem;font-weight:600;color:#333;margin-bottom:10px}\n#hec-app .hec-ref table{width:100%;border-collapse:collapse;font-size:.85rem}\n#hec-app .hec-ref th{background:#f0f2ff;color:#4f6bed;padding:8px 10px;text-align:left;border-bottom:2px solid #d0d5e8}\n#hec-app .hec-ref td{padding:7px 10px;border-bottom:1px solid #eee;font-family:monospace}\n#hec-app .hec-ref tr:hover td{background:#fafbff}\n#hec-app .hec-ref td:first-child{font-size:1.1rem;text-align:center;font-family:inherit}\n#hec-app .hec-click-cell{cursor:pointer;color:#4f6bed;text-decoration:underline dotted}\n#hec-app .hec-click-cell:hover{color:#22a67a}\n\u003c/style\u003e\n\u003cdiv id=\"hec-app\"\u003e\n\u003cdiv class=\"hec-panels\"\u003e\n  \u003cdiv class=\"hec-panel\"\u003e\n    \u003clabel for=\"hec-raw\"\u003eプレーンテキスト / 生のHTML\u003c/label\u003e\n    \u003ctextarea id=\"hec-raw\" placeholder=\"ここにテキストを入力または貼り付けてください...\u0026#10;例: \u0026lt;こんにちは \u0026amp; \"世界\"\u0026gt;\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"hec-panel\"\u003e\n    \u003clabel for=\"hec-enc\"\u003eHTMLエンティティ\u003c/label\u003e\n    \u003ctextarea id=\"hec-enc\" placeholder=\"エンコード結果がここに表示されます...\u0026#10;例: \u0026amp;lt;こんにちは \u0026amp;amp; \u0026amp;quot;世界\u0026amp;quot;\u0026amp;gt;\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"hec-controls\"\u003e\n  \u003cbutton class=\"btn-encode\" onclick=\"hecEncode()\"\u003eエンコード \u0026rarr;\u003c/button\u003e\n  \u003cbutton class=\"btn-decode\" onclick=\"hecDecode()\"\u003e\u0026larr; デコード\u003c/button\u003e\n  \u003cbutton class=\"btn-copy-raw\" onclick=\"hecCopy('raw')\"\u003e生テキストをコピー\u003c/button\u003e\n  \u003cbutton class=\"btn-copy-enc\" onclick=\"hecCopy('enc')\"\u003eエンコード結果をコピー\u003c/button\u003e\n  \u003cbutton class=\"btn-clear\" onclick=\"hecClear()\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"hec-ref\"\u003e\n  \u003ch3\u003eよく使うHTMLエンティティ一覧\u003c/h3\u003e\n  \u003ctable\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n        \u003cth\u003e文字\u003c/th\u003e\n        \u003cth\u003e名前付きエンティティ\u003c/th\u003e\n        \u003cth\u003e数値コード\u003c/th\u003e\n        \u003cth\u003e16進コード\u003c/th\u003e\n        \u003cth\u003e説明\u003c/th\u003e\n      \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody id=\"hec-ref-body\"\u003e\u003c/tbody\u003e\n  \u003c/table\u003e\n  \u003cp style=\"font-size:.78rem;color:#888;margin-top:8px\"\u003eエンティティコードをクリックするとクリップボードにコピーされます。\u003c/p\u003e","title":"HTMLエンティティ変換ツール"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n数字→漢数字変換ツール｜大字・金額表記も対応【無料】 数字を漢数字または大字（壱弐参…）に瞬時に変換する無料ツールです。小切手・手形・領収書・契約書など、改ざん防止のために大字表記が必要な場面でそのままコピペしてお使いいただけます。\n数字→漢数字変換ツール 漢数字 大字 金額（¥） 変換結果がここに表示されます コピー 整数のみ対応。最大9,999兆（9,999,999,999,999,999）まで。 例： 1,234 1万 123,456 100万 1億 1兆 使い方 モードを選択 — 漢数字 / 大字 / 金額（¥）の3種類 数字を入力するだけで即座に変換 コピーボタンで結果をクリップボードへ 3つのモードの違い モード 入力 出力 漢数字 12345 一万二千三百四十五 大字 12345 壱万弐千参百四拾伍 金額（¥） 12345 金壱万弐千参百四拾伍円也 漢数字と大字の違い 漢数字は日常的な文書で使われる一般的な表記（一・二・三…）です。一方、**大字（だいじ）**は小切手・手形・領収書など公式文書で改ざん防止のために用いられる旧字体（壱・弐・参…）です。\n日本の法律・商業実務では、金融機関への提出書類や会社の重要契約書において大字表記が慣習的に（あるいは義務として）求められる場合があります。\nよくある使用場面 小切手・手形の記入（金額の大字表記） 領収書・請求書（正式な金額表記） 不動産・金融契約書（重要金額の改ざん防止） 遺言書・贈与契約書などの法的文書 寄付金・祝儀袋への金額記入 請求書・領収書の漢数字変換に便利。経理業務の効率化にはfreee\nfreeeを無料で試す\n","permalink":"https://productivity-works.com/ja/tools/number-to-words/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"数字漢数字変換ツール大字金額表記も対応無料\"\u003e数字→漢数字変換ツール｜大字・金額表記も対応【無料】\u003c/h1\u003e\n\u003cp\u003e数字を漢数字または大字（壱弐参…）に瞬時に変換する無料ツールです。小切手・手形・領収書・契約書など、改ざん防止のために大字表記が必要な場面でそのままコピペしてお使いいただけます。\u003c/p\u003e\n\u003cstyle\u003e\n#n2w-app * { box-sizing: border-box; }\n#n2w-app {\n  font-family: system-ui, -apple-system, 'Hiragino Sans', 'Yu Gothic', sans-serif;\n  max-width: 680px;\n  margin: 2rem auto;\n  color: #1e1b4b;\n}\n#n2w-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin: 0 0 1rem;\n  color: #1e1b4b;\n}\n#n2w-app .n2w-modes {\n  display: flex;\n  gap: 6px;\n  margin-bottom: 1.25rem;\n  flex-wrap: wrap;\n}\n#n2w-app .n2w-mode-btn {\n  padding: 7px 16px;\n  border: 2px solid #4f46e5;\n  border-radius: 999px;\n  background: #fff;\n  color: #4f46e5;\n  font-size: 0.85rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n#n2w-app .n2w-mode-btn.active {\n  background: #4f46e5;\n  color: #fff;\n}\n#n2w-app .n2w-mode-btn:hover:not(.active) {\n  background: #ede9fe;\n}\n#n2w-app .n2w-input-row {\n  display: flex;\n  gap: 10px;\n  align-items: center;\n  margin-bottom: 1.25rem;\n}\n#n2w-app .n2w-prefix {\n  font-size: 1.4rem;\n  font-weight: 700;\n  color: #4f46e5;\n  min-width: 20px;\n  text-align: right;\n}\n#n2w-app .n2w-input {\n  flex: 1;\n  padding: 12px 16px;\n  border: 2px solid #c7d2fe;\n  border-radius: 10px;\n  font-size: 1.3rem;\n  font-weight: 600;\n  color: #1e1b4b;\n  outline: none;\n  transition: border-color 0.15s;\n  -moz-appearance: textfield;\n}\n#n2w-app .n2w-input:focus {\n  border-color: #4f46e5;\n}\n#n2w-app .n2w-input::-webkit-inner-spin-button,\n#n2w-app .n2w-input::-webkit-outer-spin-button {\n  -webkit-appearance: none;\n}\n#n2w-app .n2w-result-box {\n  background: #f5f3ff;\n  border: 2px solid #c7d2fe;\n  border-radius: 12px;\n  padding: 1.25rem 1.5rem;\n  min-height: 70px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 12px;\n  margin-bottom: 1rem;\n}\n#n2w-app .n2w-result-text {\n  font-size: 1.15rem;\n  font-weight: 700;\n  color: #3730a3;\n  line-height: 1.6;\n  flex: 1;\n  word-break: break-all;\n}\n#n2w-app .n2w-result-text.placeholder {\n  color: #a5b4fc;\n  font-weight: 400;\n  font-style: italic;\n  font-size: 0.95rem;\n}\n#n2w-app .n2w-copy-btn {\n  flex-shrink: 0;\n  padding: 8px 16px;\n  background: #4f46e5;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 0.85rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n}\n#n2w-app .n2w-copy-btn:hover {\n  background: #4338ca;\n}\n#n2w-app .n2w-copy-btn:active {\n  transform: scale(0.96);\n}\n#n2w-app .n2w-copy-btn.copied {\n  background: #059669;\n}\n#n2w-app .n2w-hint {\n  font-size: 0.78rem;\n  color: #6b7280;\n  margin-bottom: 0.5rem;\n}\n#n2w-app .n2w-error {\n  color: #dc2626;\n  font-size: 0.85rem;\n  margin-top: -0.75rem;\n  margin-bottom: 0.75rem;\n  min-height: 1.2em;\n}\n#n2w-app .n2w-examples {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n  margin-top: 1rem;\n}\n#n2w-app .n2w-example-chip {\n  padding: 4px 12px;\n  background: #ede9fe;\n  color: #4f46e5;\n  border-radius: 999px;\n  font-size: 0.8rem;\n  font-weight: 700;\n  cursor: pointer;\n  border: none;\n  transition: background 0.15s;\n}\n#n2w-app .n2w-example-chip:hover {\n  background: #c7d2fe;\n}\n\u003c/style\u003e\n\u003cdiv id=\"n2w-app\"\u003e\n  \u003ch2\u003e数字→漢数字変換ツール\u003c/h2\u003e\n  \u003cdiv class=\"n2w-modes\"\u003e\n    \u003cbutton class=\"n2w-mode-btn active\" data-mode=\"kanji\" onclick=\"n2wSetMode('kanji')\"\u003e漢数字\u003c/button\u003e\n    \u003cbutton class=\"n2w-mode-btn\" data-mode=\"daiji\" onclick=\"n2wSetMode('daiji')\"\u003e大字\u003c/button\u003e\n    \u003cbutton class=\"n2w-mode-btn\" data-mode=\"kinmaku\" onclick=\"n2wSetMode('kinmaku')\"\u003e金額（¥）\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"n2w-input-row\"\u003e\n    \u003cspan class=\"n2w-prefix\" id=\"n2w-prefix\"\u003e\u003c/span\u003e\n    \u003cinput\n      class=\"n2w-input\"\n      id=\"n2w-input\"\n      type=\"number\"\n      inputmode=\"numeric\"\n      placeholder=\"数字を入力…\"\n      oninput=\"n2wConvert()\"\n    /\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"n2w-error\" id=\"n2w-error\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"n2w-result-box\"\u003e\n    \u003cspan class=\"n2w-result-text placeholder\" id=\"n2w-result\"\u003e変換結果がここに表示されます\u003c/span\u003e\n    \u003cbutton class=\"n2w-copy-btn\" id=\"n2w-copy-btn\" onclick=\"n2wCopy()\" style=\"display:none\"\u003eコピー\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"n2w-hint\" id=\"n2w-hint\"\u003e整数のみ対応。最大9,999兆（9,999,999,999,999,999）まで。\u003c/div\u003e\n  \u003cdiv class=\"n2w-examples\"\u003e\n    \u003cspan style=\"font-size:0.78rem;color:#6b7280;align-self:center;\"\u003e例：\u003c/span\u003e\n    \u003cbutton class=\"n2w-example-chip\" onclick=\"n2wSetExample('1234')\"\u003e1,234\u003c/button\u003e\n    \u003cbutton class=\"n2w-example-chip\" onclick=\"n2wSetExample('10000')\"\u003e1万\u003c/button\u003e\n    \u003cbutton class=\"n2w-example-chip\" onclick=\"n2wSetExample('123456')\"\u003e123,456\u003c/button\u003e\n    \u003cbutton class=\"n2w-example-chip\" onclick=\"n2wSetExample('1000000')\"\u003e100万\u003c/button\u003e\n    \u003cbutton class=\"n2w-example-chip\" onclick=\"n2wSetExample('100000000')\"\u003e1億\u003c/button\u003e\n    \u003cbutton class=\"n2w-example-chip\" onclick=\"n2wSetExample('1000000000000')\"\u003e1兆\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var _mode = 'kanji';\n\n  // 漢数字 digits and units\n  var kanjiDigits = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九'];\n  var kanjiUnits4 = ['', '万', '億', '兆'];\n  var kanjiUnits = ['', '十', '百', '千'];\n\n  // 大字\n  var daijiDigits = ['零', '壱', '弐', '参', '四', '伍', '六', '七', '八', '九'];\n  var daijiUnits = ['', '拾', '百', '千'];\n  var daijiUnits4 = ['', '万', '億', '兆'];\n\n  function chunk4ToKanji(n, digits, units, units4, omitOne) {\n    // n is 0..9999, returns kanji string (no unit above 千 here)\n    if (n === 0) return '';\n    var result = '';\n    var d3 = Math.floor(n / 1000);\n    var d2 = Math.floor((n % 1000) / 100);\n    var d1 = Math.floor((n % 100) / 10);\n    var d0 = n % 10;\n    if (d3 \u003e 0) {\n      // omit \"一\" before 千 in standard kanji, keep in daiji\n      result += (omitOne \u0026\u0026 d3 === 1 ? '' : digits[d3]) + units[3];\n    }\n    if (d2 \u003e 0) {\n      result += (omitOne \u0026\u0026 d2 === 1 ? '' : digits[d2]) + units[2];\n    }\n    if (d1 \u003e 0) {\n      result += (omitOne \u0026\u0026 d1 === 1 ? '' : digits[d1]) + units[1];\n    }\n    if (d0 \u003e 0) {\n      result += digits[d0];\n    }\n    return result;\n  }\n\n  function toKanji(n, digits, units, units4, omitOne) {\n    if (n === 0) return '零';\n    var neg = n \u003c 0;\n    var abs = Math.abs(n);\n    if (abs \u003e 9999999999999999) return null;\n\n    // Split into groups of 4 from right: [兆, 億, 万, ones]\n    var t = Math.floor(abs / 1000000000000);\n    var rem = abs % 1000000000000;\n    var ok = Math.floor(rem / 100000000);\n    rem = rem % 100000000;\n    var man = Math.floor(rem / 10000);\n    var sen = rem % 10000;\n\n    var parts = [];\n    if (t \u003e 0) {\n      // For 兆 group: omitOne if the group value is exactly 1 (i.e. 一兆)\n      var s = chunk4ToKanji(t, digits, units, units4, omitOne);\n      parts.push(s + units4[3]);\n    }\n    if (ok \u003e 0) {\n      var s = chunk4ToKanji(ok, digits, units, units4, omitOne);\n      parts.push(s + units4[2]);\n    }\n    if (man \u003e 0) {\n      var s = chunk4ToKanji(man, digits, units, units4, omitOne);\n      parts.push(s + units4[1]);\n    }\n    if (sen \u003e 0) {\n      parts.push(chunk4ToKanji(sen, digits, units, units4, omitOne));\n    }\n\n    var result = parts.join('');\n    return neg ? '負' + result : result;\n  }\n\n  function toKanjiStandard(n) {\n    return toKanji(n, kanjiDigits, kanjiUnits, kanjiUnits4, true);\n  }\n\n  function toDaiji(n) {\n    return toKanji(n, daijiDigits, daijiUnits, daijiUnits4, false);\n  }\n\n  function toKinmaku(n) {\n    // 金額モード: 金[大字]円也\n    // Supports integers only\n    if (n === 0) return '金零円也';\n    var neg = n \u003c 0;\n    var abs = Math.abs(n);\n    var words = toDaiji(abs);\n    if (!words) return null;\n    // Replace 万 with 万, insert 拾 for tens in daiji properly — toDaiji already handles this.\n    // Add 金...円也 wrapper\n    var result = '金' + words + '円也';\n    return neg ? '（マイナス）' + result : result;\n  }\n\n  window.n2wSetMode = function(mode) {\n    _mode = mode;\n    document.querySelectorAll('#n2w-app .n2w-mode-btn').forEach(function(b) {\n      b.classList.toggle('active', b.dataset.mode === mode);\n    });\n    var prefix = document.getElementById('n2w-prefix');\n    prefix.textContent = mode === 'kinmaku' ? '¥' : '';\n    var hint = document.getElementById('n2w-hint');\n    if (mode === 'kanji') {\n      hint.textContent = '漢数字（一二三…）に変換。整数のみ、最大9,999兆まで。';\n    } else if (mode === 'daiji') {\n      hint.textContent = '大字（壱弐参…）に変換。公式文書・契約書向け。整数のみ。';\n    } else {\n      hint.textContent = '金額の大字表記（金壱万弐千参百四拾五円也）に変換。小切手・領収書向け。';\n    }\n    n2wConvert();\n  };\n\n  window.n2wSetExample = function(val) {\n    document.getElementById('n2w-input').value = val;\n    n2wConvert();\n  };\n\n  window.n2wConvert = function() {\n    var raw = document.getElementById('n2w-input').value.trim();\n    var resultEl = document.getElementById('n2w-result');\n    var errorEl = document.getElementById('n2w-error');\n    var copyBtn = document.getElementById('n2w-copy-btn');\n\n    errorEl.textContent = '';\n\n    if (raw === '' || raw === '-') {\n      resultEl.textContent = '変換結果がここに表示されます';\n      resultEl.classList.add('placeholder');\n      copyBtn.style.display = 'none';\n      return;\n    }\n\n    if (raw.indexOf('.') !== -1) {\n      errorEl.textContent = '整数のみ対応しています。小数は入力できません。';\n      resultEl.textContent = '変換結果がここに表示されます';\n      resultEl.classList.add('placeholder');\n      copyBtn.style.display = 'none';\n      return;\n    }\n\n    var num = parseInt(raw, 10);\n    if (isNaN(num)) {\n      errorEl.textContent = '有効な数字を入力してください。';\n      resultEl.textContent = '変換結果がここに表示されます';\n      resultEl.classList.add('placeholder');\n      copyBtn.style.display = 'none';\n      return;\n    }\n\n    if (Math.abs(num) \u003e 9999999999999999) {\n      errorEl.textContent = '数が大きすぎます。最大 9,999兆（9,999,999,999,999,999）まで対応しています。';\n      resultEl.textContent = '変換結果がここに表示されます';\n      resultEl.classList.add('placeholder');\n      copyBtn.style.display = 'none';\n      return;\n    }\n\n    var result;\n    if (_mode === 'kanji') {\n      result = toKanjiStandard(num);\n    } else if (_mode === 'daiji') {\n      result = toDaiji(num);\n    } else {\n      result = toKinmaku(num);\n    }\n\n    if (!result) {\n      errorEl.textContent = '変換できませんでした。入力を確認してください。';\n      resultEl.textContent = '変換結果がここに表示されます';\n      resultEl.classList.add('placeholder');\n      copyBtn.style.display = 'none';\n      return;\n    }\n\n    resultEl.textContent = result;\n    resultEl.classList.remove('placeholder');\n    copyBtn.style.display = 'inline-block';\n    copyBtn.textContent = 'コピー';\n    copyBtn.classList.remove('copied');\n  };\n\n  window.n2wCopy = function() {\n    var text = document.getElementById('n2w-result').textContent;\n    var btn = document.getElementById('n2w-copy-btn');\n    if (!text || text === '変換結果がここに表示されます') return;\n    if (navigator.clipboard \u0026\u0026 navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).then(function() {\n        btn.textContent = 'コピー完了!';\n        btn.classList.add('copied');\n        setTimeout(function() {\n          btn.textContent = 'コピー';\n          btn.classList.remove('copied');\n        }, 2000);\n      });\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = text;\n      ta.style.position = 'fixed';\n      ta.style.opacity = '0';\n      document.body.appendChild(ta);\n      ta.select();\n      try { document.execCommand('copy'); } catch(e) {}\n      document.body.removeChild(ta);\n      btn.textContent = 'コピー完了!';\n      btn.classList.add('copied');\n      setTimeout(function() {\n        btn.textContent = 'コピー';\n        btn.classList.remove('copied');\n      }, 2000);\n    }\n  };\n})();\n\u003c/script\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eモードを選択\u003c/strong\u003e — 漢数字 / 大字 / 金額（¥）の3種類\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e数字を入力\u003c/strong\u003eするだけで即座に変換\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eコピーボタン\u003c/strong\u003eで結果をクリップボードへ\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"3つのモードの違い\"\u003e3つのモードの違い\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eモード\u003c/th\u003e\n          \u003cth\u003e入力\u003c/th\u003e\n          \u003cth\u003e出力\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e漢数字\u003c/td\u003e\n          \u003ctd\u003e12345\u003c/td\u003e\n          \u003ctd\u003e一万二千三百四十五\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e大字\u003c/td\u003e\n          \u003ctd\u003e12345\u003c/td\u003e\n          \u003ctd\u003e壱万弐千参百四拾伍\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e金額（¥）\u003c/td\u003e\n          \u003ctd\u003e12345\u003c/td\u003e\n          \u003ctd\u003e金壱万弐千参百四拾伍円也\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"漢数字と大字の違い\"\u003e漢数字と大字の違い\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e漢数字\u003c/strong\u003eは日常的な文書で使われる一般的な表記（一・二・三…）です。一方、**大字（だいじ）**は小切手・手形・領収書など公式文書で改ざん防止のために用いられる旧字体（壱・弐・参…）です。\u003c/p\u003e","title":"数字→漢数字変換ツール｜大字・金額表記も対応【無料】"},{"content":" 進数変換 テキスト → バイナリ バイナリ → テキスト 進数変換 2進数（Base 2） 8進数（Base 8） 10進数（Base 10） 16進数（Base 16） 2進数（Base 2） — コピー 8進数（Base 8） — コピー 10進数（Base 10） — コピー 16進数（Base 16） — コピー ビット操作表示 8ビット 16ビット 32ビット 2の補数（負の数） テキスト → バイナリ 入力テキスト バイナリ出力（1文字 = 8ビット） バイナリをコピー クリア バイナリ → テキスト バイナリ入力（スペース区切りの8ビットグループ） テキスト出力 テキストをコピー クリア 開発業務の経費管理にはfreee freeeを無料で試す\n","permalink":"https://productivity-works.com/ja/tools/binary-converter/","summary":"\u003cdiv id=\"bin-app\"\u003e\n\u003cstyle\u003e\n#bin-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n  background: #0f172a;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  max-width: 860px;\n  margin: 0 auto;\n  box-sizing: border-box;\n}\n#bin-app * { box-sizing: border-box; }\n\n#bin-app h2 {\n  color: #06b6d4;\n  font-size: 1.1rem;\n  margin: 0 0 16px;\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-transform: uppercase;\n}\n\n#bin-app .mode-tabs {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 20px;\n  flex-wrap: wrap;\n}\n#bin-app .mode-tab {\n  padding: 8px 18px;\n  border-radius: 8px;\n  border: 1.5px solid #334155;\n  background: #1e293b;\n  color: #94a3b8;\n  cursor: pointer;\n  font-size: 0.9rem;\n  font-weight: 500;\n  transition: all 0.15s;\n}\n#bin-app .mode-tab.active,\n#bin-app .mode-tab:hover {\n  border-color: #06b6d4;\n  background: #0e4a58;\n  color: #06b6d4;\n}\n\n#bin-app .input-row {\n  display: flex;\n  gap: 10px;\n  margin-bottom: 18px;\n  align-items: stretch;\n  flex-wrap: wrap;\n}\n#bin-app .input-row select {\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  color: #e2e8f0;\n  border-radius: 8px;\n  padding: 10px 12px;\n  font-size: 0.9rem;\n  cursor: pointer;\n  min-width: 160px;\n}\n#bin-app .input-row select:focus { outline: none; border-color: #06b6d4; }\n#bin-app #main-input {\n  flex: 1;\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  color: #e2e8f0;\n  border-radius: 8px;\n  padding: 10px 14px;\n  font-size: 1rem;\n  font-family: 'Courier New', monospace;\n  min-width: 0;\n  transition: border-color 0.15s;\n}\n#bin-app #main-input:focus { outline: none; border-color: #06b6d4; }\n#bin-app #main-input.error { border-color: #ef4444; }\n\n#bin-app .error-msg {\n  color: #ef4444;\n  font-size: 0.82rem;\n  margin-top: -12px;\n  margin-bottom: 14px;\n  min-height: 16px;\n}\n\n#bin-app .outputs-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n  margin-bottom: 20px;\n}\n@media (max-width: 560px) {\n  #bin-app .outputs-grid { grid-template-columns: 1fr; }\n}\n\n#bin-app .output-card {\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  border-radius: 10px;\n  padding: 14px;\n}\n#bin-app .output-card .label {\n  font-size: 0.75rem;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  margin-bottom: 6px;\n  font-weight: 600;\n}\n#bin-app .output-card .value {\n  font-family: 'Courier New', monospace;\n  font-size: 0.95rem;\n  color: #06b6d4;\n  word-break: break-all;\n  min-height: 22px;\n  margin-bottom: 10px;\n  line-height: 1.5;\n}\n#bin-app .output-card .copy-btn {\n  background: #0e4a58;\n  border: 1px solid #06b6d4;\n  color: #06b6d4;\n  border-radius: 6px;\n  padding: 5px 12px;\n  font-size: 0.78rem;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#bin-app .output-card .copy-btn:hover { background: #06b6d4; color: #0f172a; }\n#bin-app .output-card .copy-btn.copied { background: #06b6d4; color: #0f172a; }\n\n#bin-app .bit-section {\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 20px;\n}\n#bin-app .bit-toggle-row {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 14px;\n  flex-wrap: wrap;\n}\n#bin-app .bit-toggle {\n  padding: 5px 14px;\n  border-radius: 6px;\n  border: 1px solid #334155;\n  background: #0f172a;\n  color: #94a3b8;\n  cursor: pointer;\n  font-size: 0.82rem;\n  font-weight: 500;\n  transition: all 0.15s;\n}\n#bin-app .bit-toggle.active,\n#bin-app .bit-toggle:hover {\n  border-color: #06b6d4;\n  color: #06b6d4;\n  background: #0e4a58;\n}\n\n#bin-app .bit-grid {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 4px;\n}\n#bin-app .bit-cell {\n  width: 32px;\n  height: 32px;\n  border-radius: 5px;\n  border: 1px solid #334155;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  font-family: 'Courier New', monospace;\n  font-size: 0.85rem;\n  font-weight: 700;\n  color: #94a3b8;\n  background: #0f172a;\n}\n#bin-app .bit-cell.one {\n  background: #0e4a58;\n  border-color: #06b6d4;\n  color: #06b6d4;\n}\n#bin-app .bit-cell .bit-idx {\n  font-size: 0.5rem;\n  color: #475569;\n  font-weight: 400;\n  margin-top: 1px;\n}\n\n#bin-app .twos-section {\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 20px;\n}\n#bin-app .twos-row {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n#bin-app .twos-line {\n  display: flex;\n  gap: 12px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n#bin-app .twos-line .t-label {\n  font-size: 0.78rem;\n  color: #64748b;\n  min-width: 140px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n#bin-app .twos-line .t-val {\n  font-family: 'Courier New', monospace;\n  font-size: 0.92rem;\n  color: #a5f3fc;\n  word-break: break-all;\n}\n\n#bin-app .text-section {\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 12px;\n}\n#bin-app .text-section textarea {\n  width: 100%;\n  background: #0f172a;\n  border: 1.5px solid #334155;\n  color: #e2e8f0;\n  border-radius: 8px;\n  padding: 10px 12px;\n  font-family: 'Courier New', monospace;\n  font-size: 0.9rem;\n  resize: vertical;\n  min-height: 90px;\n  transition: border-color 0.15s;\n}\n#bin-app .text-section textarea:focus { outline: none; border-color: #06b6d4; }\n#bin-app .text-out {\n  margin-top: 12px;\n  padding: 10px 12px;\n  background: #0f172a;\n  border-radius: 8px;\n  font-family: 'Courier New', monospace;\n  font-size: 0.85rem;\n  color: #06b6d4;\n  word-break: break-all;\n  min-height: 44px;\n  line-height: 1.7;\n}\n#bin-app .text-actions {\n  display: flex;\n  gap: 8px;\n  margin-top: 10px;\n  flex-wrap: wrap;\n}\n#bin-app .text-actions button {\n  background: #0e4a58;\n  border: 1px solid #06b6d4;\n  color: #06b6d4;\n  border-radius: 6px;\n  padding: 6px 14px;\n  font-size: 0.82rem;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#bin-app .text-actions button:hover { background: #06b6d4; color: #0f172a; }\n#bin-app .text-actions button.copied { background: #06b6d4; color: #0f172a; }\n\n#bin-app .section-title {\n  font-size: 0.78rem;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  font-weight: 600;\n  margin-bottom: 10px;\n}\n\u003c/style\u003e\n\u003c!-- モード切替タブ --\u003e\n\u003cdiv class=\"mode-tabs\"\u003e\n  \u003cbutton class=\"mode-tab active\" onclick=\"binSetMode('number')\" id=\"tab-number\"\u003e進数変換\u003c/button\u003e\n  \u003cbutton class=\"mode-tab\" onclick=\"binSetMode('text2bin')\" id=\"tab-text2bin\"\u003eテキスト → バイナリ\u003c/button\u003e\n  \u003cbutton class=\"mode-tab\" onclick=\"binSetMode('bin2text')\" id=\"tab-bin2text\"\u003eバイナリ → テキスト\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- 進数変換モード --\u003e\n\u003cdiv id=\"mode-number\"\u003e\n  \u003ch2\u003e進数変換\u003c/h2\u003e\n  \u003cdiv class=\"input-row\"\u003e\n    \u003cselect id=\"base-select\" onchange=\"binConvert()\"\u003e\n      \u003coption value=\"2\"\u003e2進数（Base 2）\u003c/option\u003e\n      \u003coption value=\"8\"\u003e8進数（Base 8）\u003c/option\u003e\n      \u003coption value=\"10\" selected\u003e10進数（Base 10）\u003c/option\u003e\n      \u003coption value=\"16\"\u003e16進数（Base 16）\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cinput type=\"text\" id=\"main-input\" placeholder=\"数値を入力...\" oninput=\"binConvert()\" autocomplete=\"off\" spellcheck=\"false\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"error-msg\" id=\"error-msg\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"outputs-grid\"\u003e\n    \u003cdiv class=\"output-card\"\u003e\n      \u003cdiv class=\"label\"\u003e2進数（Base 2）\u003c/div\u003e\n      \u003cdiv class=\"value\" id=\"out-bin\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"copy-btn\" onclick=\"binCopy('out-bin', this)\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"output-card\"\u003e\n      \u003cdiv class=\"label\"\u003e8進数（Base 8）\u003c/div\u003e\n      \u003cdiv class=\"value\" id=\"out-oct\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"copy-btn\" onclick=\"binCopy('out-oct', this)\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"output-card\"\u003e\n      \u003cdiv class=\"label\"\u003e10進数（Base 10）\u003c/div\u003e\n      \u003cdiv class=\"value\" id=\"out-dec\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"copy-btn\" onclick=\"binCopy('out-dec', this)\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"output-card\"\u003e\n      \u003cdiv class=\"label\"\u003e16進数（Base 16）\u003c/div\u003e\n      \u003cdiv class=\"value\" id=\"out-hex\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"copy-btn\" onclick=\"binCopy('out-hex', this)\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- ビット操作表示 --\u003e\n  \u003cdiv class=\"bit-section\"\u003e\n    \u003cdiv class=\"section-title\"\u003eビット操作表示\u003c/div\u003e\n    \u003cdiv class=\"bit-toggle-row\"\u003e\n      \u003cbutton class=\"bit-toggle active\" onclick=\"binSetBits(8, this)\"\u003e8ビット\u003c/button\u003e\n      \u003cbutton class=\"bit-toggle\" onclick=\"binSetBits(16, this)\"\u003e16ビット\u003c/button\u003e\n      \u003cbutton class=\"bit-toggle\" onclick=\"binSetBits(32, this)\"\u003e32ビット\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"bit-grid\" id=\"bit-grid\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 2の補数表示 --\u003e\n  \u003cdiv class=\"twos-section\" id=\"twos-section\" style=\"display:none\"\u003e\n    \u003cdiv class=\"section-title\"\u003e2の補数（負の数）\u003c/div\u003e\n    \u003cdiv class=\"twos-row\" id=\"twos-rows\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- テキスト → バイナリモード --\u003e\n\u003cdiv id=\"mode-text2bin\" style=\"display:none\"\u003e\n  \u003ch2\u003eテキスト → バイナリ\u003c/h2\u003e\n  \u003cdiv class=\"text-section\"\u003e\n    \u003cdiv class=\"section-title\"\u003e入力テキスト\u003c/div\u003e\n    \u003ctextarea id=\"t2b-input\" placeholder=\"テキストを入力または貼り付け...\" oninput=\"binText2Bin()\"\u003e\u003c/textarea\u003e\n    \u003cdiv class=\"section-title\" style=\"margin-top:14px\"\u003eバイナリ出力（1文字 = 8ビット）\u003c/div\u003e\n    \u003cdiv class=\"text-out\" id=\"t2b-output\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"text-actions\"\u003e\n      \u003cbutton onclick=\"binCopyEl('t2b-output', this)\"\u003eバイナリをコピー\u003c/button\u003e\n      \u003cbutton onclick=\"binClearText('t2b-input','t2b-output')\"\u003eクリア\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- バイナリ → テキストモード --\u003e\n\u003cdiv id=\"mode-bin2text\" style=\"display:none\"\u003e\n  \u003ch2\u003eバイナリ → テキスト\u003c/h2\u003e\n  \u003cdiv class=\"text-section\"\u003e\n    \u003cdiv class=\"section-title\"\u003eバイナリ入力（スペース区切りの8ビットグループ）\u003c/div\u003e\n    \u003ctextarea id=\"b2t-input\" placeholder=\"01001000 01100101 01101100 01101100 01101111\" oninput=\"binBin2Text()\"\u003e\u003c/textarea\u003e\n    \u003cdiv class=\"section-title\" style=\"margin-top:14px\"\u003eテキスト出力\u003c/div\u003e\n    \u003cdiv class=\"text-out\" id=\"b2t-output\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"text-actions\"\u003e\n      \u003cbutton onclick=\"binCopyEl('b2t-output', this)\"\u003eテキストをコピー\u003c/button\u003e\n      \u003cbutton onclick=\"binClearText('b2t-input','b2t-output')\"\u003eクリア\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var _bitWidth = 8;\n  var _currentVal = null;\n\n  window.binSetMode = function(mode) {\n    ['number','text2bin','bin2text'].forEach(function(m) {\n      document.getElementById('mode-'+m).style.display = (m === mode) ? '' : 'none';\n      var tab = document.getElementById('tab-'+m);\n      if (tab) tab.classList.toggle('active', m === mode);\n    });\n  };\n\n  window.binConvert = function() {\n    var inp = document.getElementById('main-input').value.trim();\n    var base = parseInt(document.getElementById('base-select').value);\n    var errEl = document.getElementById('error-msg');\n    var mainInp = document.getElementById('main-input');\n\n    if (!inp) {\n      ['out-bin','out-oct','out-dec','out-hex'].forEach(function(id) {\n        document.getElementById(id).textContent = '—';\n      });\n      document.getElementById('twos-section').style.display = 'none';\n      mainInp.classList.remove('error');\n      errEl.textContent = '';\n      _currentVal = null;\n      binRenderBits(null);\n      return;\n    }\n\n    var patterns = { 2: /^-?[01]+$/, 8: /^-?[0-7]+$/, 10: /^-?\\d+$/, 16: /^-?[0-9a-fA-F]+$/ };\n    if (!patterns[base].test(inp)) {\n      mainInp.classList.add('error');\n      errEl.textContent = '選択した進数で無効な文字が含まれています。';\n      return;\n    }\n    mainInp.classList.remove('error');\n    errEl.textContent = '';\n\n    var isNeg = inp.startsWith('-');\n    var absStr = isNeg ? inp.slice(1) : inp;\n    var n;\n    try {\n      if (base === 10) { n = BigInt(inp); }\n      else {\n        var pos = BigInt('0x' + (base === 16 ? absStr : parseInt(absStr, base).toString(16)));\n        n = isNeg ? -pos : pos;\n      }\n    } catch(e) {\n      mainInp.classList.add('error');\n      errEl.textContent = '数値が大きすぎるか無効です。';\n      return;\n    }\n\n    _currentVal = n;\n\n    var absN = n \u003c 0n ? -n : n;\n    document.getElementById('out-bin').textContent = (n \u003c 0n ? '-' : '') + absN.toString(2);\n    document.getElementById('out-oct').textContent = (n \u003c 0n ? '-' : '') + absN.toString(8);\n    document.getElementById('out-dec').textContent = n.toString(10);\n    document.getElementById('out-hex').textContent = (n \u003c 0n ? '-' : '') + absN.toString(16).toUpperCase();\n\n    binRenderBits(n);\n    binRenderTwos(n);\n  };\n\n  window.binSetBits = function(w, btn) {\n    _bitWidth = w;\n    document.querySelectorAll('#bin-app .bit-toggle').forEach(function(b) { b.classList.remove('active'); });\n    btn.classList.add('active');\n    binRenderBits(_currentVal);\n  };\n\n  function binRenderBits(n) {\n    var grid = document.getElementById('bit-grid');\n    grid.innerHTML = '';\n    var bits = [];\n    if (n === null || n === undefined) {\n      for (var i = 0; i \u003c _bitWidth; i++) bits.push(0);\n    } else {\n      var absN = n \u003c 0n ? -n : n;\n      var binStr;\n      if (n \u003c 0n) {\n        binStr = twosComplementStr(n, _bitWidth);\n      } else {\n        binStr = absN.toString(2).slice(-_bitWidth).padStart(_bitWidth, '0');\n      }\n      for (var j = 0; j \u003c binStr.length; j++) bits.push(parseInt(binStr[j]));\n    }\n    for (var k = 0; k \u003c bits.length; k++) {\n      var cell = document.createElement('div');\n      cell.className = 'bit-cell' + (bits[k] ? ' one' : '');\n      var bval = document.createElement('div');\n      bval.textContent = bits[k];\n      var bidx = document.createElement('div');\n      bidx.className = 'bit-idx';\n      bidx.textContent = (bits.length - 1 - k);\n      cell.appendChild(bval);\n      cell.appendChild(bidx);\n      grid.appendChild(cell);\n    }\n  }\n\n  function twosComplementStr(n, width) {\n    var mask = (1n \u003c\u003c BigInt(width)) - 1n;\n    var tc = (((-n) ^ mask) + 1n) \u0026 mask;\n    return tc.toString(2).padStart(width, '0');\n  }\n\n  function binRenderTwos(n) {\n    var sec = document.getElementById('twos-section');\n    var rows = document.getElementById('twos-rows');\n    if (n === null || n \u003e= 0n) { sec.style.display = 'none'; return; }\n    sec.style.display = '';\n    var absN = -n;\n    var w = _bitWidth;\n    if (absN \u003e= (1n \u003c\u003c BigInt(w - 1))) w = 16;\n    if (absN \u003e= (1n \u003c\u003c BigInt(w - 1))) w = 32;\n    if (absN \u003e= (1n \u003c\u003c BigInt(w - 1))) w = 64;\n\n    var original = absN.toString(2).padStart(w, '0');\n    var inverted = '';\n    for (var i = 0; i \u003c original.length; i++) inverted += original[i] === '0' ? '1' : '0';\n    var tc = twosComplementStr(n, w);\n    var decVal = n.toString(10);\n\n    rows.innerHTML = '';\n    [\n      ['元の値（絶対値）', original],\n      ['ビット反転（1の補数）', inverted],\n      ['2の補数（' + w + 'ビット）', tc],\n      ['10進数値', decVal]\n    ].forEach(function(pair) {\n      var row = document.createElement('div');\n      row.className = 'twos-line';\n      row.innerHTML = '\u003cspan class=\"t-label\"\u003e' + pair[0] + '\u003c/span\u003e\u003cspan class=\"t-val\"\u003e' + pair[1] + '\u003c/span\u003e';\n      rows.appendChild(row);\n    });\n  }\n\n  window.binCopy = function(id, btn) {\n    var text = document.getElementById(id).textContent;\n    if (text === '—' || !text) return;\n    navigator.clipboard.writeText(text).then(function() {\n      btn.textContent = 'コピー済！';\n      btn.classList.add('copied');\n      setTimeout(function() { btn.textContent = 'コピー'; btn.classList.remove('copied'); }, 1500);\n    });\n  };\n\n  window.binCopyEl = function(id, btn) {\n    var text = document.getElementById(id).textContent;\n    if (!text) return;\n    navigator.clipboard.writeText(text).then(function() {\n      var orig = btn.textContent;\n      btn.textContent = 'コピー済！';\n      btn.classList.add('copied');\n      setTimeout(function() { btn.textContent = orig; btn.classList.remove('copied'); }, 1500);\n    });\n  };\n\n  window.binText2Bin = function() {\n    var text = document.getElementById('t2b-input').value;\n    var out = document.getElementById('t2b-output');\n    if (!text) { out.textContent = ''; return; }\n    var result = Array.from(text).map(function(ch) {\n      return ch.charCodeAt(0).toString(2).padStart(8, '0');\n    }).join(' ');\n    out.textContent = result;\n  };\n\n  window.binBin2Text = function() {\n    var raw = document.getElementById('b2t-input').value.trim();\n    var out = document.getElementById('b2t-output');\n    if (!raw) { out.textContent = ''; return; }\n    var groups = raw.split(/\\s+/);\n    var result = '';\n    var valid = true;\n    groups.forEach(function(g) {\n      if (/^[01]{1,8}$/.test(g)) {\n        result += String.fromCharCode(parseInt(g, 2));\n      } else {\n        valid = false;\n      }\n    });\n    out.textContent = valid ? result : result + '（一部のグループが無効です）';\n  };\n\n  window.binClearText = function(inId, outId) {\n    document.getElementById(inId).value = '';\n    document.getElementById(outId).textContent = '';\n  };\n\n  binRenderBits(null);\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e開発業務の経費管理にはfreee\u003c/strong\u003e\n\u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" rel=\"nofollow\"\u003efreeeを無料で試す\u003c/a\u003e\u003c/p\u003e","title":"2進数・16進数・10進数変換ツール - 無料オンライン進数変換"},{"content":" \u0026#9998; Markdownエディター サンプル読み込み クリア \u0026#9790; ダーク \u0026#x26F6; 全画面 HTMLをコピー \u0026#11015; .md保存 .html書き出し B I S H1 H2 H3 \u0026#128279; \u0026#128247; `c` ``` \u0026gt; \u0026#8226; ul 1. ol \u0026#9744; \u0026#9776; \u0026#8212; \u0026#9998; エディター 1 \u0026#128065; プレビュー 単語数: 0 文字数: 0 行数: 0 読了: 0 分 \u0026#10003; 自動保存済み ドキュメント管理を整えたら、経理もデジタル化しませんか？\nMarkdownで執筆・管理している方へ。確定申告・会計もクラウドで簡単に。freeeなら領収書スキャンから申告まで一括対応。\nfreeeを無料で試す \u0026#8594; 関連ツール： マークダウンプレビュー \u0026nbsp;\u0026middot;\u0026nbsp; Markdownテーブルジェネレーター \u0026nbsp;\u0026middot;\u0026nbsp; Markdown目次ジェネレーター 関連記事 AIを使ったブログ記事の書き方入門【2026年版・SEOで上位表示を狙う方法】 ChatGPTで議事録を自動作成する方法【コピペOKテンプレート付き】 Notion使い方完全ガイド2026年版【初心者向けセットアップ解説】 ","permalink":"https://productivity-works.com/ja/tools/markdown-editor/","summary":"\u003cdiv id=\"me-app\"\u003e\n\u003cstyle\u003e\n/* ── Reset \u0026 Root ─────────────────────────────────────── */\n#me-app {\n  font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif;\n  max-width: 1200px;\n  margin: 0 auto;\n  color: #1e1b4b;\n  --accent: #7c3aed;\n  --accent-dk: #6d28d9;\n  --accent-lt: #ede9fe;\n  --bg: #f8f7ff;\n  --surface: #ffffff;\n  --border: #d8d3f0;\n  --text: #1e1b4b;\n  --text-muted: #6b7280;\n  --code-bg: #f3f0ff;\n  --preview-bg: #ffffff;\n  --editor-bg: #fafafe;\n  --status-bg: #f3f0ff;\n  --btn-ghost: #ede9fe;\n  --btn-ghost-text: #5b21b6;\n  --toolbar-bg: #f5f3ff;\n  --shadow: 0 2px 12px rgba(124,58,237,0.10);\n  --radius: 10px;\n}\n#me-app * { box-sizing: border-box; }\n\n/* ── Dark theme ───────────────────────────────────────── */\n#me-app.me-dark {\n  --bg: #0f0e1a;\n  --surface: #1a1828;\n  --border: #3b3660;\n  --text: #e5e1ff;\n  --text-muted: #9d97c4;\n  --code-bg: #2a2540;\n  --preview-bg: #1a1828;\n  --editor-bg: #15132a;\n  --status-bg: #1a1828;\n  --btn-ghost: #2a2540;\n  --btn-ghost-text: #c4b5fd;\n  --toolbar-bg: #1a1828;\n  --shadow: 0 2px 12px rgba(0,0,0,0.40);\n  color: var(--text);\n}\n#me-app.me-dark #me-editor { color: #e5e1ff; background: var(--editor-bg); }\n#me-app.me-dark #me-fmt-toolbar { background: var(--toolbar-bg); border-color: var(--border); }\n\n/* ── Top Bar ──────────────────────────────────────────── */\n#me-topbar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  gap: 8px;\n  background: var(--surface);\n  border: 1px solid var(--border);\n  border-radius: var(--radius) var(--radius) 0 0;\n  padding: 10px 14px;\n  box-shadow: var(--shadow);\n}\n#me-title {\n  font-weight: 700;\n  font-size: 1rem;\n  color: var(--accent);\n  letter-spacing: -0.01em;\n}\n#me-topbar-btns {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n}\n\n/* ── Formatting Toolbar ───────────────────────────────── */\n#me-fmt-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 3px;\n  background: var(--toolbar-bg);\n  border-left: 1px solid var(--border);\n  border-right: 1px solid var(--border);\n  border-bottom: 1px solid var(--border);\n  padding: 7px 10px;\n}\n.me-sep {\n  width: 1px;\n  height: 20px;\n  background: var(--border);\n  margin: 0 4px;\n  flex-shrink: 0;\n}\n.me-fmt-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: 30px;\n  height: 28px;\n  padding: 0 7px;\n  border: 1px solid var(--border);\n  border-radius: 5px;\n  background: var(--surface);\n  color: var(--text);\n  font-size: 0.8rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.12s, border-color 0.12s, transform 0.1s;\n  white-space: nowrap;\n  line-height: 1;\n  font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic ProN', Meiryo, sans-serif;\n}\n.me-fmt-btn:hover {\n  background: var(--accent-lt);\n  border-color: var(--accent);\n  color: var(--accent);\n}\n.me-fmt-btn:active { transform: scale(0.93); }\n\n/* ── Generic Buttons ──────────────────────────────────── */\n.me-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 6px 13px;\n  border: none;\n  border-radius: 6px;\n  font-size: 0.82rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n  line-height: 1.2;\n  white-space: nowrap;\n}\n.me-btn:active { transform: scale(0.96); }\n.me-btn-primary {\n  background: var(--accent);\n  color: #fff;\n  box-shadow: 0 1px 4px rgba(124,58,237,0.25);\n}\n.me-btn-primary:hover { background: var(--accent-dk); }\n.me-btn-ghost {\n  background: var(--btn-ghost);\n  color: var(--btn-ghost-text);\n}\n.me-btn-ghost:hover { filter: brightness(0.95); }\n.me-btn-success {\n  background: #d1fae5;\n  color: #065f46;\n}\n.me-btn-success:hover { background: #a7f3d0; }\n.me-dark .me-btn-success { background: #064e3b; color: #6ee7b7; }\n\n/* ── Split Pane ───────────────────────────────────────── */\n#me-split {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  border-left: 1px solid var(--border);\n  border-right: 1px solid var(--border);\n  min-height: 500px;\n}\n@media (max-width: 680px) {\n  #me-split { grid-template-columns: 1fr; }\n}\n\n/* ── Pane Labels ──────────────────────────────────────── */\n.me-pane-label {\n  font-size: 0.7rem;\n  font-weight: 700;\n  letter-spacing: 0.06em;\n  text-transform: uppercase;\n  color: var(--text-muted);\n  padding: 5px 14px 4px;\n  background: var(--surface);\n  border-bottom: 1px solid var(--border);\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n#me-editor-pane {\n  border-right: 1px solid var(--border);\n  display: flex;\n  flex-direction: column;\n}\n#me-preview-pane {\n  display: flex;\n  flex-direction: column;\n  background: var(--preview-bg);\n}\n@media (max-width: 680px) {\n  #me-editor-pane { border-right: none; border-bottom: 1px solid var(--border); }\n}\n\n/* ── Editor ───────────────────────────────────────────── */\n#me-editor-wrap {\n  position: relative;\n  flex: 1;\n  display: flex;\n}\n#me-line-nums {\n  padding: 14px 8px 14px 10px;\n  font-size: 0.82rem;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  line-height: 1.65;\n  color: var(--text-muted);\n  background: var(--editor-bg);\n  border-right: 1px solid var(--border);\n  text-align: right;\n  user-select: none;\n  min-width: 36px;\n  overflow: hidden;\n  white-space: pre;\n}\n#me-editor {\n  flex: 1;\n  width: 100%;\n  padding: 14px 14px 14px 12px;\n  font-size: 0.9rem;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  line-height: 1.65;\n  border: none;\n  outline: none;\n  resize: none;\n  background: var(--editor-bg);\n  color: var(--text);\n  min-height: 460px;\n  tab-size: 2;\n}\n#me-editor::placeholder { color: var(--text-muted); opacity: 0.6; }\n\n/* ── Preview ──────────────────────────────────────────── */\n#me-preview {\n  flex: 1;\n  padding: 18px 20px;\n  overflow-y: auto;\n  background: var(--preview-bg);\n  color: var(--text);\n  font-size: 0.95rem;\n  line-height: 1.85;\n  min-height: 460px;\n}\n\n/* Rendered markdown styles */\n#me-preview h1, #me-preview h2, #me-preview h3,\n#me-preview h4, #me-preview h5, #me-preview h6 {\n  color: var(--accent);\n  margin: 1.1em 0 0.4em;\n  line-height: 1.35;\n  font-weight: 700;\n}\n#me-preview h1 { font-size: 1.65em; border-bottom: 2px solid var(--border); padding-bottom: 0.2em; }\n#me-preview h2 { font-size: 1.35em; border-bottom: 1px solid var(--border); padding-bottom: 0.15em; }\n#me-preview h3 { font-size: 1.15em; }\n#me-preview h4 { font-size: 1em; }\n#me-preview h5 { font-size: 0.9em; }\n#me-preview h6 { font-size: 0.85em; color: var(--text-muted); }\n#me-preview p { margin: 0.7em 0; }\n#me-preview a { color: var(--accent); text-decoration: underline; }\n#me-preview a:hover { color: var(--accent-dk); }\n#me-preview strong { font-weight: 700; }\n#me-preview em { font-style: italic; }\n#me-preview del { text-decoration: line-through; color: var(--text-muted); }\n#me-preview code {\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.88em;\n  background: var(--code-bg);\n  color: #9333ea;\n  padding: 0.15em 0.45em;\n  border-radius: 4px;\n  border: 1px solid var(--border);\n}\n#me-preview pre {\n  background: var(--code-bg);\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  padding: 14px 16px;\n  overflow-x: auto;\n  margin: 1em 0;\n}\n#me-preview pre code {\n  background: none;\n  border: none;\n  padding: 0;\n  color: var(--text);\n  font-size: 0.87em;\n  line-height: 1.6;\n}\n#me-preview pre .kw { color: #9333ea; font-weight: 700; }\n#me-preview pre .str { color: #059669; }\n#me-preview pre .cm { color: #6b7280; font-style: italic; }\n#me-preview pre .nm { color: #b45309; }\n.me-dark #me-preview pre .kw { color: #c084fc; }\n.me-dark #me-preview pre .str { color: #34d399; }\n.me-dark #me-preview pre .cm { color: #9ca3af; }\n.me-dark #me-preview pre .nm { color: #fbbf24; }\n#me-preview blockquote {\n  border-left: 4px solid var(--accent);\n  margin: 1em 0;\n  padding: 8px 16px;\n  background: var(--code-bg);\n  border-radius: 0 6px 6px 0;\n  color: var(--text-muted);\n}\n#me-preview blockquote p { margin: 0; }\n#me-preview ul, #me-preview ol { padding-left: 1.6em; margin: 0.6em 0; }\n#me-preview li { margin: 0.25em 0; }\n#me-preview ul li { list-style-type: disc; }\n#me-preview ol li { list-style-type: decimal; }\n#me-preview hr { border: none; border-top: 2px solid var(--border); margin: 1.5em 0; }\n#me-preview img { max-width: 100%; border-radius: 6px; margin: 0.5em 0; }\n#me-preview table {\n  border-collapse: collapse;\n  width: 100%;\n  margin: 1em 0;\n  font-size: 0.92em;\n}\n#me-preview th {\n  background: var(--accent-lt);\n  color: var(--accent);\n  font-weight: 700;\n  padding: 8px 12px;\n  border: 1px solid var(--border);\n  text-align: left;\n}\n.me-dark #me-preview th { background: #2a2540; color: #c4b5fd; }\n#me-preview td { padding: 7px 12px; border: 1px solid var(--border); }\n#me-preview tr:nth-child(even) td { background: var(--code-bg); }\n\n/* ── Status Bar ───────────────────────────────────────── */\n#me-status {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 14px;\n  background: var(--status-bg);\n  border: 1px solid var(--border);\n  border-top: none;\n  border-radius: 0 0 var(--radius) var(--radius);\n  padding: 7px 16px;\n  font-size: 0.79rem;\n  color: var(--text-muted);\n}\n.me-stat { display: inline-flex; align-items: center; gap: 4px; }\n.me-stat-val { font-weight: 700; color: var(--accent); }\n#me-saved-msg {\n  margin-left: auto;\n  color: #059669;\n  font-weight: 600;\n  font-size: 0.77rem;\n  opacity: 0;\n  transition: opacity 0.3s;\n}\n#me-saved-msg.me-show { opacity: 1; }\n\n/* ── Fullscreen ───────────────────────────────────────── */\n#me-app.me-fullscreen {\n  position: fixed;\n  inset: 0;\n  z-index: 9999;\n  max-width: 100%;\n  background: var(--bg);\n  padding: 0;\n  overflow: auto;\n  border-radius: 0;\n}\n#me-app.me-fullscreen #me-split { min-height: calc(100vh - 160px); }\n\n/* ── freee CTA ────────────────────────────────────────── */\n#me-freee-cta {\n  margin-top: 24px;\n  padding: 18px 20px;\n  background: linear-gradient(135deg, #f0f4ff 0%, #faf5ff 100%);\n  border: 1px solid var(--border);\n  border-left: 4px solid var(--accent);\n  border-radius: 10px;\n  font-size: 0.9rem;\n  line-height: 1.8;\n  color: var(--text);\n}\n#me-freee-cta strong { color: var(--accent); }\n#me-freee-cta a.me-freee-link {\n  display: inline-block;\n  margin-top: 10px;\n  padding: 8px 22px;\n  background: var(--accent);\n  color: #fff;\n  border-radius: 6px;\n  text-decoration: none;\n  font-weight: 700;\n  font-size: 0.88rem;\n  transition: background 0.15s;\n}\n#me-freee-cta a.me-freee-link:hover { background: var(--accent-dk); }\n.me-dark #me-freee-cta {\n  background: linear-gradient(135deg, #1a1828 0%, #2a2540 100%);\n}\n\n/* ── Related Links ────────────────────────────────────── */\n#me-related {\n  margin-top: 16px;\n  padding: 12px 16px;\n  background: var(--status-bg);\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  font-size: 0.88rem;\n  color: var(--text-muted);\n  line-height: 1.7;\n}\n#me-related strong { color: var(--text); }\n#me-related a { color: var(--accent); font-weight: 600; text-decoration: none; }\n#me-related a:hover { text-decoration: underline; }\n\u003c/style\u003e\n\u003c!-- Top Bar --\u003e\n\u003cdiv id=\"me-topbar\"\u003e\n  \u003cspan id=\"me-title\"\u003e\u0026#9998; Markdownエディター\u003c/span\u003e\n  \u003cdiv id=\"me-topbar-btns\"\u003e\n    \u003cbutton class=\"me-btn me-btn-ghost\" onclick=\"meLoadSample()\"\u003eサンプル読み込み\u003c/button\u003e\n    \u003cbutton class=\"me-btn me-btn-ghost\" onclick=\"meClear()\"\u003eクリア\u003c/button\u003e\n    \u003cbutton class=\"me-btn me-btn-ghost\" onclick=\"meToggleTheme()\"\u003e\u0026#9790; ダーク\u003c/button\u003e\n    \u003cbutton class=\"me-btn me-btn-ghost\" onclick=\"meToggleFullscreen()\"\u003e\u0026#x26F6; 全画面\u003c/button\u003e\n    \u003cbutton class=\"me-btn me-btn-ghost\" onclick=\"meCopyHTML()\"\u003eHTMLをコピー\u003c/button\u003e\n    \u003cbutton class=\"me-btn me-btn-success\" onclick=\"meDownloadMd()\"\u003e\u0026#11015; .md保存\u003c/button\u003e\n    \u003cbutton class=\"me-btn me-btn-primary\" onclick=\"meExportHTML()\"\u003e.html書き出し\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Formatting Toolbar --\u003e\n\u003cdiv id=\"me-fmt-toolbar\"\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"太字 (Ctrl+B)\" onclick=\"meFmt('bold')\"\u003e\u003cstrong\u003eB\u003c/strong\u003e\u003c/button\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"斜体 (Ctrl+I)\" onclick=\"meFmt('italic')\"\u003e\u003cem\u003eI\u003c/em\u003e\u003c/button\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"取り消し線\" onclick=\"meFmt('strike')\"\u003e\u003cdel\u003eS\u003c/del\u003e\u003c/button\u003e\n  \u003cdiv class=\"me-sep\"\u003e\u003c/div\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"見出し1\" onclick=\"meFmt('h1')\"\u003eH1\u003c/button\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"見出し2\" onclick=\"meFmt('h2')\"\u003eH2\u003c/button\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"見出し3\" onclick=\"meFmt('h3')\"\u003eH3\u003c/button\u003e\n  \u003cdiv class=\"me-sep\"\u003e\u003c/div\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"リンク\" onclick=\"meFmt('link')\"\u003e\u0026#128279;\u003c/button\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"画像\" onclick=\"meFmt('image')\"\u003e\u0026#128247;\u003c/button\u003e\n  \u003cdiv class=\"me-sep\"\u003e\u003c/div\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"インラインコード\" onclick=\"meFmt('code')\"\u003e`c`\u003c/button\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"コードブロック\" onclick=\"meFmt('codeblock')\"\u003e```\u003c/button\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"引用\" onclick=\"meFmt('quote')\"\u003e\u0026gt;\u003c/button\u003e\n  \u003cdiv class=\"me-sep\"\u003e\u003c/div\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"箇条書きリスト\" onclick=\"meFmt('ul')\"\u003e\u0026#8226; ul\u003c/button\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"番号付きリスト\" onclick=\"meFmt('ol')\"\u003e1. ol\u003c/button\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"タスクリスト\" onclick=\"meFmt('task')\"\u003e\u0026#9744;\u003c/button\u003e\n  \u003cdiv class=\"me-sep\"\u003e\u003c/div\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"表\" onclick=\"meFmt('table')\"\u003e\u0026#9776;\u003c/button\u003e\n  \u003cbutton class=\"me-fmt-btn\" title=\"水平線\" onclick=\"meFmt('hr')\"\u003e\u0026#8212;\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- Split Pane --\u003e\n\u003cdiv id=\"me-split\"\u003e\n  \u003cdiv id=\"me-editor-pane\"\u003e\n    \u003cdiv class=\"me-pane-label\"\u003e\u0026#9998; エディター\u003c/div\u003e\n    \u003cdiv id=\"me-editor-wrap\"\u003e\n      \u003cdiv id=\"me-line-nums\"\u003e1\u003c/div\u003e\n      \u003ctextarea id=\"me-editor\" placeholder=\"ここにMarkdownを入力...\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"me-preview-pane\"\u003e\n    \u003cdiv class=\"me-pane-label\"\u003e\u0026#128065; プレビュー\u003c/div\u003e\n    \u003cdiv id=\"me-preview\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Status Bar --\u003e\n\u003cdiv id=\"me-status\"\u003e\n  \u003cspan class=\"me-stat\"\u003e単語数: \u003cspan class=\"me-stat-val\" id=\"me-stat-words\"\u003e0\u003c/span\u003e\u003c/span\u003e\n  \u003cspan class=\"me-stat\"\u003e文字数: \u003cspan class=\"me-stat-val\" id=\"me-stat-chars\"\u003e0\u003c/span\u003e\u003c/span\u003e\n  \u003cspan class=\"me-stat\"\u003e行数: \u003cspan class=\"me-stat-val\" id=\"me-stat-lines\"\u003e0\u003c/span\u003e\u003c/span\u003e\n  \u003cspan class=\"me-stat\"\u003e読了: \u003cspan class=\"me-stat-val\" id=\"me-stat-read\"\u003e0 分\u003c/span\u003e\u003c/span\u003e\n  \u003cspan id=\"me-saved-msg\"\u003e\u0026#10003; 自動保存済み\u003c/span\u003e\n\u003c/div\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv id=\"me-freee-cta\"\u003e\n  \u003cstrong\u003eドキュメント管理を整えたら、経理もデジタル化しませんか？\u003c/strong\u003e\u003cbr\u003e\n  Markdownで執筆・管理している方へ。確定申告・会計もクラウドで簡単に。freeeなら領収書スキャンから申告まで一括対応。\u003cbr\u003e\n  \u003ca class=\"me-freee-link\" href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" rel=\"nofollow\" target=\"_blank\"\u003efreeeを無料で試す \u0026#8594;\u003c/a\u003e\n\u003c/div\u003e\n\u003c!-- Related Tools --\u003e\n\u003cdiv id=\"me-related\"\u003e\n  \u003cstrong\u003e関連ツール：\u003c/strong\u003e\n  \u003ca href=\"/ja/tools/markdown-preview/\"\u003eマークダウンプレビュー\u003c/a\u003e \u0026nbsp;\u0026middot;\u0026nbsp;\n  \u003ca href=\"/ja/tools/markdown-table-generator/\"\u003eMarkdownテーブルジェネレーター\u003c/a\u003e \u0026nbsp;\u0026middot;\u0026nbsp;\n  \u003ca href=\"/ja/tools/markdown-toc-generator/\"\u003eMarkdown目次ジェネレーター\u003c/a\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c!-- /#me-app --\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  /* ── サンプルコンテンツ ─────────────────────────────── */\n  var SAMPLE = [\n    '# Markdownエディターへようこそ',\n    '',\n    '**フル機能**の分割ペインエディターです。ツールバーやキーボードショートカットで書式設定ができます。',\n    '',\n    '## キーボードショートカット',\n    '',\n    '| ショートカット | 操作 |',\n    '|----------------|------|',\n    '| `Ctrl+B` | 太字 |',\n    '| `Ctrl+I` | 斜体 |',\n    '| `Tab` | インデント |',\n    '',\n    '## 文字装飾',\n    '',\n    '**太字**、*斜体*、~~取り消し線~~、`インラインコード`。',\n    '',\n    '## 見出し',\n    '',\n    '# 見出し1',\n    '## 見出し2',\n    '### 見出し3',\n    '',\n    '## リスト',\n    '',\n    '- 箇条書き1',\n    '- 箇条書き2',\n    '  - ネストされた項目',\n    '',\n    '1. 番号付きリスト1',\n    '2. 番号付きリスト2',\n    '3. 番号付きリスト3',\n    '',\n    '- [x] 完了したタスク',\n    '- [ ] 未完了のタスク',\n    '',\n    '## コード',\n    '',\n    '```javascript',\n    'function greet(name) {',\n    '  // 挨拶を返す',\n    '  return `こんにちは、${name}！`;',\n    '}',\n    'console.log(greet(\"世界\"));',\n    '```',\n    '',\n    '## 引用',\n    '',\n    '\u003e 「最良のツールとは、実際に使われるものだ。」',\n    '\u003e — 生産性格言',\n    '',\n    '## リンクと画像',\n    '',\n    '[例へのリンク](https://example.com)',\n    '',\n    '![プレースホルダー](https://via.placeholder.com/400x120?text=Markdown+Editor)',\n    '',\n    '## 水平線',\n    '',\n    '---',\n    '',\n    '執筆を楽しんで！内容は**localStorageに自動保存**されます。'\n  ].join('\\n');\n\n  /* ── Markdown Parser ──────────────────────────────────── */\n  function parseMarkdown(md) {\n    var lines = md.split('\\n');\n    var out = '';\n    var i = 0;\n    var inFence = false;\n    var fenceLang = '';\n    var fenceLines = [];\n\n    while (i \u003c lines.length) {\n      var line = lines[i];\n\n      // Fenced code block\n      var fenceMatch = line.match(/^(`{3,}|~{3,})\\s*(\\w*)/);\n      if (fenceMatch \u0026\u0026 !inFence) {\n        inFence = true;\n        fenceLang = fenceMatch[2] || '';\n        fenceLines = [];\n        i++; continue;\n      }\n      if (inFence) {\n        if (/^(`{3,}|~{3,})/.test(line)) {\n          var cc = fenceLines.map(escapeHtml).join('\\n');\n          cc = highlightCode(cc, fenceLang);\n          out += '\u003cpre\u003e\u003ccode' + (fenceLang ? ' class=\"lang-' + escapeHtml(fenceLang) + '\"' : '') + '\u003e' + cc + '\u003c/code\u003e\u003c/pre\u003e\\n';\n\u003cpre\u003e\u003ccode\u003e      inFence = false; fenceLang = ''; fenceLines = [];\n    } else { fenceLines.push(line); }\n    i++; continue;\n  }\n\n  // Setext h1\n  if (i + 1 \u0026lt; lines.length \u0026amp;\u0026amp; /^=+\\s*$/.test(lines[i+1]) \u0026amp;\u0026amp; line.trim()) {\n    out += '\u0026lt;h1\u0026gt;' + inlineMd(line.trim()) + '\u0026lt;/h1\u0026gt;\\n'; i += 2; continue;\n  }\n  // Setext h2\n  if (i + 1 \u0026lt; lines.length \u0026amp;\u0026amp; /^-+\\s*$/.test(lines[i+1]) \u0026amp;\u0026amp; line.trim() \u0026amp;\u0026amp; !/^\\s*[-*+] /.test(line)) {\n    out += '\u0026lt;h2\u0026gt;' + inlineMd(line.trim()) + '\u0026lt;/h2\u0026gt;\\n'; i += 2; continue;\n  }\n\n  // ATX headings\n  var hm = line.match(/^(#{1,6})\\s+(.+?)(?:\\s+#+)?$/);\n  if (hm) {\n    var lvl = hm[1].length;\n    out += '\u0026lt;h' + lvl + '\u0026gt;' + inlineMd(hm[2].trim()) + '\u0026lt;/h' + lvl + '\u0026gt;\\n';\n    i++; continue;\n  }\n\n  // HR\n  if (/^(\\*{3,}|-{3,}|_{3,})\\s*$/.test(line.trim())) {\n    out += '\u0026lt;hr\u0026gt;\\n'; i++; continue;\n  }\n\n  // Blockquote\n  if (/^\u0026gt;\\s?/.test(line)) {\n    var bq = [];\n    while (i \u0026lt; lines.length \u0026amp;\u0026amp; /^\u0026gt;\\s?/.test(lines[i])) {\n      bq.push(lines[i].replace(/^\u0026gt;\\s?/, '')); i++;\n    }\n    out += '\u0026lt;blockquote\u0026gt;\u0026lt;p\u0026gt;' + inlineMd(bq.join('\\n')) + '\u0026lt;/p\u0026gt;\u0026lt;/blockquote\u0026gt;\\n';\n    continue;\n  }\n\n  // Table\n  if (/\\|/.test(line) \u0026amp;\u0026amp; i + 1 \u0026lt; lines.length \u0026amp;\u0026amp; /^\\|?[\\s:|-]+\\|/.test(lines[i+1])) {\n    var tbl = [];\n    while (i \u0026lt; lines.length \u0026amp;\u0026amp; /\\|/.test(lines[i])) { tbl.push(lines[i]); i++; }\n    out += parseTable(tbl); continue;\n  }\n\n  // Task list (before ul)\n  if (/^\\s*[-*+] \\[[ xX]\\]/.test(line)) {\n    var tl = [];\n    while (i \u0026lt; lines.length \u0026amp;\u0026amp; /^\\s*[-*+] \\[[ xX]\\]/.test(lines[i])) {\n      tl.push(lines[i]); i++;\n    }\n    out += '\u0026lt;ul class=\u0026quot;me-tasklist\u0026quot;\u0026gt;' + tl.map(function(l) {\n      var checked = /\\[x\\]/i.test(l);\n      var txt = l.replace(/^\\s*[-*+] \\[[ xX]\\]\\s*/, '');\n      return '\u0026lt;li\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; disabled' + (checked ? ' checked' : '') + '\u0026gt; ' + inlineMd(txt) + '\u0026lt;/li\u0026gt;';\n    }).join('') + '\u0026lt;/ul\u0026gt;\\n';\n    continue;\n  }\n\n  // UL\n  if (/^(\\s*)[-*+] /.test(line)) {\n    var ul = [];\n    while (i \u0026lt; lines.length \u0026amp;\u0026amp; /^(\\s*)[-*+] /.test(lines[i])) { ul.push(lines[i]); i++; }\n    out += '\u0026lt;ul\u0026gt;' + ul.map(function(l) {\n      return '\u0026lt;li\u0026gt;' + inlineMd(l.replace(/^\\s*[-*+] /, '')) + '\u0026lt;/li\u0026gt;';\n    }).join('') + '\u0026lt;/ul\u0026gt;\\n';\n    continue;\n  }\n\n  // OL\n  if (/^\\d+\\.\\s/.test(line)) {\n    var ol = [];\n    while (i \u0026lt; lines.length \u0026amp;\u0026amp; /^\\d+\\.\\s/.test(lines[i])) { ol.push(lines[i]); i++; }\n    out += '\u0026lt;ol\u0026gt;' + ol.map(function(l) {\n      return '\u0026lt;li\u0026gt;' + inlineMd(l.replace(/^\\d+\\.\\s/, '')) + '\u0026lt;/li\u0026gt;';\n    }).join('') + '\u0026lt;/ol\u0026gt;\\n';\n    continue;\n  }\n\n  // Blank\n  if (line.trim() === '') { out += '\\n'; i++; continue; }\n\n  // Paragraph\n  var pl = [];\n  while (i \u0026lt; lines.length \u0026amp;\u0026amp; lines[i].trim() !== ''\n    \u0026amp;\u0026amp; !/^#{1,6}\\s/.test(lines[i])\n    \u0026amp;\u0026amp; !/^(\\*{3,}|-{3,}|_{3,})\\s*$/.test(lines[i].trim())\n    \u0026amp;\u0026amp; !/^\u0026gt;\\s?/.test(lines[i])\n    \u0026amp;\u0026amp; !/^\\s*[-*+] /.test(lines[i])\n    \u0026amp;\u0026amp; !/^\\d+\\.\\s/.test(lines[i])\n    \u0026amp;\u0026amp; !/\\|/.test(lines[i])\n    \u0026amp;\u0026amp; !/^(`{3,}|~{3,})/.test(lines[i])) {\n    pl.push(lines[i]); i++;\n  }\n  if (pl.length) out += '\u0026lt;p\u0026gt;' + inlineMd(pl.join(' ')) + '\u0026lt;/p\u0026gt;\\n';\n}\n\nif (inFence \u0026amp;\u0026amp; fenceLines.length) {\n  out += '\u0026lt;pre\u0026gt;\u0026lt;code\u0026gt;' + fenceLines.map(escapeHtml).join('\\n') + '\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\\n';\n}\nreturn out;\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e}\u003c/p\u003e","title":"Markdownエディター"},{"content":" \u0026#x1F512; プライバシー保護: すべてのデコード処理はブラウザ内のJavaScriptで完結します。トークンがサーバーに送信されることは一切ありません。署名の検証は行いません — このツールは内容の確認専用です。 JWTトークンを貼り付け サンプルJWTを読み込む クリア 上のフォームにJWTを貼り付けると解析結果が表示されます\nヘッダー JSONをコピー ペイロード JSONをコピー 署名 Hexをコピー 署名バイト列を16進数で表示しています。検証にはシークレットキーまたは公開鍵が必要であり、このツールでは検証を行いません。 標準クレームの説明 クレーム 値 説明 \u0026#x1F4CA; freee会計 — 中小企業・フリーランス向けクラウド会計 請求書・経費・確定申告をひとつにまとめて自動化。JWTを使うAPIとの連携もかんたん。無料トライアルでお試しください。\nfreeeを無料で試す \u0026rarr; 関連ツール Base64のエンコード・デコード → Base64エンコーダー JSONの整形・検証 → JSONフォーマッター ハッシュ値の生成 → ハッシュジェネレーター ","permalink":"https://productivity-works.com/ja/tools/jwt-decoder/","summary":"\u003cdiv id=\"jwt-app\"\u003e\n\u003cstyle\u003e\n#jwt-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", \"Segoe UI\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  padding: 0 12px;\n  box-sizing: border-box;\n}\n#jwt-app * {\n  box-sizing: border-box;\n}\n#jwt-app .jwt-notice {\n  background: #fff8e1;\n  border: 1px solid #ffe082;\n  border-radius: 6px;\n  padding: 10px 14px;\n  font-size: 0.85rem;\n  color: #6d4c00;\n  margin-bottom: 18px;\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n}\n#jwt-app .jwt-notice-icon {\n  font-size: 1.1rem;\n  flex-shrink: 0;\n  margin-top: 1px;\n}\n#jwt-app .jwt-input-label {\n  font-weight: 600;\n  font-size: 0.9rem;\n  margin-bottom: 6px;\n  color: #222;\n}\n#jwt-app textarea#jwt-input {\n  width: 100%;\n  min-height: 110px;\n  padding: 12px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.82rem;\n  border: 2px solid #d0d0d0;\n  border-radius: 8px;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.2s;\n  background: #fafafa;\n  color: #1a1a1a;\n  line-height: 1.5;\n}\n#jwt-app textarea#jwt-input:focus {\n  border-color: #1a73e8;\n  background: #fff;\n}\n#jwt-app .jwt-actions-row {\n  display: flex;\n  gap: 10px;\n  margin-top: 10px;\n  flex-wrap: wrap;\n}\n#jwt-app .jwt-btn {\n  padding: 8px 16px;\n  border: none;\n  border-radius: 6px;\n  cursor: pointer;\n  font-size: 0.85rem;\n  font-weight: 600;\n  transition: background 0.15s, opacity 0.15s;\n}\n#jwt-app .jwt-btn-primary {\n  background: #1a73e8;\n  color: #fff;\n}\n#jwt-app .jwt-btn-primary:hover {\n  background: #1558b0;\n}\n#jwt-app .jwt-btn-secondary {\n  background: #f1f3f4;\n  color: #333;\n  border: 1px solid #ccc;\n}\n#jwt-app .jwt-btn-secondary:hover {\n  background: #e2e5e8;\n}\n#jwt-app .jwt-btn-danger {\n  background: #fce8e6;\n  color: #c5221f;\n  border: 1px solid #f5c6c4;\n}\n#jwt-app .jwt-btn-danger:hover {\n  background: #f5c6c4;\n}\n#jwt-app .jwt-structure-box {\n  margin: 18px 0 10px;\n  padding: 12px 14px;\n  background: #1e1e2e;\n  border-radius: 8px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.82rem;\n  word-break: break-all;\n  line-height: 1.6;\n  display: none;\n}\n#jwt-app .jwt-structure-box.visible {\n  display: block;\n}\n#jwt-app .jwt-part-header-color {\n  color: #f28b82;\n}\n#jwt-app .jwt-part-sep {\n  color: #aaa;\n  margin: 0 1px;\n}\n#jwt-app .jwt-part-payload-color {\n  color: #81c995;\n}\n#jwt-app .jwt-part-sig-color {\n  color: #8ab4f8;\n}\n#jwt-app .jwt-status-bar {\n  display: none;\n  margin: 12px 0;\n  padding: 10px 14px;\n  border-radius: 6px;\n  font-size: 0.88rem;\n  font-weight: 600;\n  align-items: center;\n  gap: 8px;\n}\n#jwt-app .jwt-status-bar.visible {\n  display: flex;\n}\n#jwt-app .jwt-status-bar.valid {\n  background: #e6f4ea;\n  color: #1e6e35;\n  border: 1px solid #a8d5b5;\n}\n#jwt-app .jwt-status-bar.expired {\n  background: #fce8e6;\n  color: #c5221f;\n  border: 1px solid #f5c6c4;\n}\n#jwt-app .jwt-status-bar.no-exp {\n  background: #e8f0fe;\n  color: #1a55b0;\n  border: 1px solid #aac4f8;\n}\n#jwt-app .jwt-panels {\n  display: none;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n  margin-top: 16px;\n}\n#jwt-app .jwt-panels.visible {\n  display: grid;\n}\n@media (max-width: 600px) {\n  #jwt-app .jwt-panels.visible {\n    grid-template-columns: 1fr;\n  }\n}\n#jwt-app .jwt-panel {\n  border: 1px solid #dde1e7;\n  border-radius: 8px;\n  overflow: hidden;\n  background: #fff;\n}\n#jwt-app .jwt-panel-header {\n  padding: 8px 12px;\n  font-weight: 700;\n  font-size: 0.8rem;\n  letter-spacing: 0.04em;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n#jwt-app .jwt-panel-header-alg {\n  font-size: 0.72rem;\n  font-weight: 500;\n  opacity: 0.85;\n  margin-left: 6px;\n}\n#jwt-app .jwt-panel.panel-header .jwt-panel-header {\n  background: #fde8e7;\n  color: #b31412;\n  border-bottom: 1px solid #f5c6c4;\n}\n#jwt-app .jwt-panel.panel-payload .jwt-panel-header {\n  background: #e6f4ea;\n  color: #1a6b31;\n  border-bottom: 1px solid #a8d5b5;\n}\n#jwt-app .jwt-panel.panel-signature .jwt-panel-header {\n  background: #e8f0fe;\n  color: #1a55b0;\n  border-bottom: 1px solid #aac4f8;\n}\n#jwt-app .jwt-panel.panel-signature {\n  grid-column: 1 / -1;\n}\n#jwt-app .jwt-panel-body {\n  padding: 12px;\n}\n#jwt-app pre.jwt-json {\n  margin: 0;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.8rem;\n  white-space: pre-wrap;\n  word-break: break-all;\n  line-height: 1.6;\n  color: #1a1a1a;\n  background: none;\n  border: none;\n  padding: 0;\n}\n#jwt-app .jwt-copy-btn {\n  font-size: 0.72rem;\n  padding: 3px 8px;\n  border-radius: 4px;\n  background: rgba(255,255,255,0.7);\n  border: 1px solid rgba(0,0,0,0.12);\n  cursor: pointer;\n  white-space: nowrap;\n  transition: background 0.15s;\n  color: inherit;\n  font-weight: 600;\n}\n#jwt-app .jwt-copy-btn:hover {\n  background: rgba(255,255,255,0.95);\n}\n#jwt-app .jwt-claims-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.8rem;\n  margin-top: 8px;\n}\n#jwt-app .jwt-claims-table th {\n  text-align: left;\n  font-weight: 600;\n  color: #555;\n  padding: 4px 8px 4px 0;\n  border-bottom: 1px solid #eee;\n  white-space: nowrap;\n}\n#jwt-app .jwt-claims-table td {\n  padding: 5px 8px 5px 0;\n  border-bottom: 1px solid #f5f5f5;\n  vertical-align: top;\n  color: #222;\n}\n#jwt-app .jwt-claims-table td.claim-name {\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  color: #1a73e8;\n  font-weight: 600;\n  white-space: nowrap;\n}\n#jwt-app .jwt-claims-table td.claim-desc {\n  color: #777;\n  font-style: italic;\n}\n#jwt-app .jwt-sig-hex {\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 0.78rem;\n  word-break: break-all;\n  color: #333;\n  padding: 8px;\n  background: #f8f9fa;\n  border-radius: 4px;\n  border: 1px solid #e0e0e0;\n}\n#jwt-app .jwt-sig-note {\n  margin-top: 8px;\n  font-size: 0.78rem;\n  color: #888;\n  font-style: italic;\n}\n#jwt-app .jwt-error-box {\n  display: none;\n  background: #fce8e6;\n  border: 1px solid #f5c6c4;\n  border-radius: 6px;\n  padding: 10px 14px;\n  color: #c5221f;\n  font-size: 0.85rem;\n  margin-top: 10px;\n}\n#jwt-app .jwt-error-box.visible {\n  display: block;\n}\n#jwt-app .jwt-empty-state {\n  text-align: center;\n  color: #aaa;\n  font-size: 0.9rem;\n  padding: 32px 0 16px;\n  display: block;\n}\n#jwt-app .jwt-empty-state.hidden {\n  display: none;\n}\n#jwt-app .sh-key { color: #c62828; }\n#jwt-app .sh-str { color: #2e7d32; }\n#jwt-app .sh-num { color: #1565c0; }\n#jwt-app .sh-bool { color: #6a1b9a; }\n#jwt-app .sh-null { color: #bf360c; }\n/* freee CTA */\n#jwt-app .jwt-freee-cta {\n  margin-top: 32px;\n  padding: 20px 22px;\n  background: linear-gradient(135deg, #e8f5e9 0%, #e3f2fd 100%);\n  border: 1px solid #b2dfdb;\n  border-radius: 10px;\n  display: flex;\n  align-items: flex-start;\n  gap: 16px;\n  flex-wrap: wrap;\n}\n#jwt-app .jwt-freee-cta-icon {\n  font-size: 2rem;\n  flex-shrink: 0;\n}\n#jwt-app .jwt-freee-cta-body {\n  flex: 1;\n  min-width: 220px;\n}\n#jwt-app .jwt-freee-cta-body strong {\n  display: block;\n  font-size: 0.95rem;\n  color: #1b5e20;\n  margin-bottom: 4px;\n}\n#jwt-app .jwt-freee-cta-body p {\n  margin: 0 0 10px;\n  font-size: 0.84rem;\n  color: #2e4057;\n  line-height: 1.55;\n}\n#jwt-app .jwt-freee-cta-link {\n  display: inline-block;\n  background: #00c853;\n  color: #fff;\n  text-decoration: none;\n  font-size: 0.85rem;\n  font-weight: 700;\n  padding: 8px 18px;\n  border-radius: 6px;\n  transition: background 0.15s;\n}\n#jwt-app .jwt-freee-cta-link:hover {\n  background: #00a845;\n  color: #fff;\n}\n\u003c/style\u003e\n\u003cdiv class=\"jwt-notice\"\u003e\n  \u003cspan class=\"jwt-notice-icon\"\u003e\u0026#x1F512;\u003c/span\u003e\n  \u003cspan\u003e\u003cstrong\u003eプライバシー保護:\u003c/strong\u003e すべてのデコード処理はブラウザ内のJavaScriptで完結します。トークンがサーバーに送信されることは一切ありません。署名の検証は行いません — このツールは内容の確認専用です。\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv class=\"jwt-input-label\"\u003eJWTトークンを貼り付け\u003c/div\u003e\n\u003ctextarea id=\"jwt-input\" placeholder=\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\" spellcheck=\"false\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\"\u003e\u003c/textarea\u003e\n\u003cdiv class=\"jwt-actions-row\"\u003e\n  \u003cbutton class=\"jwt-btn jwt-btn-secondary\" id=\"jwt-sample-btn\"\u003eサンプルJWTを読み込む\u003c/button\u003e\n  \u003cbutton class=\"jwt-btn jwt-btn-danger\" id=\"jwt-clear-btn\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"jwt-error-box\" id=\"jwt-error\"\u003e\u003c/div\u003e\n\u003cdiv class=\"jwt-structure-box\" id=\"jwt-structure\"\u003e\u003c/div\u003e\n\u003cdiv class=\"jwt-status-bar\" id=\"jwt-status\"\u003e\u003c/div\u003e\n\u003cp\u003e\u003cspan class=\"jwt-empty-state\" id=\"jwt-empty\"\u003e上のフォームにJWTを貼り付けると解析結果が表示されます\u003c/span\u003e\u003c/p\u003e","title":"JWTデコーダー — トークン解析ツール"},{"content":" 収入の入力 給与収入（年収・円） ここに入力した給与収入をもとに、給与所得控除・基礎控除・社会保険料控除を自動計算します。 計算する 計算結果 給与収入 — 給与所得 — 各種控除合計 — 課税所得 — 所得税額（概算） — 実効税率 — 税率区分内訳 課税所得の範囲 税率 控除額 この区分の課税所得 この区分の税額 ※ 2024年（令和6年）分の所得税の税率表を使用しています。住民税・復興特別所得税（2.1%）・各種控除（医療費控除・生命保険料控除等）は含まれていません。実際の税額は確定申告や源泉徴収によって異なる場合があります。本ツールは参考情報の提供を目的とし、税務上の助言を構成するものではありません。\n確定申告・会計をもっとラクに？\nfreee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\nfreee会計を無料で試す 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 FXの損失は3年繰り越せる？繰越控除の申告手順を図解で解説 ","permalink":"https://productivity-works.com/ja/tools/tax-calculator/","summary":"\u003cdiv id=\"tc-app\"\u003e\n\u003cstyle\u003e\n#tc-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#tc-app * { box-sizing: border-box; }\n#tc-app h2 {\n  font-size: 1.4rem;\n  font-weight: 700;\n  margin: 0 0 1.2rem;\n  color: #1a1a2e;\n  border-left: 4px solid #22c55e;\n  padding-left: 0.7rem;\n}\n#tc-app .tc-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 1.6rem;\n  margin-bottom: 1.4rem;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.05);\n}\n#tc-app .tc-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n  gap: 1rem;\n}\n#tc-app label {\n  display: block;\n  font-size: 0.82rem;\n  font-weight: 600;\n  color: #4a5568;\n  margin-bottom: 0.35rem;\n  letter-spacing: 0.02em;\n}\n#tc-app input[type=number] {\n  width: 100%;\n  padding: 0.6rem 0.9rem;\n  border: 1.5px solid #cbd5e0;\n  border-radius: 8px;\n  font-size: 1rem;\n  color: #1a1a2e;\n  background: #f8fafc;\n  transition: border-color 0.2s;\n  outline: none;\n}\n#tc-app input[type=number]:focus {\n  border-color: #22c55e;\n  background: #fff;\n}\n#tc-app .tc-btn {\n  display: inline-block;\n  padding: 0.7rem 2rem;\n  background: linear-gradient(135deg, #22c55e, #16a34a);\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 1rem;\n  font-weight: 700;\n  cursor: pointer;\n  margin-top: 1rem;\n  transition: opacity 0.2s;\n}\n#tc-app .tc-btn:hover { opacity: 0.88; }\n#tc-app .tc-info-box {\n  background: #f0fdf4;\n  border-left: 3px solid #22c55e;\n  border-radius: 6px;\n  padding: 0.7rem 1rem;\n  margin-top: 1rem;\n  font-size: 0.83rem;\n  color: #2d3748;\n  line-height: 1.7;\n}\n#tc-app .tc-results-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n  gap: 1rem;\n  margin-bottom: 1.4rem;\n}\n#tc-app .tc-stat {\n  background: #f0fdf4;\n  border-radius: 10px;\n  padding: 1rem 1.2rem;\n  text-align: center;\n}\n#tc-app .tc-stat .tc-stat-label {\n  font-size: 0.75rem;\n  font-weight: 600;\n  color: #16a34a;\n  margin-bottom: 0.3rem;\n}\n#tc-app .tc-stat .tc-stat-value {\n  font-size: 1.3rem;\n  font-weight: 800;\n  color: #1a1a2e;\n}\n#tc-app .tc-stat.tc-highlight {\n  background: linear-gradient(135deg, #dcfce7, #bbf7d0);\n  border: 1.5px solid #22c55e;\n}\n#tc-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.87rem;\n}\n#tc-app thead th {\n  background: #f0fdf4;\n  color: #16a34a;\n  font-weight: 700;\n  padding: 0.6rem 0.8rem;\n  text-align: right;\n  border-bottom: 2px solid #e2e8f0;\n}\n#tc-app thead th:first-child { text-align: left; }\n#tc-app tbody td {\n  padding: 0.5rem 0.8rem;\n  text-align: right;\n  border-bottom: 1px solid #f0f0f0;\n  color: #2d3748;\n}\n#tc-app tbody td:first-child { text-align: left; }\n#tc-app tbody tr:hover { background: #f0fdf4; }\n#tc-app tbody tr.tc-active-row { background: #dcfce7; font-weight: 600; }\n#tc-app .tc-bar-wrap {\n  background: #f0f0f0;\n  border-radius: 4px;\n  height: 10px;\n  display: inline-block;\n  width: 60px;\n  vertical-align: middle;\n  margin-left: 6px;\n  overflow: hidden;\n}\n#tc-app .tc-bar-fill {\n  height: 100%;\n  border-radius: 4px;\n  background: linear-gradient(90deg, #22c55e, #16a34a);\n}\n#tc-app .tc-hidden { display: none; }\n#tc-app .tc-note {\n  font-size: 0.78rem;\n  color: #888;\n  margin-top: 1rem;\n  line-height: 1.7;\n}\n#tc-app .tc-cta {\n  background: linear-gradient(135deg, #f0f5ff, #e8f4fd);\n  border: 1.5px solid #4f8ef7;\n  border-radius: 12px;\n  padding: 1.4rem 1.6rem;\n  margin-top: 1.4rem;\n  text-align: center;\n}\n#tc-app .tc-cta p {\n  margin: 0 0 0.8rem;\n  font-size: 0.95rem;\n  color: #2d3748;\n  line-height: 1.7;\n}\n#tc-app .tc-cta a.tc-cta-btn {\n  display: inline-block;\n  background: linear-gradient(135deg, #4f8ef7, #3b6fd4);\n  color: #fff;\n  padding: 0.65rem 1.8rem;\n  border-radius: 8px;\n  font-weight: 700;\n  font-size: 0.95rem;\n  text-decoration: none;\n  transition: opacity 0.2s;\n}\n#tc-app .tc-cta a.tc-cta-btn:hover { opacity: 0.85; }\n#tc-app canvas { display: block; margin: 0 auto 1rem; }\n\u003c/style\u003e\n\u003cdiv class=\"tc-card\"\u003e\n  \u003ch2\u003e収入の入力\u003c/h2\u003e\n  \u003cdiv class=\"tc-grid\"\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"tc-income\"\u003e給与収入（年収・円）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"tc-income\" value=\"5000000\" min=\"0\" step=\"10000\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"tc-info-box\" id=\"tc-info-box\"\u003e\n    ここに入力した給与収入をもとに、給与所得控除・基礎控除・社会保険料控除を自動計算します。\n  \u003c/div\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcCalculate()\"\u003e計算する\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"tc-card tc-hidden\" id=\"tc-results\"\u003e\n  \u003ch2\u003e計算結果\u003c/h2\u003e\n  \u003cdiv class=\"tc-results-grid\"\u003e\n    \u003cdiv class=\"tc-stat\"\u003e\n      \u003cdiv class=\"tc-stat-label\"\u003e給与収入\u003c/div\u003e\n      \u003cdiv class=\"tc-stat-value\" id=\"tc-gross-out\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tc-stat\"\u003e\n      \u003cdiv class=\"tc-stat-label\"\u003e給与所得\u003c/div\u003e\n      \u003cdiv class=\"tc-stat-value\" id=\"tc-kyuyo-shotoku\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tc-stat\"\u003e\n      \u003cdiv class=\"tc-stat-label\"\u003e各種控除合計\u003c/div\u003e\n      \u003cdiv class=\"tc-stat-value\" id=\"tc-total-ded\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tc-stat\"\u003e\n      \u003cdiv class=\"tc-stat-label\"\u003e課税所得\u003c/div\u003e\n      \u003cdiv class=\"tc-stat-value\" id=\"tc-taxable-out\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tc-stat tc-highlight\"\u003e\n      \u003cdiv class=\"tc-stat-label\"\u003e所得税額（概算）\u003c/div\u003e\n      \u003cdiv class=\"tc-stat-value\" id=\"tc-tax-out\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tc-stat\"\u003e\n      \u003cdiv class=\"tc-stat-label\"\u003e実効税率\u003c/div\u003e\n      \u003cdiv class=\"tc-stat-value\" id=\"tc-eff-out\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003ccanvas id=\"tc-chart\" width=\"700\" height=\"200\"\u003e\u003c/canvas\u003e\n\u003c/div\u003e\n\u003cdiv class=\"tc-card tc-hidden\" id=\"tc-bracket-card\"\u003e\n  \u003ch2\u003e税率区分内訳\u003c/h2\u003e\n  \u003cdiv style=\"overflow-x:auto\"\u003e\n    \u003ctable\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\n          \u003cth\u003e課税所得の範囲\u003c/th\u003e\n          \u003cth\u003e税率\u003c/th\u003e\n          \u003cth\u003e控除額\u003c/th\u003e\n          \u003cth\u003eこの区分の課税所得\u003c/th\u003e\n          \u003cth\u003eこの区分の税額\u003c/th\u003e\n        \u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody id=\"tc-bracket-body\"\u003e\u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n  \u003cp class=\"tc-note\"\u003e※ 2024年（令和6年）分の所得税の税率表を使用しています。住民税・復興特別所得税（2.1%）・各種控除（医療費控除・生命保険料控除等）は含まれていません。実際の税額は確定申告や源泉徴収によって異なる場合があります。本ツールは参考情報の提供を目的とし、税務上の助言を構成するものではありません。\u003c/p\u003e","title":"所得税計算ツール - 税額シミュレーション"},{"content":"年齢・身長・体重・活動レベルを入力するだけで、あなたの基礎代謝量（BMR）と1日の総消費カロリー（TDEE）を瞬時に計算。減量・増量プランやマクロ栄養素の内訳もまとめて確認できます。\n基本情報を入力 \u0026lt;!-- Gender --\u0026gt; \u0026lt;div class=\u0026quot;cc-field cc-full\u0026quot;\u0026gt; \u0026lt;label\u0026gt;性別\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;cc-gender-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;cc-gender-btn active\u0026quot; id=\u0026quot;cc-male\u0026quot; onclick=\u0026quot;ccSetGender('male')\u0026quot;\u0026gt;男性\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cc-gender-btn\u0026quot; id=\u0026quot;cc-female\u0026quot; onclick=\u0026quot;ccSetGender('female')\u0026quot;\u0026gt;女性\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Age --\u0026gt; \u0026lt;div class=\u0026quot;cc-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;cc-age\u0026quot;\u0026gt;年齢（歳）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;cc-age\u0026quot; min=\u0026quot;10\u0026quot; max=\u0026quot;100\u0026quot; placeholder=\u0026quot;例: 35\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Height --\u0026gt; \u0026lt;div class=\u0026quot;cc-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;cc-height\u0026quot;\u0026gt;身長（cm）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;cc-height\u0026quot; min=\u0026quot;100\u0026quot; max=\u0026quot;250\u0026quot; step=\u0026quot;0.1\u0026quot; placeholder=\u0026quot;例: 168\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Weight --\u0026gt; \u0026lt;div class=\u0026quot;cc-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;cc-weight\u0026quot;\u0026gt;体重（kg）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;cc-weight\u0026quot; min=\u0026quot;20\u0026quot; max=\u0026quot;300\u0026quot; step=\u0026quot;0.1\u0026quot; placeholder=\u0026quot;例: 65\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Activity Level --\u0026gt; \u0026lt;div class=\u0026quot;cc-field\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;cc-activity\u0026quot;\u0026gt;活動レベル\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;cc-activity\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;1.2\u0026quot;\u0026gt;座り仕事（ほぼ運動なし）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;1.375\u0026quot;\u0026gt;軽い運動（週1〜3回）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;1.55\u0026quot; selected\u0026gt;中程度の運動（週3〜5回）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;1.725\u0026quot;\u0026gt;激しい運動（週6〜7回）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;1.9\u0026quot;\u0026gt;非常に激しい運動（1日2回など）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Formula --\u0026gt; \u0026lt;div class=\u0026quot;cc-field cc-full\u0026quot;\u0026gt; \u0026lt;label\u0026gt;計算式\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;cc-formula-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;cc-formula-btn active\u0026quot; id=\u0026quot;cc-mifflin\u0026quot; onclick=\u0026quot;ccSetFormula('mifflin')\u0026quot;\u0026gt;Mifflin-St Jeor（推奨）\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cc-formula-btn\u0026quot; id=\u0026quot;cc-harris\u0026quot; onclick=\u0026quot;ccSetFormula('harris')\u0026quot;\u0026gt;Harris-Benedict\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; カロリーを計算する 入力内容を確認してください。年齢・身長・体重はすべて正の数で入力してください。 計算結果 基礎代謝量（BMR） — kcal/日 1日の総消費カロリー（TDEE） — kcal/日 ※ BMR（Basal Metabolic Rate）は安静時に消費するカロリー。TDEEは活動レベルを加味した1日の総消費カロリーです。個人差・体組成によって実際の値は異なります。\n目標別カロリー摂取量 目標 目安摂取カロリー 減量 −0.25 kg/週 — 減量 −0.5 kg/週 — 減量 −1 kg/週 — 現状維持 — 増量 +0.25 kg/週 — 増量 +0.5 kg/週 — ※ 1 kg の体脂肪 ≈ 7,200 kcal として算出。極端なカロリー制限は健康に悪影響を与える場合があります。\nマクロ栄養素バランス（TDEE基準） タンパク質（25%） — 炭水化物（50%） — 脂質（25%） — ※ タンパク質・炭水化物は 4 kcal/g、脂質は 9 kcal/g として換算。比率は一般的な目安（P:25% / C:50% / F:25%）です。\n事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → BMIを計算 → BMI計算ツール 家計を見直す → 50/30/20 家計バランス計算 投資利益率を計算 → ROI計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/calorie-calculator/","summary":"\u003cp\u003e年齢・身長・体重・活動レベルを入力するだけで、あなたの基礎代謝量（BMR）と1日の総消費カロリー（TDEE）を瞬時に計算。減量・増量プランやマクロ栄養素の内訳もまとめて確認できます。\u003c/p\u003e\n\u003cdiv id=\"cc-app\"\u003e\n\u003cstyle\u003e\n#cc-app *,\n#cc-app *::before,\n#cc-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#cc-app {\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  color: #1e293b;\n  max-width: 680px;\n  margin: 0 auto;\n  padding: 8px 0;\n}\n#cc-app h2 {\n  font-size: 20px;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 18px;\n}\n#cc-app .cc-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 20px;\n}\n#cc-app .cc-section-title {\n  font-size: 15px;\n  font-weight: 700;\n  color: #334155;\n  margin-bottom: 16px;\n  padding-bottom: 8px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#cc-app .cc-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n}\n@media (max-width: 520px) {\n  #cc-app .cc-grid {\n    grid-template-columns: 1fr;\n  }\n}\n#cc-app .cc-field {\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n}\n#cc-app .cc-field.cc-full {\n  grid-column: 1 / -1;\n}\n#cc-app label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n}\n#cc-app input[type=\"number\"],\n#cc-app select {\n  width: 100%;\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 15px;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.15s;\n  appearance: none;\n  -webkit-appearance: none;\n}\n#cc-app input[type=\"number\"]:focus,\n#cc-app select:focus {\n  outline: none;\n  border-color: #64748b;\n  box-shadow: 0 0 0 3px rgba(100,116,139,0.12);\n}\n#cc-app .cc-gender-row {\n  display: flex;\n  gap: 10px;\n}\n#cc-app .cc-gender-btn {\n  flex: 1;\n  padding: 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  background: #fff;\n  font-size: 14px;\n  font-weight: 600;\n  color: #64748b;\n  cursor: pointer;\n  transition: all 0.15s;\n  text-align: center;\n}\n#cc-app .cc-gender-btn.active {\n  background: #334155;\n  border-color: #334155;\n  color: #fff;\n}\n#cc-app .cc-formula-row {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n#cc-app .cc-formula-btn {\n  flex: 1;\n  min-width: 140px;\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  background: #fff;\n  font-size: 13px;\n  font-weight: 600;\n  color: #64748b;\n  cursor: pointer;\n  transition: all 0.15s;\n  text-align: center;\n}\n#cc-app .cc-formula-btn.active {\n  background: #334155;\n  border-color: #334155;\n  color: #fff;\n}\n#cc-app .cc-btn-primary {\n  width: 100%;\n  padding: 14px;\n  background: #334155;\n  color: #fff;\n  border: none;\n  border-radius: 10px;\n  font-size: 16px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n  margin-top: 4px;\n}\n#cc-app .cc-btn-primary:hover {\n  background: #1e293b;\n}\n#cc-app .cc-results {\n  display: none;\n}\n#cc-app .cc-results.visible {\n  display: block;\n}\n#cc-app .cc-stat-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 20px;\n}\n@media (max-width: 400px) {\n  #cc-app .cc-stat-grid {\n    grid-template-columns: 1fr;\n  }\n}\n#cc-app .cc-stat-box {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 16px;\n  text-align: center;\n}\n#cc-app .cc-stat-box.highlight {\n  background: #0f172a;\n  border-color: #0f172a;\n  color: #fff;\n}\n#cc-app .cc-stat-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  margin-bottom: 6px;\n  letter-spacing: 0.02em;\n}\n#cc-app .cc-stat-box.highlight .cc-stat-label {\n  color: #94a3b8;\n}\n#cc-app .cc-stat-value {\n  font-size: 28px;\n  font-weight: 800;\n  color: #0f172a;\n  line-height: 1;\n}\n#cc-app .cc-stat-box.highlight .cc-stat-value {\n  color: #fff;\n}\n#cc-app .cc-stat-unit {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  margin-top: 2px;\n}\n#cc-app .cc-stat-box.highlight .cc-stat-unit {\n  color: #94a3b8;\n}\n#cc-app .cc-plan-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 14px;\n  margin-bottom: 4px;\n}\n#cc-app .cc-plan-table th {\n  background: #f1f5f9;\n  color: #334155;\n  font-weight: 700;\n  padding: 10px 12px;\n  text-align: left;\n  font-size: 13px;\n}\n#cc-app .cc-plan-table th:last-child,\n#cc-app .cc-plan-table td:last-child {\n  text-align: right;\n}\n#cc-app .cc-plan-table td {\n  padding: 10px 12px;\n  border-bottom: 1px solid #f1f5f9;\n  color: #1e293b;\n}\n#cc-app .cc-plan-table tr:last-child td {\n  border-bottom: none;\n}\n#cc-app .cc-badge-loss {\n  display: inline-block;\n  padding: 2px 8px;\n  border-radius: 20px;\n  font-size: 11px;\n  font-weight: 700;\n  background: #fef2f2;\n  color: #b91c1c;\n  margin-right: 4px;\n}\n#cc-app .cc-badge-gain {\n  display: inline-block;\n  padding: 2px 8px;\n  border-radius: 20px;\n  font-size: 11px;\n  font-weight: 700;\n  background: #f0fdf4;\n  color: #15803d;\n  margin-right: 4px;\n}\n#cc-app .cc-macro-row {\n  display: flex;\n  align-items: center;\n  gap: 20px;\n  flex-wrap: wrap;\n}\n#cc-app .cc-canvas-wrap {\n  flex-shrink: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n#cc-app canvas {\n  display: block;\n}\n#cc-app .cc-macro-legend {\n  flex: 1;\n  min-width: 160px;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n#cc-app .cc-legend-item {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n#cc-app .cc-legend-dot {\n  width: 14px;\n  height: 14px;\n  border-radius: 50%;\n  flex-shrink: 0;\n}\n#cc-app .cc-legend-text {\n  font-size: 13px;\n  color: #334155;\n  flex: 1;\n}\n#cc-app .cc-legend-val {\n  font-size: 14px;\n  font-weight: 700;\n  color: #0f172a;\n}\n#cc-app .cc-note {\n  font-size: 12px;\n  color: #94a3b8;\n  margin-top: 14px;\n  line-height: 1.6;\n}\n#cc-app .cc-error {\n  color: #b91c1c;\n  font-size: 13px;\n  font-weight: 600;\n  padding: 10px 14px;\n  background: #fef2f2;\n  border: 1px solid #fecaca;\n  border-radius: 8px;\n  display: none;\n  margin-top: 10px;\n}\n#cc-app .cc-error.visible {\n  display: block;\n}\n\u003c/style\u003e\n\u003c!-- Input Card --\u003e\n\u003cdiv class=\"cc-card\"\u003e\n  \u003cdiv class=\"cc-section-title\"\u003e基本情報を入力\u003c/div\u003e\n  \u003cdiv class=\"cc-grid\"\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;!-- Gender --\u0026gt;\n\u0026lt;div class=\u0026quot;cc-field cc-full\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;性別\u0026lt;/label\u0026gt;\n  \u0026lt;div class=\u0026quot;cc-gender-row\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;cc-gender-btn active\u0026quot; id=\u0026quot;cc-male\u0026quot; onclick=\u0026quot;ccSetGender('male')\u0026quot;\u0026gt;男性\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cc-gender-btn\u0026quot; id=\u0026quot;cc-female\u0026quot; onclick=\u0026quot;ccSetGender('female')\u0026quot;\u0026gt;女性\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Age --\u0026gt;\n\u0026lt;div class=\u0026quot;cc-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;cc-age\u0026quot;\u0026gt;年齢（歳）\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;cc-age\u0026quot; min=\u0026quot;10\u0026quot; max=\u0026quot;100\u0026quot; placeholder=\u0026quot;例: 35\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Height --\u0026gt;\n\u0026lt;div class=\u0026quot;cc-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;cc-height\u0026quot;\u0026gt;身長（cm）\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;cc-height\u0026quot; min=\u0026quot;100\u0026quot; max=\u0026quot;250\u0026quot; step=\u0026quot;0.1\u0026quot; placeholder=\u0026quot;例: 168\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Weight --\u0026gt;\n\u0026lt;div class=\u0026quot;cc-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;cc-weight\u0026quot;\u0026gt;体重（kg）\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;cc-weight\u0026quot; min=\u0026quot;20\u0026quot; max=\u0026quot;300\u0026quot; step=\u0026quot;0.1\u0026quot; placeholder=\u0026quot;例: 65\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Activity Level --\u0026gt;\n\u0026lt;div class=\u0026quot;cc-field\u0026quot;\u0026gt;\n  \u0026lt;label for=\u0026quot;cc-activity\u0026quot;\u0026gt;活動レベル\u0026lt;/label\u0026gt;\n  \u0026lt;select id=\u0026quot;cc-activity\u0026quot;\u0026gt;\n    \u0026lt;option value=\u0026quot;1.2\u0026quot;\u0026gt;座り仕事（ほぼ運動なし）\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;1.375\u0026quot;\u0026gt;軽い運動（週1〜3回）\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;1.55\u0026quot; selected\u0026gt;中程度の運動（週3〜5回）\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;1.725\u0026quot;\u0026gt;激しい運動（週6〜7回）\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;1.9\u0026quot;\u0026gt;非常に激しい運動（1日2回など）\u0026lt;/option\u0026gt;\n  \u0026lt;/select\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Formula --\u0026gt;\n\u0026lt;div class=\u0026quot;cc-field cc-full\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;計算式\u0026lt;/label\u0026gt;\n  \u0026lt;div class=\u0026quot;cc-formula-row\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;cc-formula-btn active\u0026quot; id=\u0026quot;cc-mifflin\u0026quot; onclick=\u0026quot;ccSetFormula('mifflin')\u0026quot;\u0026gt;Mifflin-St Jeor（推奨）\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cc-formula-btn\u0026quot; id=\u0026quot;cc-harris\u0026quot; onclick=\u0026quot;ccSetFormula('harris')\u0026quot;\u0026gt;Harris-Benedict\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"margin-top:18px;\"\u003e\n    \u003cbutton class=\"cc-btn-primary\" onclick=\"ccCalculate()\"\u003eカロリーを計算する\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cc-error\" id=\"cc-error\"\u003e入力内容を確認してください。年齢・身長・体重はすべて正の数で入力してください。\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Results --\u003e\n\u003cdiv class=\"cc-results\" id=\"cc-results\"\u003e\n  \u003c!-- BMR + TDEE --\u003e\n  \u003cdiv class=\"cc-card\"\u003e\n    \u003cdiv class=\"cc-section-title\"\u003e計算結果\u003c/div\u003e\n    \u003cdiv class=\"cc-stat-grid\"\u003e\n      \u003cdiv class=\"cc-stat-box\"\u003e\n        \u003cdiv class=\"cc-stat-label\"\u003e基礎代謝量（BMR）\u003c/div\u003e\n        \u003cdiv class=\"cc-stat-value\" id=\"cc-bmr-val\"\u003e—\u003c/div\u003e\n        \u003cdiv class=\"cc-stat-unit\"\u003ekcal/日\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"cc-stat-box highlight\"\u003e\n        \u003cdiv class=\"cc-stat-label\"\u003e1日の総消費カロリー（TDEE）\u003c/div\u003e\n        \u003cdiv class=\"cc-stat-value\" id=\"cc-tdee-val\"\u003e—\u003c/div\u003e\n        \u003cdiv class=\"cc-stat-unit\"\u003ekcal/日\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cp class=\"cc-note\"\u003e※ BMR（Basal Metabolic Rate）は安静時に消費するカロリー。TDEEは活動レベルを加味した1日の総消費カロリーです。個人差・体組成によって実際の値は異なります。\u003c/p\u003e","title":"カロリー計算ツール｜1日の必要摂取カロリー・消費量を自動算出【無料】"},{"content":" 読む速度： 225 WPM 📖 — 読了時間 🎤 — 話す時間\n(130 WPM) 📝 0 単語数 🔤 0 文字数 📄 0 文章数 推定難易度 — 1文あたりの単語数と単語の長さに基づいて算出\nテキストをクリア\n確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/reading-time-estimator/","summary":"\u003cdiv id=\"rte-app\"\u003e\n  \u003cstyle\u003e\n    #rte-app {\n      font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Yu Gothic UI\", sans-serif;\n      max-width: 760px;\n      margin: 0 auto;\n      color: #1a1a2e;\n    }\n    #rte-app .rte-textarea {\n      width: 100%;\n      height: 220px;\n      padding: 14px 16px;\n      font-size: 15px;\n      line-height: 1.7;\n      border: 2px solid #e0e4ef;\n      border-radius: 10px;\n      resize: vertical;\n      box-sizing: border-box;\n      background: #fafbff;\n      color: #1a1a2e;\n      transition: border-color 0.2s;\n      outline: none;\n    }\n    #rte-app .rte-textarea:focus {\n      border-color: #4f6ef7;\n      background: #fff;\n    }\n    #rte-app .rte-textarea::placeholder {\n      color: #aab0c8;\n    }\n    #rte-app .rte-slider-row {\n      display: flex;\n      align-items: center;\n      gap: 14px;\n      margin: 18px 0 10px;\n      flex-wrap: wrap;\n    }\n    #rte-app .rte-slider-label {\n      font-size: 14px;\n      color: #555;\n      white-space: nowrap;\n    }\n    #rte-app .rte-slider {\n      flex: 1;\n      min-width: 140px;\n      accent-color: #4f6ef7;\n      cursor: pointer;\n    }\n    #rte-app .rte-wpm-badge {\n      background: #4f6ef7;\n      color: #fff;\n      font-size: 13px;\n      font-weight: 600;\n      padding: 3px 11px;\n      border-radius: 20px;\n      white-space: nowrap;\n    }\n    #rte-app .rte-cards {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(148px, 1fr));\n      gap: 14px;\n      margin: 20px 0;\n    }\n    #rte-app .rte-card {\n      background: #fff;\n      border: 1.5px solid #e0e4ef;\n      border-radius: 12px;\n      padding: 18px 16px 14px;\n      text-align: center;\n      box-shadow: 0 2px 8px rgba(79,110,247,0.06);\n    }\n    #rte-app .rte-card-icon {\n      font-size: 26px;\n      margin-bottom: 6px;\n      display: block;\n    }\n    #rte-app .rte-card-value {\n      font-size: 26px;\n      font-weight: 700;\n      color: #4f6ef7;\n      line-height: 1.1;\n    }\n    #rte-app .rte-card-label {\n      font-size: 12px;\n      color: #888;\n      margin-top: 4px;\n      line-height: 1.5;\n    }\n    #rte-app .rte-difficulty-section {\n      margin: 10px 0 6px;\n    }\n    #rte-app .rte-difficulty-header {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      margin-bottom: 6px;\n    }\n    #rte-app .rte-difficulty-title {\n      font-size: 13px;\n      color: #555;\n      font-weight: 500;\n    }\n    #rte-app .rte-difficulty-label {\n      font-size: 13px;\n      font-weight: 600;\n      color: #4f6ef7;\n    }\n    #rte-app .rte-bar-track {\n      width: 100%;\n      height: 10px;\n      background: #e8eaf5;\n      border-radius: 6px;\n      overflow: hidden;\n    }\n    #rte-app .rte-bar-fill {\n      height: 100%;\n      border-radius: 6px;\n      background: linear-gradient(90deg, #6ee7b7, #4f6ef7, #f97316);\n      transition: width 0.4s cubic-bezier(.4,0,.2,1);\n    }\n    #rte-app .rte-hint {\n      font-size: 12px;\n      color: #aab0c8;\n      text-align: center;\n      margin-top: 4px;\n    }\n    #rte-app .rte-clear-btn {\n      display: block;\n      margin: 14px auto 0;\n      padding: 8px 28px;\n      font-size: 14px;\n      border: 1.5px solid #e0e4ef;\n      border-radius: 8px;\n      background: #fff;\n      color: #555;\n      cursor: pointer;\n      transition: background 0.15s, border-color 0.15s;\n    }\n    #rte-app .rte-clear-btn:hover {\n      background: #f0f2ff;\n      border-color: #4f6ef7;\n      color: #4f6ef7;\n    }\n  \u003c/style\u003e\n  \u003ctextarea\n    id=\"rte-input\"\n    class=\"rte-textarea\"\n    placeholder=\"記事のテキストをここに貼り付けるか入力してください...\"\n  \u003e\u003c/textarea\u003e\n  \u003cdiv class=\"rte-slider-row\"\u003e\n    \u003cspan class=\"rte-slider-label\"\u003e読む速度：\u003c/span\u003e\n    \u003cinput\n      type=\"range\"\n      id=\"rte-wpm-slider\"\n      class=\"rte-slider\"\n      min=\"100\"\n      max=\"400\"\n      value=\"225\"\n      step=\"5\"\n    /\u003e\n    \u003cspan class=\"rte-wpm-badge\"\u003e\u003cspan id=\"rte-wpm-display\"\u003e225\u003c/span\u003e WPM\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"rte-cards\"\u003e\n    \u003cdiv class=\"rte-card\"\u003e\n      \u003cspan class=\"rte-card-icon\"\u003e📖\u003c/span\u003e\n      \u003cdiv class=\"rte-card-value\" id=\"rte-read-time\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"rte-card-label\"\u003e読了時間\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"rte-card\"\u003e\n      \u003cspan class=\"rte-card-icon\"\u003e🎤\u003c/span\u003e\n      \u003cdiv class=\"rte-card-value\" id=\"rte-speak-time\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"rte-card-label\"\u003e話す時間\u003cbr\u003e\u003csmall style=\"font-weight:400;color:#bbb\"\u003e(130 WPM)\u003c/small\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"rte-card\"\u003e\n      \u003cspan class=\"rte-card-icon\"\u003e📝\u003c/span\u003e\n      \u003cdiv class=\"rte-card-value\" id=\"rte-words\"\u003e0\u003c/div\u003e\n      \u003cdiv class=\"rte-card-label\"\u003e単語数\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"rte-card\"\u003e\n      \u003cspan class=\"rte-card-icon\"\u003e🔤\u003c/span\u003e\n      \u003cdiv class=\"rte-card-value\" id=\"rte-chars\"\u003e0\u003c/div\u003e\n      \u003cdiv class=\"rte-card-label\"\u003e文字数\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"rte-card\"\u003e\n      \u003cspan class=\"rte-card-icon\"\u003e📄\u003c/span\u003e\n      \u003cdiv class=\"rte-card-value\" id=\"rte-sentences\"\u003e0\u003c/div\u003e\n      \u003cdiv class=\"rte-card-label\"\u003e文章数\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"rte-difficulty-section\"\u003e\n    \u003cdiv class=\"rte-difficulty-header\"\u003e\n      \u003cspan class=\"rte-difficulty-title\"\u003e推定難易度\u003c/span\u003e\n      \u003cspan class=\"rte-difficulty-label\" id=\"rte-difficulty-label\"\u003e—\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"rte-bar-track\"\u003e\n      \u003cdiv class=\"rte-bar-fill\" id=\"rte-bar-fill\" style=\"width:0%\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cp class=\"rte-hint\"\u003e1文あたりの単語数と単語の長さに基づいて算出\u003c/p\u003e","title":"読了時間推定ツール"},{"content":"起床時刻か就寝時刻を入力するだけで、90分の睡眠サイクルに基づいた最適なスケジュールを計算。サイクルの途中で目覚めずに、すっきりした朝を迎えましょう。\n起床時刻から計算する 就寝時刻から計算する 目標の起床時刻 90分の睡眠サイクルに基づいて、最適な就寝時刻を計算します。\n就寝時刻（眠りにつく時刻） 90分の睡眠サイクルに基づいて、最適な起床時刻を計算します。\n睡眠時刻を計算する おすすめの就寝時刻\n睡眠サイクルのタイムライン（ベスト選択時）\n入眠時間（約14分） 90分サイクル 睡眠の質を高めるヒント\n🌙毎日同じ時間に寝起きする：週末も含めて就寝・起床時刻を固定することで、体内時計が安定します。 📵寝る前はスクリーンを避ける：就寝30〜60分前からスマホ・PC画面を控えましょう。ブルーライトはメラトニン分泌を抑制します。 ❄️寝室を涼しく保つ：理想的な室温は18〜20℃。体温が下がることで眠気が誘発されます。 ☕カフェインは早めにカット：カフェインの半減期は約5時間。就寝6時間前には摂取を控えるのがベストです。 🛏️ベッドは睡眠専用に：ベッドで作業や動画視聴をしないことで、脳が「ベッド＝眠る場所」と認識します。 💡5〜6サイクルが理想：多くの成人は5〜6回の90分サイクル（7.5〜9時間）で最もすっきり目覚められます。サイクルの途中で起きると睡眠慣性（だるさ）が残ります。 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → カロリーを計算 → カロリー計算ツール BMIを確認する → BMI計算ツール 正確な年齢を調べる → 年齢計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/sleep-calculator/","summary":"\u003cp\u003e起床時刻か就寝時刻を入力するだけで、90分の睡眠サイクルに基づいた最適なスケジュールを計算。サイクルの途中で目覚めずに、すっきりした朝を迎えましょう。\u003c/p\u003e\n\u003cdiv id=\"sl-app\"\u003e\n\u003cstyle\u003e\n#sl-app *,\n#sl-app *::before,\n#sl-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#sl-app {\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  color: #1e293b;\n  max-width: 700px;\n  margin: 0 auto;\n  padding: 8px 0;\n  font-size: 15px;\n  line-height: 1.6;\n}\n#sl-app h2 {\n  font-size: 18px;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 16px;\n}\n#sl-app .sl-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 22px 24px;\n  margin-bottom: 20px;\n}\n#sl-app .sl-tabs {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 22px;\n}\n#sl-app .sl-tab {\n  flex: 1;\n  padding: 10px 14px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  background: #fff;\n  color: #475569;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  text-align: center;\n  transition: all 0.15s;\n}\n#sl-app .sl-tab:hover {\n  border-color: #6366f1;\n  color: #6366f1;\n}\n#sl-app .sl-tab.active {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n#sl-app .sl-label {\n  display: block;\n  font-size: 13px;\n  font-weight: 600;\n  color: #334155;\n  margin-bottom: 7px;\n}\n#sl-app .sl-time-input {\n  width: 100%;\n  max-width: 220px;\n  padding: 10px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 22px;\n  font-weight: 700;\n  color: #0f172a;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#sl-app .sl-time-input:focus {\n  border-color: #6366f1;\n}\n#sl-app .sl-hint {\n  font-size: 12px;\n  color: #94a3b8;\n  margin-top: 6px;\n}\n#sl-app .sl-btn {\n  display: inline-block;\n  margin-top: 16px;\n  padding: 11px 28px;\n  background: #6366f1;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#sl-app .sl-btn:hover {\n  background: #4f46e5;\n}\n#sl-app .sl-results {\n  display: none;\n}\n#sl-app .sl-results.visible {\n  display: block;\n}\n#sl-app .sl-results-title {\n  font-size: 15px;\n  font-weight: 700;\n  color: #334155;\n  margin-bottom: 14px;\n  padding-bottom: 8px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#sl-app .sl-cycle-list {\n  list-style: none;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n#sl-app .sl-cycle-item {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  padding: 14px 16px;\n  border-radius: 10px;\n  border: 1.5px solid #e2e8f0;\n  background: #fff;\n}\n#sl-app .sl-cycle-item.best {\n  border-color: #6366f1;\n  background: #eef2ff;\n}\n#sl-app .sl-cycle-item.good {\n  border-color: #34d399;\n  background: #f0fdf4;\n}\n#sl-app .sl-cycle-time {\n  font-size: 24px;\n  font-weight: 800;\n  color: #0f172a;\n  min-width: 72px;\n}\n#sl-app .sl-cycle-meta {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n}\n#sl-app .sl-cycle-cycles {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n}\n#sl-app .sl-cycle-duration {\n  font-size: 12px;\n  color: #94a3b8;\n}\n#sl-app .sl-badge {\n  margin-left: auto;\n  padding: 4px 10px;\n  border-radius: 20px;\n  font-size: 12px;\n  font-weight: 700;\n  white-space: nowrap;\n}\n#sl-app .sl-badge-best {\n  background: #6366f1;\n  color: #fff;\n}\n#sl-app .sl-badge-good {\n  background: #34d399;\n  color: #fff;\n}\n#sl-app .sl-badge-ok {\n  background: #f1f5f9;\n  color: #64748b;\n}\n#sl-app .sl-timeline {\n  margin-top: 8px;\n  padding: 16px;\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n}\n#sl-app .sl-timeline-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #334155;\n  margin-bottom: 12px;\n}\n#sl-app .sl-tl-bar {\n  display: flex;\n  height: 28px;\n  border-radius: 6px;\n  overflow: hidden;\n  margin-bottom: 8px;\n}\n#sl-app .sl-tl-seg {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 10px;\n  font-weight: 700;\n  color: #fff;\n  transition: flex 0.3s;\n}\n#sl-app .sl-tl-seg.fall-asleep { background: #94a3b8; }\n#sl-app .sl-tl-seg.cycle { background: #6366f1; }\n#sl-app .sl-tl-seg.cycle.even { background: #818cf8; }\n#sl-app .sl-tl-legend {\n  display: flex;\n  gap: 14px;\n  flex-wrap: wrap;\n}\n#sl-app .sl-tl-legend-item {\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  font-size: 11px;\n  color: #64748b;\n}\n#sl-app .sl-tl-dot {\n  width: 10px;\n  height: 10px;\n  border-radius: 3px;\n  flex-shrink: 0;\n}\n#sl-app .sl-section-label {\n  font-size: 13px;\n  font-weight: 700;\n  color: #334155;\n  margin-bottom: 10px;\n  margin-top: 18px;\n}\n#sl-app .sl-tips {\n  list-style: none;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n#sl-app .sl-tip {\n  display: flex;\n  gap: 10px;\n  align-items: flex-start;\n  font-size: 13px;\n  color: #475569;\n  padding: 10px 14px;\n  background: #f8fafc;\n  border-radius: 8px;\n  border: 1px solid #e2e8f0;\n}\n#sl-app .sl-tip-icon {\n  font-size: 16px;\n  flex-shrink: 0;\n  line-height: 1.4;\n}\n@media (max-width: 520px) {\n  #sl-app .sl-tabs {\n    flex-direction: column;\n  }\n  #sl-app .sl-cycle-time {\n    font-size: 20px;\n    min-width: 60px;\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"sl-tabs\"\u003e\n  \u003cbutton class=\"sl-tab active\" id=\"sl-tab-wake\" onclick=\"(function(){document.getElementById('sl-tab-wake').classList.add('active');document.getElementById('sl-tab-bed').classList.remove('active');document.getElementById('sl-panel-wake').style.display='block';document.getElementById('sl-panel-bed').style.display='none';document.getElementById('sl-results').classList.remove('visible');})()\"\u003e起床時刻から計算する\u003c/button\u003e\n  \u003cbutton class=\"sl-tab\" id=\"sl-tab-bed\" onclick=\"(function(){document.getElementById('sl-tab-bed').classList.add('active');document.getElementById('sl-tab-wake').classList.remove('active');document.getElementById('sl-panel-bed').style.display='block';document.getElementById('sl-panel-wake').style.display='none';document.getElementById('sl-results').classList.remove('visible');})()\"\u003e就寝時刻から計算する\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sl-card\"\u003e\n  \u003cdiv id=\"sl-panel-wake\"\u003e\n    \u003clabel class=\"sl-label\" for=\"sl-wake-time\"\u003e目標の起床時刻\u003c/label\u003e\n    \u003cinput type=\"time\" id=\"sl-wake-time\" class=\"sl-time-input\"\u003e\n    \u003cp class=\"sl-hint\"\u003e90分の睡眠サイクルに基づいて、最適な就寝時刻を計算します。\u003c/p\u003e","title":"睡眠サイクル計算ツール"},{"content":" フォントペアリングツール 12種類のフォント組み合わせをリアルタイムプレビュー — 調整してCSSをコピー\nフォントの組み合わせ \u0026lt;!-- 情報バー --\u0026gt; \u0026lt;div class=\u0026quot;fp-info-strip\u0026quot; id=\u0026quot;fp-info-strip\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fp-info-item\u0026quot;\u0026gt;\u0026lt;strong\u0026gt;見出し：\u0026lt;/strong\u0026gt;\u0026lt;span id=\u0026quot;fp-info-heading\u0026quot;\u0026gt;—\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;fp-info-item\u0026quot;\u0026gt;\u0026lt;strong\u0026gt;本文：\u0026lt;/strong\u0026gt;\u0026lt;span id=\u0026quot;fp-info-body\u0026quot;\u0026gt;—\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;fp-info-item\u0026quot;\u0026gt;\u0026lt;strong\u0026gt;スタイル：\u0026lt;/strong\u0026gt;\u0026lt;span id=\u0026quot;fp-info-style\u0026quot;\u0026gt;—\u0026lt;/span\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- コントロール --\u0026gt; \u0026lt;div class=\u0026quot;fp-card\u0026quot; style=\u0026quot;margin-bottom:16px;\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;カスタマイズ\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;fp-controls\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fp-control-group\u0026quot; style=\u0026quot;grid-column:1/-1;\u0026quot;\u0026gt; \u0026lt;label\u0026gt;サンプルテキスト\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fp-sample-text\u0026quot; value=\u0026quot;人間の知恵と技術が融合し、新たな創造の地平が拓かれる\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;見出しサイズ \u0026lt;span class=\u0026quot;fp-val\u0026quot; id=\u0026quot;fp-heading-size-val\u0026quot;\u0026gt;2.4rem\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;fp-heading-size\u0026quot; min=\u0026quot;1.2\u0026quot; max=\u0026quot;4.5\u0026quot; step=\u0026quot;0.1\u0026quot; value=\u0026quot;2.4\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;本文サイズ \u0026lt;span class=\u0026quot;fp-val\u0026quot; id=\u0026quot;fp-body-size-val\u0026quot;\u0026gt;1rem\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;fp-body-size\u0026quot; min=\u0026quot;0.75\u0026quot; max=\u0026quot;1.5\u0026quot; step=\u0026quot;0.05\u0026quot; value=\u0026quot;1\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;行間 \u0026lt;span class=\u0026quot;fp-val\u0026quot; id=\u0026quot;fp-line-height-val\u0026quot;\u0026gt;1.7\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;fp-line-height\u0026quot; min=\u0026quot;1.0\u0026quot; max=\u0026quot;2.5\u0026quot; step=\u0026quot;0.05\u0026quot; value=\u0026quot;1.7\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;字間 \u0026lt;span class=\u0026quot;fp-val\u0026quot; id=\u0026quot;fp-letter-spacing-val\u0026quot;\u0026gt;0em\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;fp-letter-spacing\u0026quot; min=\u0026quot;-0.05\u0026quot; max=\u0026quot;0.2\u0026quot; step=\u0026quot;0.005\u0026quot; value=\u0026quot;0\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;見出しカラー\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;fp-heading-color\u0026quot; value=\u0026quot;#1a1a2e\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;本文カラー\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;fp-body-color\u0026quot; value=\u0026quot;#374151\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-section-title\u0026quot;\u0026gt;プレビューモード\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-mode-tabs\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;fp-mode-tab active\u0026quot; data-mode=\u0026quot;blog\u0026quot;\u0026gt;ブログ記事\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-mode-tab\u0026quot; data-mode=\u0026quot;hero\u0026quot;\u0026gt;ヒーローセクション\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-mode-tab\u0026quot; data-mode=\u0026quot;card\u0026quot;\u0026gt;カードレイアウト\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- プレビュー --\u0026gt; \u0026lt;div class=\u0026quot;fp-preview-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fp-preview-label\u0026quot;\u0026gt;ライブプレビュー\u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;fp-preview\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- CSS出力 --\u0026gt; \u0026lt;div class=\u0026quot;fp-card\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;CSSコード\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;fp-css-box\u0026quot;\u0026gt; \u0026lt;pre id=\u0026quot;fp-css-output\u0026quot;\u0026gt;\u0026lt;/pre\u0026gt; \u0026lt;button class=\u0026quot;fp-copy-btn\u0026quot; id=\u0026quot;fp-copy-btn\u0026quot;\u0026gt;CSSをコピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール フォントサイズ変換 → フォントサイズ変換ツール カラーパレット → カラーパレット生成 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/font-pairing-tool/","summary":"\u003cdiv id=\"fp-app\"\u003e\n\u003cstyle\u003e\n#fp-app *,\n#fp-app *::before,\n#fp-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#fp-app {\n  font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  color: #1a1a2e;\n  line-height: 1.7;\n  max-width: 960px;\n  margin: 0 auto;\n  padding: 0 16px;\n}\n\n#fp-app .fp-hero {\n  background: linear-gradient(135deg, #7c3aed 0%, #2563eb 100%);\n  color: #fff;\n  border-radius: 14px;\n  padding: 36px 28px 28px;\n  margin-bottom: 24px;\n  text-align: center;\n}\n\n#fp-app .fp-hero h2 {\n  font-size: 1.7rem;\n  font-weight: 800;\n  margin-bottom: 8px;\n  letter-spacing: -0.01em;\n}\n\n#fp-app .fp-hero p {\n  font-size: 0.95rem;\n  opacity: 0.9;\n}\n\n#fp-app .fp-layout {\n  display: grid;\n  grid-template-columns: 300px 1fr;\n  gap: 20px;\n  align-items: start;\n}\n\n@media (max-width: 700px) {\n  #fp-app .fp-layout {\n    grid-template-columns: 1fr;\n  }\n}\n\n#fp-app .fp-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n}\n\n#fp-app .fp-card h3 {\n  font-size: 0.78rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  color: #64748b;\n  margin-bottom: 14px;\n}\n\n/* Pairing list */\n#fp-app .fp-pairing-list {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n\n#fp-app .fp-pairing-btn {\n  display: block;\n  width: 100%;\n  text-align: left;\n  padding: 12px 14px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 9px;\n  background: #fff;\n  cursor: pointer;\n  transition: border-color 0.15s, background 0.15s;\n}\n\n#fp-app .fp-pairing-btn:hover {\n  border-color: #7c3aed;\n  background: #faf5ff;\n}\n\n#fp-app .fp-pairing-btn.active {\n  border-color: #7c3aed;\n  background: #f5f3ff;\n}\n\n#fp-app .fp-pairing-btn .fp-btn-heading {\n  font-size: 0.93rem;\n  font-weight: 700;\n  color: #1e1b4b;\n  line-height: 1.25;\n}\n\n#fp-app .fp-pairing-btn .fp-btn-body {\n  font-size: 0.76rem;\n  color: #64748b;\n  margin-top: 2px;\n}\n\n#fp-app .fp-pairing-btn .fp-btn-tag {\n  font-size: 0.67rem;\n  padding: 2px 7px;\n  border-radius: 20px;\n  background: #ede9fe;\n  color: #6d28d9;\n  display: inline-block;\n  margin-top: 5px;\n  font-weight: 600;\n}\n\n/* Controls */\n#fp-app .fp-controls {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n  margin-bottom: 16px;\n}\n\n@media (max-width: 480px) {\n  #fp-app .fp-controls {\n    grid-template-columns: 1fr;\n  }\n}\n\n#fp-app .fp-control-group label {\n  display: block;\n  font-size: 0.73rem;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 5px;\n}\n\n#fp-app .fp-control-group input[type=\"range\"] {\n  width: 100%;\n  accent-color: #7c3aed;\n  cursor: pointer;\n}\n\n#fp-app .fp-control-group input[type=\"text\"] {\n  width: 100%;\n  padding: 7px 10px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 7px;\n  font-size: 0.85rem;\n  outline: none;\n  transition: border-color 0.15s;\n  font-family: inherit;\n}\n\n#fp-app .fp-control-group input[type=\"text\"]:focus {\n  border-color: #7c3aed;\n}\n\n#fp-app .fp-control-group input[type=\"color\"] {\n  width: 100%;\n  height: 36px;\n  padding: 2px 4px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 7px;\n  cursor: pointer;\n  background: #fff;\n}\n\n#fp-app .fp-val {\n  font-size: 0.72rem;\n  color: #7c3aed;\n  font-weight: 700;\n  margin-left: 6px;\n}\n\n/* Mode tabs */\n#fp-app .fp-mode-tabs {\n  display: flex;\n  gap: 6px;\n  margin-bottom: 16px;\n  flex-wrap: wrap;\n}\n\n#fp-app .fp-mode-tab {\n  padding: 6px 14px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 20px;\n  background: #fff;\n  font-size: 0.78rem;\n  font-weight: 600;\n  color: #64748b;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n\n#fp-app .fp-mode-tab:hover {\n  border-color: #7c3aed;\n  color: #7c3aed;\n}\n\n#fp-app .fp-mode-tab.active {\n  background: #7c3aed;\n  border-color: #7c3aed;\n  color: #fff;\n}\n\n/* Preview area */\n#fp-app .fp-preview-wrap {\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  overflow: hidden;\n  margin-bottom: 16px;\n}\n\n#fp-app .fp-preview-label {\n  font-size: 0.7rem;\n  font-weight: 600;\n  color: #94a3b8;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  padding: 8px 14px;\n  background: #f8fafc;\n  border-bottom: 1px solid #e2e8f0;\n}\n\n#fp-app #fp-preview {\n  padding: 28px 24px;\n  min-height: 220px;\n  background: #fff;\n  transition: background 0.2s;\n}\n\n#fp-app #fp-preview.mode-hero {\n  background: linear-gradient(135deg, #1e1b4b 0%, #312e81 100%);\n  padding: 48px 36px;\n}\n\n#fp-app #fp-preview.mode-card {\n  background: #f1f5f9;\n  display: flex;\n  gap: 16px;\n  flex-wrap: wrap;\n  padding: 20px;\n}\n\n#fp-app .fp-preview-card {\n  flex: 1;\n  min-width: 180px;\n  background: #fff;\n  border-radius: 10px;\n  padding: 18px;\n  box-shadow: 0 1px 6px rgba(0,0,0,0.08);\n}\n\n#fp-app .fp-preview-card .fp-card-tag {\n  font-size: 0.68rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #7c3aed;\n  margin-bottom: 8px;\n}\n\n/* CSS output */\n#fp-app .fp-css-box {\n  background: #0f172a;\n  border-radius: 10px;\n  padding: 16px;\n  position: relative;\n}\n\n#fp-app .fp-css-box pre {\n  font-family: \"Consolas\", \"Courier New\", Courier, monospace;\n  font-size: 0.77rem;\n  color: #e2e8f0;\n  white-space: pre-wrap;\n  word-break: break-all;\n  line-height: 1.7;\n}\n\n#fp-app .fp-copy-btn {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  padding: 5px 12px;\n  background: #7c3aed;\n  color: #fff;\n  border: none;\n  border-radius: 6px;\n  font-size: 0.73rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n  font-family: inherit;\n}\n\n#fp-app .fp-copy-btn:hover {\n  background: #6d28d9;\n}\n\n#fp-app .fp-copy-btn.copied {\n  background: #16a34a;\n}\n\n#fp-app .fp-info-strip {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  padding: 12px 14px;\n  background: #f5f3ff;\n  border: 1.5px solid #ddd6fe;\n  border-radius: 9px;\n  margin-bottom: 16px;\n}\n\n#fp-app .fp-info-item {\n  font-size: 0.77rem;\n  color: #5b21b6;\n}\n\n#fp-app .fp-info-item strong {\n  font-weight: 700;\n}\n\n#fp-app .fp-section-title {\n  font-size: 0.77rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  color: #64748b;\n  margin-bottom: 10px;\n}\n\u003c/style\u003e\n\u003cdiv class=\"fp-hero\"\u003e\n  \u003ch2\u003eフォントペアリングツール\u003c/h2\u003e\n  \u003cp\u003e12種類のフォント組み合わせをリアルタイムプレビュー — 調整してCSSをコピー\u003c/p\u003e","title":"フォントペアリングツール"},{"content":" 電話番号フォーマッター＆バリデーター 1件変換 一括変換 日本番号ガイド 国番号一覧 電話番号を入力 国を選択 日本 (+81) アメリカ (+1) カナダ (+1) イギリス (+44) ドイツ (+49) フランス (+33) オーストラリア (+61) 韓国 (+82) 中国 (+86) インド (+91) ブラジル (+55) メキシコ (+52) イタリア (+39) スペイン (+34) オランダ (+31) シンガポール (+65) 香港 (+852) 台湾 (+886) ニュージーランド (+64) 南アフリカ (+27) 国際形式 コピー 国内形式 コピー E.164 コピー RFC 3966 コピー 数字のみ コピー 国を選択（全番号共通） 日本 (+81) アメリカ (+1) カナダ (+1) イギリス (+44) ドイツ (+49) フランス (+33) オーストラリア (+61) 韓国 (+82) 中国 (+86) インド (+91) ブラジル (+55) メキシコ (+52) イタリア (+39) スペイン (+34) オランダ (+31) シンガポール (+65) 香港 (+852) 台湾 (+886) ニュージーランド (+64) 南アフリカ (+27) 電話番号を1行1件で貼り付け 一括変換 クリア 結果をコピー 日本の電話番号体系ガイド 日本の電話番号は市外局番＋市内局番＋加入者番号で構成され、国内では先頭に0（市外局番の一部）を付けます。国際発信時は+81を付け、先頭の0を除きます。 種別 番号帯 桁数（0含む） 国内形式例 国際形式例 固定（東京・大阪） 03-xxxx / 06-xxxx 10桁 03-1234-5678 +81-3-1234-5678 固定（地方 3桁局番） 0AB-xxxx-xxxx 10桁 045-123-4567 +81-45-123-4567 固定（地方 4桁局番） 0ABC-xx-xxxx 10桁 0120-12-3456（例外） +81-120-12-3456 携帯（docomo/au/SB） 090 / 080 / 070 11桁 090-1234-5678 +81-90-1234-5678 IP電話 050-xxxx-xxxx 11桁 050-1234-5678 +81-50-1234-5678 フリーダイヤル 0120 / 0800 11桁 0120-123-456 +81-120-123-456 ナビダイヤル 0570-xxx-xxx 10桁 0570-123-456 +81-570-123-456 緊急・特番 110 / 119 / 117等 3桁 110 （国内専用） ※ E.164形式では+81の後に0を除いた番号を続けます（例: +819012345678）。RFC 3966形式は tel:+81-90-1234-5678 のように記述します。\n主要国の国番号・市外局番プレフィックス・桁数の一覧です。\n国名 国番号 局番プレフィックス 加入者番号桁数 例 顧客管理を効率化 → freee会計で取引先情報を一元管理\n","permalink":"https://productivity-works.com/ja/tools/phone-formatter/","summary":"\u003cdiv id=\"pf-app\"\u003e\n\u003cstyle\u003e\n#pf-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic\", Meiryo, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#pf-app h2 {\n  font-size: 1.3rem;\n  font-weight: 700;\n  margin: 2rem 0 1rem;\n  color: #0f3460;\n  border-left: 4px solid #e94560;\n  padding-left: 0.75rem;\n}\n#pf-app .pf-card {\n  background: #fff;\n  border: 1px solid #e0e0e0;\n  border-radius: 10px;\n  padding: 1.5rem;\n  margin-bottom: 1.5rem;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.05);\n}\n#pf-app label {\n  display: block;\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #444;\n  margin-bottom: 0.4rem;\n}\n#pf-app input[type=\"text\"],\n#pf-app select,\n#pf-app textarea {\n  width: 100%;\n  padding: 0.65rem 0.9rem;\n  border: 1px solid #ccc;\n  border-radius: 6px;\n  font-size: 1rem;\n  box-sizing: border-box;\n  transition: border-color 0.2s;\n}\n#pf-app input[type=\"text\"]:focus,\n#pf-app select:focus,\n#pf-app textarea:focus {\n  outline: none;\n  border-color: #0f3460;\n}\n#pf-app textarea {\n  min-height: 130px;\n  resize: vertical;\n  font-family: monospace;\n  font-size: 0.9rem;\n}\n#pf-app .pf-row {\n  display: flex;\n  gap: 1rem;\n  flex-wrap: wrap;\n}\n#pf-app .pf-row \u003e * {\n  flex: 1;\n  min-width: 220px;\n}\n#pf-app .pf-btn {\n  display: inline-block;\n  background: #0f3460;\n  color: #fff;\n  border: none;\n  border-radius: 6px;\n  padding: 0.65rem 1.4rem;\n  font-size: 0.95rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.2s;\n  margin-top: 0.5rem;\n}\n#pf-app .pf-btn:hover {\n  background: #e94560;\n}\n#pf-app .pf-btn-secondary {\n  background: #6c757d;\n}\n#pf-app .pf-btn-secondary:hover {\n  background: #495057;\n}\n#pf-app .pf-result-grid {\n  display: grid;\n  grid-template-columns: 170px 1fr;\n  gap: 0.5rem 1rem;\n  align-items: center;\n  margin-top: 1rem;\n}\n#pf-app .pf-result-label {\n  font-size: 0.8rem;\n  font-weight: 700;\n  color: #666;\n  letter-spacing: 0.02em;\n}\n#pf-app .pf-result-value {\n  background: #f4f6fb;\n  border: 1px solid #dde3f0;\n  border-radius: 5px;\n  padding: 0.45rem 0.75rem;\n  font-family: monospace;\n  font-size: 1rem;\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  min-height: 2.2rem;\n  word-break: break-all;\n}\n#pf-app .pf-copy-btn {\n  background: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  padding: 2px 8px;\n  font-size: 0.75rem;\n  cursor: pointer;\n  color: #555;\n  white-space: nowrap;\n  margin-left: auto;\n  transition: background 0.15s;\n  font-family: sans-serif;\n}\n#pf-app .pf-copy-btn:hover {\n  background: #e0e7ff;\n}\n#pf-app .pf-badge {\n  display: inline-block;\n  padding: 3px 10px;\n  border-radius: 12px;\n  font-size: 0.78rem;\n  font-weight: 700;\n}\n#pf-app .pf-badge-valid {\n  background: #d4edda;\n  color: #155724;\n}\n#pf-app .pf-badge-invalid {\n  background: #f8d7da;\n  color: #721c24;\n}\n#pf-app .pf-badge-warn {\n  background: #fff3cd;\n  color: #856404;\n}\n#pf-app .pf-validation-box {\n  margin-top: 1rem;\n  padding: 0.75rem 1rem;\n  border-radius: 6px;\n  font-size: 0.9rem;\n}\n#pf-app .pf-validation-box.valid {\n  background: #d4edda;\n  border: 1px solid #c3e6cb;\n  color: #155724;\n}\n#pf-app .pf-validation-box.invalid {\n  background: #f8d7da;\n  border: 1px solid #f5c6cb;\n  color: #721c24;\n}\n#pf-app .pf-validation-box.warn {\n  background: #fff3cd;\n  border: 1px solid #ffeeba;\n  color: #856404;\n}\n#pf-app .bulk-output {\n  margin-top: 1rem;\n}\n#pf-app .bulk-output-line {\n  font-family: monospace;\n  font-size: 0.88rem;\n  padding: 0.3rem 0.5rem;\n  border-bottom: 1px solid #f0f0f0;\n  display: flex;\n  gap: 0.75rem;\n  align-items: center;\n  flex-wrap: wrap;\n}\n#pf-app .bulk-output-line:nth-child(even) {\n  background: #f9f9f9;\n}\n#pf-app .pf-ref-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.87rem;\n}\n#pf-app .pf-ref-table th {\n  background: #0f3460;\n  color: #fff;\n  padding: 0.5rem 0.75rem;\n  text-align: left;\n}\n#pf-app .pf-ref-table td {\n  padding: 0.45rem 0.75rem;\n  border-bottom: 1px solid #eee;\n}\n#pf-app .pf-ref-table tr:nth-child(even) td {\n  background: #f7f9fc;\n}\n#pf-app .pf-tabs {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #e0e0e0;\n  margin-bottom: 1.5rem;\n  flex-wrap: wrap;\n}\n#pf-app .pf-tab {\n  padding: 0.55rem 1.1rem;\n  cursor: pointer;\n  font-weight: 600;\n  font-size: 0.88rem;\n  color: #666;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  transition: color 0.15s, border-color 0.15s;\n  background: none;\n  border-top: none;\n  border-left: none;\n  border-right: none;\n}\n#pf-app .pf-tab.active {\n  color: #0f3460;\n  border-bottom-color: #e94560;\n}\n#pf-app .pf-tab-panel {\n  display: none;\n}\n#pf-app .pf-tab-panel.active {\n  display: block;\n}\n#pf-app .pf-jp-info {\n  background: #eef3ff;\n  border: 1px solid #c5d5f7;\n  border-radius: 8px;\n  padding: 1rem 1.25rem;\n  font-size: 0.88rem;\n  margin-bottom: 1rem;\n  line-height: 1.7;\n}\n#pf-app .pf-jp-info strong {\n  color: #0f3460;\n}\n#pf-app .pf-cta {\n  background: linear-gradient(135deg, #f0f7ff 0%, #e8f4fd 100%);\n  border: 1px solid #b8d9f5;\n  border-radius: 8px;\n  padding: 1rem 1.25rem;\n  margin-top: 2rem;\n  font-size: 0.92rem;\n}\n#pf-app .pf-cta a {\n  color: #0f3460;\n  font-weight: 700;\n  text-decoration: none;\n}\n#pf-app .pf-cta a:hover {\n  color: #e94560;\n  text-decoration: underline;\n}\n@media (max-width: 600px) {\n  #pf-app .pf-result-grid {\n    grid-template-columns: 1fr;\n  }\n  #pf-app .pf-result-label {\n    margin-top: 0.5rem;\n  }\n}\n\u003c/style\u003e\n\u003ch2\u003e電話番号フォーマッター＆バリデーター\u003c/h2\u003e\n\u003cdiv class=\"pf-tabs\"\u003e\n  \u003cbutton class=\"pf-tab active\" onclick=\"pfSwitchTab('single')\"\u003e1件変換\u003c/button\u003e\n  \u003cbutton class=\"pf-tab\" onclick=\"pfSwitchTab('bulk')\"\u003e一括変換\u003c/button\u003e\n  \u003cbutton class=\"pf-tab\" onclick=\"pfSwitchTab('jpref')\"\u003e日本番号ガイド\u003c/button\u003e\n  \u003cbutton class=\"pf-tab\" onclick=\"pfSwitchTab('ref')\"\u003e国番号一覧\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- SINGLE FORMATTER TAB --\u003e\n\u003cdiv id=\"pf-tab-single\" class=\"pf-tab-panel active\"\u003e\n  \u003cdiv class=\"pf-card\"\u003e\n    \u003cdiv class=\"pf-row\"\u003e\n      \u003cdiv\u003e\n        \u003clabel for=\"pf-input\"\u003e電話番号を入力\u003c/label\u003e\n        \u003cinput type=\"text\" id=\"pf-input\" placeholder=\"例: 03-1234-5678 / 090-9876-5432 / +81 3 1234 5678\" oninput=\"pfFormat()\" /\u003e\n      \u003c/div\u003e\n      \u003cdiv\u003e\n        \u003clabel for=\"pf-country\"\u003e国を選択\u003c/label\u003e\n        \u003cselect id=\"pf-country\" onchange=\"pfFormat()\"\u003e\n          \u003coption value=\"JP\" selected\u003e日本 (+81)\u003c/option\u003e\n          \u003coption value=\"US\"\u003eアメリカ (+1)\u003c/option\u003e\n          \u003coption value=\"CA\"\u003eカナダ (+1)\u003c/option\u003e\n          \u003coption value=\"GB\"\u003eイギリス (+44)\u003c/option\u003e\n          \u003coption value=\"DE\"\u003eドイツ (+49)\u003c/option\u003e\n          \u003coption value=\"FR\"\u003eフランス (+33)\u003c/option\u003e\n          \u003coption value=\"AU\"\u003eオーストラリア (+61)\u003c/option\u003e\n          \u003coption value=\"KR\"\u003e韓国 (+82)\u003c/option\u003e\n          \u003coption value=\"CN\"\u003e中国 (+86)\u003c/option\u003e\n          \u003coption value=\"IN\"\u003eインド (+91)\u003c/option\u003e\n          \u003coption value=\"BR\"\u003eブラジル (+55)\u003c/option\u003e\n          \u003coption value=\"MX\"\u003eメキシコ (+52)\u003c/option\u003e\n          \u003coption value=\"IT\"\u003eイタリア (+39)\u003c/option\u003e\n          \u003coption value=\"ES\"\u003eスペイン (+34)\u003c/option\u003e\n          \u003coption value=\"NL\"\u003eオランダ (+31)\u003c/option\u003e\n          \u003coption value=\"SG\"\u003eシンガポール (+65)\u003c/option\u003e\n          \u003coption value=\"HK\"\u003e香港 (+852)\u003c/option\u003e\n          \u003coption value=\"TW\"\u003e台湾 (+886)\u003c/option\u003e\n          \u003coption value=\"NZ\"\u003eニュージーランド (+64)\u003c/option\u003e\n          \u003coption value=\"ZA\"\u003e南アフリカ (+27)\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv id=\"pf-validation-box\" class=\"pf-validation-box warn\" style=\"display:none;\"\u003e\u003c/div\u003e\n    \u003cdiv id=\"pf-result-grid\" class=\"pf-result-grid\" style=\"display:none;\"\u003e\n      \u003cspan class=\"pf-result-label\"\u003e国際形式\u003c/span\u003e\n      \u003cspan class=\"pf-result-value\"\u003e\u003cspan id=\"val-intl\"\u003e\u003c/span\u003e\u003cbutton class=\"pf-copy-btn\" onclick=\"pfCopy('val-intl')\"\u003eコピー\u003c/button\u003e\u003c/span\u003e\n      \u003cspan class=\"pf-result-label\"\u003e国内形式\u003c/span\u003e\n      \u003cspan class=\"pf-result-value\"\u003e\u003cspan id=\"val-natl\"\u003e\u003c/span\u003e\u003cbutton class=\"pf-copy-btn\" onclick=\"pfCopy('val-natl')\"\u003eコピー\u003c/button\u003e\u003c/span\u003e\n      \u003cspan class=\"pf-result-label\"\u003eE.164\u003c/span\u003e\n      \u003cspan class=\"pf-result-value\"\u003e\u003cspan id=\"val-e164\"\u003e\u003c/span\u003e\u003cbutton class=\"pf-copy-btn\" onclick=\"pfCopy('val-e164')\"\u003eコピー\u003c/button\u003e\u003c/span\u003e\n      \u003cspan class=\"pf-result-label\"\u003eRFC 3966\u003c/span\u003e\n      \u003cspan class=\"pf-result-value\"\u003e\u003cspan id=\"val-rfc\"\u003e\u003c/span\u003e\u003cbutton class=\"pf-copy-btn\" onclick=\"pfCopy('val-rfc')\"\u003eコピー\u003c/button\u003e\u003c/span\u003e\n      \u003cspan class=\"pf-result-label\"\u003e数字のみ\u003c/span\u003e\n      \u003cspan class=\"pf-result-value\"\u003e\u003cspan id=\"val-raw\"\u003e\u003c/span\u003e\u003cbutton class=\"pf-copy-btn\" onclick=\"pfCopy('val-raw')\"\u003eコピー\u003c/button\u003e\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- BULK FORMATTER TAB --\u003e\n\u003cdiv id=\"pf-tab-bulk\" class=\"pf-tab-panel\"\u003e\n  \u003cdiv class=\"pf-card\"\u003e\n    \u003clabel for=\"pf-bulk-country\"\u003e国を選択（全番号共通）\u003c/label\u003e\n    \u003cselect id=\"pf-bulk-country\" style=\"margin-bottom:1rem;\"\u003e\n      \u003coption value=\"JP\" selected\u003e日本 (+81)\u003c/option\u003e\n      \u003coption value=\"US\"\u003eアメリカ (+1)\u003c/option\u003e\n      \u003coption value=\"CA\"\u003eカナダ (+1)\u003c/option\u003e\n      \u003coption value=\"GB\"\u003eイギリス (+44)\u003c/option\u003e\n      \u003coption value=\"DE\"\u003eドイツ (+49)\u003c/option\u003e\n      \u003coption value=\"FR\"\u003eフランス (+33)\u003c/option\u003e\n      \u003coption value=\"AU\"\u003eオーストラリア (+61)\u003c/option\u003e\n      \u003coption value=\"KR\"\u003e韓国 (+82)\u003c/option\u003e\n      \u003coption value=\"CN\"\u003e中国 (+86)\u003c/option\u003e\n      \u003coption value=\"IN\"\u003eインド (+91)\u003c/option\u003e\n      \u003coption value=\"BR\"\u003eブラジル (+55)\u003c/option\u003e\n      \u003coption value=\"MX\"\u003eメキシコ (+52)\u003c/option\u003e\n      \u003coption value=\"IT\"\u003eイタリア (+39)\u003c/option\u003e\n      \u003coption value=\"ES\"\u003eスペイン (+34)\u003c/option\u003e\n      \u003coption value=\"NL\"\u003eオランダ (+31)\u003c/option\u003e\n      \u003coption value=\"SG\"\u003eシンガポール (+65)\u003c/option\u003e\n      \u003coption value=\"HK\"\u003e香港 (+852)\u003c/option\u003e\n      \u003coption value=\"TW\"\u003e台湾 (+886)\u003c/option\u003e\n      \u003coption value=\"NZ\"\u003eニュージーランド (+64)\u003c/option\u003e\n      \u003coption value=\"ZA\"\u003e南アフリカ (+27)\u003c/option\u003e\n    \u003c/select\u003e\n    \u003clabel for=\"pf-bulk-input\"\u003e電話番号を1行1件で貼り付け\u003c/label\u003e\n    \u003ctextarea id=\"pf-bulk-input\" placeholder=\"03-1234-5678\u0026#10;090-9876-5432\u0026#10;0120-123-456\u0026#10;+81312345678\u0026#10;075-234-5678\"\u003e\u003c/textarea\u003e\n    \u003cdiv style=\"display:flex;gap:0.75rem;flex-wrap:wrap;\"\u003e\n      \u003cbutton class=\"pf-btn\" onclick=\"pfBulkFormat()\"\u003e一括変換\u003c/button\u003e\n      \u003cbutton class=\"pf-btn pf-btn-secondary\" onclick=\"pfBulkClear()\"\u003eクリア\u003c/button\u003e\n      \u003cbutton class=\"pf-btn pf-btn-secondary\" onclick=\"pfBulkCopyAll()\"\u003e結果をコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv id=\"pf-bulk-output\" class=\"bulk-output\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- JAPAN NUMBER GUIDE TAB --\u003e\n\u003cdiv id=\"pf-tab-jpref\" class=\"pf-tab-panel\"\u003e\n  \u003cdiv class=\"pf-card\"\u003e\n    \u003ch2 style=\"margin-top:0;\"\u003e日本の電話番号体系ガイド\u003c/h2\u003e\n    \u003cdiv class=\"pf-jp-info\"\u003e\n      日本の電話番号は市外局番＋市内局番＋加入者番号で構成され、国内では先頭に\u003cstrong\u003e0\u003c/strong\u003e（市外局番の一部）を付けます。国際発信時は\u003cstrong\u003e+81\u003c/strong\u003eを付け、先頭の0を除きます。\n    \u003c/div\u003e\n    \u003ctable class=\"pf-ref-table\"\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\n          \u003cth\u003e種別\u003c/th\u003e\n          \u003cth\u003e番号帯\u003c/th\u003e\n          \u003cth\u003e桁数（0含む）\u003c/th\u003e\n          \u003cth\u003e国内形式例\u003c/th\u003e\n          \u003cth\u003e国際形式例\u003c/th\u003e\n        \u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e固定（東京・大阪）\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e03-xxxx / 06-xxxx\u003c/td\u003e\n          \u003ctd\u003e10桁\u003c/td\u003e\n          \u003ctd\u003e03-1234-5678\u003c/td\u003e\n          \u003ctd\u003e+81-3-1234-5678\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e固定（地方 3桁局番）\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0AB-xxxx-xxxx\u003c/td\u003e\n          \u003ctd\u003e10桁\u003c/td\u003e\n          \u003ctd\u003e045-123-4567\u003c/td\u003e\n          \u003ctd\u003e+81-45-123-4567\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e固定（地方 4桁局番）\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0ABC-xx-xxxx\u003c/td\u003e\n          \u003ctd\u003e10桁\u003c/td\u003e\n          \u003ctd\u003e0120-12-3456（例外）\u003c/td\u003e\n          \u003ctd\u003e+81-120-12-3456\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e携帯（docomo/au/SB）\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e090 / 080 / 070\u003c/td\u003e\n          \u003ctd\u003e11桁\u003c/td\u003e\n          \u003ctd\u003e090-1234-5678\u003c/td\u003e\n          \u003ctd\u003e+81-90-1234-5678\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eIP電話\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e050-xxxx-xxxx\u003c/td\u003e\n          \u003ctd\u003e11桁\u003c/td\u003e\n          \u003ctd\u003e050-1234-5678\u003c/td\u003e\n          \u003ctd\u003e+81-50-1234-5678\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eフリーダイヤル\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0120 / 0800\u003c/td\u003e\n          \u003ctd\u003e11桁\u003c/td\u003e\n          \u003ctd\u003e0120-123-456\u003c/td\u003e\n          \u003ctd\u003e+81-120-123-456\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eナビダイヤル\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e0570-xxx-xxx\u003c/td\u003e\n          \u003ctd\u003e10桁\u003c/td\u003e\n          \u003ctd\u003e0570-123-456\u003c/td\u003e\n          \u003ctd\u003e+81-570-123-456\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e緊急・特番\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e110 / 119 / 117等\u003c/td\u003e\n          \u003ctd\u003e3桁\u003c/td\u003e\n          \u003ctd\u003e110\u003c/td\u003e\n          \u003ctd\u003e（国内専用）\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/tbody\u003e\n    \u003c/table\u003e\n    \u003cp style=\"margin-top:1rem;font-size:0.85rem;color:#666;\"\u003e※ E.164形式では+81の後に0を除いた番号を続けます（例: +819012345678）。RFC 3966形式は \u003ccode\u003etel:+81-90-1234-5678\u003c/code\u003e のように記述します。\u003c/p\u003e","title":"電話番号フォーマッター - 電話番号の書式変換＆検証"},{"content":" テキストを入力 反転操作（1つ選択） 文字列全体を反転 テキスト全体の文字順を逆にする 単語順を反転 各単語のスペルはそのままで、並び順を逆にする 各単語を個別に反転 単語ごとに文字を逆順にする ケース変換： 元のまま UPPERCASE（大文字） lowercase（小文字） Title Case Sentence case 余分なスペースを除去 結果（リアルタイムプレビュー） 結果をコピー テキストを入力すると、ここにリアルタイムで結果が表示されます... 文字数: 0 単語数: 0 母音数: 0 子音数: 0 関連ツール 文字数を数える → 文字数カウンター 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/string-reverser/","summary":"\u003cdiv id=\"sr-app\"\u003e\n\u003cstyle\u003e\n#sr-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', 'Meiryo', system-ui, sans-serif;\n  background: #0f0f13;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin: 0 auto;\n  max-width: 900px;\n  box-sizing: border-box;\n}\n\n#sr-app * {\n  box-sizing: border-box;\n}\n\n#sr-app h2 {\n  font-size: 1.05rem;\n  font-weight: 600;\n  color: #f1f5f9;\n  margin: 0 0 10px 0;\n}\n\n#sr-app textarea {\n  width: 100%;\n  min-height: 130px;\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  color: #e2e8f0;\n  font-size: 0.95rem;\n  padding: 12px 14px;\n  resize: vertical;\n  font-family: inherit;\n  transition: border-color 0.2s;\n  outline: none;\n  line-height: 1.6;\n}\n\n#sr-app textarea:focus {\n  border-color: #8b5cf6;\n}\n\n#sr-app .sr-label {\n  font-size: 0.75rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #8b5cf6;\n  margin-bottom: 6px;\n  display: block;\n}\n\n#sr-app .sr-section {\n  margin-bottom: 18px;\n}\n\n#sr-app .sr-ops {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n  gap: 10px;\n  margin-bottom: 18px;\n}\n\n#sr-app .sr-op-card {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 12px 14px;\n  cursor: pointer;\n  transition: all 0.18s;\n  user-select: none;\n}\n\n#sr-app .sr-op-card:hover {\n  border-color: #8b5cf6;\n}\n\n#sr-app .sr-op-card.active {\n  border-color: #8b5cf6;\n  background: #18122b;\n}\n\n#sr-app .sr-op-title {\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #f1f5f9;\n  margin-bottom: 3px;\n}\n\n#sr-app .sr-op-card.active .sr-op-title {\n  color: #a78bfa;\n}\n\n#sr-app .sr-op-desc {\n  font-size: 0.75rem;\n  color: #64748b;\n  line-height: 1.4;\n}\n\n#sr-app .sr-case-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 18px;\n  align-items: center;\n}\n\n#sr-app .sr-case-label {\n  font-size: 0.75rem;\n  font-weight: 700;\n  letter-spacing: 0.05em;\n  color: #8b5cf6;\n  margin-right: 4px;\n}\n\n#sr-app .sr-btn {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 6px;\n  color: #cbd5e1;\n  font-size: 0.82rem;\n  padding: 6px 14px;\n  cursor: pointer;\n  transition: all 0.18s;\n  font-family: inherit;\n  font-weight: 500;\n}\n\n#sr-app .sr-btn:hover {\n  background: #8b5cf6;\n  border-color: #8b5cf6;\n  color: #fff;\n}\n\n#sr-app .sr-btn.active {\n  background: #8b5cf6;\n  border-color: #8b5cf6;\n  color: #fff;\n}\n\n#sr-app .sr-btn.success {\n  background: #16a34a;\n  border-color: #16a34a;\n  color: #fff;\n}\n\n#sr-app .sr-toggle {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 0.82rem;\n  color: #94a3b8;\n  cursor: pointer;\n  user-select: none;\n  padding: 6px 10px;\n  border: 1px solid #2d2d3d;\n  border-radius: 6px;\n  background: #1a1a24;\n  transition: all 0.18s;\n}\n\n#sr-app .sr-toggle:hover {\n  border-color: #8b5cf6;\n  color: #e2e8f0;\n}\n\n#sr-app .sr-toggle input[type=\"checkbox\"] {\n  accent-color: #8b5cf6;\n  width: 14px;\n  height: 14px;\n  cursor: pointer;\n}\n\n#sr-app .sr-output-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 6px;\n}\n\n#sr-app .sr-stats-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 16px;\n  margin-top: 10px;\n  font-size: 0.82rem;\n  color: #94a3b8;\n}\n\n#sr-app .sr-stat-val {\n  color: #8b5cf6;\n  font-weight: 600;\n}\n\n#sr-app .sr-preview {\n  margin-top: 6px;\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 12px 14px;\n  min-height: 130px;\n  font-size: 0.95rem;\n  color: #cbd5e1;\n  line-height: 1.6;\n  white-space: pre-wrap;\n  word-break: break-word;\n}\n\n#sr-app .sr-placeholder {\n  color: #4a5568;\n  font-style: italic;\n}\n\u003c/style\u003e\n\u003c!-- 入力 --\u003e\n\u003cdiv class=\"sr-section\"\u003e\n  \u003cspan class=\"sr-label\"\u003eテキストを入力\u003c/span\u003e\n  \u003ctextarea id=\"sr-input\" placeholder=\"ここにテキストを入力または貼り付けてください...\" oninput=\"srProcess()\"\u003e\u003c/textarea\u003e\n\u003c/div\u003e\n\u003c!-- 反転操作 --\u003e\n\u003cdiv class=\"sr-label\"\u003e反転操作（1つ選択）\u003c/div\u003e\n\u003cdiv class=\"sr-ops\" id=\"sr-ops\"\u003e\n  \u003cdiv class=\"sr-op-card active\" data-op=\"reverse-string\" onclick=\"srSelectOp(this)\"\u003e\n    \u003cdiv class=\"sr-op-title\"\u003e文字列全体を反転\u003c/div\u003e\n    \u003cdiv class=\"sr-op-desc\"\u003eテキスト全体の文字順を逆にする\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"sr-op-card\" data-op=\"reverse-words\" onclick=\"srSelectOp(this)\"\u003e\n    \u003cdiv class=\"sr-op-title\"\u003e単語順を反転\u003c/div\u003e\n    \u003cdiv class=\"sr-op-desc\"\u003e各単語のスペルはそのままで、並び順を逆にする\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"sr-op-card\" data-op=\"reverse-each-word\" onclick=\"srSelectOp(this)\"\u003e\n    \u003cdiv class=\"sr-op-title\"\u003e各単語を個別に反転\u003c/div\u003e\n    \u003cdiv class=\"sr-op-desc\"\u003e単語ごとに文字を逆順にする\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ケース変換 --\u003e\n\u003cdiv class=\"sr-case-row\"\u003e\n  \u003cspan class=\"sr-case-label\"\u003eケース変換：\u003c/span\u003e\n  \u003cbutton class=\"sr-btn active\" id=\"sr-case-none\" onclick=\"srSetCase('none')\"\u003e元のまま\u003c/button\u003e\n  \u003cbutton class=\"sr-btn\" id=\"sr-case-upper\" onclick=\"srSetCase('upper')\"\u003eUPPERCASE（大文字）\u003c/button\u003e\n  \u003cbutton class=\"sr-btn\" id=\"sr-case-lower\" onclick=\"srSetCase('lower')\"\u003elowercase（小文字）\u003c/button\u003e\n  \u003cbutton class=\"sr-btn\" id=\"sr-case-title\" onclick=\"srSetCase('title')\"\u003eTitle Case\u003c/button\u003e\n  \u003cbutton class=\"sr-btn\" id=\"sr-case-sentence\" onclick=\"srSetCase('sentence')\"\u003eSentence case\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- オプション --\u003e\n\u003cdiv style=\"display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px;\"\u003e\n  \u003clabel class=\"sr-toggle\"\u003e\n    \u003cinput type=\"checkbox\" id=\"sr-trim-ws\" onchange=\"srProcess()\"\u003e 余分なスペースを除去\n  \u003c/label\u003e\n\u003c/div\u003e\n\u003c!-- 出力（リアルタイムプレビュー） --\u003e\n\u003cdiv class=\"sr-output-header\"\u003e\n  \u003cspan class=\"sr-label\"\u003e結果（リアルタイムプレビュー）\u003c/span\u003e\n  \u003cbutton class=\"sr-btn\" id=\"sr-copy-btn\" onclick=\"srCopy()\"\u003e結果をコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sr-preview\" id=\"sr-preview\"\u003e\u003cspan class=\"sr-placeholder\"\u003eテキストを入力すると、ここにリアルタイムで結果が表示されます...\u003c/span\u003e\u003c/div\u003e\n\u003c!-- 統計 --\u003e\n\u003cdiv class=\"sr-stats-row\"\u003e\n  \u003cspan\u003e文字数: \u003cspan class=\"sr-stat-val\" id=\"sr-chars\"\u003e0\u003c/span\u003e\u003c/span\u003e\n  \u003cspan\u003e単語数: \u003cspan class=\"sr-stat-val\" id=\"sr-words\"\u003e0\u003c/span\u003e\u003c/span\u003e\n  \u003cspan\u003e母音数: \u003cspan class=\"sr-stat-val\" id=\"sr-vowels\"\u003e0\u003c/span\u003e\u003c/span\u003e\n  \u003cspan\u003e子音数: \u003cspan class=\"sr-stat-val\" id=\"sr-cons\"\u003e0\u003c/span\u003e\u003c/span\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var srOp = 'reverse-string';\n  var srCase = 'none';\n\n  window.srSelectOp = function(card) {\n    document.querySelectorAll('#sr-ops .sr-op-card').forEach(function(c) { c.classList.remove('active'); });\n    card.classList.add('active');\n    srOp = card.getAttribute('data-op');\n    srProcess();\n  };\n\n  window.srSetCase = function(c) {\n    srCase = c;\n    ['none','upper','lower','title','sentence'].forEach(function(k) {\n      document.getElementById('sr-case-' + k).classList.toggle('active', k === c);\n    });\n    srProcess();\n  };\n\n  function reverseString(s) {\n    return s.split('').reverse().join('');\n  }\n\n  function reverseWords(s) {\n    return s.split(/(\\s+)/).reverse().join('');\n  }\n\n  function reverseEachWord(s) {\n    return s.replace(/\\S+/g, function(w) { return w.split('').reverse().join(''); });\n  }\n\n  function applyCase(s, c) {\n    if (c === 'upper') return s.toUpperCase();\n    if (c === 'lower') return s.toLowerCase();\n    if (c === 'title') return s.replace(/\\w\\S*/g, function(w) { return w.charAt(0).toUpperCase() + w.slice(1).toLowerCase(); });\n    if (c === 'sentence') return s.toLowerCase().replace(/(^\\s*\\w|[.!?]\\s+\\w)/g, function(c) { return c.toUpperCase(); });\n    return s;\n  }\n\n  function countVowels(s) {\n    return (s.match(/[aeiouAEIOU]/g) || []).length;\n  }\n\n  function countConsonants(s) {\n    return (s.match(/[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]/g) || []).length;\n  }\n\n  window.srProcess = function() {\n    var raw = document.getElementById('sr-input').value;\n    var trimWs = document.getElementById('sr-trim-ws').checked;\n    var previewEl = document.getElementById('sr-preview');\n    var placeholder = 'テキストを入力すると、ここにリアルタイムで結果が表示されます...';\n\n    if (!raw) {\n      previewEl.innerHTML = '\u003cspan class=\"sr-placeholder\"\u003e' + placeholder + '\u003c/span\u003e';\n      document.getElementById('sr-chars').textContent = '0';\n      document.getElementById('sr-words').textContent = '0';\n      document.getElementById('sr-vowels').textContent = '0';\n      document.getElementById('sr-cons').textContent = '0';\n      return;\n    }\n\n    var s = raw;\n    if (trimWs) {\n      s = s.replace(/[ \\t]+/g, ' ').replace(/\\n{3,}/g, '\\n\\n').trim();\n    }\n\n    if (srOp === 'reverse-string') {\n      s = reverseString(s);\n    } else if (srOp === 'reverse-words') {\n      s = reverseWords(s);\n    } else if (srOp === 'reverse-each-word') {\n      s = reverseEachWord(s);\n    }\n\n    s = applyCase(s, srCase);\n\n    previewEl.textContent = s;\n\n    document.getElementById('sr-chars').textContent = s.length;\n    document.getElementById('sr-words').textContent = s.trim() ? s.trim().split(/\\s+/).length : 0;\n    document.getElementById('sr-vowels').textContent = countVowels(s);\n    document.getElementById('sr-cons').textContent = countConsonants(s);\n  };\n\n  window.srCopy = function() {\n    var text = document.getElementById('sr-preview').textContent;\n    var placeholder = 'テキストを入力すると、ここにリアルタイムで結果が表示されます...';\n    if (!text || text === placeholder) return;\n    var btn = document.getElementById('sr-copy-btn');\n    var done = function() {\n      btn.textContent = 'コピー済み!';\n      btn.classList.add('success');\n      setTimeout(function() {\n        btn.textContent = '結果をコピー';\n        btn.classList.remove('success');\n      }, 1800);\n    };\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(text).then(done).catch(function() { fallbackCopy(text, done); });\n    } else {\n      fallbackCopy(text, done);\n    }\n  };\n\n  function fallbackCopy(text, cb) {\n    var ta = document.createElement('textarea');\n    ta.value = text;\n    ta.style.position = 'fixed';\n    ta.style.opacity = '0';\n    document.body.appendChild(ta);\n    ta.select();\n    document.execCommand('copy');\n    document.body.removeChild(ta);\n    cb();\n  }\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e文字数を数える → \u003ca href=\"https://productivity-works.com/ja/tools/word-counter/\"\u003e文字数カウンター\u003c/a\u003e\n\u003c/p\u003e","title":"文字列反転ツール - テキスト逆順・ケース変換 無料オンライン"},{"content":"名前・会社名・連絡先を入力するだけで、プロ仕様の名刺をすぐに作成できます。会員登録不要・完全無料。\n名刺情報の入力 \u0026lt;label\u0026gt;氏名\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bc-name\u0026quot; placeholder=\u0026quot;山田 太郎\u0026quot; value=\u0026quot;山田 太郎\u0026quot; /\u0026gt; \u0026lt;label\u0026gt;役職\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bc-title\u0026quot; placeholder=\u0026quot;代表取締役\u0026quot; value=\u0026quot;代表取締役\u0026quot; /\u0026gt; \u0026lt;label\u0026gt;会社名\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bc-company\u0026quot; placeholder=\u0026quot;株式会社サンプル\u0026quot; value=\u0026quot;株式会社サンプル\u0026quot; /\u0026gt; \u0026lt;label\u0026gt;メールアドレス\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;email\u0026quot; id=\u0026quot;bc-email\u0026quot; placeholder=\u0026quot;yamada@sample.co.jp\u0026quot; value=\u0026quot;yamada@sample.co.jp\u0026quot; /\u0026gt; \u0026lt;label\u0026gt;電話番号\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;tel\u0026quot; id=\u0026quot;bc-phone\u0026quot; placeholder=\u0026quot;03-0000-0000\u0026quot; value=\u0026quot;03-0000-0000\u0026quot; /\u0026gt; \u0026lt;label\u0026gt;ウェブサイト\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;bc-website\u0026quot; placeholder=\u0026quot;sample.co.jp\u0026quot; value=\u0026quot;sample.co.jp\u0026quot; /\u0026gt; \u0026lt;label\u0026gt;住所\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bc-address\u0026quot; placeholder=\u0026quot;東京都渋谷区〇〇 1-2-3\u0026quot; value=\u0026quot;東京都渋谷区〇〇 1-2-3\u0026quot; /\u0026gt; \u0026lt;label style=\u0026quot;margin-top:16px;\u0026quot;\u0026gt;レイアウト\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;bc-templates\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;bc-tpl-btn active\u0026quot; data-tpl=\u0026quot;classic\u0026quot; onclick=\u0026quot;(function(){window._bcSetTpl('classic');})()\u0026quot;\u0026gt;クラシック\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bc-tpl-btn\u0026quot; data-tpl=\u0026quot;modern\u0026quot; onclick=\u0026quot;(function(){window._bcSetTpl('modern');})()\u0026quot;\u0026gt;モダン\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bc-tpl-btn\u0026quot; data-tpl=\u0026quot;minimal\u0026quot; onclick=\u0026quot;(function(){window._bcSetTpl('minimal');})()\u0026quot;\u0026gt;ミニマル\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bc-tpl-btn\u0026quot; data-tpl=\u0026quot;bold\u0026quot; onclick=\u0026quot;(function(){window._bcSetTpl('bold');})()\u0026quot;\u0026gt;ボールド\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;label style=\u0026quot;margin-top:16px;\u0026quot;\u0026gt;カラー\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;bc-colors\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;bc-color-group\u0026quot;\u0026gt; \u0026lt;label style=\u0026quot;margin-top:0;\u0026quot;\u0026gt;背景色\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bc-color-bg\u0026quot; value=\u0026quot;#1e293b\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bc-color-group\u0026quot;\u0026gt; \u0026lt;label style=\u0026quot;margin-top:0;\u0026quot;\u0026gt;アクセント\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bc-color-accent\u0026quot; value=\u0026quot;#6366f1\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bc-color-group\u0026quot;\u0026gt; \u0026lt;label style=\u0026quot;margin-top:0;\u0026quot;\u0026gt;文字色\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bc-color-text\u0026quot; value=\u0026quot;#ffffff\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bc-toggle-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;bc-toggle on\u0026quot; id=\u0026quot;bc-qr-toggle\u0026quot; onclick=\u0026quot;(function(){window._bcToggleQr();})()\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;span\u0026gt;裏面にQRコードを表示\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p class=\u0026quot;bc-note\u0026quot;\u0026gt;名刺サイズ: 91 × 55 mm（日本標準サイズ）\u0026lt;/p\u0026gt; プレビュー 表面 裏面 PNGでダウンロード 印刷する \u0026lt;div style=\u0026quot;margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\u0026quot;\u0026gt; \u0026lt;p style=\u0026quot;margin:0;font-size:14px;color:#0369a1;font-weight:600;\u0026quot;\u0026gt;起業の会計管理もかんたんに\u0026lt;/p\u0026gt; \u0026lt;span style=\u0026quot;font-size:13px;color:#0c4a6e;\u0026quot;\u0026gt;freee会計なら、起業時の経費管理・請求書作成もクラウドで一元管理。無料トライアル実施中。\u0026lt;/span\u0026gt; \u0026lt;a href=\u0026quot;https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\u0026quot; target=\u0026quot;_blank\u0026quot; rel=\u0026quot;noopener\u0026quot; style=\u0026quot;display:inline-block;margin-top:4px;padding:9px 20px;background:#0284c7;color:#fff;border-radius:7px;font-size:13px;font-weight:700;text-decoration:none;\u0026quot;\u0026gt;freeeを無料で試す →\u0026lt;/a\u0026gt; \u0026lt;/div\u0026gt; 関連ツール\n請求書を作成 → 請求書ジェネレーター メール署名 → メール署名ジェネレーター QRコード作成 → QRコードジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/business-card-generator/","summary":"\u003cp\u003e名前・会社名・連絡先を入力するだけで、プロ仕様の名刺をすぐに作成できます。会員登録不要・完全無料。\u003c/p\u003e\n\u003cdiv id=\"bc-app\"\u003e\n\u003cstyle\u003e\n#bc-app * { box-sizing: border-box; margin: 0; padding: 0; }\n#bc-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', Roboto, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#bc-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #1e293b;\n  margin-bottom: 12px;\n  padding-bottom: 6px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#bc-app .bc-layout {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 24px;\n  margin-top: 16px;\n}\n@media (max-width: 680px) {\n  #bc-app .bc-layout { grid-template-columns: 1fr; }\n}\n#bc-app .bc-panel {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 20px;\n}\n#bc-app label {\n  display: block;\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  margin-bottom: 4px;\n  margin-top: 12px;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#bc-app label:first-child { margin-top: 0; }\n#bc-app input[type=\"text\"],\n#bc-app input[type=\"email\"],\n#bc-app input[type=\"tel\"],\n#bc-app input[type=\"url\"] {\n  width: 100%;\n  padding: 8px 10px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 14px;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.15s;\n}\n#bc-app input[type=\"text\"]:focus,\n#bc-app input[type=\"email\"]:focus,\n#bc-app input[type=\"tel\"]:focus,\n#bc-app input[type=\"url\"]:focus {\n  outline: none;\n  border-color: #6366f1;\n  box-shadow: 0 0 0 3px rgba(99,102,241,0.1);\n}\n#bc-app .bc-templates {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 8px;\n  margin-bottom: 4px;\n}\n#bc-app .bc-tpl-btn {\n  padding: 7px 4px;\n  border: 2px solid #e2e8f0;\n  border-radius: 6px;\n  font-size: 11px;\n  font-weight: 600;\n  cursor: pointer;\n  background: #fff;\n  color: #475569;\n  transition: all 0.15s;\n  text-align: center;\n}\n#bc-app .bc-tpl-btn:hover { border-color: #6366f1; color: #6366f1; }\n#bc-app .bc-tpl-btn.active { border-color: #6366f1; background: #6366f1; color: #fff; }\n#bc-app .bc-colors {\n  display: flex;\n  gap: 12px;\n  align-items: flex-end;\n  flex-wrap: wrap;\n}\n#bc-app .bc-color-group { flex: 1; min-width: 80px; }\n#bc-app input[type=\"color\"] {\n  width: 100%;\n  height: 36px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  padding: 2px;\n  cursor: pointer;\n  background: #fff;\n}\n#bc-app .bc-preview-area { margin-top: 0; }\n#bc-app .bc-tabs {\n  display: flex;\n  gap: 4px;\n  margin-bottom: 14px;\n}\n#bc-app .bc-tab {\n  padding: 6px 14px;\n  border: 1px solid #e2e8f0;\n  border-radius: 6px;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  background: #fff;\n  color: #64748b;\n  transition: all 0.15s;\n}\n#bc-app .bc-tab.active { background: #6366f1; color: #fff; border-color: #6366f1; }\n#bc-app .bc-canvas-wrap {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  padding: 24px;\n  background: #e2e8f0;\n  border-radius: 10px;\n  min-height: 180px;\n}\n#bc-app canvas {\n  border-radius: 8px;\n  box-shadow: 0 4px 24px rgba(0,0,0,0.18);\n  max-width: 100%;\n  height: auto;\n}\n#bc-app .bc-actions {\n  display: flex;\n  gap: 10px;\n  margin-top: 14px;\n  flex-wrap: wrap;\n}\n#bc-app .bc-btn {\n  flex: 1;\n  min-width: 120px;\n  padding: 10px 16px;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: all 0.15s;\n  text-align: center;\n}\n#bc-app .bc-btn-primary { background: #6366f1; color: #fff; }\n#bc-app .bc-btn-primary:hover { background: #4f46e5; }\n#bc-app .bc-btn-secondary { background: #fff; color: #1e293b; border: 1.5px solid #cbd5e1; }\n#bc-app .bc-btn-secondary:hover { border-color: #6366f1; color: #6366f1; }\n#bc-app .bc-toggle-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-top: 12px;\n  font-size: 13px;\n  color: #475569;\n}\n#bc-app .bc-toggle {\n  width: 36px;\n  height: 20px;\n  border-radius: 10px;\n  background: #cbd5e1;\n  position: relative;\n  cursor: pointer;\n  border: none;\n  transition: background 0.2s;\n  flex-shrink: 0;\n}\n#bc-app .bc-toggle.on { background: #6366f1; }\n#bc-app .bc-toggle::after {\n  content: '';\n  position: absolute;\n  width: 14px;\n  height: 14px;\n  background: #fff;\n  border-radius: 50%;\n  top: 3px;\n  left: 3px;\n  transition: left 0.2s;\n}\n#bc-app .bc-toggle.on::after { left: 19px; }\n#bc-app .bc-note {\n  font-size: 12px;\n  color: #94a3b8;\n  margin-top: 8px;\n  line-height: 1.5;\n}\n\n@media print {\n  body * { visibility: hidden; }\n  #bc-print-target, #bc-print-target * { visibility: visible; }\n  #bc-print-target {\n    position: fixed;\n    top: 0; left: 0;\n    display: flex;\n    flex-direction: column;\n    gap: 16px;\n    align-items: center;\n    justify-content: center;\n    width: 100%;\n    height: 100%;\n    background: #fff;\n  }\n}\n\u003c/style\u003e\n\u003cdiv id=\"bc-print-target\" style=\"display:none;\"\u003e\u003c/div\u003e\n\u003cdiv class=\"bc-layout\"\u003e\n  \u003cdiv class=\"bc-panel\"\u003e\n    \u003ch2\u003e名刺情報の入力\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;label\u0026gt;氏名\u0026lt;/label\u0026gt;\n\u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bc-name\u0026quot; placeholder=\u0026quot;山田 太郎\u0026quot; value=\u0026quot;山田 太郎\u0026quot; /\u0026gt;\n\n\u0026lt;label\u0026gt;役職\u0026lt;/label\u0026gt;\n\u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bc-title\u0026quot; placeholder=\u0026quot;代表取締役\u0026quot; value=\u0026quot;代表取締役\u0026quot; /\u0026gt;\n\n\u0026lt;label\u0026gt;会社名\u0026lt;/label\u0026gt;\n\u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bc-company\u0026quot; placeholder=\u0026quot;株式会社サンプル\u0026quot; value=\u0026quot;株式会社サンプル\u0026quot; /\u0026gt;\n\n\u0026lt;label\u0026gt;メールアドレス\u0026lt;/label\u0026gt;\n\u0026lt;input type=\u0026quot;email\u0026quot; id=\u0026quot;bc-email\u0026quot; placeholder=\u0026quot;yamada@sample.co.jp\u0026quot; value=\u0026quot;yamada@sample.co.jp\u0026quot; /\u0026gt;\n\n\u0026lt;label\u0026gt;電話番号\u0026lt;/label\u0026gt;\n\u0026lt;input type=\u0026quot;tel\u0026quot; id=\u0026quot;bc-phone\u0026quot; placeholder=\u0026quot;03-0000-0000\u0026quot; value=\u0026quot;03-0000-0000\u0026quot; /\u0026gt;\n\n\u0026lt;label\u0026gt;ウェブサイト\u0026lt;/label\u0026gt;\n\u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;bc-website\u0026quot; placeholder=\u0026quot;sample.co.jp\u0026quot; value=\u0026quot;sample.co.jp\u0026quot; /\u0026gt;\n\n\u0026lt;label\u0026gt;住所\u0026lt;/label\u0026gt;\n\u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bc-address\u0026quot; placeholder=\u0026quot;東京都渋谷区〇〇 1-2-3\u0026quot; value=\u0026quot;東京都渋谷区〇〇 1-2-3\u0026quot; /\u0026gt;\n\n\u0026lt;label style=\u0026quot;margin-top:16px;\u0026quot;\u0026gt;レイアウト\u0026lt;/label\u0026gt;\n\u0026lt;div class=\u0026quot;bc-templates\u0026quot;\u0026gt;\n  \u0026lt;button class=\u0026quot;bc-tpl-btn active\u0026quot; data-tpl=\u0026quot;classic\u0026quot; onclick=\u0026quot;(function(){window._bcSetTpl('classic');})()\u0026quot;\u0026gt;クラシック\u0026lt;/button\u0026gt;\n  \u0026lt;button class=\u0026quot;bc-tpl-btn\u0026quot; data-tpl=\u0026quot;modern\u0026quot; onclick=\u0026quot;(function(){window._bcSetTpl('modern');})()\u0026quot;\u0026gt;モダン\u0026lt;/button\u0026gt;\n  \u0026lt;button class=\u0026quot;bc-tpl-btn\u0026quot; data-tpl=\u0026quot;minimal\u0026quot; onclick=\u0026quot;(function(){window._bcSetTpl('minimal');})()\u0026quot;\u0026gt;ミニマル\u0026lt;/button\u0026gt;\n  \u0026lt;button class=\u0026quot;bc-tpl-btn\u0026quot; data-tpl=\u0026quot;bold\u0026quot; onclick=\u0026quot;(function(){window._bcSetTpl('bold');})()\u0026quot;\u0026gt;ボールド\u0026lt;/button\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;label style=\u0026quot;margin-top:16px;\u0026quot;\u0026gt;カラー\u0026lt;/label\u0026gt;\n\u0026lt;div class=\u0026quot;bc-colors\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;bc-color-group\u0026quot;\u0026gt;\n    \u0026lt;label style=\u0026quot;margin-top:0;\u0026quot;\u0026gt;背景色\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bc-color-bg\u0026quot; value=\u0026quot;#1e293b\u0026quot; /\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;bc-color-group\u0026quot;\u0026gt;\n    \u0026lt;label style=\u0026quot;margin-top:0;\u0026quot;\u0026gt;アクセント\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bc-color-accent\u0026quot; value=\u0026quot;#6366f1\u0026quot; /\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;bc-color-group\u0026quot;\u0026gt;\n    \u0026lt;label style=\u0026quot;margin-top:0;\u0026quot;\u0026gt;文字色\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bc-color-text\u0026quot; value=\u0026quot;#ffffff\u0026quot; /\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bc-toggle-row\u0026quot;\u0026gt;\n  \u0026lt;button class=\u0026quot;bc-toggle on\u0026quot; id=\u0026quot;bc-qr-toggle\u0026quot; onclick=\u0026quot;(function(){window._bcToggleQr();})()\u0026quot;\u0026gt;\u0026lt;/button\u0026gt;\n  \u0026lt;span\u0026gt;裏面にQRコードを表示\u0026lt;/span\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;p class=\u0026quot;bc-note\u0026quot;\u0026gt;名刺サイズ: 91 × 55 mm（日本標準サイズ）\u0026lt;/p\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"bc-panel bc-preview-area\"\u003e\n    \u003ch2\u003eプレビュー\u003c/h2\u003e\n    \u003cdiv class=\"bc-tabs\"\u003e\n      \u003cbutton class=\"bc-tab active\" id=\"bc-tab-front\" onclick=\"(function(){window._bcShowSide('front');})()\"\u003e表面\u003c/button\u003e\n      \u003cbutton class=\"bc-tab\" id=\"bc-tab-back\" onclick=\"(function(){window._bcShowSide('back');})()\"\u003e裏面\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"bc-canvas-wrap\"\u003e\n      \u003ccanvas id=\"bc-canvas\" width=\"700\" height=\"400\"\u003e\u003c/canvas\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"bc-actions\"\u003e\n      \u003cbutton class=\"bc-btn bc-btn-primary\" onclick=\"(function(){window._bcDownload();})()\"\u003ePNGでダウンロード\u003c/button\u003e\n      \u003cbutton class=\"bc-btn bc-btn-secondary\" onclick=\"(function(){window._bcPrint();})()\"\u003e印刷する\u003c/button\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div style=\u0026quot;margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\u0026quot;\u0026gt;\n  \u0026lt;p style=\u0026quot;margin:0;font-size:14px;color:#0369a1;font-weight:600;\u0026quot;\u0026gt;起業の会計管理もかんたんに\u0026lt;/p\u0026gt;\n  \u0026lt;span style=\u0026quot;font-size:13px;color:#0c4a6e;\u0026quot;\u0026gt;freee会計なら、起業時の経費管理・請求書作成もクラウドで一元管理。無料トライアル実施中。\u0026lt;/span\u0026gt;\n  \u0026lt;a href=\u0026quot;https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\u0026quot; target=\u0026quot;_blank\u0026quot; rel=\u0026quot;noopener\u0026quot; style=\u0026quot;display:inline-block;margin-top:4px;padding:9px 20px;background:#0284c7;color:#fff;border-radius:7px;font-size:13px;font-weight:700;text-decoration:none;\u0026quot;\u0026gt;freeeを無料で試す →\u0026lt;/a\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var state = {\n    name: '山田 太郎',\n    title: '代表取締役',\n    company: '株式会社サンプル',\n    email: 'yamada@sample.co.jp',\n    phone: '03-0000-0000',\n    website: 'sample.co.jp',\n    address: '東京都渋谷区〇〇 1-2-3',\n    tpl: 'classic',\n    bgColor: '#1e293b',\n    accentColor: '#6366f1',\n    textColor: '#ffffff',\n    showQr: true,\n    side: 'front'\n  };\n\n  var DPR = 2;\n  var CARD_W = 700;\n  var CARD_H = 400;\n\n  function bind(id, key) {\n    var el = document.getElementById(id);\n    if (!el) return;\n    el.addEventListener('input', function() {\n      state[key] = el.value;\n      render();\n    });\n  }\n\n  bind('bc-name', 'name');\n  bind('bc-title', 'title');\n  bind('bc-company', 'company');\n  bind('bc-email', 'email');\n  bind('bc-phone', 'phone');\n  bind('bc-website', 'website');\n  bind('bc-address', 'address');\n\n  document.getElementById('bc-color-bg').addEventListener('input', function() {\n    state.bgColor = this.value; render();\n  });\n  document.getElementById('bc-color-accent').addEventListener('input', function() {\n    state.accentColor = this.value; render();\n  });\n  document.getElementById('bc-color-text').addEventListener('input', function() {\n    state.textColor = this.value; render();\n  });\n\n  window._bcSetTpl = function(tpl) {\n    state.tpl = tpl;\n    document.querySelectorAll('#bc-app .bc-tpl-btn').forEach(function(b) {\n      b.classList.toggle('active', b.dataset.tpl === tpl);\n    });\n    var presets = {\n      classic: { bg: '#1e293b', accent: '#6366f1', text: '#ffffff' },\n      modern:  { bg: '#0f172a', accent: '#06b6d4', text: '#ffffff' },\n      minimal: { bg: '#ffffff', accent: '#1e293b', text: '#1e293b' },\n      bold:    { bg: '#7c3aed', accent: '#fbbf24', text: '#ffffff' }\n    };\n    if (presets[tpl]) {\n      state.bgColor = presets[tpl].bg;\n      state.accentColor = presets[tpl].accent;\n      state.textColor = presets[tpl].text;\n      document.getElementById('bc-color-bg').value = state.bgColor;\n      document.getElementById('bc-color-accent').value = state.accentColor;\n      document.getElementById('bc-color-text').value = state.textColor;\n    }\n    render();\n  };\n\n  window._bcShowSide = function(side) {\n    state.side = side;\n    document.getElementById('bc-tab-front').classList.toggle('active', side === 'front');\n    document.getElementById('bc-tab-back').classList.toggle('active', side === 'back');\n    render();\n  };\n\n  window._bcToggleQr = function() {\n    state.showQr = !state.showQr;\n    var btn = document.getElementById('bc-qr-toggle');\n    btn.classList.toggle('on', state.showQr);\n    render();\n  };\n\n  function drawFront(ctx, W, H, s) {\n    ctx.clearRect(0, 0, W, H);\n    ctx.fillStyle = s.bgColor;\n    ctx.beginPath();\n    ctx.roundRect(0, 0, W, H, 18);\n    ctx.fill();\n\n    if (s.tpl === 'classic') {\n      ctx.fillStyle = s.accentColor;\n      ctx.beginPath();\n      ctx.roundRect(0, 0, 10, H, [18, 0, 0, 18]);\n      ctx.fill();\n\n      ctx.fillStyle = s.textColor;\n      ctx.font = 'bold ' + Math.round(H * 0.115) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      ctx.fillText(s.name, 36, H * 0.27);\n\n      ctx.fillStyle = s.accentColor;\n      ctx.font = Math.round(H * 0.072) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      ctx.fillText(s.title, 36, H * 0.39);\n\n      ctx.fillStyle = s.accentColor;\n      ctx.globalAlpha = 0.3;\n      ctx.fillRect(36, H * 0.43, W - 72, 1.5);\n      ctx.globalAlpha = 1;\n\n      ctx.fillStyle = s.textColor;\n      ctx.globalAlpha = 0.85;\n      ctx.font = 'bold ' + Math.round(H * 0.072) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      ctx.fillText(s.company, 36, H * 0.55);\n      ctx.globalAlpha = 1;\n\n      var infoY = H * 0.66;\n      var lineH = H * 0.1;\n      ctx.font = Math.round(H * 0.062) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      ctx.fillStyle = s.textColor;\n      ctx.globalAlpha = 0.75;\n      if (s.email) { ctx.fillText(s.email, 36, infoY); infoY += lineH; }\n      if (s.phone) { ctx.fillText(s.phone, 36, infoY); infoY += lineH; }\n      ctx.globalAlpha = 1;\n      if (s.website) { ctx.fillStyle = s.accentColor; ctx.fillText(s.website, 36, infoY); }\n\n    } else if (s.tpl === 'modern') {\n      var grad = ctx.createLinearGradient(0, 0, W, 0);\n      grad.addColorStop(0, s.accentColor);\n      grad.addColorStop(1, s.bgColor);\n      ctx.fillStyle = grad;\n      ctx.fillRect(0, 0, W, H * 0.38);\n      ctx.fillStyle = s.bgColor;\n      ctx.fillRect(0, H * 0.38, W, H * 0.62);\n\n      ctx.fillStyle = '#ffffff';\n      ctx.font = 'bold ' + Math.round(H * 0.11) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      ctx.fillText(s.name, 30, H * 0.28);\n\n      ctx.fillStyle = s.accentColor;\n      ctx.font = Math.round(H * 0.07) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      ctx.fillText(s.title + (s.company ? '  /  ' + s.company : ''), 30, H * 0.5);\n\n      ctx.fillStyle = s.textColor;\n      ctx.globalAlpha = 0.8;\n      ctx.font = Math.round(H * 0.062) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      var cy = H * 0.64;\n      var cl = H * 0.1;\n      if (s.email) { ctx.fillText(s.email, 30, cy); cy += cl; }\n      if (s.phone) { ctx.fillText(s.phone, 30, cy); cy += cl; }\n      if (s.website) { ctx.fillStyle = s.accentColor; ctx.globalAlpha = 1; ctx.fillText(s.website, 30, cy); }\n      ctx.globalAlpha = 1;\n\n    } else if (s.tpl === 'minimal') {\n      ctx.fillStyle = s.accentColor;\n      ctx.fillRect(0, 0, W, 6);\n\n      ctx.fillStyle = s.accentColor;\n      ctx.font = 'bold ' + Math.round(H * 0.07) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      ctx.textAlign = 'right';\n      ctx.fillText(s.company, W - 30, H * 0.18);\n      ctx.textAlign = 'left';\n\n      ctx.fillStyle = s.textColor;\n      ctx.font = 'bold ' + Math.round(H * 0.12) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      ctx.fillText(s.name, 30, H * 0.42);\n\n      ctx.fillStyle = s.accentColor;\n      ctx.globalAlpha = 0.75;\n      ctx.font = Math.round(H * 0.07) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      ctx.fillText(s.title, 30, H * 0.56);\n      ctx.globalAlpha = 1;\n\n      ctx.fillStyle = s.textColor;\n      ctx.globalAlpha = 0.6;\n      ctx.font = Math.round(H * 0.058) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      var parts = [s.email, s.phone, s.website].filter(Boolean).join('   |   ');\n      ctx.fillText(parts, 30, H * 0.82);\n      ctx.globalAlpha = 1;\n\n      ctx.fillStyle = s.accentColor;\n      ctx.globalAlpha = 0.15;\n      ctx.fillRect(0, H - 6, W, 6);\n      ctx.globalAlpha = 1;\n\n    } else if (s.tpl === 'bold') {\n      ctx.fillStyle = s.accentColor;\n      ctx.beginPath();\n      ctx.moveTo(0, 0);\n      ctx.lineTo(W * 0.55, 0);\n      ctx.lineTo(W * 0.38, H);\n      ctx.lineTo(0, H);\n      ctx.closePath();\n      ctx.fill();\n\n      ctx.fillStyle = '#ffffff';\n      ctx.font = 'bold ' + Math.round(H * 0.105) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      ctx.fillText(s.name, 28, H * 0.28);\n\n      ctx.font = Math.round(H * 0.065) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      ctx.globalAlpha = 0.85;\n      ctx.fillText(s.title, 28, H * 0.42);\n      ctx.globalAlpha = 1;\n\n      if (s.company) {\n        ctx.font = 'bold ' + Math.round(H * 0.065) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n        ctx.fillText(s.company, 28, H * 0.56);\n      }\n\n      ctx.fillStyle = s.textColor;\n      ctx.font = Math.round(H * 0.062) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      var ry = H * 0.3;\n      var rl = H * 0.1;\n      var rx = W * 0.46;\n      ctx.globalAlpha = 0.8;\n      if (s.email) { ctx.fillText(s.email, rx, ry); ry += rl; }\n      if (s.phone) { ctx.fillText(s.phone, rx, ry); ry += rl; }\n      if (s.website) { ctx.fillStyle = s.accentColor; ctx.globalAlpha = 1; ctx.fillText(s.website, rx, ry); ry += rl; }\n      ctx.globalAlpha = 0.7;\n      ctx.fillStyle = s.textColor;\n      if (s.address) { ctx.fillText(s.address, rx, ry); }\n      ctx.globalAlpha = 1;\n    }\n  }\n\n  function drawQr(ctx, x, y, size, data) {\n    var cells = 17;\n    var cell = size / cells;\n    ctx.fillStyle = '#ffffff';\n    ctx.fillRect(x - 2, y - 2, size + 4, size + 4);\n    ctx.fillStyle = '#000000';\n\n    var seed = 0;\n    for (var i = 0; i \u003c data.length; i++) seed = (seed * 31 + data.charCodeAt(i)) \u0026 0xffff;\n    function rand() { seed = (seed * 1664525 + 1013904223) \u0026 0xffffffff; return (seed \u003e\u003e\u003e 0) / 4294967296; }\n\n    for (var r = 0; r \u003c cells; r++) {\n      for (var c = 0; c \u003c cells; c++) {\n        var isFinder = (r \u003c 3 \u0026\u0026 c \u003c 3) || (r \u003c 3 \u0026\u0026 c \u003e= cells-3) || (r \u003e= cells-3 \u0026\u0026 c \u003c 3);\n        var filled = isFinder ? true : rand() \u003e 0.5;\n        if (filled) ctx.fillRect(x + c * cell, y + r * cell, cell - 0.5, cell - 0.5);\n      }\n    }\n\n    ctx.fillStyle = '#000';\n    [[0,0],[0,cells-3],[cells-3,0]].forEach(function(pos) {\n      var pr = pos[0], pc = pos[1];\n      ctx.fillStyle = '#000';\n      ctx.fillRect(x + pc*cell, y + pr*cell, 3*cell, 3*cell);\n      ctx.fillStyle = '#fff';\n      ctx.fillRect(x + pc*cell+cell*0.2, y + pr*cell+cell*0.2, cell*2.6, cell*2.6);\n      ctx.fillStyle = '#000';\n      ctx.fillRect(x + pc*cell+cell*0.6, y + pr*cell+cell*0.6, cell*1.8, cell*1.8);\n    });\n  }\n\n  function drawBack(ctx, W, H, s) {\n    ctx.clearRect(0, 0, W, H);\n    ctx.fillStyle = s.bgColor;\n    ctx.beginPath();\n    ctx.roundRect(0, 0, W, H, 18);\n    ctx.fill();\n\n    ctx.fillStyle = s.accentColor;\n    ctx.globalAlpha = 0.12;\n    ctx.fillRect(0, H * 0.35, W, H * 0.3);\n    ctx.globalAlpha = 1;\n\n    ctx.fillStyle = s.textColor;\n    ctx.textAlign = 'center';\n    ctx.font = 'bold ' + Math.round(H * 0.13) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n    ctx.fillText(s.company || s.name, W / 2, H * 0.38);\n\n    ctx.fillStyle = s.accentColor;\n    ctx.font = Math.round(H * 0.07) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n    if (s.website) ctx.fillText(s.website, W / 2, H * 0.54);\n    ctx.textAlign = 'left';\n\n    if (s.showQr) {\n      var qrSize = Math.round(H * 0.42);\n      var qrX = W - qrSize - 28;\n      var qrY = Math.round((H - qrSize) / 2);\n      drawQr(ctx, qrX, qrY, qrSize, s.website || s.email || s.name);\n\n      ctx.fillStyle = s.textColor;\n      ctx.globalAlpha = 0.5;\n      ctx.font = Math.round(H * 0.052) + 'px -apple-system,\\'Hiragino Sans\\',\\'Noto Sans JP\\',sans-serif';\n      ctx.textAlign = 'right';\n      ctx.fillText('QRコードで読み取り', W - 28, H - 20);\n      ctx.textAlign = 'left';\n      ctx.globalAlpha = 1;\n    }\n\n    ctx.fillStyle = s.accentColor;\n    ctx.globalAlpha = 0.15;\n    for (var i = 0; i \u003c 5; i++) {\n      ctx.beginPath();\n      ctx.arc(28 + i * 18, H - 24, 5, 0, Math.PI * 2);\n      ctx.fill();\n    }\n    ctx.globalAlpha = 1;\n  }\n\n  function render() {\n    var canvas = document.getElementById('bc-canvas');\n    if (!canvas) return;\n    var ctx = canvas.getContext('2d');\n\n    canvas.width = CARD_W * DPR;\n    canvas.height = CARD_H * DPR;\n    canvas.style.width = CARD_W + 'px';\n    canvas.style.height = CARD_H + 'px';\n    ctx.scale(DPR, DPR);\n\n    if (state.side === 'front') {\n      drawFront(ctx, CARD_W, CARD_H, state);\n    } else {\n      drawBack(ctx, CARD_W, CARD_H, state);\n    }\n  }\n\n  window._bcDownload = function() {\n    var canvas = document.getElementById('bc-canvas');\n    var link = document.createElement('a');\n    link.download = 'meishi-' + state.side + '.png';\n    link.href = canvas.toDataURL('image/png');\n    link.click();\n  };\n\n  window._bcPrint = function() {\n    var pt = document.getElementById('bc-print-target');\n    var tempF = document.createElement('canvas');\n    var tempB = document.createElement('canvas');\n    tempF.width = CARD_W * DPR; tempF.height = CARD_H * DPR;\n    tempB.width = CARD_W * DPR; tempB.height = CARD_H * DPR;\n    tempF.style.width = CARD_W + 'px'; tempF.style.height = CARD_H + 'px';\n    tempB.style.width = CARD_W + 'px'; tempB.style.height = CARD_H + 'px';\n\n    var ctxF = tempF.getContext('2d'); ctxF.scale(DPR, DPR);\n    var ctxB = tempB.getContext('2d'); ctxB.scale(DPR, DPR);\n    drawFront(ctxF, CARD_W, CARD_H, state);\n    drawBack(ctxB, CARD_W, CARD_H, state);\n\n    pt.style.display = 'flex';\n    pt.innerHTML = '';\n    pt.appendChild(tempF);\n    pt.appendChild(tempB);\n    window.print();\n    pt.style.display = 'none';\n  };\n\n  render();\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e関連ツール\u003c/strong\u003e\u003c/p\u003e","title":"名刺ジェネレーター"},{"content":" パーセント計算ツール Xの何% 何%にあたる? 増減率 %を加減する %差 の % は? 計算する 有効な数値を入力してください。 は の何%? 計算する 有効な数値を入力してください（Yは0以外）。 変化前 → 変化後 計算する 有効な数値を入力してください（変化前は0以外）。 に %を 加算する 減算する 計算する 有効な数値を入力してください。 と の%差 計算する 有効な数値を入力してください（平均が0にならないよう）。 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。 freeeを無料で試す \u0026rarr; 関連ツール:\nROI計算 → ROI計算ツール 関数電卓 → 関数電卓 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/percentage-calculator/","summary":"\u003cdiv id=\"pc-app\"\u003e\n\u003cstyle\u003e\n#pc-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Yu Gothic\", \"Segoe UI\", Roboto, sans-serif;\n  max-width: 680px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#pc-app h2 {\n  font-size: 1.3rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 0 0 18px 0;\n}\n#pc-app .pc-mode-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 22px;\n}\n#pc-app .pc-tab {\n  padding: 8px 14px;\n  border-radius: 8px;\n  border: 1.5px solid #e2e8f0;\n  background: #f8fafc;\n  color: #475569;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n  white-space: nowrap;\n}\n#pc-app .pc-tab:hover {\n  border-color: #3b82f6;\n  color: #3b82f6;\n}\n#pc-app .pc-tab.active {\n  background: #3b82f6;\n  border-color: #3b82f6;\n  color: #fff;\n}\n#pc-app .pc-panel {\n  display: none;\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 22px 24px;\n  margin-bottom: 18px;\n}\n#pc-app .pc-panel.active {\n  display: block;\n}\n#pc-app .pc-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  flex-wrap: wrap;\n  margin-bottom: 14px;\n}\n#pc-app .pc-row label {\n  font-size: 14px;\n  font-weight: 600;\n  color: #374151;\n  min-width: 30px;\n}\n#pc-app .pc-input {\n  width: 120px;\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 15px;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#pc-app .pc-input:focus {\n  border-color: #3b82f6;\n}\n#pc-app .pc-text {\n  font-size: 14px;\n  color: #64748b;\n}\n#pc-app .pc-btn {\n  padding: 10px 24px;\n  background: #3b82f6;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#pc-app .pc-btn:hover {\n  background: #2563eb;\n}\n#pc-app .pc-result-box {\n  background: #fff;\n  border: 1.5px solid #bae6fd;\n  border-radius: 10px;\n  padding: 18px 20px;\n  margin-top: 16px;\n  display: none;\n}\n#pc-app .pc-result-box.show {\n  display: block;\n}\n#pc-app .pc-result-value {\n  font-size: 2rem;\n  font-weight: 800;\n  color: #0284c7;\n  margin-bottom: 6px;\n}\n#pc-app .pc-result-formula {\n  font-size: 13px;\n  color: #64748b;\n  margin-bottom: 14px;\n}\n#pc-app .pc-bar-wrap {\n  background: #e2e8f0;\n  border-radius: 99px;\n  height: 12px;\n  overflow: hidden;\n  margin-bottom: 6px;\n}\n#pc-app .pc-bar-fill {\n  height: 12px;\n  background: linear-gradient(90deg, #3b82f6, #0ea5e9);\n  border-radius: 99px;\n  transition: width 0.4s ease;\n  width: 0%;\n}\n#pc-app .pc-bar-label {\n  font-size: 12px;\n  color: #94a3b8;\n  text-align: right;\n}\n#pc-app .pc-error {\n  color: #ef4444;\n  font-size: 13px;\n  margin-top: 8px;\n  display: none;\n}\n#pc-app .pc-error.show {\n  display: block;\n}\n@media (max-width: 500px) {\n  #pc-app .pc-input { width: 90px; }\n  #pc-app .pc-tab { font-size: 12px; padding: 7px 10px; }\n  #pc-app .pc-result-value { font-size: 1.5rem; }\n}\n\u003c/style\u003e\n\u003ch2\u003eパーセント計算ツール\u003c/h2\u003e\n\u003cdiv class=\"pc-mode-tabs\"\u003e\n  \u003cbutton class=\"pc-tab active\" data-mode=\"1\"\u003eXの何%\u003c/button\u003e\n  \u003cbutton class=\"pc-tab\" data-mode=\"2\"\u003e何%にあたる?\u003c/button\u003e\n  \u003cbutton class=\"pc-tab\" data-mode=\"3\"\u003e増減率\u003c/button\u003e\n  \u003cbutton class=\"pc-tab\" data-mode=\"4\"\u003e%を加減する\u003c/button\u003e\n  \u003cbutton class=\"pc-tab\" data-mode=\"5\"\u003e%差\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- モード1: YのX%は? --\u003e\n\u003cdiv class=\"pc-panel active\" id=\"pc-panel-1\"\u003e\n  \u003cdiv class=\"pc-row\"\u003e\n    \u003cinput class=\"pc-input\" id=\"m1-y\" type=\"number\" placeholder=\"200\" /\u003e\n    \u003cspan class=\"pc-text\"\u003eの\u003c/span\u003e\n    \u003cinput class=\"pc-input\" id=\"m1-x\" type=\"number\" placeholder=\"15\" /\u003e\n    \u003cspan class=\"pc-text\"\u003e% は?\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"pc-btn\" onclick=\"calcMode1()\"\u003e計算する\u003c/button\u003e\n  \u003cdiv class=\"pc-error\" id=\"m1-err\"\u003e有効な数値を入力してください。\u003c/div\u003e\n  \u003cdiv class=\"pc-result-box\" id=\"m1-result\"\u003e\n    \u003cdiv class=\"pc-result-value\" id=\"m1-val\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-result-formula\" id=\"m1-formula\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-bar-wrap\"\u003e\u003cdiv class=\"pc-bar-fill\" id=\"m1-bar\"\u003e\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-bar-label\" id=\"m1-bar-label\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- モード2: XはYの何%? --\u003e\n\u003cdiv class=\"pc-panel\" id=\"pc-panel-2\"\u003e\n  \u003cdiv class=\"pc-row\"\u003e\n    \u003cinput class=\"pc-input\" id=\"m2-x\" type=\"number\" placeholder=\"30\" /\u003e\n    \u003cspan class=\"pc-text\"\u003eは\u003c/span\u003e\n    \u003cinput class=\"pc-input\" id=\"m2-y\" type=\"number\" placeholder=\"200\" /\u003e\n    \u003cspan class=\"pc-text\"\u003eの何%?\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"pc-btn\" onclick=\"calcMode2()\"\u003e計算する\u003c/button\u003e\n  \u003cdiv class=\"pc-error\" id=\"m2-err\"\u003e有効な数値を入力してください（Yは0以外）。\u003c/div\u003e\n  \u003cdiv class=\"pc-result-box\" id=\"m2-result\"\u003e\n    \u003cdiv class=\"pc-result-value\" id=\"m2-val\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-result-formula\" id=\"m2-formula\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-bar-wrap\"\u003e\u003cdiv class=\"pc-bar-fill\" id=\"m2-bar\"\u003e\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-bar-label\" id=\"m2-bar-label\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- モード3: 増減率 --\u003e\n\u003cdiv class=\"pc-panel\" id=\"pc-panel-3\"\u003e\n  \u003cdiv class=\"pc-row\"\u003e\n    \u003cspan class=\"pc-text\"\u003e変化前\u003c/span\u003e\n    \u003cinput class=\"pc-input\" id=\"m3-x\" type=\"number\" placeholder=\"100\" /\u003e\n    \u003cspan class=\"pc-text\"\u003e→ 変化後\u003c/span\u003e\n    \u003cinput class=\"pc-input\" id=\"m3-y\" type=\"number\" placeholder=\"130\" /\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"pc-btn\" onclick=\"calcMode3()\"\u003e計算する\u003c/button\u003e\n  \u003cdiv class=\"pc-error\" id=\"m3-err\"\u003e有効な数値を入力してください（変化前は0以外）。\u003c/div\u003e\n  \u003cdiv class=\"pc-result-box\" id=\"m3-result\"\u003e\n    \u003cdiv class=\"pc-result-value\" id=\"m3-val\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-result-formula\" id=\"m3-formula\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-bar-wrap\"\u003e\u003cdiv class=\"pc-bar-fill\" id=\"m3-bar\"\u003e\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-bar-label\" id=\"m3-bar-label\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- モード4: %を加減する --\u003e\n\u003cdiv class=\"pc-panel\" id=\"pc-panel-4\"\u003e\n  \u003cdiv class=\"pc-row\"\u003e\n    \u003cinput class=\"pc-input\" id=\"m4-y\" type=\"number\" placeholder=\"200\" /\u003e\n    \u003cspan class=\"pc-text\"\u003eに\u003c/span\u003e\n    \u003cinput class=\"pc-input\" id=\"m4-x\" type=\"number\" placeholder=\"15\" /\u003e\n    \u003cspan class=\"pc-text\"\u003e%を\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"display:flex;gap:14px;margin-bottom:14px;\"\u003e\n    \u003clabel style=\"font-size:14px;color:#374151;display:flex;align-items:center;gap:5px;cursor:pointer;\"\u003e\n      \u003cinput type=\"radio\" name=\"m4-op\" value=\"add\" checked /\u003e 加算する\n    \u003c/label\u003e\n    \u003clabel style=\"font-size:14px;color:#374151;display:flex;align-items:center;gap:5px;cursor:pointer;\"\u003e\n      \u003cinput type=\"radio\" name=\"m4-op\" value=\"sub\" /\u003e 減算する\n    \u003c/label\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"pc-btn\" onclick=\"calcMode4()\"\u003e計算する\u003c/button\u003e\n  \u003cdiv class=\"pc-error\" id=\"m4-err\"\u003e有効な数値を入力してください。\u003c/div\u003e\n  \u003cdiv class=\"pc-result-box\" id=\"m4-result\"\u003e\n    \u003cdiv class=\"pc-result-value\" id=\"m4-val\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-result-formula\" id=\"m4-formula\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-bar-wrap\"\u003e\u003cdiv class=\"pc-bar-fill\" id=\"m4-bar\"\u003e\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-bar-label\" id=\"m4-bar-label\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- モード5: %差 --\u003e\n\u003cdiv class=\"pc-panel\" id=\"pc-panel-5\"\u003e\n  \u003cdiv class=\"pc-row\"\u003e\n    \u003cinput class=\"pc-input\" id=\"m5-x\" type=\"number\" placeholder=\"80\" /\u003e\n    \u003cspan class=\"pc-text\"\u003eと\u003c/span\u003e\n    \u003cinput class=\"pc-input\" id=\"m5-y\" type=\"number\" placeholder=\"100\" /\u003e\n    \u003cspan class=\"pc-text\"\u003eの%差\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"pc-btn\" onclick=\"calcMode5()\"\u003e計算する\u003c/button\u003e\n  \u003cdiv class=\"pc-error\" id=\"m5-err\"\u003e有効な数値を入力してください（平均が0にならないよう）。\u003c/div\u003e\n  \u003cdiv class=\"pc-result-box\" id=\"m5-result\"\u003e\n    \u003cdiv class=\"pc-result-value\" id=\"m5-val\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-result-formula\" id=\"m5-formula\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-bar-wrap\"\u003e\u003cdiv class=\"pc-bar-fill\" id=\"m5-bar\"\u003e\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"pc-bar-label\" id=\"m5-bar-label\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  // タブ切替\n  var tabs = document.querySelectorAll('#pc-app .pc-tab');\n  tabs.forEach(function(tab) {\n    tab.addEventListener('click', function() {\n      tabs.forEach(function(t) { t.classList.remove('active'); });\n      document.querySelectorAll('#pc-app .pc-panel').forEach(function(p) { p.classList.remove('active'); });\n      tab.classList.add('active');\n      document.getElementById('pc-panel-' + tab.dataset.mode).classList.add('active');\n    });\n  });\n\n  function fmt(n) {\n    if (Math.abs(n) \u003e= 1000) return n.toLocaleString('ja-JP', {maximumFractionDigits: 4});\n    return parseFloat(n.toFixed(4)).toString();\n  }\n\n  function clampBar(pct) {\n    return Math.min(100, Math.max(0, Math.abs(pct)));\n  }\n\n  function showResult(id, value, formula, barPct, barLabelText) {\n    var box = document.getElementById(id + '-result');\n    box.classList.add('show');\n    document.getElementById(id + '-val').textContent = value;\n    document.getElementById(id + '-formula').textContent = formula;\n    document.getElementById(id + '-bar').style.width = clampBar(barPct) + '%';\n    document.getElementById(id + '-bar-label').textContent = barLabelText;\n  }\n\n  function showErr(id, show) {\n    document.getElementById(id + '-err').classList.toggle('show', show);\n    if (show) document.getElementById(id + '-result').classList.remove('show');\n  }\n\n  // モード1: YのX%は?\n  window.calcMode1 = function() {\n    var x = parseFloat(document.getElementById('m1-x').value);\n    var y = parseFloat(document.getElementById('m1-y').value);\n    if (isNaN(x) || isNaN(y)) { showErr('m1', true); return; }\n    showErr('m1', false);\n    var result = (x / 100) * y;\n    showResult('m1',\n      fmt(result),\n      fmt(y) + ' \\u00d7 ' + x + '% = ' + fmt(result),\n      clampBar(x),\n      fmt(y) + ' の ' + x + '% = ' + fmt(result)\n    );\n  };\n\n  // モード2: XはYの何%?\n  window.calcMode2 = function() {\n    var x = parseFloat(document.getElementById('m2-x').value);\n    var y = parseFloat(document.getElementById('m2-y').value);\n    if (isNaN(x) || isNaN(y) || y === 0) { showErr('m2', true); return; }\n    showErr('m2', false);\n    var result = (x / y) * 100;\n    showResult('m2',\n      fmt(result) + '%',\n      fmt(x) + ' \\u00f7 ' + fmt(y) + ' \\u00d7 100 = ' + fmt(result) + '%',\n      clampBar(result),\n      fmt(x) + ' は ' + fmt(y) + ' の ' + fmt(result) + '%'\n    );\n  };\n\n  // モード3: 増減率\n  window.calcMode3 = function() {\n    var x = parseFloat(document.getElementById('m3-x').value);\n    var y = parseFloat(document.getElementById('m3-y').value);\n    if (isNaN(x) || isNaN(y) || x === 0) { showErr('m3', true); return; }\n    showErr('m3', false);\n    var result = ((y - x) / Math.abs(x)) * 100;\n    var direction = result \u003e= 0 ? '\\u2191 増加' : '\\u2193 減少';\n    showResult('m3',\n      (result \u003e= 0 ? '+' : '') + fmt(result) + '% (' + direction + ')',\n      '(' + fmt(y) + ' \\u2212 ' + fmt(x) + ') \\u00f7 ' + fmt(Math.abs(x)) + ' \\u00d7 100 = ' + fmt(result) + '%',\n      clampBar(Math.abs(result)),\n      fmt(x) + ' \\u2192 ' + fmt(y) + ': ' + (result \u003e= 0 ? '+' : '') + fmt(result) + '%'\n    );\n  };\n\n  // モード4: %を加減する\n  window.calcMode4 = function() {\n    var y = parseFloat(document.getElementById('m4-y').value);\n    var x = parseFloat(document.getElementById('m4-x').value);\n    var op = document.querySelector('input[name=\"m4-op\"]:checked').value;\n    if (isNaN(x) || isNaN(y)) { showErr('m4', true); return; }\n    showErr('m4', false);\n    var delta = (x / 100) * y;\n    var result = op === 'add' ? y + delta : y - delta;\n    var sign = op === 'add' ? '+' : '\\u2212';\n    var opLabel = op === 'add' ? '加算' : '減算';\n    showResult('m4',\n      fmt(result),\n      fmt(y) + ' ' + sign + ' (' + x + '% \\u00d7 ' + fmt(y) + ') = ' + fmt(y) + ' ' + sign + ' ' + fmt(delta) + ' = ' + fmt(result),\n      clampBar(x),\n      fmt(y) + ' に ' + x + '% を' + opLabel + ' \\u2192 ' + fmt(result)\n    );\n  };\n\n  // モード5: %差\n  window.calcMode5 = function() {\n    var x = parseFloat(document.getElementById('m5-x').value);\n    var y = parseFloat(document.getElementById('m5-y').value);\n    var avg = (x + y) / 2;\n    if (isNaN(x) || isNaN(y) || avg === 0) { showErr('m5', true); return; }\n    showErr('m5', false);\n    var result = (Math.abs(x - y) / Math.abs(avg)) * 100;\n    showResult('m5',\n      fmt(result) + '%',\n      '|' + fmt(x) + ' \\u2212 ' + fmt(y) + '| \\u00f7 ((' + fmt(x) + ' + ' + fmt(y) + ') / 2) \\u00d7 100 = ' + fmt(result) + '%',\n      clampBar(result),\n      fmt(x) + ' と ' + fmt(y) + ' の%差: ' + fmt(result) + '%'\n    );\n  };\n\n  // Enterキー対応\n  document.querySelectorAll('#pc-app .pc-input').forEach(function(inp) {\n    inp.addEventListener('keydown', function(e) {\n      if (e.key === 'Enter') {\n        var panel = inp.closest('.pc-panel');\n        var btn = panel.querySelector('.pc-btn');\n        if (btn) btn.click();\n      }\n    });\n  });\n})();\n\u003c/script\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"パーセント計算ツール｜割合・増減率・割引を瞬時に計算【無料】"},{"content":" テキストを貼り付ける クリア または文字数を直接入力 文字数: （上のテキスト入力時は不要） 読書速度 文字/分: 500 文字/分 ゆっくり (300) 普通 (500) 速い (700) 速読 (1000) 一般的な日本語の読書速度: 400〜600文字/分（黙読） 計算結果 テキストを貼り付けるか、文字数を入力すると結果が表示されます。 本の読書時間を推定 ページ数: 1ページあたりの文字数: 📊 freee会計でビジネスをもっとスマートに 確定申告・請求書・経費管理をまとめて自動化。個人事業主・フリーランスに人気のクラウド会計ソフト。 freeeを無料で試す 関連ツール 年齢計算 → 年齢計算ツール Case Converter → Case Converterツール Character Counter → Character Counterツール 関連記事 AI要約ツール おすすめ無料10選【2026年版】用途別に徹底比較 ","permalink":"https://productivity-works.com/ja/tools/reading-time-calculator/","summary":"\u003cdiv id=\"rt-app\"\u003e\n\u003cstyle\u003e\n#rt-app {\n  font-family: \"Noto Sans JP\", \"Hiragino Sans\", \"Yu Gothic\", system-ui, sans-serif;\n  max-width: 820px;\n  margin: 0 auto;\n  color: #1f2937;\n}\n#rt-app * { box-sizing: border-box; }\n#rt-app h2 {\n  font-size: 1.15rem;\n  font-weight: 700;\n  margin: 1.5rem 0 0.75rem;\n  color: #92400e;\n}\n#rt-app .card {\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 1.25rem 1.5rem;\n  margin-bottom: 1.25rem;\n  box-shadow: 0 1px 3px rgba(0,0,0,0.06);\n}\n#rt-app textarea {\n  width: 100%;\n  min-height: 160px;\n  border: 2px solid #e5e7eb;\n  border-radius: 8px;\n  padding: 0.75rem 1rem;\n  font-size: 0.95rem;\n  font-family: inherit;\n  resize: vertical;\n  transition: border-color 0.2s;\n  outline: none;\n  line-height: 1.7;\n}\n#rt-app textarea:focus { border-color: #d97706; }\n#rt-app .or-divider {\n  text-align: center;\n  color: #9ca3af;\n  font-size: 0.85rem;\n  margin: 0.75rem 0;\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n#rt-app .or-divider::before,\n#rt-app .or-divider::after {\n  content: \"\";\n  flex: 1;\n  height: 1px;\n  background: #e5e7eb;\n}\n#rt-app .word-count-row {\n  display: flex;\n  align-items: center;\n  gap: 0.75rem;\n  flex-wrap: wrap;\n}\n#rt-app .word-count-row label {\n  font-size: 0.9rem;\n  color: #374151;\n  font-weight: 500;\n  white-space: nowrap;\n}\n#rt-app input[type=\"number\"] {\n  width: 130px;\n  border: 2px solid #e5e7eb;\n  border-radius: 8px;\n  padding: 0.45rem 0.75rem;\n  font-size: 0.95rem;\n  font-family: inherit;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#rt-app input[type=\"number\"]:focus { border-color: #d97706; }\n#rt-app .speed-section {\n  display: flex;\n  align-items: center;\n  gap: 1rem;\n  flex-wrap: wrap;\n}\n#rt-app .speed-label {\n  font-size: 0.9rem;\n  color: #374151;\n  font-weight: 500;\n  white-space: nowrap;\n}\n#rt-app input[type=\"range\"] {\n  flex: 1;\n  min-width: 140px;\n  accent-color: #d97706;\n  height: 6px;\n  cursor: pointer;\n}\n#rt-app .speed-val {\n  background: #fef3c7;\n  color: #92400e;\n  border-radius: 20px;\n  padding: 0.2rem 0.75rem;\n  font-size: 0.88rem;\n  font-weight: 700;\n  white-space: nowrap;\n}\n#rt-app .speed-presets {\n  display: flex;\n  gap: 0.5rem;\n  flex-wrap: wrap;\n  margin-top: 0.5rem;\n}\n#rt-app .preset-btn {\n  border: 1.5px solid #d97706;\n  background: transparent;\n  color: #92400e;\n  border-radius: 20px;\n  padding: 0.2rem 0.75rem;\n  font-size: 0.82rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n#rt-app .preset-btn:hover,\n#rt-app .preset-btn.active {\n  background: #d97706;\n  color: #fff;\n}\n#rt-app .results-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n  gap: 0.75rem;\n  margin-bottom: 0.5rem;\n}\n#rt-app .result-box {\n  background: #fffbeb;\n  border: 1.5px solid #fde68a;\n  border-radius: 10px;\n  padding: 0.9rem 1rem;\n  text-align: center;\n}\n#rt-app .result-box .r-val {\n  font-size: 1.5rem;\n  font-weight: 800;\n  color: #d97706;\n  line-height: 1.1;\n}\n#rt-app .result-box .r-lbl {\n  font-size: 0.73rem;\n  color: #6b7280;\n  margin-top: 0.2rem;\n  line-height: 1.3;\n}\n#rt-app .progress-wrap {\n  margin: 1rem 0 0.25rem;\n}\n#rt-app .progress-label {\n  display: flex;\n  justify-content: space-between;\n  font-size: 0.8rem;\n  color: #9ca3af;\n  margin-bottom: 0.3rem;\n}\n#rt-app .progress-bar-bg {\n  width: 100%;\n  height: 14px;\n  background: #f3f4f6;\n  border-radius: 999px;\n  overflow: hidden;\n}\n#rt-app .progress-bar-fill {\n  height: 100%;\n  background: linear-gradient(90deg, #f59e0b, #d97706);\n  border-radius: 999px;\n  transition: width 0.4s ease;\n  min-width: 4px;\n}\n#rt-app .speed-comparison {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 0.6rem;\n  margin-top: 0.75rem;\n}\n#rt-app .cmp-box {\n  border-radius: 10px;\n  padding: 0.65rem 0.75rem;\n  text-align: center;\n  border: 1.5px solid #e5e7eb;\n}\n#rt-app .cmp-box.slow  { border-color: #fca5a5; background: #fff1f1; }\n#rt-app .cmp-box.avg   { border-color: #fde68a; background: #fffbeb; }\n#rt-app .cmp-box.fast  { border-color: #6ee7b7; background: #ecfdf5; }\n#rt-app .cmp-box .cmp-t { font-size: 0.72rem; font-weight: 700; color: #6b7280; }\n#rt-app .cmp-box .cmp-v { font-size: 1.1rem; font-weight: 800; margin: 0.1rem 0; }\n#rt-app .cmp-box.slow  .cmp-v { color: #dc2626; }\n#rt-app .cmp-box.avg   .cmp-v { color: #d97706; }\n#rt-app .cmp-box.fast  .cmp-v { color: #059669; }\n#rt-app .cmp-box .cmp-wpm { font-size: 0.7rem; color: #9ca3af; }\n#rt-app .book-row {\n  display: flex;\n  align-items: center;\n  gap: 0.75rem;\n  flex-wrap: wrap;\n}\n#rt-app .book-row label { font-size: 0.9rem; color: #374151; font-weight: 500; white-space: nowrap; }\n#rt-app .book-result {\n  margin-top: 0.75rem;\n  padding: 0.65rem 1rem;\n  background: #fffbeb;\n  border: 1.5px solid #fde68a;\n  border-radius: 8px;\n  font-size: 0.92rem;\n  color: #92400e;\n  font-weight: 600;\n  line-height: 1.6;\n}\n#rt-app .readability-section { margin-top: 0.5rem; }\n#rt-app .rdbl-row {\n  display: flex;\n  gap: 1rem;\n  flex-wrap: wrap;\n  align-items: flex-start;\n}\n#rt-app .rdbl-item { flex: 1; min-width: 150px; }\n#rt-app .rdbl-item .rdbl-val { font-size: 1.3rem; font-weight: 800; color: #d97706; }\n#rt-app .rdbl-item .rdbl-lbl { font-size: 0.75rem; color: #6b7280; margin-top: 0.15rem; }\n#rt-app .rdbl-item .rdbl-note { font-size: 0.78rem; color: #374151; margin-top: 0.1rem; }\n#rt-app .clear-btn {\n  background: transparent;\n  border: 1.5px solid #e5e7eb;\n  color: #6b7280;\n  border-radius: 8px;\n  padding: 0.35rem 1rem;\n  font-size: 0.82rem;\n  cursor: pointer;\n  transition: border-color 0.15s, color 0.15s;\n  float: right;\n  margin-top: 0.25rem;\n}\n#rt-app .clear-btn:hover { border-color: #d97706; color: #d97706; }\n#rt-app .empty-state {\n  text-align: center;\n  color: #9ca3af;\n  font-size: 0.9rem;\n  padding: 1.5rem 0;\n}\n#rt-app .freee-cta {\n  margin-top: 2rem;\n  padding: 1.1rem 1.4rem;\n  background: linear-gradient(135deg, #fef3c7 0%, #fffbeb 100%);\n  border: 1.5px solid #fde68a;\n  border-radius: 12px;\n  display: flex;\n  align-items: center;\n  gap: 1rem;\n  flex-wrap: wrap;\n}\n#rt-app .freee-cta .cta-icon {\n  font-size: 2rem;\n  flex-shrink: 0;\n}\n#rt-app .freee-cta .cta-body { flex: 1; min-width: 180px; }\n#rt-app .freee-cta .cta-title {\n  font-size: 0.95rem;\n  font-weight: 700;\n  color: #92400e;\n  margin-bottom: 0.2rem;\n}\n#rt-app .freee-cta .cta-text {\n  font-size: 0.82rem;\n  color: #6b7280;\n  line-height: 1.5;\n}\n#rt-app .freee-cta .cta-btn {\n  display: inline-block;\n  background: #d97706;\n  color: #fff;\n  border-radius: 8px;\n  padding: 0.5rem 1.2rem;\n  font-size: 0.88rem;\n  font-weight: 700;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: background 0.15s;\n}\n#rt-app .freee-cta .cta-btn:hover { background: #b45309; }\n@media (max-width: 500px) {\n  #rt-app .results-grid { grid-template-columns: 1fr 1fr; }\n  #rt-app .speed-comparison { grid-template-columns: 1fr; }\n}\n\u003c/style\u003e\n\u003c!-- INPUT --\u003e\n\u003cdiv class=\"card\"\u003e\n  \u003ch2 style=\"margin-top:0\"\u003eテキストを貼り付ける\u003c/h2\u003e\n  \u003ctextarea id=\"rt-textarea\" placeholder=\"ここにテキストを貼り付けるか、入力してください…\" oninput=\"rtUpdate()\"\u003e\u003c/textarea\u003e\n  \u003cbutton class=\"clear-btn\" onclick=\"rtClear()\"\u003eクリア\u003c/button\u003e\n  \u003cdiv class=\"or-divider\"\u003eまたは文字数を直接入力\u003c/div\u003e\n  \u003cdiv class=\"word-count-row\"\u003e\n    \u003clabel for=\"rt-wc-input\"\u003e文字数:\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"rt-wc-input\" min=\"1\" max=\"9999999\" placeholder=\"例: 3000\" oninput=\"rtUpdate()\" /\u003e\n    \u003cspan style=\"font-size:0.8rem;color:#9ca3af;\"\u003e（上のテキスト入力時は不要）\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- SPEED --\u003e\n\u003cdiv class=\"card\"\u003e\n  \u003ch2 style=\"margin-top:0\"\u003e読書速度\u003c/h2\u003e\n  \u003cdiv class=\"speed-section\"\u003e\n    \u003cspan class=\"speed-label\"\u003e文字/分:\u003c/span\u003e\n    \u003cinput type=\"range\" id=\"rt-speed\" min=\"100\" max=\"1200\" value=\"500\" oninput=\"rtSpeedChange(this.value)\" /\u003e\n    \u003cspan class=\"speed-val\" id=\"rt-speed-val\"\u003e500 文字/分\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"speed-presets\"\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"rtSetSpeed(300)\"\u003eゆっくり (300)\u003c/button\u003e\n    \u003cbutton class=\"preset-btn active\" onclick=\"rtSetSpeed(500)\"\u003e普通 (500)\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"rtSetSpeed(700)\"\u003e速い (700)\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"rtSetSpeed(1000)\"\u003e速読 (1000)\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"font-size:0.78rem;color:#9ca3af;margin-top:0.5rem;\"\u003e一般的な日本語の読書速度: 400〜600文字/分（黙読）\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- RESULTS --\u003e\n\u003cdiv class=\"card\" id=\"rt-results-card\"\u003e\n  \u003ch2 style=\"margin-top:0\"\u003e計算結果\u003c/h2\u003e\n  \u003cdiv id=\"rt-results-body\"\u003e\n    \u003cdiv class=\"empty-state\"\u003eテキストを貼り付けるか、文字数を入力すると結果が表示されます。\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- BOOK ESTIMATE --\u003e\n\u003cdiv class=\"card\"\u003e\n  \u003ch2 style=\"margin-top:0\"\u003e本の読書時間を推定\u003c/h2\u003e\n  \u003cdiv class=\"book-row\"\u003e\n    \u003clabel for=\"rt-pages\"\u003eページ数:\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"rt-pages\" min=\"1\" max=\"10000\" placeholder=\"例: 300\" oninput=\"rtBookUpdate()\" /\u003e\n    \u003clabel for=\"rt-wppage\"\u003e1ページあたりの文字数:\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"rt-wppage\" min=\"50\" max=\"3000\" value=\"600\" placeholder=\"600\" oninput=\"rtBookUpdate()\" /\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"rt-book-result\" class=\"book-result\" style=\"display:none\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var cpm = 500; // characters per minute (JP default)\n  var spkCpm = 300; // speaking rate (JP)\n\n  function fmtTime(minutes) {\n    if (minutes \u003c 1) return \"1分未満\";\n    if (minutes \u003c 60) {\n      var m = Math.round(minutes);\n      return m + \"分\";\n    }\n    var h = Math.floor(minutes / 60);\n    var m = Math.round(minutes % 60);\n    return h + \"時間\" + (m \u003e 0 ? m + \"分\" : \"\");\n  }\n\n  function fmtNum(n) {\n    return n.toLocaleString();\n  }\n\n  function analyzeText(text) {\n    var charCount = text.replace(/\\s/g, \"\").length; // chars excluding whitespace\n    var charCountAll = text.length;\n    // Word count: count sequences of non-space chars (for CJK, each char ~ 1 word)\n    var wordCount = text.trim().match(/\\S+/g) ? text.trim().match(/\\S+/g).length : 0;\n    // Sentence count: split on Japanese/Western punctuation\n    var sentences = text.split(/[。！？!?.]+/).filter(function(s) { return s.trim().length \u003e 0; });\n    var sentenceCount = sentences.length;\n    var avgCharsPerSentence = sentenceCount \u003e 0 ? (charCount / sentenceCount) : 0;\n    return {\n      charCount: charCount,\n      charCountAll: charCountAll,\n      wordCount: wordCount,\n      sentenceCount: sentenceCount,\n      avgCharsPerSentence: avgCharsPerSentence\n    };\n  }\n\n  function readabilityLabel(avgCps) {\n    if (avgCps \u003c 30) return { label: \"非常に読みやすい\", color: \"#059669\" };\n    if (avgCps \u003c 50) return { label: \"読みやすい\", color: \"#10b981\" };\n    if (avgCps \u003c 70) return { label: \"普通\", color: \"#d97706\" };\n    if (avgCps \u003c 100) return { label: \"やや難しい\", color: \"#f59e0b\" };\n    return { label: \"難しい\", color: \"#dc2626\" };\n  }\n\n  function progressPercent(minutes) {\n    return Math.min(100, Math.max(2, (minutes / 60) * 100));\n  }\n\n  window.rtUpdate = function() {\n    var text = document.getElementById(\"rt-textarea\").value;\n    var wcInput = document.getElementById(\"rt-wc-input\").value;\n    var hasText = text.trim().length \u003e 0;\n    var hasWC = wcInput \u0026\u0026 parseInt(wcInput) \u003e 0;\n\n    if (!hasText \u0026\u0026 !hasWC) {\n      document.getElementById(\"rt-results-body\").innerHTML =\n        '\u003cdiv class=\"empty-state\"\u003eテキストを貼り付けるか、文字数を入力すると結果が表示されます。\u003c/div\u003e';\n      return;\n    }\n\n    var data = hasText ? analyzeText(text) : null;\n    var charCount = hasText ? data.charCount : parseInt(wcInput);\n    var readMin = charCount / cpm;\n    var spkMin = charCount / spkCpm;\n\n    var html = '\u003cdiv class=\"results-grid\"\u003e';\n    html += '\u003cdiv class=\"result-box\"\u003e\u003cdiv class=\"r-val\"\u003e' + fmtTime(readMin) + '\u003c/div\u003e\u003cdiv class=\"r-lbl\"\u003e読書時間\u003c/div\u003e\u003c/div\u003e';\n    html += '\u003cdiv class=\"result-box\"\u003e\u003cdiv class=\"r-val\"\u003e' + fmtTime(spkMin) + '\u003c/div\u003e\u003cdiv class=\"r-lbl\"\u003e音読時間\u003cbr\u003e(300文字/分)\u003c/div\u003e\u003c/div\u003e';\n    if (hasText) {\n      html += '\u003cdiv class=\"result-box\"\u003e\u003cdiv class=\"r-val\"\u003e' + fmtNum(data.charCount) + '\u003c/div\u003e\u003cdiv class=\"r-lbl\"\u003e文字数\u003cbr\u003e(空白除く)\u003c/div\u003e\u003c/div\u003e';\n      html += '\u003cdiv class=\"result-box\"\u003e\u003cdiv class=\"r-val\"\u003e' + fmtNum(data.charCountAll) + '\u003c/div\u003e\u003cdiv class=\"r-lbl\"\u003e文字数\u003cbr\u003e(全体)\u003c/div\u003e\u003c/div\u003e';\n      html += '\u003cdiv class=\"result-box\"\u003e\u003cdiv class=\"r-val\"\u003e' + fmtNum(data.sentenceCount) + '\u003c/div\u003e\u003cdiv class=\"r-lbl\"\u003e文数\u003c/div\u003e\u003c/div\u003e';\n    } else {\n      html += '\u003cdiv class=\"result-box\"\u003e\u003cdiv class=\"r-val\"\u003e' + fmtNum(charCount) + '\u003c/div\u003e\u003cdiv class=\"r-lbl\"\u003e文字数\u003c/div\u003e\u003c/div\u003e';\n    }\n    html += '\u003c/div\u003e';\n\n    // Progress bar\n    var pct = progressPercent(readMin);\n    html += '\u003cdiv class=\"progress-wrap\"\u003e';\n    html += '\u003cdiv class=\"progress-label\"\u003e\u003cspan\u003e読書時間\u003c/span\u003e\u003cspan\u003e' + fmtTime(readMin) + ' (' + cpm + '文字/分)\u003c/span\u003e\u003c/div\u003e';\n    html += '\u003cdiv class=\"progress-bar-bg\"\u003e\u003cdiv class=\"progress-bar-fill\" style=\"width:' + pct + '%\"\u003e\u003c/div\u003e\u003c/div\u003e';\n    html += '\u003c/div\u003e';\n\n    // Speed comparison\n    html += '\u003cdiv class=\"speed-comparison\"\u003e';\n    html += '\u003cdiv class=\"cmp-box slow\"\u003e\u003cdiv class=\"cmp-t\"\u003eゆっくり\u003c/div\u003e\u003cdiv class=\"cmp-v\"\u003e' + fmtTime(charCount/300) + '\u003c/div\u003e\u003cdiv class=\"cmp-wpm\"\u003e300文字/分\u003c/div\u003e\u003c/div\u003e';\n    html += '\u003cdiv class=\"cmp-box avg\"\u003e\u003cdiv class=\"cmp-t\"\u003e普通\u003c/div\u003e\u003cdiv class=\"cmp-v\"\u003e' + fmtTime(charCount/500) + '\u003c/div\u003e\u003cdiv class=\"cmp-wpm\"\u003e500文字/分\u003c/div\u003e\u003c/div\u003e';\n    html += '\u003cdiv class=\"cmp-box fast\"\u003e\u003cdiv class=\"cmp-t\"\u003e速い\u003c/div\u003e\u003cdiv class=\"cmp-v\"\u003e' + fmtTime(charCount/800) + '\u003c/div\u003e\u003cdiv class=\"cmp-wpm\"\u003e800文字/分\u003c/div\u003e\u003c/div\u003e';\n    html += '\u003c/div\u003e';\n\n    // Readability\n    if (hasText \u0026\u0026 data.charCount \u003e 10 \u0026\u0026 data.sentenceCount \u003e 0) {\n      var rdbl = readabilityLabel(data.avgCharsPerSentence);\n      html += '\u003cdiv class=\"readability-section\"\u003e\u003ch2\u003e可読性\u003c/h2\u003e';\n      html += '\u003cdiv class=\"rdbl-row\"\u003e';\n      html += '\u003cdiv class=\"rdbl-item\"\u003e\u003cdiv class=\"rdbl-val\" style=\"color:' + rdbl.color + '\"\u003e' + rdbl.label + '\u003c/div\u003e\u003cdiv class=\"rdbl-lbl\"\u003e全体の難易度\u003c/div\u003e\u003c/div\u003e';\n      html += '\u003cdiv class=\"rdbl-item\"\u003e\u003cdiv class=\"rdbl-val\"\u003e' + data.avgCharsPerSentence.toFixed(1) + '\u003c/div\u003e\u003cdiv class=\"rdbl-lbl\"\u003e1文あたりの平均文字数\u003c/div\u003e\u003cdiv class=\"rdbl-note\"\u003e' + (data.avgCharsPerSentence \u003c 30 ? \"簡潔で読みやすい\" : data.avgCharsPerSentence \u003c 60 ? \"適切な文の長さ\" : \"文が長め\") + '\u003c/div\u003e\u003c/div\u003e';\n      html += '\u003cdiv class=\"rdbl-item\"\u003e\u003cdiv class=\"rdbl-val\"\u003e' + fmtNum(data.sentenceCount) + '\u003c/div\u003e\u003cdiv class=\"rdbl-lbl\"\u003e文の総数\u003c/div\u003e\u003c/div\u003e';\n      html += '\u003c/div\u003e\u003c/div\u003e';\n    }\n\n    document.getElementById(\"rt-results-body\").innerHTML = html;\n  };\n\n  window.rtSpeedChange = function(val) {\n    cpm = parseInt(val);\n    document.getElementById(\"rt-speed-val\").textContent = cpm + \" 文字/分\";\n    document.querySelectorAll(\"#rt-app .preset-btn\").forEach(function(b) { b.classList.remove(\"active\"); });\n    rtUpdate();\n    rtBookUpdate();\n  };\n\n  window.rtSetSpeed = function(val) {\n    cpm = val;\n    document.getElementById(\"rt-speed\").value = val;\n    document.getElementById(\"rt-speed-val\").textContent = val + \" 文字/分\";\n    document.querySelectorAll(\"#rt-app .preset-btn\").forEach(function(b) {\n      var m = b.textContent.match(/\\d+/);\n      b.classList.toggle(\"active\", m \u0026\u0026 parseInt(m[0]) === val);\n    });\n    rtUpdate();\n    rtBookUpdate();\n  };\n\n  window.rtClear = function() {\n    document.getElementById(\"rt-textarea\").value = \"\";\n    document.getElementById(\"rt-wc-input\").value = \"\";\n    rtUpdate();\n  };\n\n  window.rtBookUpdate = function() {\n    var pages = parseInt(document.getElementById(\"rt-pages\").value);\n    var cpPage = parseInt(document.getElementById(\"rt-wppage\").value) || 600;\n    var el = document.getElementById(\"rt-book-result\");\n    if (!pages || pages \u003c 1) { el.style.display = \"none\"; return; }\n    var totalChars = pages * cpPage;\n    var mins = totalChars / cpm;\n    el.style.display = \"block\";\n    el.innerHTML = \"\u003cstrong\u003e\" + pages + \"ページ\u003c/strong\u003eの本（約\" + fmtNum(totalChars) + \"文字）は、あなたの読書速度（\" + cpm + \"文字/分）で約\u003cstrong\u003e\" + fmtTime(mins) + \"\u003c/strong\u003eかかります。\";\n  };\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv style=\"margin-top:2rem;padding:1.1rem 1.4rem;background:linear-gradient(135deg,#fef3c7 0%,#fffbeb 100%);border:1.5px solid #fde68a;border-radius:12px;display:flex;align-items:center;gap:1rem;flex-wrap:wrap;\"\u003e\n  \u003cdiv style=\"font-size:2rem;flex-shrink:0;\"\u003e📊\u003c/div\u003e\n  \u003cdiv style=\"flex:1;min-width:180px;\"\u003e\n    \u003cdiv style=\"font-size:0.95rem;font-weight:700;color:#92400e;margin-bottom:0.2rem;\"\u003efreee会計でビジネスをもっとスマートに\u003c/div\u003e\n    \u003cdiv style=\"font-size:0.82rem;color:#6b7280;line-height:1.5;\"\u003e確定申告・請求書・経費管理をまとめて自動化。個人事業主・フリーランスに人気のクラウド会計ソフト。\u003c/div\u003e\n  \u003c/div\u003e\n  \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-block;background:#d97706;color:#fff;border-radius:8px;padding:0.5rem 1.2rem;font-size:0.88rem;font-weight:700;text-decoration:none;white-space:nowrap;\"\u003efreeeを無料で試す\u003c/a\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e年齢計算 → \u003ca href=\"https://productivity-works.com/ja/tools/age-calculator/\"\u003e年齢計算ツール\u003c/a\u003e\n\nCase Converter → \u003ca href=\"https://productivity-works.com/ja/tools/case-converter/\"\u003eCase Converterツール\u003c/a\u003e\n\nCharacter Counter → \u003ca href=\"https://productivity-works.com/ja/tools/character-counter/\"\u003eCharacter Counterツール\u003c/a\u003e\n\u003c/p\u003e","title":"読書時間計算ツール"},{"content":"本ページにはアフィリエイトリンクが含まれます。\n副業税金計算機 給与収入と副業収入を入力して、税負担の合計・副業の手取り額を概算します。\n給与収入 年間給与（円） 500万円 副業収入 副業の総収入（円） 50万円 事業経費（円） 0円10万円200万円 申告区分 単身（一般） 配偶者控除あり ひとり親控除あり 予定納税・確定申告の目安 副業収入の課税の仕組み フリーランス・ギグワーク・ネット販売・コンサルティングなどで得た収入は事業所得または雑所得として扱われます。課税される税金は主に2種類です。\n1. 所得税（累進課税） 副業の純利益は給与所得と合算され、所得税の速算表に基づいて課税されます。税率は5%〜45%（復興特別所得税2.1%加算）。\n2. 住民税（一律10%程度） 所得税とは別に、翌年6月から住民税（都道府県民税＋市区町村民税 合計約10%）が追加でかかります。\n税負担を減らす方法 経費を正確に記録する — 自宅の一部（家事按分）・通信費・書籍代・機材費など 青色申告を活用する — 複式帳簿で最大65万円の青色申告特別控除 iDeCo・小規模企業共済 — 自営業者向けの節税積み立て制度を活用 会計ソフトを使う — 自動仕訳と確定申告書の作成を効率化 確定申告が必要なケース 給与収入以外の所得が年間20万円を超える場合、翌年2月16日〜3月15日に確定申告が必要です。\n副業の帳簿管理を自動化したい方へ → freee会計で家計を自動管理 関連ツール\n純資産計算機 老後資産計算機 債務返済計算機 複利計算機 ","permalink":"https://productivity-works.com/ja/tools/side-hustle-tax-calculator/","summary":"\u003cp\u003e\u003cem\u003e本ページにはアフィリエイトリンクが含まれます。\u003c/em\u003e\u003c/p\u003e\n\u003ch1 id=\"副業税金計算機\"\u003e副業税金計算機\u003c/h1\u003e\n\u003cp\u003e給与収入と副業収入を入力して、\u003cstrong\u003e税負担の合計\u003c/strong\u003e・\u003cstrong\u003e副業の手取り額\u003c/strong\u003eを概算します。\u003c/p\u003e\n\u003cdiv id=\"sh-calc\" style=\"max-width:680px;margin:0 auto;font-family:Inter,sans-serif;\"\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:20px;\"\u003e\n\u003cdiv\u003e\n\u003ch3 style=\"margin:0 0 12px;color:#64748b;font-size:14px;text-align:center;\"\u003e給与収入\u003c/h3\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:13px;\"\u003e年間給与（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"w2Salary\" min=\"0\" max=\"20000000\" step=\"100000\" value=\"5000000\" oninput=\"calcSH()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"text-align:center;font-weight:bold;font-size:20px;color:#64748b;\" id=\"w2Val\"\u003e500万円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003ch3 style=\"margin:0 0 12px;color:#2563eb;font-size:14px;text-align:center;\"\u003e副業収入\u003c/h3\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:13px;\"\u003e副業の総収入（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"shRevenue\" min=\"0\" max=\"5000000\" step=\"50000\" value=\"500000\" oninput=\"calcSH()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"text-align:center;font-weight:bold;font-size:20px;color:#2563eb;\" id=\"shRevVal\"\u003e50万円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:13px;\"\u003e事業経費（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"shExpenses\" min=\"0\" max=\"2000000\" step=\"10000\" value=\"100000\" oninput=\"calcSH()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0円\u003c/span\u003e\u003cspan id=\"shExpVal\" style=\"font-weight:bold;font-size:16px;color:#ef4444;\"\u003e10万円\u003c/span\u003e\u003cspan\u003e200万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:13px;\"\u003e申告区分\u003c/label\u003e\n\u003cselect id=\"shFiling\" onchange=\"calcSH()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#fff;\"\u003e\n\u003coption value=\"single\"\u003e単身（一般）\u003c/option\u003e\n\u003coption value=\"married\"\u003e配偶者控除あり\u003c/option\u003e\n\u003coption value=\"hoh\"\u003eひとり親控除あり\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003cdiv id=\"shResult\" style=\"margin-top:20px;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"shBreakdown\" style=\"margin-top:24px;padding:24px;border:2px solid #10b981;border-radius:12px;background:#f0fdf4;\"\u003e\u003c/div\u003e\n\u003cdiv style=\"margin-top:24px;padding:24px;border:2px solid #f59e0b;border-radius:12px;background:#fffbeb;\"\u003e\n\u003ch3 style=\"margin:0 0 12px;color:#92400e;font-size:16px;\"\u003e予定納税・確定申告の目安\u003c/h3\u003e\n\u003cdiv id=\"shQuarterly\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction fmtJP(n){return Math.round(n).toLocaleString('ja-JP');}\n\nfunction calcJPIncomeTax(taxable){\n  // 日本の所得税速算表（2026年度・概算）\n  var brackets=[\n    [1950000,0.05,0],\n    [3300000,0.10,97500],\n    [6950000,0.20,427500],\n    [9000000,0.23,636000],\n    [18000000,0.33,1536000],\n    [40000000,0.40,2796000],\n    [Infinity,0.45,4796000]\n  ];\n  var tax=0;\n  for(var i=0;i\u003cbrackets.length;i++){\n    if(taxable\u003c=brackets[i][0]){\n      tax=taxable*brackets[i][1]-brackets[i][2];\n      break;\n    }\n  }\n  return Math.max(0,tax);\n}\n\nfunction getSalariedDeduction(salary){\n  // 給与所得控除（簡易版）\n  if(salary\u003c=1625000) return 550000;\n  if(salary\u003c=1800000) return salary*0.4-100000;\n  if(salary\u003c=3600000) return salary*0.3+80000;\n  if(salary\u003c=6600000) return salary*0.2+440000;\n  if(salary\u003c=8500000) return salary*0.1+1100000;\n  return 1950000;\n}\n\nfunction getBasicDeduction(){return 480000;}\n\nfunction calcSH(){\n  var w2=+document.getElementById('w2Salary').value;\n  var rev=+document.getElementById('shRevenue').value;\n  var exp=+document.getElementById('shExpenses').value;\n  var filing=document.getElementById('shFiling').value;\n\n  document.getElementById('w2Val').textContent=fmtJP(w2)+'\\u5186';\n  document.getElementById('shRevVal').textContent=fmtJP(rev)+'\\u5186';\n  document.getElementById('shExpVal').textContent=fmtJP(exp)+'\\u5186';\n\n  var netProfit=Math.max(0,rev-exp);\n\n  // 給与所得\n  var salaryIncome=Math.max(0,w2-getSalariedDeduction(w2));\n  // 事業所得（副業）\n  var businessIncome=netProfit;\n\n  // 基礎控除\n  var basicDed=getBasicDeduction();\n  // 配偶者控除（簡易）\n  var spouseDed=filing==='married'?380000:0;\n  // ひとり親控除\n  var hohDed=filing==='hoh'?350000:0;\n\n  // 副業なしの課税所得\n  var taxableNoSH=Math.max(0,salaryIncome-basicDed-spouseDed-hohDed);\n  var taxNoSH=calcJPIncomeTax(taxableNoSH);\n  // 復興特別所得税2.1%\n  var taxNoSHTotal=taxNoSH*1.021;\n\n  // 副業ありの課税所得\n  var taxableWithSH=Math.max(0,salaryIncome+businessIncome-basicDed-spouseDed-hohDed);\n  var taxWithSH=calcJPIncomeTax(taxableWithSH);\n  var taxWithSHTotal=taxWithSH*1.021;\n\n  // 副業分の追加所得税\n  var additionalIncomeTax=taxWithSHTotal-taxNoSHTotal;\n\n  // 住民税（概算10%）\n  var juminzeiBase=Math.max(0,salaryIncome+businessIncome-basicDed-spouseDed-hohDed);\n  var juminzeiBaseNoSH=Math.max(0,salaryIncome-basicDed-spouseDed-hohDed);\n  var additionalJuminzei=(juminzeiBase-juminzeiBaseNoSH)*0.10;\n\n  var totalSHTax=additionalIncomeTax+additionalJuminzei;\n  var effectiveRate=netProfit\u003e0?(totalSHTax/netProfit*100):0;\n  var takeHome=netProfit-totalSHTax;\n\n  var color=takeHome\u003e=0?'#10b981':'#ef4444';\n  var html='\u003cdiv style=\"text-align:center;padding:16px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e';\n  html+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003e\\u526f\\u696d\\u306e\\u624b\\u53d6\\u308a\\u984d\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:36px;font-weight:bold;color:'+color+';\"\u003e\\u00a5'+fmtJP(takeHome)+'\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:14px;color:#64748b;margin-top:4px;\"\u003e\\u4e8b\\u696d\\u6240\\u5f97\\uff08\\u7d14\\u5229\\u76ca\\uff09\\u00a5'+fmtJP(netProfit)+'\\u306e\\u3046\\u3061\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:13px;color:#64748b;margin-top:8px;\"\u003e\\u526f\\u696d\\u6240\\u5f97\\u306b\\u304b\\u304b\\u308b\\u5b9f\\u8cea\\u7a0e\\u7387: \u003cstrong style=\"color:#ef4444;\"\u003e'+effectiveRate.toFixed(1)+'%\u003c/strong\u003e\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n  document.getElementById('shResult').innerHTML=html;\n\n  var bhtml='\u003ch3 style=\"margin:0 0 12px;color:#166534;font-size:16px;\"\u003e\\u7a0e\\u91d1\\u5185\\u8a33\u003c/h3\u003e';\n  bhtml+='\u003ctable style=\"width:100%;border-collapse:collapse;font-size:14px;\"\u003e';\n  bhtml+='\u003ctr style=\"border-bottom:2px solid #10b981;\"\u003e\u003cth style=\"text-align:left;padding:8px;\"\u003e\\u9805\\u76ee\u003c/th\u003e\u003cth style=\"text-align:right;padding:8px;\"\u003e\\u91d1\\u984d\u003c/th\u003e\u003c/tr\u003e';\n\n  var rows=[\n    ['\\u526f\\u696d\\u306e\\u7dcf\\u53ce\\u5165','\\u00a5'+fmtJP(rev)],\n    ['\\u4e8b\\u696d\\u7d4c\\u8cbb','-\\u00a5'+fmtJP(exp)],\n    ['\\u4e8b\\u696d\\u6240\\u5f97\\uff08\\u7d14\\u5229\\u76ca\\uff09','\\u00a5'+fmtJP(netProfit)],\n    ['',''],\n    ['\\u8ffd\\u52a0\\u6240\\u5f97\\u7a0e\\uff08\\u5fa9\\u8208\\u7279\\u5225\\u6240\\u5f97\\u7a0e\\u542b\\uff09','\\u00a5'+fmtJP(Math.round(additionalIncomeTax))],\n    ['\\u8ffd\\u52a0\\u4f4f\\u6c11\\u7a0e\\uff08\\u6982\\u7b97\\uff09','\\u00a5'+fmtJP(Math.round(additionalJuminzei))],\n    ['',''],\n    ['\\u526f\\u696d\\u5206\\u306e\\u7a0e\\u8ca0\\u62c5\\u5408\\u8a08','\\u00a5'+fmtJP(Math.round(totalSHTax))],\n    ['\\u526f\\u696d\\u306e\\u624b\\u53d6\\u308a\\u984d','\\u00a5'+fmtJP(Math.round(takeHome))]\n  ];\n\n  for(var i=0;i\u003crows.length;i++){\n    if(rows[i][0]===''){bhtml+='\u003ctr\u003e\u003ctd colspan=\"2\" style=\"padding:4px;\"\u003e\u003c/td\u003e\u003c/tr\u003e';continue;}\n    var bg=i%2===0?'#fff':'#f0fdf4';\n    var bold=(i===rows.length-1||i===rows.length-2)?'font-weight:bold;':'';\n    bhtml+='\u003ctr style=\"background:'+bg+';'+bold+'\"\u003e';\n    bhtml+='\u003ctd style=\"padding:8px;\"\u003e'+rows[i][0]+'\u003c/td\u003e';\n    bhtml+='\u003ctd style=\"padding:8px;text-align:right;\"\u003e'+rows[i][1]+'\u003c/td\u003e';\n    bhtml+='\u003c/tr\u003e';\n  }\n  bhtml+='\u003c/table\u003e';\n  document.getElementById('shBreakdown').innerHTML=bhtml;\n\n  // 確定申告・予定納税目安\n  var quarterly=Math.round(totalSHTax/4);\n  var qhtml='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:8px;text-align:center;\"\u003e';\n  var periods=['\\u7b2c1\\u671f\\uff087\\u6708\\uff09','\\u7b2c2\\u671f\\uff0811\\u6708\\uff09','\\u78ba\\u5b9a\\u7533\\u544a\\uff083\\u6708\\uff09','\\u4f59\\u5104\\uff083\\u6708\\uff09'];\n  for(var i=0;i\u003c4;i++){\n    qhtml+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;\"\u003e';\n    qhtml+='\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e'+periods[i]+'\u003c/div\u003e';\n    qhtml+='\u003cdiv style=\"font-size:18px;font-weight:bold;color:#92400e;\"\u003e\\u00a5'+fmtJP(quarterly)+'\u003c/div\u003e';\n    qhtml+='\u003c/div\u003e';\n  }\n  qhtml+='\u003c/div\u003e';\n  qhtml+='\u003cdiv style=\"margin-top:12px;font-size:12px;color:#92400e;text-align:center;\"\u003e\\u526f\\u696d\\u6240\\u5f97\\u304c20\\u4e07\\u5186\\u8d85\\u306e\\u5834\\u5408\\u306f\\u78ba\\u5b9a\\u7533\\u544a\\u304c\\u5fc5\\u8981\\u3067\\u3059\\u3002\\u4e88\\u5b9a\\u7d0d\\u7a0e\\u306f\\u524d\\u5e74\\u5ea6\\u7a0e\\u984d\\u304c15\\u4e07\\u5186\\u4ee5\\u4e0a\\u306e\\u5834\\u5408\\u306b\\u767a\\u751f\\u3057\\u307e\\u3059\\u3002\u003c/div\u003e';\n  document.getElementById('shQuarterly').innerHTML=qhtml;\n}\n\ndocument.addEventListener('DOMContentLoaded',function(){calcSH();});\ncalcSH();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"副業収入の課税の仕組み\"\u003e副業収入の課税の仕組み\u003c/h2\u003e\n\u003cp\u003eフリーランス・ギグワーク・ネット販売・コンサルティングなどで得た収入は\u003cstrong\u003e事業所得または雑所得\u003c/strong\u003eとして扱われます。課税される税金は主に2種類です。\u003c/p\u003e","title":"副業税金計算機 | 所得税・住民税の簡単シミュレーター（無料）"},{"content":" 録画モード 画面のみ カメラのみ 画面＋カメラ 音声設定 システム音声 マイク プレビュー 録画を開始すると\nここにプレビューが表示されます 00:00 操作 録画開始 一時停止 停止 録画データ WebMでダウンロード 新しい録画を開始 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → ホワイトボードに描画 → ホワイトボードお絵かきツール ドット絵を作成 → ドット絵エディター ダミー画像を作成 → プレースホルダー画像生成ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/screen-recorder/","summary":"\u003cdiv id=\"sr-app\"\u003e\n\u003cstyle\u003e\n#sr-app *,\n#sr-app *::before,\n#sr-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#sr-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  color: #1e293b;\n  max-width: 720px;\n  margin: 0 auto;\n  padding: 16px 0;\n}\n#sr-app h2 {\n  font-size: 20px;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 16px;\n}\n#sr-app .sr-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n  margin-bottom: 16px;\n}\n#sr-app .sr-section-title {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  margin-bottom: 12px;\n}\n#sr-app .sr-radio-group,\n#sr-app .sr-toggle-group {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n#sr-app .sr-radio-label,\n#sr-app .sr-toggle-label {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 8px 14px;\n  background: #fff;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  cursor: pointer;\n  font-size: 14px;\n  color: #334155;\n  transition: border-color 0.15s, background 0.15s, color 0.15s;\n  user-select: none;\n}\n#sr-app .sr-radio-label:hover,\n#sr-app .sr-toggle-label:hover {\n  border-color: #94a3b8;\n  background: #f1f5f9;\n}\n#sr-app .sr-radio-label input,\n#sr-app .sr-toggle-label input {\n  accent-color: #475569;\n  width: 15px;\n  height: 15px;\n}\n#sr-app .sr-radio-label.selected,\n#sr-app .sr-toggle-label.active {\n  background: #1e293b;\n  border-color: #1e293b;\n  color: #f8fafc;\n}\n#sr-app .sr-radio-label.selected input,\n#sr-app .sr-toggle-label.active input {\n  accent-color: #94a3b8;\n}\n\u003cp\u003e/* Preview area */\n#sr-app .sr-preview-area {\ndisplay: flex;\nflex-direction: column;\ngap: 12px;\n}\n#sr-app .sr-video-wrap {\nposition: relative;\nbackground: #0f172a;\nborder-radius: 10px;\noverflow: hidden;\naspect-ratio: 16 / 9;\ndisplay: flex;\nalign-items: center;\njustify-content: center;\n}\n#sr-app .sr-video-placeholder {\ncolor: #475569;\nfont-size: 14px;\ntext-align: center;\npadding: 20px;\nline-height: 1.6;\n}\n#sr-app video {\nwidth: 100%;\nheight: 100%;\nobject-fit: contain;\ndisplay: none;\n}\n#sr-app video.active {\ndisplay: block;\n}\n#sr-app .sr-pip-wrap {\nposition: absolute;\nbottom: 10px;\nright: 10px;\nwidth: 140px;\nheight: 79px;\nborder-radius: 6px;\noverflow: hidden;\nborder: 2px solid #475569;\nbackground: #0f172a;\ndisplay: none;\n}\n#sr-app .sr-pip-wrap video {\ndisplay: block;\nwidth: 100%;\nheight: 100%;\nobject-fit: cover;\n}\n#sr-app .sr-pip-wrap.active {\ndisplay: block;\n}\u003c/p\u003e","title":"画面録画ツール"},{"content":"25分の集中と5分の休憩を繰り返す「ポモドーロ・テクニック」を、ブラウザだけで手軽に実践できるタイマーです。作業時間・休憩時間のカスタマイズ、音声通知、セッション記録に対応し、会員登録なしで今すぐ使えます。\nクラシック（25/5） ディープワーク（50/10） スプリント（15/3） 作業 小休憩 大休憩 25:00 作業中 スタート リセット 次へ \u0026#8594; ○○○○ セッション: 1 / 4 本日の集中時間: 0分 設定 作業時間（分） 小休憩（分） 大休憩（分） 大休憩までのセッション数 フェーズ終了後に自動スタート 設定を適用 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → タイピング速度を測定 → タイピング速度テスト 家計を見直す → 50/30/20 家計バランス計算 時差を計算 → タイムゾーン変換ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 在宅ワーク 始め方【2026年版】主婦・ママが月3万〜10万円稼ぐロードマップ ChatGPTを仕事で使う具体的な活用法10選【2026年最新版】 医療事務向けChatGPT活用術 業務効率化10選 ","permalink":"https://productivity-works.com/ja/tools/pomodoro-timer/","summary":"\u003cp\u003e25分の集中と5分の休憩を繰り返す「ポモドーロ・テクニック」を、ブラウザだけで手軽に実践できるタイマーです。作業時間・休憩時間のカスタマイズ、音声通知、セッション記録に対応し、会員登録なしで今すぐ使えます。\u003c/p\u003e\n\u003cdiv id=\"pm-app\"\u003e\n\u003cstyle\u003e\n#pm-app {\n  font-family: system-ui, -apple-system, sans-serif;\n  max-width: 600px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n\n#pm-app * {\n  box-sizing: border-box;\n}\n\n/* Preset buttons */\n#pm-app .pm-presets {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n  margin-bottom: 24px;\n}\n\n#pm-app .pm-preset-btn {\n  padding: 6px 14px;\n  border: 1.5px solid #94a3b8;\n  border-radius: 20px;\n  background: #fff;\n  color: #475569;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all .18s;\n}\n\n#pm-app .pm-preset-btn:hover,\n#pm-app .pm-preset-btn.active {\n  background: #1e293b;\n  border-color: #1e293b;\n  color: #fff;\n}\n\n/* Phase tabs */\n#pm-app .pm-phase-tabs {\n  display: flex;\n  gap: 6px;\n  justify-content: center;\n  margin-bottom: 20px;\n}\n\n#pm-app .pm-phase-tab {\n  padding: 5px 16px;\n  border-radius: 20px;\n  border: none;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  background: #e2e8f0;\n  color: #64748b;\n  transition: all .18s;\n}\n\n#pm-app .pm-phase-tab.active {\n  background: #0f172a;\n  color: #fff;\n}\n\n/* Circular timer */\n#pm-app .pm-timer-wrap {\n  position: relative;\n  width: 240px;\n  height: 240px;\n  margin: 0 auto 24px;\n}\n\n#pm-app .pm-ring-svg {\n  width: 240px;\n  height: 240px;\n  transform: rotate(-90deg);\n}\n\n#pm-app .pm-ring-bg {\n  fill: none;\n  stroke: #e2e8f0;\n  stroke-width: 10;\n}\n\n#pm-app .pm-ring-progress {\n  fill: none;\n  stroke: #0ea5e9;\n  stroke-width: 10;\n  stroke-linecap: round;\n  transition: stroke-dashoffset .8s linear, stroke .4s;\n}\n\n#pm-app .pm-timer-center {\n  position: absolute;\n  top: 0; left: 0; right: 0; bottom: 0;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n}\n\n#pm-app .pm-time-display {\n  font-size: 54px;\n  font-weight: 700;\n  letter-spacing: -2px;\n  color: #0f172a;\n  line-height: 1;\n}\n\n#pm-app .pm-phase-label {\n  font-size: 14px;\n  font-weight: 600;\n  color: #64748b;\n  margin-top: 6px;\n}\n\n/* Controls */\n#pm-app .pm-controls {\n  display: flex;\n  gap: 12px;\n  justify-content: center;\n  margin-bottom: 24px;\n  flex-wrap: wrap;\n}\n\n#pm-app .pm-btn {\n  padding: 10px 22px;\n  border-radius: 8px;\n  border: none;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: all .18s;\n}\n\n#pm-app .pm-btn-primary {\n  background: #0ea5e9;\n  color: #fff;\n  min-width: 110px;\n}\n\n#pm-app .pm-btn-primary:hover {\n  background: #0284c7;\n}\n\n#pm-app .pm-btn-secondary {\n  background: #e2e8f0;\n  color: #475569;\n}\n\n#pm-app .pm-btn-secondary:hover {\n  background: #cbd5e1;\n}\n\n#pm-app .pm-btn-skip {\n  background: #f1f5f9;\n  color: #64748b;\n  font-size: 13px;\n  padding: 10px 16px;\n}\n\n#pm-app .pm-btn-skip:hover {\n  background: #e2e8f0;\n}\n\n/* Session dots */\n#pm-app .pm-sessions {\n  text-align: center;\n  margin-bottom: 20px;\n}\n\n#pm-app .pm-session-dots {\n  font-size: 22px;\n  letter-spacing: 4px;\n  margin-bottom: 4px;\n}\n\n#pm-app .pm-session-info {\n  font-size: 13px;\n  color: #64748b;\n  display: flex;\n  justify-content: center;\n  gap: 20px;\n  flex-wrap: wrap;\n}\n\n#pm-app .pm-session-info span {\n  font-weight: 600;\n  color: #334155;\n}\n\n/* Settings */\n#pm-app .pm-settings-toggle {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  background: none;\n  border: none;\n  font-size: 14px;\n  font-weight: 600;\n  color: #64748b;\n  cursor: pointer;\n  margin: 0 auto 12px;\n  padding: 6px 12px;\n  border-radius: 6px;\n  transition: background .18s;\n}\n\n#pm-app .pm-settings-toggle:hover {\n  background: #f1f5f9;\n}\n\n#pm-app .pm-settings-toggle .pm-chevron {\n  transition: transform .25s;\n}\n\n#pm-app .pm-settings-toggle.open .pm-chevron {\n  transform: rotate(180deg);\n}\n\n#pm-app .pm-settings-panel {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 18px 20px;\n  margin-bottom: 20px;\n  display: none;\n}\n\n#pm-app .pm-settings-panel.open {\n  display: block;\n}\n\n#pm-app .pm-settings-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n}\n\n@media (max-width: 420px) {\n  #pm-app .pm-settings-grid {\n    grid-template-columns: 1fr;\n  }\n  #pm-app .pm-timer-wrap,\n  #pm-app .pm-ring-svg {\n    width: 200px;\n    height: 200px;\n  }\n  #pm-app .pm-time-display {\n    font-size: 44px;\n  }\n}\n\n#pm-app .pm-field {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n\n#pm-app .pm-field label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: .5px;\n}\n\n#pm-app .pm-field input[type=\"number\"] {\n  padding: 8px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 15px;\n  font-weight: 600;\n  color: #1e293b;\n  background: #fff;\n  width: 100%;\n  outline: none;\n  transition: border-color .18s;\n}\n\n#pm-app .pm-field input[type=\"number\"]:focus {\n  border-color: #0ea5e9;\n}\n\n#pm-app .pm-field-full {\n  grid-column: 1 / -1;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n}\n\n#pm-app .pm-toggle-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #334155;\n}\n\n#pm-app .pm-toggle {\n  position: relative;\n  width: 40px;\n  height: 22px;\n  flex-shrink: 0;\n}\n\n#pm-app .pm-toggle input {\n  opacity: 0;\n  width: 0;\n  height: 0;\n}\n\n#pm-app .pm-toggle-slider {\n  position: absolute;\n  top: 0; left: 0; right: 0; bottom: 0;\n  background: #cbd5e1;\n  border-radius: 11px;\n  cursor: pointer;\n  transition: background .2s;\n}\n\n#pm-app .pm-toggle-slider::before {\n  content: '';\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 3px;\n  top: 3px;\n  background: #fff;\n  border-radius: 50%;\n  transition: transform .2s;\n}\n\n#pm-app .pm-toggle input:checked + .pm-toggle-slider {\n  background: #0ea5e9;\n}\n\n#pm-app .pm-toggle input:checked + .pm-toggle-slider::before {\n  transform: translateX(18px);\n}\n\n#pm-app .pm-apply-btn {\n  margin-top: 14px;\n  width: 100%;\n  padding: 9px;\n  background: #0f172a;\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background .18s;\n}\n\n#pm-app .pm-apply-btn:hover {\n  background: #1e293b;\n}\n\u003c/style\u003e\n\u003c!-- Preset buttons --\u003e\n\u003cdiv class=\"pm-presets\"\u003e\n  \u003cbutton class=\"pm-preset-btn active\" data-work=\"25\" data-short=\"5\" data-long=\"15\" data-sessions=\"4\"\u003eクラシック（25/5）\u003c/button\u003e\n  \u003cbutton class=\"pm-preset-btn\" data-work=\"50\" data-short=\"10\" data-long=\"30\" data-sessions=\"4\"\u003eディープワーク（50/10）\u003c/button\u003e\n  \u003cbutton class=\"pm-preset-btn\" data-work=\"15\" data-short=\"3\" data-long=\"15\" data-sessions=\"4\"\u003eスプリント（15/3）\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- Phase indicator tabs --\u003e\n\u003cdiv class=\"pm-phase-tabs\"\u003e\n  \u003cbutton class=\"pm-phase-tab active\" id=\"pm-tab-work\"\u003e作業\u003c/button\u003e\n  \u003cbutton class=\"pm-phase-tab\" id=\"pm-tab-short\"\u003e小休憩\u003c/button\u003e\n  \u003cbutton class=\"pm-phase-tab\" id=\"pm-tab-long\"\u003e大休憩\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- Circular timer --\u003e\n\u003cdiv class=\"pm-timer-wrap\"\u003e\n  \u003csvg class=\"pm-ring-svg\" viewBox=\"0 0 240 240\"\u003e\n    \u003ccircle class=\"pm-ring-bg\" cx=\"120\" cy=\"120\" r=\"108\"/\u003e\n    \u003ccircle class=\"pm-ring-progress\" id=\"pm-ring\" cx=\"120\" cy=\"120\" r=\"108\"/\u003e\n  \u003c/svg\u003e\n  \u003cdiv class=\"pm-timer-center\"\u003e\n    \u003cdiv class=\"pm-time-display\" id=\"pm-display\"\u003e25:00\u003c/div\u003e\n    \u003cdiv class=\"pm-phase-label\" id=\"pm-phase-text\"\u003e作業中\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Controls --\u003e\n\u003cdiv class=\"pm-controls\"\u003e\n  \u003cbutton class=\"pm-btn pm-btn-primary\" id=\"pm-start-btn\"\u003eスタート\u003c/button\u003e\n  \u003cbutton class=\"pm-btn pm-btn-secondary\" id=\"pm-reset-btn\"\u003eリセット\u003c/button\u003e\n  \u003cbutton class=\"pm-btn pm-btn-skip\" id=\"pm-skip-btn\"\u003e次へ \u0026#8594;\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- Session tracker --\u003e\n\u003cdiv class=\"pm-sessions\"\u003e\n  \u003cdiv class=\"pm-session-dots\" id=\"pm-dots\"\u003e○○○○\u003c/div\u003e\n  \u003cdiv class=\"pm-session-info\"\u003e\n    \u003cdiv\u003eセッション: \u003cspan id=\"pm-session-num\"\u003e1 / 4\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv\u003e本日の集中時間: \u003cspan id=\"pm-focus-total\"\u003e0分\u003c/span\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Settings toggle --\u003e\n\u003cbutton class=\"pm-settings-toggle\" id=\"pm-settings-btn\"\u003e\n  \u003csvg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\n    \u003ccircle cx=\"12\" cy=\"12\" r=\"3\"/\u003e\n    \u003cpath d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\"/\u003e\n  \u003c/svg\u003e\n  設定\n  \u003csvg class=\"pm-chevron\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\n    \u003cpolyline points=\"6 9 12 15 18 9\"/\u003e\n  \u003c/svg\u003e\n\u003c/button\u003e\n\u003c!-- Settings panel --\u003e\n\u003cdiv class=\"pm-settings-panel\" id=\"pm-settings-panel\"\u003e\n  \u003cdiv class=\"pm-settings-grid\"\u003e\n    \u003cdiv class=\"pm-field\"\u003e\n      \u003clabel\u003e作業時間（分）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"pm-set-work\" min=\"1\" max=\"120\" value=\"25\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pm-field\"\u003e\n      \u003clabel\u003e小休憩（分）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"pm-set-short\" min=\"1\" max=\"60\" value=\"5\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pm-field\"\u003e\n      \u003clabel\u003e大休憩（分）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"pm-set-long\" min=\"1\" max=\"60\" value=\"15\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pm-field\"\u003e\n      \u003clabel\u003e大休憩までのセッション数\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"pm-set-sessions\" min=\"1\" max=\"10\" value=\"4\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pm-field-full\"\u003e\n      \u003cspan class=\"pm-toggle-label\"\u003eフェーズ終了後に自動スタート\u003c/span\u003e\n      \u003clabel class=\"pm-toggle\"\u003e\n        \u003cinput type=\"checkbox\" id=\"pm-set-auto\"\u003e\n        \u003cspan class=\"pm-toggle-slider\"\u003e\u003c/span\u003e\n      \u003c/label\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"pm-apply-btn\" id=\"pm-apply-btn\"\u003e設定を適用\u003c/button\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  // --- Config \u0026 State ---\n  var cfg = { work: 25, short: 5, long: 15, sessions: 4, auto: false };\n\n  var phaseNames   = { work: '作業中', short: '小休憩', long: '大休憩' };\n  var phaseColors  = { work: '#0ea5e9', short: '#10b981', long: '#8b5cf6' };\n\n  var state = {\n    phase: 'work',\n    sessionsDone: 0,\n    secondsLeft: cfg.work * 60,\n    totalSeconds: cfg.work * 60,\n    running: false,\n    timer: null,\n    focusMinutesToday: 0\n  };\n\n  // SVG ring geometry\n  var R    = 108;\n  var CIRC = 2 * Math.PI * R;\n\n  // --- DOM refs ---\n  var display       = document.getElementById('pm-display');\n  var phaseText     = document.getElementById('pm-phase-text');\n  var ring          = document.getElementById('pm-ring');\n  var startBtn      = document.getElementById('pm-start-btn');\n  var resetBtn      = document.getElementById('pm-reset-btn');\n  var skipBtn       = document.getElementById('pm-skip-btn');\n  var dotsEl        = document.getElementById('pm-dots');\n  var sessionNumEl  = document.getElementById('pm-session-num');\n  var focusTotalEl  = document.getElementById('pm-focus-total');\n  var settingsBtn   = document.getElementById('pm-settings-btn');\n  var settingsPanel = document.getElementById('pm-settings-panel');\n  var applyBtn      = document.getElementById('pm-apply-btn');\n  var tabWork       = document.getElementById('pm-tab-work');\n  var tabShort      = document.getElementById('pm-tab-short');\n  var tabLong       = document.getElementById('pm-tab-long');\n\n  // Init ring\n  ring.style.strokeDasharray  = CIRC;\n  ring.style.strokeDashoffset = 0;\n\n  // --- Audio (Web Audio API) ---\n  function beep(type) {\n    try {\n      var ctx  = new (window.AudioContext || window.webkitAudioContext)();\n      var osc  = ctx.createOscillator();\n      var gain = ctx.createGain();\n      osc.connect(gain);\n      gain.connect(ctx.destination);\n      if (type === 'work') {\n        // Two-tone descending: session starting\n        osc.frequency.setValueAtTime(880, ctx.currentTime);\n        osc.frequency.setValueAtTime(660, ctx.currentTime + 0.15);\n        gain.gain.setValueAtTime(0.3, ctx.currentTime);\n        gain.gain.exponentialRampToValueAtTime(0.001, ctx.currentTime + 0.5);\n        osc.start(ctx.currentTime);\n        osc.stop(ctx.currentTime + 0.5);\n      } else {\n        // Three-tone ascending: break starting\n        osc.frequency.setValueAtTime(440, ctx.currentTime);\n        osc.frequency.setValueAtTime(550, ctx.currentTime + 0.2);\n        osc.frequency.setValueAtTime(660, ctx.currentTime + 0.4);\n        gain.gain.setValueAtTime(0.25, ctx.currentTime);\n        gain.gain.exponentialRampToValueAtTime(0.001, ctx.currentTime + 0.7);\n        osc.start(ctx.currentTime);\n        osc.stop(ctx.currentTime + 0.7);\n      }\n    } catch(e) {}\n  }\n\n  // --- Helpers ---\n  function pad(n) { return n \u003c 10 ? '0' + n : '' + n; }\n\n  // --- Render ---\n  function render() {\n    var m = Math.floor(state.secondsLeft / 60);\n    var s = state.secondsLeft % 60;\n    var timeStr = pad(m) + ':' + pad(s);\n\n    display.textContent   = timeStr;\n    phaseText.textContent = phaseNames[state.phase];\n    document.title        = timeStr + ' | ポモドーロタイマー';\n\n    // Ring progress\n    var progress = state.totalSeconds \u003e 0 ? state.secondsLeft / state.totalSeconds : 0;\n    ring.style.strokeDashoffset = CIRC * (1 - progress);\n    ring.style.stroke           = phaseColors[state.phase];\n\n    // Start/pause button label\n    startBtn.textContent = state.running ? '一時停止' : 'スタート';\n\n    // Phase tabs\n    tabWork.classList.toggle('active',  state.phase === 'work');\n    tabShort.classList.toggle('active', state.phase === 'short');\n    tabLong.classList.toggle('active',  state.phase === 'long');\n\n    // Session dots (●○)\n    var total = cfg.sessions;\n    var done  = state.sessionsDone;\n    var dots  = '';\n    for (var i = 0; i \u003c total; i++) {\n      dots += i \u003c done ? '●' : '○';\n    }\n    dotsEl.textContent = dots;\n\n    // Session number label\n    var cur = state.phase === 'work'\n      ? (state.sessionsDone + 1)\n      : state.sessionsDone;\n    sessionNumEl.textContent = Math.min(cur, cfg.sessions) + ' / ' + cfg.sessions;\n\n    // Today's focus time\n    focusTotalEl.textContent = state.focusMinutesToday + '分';\n  }\n\n  // --- Phase transition ---\n  function goNextPhase(skipForward) {\n    clearInterval(state.timer);\n    state.running = false;\n\n    var prev = state.phase;\n\n    // Count the completed work session (only when not manually skipping from idle)\n    if (prev === 'work' \u0026\u0026 !skipForward) {\n      state.sessionsDone = Math.min(state.sessionsDone + 1, cfg.sessions);\n      state.focusMinutesToday += cfg.work;\n    }\n\n    // Determine next phase\n    if (prev === 'work') {\n      if (state.sessionsDone \u003e= cfg.sessions) {\n        state.phase        = 'long';\n        state.sessionsDone = 0;\n      } else {\n        state.phase = 'short';\n      }\n    } else {\n      state.phase = 'work';\n    }\n\n    // Set new duration\n    var dur = cfg[state.phase === 'work' ? 'work' : state.phase === 'short' ? 'short' : 'long'];\n    state.secondsLeft  = dur * 60;\n    state.totalSeconds = dur * 60;\n\n    // Sound\n    if (!skipForward) {\n      beep(state.phase === 'work' ? 'work' : 'break');\n    }\n\n    if (cfg.auto) {\n      startTimer();\n    } else {\n      render();\n    }\n  }\n\n  // --- Timer controls ---\n  function startTimer() {\n    if (state.running) return;\n    state.running = true;\n    render();\n    state.timer = setInterval(function() {\n      state.secondsLeft--;\n      if (state.secondsLeft \u003c= 0) {\n        state.secondsLeft = 0;\n        render();\n        goNextPhase(false);\n        return;\n      }\n      render();\n    }, 1000);\n  }\n\n  function pauseTimer() {\n    clearInterval(state.timer);\n    state.running = false;\n    render();\n  }\n\n  function resetTimer() {\n    clearInterval(state.timer);\n    state.running      = false;\n    state.phase        = 'work';\n    state.sessionsDone = 0;\n    state.secondsLeft  = cfg.work * 60;\n    state.totalSeconds = cfg.work * 60;\n    render();\n  }\n\n  // --- Button listeners ---\n  startBtn.addEventListener('click', function() {\n    if (state.running) { pauseTimer(); } else { startTimer(); }\n  });\n\n  resetBtn.addEventListener('click', resetTimer);\n\n  skipBtn.addEventListener('click', function() { goNextPhase(true); });\n\n  // Phase tabs (manual switch when paused)\n  tabWork.addEventListener('click', function() {\n    if (state.running) return;\n    state.phase        = 'work';\n    state.secondsLeft  = cfg.work * 60;\n    state.totalSeconds = cfg.work * 60;\n    render();\n  });\n\n  tabShort.addEventListener('click', function() {\n    if (state.running) return;\n    state.phase        = 'short';\n    state.secondsLeft  = cfg.short * 60;\n    state.totalSeconds = cfg.short * 60;\n    render();\n  });\n\n  tabLong.addEventListener('click', function() {\n    if (state.running) return;\n    state.phase        = 'long';\n    state.secondsLeft  = cfg.long * 60;\n    state.totalSeconds = cfg.long * 60;\n    render();\n  });\n\n  // --- Settings panel ---\n  settingsBtn.addEventListener('click', function() {\n    settingsBtn.classList.toggle('open');\n    settingsPanel.classList.toggle('open');\n  });\n\n  applyBtn.addEventListener('click', function() {\n    var w  = parseInt(document.getElementById('pm-set-work').value,     10);\n    var sh = parseInt(document.getElementById('pm-set-short').value,    10);\n    var lo = parseInt(document.getElementById('pm-set-long').value,     10);\n    var se = parseInt(document.getElementById('pm-set-sessions').value, 10);\n    var au = document.getElementById('pm-set-auto').checked;\n\n    cfg.work     = w  \u003e 0 ? w  : 25;\n    cfg.short    = sh \u003e 0 ? sh : 5;\n    cfg.long     = lo \u003e 0 ? lo : 15;\n    cfg.sessions = se \u003e 0 ? se : 4;\n    cfg.auto     = au;\n\n    resetTimer();\n    settingsBtn.classList.remove('open');\n    settingsPanel.classList.remove('open');\n  });\n\n  // --- Presets ---\n  var presetBtns = document.querySelectorAll('#pm-app .pm-preset-btn');\n  for (var pi = 0; pi \u003c presetBtns.length; pi++) {\n    (function(btn) {\n      btn.addEventListener('click', function() {\n        for (var i = 0; i \u003c presetBtns.length; i++) {\n          presetBtns[i].classList.remove('active');\n        }\n        btn.classList.add('active');\n\n        cfg.work     = parseInt(btn.getAttribute('data-work'),     10);\n        cfg.short    = parseInt(btn.getAttribute('data-short'),    10);\n        cfg.long     = parseInt(btn.getAttribute('data-long'),     10);\n        cfg.sessions = parseInt(btn.getAttribute('data-sessions'), 10);\n\n        document.getElementById('pm-set-work').value     = cfg.work;\n        document.getElementById('pm-set-short').value    = cfg.short;\n        document.getElementById('pm-set-long').value     = cfg.long;\n        document.getElementById('pm-set-sessions').value = cfg.sessions;\n\n        resetTimer();\n      });\n    })(presetBtns[pi]);\n  }\n\n  // --- Init ---\n  render();\n})();\n\u003c/script\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"ポモドーロタイマー｜25分集中+5分休憩で生産性UP【無料・ブラウザ対応】"},{"content":" 取引を追加 日付 種別 + 収入 - 支出 内容 金額（円） カテゴリ 食費 交通費 住居費 娯楽 医療・健康 教育 その他 追加する 月次サマリー 収入合計 ¥0 支出合計 ¥0 収支残高 ¥0 取引一覧 月を選択 カテゴリ すべて 食費 交通費 住居費 娯楽 医療・健康 教育 その他 種別 すべて 収入 支出 CSV出力 日付 内容 カテゴリ 種別 金額 取引を編集 日付 種別 + 収入 - 支出 内容 金額（円） カテゴリ 食費 交通費 住居費 娯楽 医療・健康 教育 その他 キャンセル 保存する 事業の経費管理はfreeeでかんたんに\nfreee会計なら、交際費・交通費などの経費精算もクラウドで自動化。確定申告もラクラク。無料トライアル実施中。\nfreeeを無料で試す → 関連ツール 予算プランナー — 50/30/20ルールで月の予算を自動配分 割り勘計算ツール — 飲み会・食事の会計を均等・傾斜配分 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 副業の確定申告やり方2026年版【freee・マネーフォワード対応】 フリーランス確定申告 AIで経費仕訳を自動化する具体的手順 副業フリーランスがfreeeで青色申告65万控除を最速で取る方法 ","permalink":"https://productivity-works.com/ja/tools/expense-tracker/","summary":"\u003cdiv id=\"et-app\"\u003e\n\u003cstyle\u003e\n#et-app {\n  font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif;\n  max-width: 760px;\n  margin: 0 auto;\n  color: #1e293b;\n  box-sizing: border-box;\n}\n#et-app *, #et-app *::before, #et-app *::after {\n  box-sizing: border-box;\n}\n#et-app h2 {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #334155;\n  margin: 24px 0 10px;\n  padding-bottom: 6px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#et-app .et-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 18px 20px;\n  margin-bottom: 16px;\n}\n#et-app label {\n  display: block;\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  margin-bottom: 4px;\n  letter-spacing: 0.03em;\n}\n#et-app input, #et-app select {\n  width: 100%;\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 14px;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.15s;\n  font-family: inherit;\n}\n#et-app input:focus, #et-app select:focus {\n  border-color: #3b82f6;\n}\n#et-app .et-grid { display: grid; gap: 12px; }\n#et-app .et-grid-2 { grid-template-columns: 1fr 1fr; }\n#et-app .et-grid-3 { grid-template-columns: 1fr 1fr 1fr; }\n#et-app .et-grid-4 { grid-template-columns: 1fr 1fr 1fr 1fr; }\n@media (max-width: 560px) {\n  #et-app .et-grid-2,\n  #et-app .et-grid-3,\n  #et-app .et-grid-4 { grid-template-columns: 1fr; }\n}\n#et-app .et-type-toggle {\n  display: flex;\n  border-radius: 8px;\n  overflow: hidden;\n  border: 1.5px solid #cbd5e1;\n  width: 100%;\n}\n#et-app .et-type-toggle button {\n  flex: 1;\n  padding: 9px;\n  border: none;\n  background: #fff;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n  color: #64748b;\n  font-family: inherit;\n}\n#et-app .et-type-toggle button.active-income { background: #22c55e; color: #fff; }\n#et-app .et-type-toggle button.active-expense { background: #ef4444; color: #fff; }\n#et-app .et-btn {\n  display: inline-block;\n  padding: 10px 22px;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.15s;\n  font-family: inherit;\n}\n#et-app .et-btn:hover { opacity: 0.85; }\n#et-app .et-btn-primary { background: #3b82f6; color: #fff; }\n#et-app .et-btn-sm {\n  padding: 5px 12px;\n  font-size: 12px;\n  border-radius: 6px;\n  font-weight: 700;\n  border: none;\n  cursor: pointer;\n  font-family: inherit;\n}\n#et-app .et-btn-delete { background: #fee2e2; color: #dc2626; }\n#et-app .et-btn-edit { background: #eff6ff; color: #2563eb; }\n#et-app .et-btn-export { background: #f0fdf4; color: #16a34a; border: 1.5px solid #bbf7d0; }\n\n/* Summary */\n#et-app .et-summary-bar {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  gap: 12px;\n  margin-bottom: 16px;\n}\n#et-app .et-summary-card {\n  border-radius: 10px;\n  padding: 14px 16px;\n  text-align: center;\n}\n#et-app .et-summary-card .et-s-label {\n  font-size: 11px;\n  font-weight: 700;\n  margin-bottom: 4px;\n}\n#et-app .et-summary-card .et-s-value {\n  font-size: 1.3rem;\n  font-weight: 800;\n}\n#et-app .et-income-card { background: #f0fdf4; border: 1.5px solid #bbf7d0; }\n#et-app .et-income-card .et-s-label { color: #16a34a; }\n#et-app .et-income-card .et-s-value { color: #15803d; }\n#et-app .et-expense-card { background: #fef2f2; border: 1.5px solid #fecaca; }\n#et-app .et-expense-card .et-s-label { color: #dc2626; }\n#et-app .et-expense-card .et-s-value { color: #b91c1c; }\n#et-app .et-balance-card { background: #eff6ff; border: 1.5px solid #bfdbfe; }\n#et-app .et-balance-card .et-s-label { color: #2563eb; }\n#et-app .et-balance-card .et-s-value { color: #1d4ed8; }\n#et-app .et-balance-neg { background: #fef9c3; border-color: #fde68a; }\n#et-app .et-balance-neg .et-s-label { color: #b45309; }\n#et-app .et-balance-neg .et-s-value { color: #92400e; }\n\n/* Filter */\n#et-app .et-filter-row {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  margin-bottom: 14px;\n}\n#et-app .et-filter-row \u003e div { flex: 1; min-width: 120px; }\n\n/* Table */\n#et-app .et-table-wrap { overflow-x: auto; }\n#et-app table { width: 100%; border-collapse: collapse; font-size: 13.5px; }\n#et-app thead th {\n  background: #f1f5f9;\n  padding: 9px 12px;\n  text-align: left;\n  font-size: 11px;\n  color: #64748b;\n  font-weight: 700;\n  white-space: nowrap;\n}\n#et-app tbody tr { border-bottom: 1px solid #f1f5f9; transition: background 0.1s; }\n#et-app tbody tr:hover { background: #f8fafc; }\n#et-app tbody td { padding: 9px 12px; vertical-align: middle; }\n#et-app .et-badge {\n  display: inline-block;\n  padding: 2px 9px;\n  border-radius: 99px;\n  font-size: 11px;\n  font-weight: 700;\n}\n#et-app .et-badge-income { background: #dcfce7; color: #16a34a; }\n#et-app .et-badge-expense { background: #fee2e2; color: #dc2626; }\n#et-app .et-amount-income { color: #16a34a; font-weight: 700; }\n#et-app .et-amount-expense { color: #dc2626; font-weight: 700; }\n#et-app .et-empty { text-align: center; padding: 32px; color: #94a3b8; font-size: 14px; }\n\n/* Chart */\n#et-app .et-chart-wrap { display: flex; gap: 24px; align-items: center; flex-wrap: wrap; }\n#et-app canvas { display: block; }\n#et-app .et-legend { flex: 1; min-width: 180px; }\n#et-app .et-legend-item { display: flex; align-items: center; gap: 8px; margin-bottom: 7px; font-size: 13px; }\n#et-app .et-legend-dot { width: 12px; height: 12px; border-radius: 3px; flex-shrink: 0; }\n#et-app .et-legend-label { flex: 1; color: #475569; }\n#et-app .et-legend-val { font-weight: 700; color: #1e293b; }\n#et-app .et-cat-row { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }\n#et-app .et-cat-bar-bg { flex: 1; height: 8px; background: #e2e8f0; border-radius: 99px; overflow: hidden; }\n#et-app .et-cat-bar-fill { height: 100%; border-radius: 99px; transition: width 0.3s; }\n#et-app .et-cat-name { font-size: 13px; color: #475569; min-width: 100px; }\n#et-app .et-cat-amt { font-size: 13px; font-weight: 700; color: #1e293b; min-width: 80px; text-align: right; }\n\n/* Modal */\n#et-app .et-modal-overlay {\n  display: none;\n  position: fixed;\n  inset: 0;\n  background: rgba(0,0,0,0.4);\n  z-index: 9999;\n  align-items: center;\n  justify-content: center;\n}\n#et-app .et-modal-overlay.open { display: flex; }\n#et-app .et-modal {\n  background: #fff;\n  border-radius: 12px;\n  padding: 24px;\n  width: 100%;\n  max-width: 460px;\n  margin: 16px;\n  box-shadow: 0 20px 60px rgba(0,0,0,0.2);\n}\n#et-app .et-modal h3 { margin: 0 0 16px; font-size: 1.1rem; color: #1e293b; }\n#et-app .et-modal-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 16px; }\n#et-app .et-btn-secondary { background: #f1f5f9; color: #475569; }\n\u003c/style\u003e\n\u003ch2\u003e取引を追加\u003c/h2\u003e\n\u003cdiv class=\"et-card\"\u003e\n  \u003cdiv class=\"et-grid et-grid-2\" style=\"margin-bottom:12px;\"\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003e日付\u003c/label\u003e\n      \u003cinput type=\"date\" id=\"et-date\"\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003e種別\u003c/label\u003e\n      \u003cdiv class=\"et-type-toggle\"\u003e\n        \u003cbutton id=\"et-btn-income\" onclick=\"etSetType('income')\"\u003e+ 収入\u003c/button\u003e\n        \u003cbutton id=\"et-btn-expense\" class=\"active-expense\" onclick=\"etSetType('expense')\"\u003e- 支出\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"et-grid et-grid-3\" style=\"margin-bottom:12px;\"\u003e\n    \u003cdiv style=\"grid-column:span 2;\"\u003e\n      \u003clabel\u003e内容\u003c/label\u003e\n      \u003cinput type=\"text\" id=\"et-desc\" placeholder=\"例：スーパーで買い物\"\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003e金額（円）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"et-amount\" placeholder=\"0\" min=\"0\" step=\"1\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"et-grid et-grid-2\" style=\"margin-bottom:14px;\"\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003eカテゴリ\u003c/label\u003e\n      \u003cselect id=\"et-category\"\u003e\n        \u003coption value=\"食費\"\u003e食費\u003c/option\u003e\n        \u003coption value=\"交通費\"\u003e交通費\u003c/option\u003e\n        \u003coption value=\"住居費\"\u003e住居費\u003c/option\u003e\n        \u003coption value=\"娯楽\"\u003e娯楽\u003c/option\u003e\n        \u003coption value=\"医療・健康\"\u003e医療・健康\u003c/option\u003e\n        \u003coption value=\"教育\"\u003e教育\u003c/option\u003e\n        \u003coption value=\"その他\"\u003eその他\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"display:flex;align-items:flex-end;\"\u003e\n      \u003cbutton class=\"et-btn et-btn-primary\" onclick=\"etAddTransaction()\" style=\"width:100%;\"\u003e追加する\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003e月次サマリー\u003c/h2\u003e\n\u003cdiv class=\"et-summary-bar\"\u003e\n  \u003cdiv class=\"et-summary-card et-income-card\"\u003e\n    \u003cdiv class=\"et-s-label\"\u003e収入合計\u003c/div\u003e\n    \u003cdiv class=\"et-s-value\" id=\"et-total-income\"\u003e¥0\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"et-summary-card et-expense-card\"\u003e\n    \u003cdiv class=\"et-s-label\"\u003e支出合計\u003c/div\u003e\n    \u003cdiv class=\"et-s-value\" id=\"et-total-expense\"\u003e¥0\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"et-summary-card et-balance-card\" id=\"et-balance-card\"\u003e\n    \u003cdiv class=\"et-s-label\"\u003e収支残高\u003c/div\u003e\n    \u003cdiv class=\"et-s-value\" id=\"et-balance\"\u003e¥0\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"et-card\" id=\"et-chart-section\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"et-chart-wrap\"\u003e\n    \u003ccanvas id=\"et-donut\" width=\"160\" height=\"160\"\u003e\u003c/canvas\u003e\n    \u003cdiv class=\"et-legend\" id=\"et-legend\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"margin-top:18px;\" id=\"et-cat-breakdown\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003e取引一覧\u003c/h2\u003e\n\u003cdiv class=\"et-filter-row\"\u003e\n  \u003cdiv\u003e\n    \u003clabel\u003e月を選択\u003c/label\u003e\n    \u003cinput type=\"month\" id=\"et-filter-month\"\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003clabel\u003eカテゴリ\u003c/label\u003e\n    \u003cselect id=\"et-filter-cat\"\u003e\n      \u003coption value=\"\"\u003eすべて\u003c/option\u003e\n      \u003coption value=\"食費\"\u003e食費\u003c/option\u003e\n      \u003coption value=\"交通費\"\u003e交通費\u003c/option\u003e\n      \u003coption value=\"住居費\"\u003e住居費\u003c/option\u003e\n      \u003coption value=\"娯楽\"\u003e娯楽\u003c/option\u003e\n      \u003coption value=\"医療・健康\"\u003e医療・健康\u003c/option\u003e\n      \u003coption value=\"教育\"\u003e教育\u003c/option\u003e\n      \u003coption value=\"その他\"\u003eその他\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003clabel\u003e種別\u003c/label\u003e\n    \u003cselect id=\"et-filter-type\"\u003e\n      \u003coption value=\"\"\u003eすべて\u003c/option\u003e\n      \u003coption value=\"income\"\u003e収入\u003c/option\u003e\n      \u003coption value=\"expense\"\u003e支出\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"display:flex;align-items:flex-end;gap:8px;\"\u003e\n    \u003cbutton class=\"et-btn et-btn-sm et-btn-export\" onclick=\"etExportCSV()\"\u003eCSV出力\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"et-table-wrap et-card\" style=\"padding:0;overflow:hidden;\"\u003e\n  \u003ctable\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n        \u003cth\u003e日付\u003c/th\u003e\n        \u003cth\u003e内容\u003c/th\u003e\n        \u003cth\u003eカテゴリ\u003c/th\u003e\n        \u003cth\u003e種別\u003c/th\u003e\n        \u003cth style=\"text-align:right;\"\u003e金額\u003c/th\u003e\n        \u003cth\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody id=\"et-tbody\"\u003e\u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\u003c!-- 編集モーダル --\u003e\n\u003cdiv class=\"et-modal-overlay\" id=\"et-modal\"\u003e\n  \u003cdiv class=\"et-modal\"\u003e\n    \u003ch3\u003e取引を編集\u003c/h3\u003e\n    \u003cdiv class=\"et-grid et-grid-2\" style=\"margin-bottom:12px;\"\u003e\n      \u003cdiv\u003e\n        \u003clabel\u003e日付\u003c/label\u003e\n        \u003cinput type=\"date\" id=\"et-edit-date\"\u003e\n      \u003c/div\u003e\n      \u003cdiv\u003e\n        \u003clabel\u003e種別\u003c/label\u003e\n        \u003cdiv class=\"et-type-toggle\"\u003e\n          \u003cbutton id=\"et-edit-btn-income\" onclick=\"etEditSetType('income')\"\u003e+ 収入\u003c/button\u003e\n          \u003cbutton id=\"et-edit-btn-expense\" class=\"active-expense\" onclick=\"etEditSetType('expense')\"\u003e- 支出\u003c/button\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"et-grid\" style=\"margin-bottom:12px;\"\u003e\n      \u003cdiv\u003e\n        \u003clabel\u003e内容\u003c/label\u003e\n        \u003cinput type=\"text\" id=\"et-edit-desc\"\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"et-grid et-grid-2\" style=\"margin-bottom:12px;\"\u003e\n      \u003cdiv\u003e\n        \u003clabel\u003e金額（円）\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"et-edit-amount\" min=\"0\" step=\"1\"\u003e\n      \u003c/div\u003e\n      \u003cdiv\u003e\n        \u003clabel\u003eカテゴリ\u003c/label\u003e\n        \u003cselect id=\"et-edit-category\"\u003e\n          \u003coption value=\"食費\"\u003e食費\u003c/option\u003e\n          \u003coption value=\"交通費\"\u003e交通費\u003c/option\u003e\n          \u003coption value=\"住居費\"\u003e住居費\u003c/option\u003e\n          \u003coption value=\"娯楽\"\u003e娯楽\u003c/option\u003e\n          \u003coption value=\"医療・健康\"\u003e医療・健康\u003c/option\u003e\n          \u003coption value=\"教育\"\u003e教育\u003c/option\u003e\n          \u003coption value=\"その他\"\u003eその他\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"et-modal-actions\"\u003e\n      \u003cbutton class=\"et-btn et-btn-sm et-btn-secondary\" onclick=\"etCloseModal()\"\u003eキャンセル\u003c/button\u003e\n      \u003cbutton class=\"et-btn et-btn-sm et-btn-primary\" onclick=\"etSaveEdit()\"\u003e保存する\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  var STORAGE_KEY = 'et_transactions_ja_v1';\n  var COLORS = {\n    '食費':      '#f97316',\n    '交通費':    '#3b82f6',\n    '住居費':    '#8b5cf6',\n    '娯楽':      '#ec4899',\n    '医療・健康': '#10b981',\n    '教育':      '#f59e0b',\n    'その他':    '#94a3b8'\n  };\n\n  var transactions = [];\n  var currentType = 'expense';\n  var editId = null;\n  var editType = 'expense';\n\n  (function init() {\n    var stored = localStorage.getItem(STORAGE_KEY);\n    if (stored) {\n      try { transactions = JSON.parse(stored); } catch (e) { transactions = []; }\n    }\n    var today = new Date().toISOString().slice(0, 10);\n    document.getElementById('et-date').value = today;\n    document.getElementById('et-filter-month').value = today.slice(0, 7);\n\n    document.getElementById('et-filter-month').addEventListener('change', etRender);\n    document.getElementById('et-filter-cat').addEventListener('change', etRender);\n    document.getElementById('et-filter-type').addEventListener('change', etRender);\n\n    // Set default type UI\n    etSetType('expense');\n    etRender();\n  })();\n\n  function etSave() {\n    localStorage.setItem(STORAGE_KEY, JSON.stringify(transactions));\n  }\n\n  function etSetType(type) {\n    currentType = type;\n    document.getElementById('et-btn-income').className = type === 'income' ? 'active-income' : '';\n    document.getElementById('et-btn-expense').className = type === 'expense' ? 'active-expense' : '';\n  }\n\n  function etEditSetType(type) {\n    editType = type;\n    document.getElementById('et-edit-btn-income').className = type === 'income' ? 'active-income' : '';\n    document.getElementById('et-edit-btn-expense').className = type === 'expense' ? 'active-expense' : '';\n  }\n\n  function etAddTransaction() {\n    var date = document.getElementById('et-date').value;\n    var desc = document.getElementById('et-desc').value.trim();\n    var amount = parseFloat(document.getElementById('et-amount').value);\n    var category = document.getElementById('et-category').value;\n\n    if (!date) { alert('日付を入力してください。'); return; }\n    if (!desc) { alert('内容を入力してください。'); return; }\n    if (isNaN(amount) || amount \u003c= 0) { alert('金額を正しく入力してください。'); return; }\n\n    transactions.push({\n      id: Date.now() + Math.random(),\n      date: date,\n      desc: desc,\n      amount: amount,\n      category: category,\n      type: currentType\n    });\n\n    etSave();\n    document.getElementById('et-desc').value = '';\n    document.getElementById('et-amount').value = '';\n    etRender();\n  }\n\n  function etDeleteTransaction(id) {\n    transactions = transactions.filter(function (t) { return t.id !== id; });\n    etSave();\n    etRender();\n  }\n\n  function etOpenEdit(id) {\n    var t = transactions.find(function (x) { return x.id === id; });\n    if (!t) return;\n    editId = id;\n    document.getElementById('et-edit-date').value = t.date;\n    document.getElementById('et-edit-desc').value = t.desc;\n    document.getElementById('et-edit-amount').value = t.amount;\n    document.getElementById('et-edit-category').value = t.category;\n    etEditSetType(t.type);\n    document.getElementById('et-modal').classList.add('open');\n  }\n\n  function etCloseModal() {\n    document.getElementById('et-modal').classList.remove('open');\n    editId = null;\n  }\n\n  function etSaveEdit() {\n    if (editId === null) return;\n    var date = document.getElementById('et-edit-date').value;\n    var desc = document.getElementById('et-edit-desc').value.trim();\n    var amount = parseFloat(document.getElementById('et-edit-amount').value);\n    var category = document.getElementById('et-edit-category').value;\n\n    if (!date || !desc || isNaN(amount) || amount \u003c= 0) { alert('すべての項目を正しく入力してください。'); return; }\n\n    transactions = transactions.map(function (t) {\n      if (t.id === editId) {\n        return { id: t.id, date: date, desc: desc, amount: amount, category: category, type: editType };\n      }\n      return t;\n    });\n    etSave();\n    etCloseModal();\n    etRender();\n  }\n\n  function etGetFiltered() {\n    var month = document.getElementById('et-filter-month').value;\n    var cat = document.getElementById('et-filter-cat').value;\n    var type = document.getElementById('et-filter-type').value;\n\n    return transactions.filter(function (t) {\n      if (month \u0026\u0026 t.date.slice(0, 7) !== month) return false;\n      if (cat \u0026\u0026 t.category !== cat) return false;\n      if (type \u0026\u0026 t.type !== type) return false;\n      return true;\n    }).sort(function (a, b) { return b.date.localeCompare(a.date); });\n  }\n\n  function fmt(n) {\n    return '¥' + Math.round(n).toLocaleString('ja-JP');\n  }\n\n  function etRender() {\n    var filtered = etGetFiltered();\n\n    var month = document.getElementById('et-filter-month').value;\n    var monthTxns = month\n      ? transactions.filter(function (t) { return t.date.slice(0, 7) === month; })\n      : transactions;\n\n    var totalIncome = monthTxns.filter(function (t) { return t.type === 'income'; })\n      .reduce(function (s, t) { return s + t.amount; }, 0);\n    var totalExpense = monthTxns.filter(function (t) { return t.type === 'expense'; })\n      .reduce(function (s, t) { return s + t.amount; }, 0);\n    var balance = totalIncome - totalExpense;\n\n    document.getElementById('et-total-income').textContent = fmt(totalIncome);\n    document.getElementById('et-total-expense').textContent = fmt(totalExpense);\n    document.getElementById('et-balance').textContent = fmt(balance);\n\n    var balCard = document.getElementById('et-balance-card');\n    balCard.className = 'et-summary-card ' + (balance \u003c 0 ? 'et-balance-neg' : 'et-balance-card');\n\n    var expenseTxns = monthTxns.filter(function (t) { return t.type === 'expense'; });\n    etRenderChart(expenseTxns);\n\n    var tbody = document.getElementById('et-tbody');\n    if (filtered.length === 0) {\n      tbody.innerHTML = '\u003ctr\u003e\u003ctd colspan=\"6\" class=\"et-empty\"\u003e取引がありません。上から追加してください。\u003c/td\u003e\u003c/tr\u003e';\n      return;\n    }\n\n    var html = '';\n    filtered.forEach(function (t) {\n      html += '\u003ctr\u003e';\n      html += '\u003ctd\u003e' + t.date + '\u003c/td\u003e';\n      html += '\u003ctd\u003e' + escHtml(t.desc) + '\u003c/td\u003e';\n      html += '\u003ctd\u003e\u003cspan class=\"et-badge\" style=\"background:' + hexBg(COLORS[t.category] || '#94a3b8') + ';color:' + (COLORS[t.category] || '#94a3b8') + ';\"\u003e' + escHtml(t.category) + '\u003c/span\u003e\u003c/td\u003e';\n      html += '\u003ctd\u003e\u003cspan class=\"et-badge ' + (t.type === 'income' ? 'et-badge-income' : 'et-badge-expense') + '\"\u003e' + (t.type === 'income' ? '収入' : '支出') + '\u003c/span\u003e\u003c/td\u003e';\n      html += '\u003ctd style=\"text-align:right;\" class=\"' + (t.type === 'income' ? 'et-amount-income' : 'et-amount-expense') + '\"\u003e' + (t.type === 'income' ? '+' : '-') + fmt(t.amount) + '\u003c/td\u003e';\n      html += '\u003ctd style=\"white-space:nowrap;text-align:right;\"\u003e';\n      html += '\u003cbutton class=\"et-btn et-btn-sm et-btn-edit\" onclick=\"etOpenEdit(' + t.id + ')\" style=\"margin-right:4px;\"\u003e編集\u003c/button\u003e';\n      html += '\u003cbutton class=\"et-btn et-btn-sm et-btn-delete\" onclick=\"etDeleteTransaction(' + t.id + ')\"\u003e削除\u003c/button\u003e';\n      html += '\u003c/td\u003e';\n      html += '\u003c/tr\u003e';\n    });\n    tbody.innerHTML = html;\n  }\n\n  function hexBg(hex) {\n    var map = {\n      '#f97316': '#fff7ed',\n      '#3b82f6': '#eff6ff',\n      '#8b5cf6': '#f5f3ff',\n      '#ec4899': '#fdf2f8',\n      '#10b981': '#ecfdf5',\n      '#f59e0b': '#fffbeb',\n      '#94a3b8': '#f1f5f9'\n    };\n    return map[hex] || '#f1f5f9';\n  }\n\n  function etRenderChart(expenseTxns) {\n    var section = document.getElementById('et-chart-section');\n    if (expenseTxns.length === 0) { section.style.display = 'none'; return; }\n    section.style.display = '';\n\n    var catMap = {};\n    expenseTxns.forEach(function (t) {\n      catMap[t.category] = (catMap[t.category] || 0) + t.amount;\n    });\n    var total = Object.values(catMap).reduce(function (s, v) { return s + v; }, 0);\n    var entries = Object.entries(catMap).sort(function (a, b) { return b[1] - a[1]; });\n\n    var canvas = document.getElementById('et-donut');\n    var ctx = canvas.getContext('2d');\n    var cx = 80, cy = 80, r = 68, innerR = 44;\n    ctx.clearRect(0, 0, 160, 160);\n\n    var startAngle = -Math.PI / 2;\n    entries.forEach(function (entry) {\n      var slice = (entry[1] / total) * 2 * Math.PI;\n      ctx.beginPath();\n      ctx.moveTo(cx, cy);\n      ctx.arc(cx, cy, r, startAngle, startAngle + slice);\n      ctx.closePath();\n      ctx.fillStyle = COLORS[entry[0]] || '#94a3b8';\n      ctx.fill();\n      startAngle += slice;\n    });\n\n    ctx.beginPath();\n    ctx.arc(cx, cy, innerR, 0, 2 * Math.PI);\n    ctx.fillStyle = '#fff';\n    ctx.fill();\n\n    ctx.fillStyle = '#1e293b';\n    ctx.font = 'bold 12px sans-serif';\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    ctx.fillText(fmt(total), cx, cy);\n\n    var legendHtml = '';\n    entries.forEach(function (entry) {\n      var pct = ((entry[1] / total) * 100).toFixed(1);\n      legendHtml += '\u003cdiv class=\"et-legend-item\"\u003e';\n      legendHtml += '\u003cdiv class=\"et-legend-dot\" style=\"background:' + (COLORS[entry[0]] || '#94a3b8') + ';\"\u003e\u003c/div\u003e';\n      legendHtml += '\u003cspan class=\"et-legend-label\"\u003e' + escHtml(entry[0]) + ' \u003cspan style=\"color:#94a3b8;font-size:11px;\"\u003e(' + pct + '%)\u003c/span\u003e\u003c/span\u003e';\n      legendHtml += '\u003cspan class=\"et-legend-val\"\u003e' + fmt(entry[1]) + '\u003c/span\u003e';\n      legendHtml += '\u003c/div\u003e';\n    });\n    document.getElementById('et-legend').innerHTML = legendHtml;\n\n    var breakHtml = '\u003cdiv style=\"font-size:12px;font-weight:700;color:#64748b;margin-bottom:10px;\"\u003eカテゴリ別内訳\u003c/div\u003e';\n    entries.forEach(function (entry) {\n      var pct = (entry[1] / total) * 100;\n      breakHtml += '\u003cdiv class=\"et-cat-row\"\u003e';\n      breakHtml += '\u003cspan class=\"et-cat-name\"\u003e' + escHtml(entry[0]) + '\u003c/span\u003e';\n      breakHtml += '\u003cdiv class=\"et-cat-bar-bg\"\u003e\u003cdiv class=\"et-cat-bar-fill\" style=\"width:' + pct.toFixed(1) + '%;background:' + (COLORS[entry[0]] || '#94a3b8') + ';\"\u003e\u003c/div\u003e\u003c/div\u003e';\n      breakHtml += '\u003cspan class=\"et-cat-amt\"\u003e' + fmt(entry[1]) + '\u003c/span\u003e';\n      breakHtml += '\u003c/div\u003e';\n    });\n    document.getElementById('et-cat-breakdown').innerHTML = breakHtml;\n  }\n\n  function etExportCSV() {\n    var filtered = etGetFiltered();\n    if (filtered.length === 0) { alert('出力するデータがありません。'); return; }\n    var rows = [['日付', '内容', 'カテゴリ', '種別', '金額']];\n    filtered.forEach(function (t) {\n      rows.push([t.date, '\"' + t.desc.replace(/\"/g, '\"\"') + '\"', t.category, t.type === 'income' ? '収入' : '支出', Math.round(t.amount)]);\n    });\n    var bom = '\\uFEFF';\n    var csv = bom + rows.map(function (r) { return r.join(','); }).join('\\n');\n    var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });\n    var url = URL.createObjectURL(blob);\n    var a = document.createElement('a');\n    a.href = url;\n    a.download = 'kakeibo.csv';\n    a.click();\n    URL.revokeObjectURL(url);\n  }\n\n  function escHtml(str) {\n    return String(str)\n      .replace(/\u0026/g, '\u0026amp;')\n      .replace(/\u003c/g, '\u0026lt;')\n      .replace(/\u003e/g, '\u0026gt;')\n      .replace(/\"/g, '\u0026quot;');\n  }\n\n  window.etSetType = etSetType;\n  window.etEditSetType = etEditSetType;\n  window.etAddTransaction = etAddTransaction;\n  window.etDeleteTransaction = etDeleteTransaction;\n  window.etOpenEdit = etOpenEdit;\n  window.etCloseModal = etCloseModal;\n  window.etSaveEdit = etSaveEdit;\n  window.etExportCSV = etExportCSV;\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0 0 4px;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の経費管理はfreeeでかんたんに\u003c/p\u003e","title":"家計簿・支出管理ツール｜収入と支出を入力して貯蓄額を可視化【無料】"},{"content":"画面解像度・ビューポートサイズ・ピクセル比・アクティブなCSSブレークポイントをリアルタイム表示。ウィンドウをリサイズすると数値が即時更新されます。\nあなたのディスプレイ情報 LIVE 画面とビューポートの比較（視覚） アクティブなCSSブレークポイント 主要解像度との比較 名称横幅高さ比率 ブラウザ・OS情報 \u0026#128203; 情報をコピー デバイス管理もfreeeで効率化 freeeを無料で試す 関連ツール Webデザイン用に画像をリサイズ → 画像リサイズツール デザインに使う色を選択・変換 → カラーピッカー CSSグラジエントを視覚的に生成 → CSSグラジエントジェネレーター デバイス管理もfreeeで効率化 freeeを無料で試す\n","permalink":"https://productivity-works.com/ja/tools/screen-resolution/","summary":"\u003cp\u003e画面解像度・ビューポートサイズ・ピクセル比・アクティブなCSSブレークポイントをリアルタイム表示。ウィンドウをリサイズすると数値が即時更新されます。\u003c/p\u003e\n\u003cdiv id=\"screen-app\"\u003e\n\u003cstyle\u003e\n#screen-app {\n  font-family: system-ui, -apple-system, sans-serif;\n  color: #1e293b;\n  max-width: 860px;\n  margin: 0 auto;\n}\n#screen-app * { box-sizing: border-box; }\n\n#screen-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #0891b2;\n  margin: 1.6rem 0 0.6rem;\n  border-left: 4px solid #0891b2;\n  padding-left: 0.6rem;\n}\n\n#screen-app .sa-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n  gap: 0.75rem;\n  margin-bottom: 1rem;\n}\n\n#screen-app .sa-card {\n  background: #f0f9ff;\n  border: 1px solid #bae6fd;\n  border-radius: 10px;\n  padding: 0.9rem 1rem;\n}\n#screen-app .sa-card .sa-label {\n  font-size: 0.72rem;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: #0e7490;\n  margin-bottom: 0.25rem;\n}\n#screen-app .sa-card .sa-value {\n  font-size: 1.35rem;\n  font-weight: 700;\n  color: #0891b2;\n}\n#screen-app .sa-card .sa-unit {\n  font-size: 0.8rem;\n  color: #64748b;\n  margin-left: 2px;\n}\n\n/* Visual area */\n#screen-app .sa-visual-wrap {\n  background: #0f172a;\n  border-radius: 12px;\n  padding: 1.5rem;\n  margin-bottom: 1rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 200px;\n  position: relative;\n}\n#screen-app .sa-screen-rect {\n  position: relative;\n  background: #1e293b;\n  border: 2px solid #0891b2;\n  border-radius: 4px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n#screen-app .sa-screen-label {\n  position: absolute;\n  top: -20px;\n  left: 0;\n  font-size: 0.7rem;\n  color: #0891b2;\n  white-space: nowrap;\n}\n#screen-app .sa-viewport-rect {\n  position: absolute;\n  background: rgba(8, 145, 178, 0.25);\n  border: 2px dashed #06b6d4;\n  border-radius: 3px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n#screen-app .sa-viewport-label {\n  font-size: 0.65rem;\n  color: #67e8f9;\n  text-align: center;\n  pointer-events: none;\n}\n\n/* Breakpoints */\n#screen-app .sa-bp-list {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n}\n#screen-app .sa-bp-tag {\n  padding: 0.3rem 0.75rem;\n  border-radius: 999px;\n  font-size: 0.78rem;\n  font-weight: 600;\n  background: #e2e8f0;\n  color: #64748b;\n  border: 2px solid transparent;\n  transition: all 0.2s;\n}\n#screen-app .sa-bp-tag.active {\n  background: #0891b2;\n  color: #fff;\n  border-color: #0891b2;\n}\n\n/* Resolution comparison */\n#screen-app .sa-res-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.85rem;\n  margin-bottom: 1rem;\n}\n#screen-app .sa-res-table th {\n  background: #0891b2;\n  color: #fff;\n  padding: 0.5rem 0.75rem;\n  text-align: left;\n  font-weight: 600;\n}\n#screen-app .sa-res-table td {\n  padding: 0.45rem 0.75rem;\n  border-bottom: 1px solid #e2e8f0;\n}\n#screen-app .sa-res-table tr:nth-child(even) td {\n  background: #f8fafc;\n}\n#screen-app .sa-res-table tr.sa-res-match td {\n  background: #ecfeff;\n  font-weight: 700;\n  color: #0891b2;\n}\n#screen-app .sa-res-table tr.sa-res-match td:first-child::before {\n  content: \"► \";\n}\n\n/* Browser/OS */\n#screen-app .sa-info-box {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 0.9rem 1rem;\n  font-size: 0.84rem;\n  line-height: 1.7;\n  margin-bottom: 1rem;\n}\n#screen-app .sa-info-box strong {\n  color: #0891b2;\n}\n\n/* Copy button */\n#screen-app .sa-copy-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.4rem;\n  background: #0891b2;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  padding: 0.6rem 1.2rem;\n  font-size: 0.88rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.2s;\n  margin-bottom: 1rem;\n}\n#screen-app .sa-copy-btn:hover { background: #0e7490; }\n#screen-app .sa-copy-btn.copied { background: #059669; }\n\n#screen-app .sa-live-badge {\n  display: inline-block;\n  background: #0891b2;\n  color: #fff;\n  font-size: 0.65rem;\n  font-weight: 700;\n  letter-spacing: 0.08em;\n  border-radius: 999px;\n  padding: 0.1rem 0.5rem;\n  vertical-align: middle;\n  margin-left: 0.4rem;\n  animation: sa-pulse 2s infinite;\n}\n@keyframes sa-pulse {\n  0%, 100% { opacity: 1; }\n  50% { opacity: 0.5; }\n}\n\n/* freee CTA */\n#screen-app .sa-freee-cta {\n  background: linear-gradient(135deg, #ecfeff 0%, #f0f9ff 100%);\n  border: 1px solid #a5f3fc;\n  border-radius: 10px;\n  padding: 1rem 1.2rem;\n  margin-top: 1.5rem;\n  font-size: 0.88rem;\n  line-height: 1.6;\n}\n#screen-app .sa-freee-cta strong {\n  display: block;\n  color: #0891b2;\n  font-size: 0.95rem;\n  margin-bottom: 0.4rem;\n}\n#screen-app .sa-freee-cta a {\n  display: inline-block;\n  margin-top: 0.4rem;\n  background: #0891b2;\n  color: #fff;\n  text-decoration: none;\n  border-radius: 6px;\n  padding: 0.45rem 1rem;\n  font-weight: 700;\n  font-size: 0.88rem;\n  transition: background 0.2s;\n}\n#screen-app .sa-freee-cta a:hover { background: #0e7490; }\n\u003c/style\u003e\n\u003ch2\u003eあなたのディスプレイ情報 \u003cspan class=\"sa-live-badge\"\u003eLIVE\u003c/span\u003e\u003c/h2\u003e\n\u003cdiv class=\"sa-grid\" id=\"sa-metrics\"\u003e\u003c/div\u003e\n\u003ch2\u003e画面とビューポートの比較（視覚）\u003c/h2\u003e\n\u003cdiv class=\"sa-visual-wrap\" id=\"sa-visual\"\u003e\n  \u003cdiv class=\"sa-screen-rect\" id=\"sa-screen-rect\"\u003e\n    \u003cspan class=\"sa-screen-label\" id=\"sa-screen-rect-label\"\u003e\u003c/span\u003e\n    \u003cdiv class=\"sa-viewport-rect\" id=\"sa-viewport-rect\"\u003e\n      \u003cspan class=\"sa-viewport-label\" id=\"sa-vp-label\"\u003e\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003eアクティブなCSSブレークポイント\u003c/h2\u003e\n\u003cdiv class=\"sa-bp-list\" id=\"sa-breakpoints\"\u003e\u003c/div\u003e\n\u003ch2\u003e主要解像度との比較\u003c/h2\u003e\n\u003ctable class=\"sa-res-table\"\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\u003cth\u003e名称\u003c/th\u003e\u003cth\u003e横幅\u003c/th\u003e\u003cth\u003e高さ\u003c/th\u003e\u003cth\u003e比率\u003c/th\u003e\u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody id=\"sa-res-tbody\"\u003e\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eブラウザ・OS情報\u003c/h2\u003e\n\u003cdiv class=\"sa-info-box\" id=\"sa-browser-info\"\u003e\u003c/div\u003e\n\u003cbutton class=\"sa-copy-btn\" id=\"sa-copy-btn\" onclick=\"saCopyAll()\"\u003e\n  \u0026#128203; 情報をコピー\n\u003c/button\u003e\n\u003cscript\u003e\n(function() {\n  var RESOLUTIONS = [\n    { name: \"nHD\",             w: 640,  h: 360  },\n    { name: \"HD (720p)\",       w: 1280, h: 720  },\n    { name: \"フルHD (1080p)\",  w: 1920, h: 1080 },\n    { name: \"QHD (1440p)\",     w: 2560, h: 1440 },\n    { name: \"4K UHD\",          w: 3840, h: 2160 },\n    { name: \"5K\",              w: 5120, h: 2880 },\n    { name: \"8K UHD\",          w: 7680, h: 4320 },\n  ];\n\n  var BREAKPOINTS = [\n    { label: \"sm (≥640px)\",  mq: \"(min-width: 640px)\"  },\n    { label: \"md (≥768px)\",  mq: \"(min-width: 768px)\"  },\n    { label: \"lg (≥1024px)\", mq: \"(min-width: 1024px)\" },\n    { label: \"xl (≥1280px)\", mq: \"(min-width: 1280px)\" },\n    { label: \"2xl (≥1536px)\",mq: \"(min-width: 1536px)\" },\n  ];\n\n  function gcd(a, b) { return b === 0 ? a : gcd(b, a % b); }\n  function aspectRatio(w, h) {\n    var d = gcd(w, h);\n    return (w / d) + \":\" + (h / d);\n  }\n\n  function detectBrowser(ua) {\n    if (/Edg\\//.test(ua))       return \"Microsoft Edge\";\n    if (/OPR\\/|Opera/.test(ua)) return \"Opera\";\n    if (/Chrome\\//.test(ua))    return \"Google Chrome\";\n    if (/Firefox\\//.test(ua))   return \"Mozilla Firefox\";\n    if (/Safari\\//.test(ua))    return \"Apple Safari\";\n    return \"不明\";\n  }\n  function detectOS(ua) {\n    if (/Windows NT 10/.test(ua)) return \"Windows 10/11\";\n    if (/Windows NT/.test(ua))    return \"Windows\";\n    if (/Mac OS X/.test(ua))      return \"macOS\";\n    if (/Android/.test(ua))       return \"Android\";\n    if (/iPhone|iPad/.test(ua))   return \"iOS\";\n    if (/Linux/.test(ua))         return \"Linux\";\n    return \"不明\";\n  }\n  function detectDevice(ua) {\n    if (/Mobile|Android|iPhone/.test(ua)) return \"モバイル\";\n    if (/iPad|Tablet/.test(ua))           return \"タブレット\";\n    return \"デスクトップ\";\n  }\n\n  function getData() {\n    var sw = window.screen.width;\n    var sh = window.screen.height;\n    var vw = window.innerWidth;\n    var vh = window.innerHeight;\n    var dpr = window.devicePixelRatio || 1;\n    var cd = window.screen.colorDepth || 24;\n    var orient = (sw \u003e sh) ? \"横向き\" : \"縦向き\";\n    if (window.screen.orientation \u0026\u0026 window.screen.orientation.type) {\n      orient = /landscape/.test(window.screen.orientation.type) ? \"横向き\" : \"縦向き\";\n    }\n    return { sw: sw, sh: sh, vw: vw, vh: vh, dpr: dpr, cd: cd, orient: orient };\n  }\n\n  function renderMetrics(d) {\n    var cards = [\n      { label: \"画面の横幅\",        value: d.sw, unit: \"px\" },\n      { label: \"画面の高さ\",        value: d.sh, unit: \"px\" },\n      { label: \"画面のアスペクト比\", value: aspectRatio(d.sw, d.sh), unit: \"\" },\n      { label: \"ビューポート横幅\",   value: d.vw, unit: \"px\" },\n      { label: \"ビューポート高さ\",   value: d.vh, unit: \"px\" },\n      { label: \"ビューポート比\",     value: aspectRatio(d.vw, d.vh), unit: \"\" },\n      { label: \"デバイスピクセル比\", value: d.dpr.toFixed(2), unit: \"x\" },\n      { label: \"色深度\",            value: d.cd, unit: \"bit\" },\n      { label: \"向き\",              value: d.orient, unit: \"\" },\n    ];\n    var el = document.getElementById(\"sa-metrics\");\n    el.innerHTML = cards.map(function(c) {\n      return '\u003cdiv class=\"sa-card\"\u003e' +\n        '\u003cdiv class=\"sa-label\"\u003e' + c.label + '\u003c/div\u003e' +\n        '\u003cdiv class=\"sa-value\"\u003e' + c.value + '\u003cspan class=\"sa-unit\"\u003e' + c.unit + '\u003c/span\u003e\u003c/div\u003e' +\n        '\u003c/div\u003e';\n    }).join(\"\");\n  }\n\n  function renderVisual(d) {\n    var container = document.getElementById(\"sa-visual\");\n    var cw = container.offsetWidth - 48;\n    var ch = Math.max(160, container.offsetHeight - 48);\n    var scaleX = cw / d.sw;\n    var scaleY = ch / d.sh;\n    var scale = Math.min(scaleX, scaleY, 1);\n\n    var srW = Math.round(d.sw * scale);\n    var srH = Math.round(d.sh * scale);\n    var vpW = Math.round(d.vw * scale);\n    var vpH = Math.round(d.vh * scale);\n\n    var sr = document.getElementById(\"sa-screen-rect\");\n    sr.style.width  = srW + \"px\";\n    sr.style.height = srH + \"px\";\n\n    document.getElementById(\"sa-screen-rect-label\").textContent =\n      \"画面: \" + d.sw + \" x \" + d.sh;\n\n    var vp = document.getElementById(\"sa-viewport-rect\");\n    vp.style.width  = Math.min(vpW, srW) + \"px\";\n    vp.style.height = Math.min(vpH, srH) + \"px\";\n\n    document.getElementById(\"sa-vp-label\").textContent =\n      \"ビューポート\\n\" + d.vw + \"x\" + d.vh;\n  }\n\n  function renderBreakpoints() {\n    var el = document.getElementById(\"sa-breakpoints\");\n    el.innerHTML = BREAKPOINTS.map(function(bp) {\n      var active = window.matchMedia(bp.mq).matches;\n      return '\u003cspan class=\"sa-bp-tag' + (active ? \" active\" : \"\") + '\"\u003e' + bp.label + '\u003c/span\u003e';\n    }).join(\"\");\n  }\n\n  function renderResTable(d) {\n    var tbody = document.getElementById(\"sa-res-tbody\");\n    var match = -1;\n    var minDiff = Infinity;\n    RESOLUTIONS.forEach(function(r, i) {\n      var diff = Math.abs(r.w - d.sw) + Math.abs(r.h - d.sh);\n      if (diff \u003c minDiff) { minDiff = diff; match = i; }\n    });\n    tbody.innerHTML = RESOLUTIONS.map(function(r, i) {\n      var cls = (i === match \u0026\u0026 minDiff \u003c 300) ? ' class=\"sa-res-match\"' : '';\n      return '\u003ctr' + cls + '\u003e\u003ctd\u003e' + r.name + '\u003c/td\u003e\u003ctd\u003e' + r.w + 'px\u003c/td\u003e\u003ctd\u003e' + r.h + 'px\u003c/td\u003e\u003ctd\u003e' + aspectRatio(r.w, r.h) + '\u003c/td\u003e\u003c/tr\u003e';\n    }).join(\"\");\n  }\n\n  function renderBrowser() {\n    var ua = navigator.userAgent;\n    var el = document.getElementById(\"sa-browser-info\");\n    el.innerHTML =\n      '\u003cstrong\u003eブラウザ:\u003c/strong\u003e ' + detectBrowser(ua) + '\u003cbr\u003e' +\n      '\u003cstrong\u003eOS:\u003c/strong\u003e ' + detectOS(ua) + '\u003cbr\u003e' +\n      '\u003cstrong\u003eデバイス種別:\u003c/strong\u003e ' + detectDevice(ua) + '\u003cbr\u003e' +\n      '\u003cstrong\u003eタッチ対応:\u003c/strong\u003e ' + ('ontouchstart' in window ? 'あり' : 'なし') + '\u003cbr\u003e' +\n      '\u003cstrong\u003eユーザーエージェント:\u003c/strong\u003e \u003cspan style=\"word-break:break-all;color:#334155\"\u003e' + ua + '\u003c/span\u003e';\n  }\n\n  function renderAll() {\n    var d = getData();\n    renderMetrics(d);\n    renderVisual(d);\n    renderBreakpoints();\n    renderResTable(d);\n  }\n\n  window.saCopyAll = function() {\n    var d = getData();\n    var ua = navigator.userAgent;\n    var lines = [\n      \"=== 画面解像度情報 ===\",\n      \"画面: \" + d.sw + \" x \" + d.sh + \" (\" + aspectRatio(d.sw, d.sh) + \")\",\n      \"ビューポート: \" + d.vw + \" x \" + d.vh + \" (\" + aspectRatio(d.vw, d.vh) + \")\",\n      \"デバイスピクセル比: \" + d.dpr.toFixed(2) + \"x\",\n      \"色深度: \" + d.cd + \" bit\",\n      \"向き: \" + d.orient,\n      \"ブラウザ: \" + detectBrowser(ua),\n      \"OS: \" + detectOS(ua),\n      \"デバイス: \" + detectDevice(ua),\n      \"ユーザーエージェント: \" + ua,\n    ];\n    var bp = BREAKPOINTS.filter(function(b) { return window.matchMedia(b.mq).matches; });\n    lines.push(\"アクティブブレークポイント: \" + (bp.length ? bp.map(function(b){return b.label;}).join(\", \") : \"なし\"));\n    lines.push(\"取得日時: \" + new Date().toLocaleString(\"ja-JP\"));\n\n    navigator.clipboard.writeText(lines.join(\"\\n\")).then(function() {\n      var btn = document.getElementById(\"sa-copy-btn\");\n      btn.textContent = \"コピーしました!\";\n      btn.classList.add(\"copied\");\n      setTimeout(function() {\n        btn.textContent = \"\\uD83D\\uDCCB 情報をコピー\";\n        btn.classList.remove(\"copied\");\n      }, 2000);\n    }).catch(function() {\n      alert(lines.join(\"\\n\"));\n    });\n  };\n\n  renderAll();\n  renderBrowser();\n\n  var resizeTimer;\n  window.addEventListener(\"resize\", function() {\n    clearTimeout(resizeTimer);\n    resizeTimer = setTimeout(renderAll, 80);\n  });\n\n  window.addEventListener(\"orientationchange\", function() {\n    setTimeout(renderAll, 300);\n  });\n})();\n\u003c/script\u003e\n\u003cdiv class=\"sa-freee-cta\"\u003e\n  \u003cstrong\u003eデバイス管理もfreeeで効率化\u003c/strong\u003e\n  \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" rel=\"nofollow\"\u003efreeeを無料で試す\u003c/a\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWebデザイン用に画像をリサイズ → \u003ca href=\"https://productivity-works.com/ja/tools/image-resizer/\"\u003e画像リサイズツール\u003c/a\u003e\n\u003c/p\u003e","title":"画面解像度チェッカー — ディスプレイ情報を即確認"},{"content":"CSSの cursor プロパティで使える全カーソル値を一覧で確認。カードにホバーしてカーソルをプレビューし、ボタンをクリックしてCSSをコピーできます。検索・カテゴリーで絞り込みも可能。カスタムカーソルのCSS生成ツールも内蔵しています。\nすべて 基本 リンク・状態 テキスト選択 ドラッグ＆ドロップ リサイズ ズーム \u0026#9881; カスタムカーソル CSS ジェネレーター カーソル画像をアップロード（PNG・ICO・SVG） \u0026#128247; 画像を選択 ホットスポット X（px） ホットスポット Y（px） フォールバックカーソル auto default pointer crosshair move grab none プレビュー（ここにホバー） ここにホバーしてカーソルを確認 生成されたCSS /* 画像をアップロードするとCSSが生成されます */ CSSをコピー CSSアニメーション CSSアニメーションジェネレーター CSSボタン CSSボタンジェネレーター フリーランス・個人事業主の方へ：会計をもっとラクに Webデザイン・フロントエンド案件の請求書・経費管理は freee でまとめて自動化。確定申告もかんたんに。\nfreee を無料で試す ※本ページにはアフィリエイト広告（A8.net）が含まれます。広告掲載ポリシー\nCSSカーソルの使い方 cursor プロパティは任意の要素に設定できます：\n/* キーワード指定 */ .btn { cursor: pointer; } /* カスタム画像カーソル */ .custom { cursor: url(\u0026#39;/cursors/my-cursor.png\u0026#39;) 0 0, auto; } カスタムカーソルは url() の後にホットスポット座標（クリック判定位置）を x y の順で指定し、最後にキーワード（auto や pointer など）をフォールバックとして書きます。\nブラウザ対応 上記のすべてのキーワード値は Chrome・Firefox・Safari・Edge の最新版でサポートされています。カスタム URL カーソルは PNG・SVG・ICO 形式に対応しており、推奨最大サイズは 128×128 px です。\n関連ツール： CSSアニメーションジェネレーター | CSSボタンジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/css-cursor-gallery/","summary":"\u003cp\u003eCSSの \u003ccode\u003ecursor\u003c/code\u003e プロパティで使える全カーソル値を一覧で確認。カードにホバーしてカーソルをプレビューし、ボタンをクリックしてCSSをコピーできます。検索・カテゴリーで絞り込みも可能。カスタムカーソルのCSS生成ツールも内蔵しています。\u003c/p\u003e\n\u003cdiv id=\"cu-app\"\u003e\n\u003cstyle\u003e\n#cu-app *,#cu-app *::before,#cu-app *::after{box-sizing:border-box;margin:0;padding:0}\n#cu-app{font-family:-apple-system,BlinkMacSystemFont,'Hiragino Sans','Noto Sans JP',sans-serif;color:#1e293b;max-width:960px;margin:0 auto;padding:0 0 48px}\n#cu-app h2{display:none}\n\u003cp\u003e/* ── controls ── */\n#cu-controls{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:20px;align-items:center}\n#cu-search{flex:1;min-width:180px;padding:9px 14px;border:1.5px solid #cbd5e1;border-radius:8px;font-size:14px;outline:none;transition:border-color .2s}\n#cu-search:focus{border-color:#6366f1}\n#cu-cats{display:flex;flex-wrap:wrap;gap:6px}\n.cu-cat{padding:6px 14px;border:1.5px solid #cbd5e1;border-radius:20px;background:#fff;font-size:13px;cursor:pointer;transition:all .15s}\n.cu-cat:hover{border-color:#6366f1;color:#6366f1}\n.cu-cat.active{background:#6366f1;border-color:#6366f1;color:#fff}\u003c/p\u003e\n\u003cp\u003e/* ── grid ── */\n#cu-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:12px}\n.cu-card{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;height:110px;border:1.5px solid #e2e8f0;border-radius:10px;background:#f8fafc;transition:border-color .15s,box-shadow .15s;user-select:none}\n.cu-card:hover{border-color:#6366f1;box-shadow:0 2px 12px rgba(99,102,241,.15)}\n.cu-icon{font-size:22px;pointer-events:none}\n.cu-name{font-size:12px;font-weight:600;color:#475569;pointer-events:none}\n.cu-copy-btn{padding:3px 10px;font-size:11px;border:1px solid #cbd5e1;border-radius:5px;background:#fff;color:#6366f1;cursor:pointer;transition:all .15s;pointer-events:auto}\n.cu-copy-btn:hover{background:#6366f1;color:#fff;border-color:#6366f1}\n.cu-copied{position:absolute;top:6px;right:8px;font-size:10px;color:#22c55e;font-weight:700;opacity:0;transition:opacity .3s}\n.cu-copied.show{opacity:1}\n.cu-no-results{grid-column:1/-1;text-align:center;padding:40px;color:#94a3b8;font-size:15px}\u003c/p\u003e\n\u003cp\u003e/* ── custom builder ── */\n#cu-builder{margin-top:36px;border:1.5px solid #e2e8f0;border-radius:12px;overflow:hidden}\n#cu-builder-header{background:#6366f1;color:#fff;padding:14px 20px;font-size:15px;font-weight:700;display:flex;align-items:center;gap:8px}\n#cu-builder-body{padding:20px;display:grid;grid-template-columns:1fr 1fr;gap:20px}\n@media(max-width:600px){#cu-builder-body{grid-template-columns:1fr}}\n.cu-b-label{font-size:13px;font-weight:600;color:#475569;display:block;margin-bottom:5px}\n.cu-b-input{width:100%;padding:8px 11px;border:1.5px solid #cbd5e1;border-radius:7px;font-size:13px;outline:none;transition:border-color .2s}\n.cu-b-input:focus{border-color:#6366f1}\n#cu-preview-area{display:flex;align-items:center;justify-content:center;height:120px;border:2px dashed #cbd5e1;border-radius:8px;font-size:13px;color:#94a3b8;transition:border-color .2s}\n#cu-preview-area:hover{border-color:#6366f1}\n#cu-output{background:#1e293b;color:#e2e8f0;border-radius:8px;padding:14px;font-family:\u0026lsquo;Fira Code\u0026rsquo;,Consolas,monospace;font-size:12.5px;white-space:pre-wrap;word-break:break-all;min-height:60px;margin-top:0}\n#cu-copy-output{margin-top:8px;padding:8px 16px;background:#6366f1;color:#fff;border:none;border-radius:7px;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s}\n#cu-copy-output:hover{background:#4f46e5}\n#cu-upload-label{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;background:#f1f5f9;border:1.5px dashed #cbd5e1;border-radius:7px;font-size:13px;cursor:pointer;transition:border-color .2s}\n#cu-upload-label:hover{border-color:#6366f1}\n#cu-file-input{display:none}\n#cu-img-preview{max-width:64px;max-height:64px;margin-top:8px;border-radius:4px;display:none}\u003c/p\u003e","title":"CSSカーソル ギャラリー"},{"content":" IBAN番号を入力してください 検証する クリア サンプルで試す: DE（ドイツ） GB（イギリス） FR（フランス） ES（スペイン） IT（イタリア） NL（オランダ） BE（ベルギー） AT（オーストリア） CH（スイス） IE（アイルランド） 無効チェックサム 国別IBANの桁数一覧 国旗 国名 コード 桁数 フォーマット 海外送金・外貨取引の管理を効率化しませんか？ IBANを使った国際送金の記帳・為替差損益の自動計算は freee会計 が便利です。\n\u003e 海外送金の管理を効率化 → freee会計で外貨取引を自動管理 ","permalink":"https://productivity-works.com/ja/tools/iban-validator/","summary":"\u003cdiv id=\"iban-app\"\u003e\n\u003cstyle\u003e\n#iban-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Yu Gothic UI\", Meiryo, sans-serif;\n  max-width: 760px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#iban-app * { box-sizing: border-box; }\n#iban-app h2 {\n  font-size: 1.2rem;\n  font-weight: 700;\n  color: #1a1a2e;\n  margin: 1.5rem 0 0.75rem;\n}\n#iban-app .iban-input-group {\n  display: flex;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n}\n#iban-app #iban-input {\n  flex: 1;\n  padding: 0.75rem 1rem;\n  font-size: 1.1rem;\n  font-family: \"Courier New\", Courier, monospace;\n  border: 2px solid #cbd5e1;\n  border-radius: 8px;\n  outline: none;\n  letter-spacing: 0.05em;\n  transition: border-color 0.2s;\n  text-transform: uppercase;\n}\n#iban-app #iban-input:focus { border-color: #3b82f6; }\n#iban-app #iban-input.valid { border-color: #22c55e; }\n#iban-app #iban-input.invalid { border-color: #ef4444; }\n#iban-app .btn {\n  padding: 0.75rem 1.25rem;\n  font-size: 0.95rem;\n  font-weight: 600;\n  border: none;\n  border-radius: 8px;\n  cursor: pointer;\n  transition: background 0.2s, transform 0.1s;\n  white-space: nowrap;\n}\n#iban-app .btn:active { transform: scale(0.97); }\n#iban-app .btn-primary {\n  background: #3b82f6;\n  color: #fff;\n}\n#iban-app .btn-primary:hover { background: #2563eb; }\n#iban-app .btn-clear {\n  background: #f1f5f9;\n  color: #64748b;\n}\n#iban-app .btn-clear:hover { background: #e2e8f0; }\n#iban-app .result-box {\n  border-radius: 10px;\n  padding: 1.25rem 1.5rem;\n  margin-bottom: 1rem;\n  display: none;\n}\n#iban-app .result-box.visible { display: block; }\n#iban-app .result-valid {\n  background: #f0fdf4;\n  border: 2px solid #22c55e;\n}\n#iban-app .result-invalid {\n  background: #fef2f2;\n  border: 2px solid #ef4444;\n}\n#iban-app .result-status {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin-bottom: 0.4rem;\n}\n#iban-app .result-valid .result-status { color: #16a34a; }\n#iban-app .result-invalid .result-status { color: #dc2626; }\n#iban-app .result-msg {\n  font-size: 0.93rem;\n  color: #475569;\n  line-height: 1.6;\n}\n#iban-app .details-grid {\n  display: none;\n  grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));\n  gap: 0.75rem;\n  margin-top: 1.25rem;\n}\n#iban-app .details-grid.visible { display: grid; }\n#iban-app .detail-card {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 0.75rem 1rem;\n}\n#iban-app .detail-label {\n  font-size: 0.72rem;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: #94a3b8;\n  margin-bottom: 0.25rem;\n}\n#iban-app .detail-value {\n  font-size: 0.97rem;\n  font-weight: 600;\n  color: #1e293b;\n  word-break: break-all;\n}\n#iban-app .detail-value.mono {\n  font-family: \"Courier New\", Courier, monospace;\n  font-size: 0.92rem;\n}\n#iban-app .country-flag { font-size: 1.3rem; margin-right: 0.3rem; }\n#iban-app .examples-section { margin-top: 1.5rem; }\n#iban-app .examples-label {\n  font-size: 0.83rem;\n  color: #64748b;\n  margin-bottom: 0.5rem;\n}\n#iban-app .example-chips {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.4rem;\n}\n#iban-app .chip {\n  padding: 0.3rem 0.75rem;\n  background: #eff6ff;\n  border: 1px solid #bfdbfe;\n  border-radius: 999px;\n  font-size: 0.8rem;\n  font-family: \"Courier New\", Courier, monospace;\n  color: #1d4ed8;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#iban-app .chip:hover { background: #dbeafe; }\n#iban-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n  margin-top: 0.5rem;\n}\n#iban-app thead th {\n  background: #f1f5f9;\n  padding: 0.55rem 0.8rem;\n  text-align: left;\n  font-weight: 600;\n  color: #475569;\n  border-bottom: 2px solid #e2e8f0;\n}\n#iban-app tbody td {\n  padding: 0.5rem 0.8rem;\n  border-bottom: 1px solid #f1f5f9;\n  color: #334155;\n}\n#iban-app tbody tr:hover td { background: #f8fafc; }\n#iban-app .cta-box {\n  margin-top: 2rem;\n  padding: 1.25rem 1.5rem;\n  background: linear-gradient(135deg, #eff6ff 0%, #f0fdf4 100%);\n  border: 1px solid #bfdbfe;\n  border-radius: 10px;\n  font-size: 0.93rem;\n  color: #1e3a5f;\n  line-height: 1.7;\n}\n#iban-app .cta-box strong {\n  display: block;\n  font-size: 1rem;\n  margin-bottom: 0.4rem;\n  color: #1d4ed8;\n}\n#iban-app .cta-box a {\n  color: #2563eb;\n  font-weight: 600;\n}\n@media (max-width: 520px) {\n  #iban-app .iban-input-group { flex-direction: column; }\n  #iban-app .btn { width: 100%; }\n}\n\u003c/style\u003e\n\u003ch2\u003eIBAN番号を入力してください\u003c/h2\u003e\n\u003cdiv class=\"iban-input-group\"\u003e\n  \u003cinput\n    id=\"iban-input\"\n    type=\"text\"\n    placeholder=\"例: DE89 3704 0044 0532 0130 00\"\n    maxlength=\"42\"\n    autocomplete=\"off\"\n    spellcheck=\"false\"\n  /\u003e\n  \u003cbutton class=\"btn btn-primary\" onclick=\"ibanValidate()\"\u003e検証する\u003c/button\u003e\n  \u003cbutton class=\"btn btn-clear\" onclick=\"ibanClear()\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"iban-result\" class=\"result-box\"\u003e\u003c/div\u003e\n\u003cdiv id=\"iban-details\" class=\"details-grid\"\u003e\u003c/div\u003e\n\u003cdiv class=\"examples-section\"\u003e\n  \u003cdiv class=\"examples-label\"\u003eサンプルで試す:\u003c/div\u003e\n  \u003cdiv class=\"example-chips\"\u003e\n    \u003cspan class=\"chip\" onclick=\"ibanSetExample('DE89370400440532013000')\"\u003eDE（ドイツ）\u003c/span\u003e\n    \u003cspan class=\"chip\" onclick=\"ibanSetExample('GB29NWBK60161331926819')\"\u003eGB（イギリス）\u003c/span\u003e\n    \u003cspan class=\"chip\" onclick=\"ibanSetExample('FR7630006000011234567890189')\"\u003eFR（フランス）\u003c/span\u003e\n    \u003cspan class=\"chip\" onclick=\"ibanSetExample('ES9121000418450200051332')\"\u003eES（スペイン）\u003c/span\u003e\n    \u003cspan class=\"chip\" onclick=\"ibanSetExample('IT60X0542811101000000123456')\"\u003eIT（イタリア）\u003c/span\u003e\n    \u003cspan class=\"chip\" onclick=\"ibanSetExample('NL91ABNA0417164300')\"\u003eNL（オランダ）\u003c/span\u003e\n    \u003cspan class=\"chip\" onclick=\"ibanSetExample('BE68539007547034')\"\u003eBE（ベルギー）\u003c/span\u003e\n    \u003cspan class=\"chip\" onclick=\"ibanSetExample('AT611904300234573201')\"\u003eAT（オーストリア）\u003c/span\u003e\n    \u003cspan class=\"chip\" onclick=\"ibanSetExample('CH9300762011623852957')\"\u003eCH（スイス）\u003c/span\u003e\n    \u003cspan class=\"chip\" onclick=\"ibanSetExample('IE29AIBK93115212345678')\"\u003eIE（アイルランド）\u003c/span\u003e\n    \u003cspan class=\"chip\" onclick=\"ibanSetExample('DE00370400440532013000')\"\u003e無効チェックサム\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003e国別IBANの桁数一覧\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003e国旗\u003c/th\u003e\n      \u003cth\u003e国名\u003c/th\u003e\n      \u003cth\u003eコード\u003c/th\u003e\n      \u003cth\u003e桁数\u003c/th\u003e\n      \u003cth\u003eフォーマット\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody id=\"iban-country-table\"\u003e\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdiv class=\"cta-box\"\u003e\n  \u003cstrong\u003e海外送金・外貨取引の管理を効率化しませんか？\u003c/strong\u003e\n  IBANを使った国際送金の記帳・為替差損益の自動計算は freee会計 が便利です。\u003cbr\u003e\n  \u003e 海外送金の管理を効率化 → \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\"\u003efreee会計で外貨取引を自動管理\u003c/a\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  const COUNTRIES = [\n    { code: \"AD\", name: \"アンドラ\",           flag: \"🇦🇩\", length: 24, format: \"ADkk BBBB SSSS CCCC CCCC CCCC\",  bankLen: 4, branchLen: 4 },\n    { code: \"AT\", name: \"オーストリア\",        flag: \"🇦🇹\", length: 20, format: \"ATkk BBBB BCCC CCCC CCCC\",        bankLen: 5, branchLen: 0 },\n    { code: \"BE\", name: \"ベルギー\",            flag: \"🇧🇪\", length: 16, format: \"BEkk BBBC CCCC CCXX\",             bankLen: 3, branchLen: 0 },\n    { code: \"CH\", name: \"スイス\",              flag: \"🇨🇭\", length: 21, format: \"CHkk BBBB BCCC CCCC CCCC C\",      bankLen: 5, branchLen: 0 },\n    { code: \"CY\", name: \"キプロス\",            flag: \"🇨🇾\", length: 28, format: \"CYkk BBBS SSSS CCCC CCCC CCCC CCCC\", bankLen: 3, branchLen: 5 },\n    { code: \"CZ\", name: \"チェコ\",              flag: \"🇨🇿\", length: 24, format: \"CZkk BBBB SSSS SSCC CCCC CCCC\",   bankLen: 4, branchLen: 6 },\n    { code: \"DE\", name: \"ドイツ\",              flag: \"🇩🇪\", length: 22, format: \"DEkk BBBB BBBB CCCC CCCC CC\",     bankLen: 8, branchLen: 0 },\n    { code: \"DK\", name: \"デンマーク\",          flag: \"🇩🇰\", length: 18, format: \"DKkk BBBB CCCC CCCC CC\",          bankLen: 4, branchLen: 0 },\n    { code: \"EE\", name: \"エストニア\",          flag: \"🇪🇪\", length: 20, format: \"EEkk BBSS CCCC CCCC CCCK\",        bankLen: 2, branchLen: 2 },\n    { code: \"ES\", name: \"スペイン\",            flag: \"🇪🇸\", length: 24, format: \"ESkk BBBB SSSS KKCC CCCC CCCC\",   bankLen: 4, branchLen: 4 },\n    { code: \"FI\", name: \"フィンランド\",        flag: \"🇫🇮\", length: 18, format: \"FIkk BBBB BBCC CCCC CK\",          bankLen: 6, branchLen: 0 },\n    { code: \"FR\", name: \"フランス\",            flag: \"🇫🇷\", length: 27, format: \"FRkk BBBB BSSS SSCC CCCC CCCC CKK\", bankLen: 5, branchLen: 5 },\n    { code: \"GB\", name: \"イギリス\",            flag: \"🇬🇧\", length: 22, format: \"GBkk BBBB SSSS SSCC CCCC CC\",     bankLen: 4, branchLen: 6 },\n    { code: \"GR\", name: \"ギリシャ\",            flag: \"🇬🇷\", length: 27, format: \"GRkk BBBS SSSC CCCC CCCC CCCC CCC\", bankLen: 3, branchLen: 4 },\n    { code: \"HR\", name: \"クロアチア\",          flag: \"🇭🇷\", length: 21, format: \"HRkk BBBB BBBC CCCC CCCC C\",      bankLen: 7, branchLen: 0 },\n    { code: \"HU\", name: \"ハンガリー\",          flag: \"🇭🇺\", length: 28, format: \"HUkk BBBS SSSK CCCC CCCC CCCC CCCK\", bankLen: 3, branchLen: 4 },\n    { code: \"IE\", name: \"アイルランド\",        flag: \"🇮🇪\", length: 22, format: \"IEkk AAAA BBBB BBCC CCCC CC\",     bankLen: 4, branchLen: 6 },\n    { code: \"IT\", name: \"イタリア\",            flag: \"🇮🇹\", length: 27, format: \"ITkk KBBB BBSS SSSC CCCC CCCC CCC\", bankLen: 5, branchLen: 5 },\n    { code: \"LT\", name: \"リトアニア\",          flag: \"🇱🇹\", length: 20, format: \"LTkk BBBB BCCC CCCC CCCC\",        bankLen: 5, branchLen: 0 },\n    { code: \"LU\", name: \"ルクセンブルク\",      flag: \"🇱🇺\", length: 20, format: \"LUkk BBBС CCCC CCCC CCCC\",        bankLen: 3, branchLen: 0 },\n    { code: \"LV\", name: \"ラトビア\",            flag: \"🇱🇻\", length: 21, format: \"LVkk BBBB CCCC CCCC CCCC C\",      bankLen: 4, branchLen: 0 },\n    { code: \"MT\", name: \"マルタ\",              flag: \"🇲🇹\", length: 31, format: \"MTkk BBBB SSSS SCCC CCCC CCCC CCCC CCC\", bankLen: 4, branchLen: 5 },\n    { code: \"NL\", name: \"オランダ\",            flag: \"🇳🇱\", length: 18, format: \"NLkk BBBB CCCC CCCC CC\",          bankLen: 4, branchLen: 0 },\n    { code: \"NO\", name: \"ノルウェー\",          flag: \"🇳🇴\", length: 15, format: \"NOkk BBBB CCCC CCK\",              bankLen: 4, branchLen: 0 },\n    { code: \"PL\", name: \"ポーランド\",          flag: \"🇵🇱\", length: 28, format: \"PLkk BBBS SSSK CCCC CCCC CCCC CCCC\", bankLen: 3, branchLen: 4 },\n    { code: \"PT\", name: \"ポルトガル\",          flag: \"🇵🇹\", length: 25, format: \"PTkk BBBB SSSS CCCC CCCC CCCK K\",  bankLen: 4, branchLen: 4 },\n    { code: \"RO\", name: \"ルーマニア\",          flag: \"🇷🇴\", length: 24, format: \"ROkk BBBB CCCC CCCC CCCC CCCC\",   bankLen: 4, branchLen: 0 },\n    { code: \"SE\", name: \"スウェーデン\",        flag: \"🇸🇪\", length: 24, format: \"SEkk BBBC CCCC CCCC CCCC CCCK\",   bankLen: 3, branchLen: 0 },\n    { code: \"SI\", name: \"スロベニア\",          flag: \"🇸🇮\", length: 19, format: \"SIkk BBSS SCCC CCCC CKK\",         bankLen: 2, branchLen: 3 },\n    { code: \"SK\", name: \"スロバキア\",          flag: \"🇸🇰\", length: 24, format: \"SKkk BBBB SSSS SSCC CCCC CCCC\",   bankLen: 4, branchLen: 6 },\n  ];\n\n  function buildTable() {\n    const tbody = document.getElementById(\"iban-country-table\");\n    COUNTRIES.forEach(c =\u003e {\n      const tr = document.createElement(\"tr\");\n      tr.innerHTML = `\u003ctd\u003e${c.flag}\u003c/td\u003e\u003ctd\u003e${c.name}\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e${c.code}\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e${c.length}桁\u003c/td\u003e\u003ctd style=\"font-family:monospace;font-size:0.78rem;\"\u003e${c.format}\u003c/td\u003e`;\n      tbody.appendChild(tr);\n    });\n  }\n\n  function getCountry(code) {\n    return COUNTRIES.find(c =\u003e c.code === code.toUpperCase()) || null;\n  }\n\n  function mod97(iban) {\n    const rearranged = iban.slice(4) + iban.slice(0, 4);\n    const numeric = rearranged.split(\"\").map(ch =\u003e {\n      const code = ch.charCodeAt(0);\n      return code \u003e= 65 \u0026\u0026 code \u003c= 90 ? String(code - 55) : ch;\n    }).join(\"\");\n    let remainder = 0;\n    for (let i = 0; i \u003c numeric.length; i++) {\n      remainder = (remainder * 10 + parseInt(numeric[i], 10)) % 97;\n    }\n    return remainder;\n  }\n\n  function formatIban(raw) {\n    return raw.replace(/(.{4})/g, \"$1 \").trim();\n  }\n\n  function extractDetails(iban, country) {\n    const bban = iban.slice(4);\n    const bankCode = country ? bban.slice(0, country.bankLen) : \"\";\n    const branchCode = country \u0026\u0026 country.branchLen \u003e 0 ? bban.slice(country.bankLen, country.bankLen + country.branchLen) : \"\";\n    const accountStart = country ? country.bankLen + country.branchLen : 4;\n    const accountNum = bban.slice(accountStart);\n    return { bankCode, branchCode, accountNum };\n  }\n\n  window.ibanValidate = function() {\n    const raw = document.getElementById(\"iban-input\").value.replace(/\\s+/g, \"\").toUpperCase();\n    const input = document.getElementById(\"iban-input\");\n    const resultBox = document.getElementById(\"iban-result\");\n    const detailsGrid = document.getElementById(\"iban-details\");\n\n    if (!raw) {\n      resultBox.className = \"result-box result-invalid visible\";\n      resultBox.innerHTML = `\u003cdiv class=\"result-status\"\u003e\u0026#10007; 入力がありません\u003c/div\u003e\u003cdiv class=\"result-msg\"\u003eIBAN番号を入力してから「検証する」を押してください。\u003c/div\u003e`;\n      input.className = \"invalid\";\n      detailsGrid.className = \"details-grid\";\n      return;\n    }\n\n    if (!/^[A-Z]{2}[0-9]{2}[A-Z0-9]+$/.test(raw)) {\n      resultBox.className = \"result-box result-invalid visible\";\n      resultBox.innerHTML = `\u003cdiv class=\"result-status\"\u003e\u0026#10007; フォーマットエラー\u003c/div\u003e\u003cdiv class=\"result-msg\"\u003eIBANは2文字の国コード、2桁のチェックデジット、英数字で構成されます。入力内容を確認してください。\u003c/div\u003e`;\n      input.className = \"invalid\";\n      detailsGrid.className = \"details-grid\";\n      return;\n    }\n\n    const countryCode = raw.slice(0, 2);\n    const checkDigits = raw.slice(2, 4);\n    const country = getCountry(countryCode);\n\n    if (country \u0026\u0026 raw.length !== country.length) {\n      resultBox.className = \"result-box result-invalid visible\";\n      resultBox.innerHTML = `\u003cdiv class=\"result-status\"\u003e\u0026#10007; 桁数エラー\u003c/div\u003e\u003cdiv class=\"result-msg\"\u003e${country.flag} ${country.name}のIBANは正確に${country.length}桁必要です。入力は${raw.length}桁です。\u003c/div\u003e`;\n      input.className = \"invalid\";\n      detailsGrid.className = \"details-grid\";\n      return;\n    }\n\n    const remainder = mod97(raw);\n    if (remainder !== 1) {\n      resultBox.className = \"result-box result-invalid visible\";\n      resultBox.innerHTML = `\u003cdiv class=\"result-status\"\u003e\u0026#10007; チェックサムエラー\u003c/div\u003e\u003cdiv class=\"result-msg\"\u003eMOD 97検算に失敗しました（結果: ${remainder}、期待値: 1）。入力ミスまたはチェックデジットの誤りが考えられます。\u003c/div\u003e`;\n      input.className = \"invalid\";\n      detailsGrid.className = \"details-grid\";\n      return;\n    }\n\n    // Valid\n    input.className = \"valid\";\n    const flagHtml = country ? `\u003cspan class=\"country-flag\"\u003e${country.flag}\u003c/span\u003e` : \"\";\n    const countryName = country ? country.name : \"不明な国\";\n    resultBox.className = \"result-box result-valid visible\";\n    resultBox.innerHTML = `\u003cdiv class=\"result-status\"\u003e\u0026#10003; 有効なIBANです\u003c/div\u003e\u003cdiv class=\"result-msg\"\u003e${flagHtml}${countryName} \u0026mdash; チェックサム検証済み（MOD 97 = 1）。フォーマット済み: \u003cstrong style=\"font-family:monospace\"\u003e${formatIban(raw)}\u003c/strong\u003e\u003c/div\u003e`;\n\n    const { bankCode, branchCode, accountNum } = extractDetails(raw, country);\n\n    const cards = [\n      { label: \"国\", value: `${country ? country.flag + \" \" : \"\"}${countryName}` },\n      { label: \"国コード\", value: countryCode, mono: true },\n      { label: \"チェックデジット\", value: checkDigits, mono: true },\n      { label: \"IBAN（整形済み）\", value: formatIban(raw), mono: true },\n      { label: \"BBAN\", value: raw.slice(4), mono: true },\n    ];\n    if (bankCode) cards.push({ label: \"銀行コード\", value: bankCode, mono: true });\n    if (branchCode) cards.push({ label: \"支店コード\", value: branchCode, mono: true });\n    if (accountNum) cards.push({ label: \"口座番号部分\", value: accountNum, mono: true });\n    if (country) cards.push({ label: \"IBAN桁数\", value: `${country.length}桁` });\n\n    detailsGrid.innerHTML = cards.map(c =\u003e\n      `\u003cdiv class=\"detail-card\"\u003e\u003cdiv class=\"detail-label\"\u003e${c.label}\u003c/div\u003e\u003cdiv class=\"detail-value${c.mono ? \" mono\" : \"\"}\"\u003e${c.value}\u003c/div\u003e\u003c/div\u003e`\n    ).join(\"\");\n    detailsGrid.className = \"details-grid visible\";\n  };\n\n  window.ibanClear = function() {\n    const input = document.getElementById(\"iban-input\");\n    input.value = \"\";\n    input.className = \"\";\n    document.getElementById(\"iban-result\").className = \"result-box\";\n    document.getElementById(\"iban-details\").className = \"details-grid\";\n    input.focus();\n  };\n\n  window.ibanSetExample = function(val) {\n    const input = document.getElementById(\"iban-input\");\n    input.value = val;\n    input.className = \"\";\n    ibanValidate();\n  };\n\n  document.getElementById(\"iban-input\").addEventListener(\"input\", function() {\n    const raw = this.value.replace(/\\s+/g, \"\").toUpperCase();\n    const formatted = raw.replace(/(.{4})(?=.)/g, \"$1 \");\n    if (this.value !== formatted) this.value = formatted;\n    this.className = \"\";\n    document.getElementById(\"iban-result\").className = \"result-box\";\n    document.getElementById(\"iban-details\").className = \"details-grid\";\n  });\n\n  document.getElementById(\"iban-input\").addEventListener(\"keydown\", function(e) {\n    if (e.key === \"Enter\") ibanValidate();\n  });\n\n  buildTable();\n})();\n\u003c/script\u003e\n\u003c/div\u003e","title":"IBAN検証ツール - 国際銀行口座番号チェッカー"},{"content":" コードモード 言語: JavaScript / CSS Python / Shell HTML SQL クリア ファイルを開く ファイル未選択 対応形式: .txt, .js, .ts, .py, .html, .css, .sql, .sh, .md, .json など\n0 総行数 0 非空白行 0 空白行 0 単語数 0 文字数 0 文字数(空白除く) 0 段落数 0 平均行長 コード解析 コード行0 コメント行0 ブロックコメント行0 コード/コメント比— 最長行: 0 文字（— 行目）\n統計をエクスポート コピー 関連ツール: 文字数カウンター \u0026nbsp;|\u0026nbsp; 読書時間計算ツール 開発業務の経費管理もかんたんに\nfreee会計なら、開発ツール費用の経費精算もクラウドで一元管理。 freeeを無料で試す → 使い方 テキストエリアにテキストやコードを貼り付けるか、**「ファイルを開く」**でローカルファイルを読み込む。 入力と同時に統計がリアルタイム更新される。 コードモードをオンにすると、コード行とコメント行の内訳が表示される。言語を選択してコメント構文を切り替え可能。 **「統計をエクスポート」で .txt 形式ダウンロード、「コピー」**でクリップボードにコピー。 各統計の説明 統計項目 説明 総行数 空白行を含むすべての行 非空白行 1文字以上の内容がある行 空白行 空またはスペースのみの行 単語数 空白区切りのトークン数 文字数 スペース・改行を含む全文字数 文字数(空白除く) 空白文字を除いた文字数 段落数 空白行で区切られたブロック数 平均行長 1行あたりの平均文字数 最長行 最も文字数の多い行と文字数 コード行 コメント・空白行以外の行（コードモード） コメント行 //, #, /*, *, \u0026lt;!-- で始まる行（言語別） 言語別コメント検出 言語 行コメント ブロックコメント JavaScript / CSS // /* … */ Python / Shell # \u0026quot;\u0026quot;\u0026quot;…\u0026quot;\u0026quot;\u0026quot; / '''…''' HTML — \u0026lt;!-- … --\u0026gt; SQL -- /* … */ 関連ツール 文字数カウンター — 詳細な単語頻度・読みやすさ統計 読書時間計算ツール — コンテンツの読了時間を推定 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/line-counter/","summary":"\u003cdiv id=\"lc-app\"\u003e\n\u003cstyle\u003e\n#lc-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Yu Gothic UI\", Meiryo, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#lc-app h2 {\n  font-size: 1.15rem;\n  font-weight: 700;\n  margin: 1.4rem 0 0.5rem;\n  color: #0f172a;\n}\n#lc-app .lc-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  align-items: center;\n  margin-bottom: 10px;\n}\n#lc-app .lc-toolbar label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n}\n#lc-app select,\n#lc-app button {\n  font-size: 13px;\n  padding: 6px 14px;\n  border-radius: 7px;\n  border: 1.5px solid #cbd5e1;\n  background: #fff;\n  cursor: pointer;\n  color: #1e293b;\n  transition: border-color 0.15s, background 0.15s;\n}\n#lc-app select:focus,\n#lc-app button:focus {\n  outline: 2px solid #3b82f6;\n  outline-offset: 1px;\n}\n#lc-app button.lc-btn-primary {\n  background: #2563eb;\n  color: #fff;\n  border-color: #2563eb;\n  font-weight: 700;\n}\n#lc-app button.lc-btn-primary:hover {\n  background: #1d4ed8;\n  border-color: #1d4ed8;\n}\n#lc-app button.lc-btn-danger {\n  background: #fee2e2;\n  color: #b91c1c;\n  border-color: #fca5a5;\n  font-weight: 600;\n}\n#lc-app button.lc-btn-danger:hover {\n  background: #fecaca;\n}\n#lc-app button.lc-btn-secondary {\n  background: #f1f5f9;\n  color: #334155;\n  border-color: #cbd5e1;\n}\n#lc-app button.lc-btn-secondary:hover {\n  background: #e2e8f0;\n}\n#lc-app textarea#lc-input {\n  width: 100%;\n  min-height: 260px;\n  padding: 14px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 13.5px;\n  line-height: 1.6;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 10px;\n  resize: vertical;\n  box-sizing: border-box;\n  background: #f8fafc;\n  color: #0f172a;\n  transition: border-color 0.15s;\n}\n#lc-app textarea#lc-input:focus {\n  border-color: #3b82f6;\n  outline: none;\n  background: #fff;\n}\n#lc-app .lc-upload-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 8px;\n  flex-wrap: wrap;\n}\n#lc-app .lc-upload-label {\n  display: inline-block;\n  padding: 6px 14px;\n  background: #f1f5f9;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 600;\n  color: #334155;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#lc-app .lc-upload-label:hover {\n  background: #e2e8f0;\n}\n#lc-app input[type=\"file\"] {\n  display: none;\n}\n#lc-app .lc-file-name {\n  font-size: 12px;\n  color: #64748b;\n}\n#lc-app .lc-stats-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n  gap: 12px;\n  margin-top: 18px;\n}\n#lc-app .lc-stat-card {\n  background: #f1f5f9;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 14px 16px;\n  text-align: center;\n}\n#lc-app .lc-stat-card.lc-highlight {\n  background: #eff6ff;\n  border-color: #bfdbfe;\n}\n#lc-app .lc-stat-value {\n  font-size: 2rem;\n  font-weight: 800;\n  color: #2563eb;\n  line-height: 1.1;\n}\n#lc-app .lc-stat-label {\n  font-size: 11.5px;\n  color: #64748b;\n  margin-top: 4px;\n  font-weight: 500;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#lc-app .lc-code-stats {\n  margin-top: 18px;\n  background: #0f172a;\n  border-radius: 10px;\n  padding: 16px 20px;\n  color: #e2e8f0;\n}\n#lc-app .lc-code-stats h3 {\n  font-size: 13px;\n  font-weight: 700;\n  color: #94a3b8;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin: 0 0 10px;\n}\n#lc-app .lc-code-row {\n  display: flex;\n  justify-content: space-between;\n  font-size: 13.5px;\n  padding: 4px 0;\n  border-bottom: 1px solid #1e293b;\n}\n#lc-app .lc-code-row:last-child {\n  border-bottom: none;\n}\n#lc-app .lc-code-key {\n  color: #7dd3fc;\n}\n#lc-app .lc-code-val {\n  font-weight: 700;\n  color: #86efac;\n}\n#lc-app .lc-longest-bar {\n  margin-top: 14px;\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 14px 16px;\n}\n#lc-app .lc-longest-bar p {\n  margin: 0;\n  font-size: 13px;\n  color: #475569;\n}\n#lc-app .lc-longest-content {\n  font-family: monospace;\n  font-size: 12px;\n  background: #1e293b;\n  color: #f1f5f9;\n  border-radius: 6px;\n  padding: 8px 12px;\n  margin-top: 8px;\n  word-break: break-all;\n  white-space: pre-wrap;\n}\n#lc-app .lc-mode-toggle {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n#lc-app .lc-switch {\n  position: relative;\n  display: inline-block;\n  width: 38px;\n  height: 22px;\n}\n#lc-app .lc-switch input {\n  opacity: 0;\n  width: 0;\n  height: 0;\n}\n#lc-app .lc-slider {\n  position: absolute;\n  cursor: pointer;\n  top: 0; left: 0; right: 0; bottom: 0;\n  background: #cbd5e1;\n  border-radius: 22px;\n  transition: 0.2s;\n}\n#lc-app .lc-slider:before {\n  position: absolute;\n  content: \"\";\n  height: 16px;\n  width: 16px;\n  left: 3px;\n  bottom: 3px;\n  background: white;\n  border-radius: 50%;\n  transition: 0.2s;\n}\n#lc-app input:checked + .lc-slider {\n  background: #2563eb;\n}\n#lc-app input:checked + .lc-slider:before {\n  transform: translateX(16px);\n}\n#lc-app .lc-switch-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #334155;\n}\n#lc-app .lc-export-row {\n  margin-top: 14px;\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n#lc-app .lc-info {\n  font-size: 13px;\n  color: #64748b;\n  margin-top: 6px;\n}\n#lc-app .lc-divider {\n  border: none;\n  border-top: 1.5px solid #e2e8f0;\n  margin: 28px 0 20px;\n}\n#lc-app .lc-links {\n  font-size: 13.5px;\n  color: #475569;\n}\n#lc-app .lc-links a {\n  color: #2563eb;\n  text-decoration: none;\n  font-weight: 600;\n}\n#lc-app .lc-links a:hover {\n  text-decoration: underline;\n}\n@media (max-width: 540px) {\n  #lc-app .lc-stats-grid {\n    grid-template-columns: repeat(2, 1fr);\n  }\n}\n\u003c/style\u003e\n\u003c!-- ツールバー --\u003e\n\u003cdiv class=\"lc-toolbar\"\u003e\n  \u003cdiv class=\"lc-mode-toggle\"\u003e\n    \u003clabel class=\"lc-switch\"\u003e\n      \u003cinput type=\"checkbox\" id=\"lc-code-mode\"\u003e\n      \u003cspan class=\"lc-slider\"\u003e\u003c/span\u003e\n    \u003c/label\u003e\n    \u003cspan class=\"lc-switch-label\"\u003eコードモード\u003c/span\u003e\n  \u003c/div\u003e\n  \u003clabel for=\"lc-lang\"\u003e言語:\u003c/label\u003e\n  \u003cselect id=\"lc-lang\"\u003e\n    \u003coption value=\"js\"\u003eJavaScript / CSS\u003c/option\u003e\n    \u003coption value=\"python\"\u003ePython / Shell\u003c/option\u003e\n    \u003coption value=\"html\"\u003eHTML\u003c/option\u003e\n    \u003coption value=\"sql\"\u003eSQL\u003c/option\u003e\n  \u003c/select\u003e\n  \u003cbutton class=\"lc-btn-danger\" id=\"lc-clear-btn\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- テキストエリア --\u003e\n\u003ctextarea id=\"lc-input\" placeholder=\"テキストまたはコードをここに貼り付けるか、下からファイルをアップロードしてください…\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n\u003c!-- ファイルアップロード --\u003e\n\u003cdiv class=\"lc-upload-row\"\u003e\n  \u003clabel class=\"lc-upload-label\" for=\"lc-file-input\"\u003eファイルを開く\u003c/label\u003e\n  \u003cinput type=\"file\" id=\"lc-file-input\" accept=\".txt,.js,.ts,.py,.html,.htm,.css,.scss,.sql,.sh,.bash,.md,.json,.xml,.csv,.yaml,.yml,.rb,.java,.c,.cpp,.go,.rs,.php\"\u003e\n  \u003cspan class=\"lc-file-name\" id=\"lc-file-name\"\u003eファイル未選択\u003c/span\u003e\n\u003c/div\u003e\n\u003cp class=\"lc-info\"\u003e対応形式: .txt, .js, .ts, .py, .html, .css, .sql, .sh, .md, .json など\u003c/p\u003e","title":"行数カウンター・コード統計ツール — 無料オンライン"},{"content":"CSSの outline プロパティを即座に生成。スタイル・幅・色・オフセットをリアルタイムプレビューで調整し、コピーするだけで使えるCSSコードを取得できます。\nプリセット\n設定\n\u0026lt;!-- outline-style --\u0026gt; \u0026lt;div class=\u0026quot;ot-control-group\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;ot-style\u0026quot;\u0026gt;outline-style（スタイル）\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;ot-style\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;solid\u0026quot; selected\u0026gt;solid（実線）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;dashed\u0026quot;\u0026gt;dashed（破線）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;dotted\u0026quot;\u0026gt;dotted（点線）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;double\u0026quot;\u0026gt;double（二重線）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;groove\u0026quot;\u0026gt;groove（溝）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;ridge\u0026quot;\u0026gt;ridge（隆起）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;inset\u0026quot;\u0026gt;inset（内側）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;outset\u0026quot;\u0026gt;outset（外側）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- outline-width --\u0026gt; \u0026lt;div class=\u0026quot;ot-control-group\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;ot-width\u0026quot;\u0026gt;outline-width（幅）\u0026lt;span class=\u0026quot;ot-val\u0026quot; id=\u0026quot;ot-width-val\u0026quot;\u0026gt;3px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;ot-width\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;20\u0026quot; value=\u0026quot;3\u0026quot; step=\u0026quot;1\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- outline-color --\u0026gt; \u0026lt;div class=\u0026quot;ot-control-group\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;ot-color\u0026quot;\u0026gt;outline-color（色）\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;ot-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;ot-color\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;ot-hex-input\u0026quot; id=\u0026quot;ot-hex\u0026quot; value=\u0026quot;#4f46e5\u0026quot; maxlength=\u0026quot;9\u0026quot; spellcheck=\u0026quot;false\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- outline-offset --\u0026gt; \u0026lt;div class=\u0026quot;ot-control-group\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;ot-offset\u0026quot;\u0026gt;outline-offset（間隔）\u0026lt;span class=\u0026quot;ot-val\u0026quot; id=\u0026quot;ot-offset-val\u0026quot;\u0026gt;3px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;ot-offset\u0026quot; min=\u0026quot;-20\u0026quot; max=\u0026quot;20\u0026quot; value=\u0026quot;3\u0026quot; step=\u0026quot;1\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- compare with border toggle --\u0026gt; \u0026lt;label class=\u0026quot;ot-toggle-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ot-toggle\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ot-compare\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ot-toggle-track\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;ot-toggle-thumb\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/span\u0026gt; border と並べて比較 \u0026lt;/label\u0026gt; \u0026lt;!-- focus state toggle --\u0026gt; \u0026lt;label class=\u0026quot;ot-toggle-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ot-toggle\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ot-focus-mode\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ot-toggle-track\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;ot-toggle-thumb\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/span\u0026gt; フォーカス状態をプレビュー \u0026lt;/label\u0026gt; \u0026lt;!-- Preview --\u0026gt; \u0026lt;div class=\u0026quot;ot-preview-wrap\u0026quot;\u0026gt; \u0026lt;p class=\u0026quot;ot-section-title\u0026quot;\u0026gt;ライブプレビュー\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;ot-preview-stage\u0026quot; id=\u0026quot;ot-stage\u0026quot;\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;ot-preview-box\u0026quot; id=\u0026quot;ot-box-outline\u0026quot;\u0026gt; アウトライン \u0026lt;span class=\u0026quot;ot-label\u0026quot;\u0026gt;outline\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;ot-border-col\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ot-preview-box\u0026quot; id=\u0026quot;ot-box-border\u0026quot;\u0026gt; ボーダー \u0026lt;span class=\u0026quot;ot-label\u0026quot;\u0026gt;border\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;ot-focus-col\u0026quot; style=\u0026quot;display:none\u0026quot; class=\u0026quot;ot-focus-demo\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;ot-focus-btn\u0026quot; id=\u0026quot;ot-focus-btn\u0026quot;\u0026gt;フォーカスする\u0026lt;/button\u0026gt; \u0026lt;span class=\u0026quot;ot-focus-label\u0026quot;\u0026gt;Tabキーでフォーカス\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- CSS Output --\u0026gt; \u0026lt;div class=\u0026quot;ot-output-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ot-output-header\u0026quot;\u0026gt; \u0026lt;p class=\u0026quot;ot-section-title\u0026quot; style=\u0026quot;margin:0\u0026quot;\u0026gt;CSSコード\u0026lt;/p\u0026gt; \u0026lt;button class=\u0026quot;ot-copy-btn\u0026quot; id=\u0026quot;ot-copy-btn\u0026quot;\u0026gt; \u0026lt;svg width=\u0026quot;14\u0026quot; height=\u0026quot;14\u0026quot; viewBox=\u0026quot;0 0 16 16\u0026quot; fill=\u0026quot;none\u0026quot; aria-hidden=\u0026quot;true\u0026quot;\u0026gt; \u0026lt;rect x=\u0026quot;5\u0026quot; y=\u0026quot;5\u0026quot; width=\u0026quot;9\u0026quot; height=\u0026quot;10\u0026quot; rx=\u0026quot;1.5\u0026quot; stroke=\u0026quot;currentColor\u0026quot; stroke-width=\u0026quot;1.5\u0026quot;/\u0026gt; \u0026lt;path d=\u0026quot;M3 11H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v1\u0026quot; stroke=\u0026quot;currentColor\u0026quot; stroke-width=\u0026quot;1.5\u0026quot; stroke-linecap=\u0026quot;round\u0026quot;/\u0026gt; \u0026lt;/svg\u0026gt; CSSをコピー \u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;pre class=\u0026quot;ot-code\u0026quot; id=\u0026quot;ot-code-out\u0026quot;\u0026gt;\u0026lt;/pre\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Accessibility / Focus State Output --\u0026gt; \u0026lt;div class=\u0026quot;ot-a11y-wrap\u0026quot; id=\u0026quot;ot-a11y-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ot-output-header\u0026quot;\u0026gt; \u0026lt;p class=\u0026quot;ot-section-title\u0026quot; style=\u0026quot;margin:0\u0026quot;\u0026gt;フォーカスリング CSS（アクセシビリティ）\u0026lt;/p\u0026gt; \u0026lt;button class=\u0026quot;ot-copy-btn\u0026quot; id=\u0026quot;ot-copy-a11y-btn\u0026quot;\u0026gt; \u0026lt;svg width=\u0026quot;14\u0026quot; height=\u0026quot;14\u0026quot; viewBox=\u0026quot;0 0 16 16\u0026quot; fill=\u0026quot;none\u0026quot; aria-hidden=\u0026quot;true\u0026quot;\u0026gt; \u0026lt;rect x=\u0026quot;5\u0026quot; y=\u0026quot;5\u0026quot; width=\u0026quot;9\u0026quot; height=\u0026quot;10\u0026quot; rx=\u0026quot;1.5\u0026quot; stroke=\u0026quot;currentColor\u0026quot; stroke-width=\u0026quot;1.5\u0026quot;/\u0026gt; \u0026lt;path d=\u0026quot;M3 11H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v1\u0026quot; stroke=\u0026quot;currentColor\u0026quot; stroke-width=\u0026quot;1.5\u0026quot; stroke-linecap=\u0026quot;round\u0026quot;/\u0026gt; \u0026lt;/svg\u0026gt; コピー \u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p class=\u0026quot;ot-a11y-note\u0026quot;\u0026gt;\u0026lt;code\u0026gt;:focus-visible\u0026lt;/code\u0026gt; を使うとキーボード操作時のみフォーカスリングを表示できます（WCAG 2.4.11 推奨）。コントラスト比は隣接する色に対して最低 3:1 が必要です。\u0026lt;/p\u0026gt; \u0026lt;pre class=\u0026quot;ot-code-a11y\u0026quot; id=\u0026quot;ot-a11y-out\u0026quot;\u0026gt;\u0026lt;/pre\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ot-info\u0026quot;\u0026gt; \u0026lt;strong\u0026gt;ポイント：\u0026lt;/strong\u0026gt;\u0026lt;code\u0026gt;outline\u0026lt;/code\u0026gt; はレイアウトに影響しません。\u0026lt;code\u0026gt;border\u0026lt;/code\u0026gt; と異なり、周囲の要素をずらさずに要素の外側に描画されます。\u0026lt;code\u0026gt;outline-offset\u0026lt;/code\u0026gt; で要素とアウトラインの間隔を調整できます。 \u0026lt;/div\u0026gt; フリーランス・個人事業主の方へ — freee 会計で確定申告をかんたんに Web制作・デザイン案件の収支管理から確定申告まで、freee なら自動仕訳と青色申告書類の自動作成でスムーズに完結します。初年度無料プランあり。\nfreee を無料で試す 使い方 outline-style のドロップダウンでスタイルを選択（solid・dashed・dotted・double など）。 outline-width スライダーで太さを 1〜20px の範囲で調整。 outline-color のカラーピッカーまたは HEX 入力欄で色を設定。 outline-offset で要素とアウトラインの間隔をマイナス値（内側）〜20px の範囲で調整。 border と並べて比較 を ON にすると、レイアウトへの影響の違いを並べて確認できます。 フォーカス状態をプレビュー を ON にするとボタンにアウトラインが適用され、フォーカスリングの見た目を確認できます。 CSSをコピー ボタンでコードをクリップボードにコピーして完了。 outline と border の違い プロパティ レイアウトに影響 border-radius に追従 オフセット指定 outline なし 部分的 あり（outline-offset） border あり あり なし outline はレイアウトをずらさないため、フォーカスインジケーターに最適です。コンテンツの折り返しや余白への影響なしに、要素の外側にリングを描画できます。\nアクセシビリティのポイント WCAG 2.4.11（WCAG 2.2 AA 基準）では、フォーカスインジケーターが隣接する色に対して最低 3:1 のコントラスト比を持つことが求められます。 outline: none を指定する場合は、必ず代替のフォーカス表示を提供してください。 :focus-visible を使うと、マウス操作ではなくキーボード操作時のみフォーカスリングを表示できます。 outline-offset: 2〜4px を設定すると、角丸要素でも視認性が向上します。 関連ツール CSS ボーダーラジアス ジェネレーター CSS ボックスシャドウ ジェネレーター CSS ボタン ジェネレーター ※ freee へのリンクはアフィリエイトリンクを含む場合があります。\n本ページにはアフィリエイト広告（A8.net）が含まれています。 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/css-outline-generator/","summary":"\u003cp\u003eCSSの \u003ccode\u003eoutline\u003c/code\u003e プロパティを即座に生成。スタイル・幅・色・オフセットをリアルタイムプレビューで調整し、コピーするだけで使えるCSSコードを取得できます。\u003c/p\u003e\n\u003cdiv id=\"ot-app\"\u003e\n\u003cstyle\u003e\n/* ── Reset \u0026 layout ─────────────────────────────────────────────── */\n#ot-app *,\n#ot-app *::before,\n#ot-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n#ot-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic UI\", \"Segoe UI\", sans-serif;\n  font-size: 15px;\n  color: #1a1a2e;\n  background: #f8f9fc;\n  border-radius: 12px;\n  padding: 0 0 32px;\n  max-width: 900px;\n}\n\n/* ── Section headings ────────────────────────────────────────────── */\n#ot-app .ot-section-title {\n  font-size: 12px;\n  font-weight: 700;\n  letter-spacing: .06em;\n  text-transform: uppercase;\n  color: #6b7280;\n  margin-bottom: 12px;\n}\n\n/* ── Two-column layout ───────────────────────────────────────────── */\n#ot-app .ot-layout {\n  display: grid;\n  grid-template-columns: 300px 1fr;\n  gap: 20px;\n  align-items: start;\n}\n@media (max-width: 680px) {\n  #ot-app .ot-layout { grid-template-columns: 1fr; }\n}\n\n/* ── Controls panel ──────────────────────────────────────────────── */\n#ot-app .ot-panel {\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 10px;\n  padding: 20px;\n  display: flex;\n  flex-direction: column;\n  gap: 18px;\n}\n\n#ot-app .ot-control-group { display: flex; flex-direction: column; gap: 6px; }\n\n#ot-app label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #374151;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n#ot-app label span.ot-val {\n  font-weight: 700;\n  color: #4f46e5;\n  font-size: 12px;\n  background: #eef2ff;\n  border-radius: 4px;\n  padding: 1px 6px;\n  min-width: 44px;\n  text-align: center;\n}\n\n#ot-app select,\n#ot-app input[type=\"range\"] {\n  width: 100%;\n}\n\n#ot-app select {\n  appearance: none;\n  background: #f3f4f6 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%236b7280' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E\") no-repeat right 10px center;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  padding: 7px 30px 7px 10px;\n  font-size: 13px;\n  color: #1a1a2e;\n  cursor: pointer;\n}\n#ot-app select:focus { outline: 2px solid #4f46e5; outline-offset: 1px; }\n\n#ot-app input[type=\"range\"] {\n  accent-color: #4f46e5;\n  height: 4px;\n  cursor: pointer;\n}\n\n/* Color row */\n#ot-app .ot-color-row {\n  display: grid;\n  grid-template-columns: 44px 1fr;\n  gap: 8px;\n  align-items: center;\n}\n#ot-app input[type=\"color\"] {\n  width: 44px;\n  height: 36px;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  padding: 2px;\n  cursor: pointer;\n  background: #fff;\n}\n#ot-app .ot-hex-input {\n  width: 100%;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  padding: 7px 10px;\n  font-size: 13px;\n  font-family: \"Fira Mono\", \"Courier New\", monospace;\n  color: #1a1a2e;\n}\n#ot-app .ot-hex-input:focus { outline: 2px solid #4f46e5; outline-offset: 1px; }\n\n/* Toggle */\n#ot-app .ot-toggle-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  font-size: 13px;\n  font-weight: 600;\n  color: #374151;\n  cursor: pointer;\n  user-select: none;\n}\n#ot-app .ot-toggle {\n  position: relative;\n  width: 40px;\n  height: 22px;\n  flex-shrink: 0;\n}\n#ot-app .ot-toggle input { opacity: 0; width: 0; height: 0; position: absolute; }\n#ot-app .ot-toggle-track {\n  position: absolute;\n  inset: 0;\n  background: #d1d5db;\n  border-radius: 11px;\n  transition: background .2s;\n}\n#ot-app .ot-toggle input:checked ~ .ot-toggle-track { background: #4f46e5; }\n#ot-app .ot-toggle-thumb {\n  position: absolute;\n  top: 3px;\n  left: 3px;\n  width: 16px;\n  height: 16px;\n  background: #fff;\n  border-radius: 50%;\n  transition: transform .2s;\n  box-shadow: 0 1px 3px rgba(0,0,0,.2);\n}\n#ot-app .ot-toggle input:checked ~ .ot-toggle-thumb { transform: translateX(18px); }\n\n/* ── Right column ────────────────────────────────────────────────── */\n#ot-app .ot-right { display: flex; flex-direction: column; gap: 20px; }\n\n/* ── Preview area ────────────────────────────────────────────────── */\n#ot-app .ot-preview-wrap {\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 10px;\n  padding: 24px;\n}\n#ot-app .ot-preview-stage {\n  display: flex;\n  gap: 32px;\n  flex-wrap: wrap;\n  justify-content: center;\n  align-items: center;\n  min-height: 140px;\n  background: repeating-conic-gradient(#f0f0f0 0% 25%, #fff 0% 50%) 0 0 / 16px 16px;\n  border-radius: 8px;\n  padding: 32px 24px;\n}\n#ot-app .ot-preview-box {\n  width: 120px;\n  height: 80px;\n  background: #fff;\n  border-radius: 6px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 12px;\n  font-weight: 600;\n  color: #6b7280;\n  flex-direction: column;\n  gap: 4px;\n  transition: outline .15s, border .15s, outline-offset .15s;\n}\n#ot-app .ot-preview-box .ot-label {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .05em;\n  text-transform: uppercase;\n  color: #9ca3af;\n  margin-top: 4px;\n}\n\n/* Focus demo */\n#ot-app .ot-focus-demo {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n}\n#ot-app .ot-focus-btn {\n  padding: 8px 18px;\n  border: none;\n  border-radius: 6px;\n  background: #4f46e5;\n  color: #fff;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: outline .15s, outline-offset .15s;\n}\n#ot-app .ot-focus-label {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: .05em;\n  text-transform: uppercase;\n  color: #9ca3af;\n}\n\n/* ── Presets ─────────────────────────────────────────────────────── */\n#ot-app .ot-presets-wrap {\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 10px;\n  padding: 20px;\n}\n#ot-app .ot-presets-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n  gap: 10px;\n}\n#ot-app .ot-preset-btn {\n  border: 1.5px solid #e5e7eb;\n  border-radius: 8px;\n  padding: 10px 12px;\n  background: #f9fafb;\n  font-size: 12px;\n  font-weight: 600;\n  color: #374151;\n  cursor: pointer;\n  text-align: left;\n  transition: border-color .15s, background .15s;\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n#ot-app .ot-preset-btn:hover { border-color: #4f46e5; background: #eef2ff; color: #4f46e5; }\n#ot-app .ot-preset-swatch {\n  width: 100%;\n  height: 28px;\n  border-radius: 4px;\n  background: #f3f4f6;\n  margin-bottom: 4px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n/* ── Output ──────────────────────────────────────────────────────── */\n#ot-app .ot-output-wrap {\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 10px;\n  padding: 20px;\n}\n#ot-app .ot-output-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 12px;\n}\n#ot-app .ot-copy-btn {\n  background: #4f46e5;\n  color: #fff;\n  border: none;\n  border-radius: 6px;\n  padding: 7px 16px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background .15s;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n#ot-app .ot-copy-btn:hover { background: #4338ca; }\n#ot-app .ot-copy-btn.copied { background: #059669; }\n#ot-app pre.ot-code {\n  background: #0f172a;\n  border-radius: 8px;\n  padding: 16px 18px;\n  overflow-x: auto;\n  font-family: \"Fira Mono\", \"Courier New\", monospace;\n  font-size: 13px;\n  line-height: 1.7;\n  white-space: pre;\n  color: #e2e8f0;\n}\n#ot-app .ot-kw   { color: #818cf8; }\n#ot-app .ot-prop { color: #7dd3fc; }\n#ot-app .ot-val-c{ color: #86efac; }\n#ot-app .ot-punc { color: #94a3b8; }\n#ot-app .ot-comment { color: #64748b; font-style: italic; }\n\n/* ── A11y output ─────────────────────────────────────────────────── */\n#ot-app .ot-a11y-wrap {\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 10px;\n  padding: 20px;\n}\n#ot-app .ot-a11y-note {\n  font-size: 12px;\n  color: #6b7280;\n  margin-bottom: 12px;\n  line-height: 1.6;\n}\n#ot-app pre.ot-code-a11y {\n  background: #0f172a;\n  border-radius: 8px;\n  padding: 16px 18px;\n  overflow-x: auto;\n  font-family: \"Fira Mono\", \"Courier New\", monospace;\n  font-size: 13px;\n  line-height: 1.7;\n  white-space: pre;\n  color: #e2e8f0;\n}\n\n/* ── Info strip ──────────────────────────────────────────────────── */\n#ot-app .ot-info {\n  background: #eef2ff;\n  border-left: 3px solid #4f46e5;\n  border-radius: 0 6px 6px 0;\n  padding: 12px 16px;\n  font-size: 12.5px;\n  color: #3730a3;\n  line-height: 1.6;\n}\n\n/* ── freee CTA ───────────────────────────────────────────────────── */\n#ot-app .ot-freee-cta {\n  background: linear-gradient(135deg, #00c4a2 0%, #00a37a 100%);\n  border-radius: 10px;\n  padding: 24px 28px;\n  color: #fff;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n#ot-app .ot-freee-cta h3 {\n  font-size: 16px;\n  font-weight: 700;\n  line-height: 1.4;\n}\n#ot-app .ot-freee-cta p {\n  font-size: 13px;\n  opacity: .9;\n  line-height: 1.6;\n}\n#ot-app .ot-freee-btn {\n  display: inline-block;\n  background: #fff;\n  color: #00a37a;\n  font-weight: 700;\n  font-size: 14px;\n  border-radius: 6px;\n  padding: 10px 22px;\n  text-decoration: none;\n  align-self: flex-start;\n  transition: opacity .15s;\n}\n#ot-app .ot-freee-btn:hover { opacity: .85; }\n\u003c/style\u003e\n\u003c!-- ── Presets ──────────────────────────────────────────────── --\u003e\n\u003cdiv class=\"ot-presets-wrap\"\u003e\n  \u003cp class=\"ot-section-title\"\u003eプリセット\u003c/p\u003e","title":"CSSアウトライン ジェネレーター"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n配当金シミュレーター【2026年版】 投資額と配当利回りを入力して、年間・月間の配当収入とNISA非課税効果を自動計算します。配当再投資による複利効果も確認できます。\n投資額（万円） 10万500万円5,000万 配当利回り（年率） 0.5%3.5%10% 口座タイプ 新NISA（非課税） 特定口座（課税20.315%） 配当再投資 する（複利効果あり） しない（配当受取） 運用期間 1年10年30年 人気の高配当ETF・銘柄比較 NISA vs 特定口座：配当手取り比較 配当投資の基礎知識 配当金とは 配当金は、企業が稼いだ利益の一部を株主に還元するお金です。株式やETFを保有しているだけで、年に1〜4回配当金を受け取れます。\n配当利回りの計算方法 配 当 利 回 り （ % ） = 年 間 配 当 金 ÷ 株 価 × 1 0 0 例：株価1,000円の銘柄が年間40円の配当を出す場合、配当利回りは4.0%です。\n高配当投資のメリット・デメリット メリット デメリット 定期的なインカム収入 株価下落リスクあり 再投資で複利効果 減配・無配のリスク NISAなら非課税 成長株と比べリターンが劣る場合も 精神的に安定しやすい 配当利回りだけで判断は危険 新NISAで配当投資を始める 新NISAの成長投資枠（年間240万円）を使えば、配当金が非課税で受け取れます。通常は20.315%の税金がかかるため、利回り3.5%の銘柄なら実質利回りが約0.7%向上します。\n配当投資を始めるなら、NISA口座の開設が第一歩です。楽天証券でNISA口座を開設すれば、国内株・米国ETFの配当金が非課税になります。\n積立投資と配当投資を組み合わせるなら、新NISAシミュレーター で積立枠の運用も確認してみてください。\n関連記事\n新NISAシミュレーター iDeCo節税シミュレーター 複利計算シミュレーター 手取り計算シミュレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 新NISA おすすめ銘柄 初心者向け完全ガイド【2026年最新版】 SBI証券 楽天証券 比較 2026年版！どちらを選ぶべきか徹底解説 株の始め方 初心者ガイド！必要な金額と最初の一歩を完全解説【2026年版】 ","permalink":"https://productivity-works.com/ja/tools/haitoukin-simulator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"配当金シミュレーター2026年版\"\u003e配当金シミュレーター【2026年版】\u003c/h1\u003e\n\u003cp\u003e投資額と配当利回りを入力して、\u003cstrong\u003e年間・月間の配当収入\u003c/strong\u003eと\u003cstrong\u003eNISA非課税効果\u003c/strong\u003eを自動計算します。配当再投資による複利効果も確認できます。\u003c/p\u003e\n\u003cdiv id=\"div-calc\" style=\"max-width:700px;margin:0 auto;font-family:'Noto Sans JP',sans-serif;\"\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:20px;\"\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e投資額（万円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"divAmount\" min=\"10\" max=\"5000\" step=\"10\" value=\"500\" oninput=\"calcDiv()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:12px;color:#64748b;\"\u003e\u003cspan\u003e10万\u003c/span\u003e\u003cspan id=\"divAmtVal\" style=\"font-weight:bold;font-size:20px;color:#2563eb;\"\u003e500万円\u003c/span\u003e\u003cspan\u003e5,000万\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e配当利回り（年率）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"divYield\" min=\"0.5\" max=\"10\" step=\"0.1\" value=\"3.5\" oninput=\"calcDiv()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:12px;color:#64748b;\"\u003e\u003cspan\u003e0.5%\u003c/span\u003e\u003cspan id=\"divYldVal\" style=\"font-weight:bold;font-size:20px;color:#10b981;\"\u003e3.5%\u003c/span\u003e\u003cspan\u003e10%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:16px;\"\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e口座タイプ\u003c/label\u003e\n\u003cselect id=\"divAccount\" onchange=\"calcDiv()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#fff;\"\u003e\n\u003coption value=\"nisa\"\u003e新NISA（非課税）\u003c/option\u003e\n\u003coption value=\"tokutei\"\u003e特定口座（課税20.315%）\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e配当再投資\u003c/label\u003e\n\u003cselect id=\"divReinvest\" onchange=\"calcDiv()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#fff;\"\u003e\n\u003coption value=\"yes\"\u003eする（複利効果あり）\u003c/option\u003e\n\u003coption value=\"no\"\u003eしない（配当受取）\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e運用期間\u003c/label\u003e\n\u003cinput type=\"range\" id=\"divYears\" min=\"1\" max=\"30\" step=\"1\" value=\"10\" oninput=\"calcDiv()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:12px;color:#64748b;\"\u003e\u003cspan\u003e1年\u003c/span\u003e\u003cspan id=\"divYrsVal\" style=\"font-weight:bold;font-size:18px;color:#f59e0b;\"\u003e10年\u003c/span\u003e\u003cspan\u003e30年\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"divResult\" style=\"margin-top:24px;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"divTimeline\" style=\"margin-top:24px;padding:24px;border:2px solid #10b981;border-radius:12px;background:#f0fdf4;\"\u003e\u003c/div\u003e\n\u003cdiv style=\"margin-top:24px;padding:24px;border:2px solid #f59e0b;border-radius:12px;background:#fffbeb;\"\u003e\n\u003ch3 style=\"margin:0 0 12px;color:#92400e;font-size:16px;\"\u003e人気の高配当ETF・銘柄比較\u003c/h3\u003e\n\u003cdiv id=\"divETF\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:24px;padding:24px;border:2px solid #8b5cf6;border-radius:12px;background:#f5f3ff;\"\u003e\n\u003ch3 style=\"margin:0 0 12px;color:#6d28d9;font-size:16px;\"\u003eNISA vs 特定口座：配当手取り比較\u003c/h3\u003e\n\u003cdiv id=\"divNISA\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction fmt(n){return Math.round(n).toLocaleString('ja-JP');}\n\nfunction calcDiv(){\n  var amount=+document.getElementById('divAmount').value;\n  var yieldRate=+document.getElementById('divYield').value;\n  var account=document.getElementById('divAccount').value;\n  var reinvest=document.getElementById('divReinvest').value;\n  var years=+document.getElementById('divYears').value;\n\n  document.getElementById('divAmtVal').textContent=fmt(amount)+'万円';\n  document.getElementById('divYldVal').textContent=yieldRate.toFixed(1)+'%';\n  document.getElementById('divYrsVal').textContent=years+'年';\n\n  var principal=amount*10000;\n  var rate=yieldRate/100;\n  var taxRate=account==='nisa'?0:0.20315;\n\n  // Annual dividend (year 1)\n  var annualDiv=principal*rate;\n  var annualAfterTax=annualDiv*(1-taxRate);\n  var monthlyAfterTax=annualAfterTax/12;\n\n  // Result summary\n  var html='\u003cdiv style=\"text-align:center;padding:20px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e';\n  html+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003e年間配当収入（税引後）\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:40px;font-weight:bold;color:#10b981;\"\u003e'+fmt(annualAfterTax)+'\u003cspan style=\"font-size:16px;\"\u003e円\u003c/span\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:14px;color:#64748b;margin-top:4px;\"\u003e月額 約 \u003cstrong style=\"color:#2563eb;\"\u003e'+fmt(monthlyAfterTax)+'円\u003c/strong\u003e\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n\n  html+='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-top:16px;text-align:center;\"\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e税引前配当\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;color:#1e293b;\"\u003e'+fmt(annualDiv)+'\u003cspan style=\"font-size:11px;\"\u003e円/年\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  var taxAmount=annualDiv*taxRate;\n  html+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e税金\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;color:'+(taxRate\u003e0?'#ef4444':'#10b981')+';\"\u003e'+fmt(taxAmount)+'\u003cspan style=\"font-size:11px;\"\u003e円/年\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e配当利回り（税引後）\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;color:#f59e0b;\"\u003e'+(yieldRate*(1-taxRate)).toFixed(2)+'\u003cspan style=\"font-size:11px;\"\u003e%\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n\n  if(account==='nisa'){\n    html+='\u003cdiv style=\"margin-top:8px;text-align:center;font-size:12px;color:#10b981;font-weight:bold;\"\u003eNISA口座なら配当金が非課税！年間 '+fmt(annualDiv*0.20315)+' 円の節税効果\u003c/div\u003e';\n  }\n\n  document.getElementById('divResult').innerHTML=html;\n\n  // Timeline table\n  var thtml='\u003ch3 style=\"margin:0 0 12px;color:#166534;font-size:16px;\"\u003e配当収入の推移（'+years+'年間）\u003c/h3\u003e';\n  thtml+='\u003ctable style=\"width:100%;border-collapse:collapse;font-size:13px;\"\u003e';\n  thtml+='\u003ctr style=\"border-bottom:2px solid #10b981;\"\u003e\u003cth style=\"text-align:left;padding:6px;\"\u003e年\u003c/th\u003e\u003cth style=\"text-align:right;padding:6px;\"\u003e投資元本\u003c/th\u003e\u003cth style=\"text-align:right;padding:6px;\"\u003e年間配当\u003c/th\u003e\u003cth style=\"text-align:right;padding:6px;\"\u003e累計配当\u003c/th\u003e\u003c/tr\u003e';\n\n  var balance=principal;\n  var totalDiv=0;\n  var showYears=[];\n  if(years\u003c=10){for(var i=1;i\u003c=years;i++) showYears.push(i);}\n  else{showYears=[1,2,3,5];for(var i=10;i\u003c=years;i+=5) showYears.push(i);if(showYears[showYears.length-1]!==years) showYears.push(years);}\n\n  var yearData=[];\n  for(var y=1;y\u003c=years;y++){\n    var div=balance*rate;\n    var divNet=div*(1-taxRate);\n    totalDiv+=divNet;\n    if(reinvest==='yes') balance+=divNet;\n    yearData.push({year:y,balance:balance,div:divNet,total:totalDiv});\n  }\n\n  for(var i=0;i\u003cshowYears.length;i++){\n    var d=yearData[showYears[i]-1];\n    var bg=i%2===0?'#fff':'#f0fdf4';\n    var bold=showYears[i]===years?'font-weight:bold;':'';\n    thtml+='\u003ctr style=\"background:'+bg+';'+bold+'\"\u003e';\n    thtml+='\u003ctd style=\"padding:6px;\"\u003e'+d.year+'年目\u003c/td\u003e';\n    thtml+='\u003ctd style=\"padding:6px;text-align:right;\"\u003e'+fmt(d.balance)+'円\u003c/td\u003e';\n    thtml+='\u003ctd style=\"padding:6px;text-align:right;\"\u003e'+fmt(d.div)+'円\u003c/td\u003e';\n    thtml+='\u003ctd style=\"padding:6px;text-align:right;color:#10b981;\"\u003e'+fmt(d.total)+'円\u003c/td\u003e';\n    thtml+='\u003c/tr\u003e';\n  }\n  thtml+='\u003c/table\u003e';\n\n  var finalData=yearData[years-1];\n  var gain=finalData.balance-principal+finalData.total*(reinvest==='yes'?0:1);\n  thtml+='\u003cdiv style=\"margin-top:12px;padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;text-align:center;\"\u003e';\n  thtml+='\u003cspan style=\"font-size:13px;color:#64748b;\"\u003e'+years+'年後の資産総額: \u003c/span\u003e';\n  thtml+='\u003cspan style=\"font-size:20px;font-weight:bold;color:#166534;\"\u003e'+fmt(reinvest==='yes'?finalData.balance:principal)+'円\u003c/span\u003e';\n  if(reinvest==='yes'){\n    thtml+='\u003cspan style=\"font-size:13px;color:#64748b;\"\u003e + 受取配当累計: \u003c/span\u003e';\n    thtml+='\u003cspan style=\"font-size:13px;font-weight:bold;color:#10b981;\"\u003e再投資済み\u003c/span\u003e';\n  } else {\n    thtml+='\u003cspan style=\"font-size:13px;color:#64748b;\"\u003e + 受取配当累計: \u003c/span\u003e';\n    thtml+='\u003cspan style=\"font-size:20px;font-weight:bold;color:#10b981;\"\u003e'+fmt(finalData.total)+'円\u003c/span\u003e';\n  }\n  thtml+='\u003c/div\u003e';\n\n  if(reinvest==='yes'){\n    var noReinvestTotal=principal*rate*(1-taxRate)*years;\n    var diff=finalData.total-noReinvestTotal;\n    thtml+='\u003cdiv style=\"margin-top:8px;font-size:12px;color:#166534;text-align:center;\"\u003e配当再投資の複利効果: \u003cstrong\u003e+'+fmt(diff)+'円\u003c/strong\u003e（再投資なしと比較）\u003c/div\u003e';\n  }\n\n  document.getElementById('divTimeline').innerHTML=thtml;\n\n  // ETF comparison\n  var etfs=[\n    {name:'VYM',desc:'バンガード米国高配当',yield:2.8,type:'米国ETF'},\n    {name:'HDV',desc:'iシェアーズ高配当',yield:3.5,type:'米国ETF'},\n    {name:'SPYD',desc:'S\u0026P500高配当',yield:4.5,type:'米国ETF'},\n    {name:'1489',desc:'日経高配当50',yield:3.2,type:'国内ETF'},\n    {name:'2914',desc:'日本たばこ産業(JT)',yield:4.8,type:'個別株'},\n    {name:'8593',desc:'三菱HCキャピタル',yield:3.8,type:'個別株'}\n  ];\n\n  var ehtml='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:10px;\"\u003e';\n  for(var i=0;i\u003cetfs.length;i++){\n    var annDiv=principal*etfs[i].yield/100*(account==='nisa'?1:0.79685);\n    ehtml+='\u003cdiv style=\"padding:10px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e';\n    ehtml+='\u003cdiv style=\"display:flex;justify-content:space-between;align-items:center;\"\u003e';\n    ehtml+='\u003cdiv\u003e\u003cspan style=\"font-weight:bold;font-size:14px;color:#1e293b;\"\u003e'+etfs[i].name+'\u003c/span\u003e\u003cspan style=\"font-size:11px;color:#64748b;margin-left:4px;\"\u003e'+etfs[i].type+'\u003c/span\u003e\u003c/div\u003e';\n    ehtml+='\u003cspan style=\"font-size:14px;font-weight:bold;color:#10b981;\"\u003e'+etfs[i].yield+'%\u003c/span\u003e';\n    ehtml+='\u003c/div\u003e';\n    ehtml+='\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e'+etfs[i].desc+'\u003c/div\u003e';\n    ehtml+='\u003cdiv style=\"font-size:12px;margin-top:4px;color:#2563eb;\"\u003e年間配当: \u003cstrong\u003e'+fmt(annDiv)+'円\u003c/strong\u003e（税引後）\u003c/div\u003e';\n    ehtml+='\u003c/div\u003e';\n  }\n  ehtml+='\u003c/div\u003e';\n  ehtml+='\u003cdiv style=\"margin-top:8px;font-size:11px;color:#92400e;text-align:center;\"\u003e※配当利回りは2026年5月時点の参考値です。実際の配当は変動します。\u003c/div\u003e';\n  document.getElementById('divETF').innerHTML=ehtml;\n\n  // NISA vs Tokutei comparison\n  var nisaDiv=principal*rate;\n  var tokuteiDiv=nisaDiv*0.79685;\n  var diff10=nisaDiv*10-tokuteiDiv*10;\n  var nhtml='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:16px;text-align:center;\"\u003e';\n  nhtml+='\u003cdiv style=\"padding:16px;background:#fff;border-radius:8px;border:2px solid #10b981;\"\u003e';\n  nhtml+='\u003cdiv style=\"font-size:12px;color:#166534;font-weight:bold;\"\u003e新NISA（非課税）\u003c/div\u003e';\n  nhtml+='\u003cdiv style=\"font-size:24px;font-weight:bold;color:#10b981;\"\u003e'+fmt(nisaDiv)+'\u003cspan style=\"font-size:12px;\"\u003e円/年\u003c/span\u003e\u003c/div\u003e';\n  nhtml+='\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e10年累計: '+fmt(nisaDiv*10)+'円\u003c/div\u003e';\n  nhtml+='\u003c/div\u003e';\n  nhtml+='\u003cdiv style=\"padding:16px;background:#fff;border-radius:8px;border:2px solid #94a3b8;\"\u003e';\n  nhtml+='\u003cdiv style=\"font-size:12px;color:#64748b;font-weight:bold;\"\u003e特定口座（課税）\u003c/div\u003e';\n  nhtml+='\u003cdiv style=\"font-size:24px;font-weight:bold;color:#64748b;\"\u003e'+fmt(tokuteiDiv)+'\u003cspan style=\"font-size:12px;\"\u003e円/年\u003c/span\u003e\u003c/div\u003e';\n  nhtml+='\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e10年累計: '+fmt(tokuteiDiv*10)+'円\u003c/div\u003e';\n  nhtml+='\u003c/div\u003e';\n  nhtml+='\u003c/div\u003e';\n  nhtml+='\u003cdiv style=\"margin-top:12px;text-align:center;padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e';\n  nhtml+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003eNISAなら10年間で\u003c/div\u003e';\n  nhtml+='\u003cdiv style=\"font-size:28px;font-weight:bold;color:#10b981;\"\u003e+'+fmt(diff10)+'\u003cspan style=\"font-size:14px;\"\u003e円\u003c/span\u003e\u003c/div\u003e';\n  nhtml+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003e多く受け取れます\u003c/div\u003e';\n  nhtml+='\u003c/div\u003e';\n  document.getElementById('divNISA').innerHTML=nhtml;\n}\n\ndocument.addEventListener('DOMContentLoaded',function(){calcDiv();});\ncalcDiv();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"配当投資の基礎知識\"\u003e配当投資の基礎知識\u003c/h2\u003e\n\u003ch3 id=\"配当金とは\"\u003e配当金とは\u003c/h3\u003e\n\u003cp\u003e配当金は、企業が稼いだ利益の一部を株主に還元するお金です。株式やETFを保有しているだけで、年に1〜4回配当金を受け取れます。\u003c/p\u003e","title":"配当金シミュレーター｜投資額・利回りから年間配当収入を自動計算【2026年版】"},{"content":" 進数変換ツール 入力 数値 入力基数 2進数（Binary） 8進数（Octal） 10進数（Decimal） 16進数（Hex） 変換結果 2進数（Binary） — \u0026#x2398; 8進数（Octal） — \u0026#x2398; 10進数（Decimal） — \u0026#x2398; 16進数（Hexadecimal） — \u0026#x2398; カスタム基数（2〜36） 12進数 — \u0026#x2398; ビット表示 8ビット 16ビット 32ビット 2の補数（負数表現） ASCII ビット演算 オペランドB（10進数） AND A AND B — — \u0026#x2398; OR A OR B — — \u0026#x2398; XOR A XOR B — — \u0026#x2398; NOT NOT A（32ビット） — — \u0026#x2398; Aを ビットシフト： \u0026#x00AB; 左シフト（SHL） 右シフト（SHR） \u0026#x00BB; SHL 左シフト結果 — — \u0026#x2398; SHR 右シフト結果 — — \u0026#x2398; 関数電卓 → 関数電卓 行列計算 → 行列計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; ","permalink":"https://productivity-works.com/ja/tools/number-base-converter/","summary":"\u003cdiv id=\"nb-app\"\u003e\n\u003cstyle\u003e\n#nb-app *, #nb-app *::before, #nb-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n#nb-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 720px;\n  margin: 0 auto;\n  padding: 12px;\n  color: #1e293b;\n}\n#nb-app h2.nb-title {\n  font-size: 18px;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 14px;\n  letter-spacing: -0.3px;\n}\n#nb-app .nb-card {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 18px;\n  margin-bottom: 14px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.05);\n}\n#nb-app .nb-input-row {\n  display: flex;\n  gap: 10px;\n  align-items: flex-end;\n  flex-wrap: wrap;\n}\n#nb-app .nb-field {\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n  flex: 1;\n  min-width: 160px;\n}\n#nb-app .nb-field label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n}\n#nb-app .nb-input {\n  padding: 10px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 16px;\n  font-family: 'Courier New', Courier, monospace;\n  font-weight: 600;\n  color: #0f172a;\n  background: #f8fafc;\n  transition: border-color 0.2s;\n  width: 100%;\n}\n#nb-app .nb-input:focus {\n  outline: none;\n  border-color: #6366f1;\n  background: #fff;\n}\n#nb-app .nb-input.nb-error {\n  border-color: #f43f5e;\n  background: #fff1f2;\n}\n#nb-app select.nb-select {\n  padding: 10px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 14px;\n  color: #0f172a;\n  background: #f8fafc;\n  cursor: pointer;\n  min-width: 140px;\n}\n#nb-app select.nb-select:focus {\n  outline: none;\n  border-color: #6366f1;\n}\n#nb-app .nb-error-msg {\n  font-size: 12px;\n  color: #f43f5e;\n  min-height: 16px;\n  margin-top: 4px;\n}\n#nb-app .nb-results-grid {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 10px;\n  margin-bottom: 10px;\n}\n#nb-app .nb-result-item {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 12px 14px;\n  position: relative;\n}\n#nb-app .nb-result-item.nb-active {\n  border-color: #6366f1;\n  background: #eef2ff;\n}\n#nb-app .nb-result-label {\n  font-size: 11px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.6px;\n  margin-bottom: 4px;\n}\n#nb-app .nb-result-value {\n  font-family: 'Courier New', Courier, monospace;\n  font-size: 15px;\n  font-weight: 700;\n  color: #0f172a;\n  word-break: break-all;\n  line-height: 1.4;\n  padding-right: 28px;\n}\n#nb-app .nb-copy-btn {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  background: none;\n  border: none;\n  cursor: pointer;\n  color: #94a3b8;\n  font-size: 14px;\n  padding: 2px 4px;\n  border-radius: 4px;\n  transition: color 0.2s, background 0.2s;\n  line-height: 1;\n}\n#nb-app .nb-copy-btn:hover { color: #6366f1; background: #e0e7ff; }\n#nb-app .nb-copy-btn.nb-copied { color: #22c55e; }\n#nb-app .nb-custom-row {\n  display: flex;\n  gap: 10px;\n  align-items: flex-end;\n  flex-wrap: wrap;\n  margin-top: 10px;\n}\n#nb-app .nb-custom-result {\n  background: #f0fdf4;\n  border: 1.5px solid #bbf7d0;\n  border-radius: 10px;\n  padding: 12px 14px;\n  flex: 1;\n  min-width: 200px;\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  gap: 3px;\n}\n#nb-app .nb-custom-result .nb-result-label { color: #16a34a; }\n#nb-app .nb-custom-result .nb-result-value { padding-right: 28px; }\n#nb-app .nb-section-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #475569;\n  margin-bottom: 10px;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n#nb-app .nb-bit-tabs {\n  display: flex;\n  gap: 6px;\n  margin-bottom: 10px;\n  flex-wrap: wrap;\n}\n#nb-app .nb-tab-btn {\n  padding: 5px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  background: #f8fafc;\n  font-size: 12px;\n  font-weight: 600;\n  color: #475569;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#nb-app .nb-tab-btn.nb-active-tab {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n#nb-app .nb-bit-display {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 4px;\n  font-family: 'Courier New', Courier, monospace;\n}\n#nb-app .nb-bit-group {\n  display: flex;\n  gap: 2px;\n}\n#nb-app .nb-bit {\n  width: 24px;\n  height: 30px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 13px;\n  font-weight: 700;\n  border-radius: 5px;\n  border: 1.5px solid #e2e8f0;\n  background: #f8fafc;\n  color: #64748b;\n  transition: all 0.1s;\n}\n#nb-app .nb-bit.nb-one {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n#nb-app .nb-bit.nb-msb {\n  border-color: #f43f5e;\n}\n#nb-app .nb-bit-indices {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 4px;\n  margin-top: 2px;\n}\n#nb-app .nb-bit-idx-group {\n  display: flex;\n  gap: 2px;\n}\n#nb-app .nb-bit-idx {\n  width: 24px;\n  font-size: 9px;\n  color: #94a3b8;\n  text-align: center;\n}\n#nb-app .nb-twos-row {\n  margin-top: 10px;\n  background: #fef3c7;\n  border: 1.5px solid #fde68a;\n  border-radius: 8px;\n  padding: 10px 14px;\n}\n#nb-app .nb-twos-row .nb-result-label { color: #92400e; margin-bottom: 4px; }\n#nb-app .nb-twos-value {\n  font-family: 'Courier New', Courier, monospace;\n  font-size: 14px;\n  font-weight: 700;\n  color: #7c3aed;\n  word-break: break-all;\n}\n#nb-app .nb-ascii-row {\n  margin-top: 8px;\n  background: #f0fdf4;\n  border: 1.5px solid #bbf7d0;\n  border-radius: 8px;\n  padding: 10px 14px;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n#nb-app .nb-ascii-label {\n  font-size: 11px;\n  font-weight: 700;\n  color: #15803d;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n  white-space: nowrap;\n}\n#nb-app .nb-ascii-char {\n  font-family: 'Courier New', Courier, monospace;\n  font-size: 22px;\n  font-weight: 700;\n  color: #065f46;\n  background: #dcfce7;\n  border-radius: 6px;\n  width: 36px;\n  height: 36px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n#nb-app .nb-ascii-info {\n  font-size: 12px;\n  color: #166534;\n}\n#nb-app .nb-bitwise-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 10px;\n}\n#nb-app .nb-bitwise-result {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 10px 12px;\n  position: relative;\n}\n#nb-app .nb-bitwise-result .nb-result-label { margin-bottom: 4px; }\n#nb-app .nb-bitwise-result .nb-result-value { font-size: 13px; }\n#nb-app .nb-op-label {\n  font-size: 11px;\n  font-weight: 800;\n  color: #6366f1;\n  background: #e0e7ff;\n  border-radius: 4px;\n  padding: 1px 6px;\n  display: inline-block;\n  margin-bottom: 4px;\n}\n#nb-app .nb-shift-controls {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n  margin-top: 8px;\n  flex-wrap: wrap;\n}\n#nb-app .nb-shift-btn {\n  padding: 6px 14px;\n  border: 1.5px solid #6366f1;\n  border-radius: 7px;\n  background: #fff;\n  color: #6366f1;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#nb-app .nb-shift-btn:hover { background: #6366f1; color: #fff; }\n#nb-app .nb-shift-input {\n  width: 56px;\n  padding: 6px 8px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 13px;\n  text-align: center;\n}\n#nb-app .nb-shift-input:focus { outline: none; border-color: #6366f1; }\n#nb-app .nb-b-label {\n  font-size: 12px;\n  color: #64748b;\n  font-weight: 600;\n}\n#nb-app .nb-b-input {\n  padding: 8px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 15px;\n  font-family: 'Courier New', Courier, monospace;\n  font-weight: 600;\n  width: 100%;\n  background: #f8fafc;\n}\n#nb-app .nb-b-input:focus { outline: none; border-color: #6366f1; background: #fff; }\n#nb-app .nb-b-input.nb-error { border-color: #f43f5e; background: #fff1f2; }\n@media (max-width: 520px) {\n  #nb-app .nb-results-grid { grid-template-columns: 1fr; }\n  #nb-app .nb-bitwise-grid { grid-template-columns: 1fr; }\n  #nb-app .nb-bit { width: 20px; height: 26px; font-size: 11px; }\n  #nb-app .nb-bit-idx { width: 20px; }\n}\n\u003c/style\u003e\n\u003ch2 class=\"nb-title\"\u003e進数変換ツール\u003c/h2\u003e\n\u003cdiv class=\"nb-card\"\u003e\n  \u003cdiv class=\"nb-section-title\"\u003e入力\u003c/div\u003e\n  \u003cdiv class=\"nb-input-row\"\u003e\n    \u003cdiv class=\"nb-field\" style=\"flex:2;min-width:200px;\"\u003e\n      \u003clabel for=\"nb-num-input\"\u003e数値\u003c/label\u003e\n      \u003cinput id=\"nb-num-input\" class=\"nb-input\" type=\"text\" placeholder=\"数値を入力...\" autocomplete=\"off\" spellcheck=\"false\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"nb-field\" style=\"flex:1;min-width:140px;\"\u003e\n      \u003clabel for=\"nb-base-select\"\u003e入力基数\u003c/label\u003e\n      \u003cselect id=\"nb-base-select\" class=\"nb-select\"\u003e\n        \u003coption value=\"2\"\u003e2進数（Binary）\u003c/option\u003e\n        \u003coption value=\"8\"\u003e8進数（Octal）\u003c/option\u003e\n        \u003coption value=\"10\" selected\u003e10進数（Decimal）\u003c/option\u003e\n        \u003coption value=\"16\"\u003e16進数（Hex）\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"nb-error-msg\" id=\"nb-error\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"nb-card\"\u003e\n  \u003cdiv class=\"nb-section-title\"\u003e変換結果\u003c/div\u003e\n  \u003cdiv class=\"nb-results-grid\"\u003e\n    \u003cdiv class=\"nb-result-item\" id=\"nb-r-bin\"\u003e\n      \u003cdiv class=\"nb-result-label\"\u003e2進数（Binary）\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" id=\"nb-v-bin\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"nb-copy-btn\" onclick=\"nbCopy('nb-v-bin',this)\" title=\"コピー\"\u003e\u0026#x2398;\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"nb-result-item\" id=\"nb-r-oct\"\u003e\n      \u003cdiv class=\"nb-result-label\"\u003e8進数（Octal）\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" id=\"nb-v-oct\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"nb-copy-btn\" onclick=\"nbCopy('nb-v-oct',this)\" title=\"コピー\"\u003e\u0026#x2398;\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"nb-result-item\" id=\"nb-r-dec\"\u003e\n      \u003cdiv class=\"nb-result-label\"\u003e10進数（Decimal）\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" id=\"nb-v-dec\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"nb-copy-btn\" onclick=\"nbCopy('nb-v-dec',this)\" title=\"コピー\"\u003e\u0026#x2398;\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"nb-result-item\" id=\"nb-r-hex\"\u003e\n      \u003cdiv class=\"nb-result-label\"\u003e16進数（Hexadecimal）\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" id=\"nb-v-hex\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"nb-copy-btn\" onclick=\"nbCopy('nb-v-hex',this)\" title=\"コピー\"\u003e\u0026#x2398;\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"nb-custom-row\"\u003e\n    \u003cdiv class=\"nb-field\" style=\"min-width:130px;max-width:170px;\"\u003e\n      \u003clabel for=\"nb-custom-base\"\u003eカスタム基数（2〜36）\u003c/label\u003e\n      \u003cinput id=\"nb-custom-base\" class=\"nb-input\" type=\"number\" min=\"2\" max=\"36\" value=\"12\" style=\"font-size:14px;\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"nb-custom-result\"\u003e\n      \u003cdiv class=\"nb-result-label\" id=\"nb-custom-label\"\u003e12進数\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" id=\"nb-v-custom\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"nb-copy-btn\" onclick=\"nbCopy('nb-v-custom',this)\" title=\"コピー\"\u003e\u0026#x2398;\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"nb-card\"\u003e\n  \u003cdiv class=\"nb-section-title\"\u003eビット表示\u003c/div\u003e\n  \u003cdiv class=\"nb-bit-tabs\"\u003e\n    \u003cbutton class=\"nb-tab-btn nb-active-tab\" onclick=\"nbSetBits(8,this)\"\u003e8ビット\u003c/button\u003e\n    \u003cbutton class=\"nb-tab-btn\" onclick=\"nbSetBits(16,this)\"\u003e16ビット\u003c/button\u003e\n    \u003cbutton class=\"nb-tab-btn\" onclick=\"nbSetBits(32,this)\"\u003e32ビット\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"nb-bit-display\" id=\"nb-bit-display\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"nb-bit-indices\" id=\"nb-bit-indices\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"nb-twos-row\" id=\"nb-twos-wrap\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"nb-result-label\"\u003e2の補数（負数表現）\u003c/div\u003e\n    \u003cdiv class=\"nb-twos-value\" id=\"nb-twos-value\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"nb-ascii-row\" id=\"nb-ascii-wrap\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"nb-ascii-label\"\u003eASCII\u003c/div\u003e\n    \u003cdiv class=\"nb-ascii-char\" id=\"nb-ascii-char\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"nb-ascii-info\" id=\"nb-ascii-info\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"nb-card\"\u003e\n  \u003cdiv class=\"nb-section-title\"\u003eビット演算\u003c/div\u003e\n  \u003cdiv style=\"margin-bottom:10px;\"\u003e\n    \u003cdiv class=\"nb-b-label\" style=\"margin-bottom:4px;\"\u003eオペランドB（10進数）\u003c/div\u003e\n    \u003cinput id=\"nb-b-input\" class=\"nb-b-input\" type=\"text\" placeholder=\"2つ目の数値を入力（10進数）...\" autocomplete=\"off\"\u003e\n    \u003cdiv class=\"nb-error-msg\" id=\"nb-b-error\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"nb-bitwise-grid\" id=\"nb-bitwise-grid\"\u003e\n    \u003cdiv class=\"nb-bitwise-result\"\u003e\n      \u003cdiv class=\"nb-op-label\"\u003eAND\u003c/div\u003e\n      \u003cdiv class=\"nb-result-label\"\u003eA AND B\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" id=\"nb-and-dec\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" style=\"font-size:11px;color:#64748b;\" id=\"nb-and-bin\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"nb-copy-btn\" onclick=\"nbCopy('nb-and-dec',this)\" title=\"コピー\"\u003e\u0026#x2398;\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"nb-bitwise-result\"\u003e\n      \u003cdiv class=\"nb-op-label\"\u003eOR\u003c/div\u003e\n      \u003cdiv class=\"nb-result-label\"\u003eA OR B\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" id=\"nb-or-dec\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" style=\"font-size:11px;color:#64748b;\" id=\"nb-or-bin\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"nb-copy-btn\" onclick=\"nbCopy('nb-or-dec',this)\" title=\"コピー\"\u003e\u0026#x2398;\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"nb-bitwise-result\"\u003e\n      \u003cdiv class=\"nb-op-label\"\u003eXOR\u003c/div\u003e\n      \u003cdiv class=\"nb-result-label\"\u003eA XOR B\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" id=\"nb-xor-dec\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" style=\"font-size:11px;color:#64748b;\" id=\"nb-xor-bin\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"nb-copy-btn\" onclick=\"nbCopy('nb-xor-dec',this)\" title=\"コピー\"\u003e\u0026#x2398;\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"nb-bitwise-result\"\u003e\n      \u003cdiv class=\"nb-op-label\"\u003eNOT\u003c/div\u003e\n      \u003cdiv class=\"nb-result-label\"\u003eNOT A（32ビット）\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" id=\"nb-not-dec\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" style=\"font-size:11px;color:#64748b;\" id=\"nb-not-bin\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"nb-copy-btn\" onclick=\"nbCopy('nb-not-dec',this)\" title=\"コピー\"\u003e\u0026#x2398;\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"nb-shift-controls\"\u003e\n    \u003cspan class=\"nb-b-label\"\u003eAを\u003c/span\u003e\n    \u003cinput id=\"nb-shift-n\" class=\"nb-shift-input\" type=\"number\" value=\"1\" min=\"1\" max=\"31\"\u003e\n    \u003cspan class=\"nb-b-label\"\u003eビットシフト：\u003c/span\u003e\n    \u003cbutton class=\"nb-shift-btn\" onclick=\"nbShift('left')\"\u003e\u0026#x00AB; 左シフト（SHL）\u003c/button\u003e\n    \u003cbutton class=\"nb-shift-btn\" onclick=\"nbShift('right')\"\u003e右シフト（SHR） \u0026#x00BB;\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"margin-top:8px;display:flex;gap:10px;flex-wrap:wrap;\"\u003e\n    \u003cdiv class=\"nb-bitwise-result\" style=\"flex:1;min-width:180px;\"\u003e\n      \u003cdiv class=\"nb-op-label\"\u003eSHL\u003c/div\u003e\n      \u003cdiv class=\"nb-result-label\"\u003e左シフト結果\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" id=\"nb-shl-dec\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" style=\"font-size:11px;color:#64748b;\" id=\"nb-shl-bin\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"nb-copy-btn\" onclick=\"nbCopy('nb-shl-dec',this)\" title=\"コピー\"\u003e\u0026#x2398;\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"nb-bitwise-result\" style=\"flex:1;min-width:180px;\"\u003e\n      \u003cdiv class=\"nb-op-label\"\u003eSHR\u003c/div\u003e\n      \u003cdiv class=\"nb-result-label\"\u003e右シフト結果\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" id=\"nb-shr-dec\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"nb-result-value\" style=\"font-size:11px;color:#64748b;\" id=\"nb-shr-bin\"\u003e—\u003c/div\u003e\n      \u003cbutton class=\"nb-copy-btn\" onclick=\"nbCopy('nb-shr-dec',this)\" title=\"コピー\"\u003e\u0026#x2398;\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var nbBitWidth = 8;\n  var nbCurrentDec = null;\n\n  function nbGetInput() {\n    return document.getElementById('nb-num-input').value.trim();\n  }\n  function nbGetBase() {\n    return parseInt(document.getElementById('nb-base-select').value, 10);\n  }\n  function nbSetError(msg) {\n    document.getElementById('nb-error').textContent = msg || '';\n  }\n\n  function nbParseToBigInt(str, base) {\n    str = str.trim().toUpperCase();\n    var negative = false;\n    if (str.startsWith('-')) { negative = true; str = str.slice(1); }\n    if (!str) return null;\n    var digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n    var val = BigInt(0);\n    var b = BigInt(base);\n    for (var i = 0; i \u003c str.length; i++) {\n      var d = digits.indexOf(str[i]);\n      if (d \u003c 0 || d \u003e= base) return null;\n      val = val * b + BigInt(d);\n    }\n    return negative ? -val : val;\n  }\n\n  function nbConvert() {\n    var str = nbGetInput();\n    var base = nbGetBase();\n    var ids = ['nb-r-bin','nb-r-oct','nb-r-dec','nb-r-hex'];\n    ids.forEach(function(id){ document.getElementById(id).classList.remove('nb-active'); });\n    var activeMap = {2:'nb-r-bin',8:'nb-r-oct',10:'nb-r-dec',16:'nb-r-hex'};\n    if (activeMap[base]) document.getElementById(activeMap[base]).classList.add('nb-active');\n\n    if (!str) {\n      nbSetError('');\n      ['nb-v-bin','nb-v-oct','nb-v-dec','nb-v-hex','nb-v-custom'].forEach(function(id){\n        document.getElementById(id).textContent = '—';\n      });\n      nbCurrentDec = null;\n      nbRenderBits(null);\n      nbClearBitwise();\n      return;\n    }\n\n    var val = nbParseToBigInt(str, base);\n    if (val === null) {\n      nbSetError('基数' + base + 'では無効な文字が含まれています');\n      ['nb-v-bin','nb-v-oct','nb-v-dec','nb-v-hex','nb-v-custom'].forEach(function(id){\n        document.getElementById(id).textContent = '—';\n      });\n      document.getElementById('nb-num-input').classList.add('nb-error');\n      nbCurrentDec = null;\n      nbRenderBits(null);\n      nbClearBitwise();\n      return;\n    }\n    document.getElementById('nb-num-input').classList.remove('nb-error');\n    nbSetError('');\n    nbCurrentDec = val;\n\n    var prefix = val \u003c 0n ? '-' : '';\n    var absVal = val \u003c 0n ? -val : val;\n\n    document.getElementById('nb-v-bin').textContent = prefix + absVal.toString(2);\n    document.getElementById('nb-v-oct').textContent = prefix + absVal.toString(8);\n    document.getElementById('nb-v-dec').textContent = val.toString(10);\n    document.getElementById('nb-v-hex').textContent = (prefix + absVal.toString(16)).toUpperCase();\n\n    var cb = parseInt(document.getElementById('nb-custom-base').value, 10);\n    nbUpdateCustom(val, cb);\n\n    nbRenderBits(val);\n    nbUpdateBitwise();\n    nbUpdateAscii(val);\n  }\n\n  function nbUpdateCustom(val, cb) {\n    if (isNaN(cb) || cb \u003c 2 || cb \u003e 36) {\n      document.getElementById('nb-v-custom').textContent = '無効な基数';\n      document.getElementById('nb-custom-label').textContent = 'カスタム基数';\n      return;\n    }\n    document.getElementById('nb-custom-label').textContent = cb + '進数';\n    if (val === null) { document.getElementById('nb-v-custom').textContent = '—'; return; }\n    var prefix = val \u003c 0n ? '-' : '';\n    var absVal = val \u003c 0n ? -val : val;\n    document.getElementById('nb-v-custom').textContent = (prefix + absVal.toString(cb)).toUpperCase();\n  }\n\n  function nbRenderBits(val) {\n    var display = document.getElementById('nb-bit-display');\n    var indices = document.getElementById('nb-bit-indices');\n    display.innerHTML = '';\n    indices.innerHTML = '';\n\n    var bits = nbBitWidth;\n    var bitsArr = [];\n    if (val !== null) {\n      var n = val;\n      if (n \u003c 0n) {\n        var mask = (1n \u003c\u003c BigInt(bits)) - 1n;\n        n = (n \u0026 mask);\n      }\n      var binStr = n.toString(2);\n      binStr = binStr.slice(-bits).padStart(bits, '0');\n      for (var i = 0; i \u003c bits; i++) bitsArr.push(binStr[i] === '1' ? 1 : 0);\n    } else {\n      for (var i = 0; i \u003c bits; i++) bitsArr.push(0);\n    }\n\n    var groupSize = 4;\n    var groups = Math.ceil(bits / groupSize);\n    for (var g = 0; g \u003c groups; g++) {\n      var grpEl = document.createElement('div');\n      grpEl.className = 'nb-bit-group';\n      var start = g * groupSize;\n      var end = Math.min(start + groupSize, bits);\n      for (var b = start; b \u003c end; b++) {\n        var bitEl = document.createElement('div');\n        bitEl.className = 'nb-bit' + (bitsArr[b] ? ' nb-one' : '') + (b === 0 ? ' nb-msb' : '');\n        bitEl.textContent = bitsArr[b];\n        grpEl.appendChild(bitEl);\n      }\n      display.appendChild(grpEl);\n    }\n\n    for (var g = 0; g \u003c groups; g++) {\n      var idxGrp = document.createElement('div');\n      idxGrp.className = 'nb-bit-idx-group';\n      var start = g * groupSize;\n      var end = Math.min(start + groupSize, bits);\n      for (var b = start; b \u003c end; b++) {\n        var idxEl = document.createElement('div');\n        idxEl.className = 'nb-bit-idx';\n        idxEl.textContent = bits - 1 - b;\n        idxGrp.appendChild(idxEl);\n      }\n      indices.appendChild(idxGrp);\n    }\n\n    var twosWrap = document.getElementById('nb-twos-wrap');\n    if (val !== null \u0026\u0026 val \u003c 0n) {\n      twosWrap.style.display = '';\n      var mask = (1n \u003c\u003c BigInt(bits)) - 1n;\n      var tc = (val \u0026 mask);\n      document.getElementById('nb-twos-value').textContent =\n        tc.toString(2).padStart(bits, '0') + '（2進数）= ' + tc.toString(10) + '（符号なし10進数）= 0x' + tc.toString(16).toUpperCase();\n    } else {\n      twosWrap.style.display = 'none';\n    }\n  }\n\n  function nbUpdateAscii(val) {\n    var wrap = document.getElementById('nb-ascii-wrap');\n    if (val === null || val \u003c 0n || val \u003e 127n) {\n      wrap.style.display = 'none';\n      return;\n    }\n    var code = Number(val);\n    wrap.style.display = '';\n    var charEl = document.getElementById('nb-ascii-char');\n    var infoEl = document.getElementById('nb-ascii-info');\n    var controlNames = {0:'NUL',1:'SOH',2:'STX',3:'ETX',4:'EOT',5:'ENQ',6:'ACK',7:'BEL',8:'BS',9:'HT',10:'LF',11:'VT',12:'FF',13:'CR',14:'SO',15:'SI',16:'DLE',17:'DC1',18:'DC2',19:'DC3',20:'DC4',21:'NAK',22:'SYN',23:'ETB',24:'CAN',25:'EM',26:'SUB',27:'ESC',28:'FS',29:'GS',30:'RS',31:'US',127:'DEL'};\n    if (controlNames[code] !== undefined) {\n      charEl.textContent = controlNames[code];\n      charEl.style.fontSize = '11px';\n      infoEl.textContent = '制御文字（非表示）— ASCIIコード ' + code;\n    } else {\n      charEl.textContent = String.fromCharCode(code);\n      charEl.style.fontSize = '22px';\n      infoEl.textContent = 'ASCIIコード ' + code + ' — 表示可能文字';\n    }\n  }\n\n  function nbGetBVal() {\n    var bStr = document.getElementById('nb-b-input').value.trim();\n    document.getElementById('nb-b-error').textContent = '';\n    document.getElementById('nb-b-input').classList.remove('nb-error');\n    if (!bStr) return null;\n    var bv = nbParseToBigInt(bStr, 10);\n    if (bv === null) {\n      document.getElementById('nb-b-error').textContent = '10進数として無効な数値です';\n      document.getElementById('nb-b-input').classList.add('nb-error');\n      return null;\n    }\n    return bv;\n  }\n\n  function nbUpdateBitwise() {\n    var a = nbCurrentDec;\n    var b = nbGetBVal();\n\n    if (a !== null) {\n      var notVal = ~BigInt(Number(a));\n      document.getElementById('nb-not-dec').textContent = notVal.toString(10);\n      var notAbs = notVal \u003c 0n ? -notVal : notVal;\n      document.getElementById('nb-not-bin').textContent = (notVal \u003c 0n ? '-' : '') + notAbs.toString(2);\n    } else {\n      document.getElementById('nb-not-dec').textContent = '—';\n      document.getElementById('nb-not-bin').textContent = '—';\n    }\n\n    if (a === null || b === null) {\n      ['and','or','xor'].forEach(function(op){\n        document.getElementById('nb-'+op+'-dec').textContent = '—';\n        document.getElementById('nb-'+op+'-bin').textContent = '—';\n      });\n      return;\n    }\n\n    var an = BigInt(Number(a));\n    var bn = BigInt(Number(b));\n    var ops = {and: an \u0026 bn, or: an | bn, xor: an ^ bn};\n    Object.keys(ops).forEach(function(op){\n      var v = ops[op];\n      var abs = v \u003c 0n ? -v : v;\n      var sign = v \u003c 0n ? '-' : '';\n      document.getElementById('nb-'+op+'-dec').textContent = v.toString(10);\n      document.getElementById('nb-'+op+'-bin').textContent = sign + abs.toString(2);\n    });\n  }\n\n  function nbShift(dir) {\n    if (nbCurrentDec === null) return;\n    var n = parseInt(document.getElementById('nb-shift-n').value, 10);\n    if (isNaN(n) || n \u003c 1) n = 1;\n    var a = BigInt(Number(nbCurrentDec));\n    var shlVal = a \u003c\u003c BigInt(n);\n    var shrVal = a \u003e\u003e BigInt(n);\n    var shlAbs = shlVal \u003c 0n ? -shlVal : shlVal;\n    var shrAbs = shrVal \u003c 0n ? -shrVal : shrVal;\n    document.getElementById('nb-shl-dec').textContent = shlVal.toString(10);\n    document.getElementById('nb-shl-bin').textContent = (shlVal \u003c 0n ? '-' : '') + shlAbs.toString(2);\n    document.getElementById('nb-shr-dec').textContent = shrVal.toString(10);\n    document.getElementById('nb-shr-bin').textContent = (shrVal \u003c 0n ? '-' : '') + shrAbs.toString(2);\n  }\n\n  function nbClearBitwise() {\n    ['nb-and-dec','nb-and-bin','nb-or-dec','nb-or-bin','nb-xor-dec','nb-xor-bin',\n     'nb-not-dec','nb-not-bin','nb-shl-dec','nb-shl-bin','nb-shr-dec','nb-shr-bin'].forEach(function(id){\n      document.getElementById(id).textContent = '—';\n    });\n  }\n\n  window.nbCopy = function(id, btn) {\n    var txt = document.getElementById(id).textContent;\n    if (!txt || txt === '—') return;\n    navigator.clipboard.writeText(txt).then(function(){\n      btn.classList.add('nb-copied');\n      btn.textContent = '\\u2713';\n      setTimeout(function(){ btn.classList.remove('nb-copied'); btn.textContent = '\\u2398'; }, 1200);\n    });\n  };\n\n  window.nbSetBits = function(n, el) {\n    nbBitWidth = n;\n    document.querySelectorAll('#nb-app .nb-tab-btn').forEach(function(b){ b.classList.remove('nb-active-tab'); });\n    el.classList.add('nb-active-tab');\n    nbRenderBits(nbCurrentDec);\n  };\n\n  window.nbShift = nbShift;\n\n  document.getElementById('nb-num-input').addEventListener('input', nbConvert);\n  document.getElementById('nb-base-select').addEventListener('change', nbConvert);\n  document.getElementById('nb-custom-base').addEventListener('input', function(){\n    var cb = parseInt(this.value, 10);\n    nbUpdateCustom(nbCurrentDec, cb);\n  });\n  document.getElementById('nb-b-input').addEventListener('input', nbUpdateBitwise);\n\n  nbRenderBits(null);\n})();\n\u003c/script\u003e\n\u003cblockquote\u003e\n\u003cp\u003e関数電卓 → \u003ca href=\"https://productivity-works.com/ja/tools/scientific-calculator/\"\u003e関数電卓\u003c/a\u003e\n\n行列計算 → \u003ca href=\"https://productivity-works.com/ja/tools/matrix-calculator/\"\u003e行列計算ツール\u003c/a\u003e\n\u003c/p\u003e","title":"進数変換ツール"},{"content":" ストップウォッチ タイマー 🌙 ⏰ 時間になりました！クリックして閉じる 00:00:00.00 スタート ラップ リセット Space スタート/ストップ \u0026nbsp; L ラップ \u0026nbsp; R リセット ラップタイム #ラップ合計 ラップなし 時間 : 分 : 秒 00:05:00.00 スタート リセット Space スタート/ストップ \u0026nbsp; R リセット 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n1日の予定管理 → デイリープランナー イベントカウントダウン → イベントカウントダウン ","permalink":"https://productivity-works.com/ja/tools/stopwatch-timer/","summary":"\u003cdiv id=\"sw-app\"\u003e\n\u003cstyle\u003e\n#sw-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Yu Gothic', sans-serif;\n  max-width: 600px;\n  margin: 0 auto;\n  padding: 16px;\n  box-sizing: border-box;\n}\n#sw-app * {\n  box-sizing: border-box;\n}\n#sw-app .sw-card {\n  background: var(--sw-bg, #1a1a2e);\n  border-radius: 16px;\n  padding: 24px;\n  box-shadow: 0 8px 32px rgba(0,0,0,0.18);\n  transition: background 0.3s;\n}\n#sw-app.sw-light .sw-card {\n  background: #f8fafc;\n  box-shadow: 0 4px 24px rgba(0,0,0,0.10);\n}\n#sw-app .sw-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 20px;\n}\n#sw-app .sw-mode-tabs {\n  display: flex;\n  background: rgba(255,255,255,0.08);\n  border-radius: 10px;\n  padding: 3px;\n  gap: 2px;\n}\n#sw-app.sw-light .sw-mode-tabs {\n  background: #e2e8f0;\n}\n#sw-app .sw-tab {\n  padding: 7px 18px;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  background: transparent;\n  color: rgba(255,255,255,0.55);\n  transition: all 0.2s;\n}\n#sw-app.sw-light .sw-tab {\n  color: #64748b;\n}\n#sw-app .sw-tab.active {\n  background: #6366f1;\n  color: #fff;\n}\n#sw-app .sw-theme-btn {\n  background: rgba(255,255,255,0.1);\n  border: none;\n  border-radius: 8px;\n  padding: 7px 12px;\n  color: #fff;\n  cursor: pointer;\n  font-size: 18px;\n  transition: background 0.2s;\n}\n#sw-app.sw-light .sw-theme-btn {\n  background: #e2e8f0;\n  color: #334155;\n}\n#sw-app .sw-theme-btn:hover {\n  background: rgba(255,255,255,0.2);\n}\n#sw-app.sw-light .sw-theme-btn:hover {\n  background: #cbd5e1;\n}\n#sw-app .sw-display {\n  text-align: center;\n  margin: 20px 0 24px;\n}\n#sw-app .sw-time {\n  font-size: clamp(48px, 12vw, 72px);\n  font-weight: 700;\n  font-variant-numeric: tabular-nums;\n  letter-spacing: 2px;\n  color: #e2e8f0;\n  line-height: 1.1;\n  transition: color 0.3s;\n}\n#sw-app.sw-light .sw-time {\n  color: #1e293b;\n}\n#sw-app .sw-ms {\n  font-size: clamp(24px, 6vw, 36px);\n  color: #6366f1;\n  font-weight: 700;\n  font-variant-numeric: tabular-nums;\n}\n#sw-app .sw-time-alarm {\n  animation: sw-pulse 0.5s ease infinite alternate;\n}\n@keyframes sw-pulse {\n  from { color: #e2e8f0; }\n  to { color: #f43f5e; }\n}\n#sw-app.sw-light .sw-time-alarm {\n  animation: sw-pulse-light 0.5s ease infinite alternate;\n}\n@keyframes sw-pulse-light {\n  from { color: #1e293b; }\n  to { color: #e11d48; }\n}\n#sw-app .sw-timer-inputs {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  gap: 4px;\n  margin-bottom: 20px;\n}\n#sw-app .sw-time-input-wrap {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 4px;\n}\n#sw-app .sw-time-input-label {\n  font-size: 11px;\n  color: rgba(255,255,255,0.45);\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n}\n#sw-app.sw-light .sw-time-input-label {\n  color: #94a3b8;\n}\n#sw-app .sw-time-input {\n  width: 72px;\n  text-align: center;\n  font-size: 32px;\n  font-weight: 700;\n  font-variant-numeric: tabular-nums;\n  background: rgba(255,255,255,0.08);\n  border: 2px solid rgba(255,255,255,0.12);\n  border-radius: 10px;\n  color: #e2e8f0;\n  padding: 8px 4px;\n  outline: none;\n  transition: border-color 0.2s;\n  -moz-appearance: textfield;\n}\n#sw-app .sw-time-input::-webkit-outer-spin-button,\n#sw-app .sw-time-input::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n  margin: 0;\n}\n#sw-app.sw-light .sw-time-input {\n  background: #fff;\n  border-color: #cbd5e1;\n  color: #1e293b;\n}\n#sw-app .sw-time-input:focus {\n  border-color: #6366f1;\n}\n#sw-app .sw-time-sep {\n  font-size: 32px;\n  font-weight: 700;\n  color: rgba(255,255,255,0.4);\n  padding-bottom: 18px;\n}\n#sw-app.sw-light .sw-time-sep {\n  color: #94a3b8;\n}\n#sw-app .sw-controls {\n  display: flex;\n  justify-content: center;\n  gap: 12px;\n  flex-wrap: wrap;\n  margin-bottom: 20px;\n}\n#sw-app .sw-btn {\n  padding: 12px 28px;\n  border: none;\n  border-radius: 50px;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: transform 0.1s, opacity 0.2s, box-shadow 0.2s;\n  outline: none;\n}\n#sw-app .sw-btn:active {\n  transform: scale(0.96);\n}\n#sw-app .sw-btn-start {\n  background: linear-gradient(135deg, #6366f1, #8b5cf6);\n  color: #fff;\n  box-shadow: 0 4px 14px rgba(99,102,241,0.4);\n  min-width: 120px;\n}\n#sw-app .sw-btn-stop {\n  background: linear-gradient(135deg, #f43f5e, #e11d48);\n  color: #fff;\n  box-shadow: 0 4px 14px rgba(244,63,94,0.4);\n  min-width: 120px;\n}\n#sw-app .sw-btn-lap {\n  background: rgba(255,255,255,0.1);\n  color: #e2e8f0;\n}\n#sw-app.sw-light .sw-btn-lap {\n  background: #e2e8f0;\n  color: #334155;\n}\n#sw-app .sw-btn-reset {\n  background: rgba(255,255,255,0.07);\n  color: rgba(255,255,255,0.7);\n}\n#sw-app.sw-light .sw-btn-reset {\n  background: #f1f5f9;\n  color: #64748b;\n}\n#sw-app .sw-btn:disabled {\n  opacity: 0.35;\n  cursor: not-allowed;\n}\n#sw-app .sw-shortcuts {\n  text-align: center;\n  font-size: 12px;\n  color: rgba(255,255,255,0.3);\n  margin-bottom: 16px;\n  letter-spacing: 0.5px;\n}\n#sw-app.sw-light .sw-shortcuts {\n  color: #94a3b8;\n}\n#sw-app .sw-shortcuts kbd {\n  background: rgba(255,255,255,0.1);\n  border-radius: 4px;\n  padding: 1px 5px;\n  font-family: monospace;\n  font-size: 11px;\n}\n#sw-app.sw-light .sw-shortcuts kbd {\n  background: #e2e8f0;\n}\n#sw-app .sw-laps {\n  margin-top: 8px;\n}\n#sw-app .sw-laps-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: rgba(255,255,255,0.5);\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  margin-bottom: 10px;\n}\n#sw-app.sw-light .sw-laps-title {\n  color: #94a3b8;\n}\n#sw-app .sw-laps-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 14px;\n}\n#sw-app .sw-laps-table th {\n  text-align: left;\n  padding: 6px 10px;\n  color: rgba(255,255,255,0.35);\n  font-weight: 600;\n  font-size: 12px;\n  border-bottom: 1px solid rgba(255,255,255,0.07);\n}\n#sw-app.sw-light .sw-laps-table th {\n  color: #94a3b8;\n  border-bottom-color: #e2e8f0;\n}\n#sw-app .sw-laps-table td {\n  padding: 8px 10px;\n  color: #e2e8f0;\n  border-bottom: 1px solid rgba(255,255,255,0.05);\n  font-variant-numeric: tabular-nums;\n}\n#sw-app.sw-light .sw-laps-table td {\n  color: #334155;\n  border-bottom-color: #f1f5f9;\n}\n#sw-app .sw-laps-table tr:last-child td {\n  border-bottom: none;\n}\n#sw-app .sw-laps-table .sw-lap-fastest {\n  color: #34d399;\n}\n#sw-app .sw-laps-table .sw-lap-slowest {\n  color: #f87171;\n}\n#sw-app .sw-laps-empty {\n  text-align: center;\n  color: rgba(255,255,255,0.2);\n  font-size: 13px;\n  padding: 18px 0;\n}\n#sw-app.sw-light .sw-laps-empty {\n  color: #cbd5e1;\n}\n#sw-app .sw-alarm-banner {\n  display: none;\n  background: linear-gradient(135deg, #f43f5e, #e11d48);\n  color: #fff;\n  text-align: center;\n  padding: 12px 16px;\n  border-radius: 10px;\n  font-size: 15px;\n  font-weight: 700;\n  margin-bottom: 16px;\n  cursor: pointer;\n  animation: sw-banner-in 0.3s ease;\n}\n@keyframes sw-banner-in {\n  from { opacity: 0; transform: translateY(-10px); }\n  to { opacity: 1; transform: translateY(0); }\n}\n#sw-app .sw-alarm-banner.show {\n  display: block;\n}\n#sw-app .sw-progress-ring {\n  display: flex;\n  justify-content: center;\n  margin-bottom: 8px;\n}\n#sw-app .sw-progress-ring svg {\n  transform: rotate(-90deg);\n}\n#sw-app .sw-progress-track {\n  fill: none;\n  stroke: rgba(255,255,255,0.08);\n  stroke-width: 6;\n}\n#sw-app.sw-light .sw-progress-track {\n  stroke: #e2e8f0;\n}\n#sw-app .sw-progress-fill {\n  fill: none;\n  stroke: #6366f1;\n  stroke-width: 6;\n  stroke-linecap: round;\n  transition: stroke-dashoffset 0.1s linear;\n}\n#sw-app .sw-freee-cta {\n  margin-top: 28px;\n}\n@media (max-width: 480px) {\n  #sw-app .sw-btn {\n    padding: 11px 18px;\n    font-size: 14px;\n  }\n  #sw-app .sw-time-input {\n    width: 60px;\n    font-size: 26px;\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"sw-card\"\u003e\n  \u003cdiv class=\"sw-header\"\u003e\n    \u003cdiv class=\"sw-mode-tabs\"\u003e\n      \u003cbutton class=\"sw-tab active\" id=\"sw-tab-stopwatch\"\u003eストップウォッチ\u003c/button\u003e\n      \u003cbutton class=\"sw-tab\" id=\"sw-tab-timer\"\u003eタイマー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cbutton class=\"sw-theme-btn\" id=\"sw-theme-btn\" title=\"テーマ切り替え\"\u003e🌙\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"sw-alarm-banner\" class=\"sw-alarm-banner\"\u003e\n    ⏰ 時間になりました！クリックして閉じる\n  \u003c/div\u003e\n  \u003c!-- ストップウォッチ パネル --\u003e\n  \u003cdiv id=\"sw-stopwatch-panel\"\u003e\n    \u003cdiv class=\"sw-display\"\u003e\n      \u003cdiv class=\"sw-time\" id=\"sw-sw-display\"\u003e\n        \u003cspan id=\"sw-sw-hms\"\u003e00:00:00\u003c/span\u003e\u003cspan class=\"sw-ms\"\u003e.\u003cspan id=\"sw-sw-ms\"\u003e00\u003c/span\u003e\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"sw-controls\"\u003e\n      \u003cbutton class=\"sw-btn sw-btn-start\" id=\"sw-sw-startstop\"\u003eスタート\u003c/button\u003e\n      \u003cbutton class=\"sw-btn sw-btn-lap\" id=\"sw-sw-lap\" disabled\u003eラップ\u003c/button\u003e\n      \u003cbutton class=\"sw-btn sw-btn-reset\" id=\"sw-sw-reset\"\u003eリセット\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"sw-shortcuts\"\u003e\n      \u003ckbd\u003eSpace\u003c/kbd\u003e スタート/ストップ \u0026nbsp; \u003ckbd\u003eL\u003c/kbd\u003e ラップ \u0026nbsp; \u003ckbd\u003eR\u003c/kbd\u003e リセット\n    \u003c/div\u003e\n    \u003cdiv class=\"sw-laps\" id=\"sw-laps-section\"\u003e\n      \u003cdiv class=\"sw-laps-title\"\u003eラップタイム\u003c/div\u003e\n      \u003ctable class=\"sw-laps-table\" id=\"sw-laps-table\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003eラップ\u003c/th\u003e\u003cth\u003e合計\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n        \u003ctbody id=\"sw-laps-body\"\u003e\n          \u003ctr\u003e\u003ctd colspan=\"3\" class=\"sw-laps-empty\"\u003eラップなし\u003c/td\u003e\u003c/tr\u003e\n        \u003c/tbody\u003e\n      \u003c/table\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- タイマー パネル --\u003e\n  \u003cdiv id=\"sw-timer-panel\" style=\"display:none;\"\u003e\n    \u003cdiv id=\"sw-timer-inputs-wrap\"\u003e\n      \u003cdiv class=\"sw-timer-inputs\"\u003e\n        \u003cdiv class=\"sw-time-input-wrap\"\u003e\n          \u003cspan class=\"sw-time-input-label\"\u003e時間\u003c/span\u003e\n          \u003cinput type=\"number\" class=\"sw-time-input\" id=\"sw-t-h\" value=\"0\" min=\"0\" max=\"99\"\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"sw-time-sep\"\u003e:\u003c/div\u003e\n        \u003cdiv class=\"sw-time-input-wrap\"\u003e\n          \u003cspan class=\"sw-time-input-label\"\u003e分\u003c/span\u003e\n          \u003cinput type=\"number\" class=\"sw-time-input\" id=\"sw-t-m\" value=\"5\" min=\"0\" max=\"59\"\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"sw-time-sep\"\u003e:\u003c/div\u003e\n        \u003cdiv class=\"sw-time-input-wrap\"\u003e\n          \u003cspan class=\"sw-time-input-label\"\u003e秒\u003c/span\u003e\n          \u003cinput type=\"number\" class=\"sw-time-input\" id=\"sw-t-s\" value=\"0\" min=\"0\" max=\"59\"\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"sw-progress-ring\" id=\"sw-progress-ring\" style=\"display:none;\"\u003e\n      \u003csvg width=\"160\" height=\"160\" viewBox=\"0 0 160 160\"\u003e\n        \u003ccircle class=\"sw-progress-track\" cx=\"80\" cy=\"80\" r=\"70\"/\u003e\n        \u003ccircle class=\"sw-progress-fill\" cx=\"80\" cy=\"80\" r=\"70\" id=\"sw-progress-fill\"\n          stroke-dasharray=\"439.82\"\n          stroke-dashoffset=\"0\"/\u003e\n      \u003c/svg\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"sw-display\" id=\"sw-timer-display-wrap\" style=\"display:none;\"\u003e\n      \u003cdiv class=\"sw-time\" id=\"sw-t-display\"\u003e\n        \u003cspan id=\"sw-t-hms\"\u003e00:05:00\u003c/span\u003e\u003cspan class=\"sw-ms\"\u003e.\u003cspan id=\"sw-t-ms\"\u003e00\u003c/span\u003e\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"sw-controls\"\u003e\n      \u003cbutton class=\"sw-btn sw-btn-start\" id=\"sw-t-startstop\"\u003eスタート\u003c/button\u003e\n      \u003cbutton class=\"sw-btn sw-btn-reset\" id=\"sw-t-reset\"\u003eリセット\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"sw-shortcuts\"\u003e\n      \u003ckbd\u003eSpace\u003c/kbd\u003e スタート/ストップ \u0026nbsp; \u003ckbd\u003eR\u003c/kbd\u003e リセット\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"sw-freee-cta\" style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n    \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"ストップウォッチ・タイマー"},{"content":" RGB・HEX・HSLをリアルタイムで相互変換できる無料ツールです。カラーピッカーで色を選ぶか、HEXコードを直接入力するか、スライダーをドラッグするだけで全ての値が即座に更新されます。コピーボタンでCSS用の値を一発コピー。\nカラー入力 RGBスライダー R G B \u0026lt;!-- HSL sliders --\u0026gt; \u0026lt;div class=\u0026quot;rhc-panel\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;HSLスライダー\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;rhc-hsl-group\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rhc-hsl-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;rhc-hsl-label\u0026quot;\u0026gt;H\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;rhc-slider slider-h\u0026quot; id=\u0026quot;rhcH\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;360\u0026quot; value=\u0026quot;243\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;rhc-hsl-val\u0026quot; id=\u0026quot;rhcHVal\u0026quot;\u0026gt;243°\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rhc-hsl-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;rhc-hsl-label\u0026quot;\u0026gt;S\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;rhc-slider slider-s\u0026quot; id=\u0026quot;rhcS\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;100\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;rhc-hsl-val\u0026quot; id=\u0026quot;rhcSVal\u0026quot;\u0026gt;100%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rhc-hsl-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;rhc-hsl-label\u0026quot;\u0026gt;L\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;rhc-slider slider-l\u0026quot; id=\u0026quot;rhcL\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;70\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;rhc-hsl-val\u0026quot; id=\u0026quot;rhcLVal\u0026quot;\u0026gt;70%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; HEX #6C63FF コピー RGB rgb(108, 99, 255) コピー HSL hsl(243, 100%, 70%) コピー カラー履歴（最新10件） まだ履歴がありません。色を選ぶと自動保存されます。 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール カラーパレット → カラーパレット生成 コントラスト確認 → コントラストチェッカー 色覚シミュレーション → 色覚シミュレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/rgb-hex-converter/","summary":"\u003cdiv id=\"rhc-app\"\u003e\n\u003cstyle\u003e\n#rhc-app *,#rhc-app *::before,#rhc-app *::after{box-sizing:border-box;margin:0;padding:0}\n#rhc-app{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Hiragino Sans','Noto Sans JP',Roboto,sans-serif;color:#1a1a2e;--accent:#6c63ff;--radius:10px;--shadow:0 4px 24px rgba(0,0,0,.10)}\n#rhc-app .rhc-wrap{max-width:760px;margin:0 auto;padding:0 0 48px}\n#rhc-app .rhc-lead{font-size:.97rem;color:#555;margin-bottom:28px;line-height:1.7}\n\n/* Layout */\n#rhc-app .rhc-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:24px}\n@media(max-width:600px){#rhc-app .rhc-grid{grid-template-columns:1fr}}\n\n/* Panels */\n#rhc-app .rhc-panel{background:#f7f7fc;border-radius:var(--radius);padding:20px}\n#rhc-app .rhc-panel h3{font-size:.78rem;font-weight:700;color:#444;text-transform:uppercase;letter-spacing:.06em;margin-bottom:14px}\n\n/* Color picker */\n#rhc-app .rhc-picker-row{display:flex;align-items:center;gap:14px;margin-bottom:18px}\n#rhc-app .rhc-color-input{width:72px;height:72px;border:3px solid #ddd;border-radius:10px;cursor:pointer;padding:2px;background:#fff}\n#rhc-app .rhc-hex-input{flex:1;height:44px;padding:0 14px;border:2px solid #ddd;border-radius:8px;font-size:1rem;font-family:monospace;background:#fff;outline:none;transition:border-color .2s;text-transform:uppercase}\n#rhc-app .rhc-hex-input:focus{border-color:var(--accent)}\n\n/* Preview swatch */\n#rhc-app .rhc-swatch{width:100%;height:120px;border-radius:var(--radius);margin-bottom:20px;transition:background .15s;border:1px solid rgba(0,0,0,.07);box-shadow:var(--shadow)}\n\n/* Sliders */\n#rhc-app .rhc-slider-group{display:flex;flex-direction:column;gap:12px}\n#rhc-app .rhc-slider-row{display:grid;grid-template-columns:18px 1fr 52px;align-items:center;gap:10px}\n#rhc-app .rhc-slider-label{font-size:.85rem;font-weight:700;color:#444;text-align:center}\n#rhc-app .rhc-slider{-webkit-appearance:none;appearance:none;width:100%;height:8px;border-radius:4px;outline:none;cursor:pointer}\n#rhc-app .rhc-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;background:#fff;border:2px solid #aaa;box-shadow:0 1px 4px rgba(0,0,0,.2);cursor:pointer}\n#rhc-app .rhc-slider::-moz-range-thumb{width:20px;height:20px;border-radius:50%;background:#fff;border:2px solid #aaa;box-shadow:0 1px 4px rgba(0,0,0,.2);cursor:pointer}\n#rhc-app .slider-r{background:linear-gradient(to right,#000,#ff0000)}\n#rhc-app .slider-g{background:linear-gradient(to right,#000,#00ff00)}\n#rhc-app .slider-b{background:linear-gradient(to right,#000,#0000ff)}\n#rhc-app .rhc-num-input{width:52px;height:34px;border:2px solid #ddd;border-radius:6px;text-align:center;font-size:.88rem;font-weight:600;outline:none;transition:border-color .2s}\n#rhc-app .rhc-num-input:focus{border-color:var(--accent)}\n\n/* Output values */\n#rhc-app .rhc-outputs{display:flex;flex-direction:column;gap:10px;margin-bottom:24px}\n#rhc-app .rhc-output-row{display:flex;align-items:center;gap:10px;background:#fff;border:1.5px solid #e5e7eb;border-radius:8px;padding:10px 14px}\n#rhc-app .rhc-output-label{font-size:.75rem;font-weight:700;color:#6c63ff;text-transform:uppercase;letter-spacing:.05em;min-width:38px}\n#rhc-app .rhc-output-val{flex:1;font-family:monospace;font-size:.92rem;color:#1a1a2e;word-break:break-all}\n#rhc-app .rhc-copy-btn{flex-shrink:0;padding:5px 12px;border:none;border-radius:6px;background:#6c63ff;color:#fff;font-size:.78rem;font-weight:700;cursor:pointer;transition:opacity .2s,transform .1s}\n#rhc-app .rhc-copy-btn:hover{opacity:.85}\n#rhc-app .rhc-copy-btn:active{transform:scale(.95)}\n#rhc-app .rhc-copy-btn.copied{background:#22c55e}\n\n/* HSL sliders panel */\n#rhc-app .rhc-hsl-panel{background:#f7f7fc;border-radius:var(--radius);padding:20px;margin-bottom:24px}\n#rhc-app .rhc-hsl-panel h3{font-size:.78rem;font-weight:700;color:#444;text-transform:uppercase;letter-spacing:.06em;margin-bottom:14px}\n#rhc-app .rhc-hsl-group{display:flex;flex-direction:column;gap:12px}\n#rhc-app .rhc-hsl-row{display:grid;grid-template-columns:22px 1fr 60px;align-items:center;gap:10px}\n#rhc-app .rhc-hsl-label{font-size:.78rem;font-weight:700;color:#444;text-align:center}\n#rhc-app .slider-h{background:linear-gradient(to right,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00)}\n#rhc-app .slider-s{background:linear-gradient(to right,#888,#f00)}\n#rhc-app .slider-l{background:linear-gradient(to right,#000,#888,#fff)}\n#rhc-app .rhc-hsl-val{font-size:.82rem;font-weight:600;color:#555;text-align:right}\n\n/* Color history */\n#rhc-app .rhc-history{margin-bottom:0}\n#rhc-app .rhc-history h3{font-size:.78rem;font-weight:700;color:#444;text-transform:uppercase;letter-spacing:.06em;margin-bottom:12px}\n#rhc-app .rhc-history-swatches{display:flex;flex-wrap:wrap;gap:8px}\n#rhc-app .rhc-hist-swatch{width:42px;height:42px;border-radius:8px;cursor:pointer;border:2px solid #ddd;transition:transform .15s,border-color .15s;position:relative}\n#rhc-app .rhc-hist-swatch:hover{transform:scale(1.12);border-color:#6c63ff}\n#rhc-app .rhc-hist-swatch .rhc-hist-tip{display:none;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);background:#1a1a2e;color:#fff;font-size:.7rem;white-space:nowrap;padding:3px 7px;border-radius:5px;pointer-events:none;z-index:10}\n#rhc-app .rhc-hist-swatch:hover .rhc-hist-tip{display:block}\n#rhc-app .rhc-history-empty{font-size:.85rem;color:#999;font-style:italic}\n\u003c/style\u003e\n\u003cdiv class=\"rhc-wrap\"\u003e\n  \u003cp class=\"rhc-lead\"\u003eRGB・HEX・HSLをリアルタイムで相互変換できる無料ツールです。カラーピッカーで色を選ぶか、HEXコードを直接入力するか、スライダーをドラッグするだけで全ての値が即座に更新されます。コピーボタンでCSS用の値を一発コピー。\u003c/p\u003e","title":"RGB⇔HEXカラー変換ツール"},{"content":" コピーしました 明度 50% 配色モード 補色 類似色 トライアド 分裂補色 テトラード \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;cw-section-title\u0026quot;\u0026gt;選択色・配色スウォッチ\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cw-swatches\u0026quot; id=\u0026quot;cw-swatches\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cw-color-detail\u0026quot; id=\u0026quot;cw-color-detail\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cw-section-title\u0026quot;\u0026gt;選択色の値（クリックでコピー）\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cw-color-detail-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cw-detail-swatch\u0026quot; id=\u0026quot;cw-detail-swatch\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cw-detail-values\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cw-detail-val\u0026quot; id=\u0026quot;cw-val-hex\u0026quot; title=\u0026quot;HEXをコピー\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;cw-detail-val\u0026quot; id=\u0026quot;cw-val-rgb\u0026quot; title=\u0026quot;RGBをコピー\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;cw-detail-val\u0026quot; id=\u0026quot;cw-val-hsl\u0026quot; title=\u0026quot;HSLをコピー\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;cw-section-title\u0026quot;\u0026gt;WCAGコントラスト比（白・黒背景）\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cw-contrast-box\u0026quot; id=\u0026quot;cw-contrast-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cw-contrast-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cw-contrast-preview\u0026quot; id=\u0026quot;cw-prev-white\u0026quot;\u0026gt;白背景サンプル\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cw-contrast-info\u0026quot; id=\u0026quot;cw-cr-white\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cw-contrast-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cw-contrast-preview\u0026quot; id=\u0026quot;cw-prev-black\u0026quot;\u0026gt;黒背景サンプル\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cw-contrast-info\u0026quot; id=\u0026quot;cw-cr-black\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; CSSカスタムプロパティ書き出し コピー 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → カラーパレットを生成 → カラーパレットジェネレーター\nコントラスト比を確認 → カラーコントラストチェッカー\n色覚をシミュレーション → 色覚シミュレーター カラーパレットを生成 → カラーパレットジェネレーター コントラスト比を確認 → カラーコントラストチェッカー 色覚をシミュレーション → 色覚シミュレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/color-wheel-picker/","summary":"\u003cdiv id=\"cw-app\"\u003e\n\u003cstyle\u003e\n#cw-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", sans-serif;\n  color: #1e293b;\n  max-width: 760px;\n  margin: 0 auto;\n  padding: 0 8px;\n  box-sizing: border-box;\n}\n#cw-app * {\n  box-sizing: border-box;\n}\n#cw-app h2 {\n  font-size: 18px;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 24px 0 10px;\n  padding-bottom: 6px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#cw-app .cw-layout {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 24px;\n  align-items: flex-start;\n  margin-top: 16px;\n}\n#cw-app .cw-canvas-col {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 14px;\n  flex: 0 0 auto;\n}\n#cw-app .cw-controls-col {\n  flex: 1 1 260px;\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n}\n#cw-app canvas#cw-wheel {\n  border-radius: 50%;\n  cursor: crosshair;\n  display: block;\n  touch-action: none;\n  box-shadow: 0 2px 12px rgba(0,0,0,0.13);\n  border: 3px solid #e2e8f0;\n}\n#cw-app .cw-mode-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 4px;\n}\n#cw-app .cw-mode-btns {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 7px;\n}\n#cw-app .cw-mode-btn {\n  padding: 6px 13px;\n  border-radius: 20px;\n  border: 1.5px solid #cbd5e1;\n  background: #f8fafc;\n  color: #334155;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n  outline: none;\n}\n#cw-app .cw-mode-btn:hover {\n  background: #e0f2fe;\n  border-color: #38bdf8;\n  color: #0369a1;\n}\n#cw-app .cw-mode-btn.active {\n  background: #0284c7;\n  border-color: #0284c7;\n  color: #fff;\n}\n#cw-app .cw-swatches {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-top: 2px;\n}\n#cw-app .cw-swatch-item {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 5px;\n  cursor: pointer;\n}\n#cw-app .cw-swatch-box {\n  width: 54px;\n  height: 54px;\n  border-radius: 8px;\n  border: 2px solid #e2e8f0;\n  transition: transform 0.1s, box-shadow 0.1s;\n  position: relative;\n}\n#cw-app .cw-swatch-box:hover {\n  transform: scale(1.08);\n  box-shadow: 0 2px 8px rgba(0,0,0,0.18);\n}\n#cw-app .cw-swatch-label {\n  font-size: 11px;\n  color: #64748b;\n  text-align: center;\n  max-width: 60px;\n  word-break: break-all;\n}\n#cw-app .cw-copied-toast {\n  position: fixed;\n  bottom: 28px;\n  left: 50%;\n  transform: translateX(-50%);\n  background: #0f172a;\n  color: #fff;\n  padding: 9px 22px;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 0.3s;\n  z-index: 9999;\n}\n#cw-app .cw-copied-toast.show {\n  opacity: 1;\n}\n#cw-app .cw-color-detail {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 14px 16px;\n  display: flex;\n  flex-direction: column;\n  gap: 7px;\n}\n#cw-app .cw-color-detail-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n#cw-app .cw-detail-swatch {\n  width: 36px;\n  height: 36px;\n  border-radius: 6px;\n  border: 1.5px solid #e2e8f0;\n  flex: 0 0 auto;\n}\n#cw-app .cw-detail-values {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n}\n#cw-app .cw-detail-val {\n  font-size: 12px;\n  color: #334155;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  cursor: pointer;\n  padding: 2px 6px;\n  border-radius: 4px;\n  transition: background 0.12s;\n  user-select: all;\n}\n#cw-app .cw-detail-val:hover {\n  background: #e0f2fe;\n  color: #0369a1;\n}\n#cw-app .cw-css-box {\n  background: #0f172a;\n  border-radius: 10px;\n  padding: 14px 16px;\n  position: relative;\n}\n#cw-app .cw-css-pre {\n  color: #7dd3fc;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 12px;\n  line-height: 1.7;\n  margin: 0;\n  white-space: pre-wrap;\n  word-break: break-all;\n}\n#cw-app .cw-css-copy-btn {\n  position: absolute;\n  top: 10px;\n  right: 12px;\n  background: #1e40af;\n  color: #fff;\n  border: none;\n  border-radius: 5px;\n  padding: 4px 11px;\n  font-size: 12px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#cw-app .cw-css-copy-btn:hover {\n  background: #2563eb;\n}\n#cw-app .cw-contrast-box {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 14px 16px;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n#cw-app .cw-contrast-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n#cw-app .cw-contrast-preview {\n  padding: 7px 14px;\n  border-radius: 6px;\n  font-size: 14px;\n  font-weight: 700;\n  flex: 1 1 auto;\n  text-align: center;\n  min-width: 100px;\n}\n#cw-app .cw-contrast-info {\n  font-size: 13px;\n  color: #334155;\n  flex: 0 0 auto;\n}\n#cw-app .cw-wcag-badge {\n  display: inline-block;\n  padding: 2px 9px;\n  border-radius: 12px;\n  font-size: 12px;\n  font-weight: 700;\n  margin-left: 6px;\n}\n#cw-app .cw-wcag-pass {\n  background: #dcfce7;\n  color: #15803d;\n}\n#cw-app .cw-wcag-fail {\n  background: #fee2e2;\n  color: #b91c1c;\n}\n#cw-app .cw-crosslinks {\n  margin-top: 20px;\n  padding: 14px 18px;\n  background: #f1f5f9;\n  border-radius: 10px;\n  font-size: 14px;\n  line-height: 2;\n  color: #334155;\n}\n#cw-app .cw-crosslinks a {\n  color: #0284c7;\n  text-decoration: none;\n  font-weight: 600;\n}\n#cw-app .cw-crosslinks a:hover {\n  text-decoration: underline;\n}\n#cw-app .cw-section-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 4px;\n}\n#cw-app .cw-lightness-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 4px;\n}\n#cw-app .cw-lightness-row label {\n  font-size: 13px;\n  color: #475569;\n  font-weight: 600;\n  flex: 0 0 auto;\n}\n#cw-app input[type=range]#cw-lightness {\n  flex: 1;\n  accent-color: #0284c7;\n  height: 6px;\n  cursor: pointer;\n}\n#cw-app .cw-lightness-val {\n  font-size: 13px;\n  color: #334155;\n  font-family: monospace;\n  min-width: 36px;\n  text-align: right;\n}\n@media (max-width: 540px) {\n  #cw-app .cw-layout {\n    flex-direction: column;\n    align-items: center;\n  }\n  #cw-app .cw-controls-col {\n    width: 100%;\n  }\n  #cw-app canvas#cw-wheel {\n    width: 240px !important;\n    height: 240px !important;\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"cw-copied-toast\" id=\"cw-toast\"\u003eコピーしました\u003c/div\u003e\n\u003cdiv class=\"cw-layout\"\u003e\n  \u003cdiv class=\"cw-canvas-col\"\u003e\n    \u003ccanvas id=\"cw-wheel\" width=\"300\" height=\"300\"\u003e\u003c/canvas\u003e\n    \u003cdiv class=\"cw-lightness-row\"\u003e\n      \u003clabel for=\"cw-lightness\"\u003e明度\u003c/label\u003e\n      \u003cinput type=\"range\" id=\"cw-lightness\" min=\"20\" max=\"80\" value=\"50\"\u003e\n      \u003cspan class=\"cw-lightness-val\" id=\"cw-lightness-val\"\u003e50%\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cw-controls-col\"\u003e\n    \u003cdiv\u003e\n      \u003cdiv class=\"cw-mode-label\"\u003e配色モード\u003c/div\u003e\n      \u003cdiv class=\"cw-mode-btns\"\u003e\n        \u003cbutton class=\"cw-mode-btn active\" data-mode=\"complementary\"\u003e補色\u003c/button\u003e\n        \u003cbutton class=\"cw-mode-btn\" data-mode=\"analogous\"\u003e類似色\u003c/button\u003e\n        \u003cbutton class=\"cw-mode-btn\" data-mode=\"triadic\"\u003eトライアド\u003c/button\u003e\n        \u003cbutton class=\"cw-mode-btn\" data-mode=\"split\"\u003e分裂補色\u003c/button\u003e\n        \u003cbutton class=\"cw-mode-btn\" data-mode=\"tetradic\"\u003eテトラード\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div\u0026gt;\n  \u0026lt;div class=\u0026quot;cw-section-title\u0026quot;\u0026gt;選択色・配色スウォッチ\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cw-swatches\u0026quot; id=\u0026quot;cw-swatches\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;cw-color-detail\u0026quot; id=\u0026quot;cw-color-detail\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cw-section-title\u0026quot;\u0026gt;選択色の値（クリックでコピー）\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cw-color-detail-row\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;cw-detail-swatch\u0026quot; id=\u0026quot;cw-detail-swatch\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;cw-detail-values\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;cw-detail-val\u0026quot; id=\u0026quot;cw-val-hex\u0026quot; title=\u0026quot;HEXをコピー\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\n      \u0026lt;span class=\u0026quot;cw-detail-val\u0026quot; id=\u0026quot;cw-val-rgb\u0026quot; title=\u0026quot;RGBをコピー\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\n      \u0026lt;span class=\u0026quot;cw-detail-val\u0026quot; id=\u0026quot;cw-val-hsl\u0026quot; title=\u0026quot;HSLをコピー\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div\u0026gt;\n  \u0026lt;div class=\u0026quot;cw-section-title\u0026quot;\u0026gt;WCAGコントラスト比（白・黒背景）\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cw-contrast-box\u0026quot; id=\u0026quot;cw-contrast-box\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;cw-contrast-row\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;cw-contrast-preview\u0026quot; id=\u0026quot;cw-prev-white\u0026quot;\u0026gt;白背景サンプル\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;cw-contrast-info\u0026quot; id=\u0026quot;cw-cr-white\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;cw-contrast-row\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;cw-contrast-preview\u0026quot; id=\u0026quot;cw-prev-black\u0026quot;\u0026gt;黒背景サンプル\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;cw-contrast-info\u0026quot; id=\u0026quot;cw-cr-black\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003eCSSカスタムプロパティ書き出し\u003c/h2\u003e\n\u003cdiv class=\"cw-css-box\"\u003e\n  \u003cpre class=\"cw-css-pre\" id=\"cw-css-output\"\u003e\u003c/pre\u003e\n  \u003cbutton class=\"cw-css-copy-btn\" id=\"cw-css-copy-btn\"\u003eコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"カラーホイールピッカー"},{"content":" 給与から毎月天引きされる所得税の源泉徴収額・社会保険料・手取り額を素早くシミュレーションできます。年収・月収を入力するだけで、給与明細の内訳を一覧表示します。 給与情報を入力 給与額 給与の種類 年収（年間） 月収（月額） 源泉徴収の区分 甲欄（扶養控除等申告書あり） 乙欄（扶養控除等申告書なし） 主たる勤務先では甲欄、副業・掛け持ちは乙欄を選択。 扶養親族等の数（人） 配偶者（控除対象）も含めてカウント。乙欄の場合は0固定。 年齢区分 一般（40歳未満 / 65歳以上） 介護保険第2号被保険者（40〜64歳） 40〜64歳は介護保険料が加算されます。 健康保険料率（%） 協会けんぽ 東京都（9.98%） 協会けんぽ 大阪府（10.21%） 協会けんぽ 北海道（10.68%） 協会けんぽ 愛知県（9.86%） 協会けんぽ 神奈川県（10.16%） その他（手動入力） 健康保険料率 手動入力（%） 源泉徴収額を計算する 計算結果 — 月額 月額 年間 手取り額 -- 所得税（源泉徴収） -- 健康保険料（本人） -- 介護保険料（本人） -- 厚生年金保険料（本人） -- 雇用保険料（本人） -- 給与明細シミュレーション 項目 月額 年間 注意事項：本ツールは令和7年（2025年）の源泉徴収税額表（月額表）および標準報酬月額表を基にした概算です。実際の源泉徴収額は給与明細の支給項目・非課税通勤費・各種控除等によって異なります。正確な計算は給与ソフトまたは税理士にご確認ください。社会保険料は標準報酬月額テーブルを簡略化した近似値です。 給与計算を自動化したい方へ\n源泉徴収の計算・年末調整・社会保険手続きをまとめてデジタル化できます。\n給与計算を自動化 → freee人事労務で源泉徴収を自動計算 関連ツール フリーランス報酬計算 → フリーランス報酬計算ツール 時給年収換算 → 時給年収換算ツール 年金シミュレーター → 年金シミュレーターツール ","permalink":"https://productivity-works.com/ja/tools/tax-withholding-calculator/","summary":"\u003cdiv id=\"tw-app\"\u003e\n\u003cstyle\u003e\n#tw-app {\n  font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, -apple-system, BlinkMacSystemFont, sans-serif;\n  max-width: 780px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#tw-app h2 {\n  font-size: 1.3rem;\n  font-weight: 700;\n  margin: 0 0 1rem 0;\n  color: #1a1a2e;\n}\n#tw-app .tw-intro {\n  background: #f0f4ff;\n  border-left: 4px solid #4361ee;\n  padding: 0.85rem 1.1rem;\n  border-radius: 0 6px 6px 0;\n  margin-bottom: 1.5rem;\n  font-size: 0.92rem;\n  color: #444;\n  line-height: 1.7;\n}\n#tw-app .tw-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 1.5rem;\n  margin-bottom: 1.2rem;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.04);\n}\n#tw-app .tw-row {\n  display: flex;\n  gap: 1rem;\n  flex-wrap: wrap;\n  margin-bottom: 1rem;\n}\n#tw-app .tw-field {\n  flex: 1;\n  min-width: 200px;\n}\n#tw-app .tw-field label {\n  display: block;\n  font-size: 0.83rem;\n  font-weight: 700;\n  color: #555;\n  margin-bottom: 0.35rem;\n}\n#tw-app .tw-field input,\n#tw-app .tw-field select {\n  width: 100%;\n  padding: 0.6rem 0.85rem;\n  border: 1.5px solid #d1d5db;\n  border-radius: 6px;\n  font-size: 1rem;\n  color: #1a1a2e;\n  background: #fafafa;\n  box-sizing: border-box;\n  transition: border-color 0.2s;\n  -webkit-appearance: none;\n  font-family: inherit;\n}\n#tw-app .tw-field input:focus,\n#tw-app .tw-field select:focus {\n  outline: none;\n  border-color: #4361ee;\n  background: #fff;\n}\n#tw-app .tw-field .tw-hint {\n  font-size: 0.76rem;\n  color: #888;\n  margin-top: 0.25rem;\n  line-height: 1.5;\n}\n#tw-app .tw-btn {\n  display: block;\n  width: 100%;\n  padding: 0.85rem;\n  background: #4361ee;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 1.05rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.2s, transform 0.1s;\n  font-family: inherit;\n}\n#tw-app .tw-btn:hover {\n  background: #3451d1;\n  transform: translateY(-1px);\n}\n#tw-app .tw-btn:active {\n  transform: translateY(0);\n}\n#tw-app .tw-results {\n  display: none;\n}\n#tw-app .tw-results.visible {\n  display: block;\n}\n#tw-app .tw-summary-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(155px, 1fr));\n  gap: 0.9rem;\n  margin-bottom: 1.2rem;\n}\n#tw-app .tw-stat {\n  background: #f8faff;\n  border: 1px solid #dce5ff;\n  border-radius: 8px;\n  padding: 0.85rem 1rem;\n  text-align: center;\n}\n#tw-app .tw-stat .tw-stat-label {\n  font-size: 0.73rem;\n  color: #666;\n  font-weight: 700;\n  margin-bottom: 0.3rem;\n  line-height: 1.4;\n}\n#tw-app .tw-stat .tw-stat-value {\n  font-size: 1.3rem;\n  font-weight: 800;\n  color: #4361ee;\n}\n#tw-app .tw-stat.net .tw-stat-value {\n  color: #2d8a4e;\n}\n#tw-app .tw-stat.deduct .tw-stat-value {\n  color: #c0392b;\n}\n#tw-app .tw-breakdown table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n}\n#tw-app .tw-breakdown th {\n  background: #f0f4ff;\n  padding: 0.55rem 0.7rem;\n  text-align: left;\n  font-size: 0.77rem;\n  font-weight: 700;\n  color: #4361ee;\n}\n#tw-app .tw-breakdown td {\n  padding: 0.55rem 0.7rem;\n  border-bottom: 1px solid #f0f0f0;\n  color: #333;\n}\n#tw-app .tw-breakdown tr:last-child td {\n  border-bottom: none;\n}\n#tw-app .tw-breakdown tr.total-row td {\n  font-weight: 700;\n  background: #fffbeb;\n  border-top: 2px solid #f0d060;\n}\n#tw-app .tw-breakdown tr.net-row td {\n  font-weight: 800;\n  background: #edfff4;\n  color: #2d8a4e;\n  border-top: 2px solid #6fcf97;\n  font-size: 0.97rem;\n}\n#tw-app .tw-period-tabs {\n  display: flex;\n  gap: 0.4rem;\n  flex-wrap: wrap;\n  margin-bottom: 1rem;\n}\n#tw-app .tw-period-tab {\n  padding: 0.35rem 0.85rem;\n  border: 1.5px solid #4361ee;\n  border-radius: 20px;\n  font-size: 0.82rem;\n  font-weight: 700;\n  cursor: pointer;\n  background: #fff;\n  color: #4361ee;\n  transition: all 0.15s;\n  font-family: inherit;\n}\n#tw-app .tw-period-tab.active,\n#tw-app .tw-period-tab:hover {\n  background: #4361ee;\n  color: #fff;\n}\n#tw-app .tw-disclaimer {\n  font-size: 0.77rem;\n  color: #888;\n  background: #fafafa;\n  border: 1px solid #eee;\n  border-radius: 6px;\n  padding: 0.75rem 1rem;\n  margin-top: 1rem;\n  line-height: 1.6;\n}\n#tw-app .tw-cta {\n  background: #fff8e1;\n  border: 1.5px solid #f6c90e;\n  border-radius: 8px;\n  padding: 1rem 1.2rem;\n  margin-top: 1.2rem;\n  font-size: 0.9rem;\n  line-height: 1.7;\n}\n#tw-app .tw-cta strong {\n  color: #b45309;\n}\n#tw-app .tw-cta a {\n  color: #4361ee;\n  font-weight: 700;\n  text-decoration: none;\n}\n#tw-app .tw-cta a:hover {\n  text-decoration: underline;\n}\n@media (max-width: 480px) {\n  #tw-app .tw-card { padding: 1rem; }\n  #tw-app .tw-stat .tw-stat-value { font-size: 1.1rem; }\n  #tw-app .tw-breakdown th,\n  #tw-app .tw-breakdown td { font-size: 0.78rem; padding: 0.45rem 0.4rem; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"tw-intro\"\u003e\n給与から毎月天引きされる\u003cstrong\u003e所得税の源泉徴収額・社会保険料・手取り額\u003c/strong\u003eを素早くシミュレーションできます。年収・月収を入力するだけで、給与明細の内訳を一覧表示します。\n\u003c/div\u003e\n\u003cdiv class=\"tw-card\"\u003e\n  \u003ch2\u003e給与情報を入力\u003c/h2\u003e\n  \u003cdiv class=\"tw-row\"\u003e\n    \u003cdiv class=\"tw-field\"\u003e\n      \u003clabel for=\"tw-gross\"\u003e給与額\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"tw-gross\" placeholder=\"例: 400000\" min=\"0\" step=\"1\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tw-field\"\u003e\n      \u003clabel for=\"tw-period\"\u003e給与の種類\u003c/label\u003e\n      \u003cselect id=\"tw-period\"\u003e\n        \u003coption value=\"annual\"\u003e年収（年間）\u003c/option\u003e\n        \u003coption value=\"monthly\" selected\u003e月収（月額）\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"tw-row\"\u003e\n    \u003cdiv class=\"tw-field\"\u003e\n      \u003clabel for=\"tw-status\"\u003e源泉徴収の区分\u003c/label\u003e\n      \u003cselect id=\"tw-status\"\u003e\n        \u003coption value=\"kou\"\u003e甲欄（扶養控除等申告書あり）\u003c/option\u003e\n        \u003coption value=\"otsu\"\u003e乙欄（扶養控除等申告書なし）\u003c/option\u003e\n      \u003c/select\u003e\n      \u003cdiv class=\"tw-hint\"\u003e主たる勤務先では甲欄、副業・掛け持ちは乙欄を選択。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tw-field\"\u003e\n      \u003clabel for=\"tw-dependents\"\u003e扶養親族等の数（人）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"tw-dependents\" value=\"0\" min=\"0\" max=\"10\" step=\"1\" /\u003e\n      \u003cdiv class=\"tw-hint\"\u003e配偶者（控除対象）も含めてカウント。乙欄の場合は0固定。\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"tw-row\"\u003e\n    \u003cdiv class=\"tw-field\"\u003e\n      \u003clabel for=\"tw-age\"\u003e年齢区分\u003c/label\u003e\n      \u003cselect id=\"tw-age\"\u003e\n        \u003coption value=\"general\"\u003e一般（40歳未満 / 65歳以上）\u003c/option\u003e\n        \u003coption value=\"care\"\u003e介護保険第2号被保険者（40〜64歳）\u003c/option\u003e\n      \u003c/select\u003e\n      \u003cdiv class=\"tw-hint\"\u003e40〜64歳は介護保険料が加算されます。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tw-field\"\u003e\n      \u003clabel for=\"tw-kenpo\"\u003e健康保険料率（%）\u003c/label\u003e\n      \u003cselect id=\"tw-kenpo\"\u003e\n        \u003coption value=\"9.98\"\u003e協会けんぽ 東京都（9.98%）\u003c/option\u003e\n        \u003coption value=\"10.21\"\u003e協会けんぽ 大阪府（10.21%）\u003c/option\u003e\n        \u003coption value=\"10.68\"\u003e協会けんぽ 北海道（10.68%）\u003c/option\u003e\n        \u003coption value=\"9.86\"\u003e協会けんぽ 愛知県（9.86%）\u003c/option\u003e\n        \u003coption value=\"10.16\"\u003e協会けんぽ 神奈川県（10.16%）\u003c/option\u003e\n        \u003coption value=\"custom\"\u003eその他（手動入力）\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"tw-row\" id=\"tw-custom-kenpo-row\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"tw-field\"\u003e\n      \u003clabel for=\"tw-custom-kenpo\"\u003e健康保険料率 手動入力（%）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"tw-custom-kenpo\" value=\"10.0\" min=\"1\" max=\"20\" step=\"0.01\" /\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"tw-btn\" onclick=\"twCalculate()\"\u003e源泉徴収額を計算する\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"tw-card tw-results\" id=\"tw-results\"\u003e\n  \u003ch2\u003e計算結果 — \u003cspan id=\"tw-result-period-label\"\u003e月額\u003c/span\u003e\u003c/h2\u003e\n  \u003cdiv class=\"tw-period-tabs\"\u003e\n    \u003cbutton class=\"tw-period-tab active\" onclick=\"twShowPeriod('monthly', this)\"\u003e月額\u003c/button\u003e\n    \u003cbutton class=\"tw-period-tab\" onclick=\"twShowPeriod('annual', this)\"\u003e年間\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"tw-summary-grid\"\u003e\n    \u003cdiv class=\"tw-stat net\"\u003e\n      \u003cdiv class=\"tw-stat-label\"\u003e手取り額\u003c/div\u003e\n      \u003cdiv class=\"tw-stat-value\" id=\"tw-net-pay\"\u003e--\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tw-stat deduct\"\u003e\n      \u003cdiv class=\"tw-stat-label\"\u003e所得税（源泉徴収）\u003c/div\u003e\n      \u003cdiv class=\"tw-stat-value\" id=\"tw-fed-tax\"\u003e--\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tw-stat deduct\"\u003e\n      \u003cdiv class=\"tw-stat-label\"\u003e健康保険料（本人）\u003c/div\u003e\n      \u003cdiv class=\"tw-stat-value\" id=\"tw-kenpo-disp\"\u003e--\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tw-stat deduct\"\u003e\n      \u003cdiv class=\"tw-stat-label\"\u003e介護保険料（本人）\u003c/div\u003e\n      \u003cdiv class=\"tw-stat-value\" id=\"tw-kaigo-disp\"\u003e--\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tw-stat deduct\"\u003e\n      \u003cdiv class=\"tw-stat-label\"\u003e厚生年金保険料（本人）\u003c/div\u003e\n      \u003cdiv class=\"tw-stat-value\" id=\"tw-nenkin-disp\"\u003e--\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tw-stat deduct\"\u003e\n      \u003cdiv class=\"tw-stat-label\"\u003e雇用保険料（本人）\u003c/div\u003e\n      \u003cdiv class=\"tw-stat-value\" id=\"tw-koyo-disp\"\u003e--\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"tw-breakdown\"\u003e\n    \u003ch2\u003e給与明細シミュレーション\u003c/h2\u003e\n    \u003ctable\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003e月額\u003c/th\u003e\n          \u003cth\u003e年間\u003c/th\u003e\n        \u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody id=\"tw-table-body\"\u003e\n      \u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"tw-disclaimer\"\u003e\n    \u003cstrong\u003e注意事項：\u003c/strong\u003e本ツールは令和7年（2025年）の源泉徴収税額表（月額表）および標準報酬月額表を基にした概算です。実際の源泉徴収額は給与明細の支給項目・非課税通勤費・各種控除等によって異なります。正確な計算は給与ソフトまたは税理士にご確認ください。社会保険料は標準報酬月額テーブルを簡略化した近似値です。\n  \u003c/div\u003e\n  \u003cdiv class=\"tw-cta\"\u003e\n    \u003cstrong\u003e給与計算を自動化したい方へ\u003c/strong\u003e\u003cbr\u003e\n    源泉徴収の計算・年末調整・社会保険手続きをまとめてデジタル化できます。\u003cbr\u003e\n    給与計算を自動化 → \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\"\u003efreee人事労務で源泉徴収を自動計算\u003c/a\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  // 2025年版 月額源泉徴収税額表（甲欄）近似実装\n  // 課税所得（給与所得控除後・基礎控除後）に対する累進税率を適用\n  // 月額表の実態に合わせ、月単位で計算\n\n  var KAIGO_RATE = 0.018 / 2;   // 介護保険料率 1.82%（労使折半）本人分\n  var NENKIN_RATE = 0.183 / 2;  // 厚生年金 18.3%（労使折半）本人分\n  var KOYO_RATE = 0.006;        // 雇用保険 被保険者負担（一般）0.6%\n\n  // 標準報酬月額テーブル（簡略版：上限は150万円）\n  var HYOJUN_TABLE = [\n    [63000, 58000], [73000, 68000], [83000, 78000], [93000, 88000],\n    [101000, 98000], [107000, 104000], [114000, 110000], [122000, 118000],\n    [130000, 126000], [138000, 134000], [146000, 142000], [155000, 150000],\n    [165000, 160000], [175000, 170000], [185000, 180000], [195000, 190000],\n    [210000, 200000], [230000, 220000], [250000, 240000], [270000, 260000],\n    [290000, 280000], [310000, 300000], [330000, 320000], [350000, 340000],\n    [370000, 360000], [395000, 380000], [425000, 410000], [455000, 440000],\n    [485000, 470000], [515000, 500000], [545000, 530000], [575000, 560000],\n    [605000, 590000], [635000, 620000], [665000, 650000], [695000, 680000],\n    [730000, 710000], [770000, 750000], [810000, 790000], [855000, 830000],\n    [905000, 880000], [955000, 930000], [1005000, 980000], [1055000, 1030000],\n    [1115000, 1090000], [1175000, 1150000], [Infinity, 1390000]\n  ];\n\n  function getHyojun(monthly) {\n    for (var i = 0; i \u003c HYOJUN_TABLE.length; i++) {\n      if (monthly \u003c HYOJUN_TABLE[i][0]) return HYOJUN_TABLE[i][1];\n    }\n    return HYOJUN_TABLE[HYOJUN_TABLE.length - 1][1];\n  }\n\n  // 月額源泉徴収（甲欄）簡易計算\n  // 給与所得控除・基礎控除を年換算で引いた後、累進税率を月換算\n  function calcGensenchoOu(monthlyGross, dependents) {\n    var annual = monthlyGross * 12;\n    // 給与所得控除（2025年）\n    var kyuyoKojo;\n    if (annual \u003c= 1625000) kyuyoKojo = 550000;\n    else if (annual \u003c= 1800000) kyuyoKojo = annual * 0.4 - 100000;\n    else if (annual \u003c= 3600000) kyuyoKojo = annual * 0.3 + 80000;\n    else if (annual \u003c= 6600000) kyuyoKojo = annual * 0.2 + 440000;\n    else if (annual \u003c= 8500000) kyuyoKojo = annual * 0.1 + 1100000;\n    else kyuyoKojo = 1950000;\n    // 基礎控除\n    var kisoKojo = annual \u003c= 24000000 ? 480000 : annual \u003c= 24500000 ? 320000 : annual \u003c= 25000000 ? 160000 : 0;\n    // 扶養控除（1人38万）\n    var huyoKojo = dependents * 380000;\n    var taxable = Math.max(0, annual - kyuyoKojo - kisoKojo - huyoKojo);\n    // 所得税率テーブル\n    var tax = 0;\n    var brackets = [\n      [1950000, 0.05, 0],\n      [3300000, 0.10, 97500],\n      [6950000, 0.20, 427500],\n      [9000000, 0.23, 636000],\n      [18000000, 0.33, 1536000],\n      [40000000, 0.40, 2796000],\n      [Infinity, 0.45, 4796000]\n    ];\n    for (var i = 0; i \u003c brackets.length; i++) {\n      if (taxable \u003c= brackets[i][0]) {\n        tax = taxable * brackets[i][1] - brackets[i][2];\n        break;\n      }\n    }\n    // 復興特別所得税 2.1%\n    tax = tax * 1.021;\n    return Math.max(0, Math.round(tax / 12));\n  }\n\n  // 乙欄：一律で月額総支給の3.063%（近似）+ 復興特別所得税込み\n  function calcGensenchoOtsu(monthlyGross) {\n    // 乙欄は最低でも月額3.063%相当（実際は税額表ベース）\n    var annual = monthlyGross * 12;\n    var taxable = Math.max(0, annual * 0.75); // 給与所得控除なし扱いで近似\n    // 簡易に20.42%（乙欄一般税率近似）\n    return Math.round(monthlyGross * 0.2042);\n  }\n\n  document.getElementById('tw-kenpo').addEventListener('change', function() {\n    document.getElementById('tw-custom-kenpo-row').style.display =\n      this.value === 'custom' ? 'flex' : 'none';\n  });\n\n  var twData = null;\n  var twCurrentView = 'monthly';\n\n  function fmt(n) {\n    return '¥' + Math.round(n).toLocaleString('ja-JP');\n  }\n\n  window.twCalculate = function() {\n    var grossInput = parseFloat(document.getElementById('tw-gross').value) || 0;\n    var period = document.getElementById('tw-period').value;\n    var status = document.getElementById('tw-status').value;\n    var dependents = parseInt(document.getElementById('tw-dependents').value) || 0;\n    var ageType = document.getElementById('tw-age').value;\n    var kenpoEl = document.getElementById('tw-kenpo');\n    var kenpoRate = kenpoEl.value === 'custom'\n      ? (parseFloat(document.getElementById('tw-custom-kenpo').value) || 10) / 100\n      : parseFloat(kenpoEl.value) / 100;\n    var kaigoRate = ageType === 'care' ? KAIGO_RATE : 0;\n\n    // 月収に統一\n    var monthly = period === 'annual' ? grossInput / 12 : grossInput;\n\n    // 標準報酬月額\n    var hyojun = getHyojun(monthly);\n\n    // 社会保険料（本人負担）\n    var kenpoMonthly = Math.round(hyojun * kenpoRate / 2);\n    var kaigoMonthly = ageType === 'care' ? Math.round(hyojun * kaigoRate) : 0;\n    var nenkinMonthly = Math.round(hyojun * NENKIN_RATE);\n    var koyoMonthly = Math.round(monthly * KOYO_RATE);\n    var socialTotal = kenpoMonthly + kaigoMonthly + nenkinMonthly + koyoMonthly;\n\n    // 所得税源泉徴収\n    // 社会保険料控除後の課税対象給与で計算\n    var taxableMonthly = Math.max(0, monthly - socialTotal);\n    var gensen;\n    if (status === 'kou') {\n      // 甲欄: 控除後の月額から再計算\n      gensen = calcGensenchoOu(taxableMonthly, dependents);\n    } else {\n      gensen = calcGensenchoOtsu(taxableMonthly);\n    }\n\n    var totalDeduction = gensen + socialTotal;\n    var netMonthly = monthly - totalDeduction;\n\n    twData = {\n      monthly: monthly,\n      gensen: gensen,\n      kenpo: kenpoMonthly,\n      kaigo: kaigoMonthly,\n      nenkin: nenkinMonthly,\n      koyo: koyoMonthly,\n      socialTotal: socialTotal,\n      totalDeduction: totalDeduction,\n      netMonthly: netMonthly\n    };\n\n    twCurrentView = 'monthly';\n    document.querySelectorAll('#tw-app .tw-period-tab').forEach(function(t) { t.classList.remove('active'); });\n    document.querySelectorAll('#tw-app .tw-period-tab')[0].classList.add('active');\n\n    twRenderResults();\n\n    var resultsEl = document.getElementById('tw-results');\n    resultsEl.classList.add('visible');\n    resultsEl.scrollIntoView({ behavior: 'smooth', block: 'start' });\n  };\n\n  window.twShowPeriod = function(view, btn) {\n    twCurrentView = view;\n    document.querySelectorAll('#tw-app .tw-period-tab').forEach(function(t) { t.classList.remove('active'); });\n    btn.classList.add('active');\n    twRenderResults();\n  };\n\n  function twRenderResults() {\n    if (!twData) return;\n    var d = twData;\n    var mul = twCurrentView === 'annual' ? 12 : 1;\n    var label = twCurrentView === 'annual' ? '年間' : '月額';\n\n    document.getElementById('tw-result-period-label').textContent = label;\n\n    document.getElementById('tw-net-pay').textContent = fmt(d.netMonthly * mul);\n    document.getElementById('tw-fed-tax').textContent = fmt(d.gensen * mul);\n    document.getElementById('tw-kenpo-disp').textContent = fmt(d.kenpo * mul);\n    document.getElementById('tw-kaigo-disp').textContent = d.kaigo \u003e 0 ? fmt(d.kaigo * mul) : '—';\n    document.getElementById('tw-nenkin-disp').textContent = fmt(d.nenkin * mul);\n    document.getElementById('tw-koyo-disp').textContent = fmt(d.koyo * mul);\n\n    var rows = [\n      { label: '総支給額（額面）', val: d.monthly, cls: '' },\n      { label: '所得税（源泉徴収・復興税込）', val: -d.gensen, cls: 'deduct' },\n      { label: '健康保険料（本人負担）', val: -d.kenpo, cls: 'deduct' },\n      { label: '介護保険料（本人負担）', val: d.kaigo \u003e 0 ? -d.kaigo : null, cls: 'deduct' },\n      { label: '厚生年金保険料（本人負担）', val: -d.nenkin, cls: 'deduct' },\n      { label: '雇用保険料（本人負担）', val: -d.koyo, cls: 'deduct' },\n    ];\n\n    var tbody = document.getElementById('tw-table-body');\n    tbody.innerHTML = '';\n\n    rows.forEach(function(row) {\n      if (row.val === null) return;\n      var tr = document.createElement('tr');\n      var monthly = row.val;\n      var annual = monthly * 12;\n      tr.innerHTML =\n        '\u003ctd\u003e' + row.label + '\u003c/td\u003e' +\n        '\u003ctd\u003e' + (monthly \u003c 0 ? '-' : '') + fmt(Math.abs(monthly)) + '\u003c/td\u003e' +\n        '\u003ctd\u003e' + (annual \u003c 0 ? '-' : '') + fmt(Math.abs(annual)) + '\u003c/td\u003e';\n      tbody.appendChild(tr);\n    });\n\n    // 控除合計行\n    var trTotal = document.createElement('tr');\n    trTotal.className = 'total-row';\n    trTotal.innerHTML =\n      '\u003ctd\u003e控除合計\u003c/td\u003e' +\n      '\u003ctd\u003e-' + fmt(d.totalDeduction) + '\u003c/td\u003e' +\n      '\u003ctd\u003e-' + fmt(d.totalDeduction * 12) + '\u003c/td\u003e';\n    tbody.appendChild(trTotal);\n\n    // 手取り行\n    var trNet = document.createElement('tr');\n    trNet.className = 'net-row';\n    trNet.innerHTML =\n      '\u003ctd\u003e手取り額（概算）\u003c/td\u003e' +\n      '\u003ctd\u003e' + fmt(d.netMonthly) + '\u003c/td\u003e' +\n      '\u003ctd\u003e' + fmt(d.netMonthly * 12) + '\u003c/td\u003e';\n    tbody.appendChild(trNet);\n  }\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003eフリーランス報酬計算 → \u003ca href=\"https://productivity-works.com/ja/tools/freelance-rate-calculator/\"\u003eフリーランス報酬計算ツール\u003c/a\u003e\n\n時給年収換算 → \u003ca href=\"https://productivity-works.com/ja/tools/hourly-to-salary-calculator/\"\u003e時給年収換算ツール\u003c/a\u003e\n\n年金シミュレーター → \u003ca href=\"https://productivity-works.com/ja/tools/pension-simulator/\"\u003e年金シミュレーターツール\u003c/a\u003e\n\u003c/p\u003e","title":"源泉徴収計算ツール - 給与天引き額を簡単計算"},{"content":" CSS詳細度計算ツール CSSセレクタを入力するとスコア (a, b, c, d) を即座に計算。複数セレクタを比較してカスケードの優先順位を視覚的に確認できます。\n計算 + 比較追加 詳細度スコア (a, b, c, d) 0 インライン\nスタイル (a) , 0 IDセレクタ (b) , 0 クラス・\n属性・\n擬似クラス (c) , 0 要素・\n擬似要素 (d) (0, 0, 0, 0) インライン (a) 0 ID (b) 0 クラス等 (c) 0 要素等 (d) 0 セレクタの内訳 インラインスタイル IDセレクタ クラス / 属性 / 擬似クラス 要素 / 擬似要素 結合子（カウントなし） セレクタ比較 — 詳細度順にソート セレクタがまだ追加されていません。セレクタを入力して「+ 比較追加」をクリックしてください。 詳細度順にソート すべてクリア よくある例 — クリックで計算 CSS詳細度の仕組み a — インラインスタイル HTML要素に直接書かれたスタイル (style=\"...\")。最も優先度が高く、セレクタより常に勝ります。 b — IDセレクタ #id 形式のセレクタ。非常に高い詳細度。クラスや要素が何個あっても1つのIDが勝ります。 c — クラス・属性・擬似クラス クラス (.class)、属性 ([attr])、擬似クラス (:hover、:nth-child()) などが対象です。 d — 要素・擬似要素 タイプセレクタ (div、p) と擬似要素 (::before、::after)。最も低い詳細度です。 関連ツール グリッドレイアウトを視覚的に構築 → CSS Gridジェネレーター Flexboxレイアウトを生成 → CSS Flexboxジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/css-specificity-calculator/","summary":"\u003cdiv id=\"cs-app\"\u003e\n\u003cstyle\u003e\n  #cs-app *,\n  #cs-app *::before,\n  #cs-app *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n\u003cp\u003e#cs-app {\nfont-family: -apple-system, BlinkMacSystemFont, \u0026ldquo;Hiragino Sans\u0026rdquo;, \u0026ldquo;Yu Gothic UI\u0026rdquo;, \u0026ldquo;Meiryo\u0026rdquo;, \u0026ldquo;Segoe UI\u0026rdquo;, sans-serif;\nfont-size: 14px;\ncolor: #1a1a2e;\nbackground: #f8f9ff;\nborder-radius: 12px;\npadding: 24px;\nmax-width: 100%;\noverflow: hidden;\n}\u003c/p\u003e\n\u003cp\u003e#cs-app h2.cs-title {\nfont-size: 1.4rem;\nfont-weight: 700;\nmargin-bottom: 4px;\ncolor: #1a1a2e;\n}\u003c/p\u003e\n\u003cp\u003e#cs-app p.cs-subtitle {\ncolor: #666;\nmargin-bottom: 20px;\nfont-size: 0.9rem;\n}\u003c/p\u003e\n\u003cp\u003e/* 入力エリア */\n#cs-app .cs-input-row {\ndisplay: flex;\ngap: 8px;\nmargin-bottom: 16px;\nalign-items: stretch;\n}\u003c/p\u003e","title":"CSS詳細度計算ツール"},{"content":" DNS設定ヘルパー ドメイン名を入力し、利用するサービスを選択すると、そのままコピーできるDNSレコードが生成されます。\nドメイン名 プリセット設定を選択\nGitHub Pages Vercel Netlify Cloudflare Google Workspace Microsoft 365 CDN（汎用） メールのみ DNSレコードを生成する\nDNSレコードタイプ リファレンス A Aレコード — IPv4アドレス ホスト名をIPv4アドレスにマッピングする、最も基本的なDNSレコードです。ブラウザがドメインにアクセスする際、DNSはAレコードを参照してどのサーバーに接続するかを決定します。 example.com. 3600 IN A 93.184.216.34 www.example.com. 3600 IN A 93.184.216.34 使用場面：ドメインをWebサーバー・メールサーバー・その他IPv4アドレスに向ける場合。 AAAA AAAAレコード — IPv6アドレス ホスト名をIPv6アドレスにマッピングします。Aレコードと同じ役割ですが、IPv6に対応した現代的なインフラ向けです。GitHub Pages・Cloudflare等の主要CDNではAレコードと合わせてAAAAレコードも設定することを推奨します。 example.com. 3600 IN AAAA 2606:2800:220:1:248:1893:25c8:1946 使用場面：サーバーがIPv6をサポートしている場合（GitHub Pages、Cloudflare、主要CDN等）。 CNAME CNAMEレコード — 正規名（エイリアス） あるホスト名を別のホスト名のエイリアスとして定義します。IPアドレスではなく別のドメイン名を指します。標準DNSではゾーン頂点（@）では使用不可です（ALIAS/ANAMEレコードを使用してください）。最終的にAまたはAAAAレコードに解決される必要があります。 www.example.com. 3600 IN CNAME example.com. blog.example.com. 3600 IN CNAME my-site.netlify.app. 使用場面：サブドメインをVercel・Netlify・GitHub Pages（www）・CDNホスト名等に向ける場合。 MX MXレコード — メールエクスチェンジャー ドメイン宛てのメールを受信するメールサーバーを指定します。複数設定でき、優先度（数値が小さいほど高優先）を割り当てます。値にはIPアドレスではなくホスト名を指定します。 example.com. 3600 IN MX 1 aspmx.l.google.com. example.com. 3600 IN MX 5 alt1.aspmx.l.google.com. example.com. 3600 IN MX 10 alt2.aspmx.l.google.com. 使用場面：Google Workspace・Microsoft 365・Fastmail・ProtonMail等のメール設定時。 TXT TXTレコード — テキスト情報 任意のテキストデータを格納します。ドメイン所有権確認、メール認証（SPF・DKIM・DMARC）、各種サービス設定に広く利用されています。同一ドメインに複数のTXTレコードを設定できます。 # SPF — 送信許可サーバーを宣言 example.com. 3600 IN TXT \"v=spf1 include:_spf.google.com ~all\" DMARC — メールポリシー設定 _dmarc.example.com. 3600 IN TXT \u0026ldquo;v=DMARC1; p=reject; rua=mailto:dmarc@example.com\u0026rdquo;\nDKIM — 署名公開鍵 selector._domainkey.example.com. 3600 IN TXT \u0026ldquo;v=DKIM1; k=rsa; p=MIIBIjAN\u0026hellip;\u0026rdquo;\nドメイン確認（Googleサーチコンソール等） example.com. 3600 IN TXT \u0026ldquo;google-site-verification=abc123\u0026rdquo;\n使用場面：SPF/DKIM/DMARCによるメール認証、ドメイン所有権確認、各種サービス設定。 NS NSレコード — ネームサーバー ドメインまたはサブドメインの権威ネームサーバーを指定します。ゾーン頂点のNSレコードはドメインレジストラが管理します。サブドメインを別のDNSプロバイダーに委任する際にも使用します。 example.com. 86400 IN NS ns1.cloudflare.com. example.com. 86400 IN NS ns2.cloudflare.com. サブドメインの委任 staging.example.com. 3600 IN NS ns1.otherprovider.com.\n使用場面：DNSプロバイダー変更時、サブドメインのDNS管理を別プロバイダーに委任する場合。 SOA SOAレコード — 権威開始（Start of Authority） DNSゾーンの管理情報を格納します。プライマリネームサーバー、管理者メールアドレス、シリアル番号、リフレッシュ/リトライ/有効期限タイマーが含まれます。各ゾーンに必ず1つ存在します。通常はDNSプロバイダーが自動管理します。 example.com. 86400 IN SOA ns1.example.com. admin.example.com. ( 2025051601 ; シリアル番号 (YYYYMMDDnn) 3600 ; リフレッシュ間隔 (1時間) 900 ; リトライ間隔 (15分) 604800 ; 有効期限 (7日) 300 ) ; 最小TTL (5分) 使用場面：通常は自動管理。BINDやPowerDNS等の自己ホスト型DNSでシリアル番号やTTLを手動調整する場合。 SRV SRVレコード — サービスロケーター 特定サービスのサーバー情報（サービス名・プロトコル・優先度・ウェイト・ポート・ターゲット）を指定します。書式：_サービス._プロト.ホスト TTL IN SRV 優先度 ウェイト ポート ターゲット # Microsoft Teams / Skype for Business _sip._tls.example.com. 3600 IN SRV 100 1 443 sipdir.online.lync.com. _sipfederationtls._tcp.example.com. 3600 IN SRV 100 1 5061 sipfed.online.lync.com. XMPP (Jabber) _xmpp-client._tcp.example.com. 3600 IN SRV 5 0 5222 xmpp.example.com.\n使用場面：Microsoft 365（Teams/Lync）、VoIP、XMPP、サービスディスカバリーが必要なプロトコル全般。 CAA CAAレコード — 認証局認可（Certification Authority Authorization） ドメインに対してSSL/TLS証明書を発行できる認証局（CA）を制限します。不正な証明書発行を防ぎます。タグの種類：issue（単一ドメイン証明書）、issuewild（ワイルドカード証明書）、iodef（違反通知先）。 example.com. 3600 IN CAA 0 issue \"letsencrypt.org\" example.com. 3600 IN CAA 0 issuewild \"letsencrypt.org\" example.com. 3600 IN CAA 0 issue \"digicert.com\" example.com. 3600 IN CAA 0 iodef \"mailto:security@example.com\" 使用場面：SSL証明書セキュリティ強化。PCI-DSS等のコンプライアンス要件にも対応。 PTR PTRレコード — ポインター（逆引きDNS） AレコードとIPアドレスとホスト名の対応を逆にしたものです。in-addr.arpa（IPv4）またはip6.arpa（IPv6）ゾーンに存在します。ドメインレジストラではなく、ISPまたはホスティングプロバイダーに設定を依頼します。メールサーバーの信頼性確保に重要です。 # IPv4逆引きDNS（93.184.216.34 → example.com） 34.216.184.93.in-addr.arpa. 3600 IN PTR mail.example.com. 使用場面：メールサーバー設定（スパム対策）、ネットワーク診断、コンプライアンス要件の充足。 TTL（有効期限）早見表 TTL値 秒数 推奨場面 300 5分 移行作業中 — 変更が素早く反映される 900 15分 テスト中や頻繁に変更する場合 3600 1時間 一般的なレコードの標準値 86400 24時間 安定したレコード（NS・SOA等） 172800 48時間 ほとんど変更しない安定したレコード ヒント： DNS移行の前にTTLを短く設定しておくと、変更が素早く世界中に伝播します。安定したら元の値に戻してください。\nよくあるDNSトラブルと対処法 変更が反映されない場合 DNSの伝播にはレコードのTTL時間がかかります。TTLが86400（24時間）の場合、最大24時間かかることがあります。whatsmydns.net で世界各地の伝播状況を確認できます。\nメールがスパムに振り分けられる場合 SPF・DKIM・DMARCのTXTレコードがすべて正しく設定されているか確認してください。メールサーバーの逆引きDNS（PTRレコード）が未設定の場合もスパム判定の原因になります。\nCNAMEが競合する場合 同一ホスト名にCNAMEと他のレコードタイプを共存させることはできません。ゾーン頂点（@）ではALIAS/ANAMEレコード（Cloudflare、Route 53）またはAレコードを使用してください。\nホスト変更後に証明書エラーが出る場合 新しいホストのCAを許可するCAAレコードへの更新と、A/CNAMEレコードを新サーバーに向けた後に、新しい証明書を取得してください。\n関連ツール IPアドレス情報 Robots.txt ジェネレーター .htaccess ジェネレーター freeeで業務効率をさらに向上させましょう DNSや技術設定が整ったら、次は経理・会計の自動化にも取り組んでみませんか？freee会計はクラウド上で請求書発行・経費精算・確定申告をまとめて管理できる、フリーランス・中小企業向けの会計ソフトです。初回30日間無料でお試しいただけます。\nfreeeを無料で試してみる ","permalink":"https://productivity-works.com/ja/tools/dns-record-guide/","summary":"\u003cdiv id=\"dns-app\"\u003e\n\u003cstyle\u003e\n#dns-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic UI\", \"Segoe UI\", sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  color: #1a1a2e;\n  line-height: 1.7;\n}\n#dns-app *, #dns-app *::before, #dns-app *::after {\n  box-sizing: border-box;\n}\n#dns-app h2 {\n  font-size: 1.35rem;\n  font-weight: 700;\n  margin: 2rem 0 1rem;\n  color: #1a1a2e;\n  border-bottom: 2px solid #e0e7ff;\n  padding-bottom: 0.4rem;\n}\n#dns-app h3 {\n  font-size: 1.02rem;\n  font-weight: 600;\n  margin: 0 0 0.4rem;\n  color: #1a1a2e;\n}\n\n/* ---------- 設定ジェネレーター ---------- */\n#dns-config-generator {\n  background: linear-gradient(135deg, #f0f4ff 0%, #e8f5e9 100%);\n  border: 1px solid #c7d7fc;\n  border-radius: 12px;\n  padding: 1.5rem;\n  margin-bottom: 2rem;\n}\n#dns-config-generator label {\n  display: block;\n  font-weight: 600;\n  font-size: 0.9rem;\n  color: #374151;\n  margin-bottom: 0.3rem;\n}\n#dns-domain-input {\n  width: 100%;\n  padding: 0.6rem 0.9rem;\n  border: 1px solid #a5b4fc;\n  border-radius: 8px;\n  font-size: 1rem;\n  margin-bottom: 1rem;\n  outline: none;\n  transition: border 0.2s;\n  background: #fff;\n}\n#dns-domain-input:focus {\n  border-color: #6366f1;\n  box-shadow: 0 0 0 3px rgba(99,102,241,0.15);\n}\n#dns-preset-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(145px, 1fr));\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n}\n.dns-preset-btn {\n  padding: 0.55rem 0.7rem;\n  border: 2px solid #c7d7fc;\n  border-radius: 8px;\n  background: #fff;\n  cursor: pointer;\n  font-size: 0.82rem;\n  font-weight: 600;\n  color: #374151;\n  transition: all 0.15s;\n  text-align: center;\n}\n.dns-preset-btn:hover,\n.dns-preset-btn.dns-preset-active {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n#dns-generate-btn {\n  display: inline-block;\n  padding: 0.65rem 1.6rem;\n  background: #6366f1;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 0.95rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n#dns-generate-btn:hover { background: #4f46e5; }\n\n/* ---------- 結果エリア ---------- */\n#dns-results {\n  margin-top: 1.5rem;\n  display: none;\n}\n#dns-results.dns-visible { display: block; }\n.dns-result-header {\n  font-weight: 700;\n  font-size: 1rem;\n  color: #4f46e5;\n  margin-bottom: 0.8rem;\n}\n.dns-record-card {\n  background: #fff;\n  border: 1px solid #e0e7ff;\n  border-radius: 10px;\n  padding: 1rem 1.1rem;\n  margin-bottom: 0.75rem;\n  position: relative;\n}\n.dns-record-type-badge {\n  display: inline-block;\n  padding: 0.2rem 0.55rem;\n  border-radius: 5px;\n  font-size: 0.72rem;\n  font-weight: 800;\n  letter-spacing: 0.04em;\n  margin-right: 0.5rem;\n  vertical-align: middle;\n}\n.dns-badge-A    { background: #dbeafe; color: #1d4ed8; }\n.dns-badge-AAAA { background: #ede9fe; color: #6d28d9; }\n.dns-badge-CNAME{ background: #dcfce7; color: #166534; }\n.dns-badge-MX   { background: #fef9c3; color: #854d0e; }\n.dns-badge-TXT  { background: #fce7f3; color: #9d174d; }\n.dns-badge-NS   { background: #e0f2fe; color: #0369a1; }\n.dns-badge-SRV  { background: #ffedd5; color: #9a3412; }\n.dns-badge-CAA  { background: #f3e8ff; color: #7e22ce; }\n.dns-badge-PTR  { background: #d1fae5; color: #065f46; }\n.dns-badge-SOA  { background: #fee2e2; color: #991b1b; }\n.dns-record-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr auto;\n  gap: 0.5rem;\n  align-items: center;\n  margin-top: 0.5rem;\n  font-size: 0.85rem;\n}\n.dns-record-label {\n  font-size: 0.72rem;\n  font-weight: 700;\n  color: #6b7280;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 0.1rem;\n}\n.dns-record-value {\n  font-family: \"SF Mono\", \"Fira Code\", \"Fira Mono\", monospace;\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 5px;\n  padding: 0.25rem 0.5rem;\n  word-break: break-all;\n  font-size: 0.82rem;\n  color: #1e293b;\n}\n.dns-copy-btn {\n  padding: 0.3rem 0.7rem;\n  background: #6366f1;\n  color: #fff;\n  border: none;\n  border-radius: 6px;\n  cursor: pointer;\n  font-size: 0.78rem;\n  font-weight: 600;\n  white-space: nowrap;\n  transition: background 0.15s;\n  align-self: end;\n}\n.dns-copy-btn:hover  { background: #4f46e5; }\n.dns-copy-btn.copied { background: #16a34a; }\n.dns-record-note {\n  font-size: 0.78rem;\n  color: #6b7280;\n  margin-top: 0.5rem;\n  font-style: italic;\n}\n\n/* ---------- リファレンス ---------- */\n#dns-reference-section { margin-top: 2.5rem; }\n.dns-type-card {\n  background: #fff;\n  border: 1px solid #e0e7ff;\n  border-radius: 10px;\n  padding: 1.1rem 1.2rem;\n  margin-bottom: 1rem;\n}\n.dns-type-card-header {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  margin-bottom: 0.6rem;\n}\n.dns-type-desc {\n  font-size: 0.88rem;\n  color: #374151;\n  margin-bottom: 0.5rem;\n}\n.dns-type-example {\n  font-family: \"SF Mono\", \"Fira Code\", monospace;\n  font-size: 0.8rem;\n  background: #f1f5f9;\n  border-left: 3px solid #6366f1;\n  padding: 0.5rem 0.8rem;\n  border-radius: 0 6px 6px 0;\n  color: #1e293b;\n  white-space: pre;\n  overflow-x: auto;\n}\n.dns-type-use {\n  font-size: 0.78rem;\n  color: #6b7280;\n  margin-top: 0.4rem;\n}\n\n/* ---------- クロスリンク ---------- */\n#dns-crosslinks {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.6rem;\n  margin-top: 1.5rem;\n}\n.dns-crosslink {\n  display: inline-block;\n  padding: 0.45rem 1rem;\n  background: #e0e7ff;\n  color: #4338ca;\n  border-radius: 20px;\n  font-size: 0.85rem;\n  font-weight: 600;\n  text-decoration: none;\n  transition: background 0.15s;\n}\n.dns-crosslink:hover {\n  background: #c7d7fc;\n  text-decoration: none;\n}\n\n/* ---------- freee CTA ---------- */\n#dns-freee-cta {\n  margin-top: 2.5rem;\n  background: linear-gradient(135deg, #fff7ed 0%, #fef3c7 100%);\n  border: 1px solid #fed7aa;\n  border-radius: 12px;\n  padding: 1.4rem 1.6rem;\n}\n#dns-freee-cta h3 {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #92400e;\n  margin-bottom: 0.5rem;\n}\n#dns-freee-cta p {\n  font-size: 0.88rem;\n  color: #78350f;\n  margin-bottom: 0.8rem;\n}\n.dns-freee-btn {\n  display: inline-block;\n  padding: 0.6rem 1.4rem;\n  background: #f97316;\n  color: #fff;\n  border-radius: 8px;\n  font-size: 0.9rem;\n  font-weight: 700;\n  text-decoration: none;\n  transition: background 0.15s;\n}\n.dns-freee-btn:hover {\n  background: #ea580c;\n  text-decoration: none;\n  color: #fff;\n}\n\n/* ---------- レスポンシブ ---------- */\n@media (max-width: 600px) {\n  #dns-preset-grid {\n    grid-template-columns: repeat(2, 1fr);\n  }\n  .dns-record-row {\n    grid-template-columns: 1fr 1fr;\n  }\n  .dns-copy-btn {\n    grid-column: 1 / -1;\n    width: 100%;\n    margin-top: 0.3rem;\n  }\n}\n\u003c/style\u003e\n\u003ch2 id=\"dns設定ヘルパー\"\u003eDNS設定ヘルパー\u003c/h2\u003e\n\u003cp\u003eドメイン名を入力し、利用するサービスを選択すると、そのままコピーできるDNSレコードが生成されます。\u003c/p\u003e","title":"DNSレコードガイド — 設定ヘルパー"},{"content":"本ページにはアフィリエイトリンクが含まれています。\n予算プランナー | 50/30/20ルール計算ツール 月の手取り収入を入力して、50/30/20予算ルールに基づく推奨支出配分を確認しましょう。\n月の手取り収入（円） 10万円50万円150万円 月間貯蓄目標（20%） 10万円 年間貯蓄額: 120万円 必需費（50%）\n家賃・住居費、食費、光熱費、保険、交通費 25万円 欲しいもの（30%）\n外食、娯楽、買い物、趣味 15万円 貯蓄・借金返済（20%）\n緊急資金、投資、借金返済 10万円 20%を投資した場合の試算（年利7%）： 10年後173万円 30年後1,220万円 50/30/20ルールとは：エリザベス・ウォーレン上院議員が広めたシンプルな家計管理法。税引き後収入の50%を必需費、30%を欲しいもの、20%を貯蓄・借金返済に充てます。 予算の使い方 必需費（50%）の内訳 カテゴリ 収入に占める目安 住居費（家賃・ローン） 25〜30% 食費 10〜15% 光熱費 3〜5% 交通費 5〜10% 保険料 3〜5% 20%貯蓄の使い道 まず緊急資金 — 3〜6ヶ月分の生活費を高利回り普通預金口座に NISAやiDeCoを活用 — 税制優遇メリットを最大限に活用する 残りを投資 — 低コストのインデックスファンドで長期運用 よくある質問 Q: 20%貯蓄できない場合は？ まずできる金額から始めましょう。5%でもゼロよりはるかに良いです。自動積立を設定し、毎月1%ずつ増やしていきましょう。\nQ: 借金返済は20%に含めますか？ 最低返済額は「必需費（50%）」に含めます。追加の繰り上げ返済分は20%に含めてください。\nQ: 必需費が50%を超えてしまう場合は？ 生活費の高い地域ではよくあることです。最大の出費（通常は住居費）を減らす方法を探すか、収入を増やすことを検討しましょう。\n次のステップ 貯蓄を投資に回す — 毎月1万円でも、年利7%で20年間投資すれば約630万円以上になります 高利率の借金を先に返す — 借金返済計画を立てましょう 実際の手取りを確認 — 正確な数字で予算を立てることが重要です 関連ツール 緊急資金計算ツール — 必要な緊急資金額を計算 配当収入計算ツール — 投資からの配当収入を試算 FIREシミュレーター — 早期退職までの年数を計算 資産管理を効率化 → freee会計で家計を自動管理 関連記事 家計簿アプリから卒業：収入が月10万円超えたらfreeeに切り替える理由 30代の保険見直し完全ガイド｜無料相談で年間5万円節約できるケースも 独身に生命保険は必要？｜20代・30代が本当に必要な保障額をデータで解説【2026年版】 ","permalink":"https://productivity-works.com/ja/tools/budget-planner/","summary":"\u003cp\u003e\u003cem\u003e本ページにはアフィリエイトリンクが含まれています。\u003c/em\u003e\u003c/p\u003e\n\u003ch1 id=\"予算プランナー--503020ルール計算ツール\"\u003e予算プランナー | 50/30/20ルール計算ツール\u003c/h1\u003e\n\u003cp\u003e月の手取り収入を入力して、50/30/20予算ルールに基づく\u003cstrong\u003e推奨支出配分\u003c/strong\u003eを確認しましょう。\u003c/p\u003e\n\u003cdiv id=\"budget-calc\" style=\"max-width:640px;margin:0 auto;padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:24px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e月の手取り収入（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"monthlyPay\" min=\"100000\" max=\"1500000\" step=\"10000\" value=\"500000\" oninput=\"calcBudget()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e10万円\u003c/span\u003e\u003cspan id=\"payVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e50万円\u003c/span\u003e\u003cspan\u003e150万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#1e40af;color:white;border-radius:8px;padding:20px;text-align:center;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:14px;margin-bottom:4px;\"\u003e月間貯蓄目標（20%）\u003c/div\u003e\n\u003cdiv id=\"savingsAmt\" style=\"font-size:36px;font-weight:bold;\"\u003e10万円\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;margin-top:4px;\"\u003e年間貯蓄額: \u003cspan id=\"savingsYearly\" style=\"font-weight:bold;\"\u003e120万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003cdiv style=\"display:flex;align-items:center;padding:12px 0;border-bottom:1px solid #e2e8f0;\"\u003e\n\u003cdiv style=\"width:16px;height:16px;border-radius:50%;background:#ef4444;margin-right:12px;flex-shrink:0;\"\u003e\u003c/div\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003cstrong\u003e必需費（50%）\u003c/strong\u003e\u003cbr\u003e\u003cspan style=\"font-size:13px;color:#64748b;\"\u003e家賃・住居費、食費、光熱費、保険、交通費\u003c/span\u003e\u003c/div\u003e\n\u003cdiv style=\"font-weight:bold;font-size:18px;\" id=\"needsAmt\"\u003e25万円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;padding:12px 0;border-bottom:1px solid #e2e8f0;\"\u003e\n\u003cdiv style=\"width:16px;height:16px;border-radius:50%;background:#f59e0b;margin-right:12px;flex-shrink:0;\"\u003e\u003c/div\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003cstrong\u003e欲しいもの（30%）\u003c/strong\u003e\u003cbr\u003e\u003cspan style=\"font-size:13px;color:#64748b;\"\u003e外食、娯楽、買い物、趣味\u003c/span\u003e\u003c/div\u003e\n\u003cdiv style=\"font-weight:bold;font-size:18px;\" id=\"wantsAmt\"\u003e15万円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;padding:12px 0;border-bottom:1px solid #e2e8f0;\"\u003e\n\u003cdiv style=\"width:16px;height:16px;border-radius:50%;background:#2563eb;margin-right:12px;flex-shrink:0;\"\u003e\u003c/div\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003cstrong\u003e貯蓄・借金返済（20%）\u003c/strong\u003e\u003cbr\u003e\u003cspan style=\"font-size:13px;color:#64748b;\"\u003e緊急資金、投資、借金返済\u003c/span\u003e\u003c/div\u003e\n\u003cdiv style=\"font-weight:bold;font-size:18px;\" id=\"saveAmt\"\u003e10万円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#dcfce7;border-radius:8px;padding:16px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:13px;color:#15803d;margin-bottom:4px;\"\u003e\u003cstrong\u003e20%を投資した場合の試算（年利7%）：\u003c/strong\u003e\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:8px;\"\u003e\n\u003cdiv style=\"text-align:center;\"\u003e\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e10年後\u003c/div\u003e\u003cdiv id=\"invest10\" style=\"font-weight:bold;color:#15803d;font-size:16px;\"\u003e173万円\u003c/div\u003e\u003c/div\u003e\n\u003cdiv style=\"text-align:center;\"\u003e\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e30年後\u003c/div\u003e\u003cdiv id=\"invest30\" style=\"font-weight:bold;color:#15803d;font-size:16px;\"\u003e1,220万円\u003c/div\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f1f5f9;border-radius:8px;padding:12px;font-size:13px;color:#475569;\"\u003e\n\u003cstrong\u003e50/30/20ルールとは：\u003c/strong\u003eエリザベス・ウォーレン上院議員が広めたシンプルな家計管理法。税引き後収入の50%を必需費、30%を欲しいもの、20%を貯蓄・借金返済に充てます。\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction calcBudget(){\n  var pay=parseInt(document.getElementById('monthlyPay').value);\n  var needs=Math.floor(pay*0.5);\n  var wants=Math.floor(pay*0.3);\n  var save=Math.floor(pay*0.2);\n\n  // Investment projections at 7% annual return\n  var mr=0.07/12;\n  var fv10=save*((Math.pow(1+mr,120)-1)/mr);\n  var fv30=save*((Math.pow(1+mr,360)-1)/mr);\n\n  function fmtJPY(n){return Math.floor(n/10000)+'万'+(Math.floor(n%10000)\u003e0?Math.floor(n%10000)+'円':'円');}\n  function fmtJPYSimple(n){\n    if(n\u003e=10000){return Math.floor(n/10000).toLocaleString('ja-JP')+'万円';}\n    return n.toLocaleString('ja-JP')+'円';\n  }\n\n  document.getElementById('payVal').textContent=Math.floor(pay/10000)+'万円';\n  document.getElementById('savingsAmt').textContent=Math.floor(save/10000)+'万円';\n  document.getElementById('savingsYearly').textContent=Math.floor(save*12/10000)+'万円';\n  document.getElementById('needsAmt').textContent=Math.floor(needs/10000)+'万円';\n  document.getElementById('wantsAmt').textContent=Math.floor(wants/10000)+'万円';\n  document.getElementById('saveAmt').textContent=Math.floor(save/10000)+'万円';\n  document.getElementById('invest10').textContent=Math.floor(fv10/10000).toLocaleString('ja-JP')+'万円';\n  document.getElementById('invest30').textContent=Math.floor(fv30/10000).toLocaleString('ja-JP')+'万円';\n}\ncalcBudget();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"予算の使い方\"\u003e予算の使い方\u003c/h2\u003e\n\u003ch3 id=\"必需費50の内訳\"\u003e必需費（50%）の内訳\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eカテゴリ\u003c/th\u003e\n          \u003cth\u003e収入に占める目安\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e住居費（家賃・ローン）\u003c/td\u003e\n          \u003ctd\u003e25〜30%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e食費\u003c/td\u003e\n          \u003ctd\u003e10〜15%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e光熱費\u003c/td\u003e\n          \u003ctd\u003e3〜5%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e交通費\u003c/td\u003e\n          \u003ctd\u003e5〜10%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e保険料\u003c/td\u003e\n          \u003ctd\u003e3〜5%\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"20貯蓄の使い道\"\u003e20%貯蓄の使い道\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eまず緊急資金\u003c/strong\u003e — 3〜6ヶ月分の生活費を高利回り普通預金口座に\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNISAやiDeCoを活用\u003c/strong\u003e — 税制優遇メリットを最大限に活用する\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e残りを投資\u003c/strong\u003e — 低コストのインデックスファンドで長期運用\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"よくある質問\"\u003eよくある質問\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eQ: 20%貯蓄できない場合は？\u003c/strong\u003e\nまずできる金額から始めましょう。5%でもゼロよりはるかに良いです。自動積立を設定し、毎月1%ずつ増やしていきましょう。\u003c/p\u003e","title":"予算プランナー | 無料月次予算計算ツール"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nふるさと納税シミュレーター【2026年版】 年収と家族構成を入力して、ふるさと納税の控除上限額と実質的な節税効果を自動計算します。\n年収（額面） 200万円500万円2,500万円 家族構成 独身または共働き（配偶者控除なし） 夫婦（配偶者控除あり） 夫婦+子1人（高校生） 夫婦+子2人（大学生+高校生） 住宅ローン控除 なし あり（年10万円） あり（年20万円） あり（年30万円） 控除上限額の目安表 返礼品の実質還元率 ふるさと納税の仕組み ふるさと納税は、好きな自治体に寄付をすると寄付額−2,000円が所得税・住民税から控除される制度です。さらに返礼品（寄付額の約30%相当）がもらえるため、実質2,000円の自己負担で各地の特産品を受け取れるお得な仕組みです。\n控除上限額を超えないことが大切 控除上限額を超えた分は純粋な寄付（自己負担）になります。このシミュレーターで上限額を確認してから寄付しましょう。\nふるさと納税の手続き 寄付先を選ぶ — 返礼品から選ぶのが一般的 寄付を申し込む — ふるさと納税サイト経由が便利 返礼品と寄付金受領証明書を受け取る 確定申告またはワンストップ特例制度で控除申請 ワンストップ特例制度を使えば、確定申告不要で控除を受けられます（寄付先5自治体まで）。\nふるさと納税の確定申告が必要な方は、freee会計 を使えばガイドに沿って簡単に完了できます。\n投資と節税を組み合わせるなら、iDeCoの併用もおすすめです。「iDeCo節税シミュレーター 」で節税効果を確認してみてください。\n関連記事\n手取り計算シミュレーター 副業税金計算ツール iDeCo節税シミュレーター 転職年収シミュレーター 関連記事 ふるさと納税 やり方 完全ガイド【2026年版・初心者向け】 ","permalink":"https://productivity-works.com/ja/tools/furusato-nozei-simulator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"ふるさと納税シミュレーター2026年版\"\u003eふるさと納税シミュレーター【2026年版】\u003c/h1\u003e\n\u003cp\u003e年収と家族構成を入力して、\u003cstrong\u003eふるさと納税の控除上限額\u003c/strong\u003eと\u003cstrong\u003e実質的な節税効果\u003c/strong\u003eを自動計算します。\u003c/p\u003e\n\u003cdiv id=\"fn-calc\" style=\"max-width:680px;margin:0 auto;font-family:'Noto Sans JP',sans-serif;\"\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e年収（額面）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"fnIncome\" min=\"200\" max=\"2500\" step=\"10\" value=\"500\" oninput=\"calcFN()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e200万円\u003c/span\u003e\u003cspan id=\"fnIncVal\" style=\"font-weight:bold;font-size:20px;color:#2563eb;\"\u003e500万円\u003c/span\u003e\u003cspan\u003e2,500万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e家族構成\u003c/label\u003e\n\u003cselect id=\"fnFamily\" onchange=\"calcFN()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#fff;\"\u003e\n\u003coption value=\"single\"\u003e独身または共働き（配偶者控除なし）\u003c/option\u003e\n\u003coption value=\"couple\"\u003e夫婦（配偶者控除あり）\u003c/option\u003e\n\u003coption value=\"couple1\"\u003e夫婦+子1人（高校生）\u003c/option\u003e\n\u003coption value=\"couple2\"\u003e夫婦+子2人（大学生+高校生）\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e住宅ローン控除\u003c/label\u003e\n\u003cselect id=\"fnLoan\" onchange=\"calcFN()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#fff;\"\u003e\n\u003coption value=\"0\"\u003eなし\u003c/option\u003e\n\u003coption value=\"100000\"\u003eあり（年10万円）\u003c/option\u003e\n\u003coption value=\"200000\"\u003eあり（年20万円）\u003c/option\u003e\n\u003coption value=\"300000\"\u003eあり（年30万円）\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003cdiv id=\"fnResult\" style=\"margin-top:24px;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:24px;padding:24px;border:2px solid #10b981;border-radius:12px;background:#f0fdf4;\"\u003e\n\u003ch3 style=\"margin:0 0 16px;color:#166534;font-size:16px;\"\u003e控除上限額の目安表\u003c/h3\u003e\n\u003cdiv id=\"fnTable\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:24px;padding:24px;border:2px solid #f59e0b;border-radius:12px;background:#fffbeb;\"\u003e\n\u003ch3 style=\"margin:0 0 12px;color:#92400e;font-size:16px;\"\u003e返礼品の実質還元率\u003c/h3\u003e\n\u003cdiv id=\"fnReturn\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction fmt(n){return Math.round(n).toLocaleString('ja-JP');}\n\nfunction calcFurusatoLimit(income,familyType,loanDeduction){\n  var annual=income*10000;\n  // 給与所得控除\n  var deduction;\n  if(annual\u003c=1625000) deduction=550000;\n  else if(annual\u003c=1800000) deduction=annual*0.4-100000;\n  else if(annual\u003c=3600000) deduction=annual*0.3+80000;\n  else if(annual\u003c=6600000) deduction=annual*0.2+440000;\n  else if(annual\u003c=8500000) deduction=annual*0.1+1100000;\n  else deduction=1950000;\n\n  var shotokuKin額=annual-deduction;\n\n  // 所得控除\n  var kiso=480000; // 基礎控除\n  var shakai=annual*0.15; // 社会保険料（概算15%）\n  var haigusha=0,fuyou=0;\n  if(familyType==='couple') haigusha=380000;\n  else if(familyType==='couple1'){haigusha=380000;fuyou=380000;}\n  else if(familyType==='couple2'){haigusha=380000;fuyou=380000+630000;}\n\n  var totalDeduction=kiso+shakai+haigusha+fuyou;\n  var taxableIncome=Math.max(0,shotokuKin額-totalDeduction);\n\n  // 所得税率\n  var taxRate;\n  if(taxableIncome\u003c=1950000) taxRate=0.05;\n  else if(taxableIncome\u003c=3300000) taxRate=0.10;\n  else if(taxableIncome\u003c=6950000) taxRate=0.20;\n  else if(taxableIncome\u003c=9000000) taxRate=0.23;\n  else if(taxableIncome\u003c=18000000) taxRate=0.33;\n  else if(taxableIncome\u003c=40000000) taxRate=0.40;\n  else taxRate=0.45;\n\n  // 住民税所得割額（概算）\n  var juminTaxable=taxableIncome;\n  var juminTax=juminTaxable*0.10;\n\n  // ふるさと納税上限額の計算\n  // 上限 = 住民税所得割額 × 20% ÷ (1 - 所得税率×1.021 - 住民税率10%) + 2000\n  // 簡易計算\n  var denominator=1-taxRate*1.021-0.10;\n  if(denominator\u003c=0) denominator=0.01;\n  var limit=juminTax*0.20/denominator+2000;\n\n  // 住宅ローン控除の影響（控除分だけ上限が下がる可能性）\n  if(loanDeduction\u003e0){\n    var reduction=Math.min(loanDeduction*0.15,limit*0.15);\n    limit=Math.max(limit-reduction,2000);\n  }\n\n  return{\n    limit:Math.floor(limit),\n    taxRate:taxRate,\n    taxableIncome:taxableIncome,\n    juminTax:juminTax\n  };\n}\n\nfunction calcFN(){\n  var income=+document.getElementById('fnIncome').value;\n  var family=document.getElementById('fnFamily').value;\n  var loan=+document.getElementById('fnLoan').value;\n\n  document.getElementById('fnIncVal').textContent=fmt(income)+'万円';\n\n  var r=calcFurusatoLimit(income,family,loan);\n  var limitMan=Math.floor(r.limit/10000);\n  var returnValue=Math.floor(r.limit*0.3); // 返礼品還元率30%\n\n  var html='\u003cdiv style=\"text-align:center;padding:20px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e';\n  html+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003eふるさと納税 控除上限額（目安）\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:40px;font-weight:bold;color:#2563eb;\"\u003e'+fmt(r.limit)+'\u003cspan style=\"font-size:16px;\"\u003e円\u003c/span\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:14px;color:#64748b;margin-top:4px;\"\u003e（約'+fmt(limitMan)+'万円）\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n\n  html+='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-top:16px;text-align:center;\"\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e自己負担\u003c/div\u003e\u003cdiv style=\"font-size:20px;font-weight:bold;color:#ef4444;\"\u003e2,000\u003cspan style=\"font-size:12px;\"\u003e円\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e返礼品の価値（約30%）\u003c/div\u003e\u003cdiv style=\"font-size:20px;font-weight:bold;color:#10b981;\"\u003e'+fmt(returnValue)+'\u003cspan style=\"font-size:12px;\"\u003e円\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e実質お得額\u003c/div\u003e\u003cdiv style=\"font-size:20px;font-weight:bold;color:#f59e0b;\"\u003e'+fmt(returnValue-2000)+'\u003cspan style=\"font-size:12px;\"\u003e円\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n\n  html+='\u003cdiv style=\"margin-top:12px;font-size:12px;color:#64748b;text-align:center;\"\u003e※所得税率 '+Math.round(r.taxRate*100)+'%（復興特別所得税含む）で計算。実際の上限額は個人の控除状況により異なります。\u003c/div\u003e';\n\n  document.getElementById('fnResult').innerHTML=html;\n\n  // Reference table\n  var incomes=[300,400,500,600,700,800,900,1000,1200,1500,2000];\n  var thtml='\u003ctable style=\"width:100%;border-collapse:collapse;font-size:13px;\"\u003e';\n  thtml+='\u003ctr style=\"border-bottom:2px solid #10b981;\"\u003e\u003cth style=\"text-align:left;padding:6px;\"\u003e年収\u003c/th\u003e\u003cth style=\"text-align:right;padding:6px;\"\u003e独身\u003c/th\u003e\u003cth style=\"text-align:right;padding:6px;\"\u003e夫婦\u003c/th\u003e\u003cth style=\"text-align:right;padding:6px;\"\u003e夫婦+子1\u003c/th\u003e\u003c/tr\u003e';\n  for(var i=0;i\u003cincomes.length;i++){\n    var s=calcFurusatoLimit(incomes[i],'single',0);\n    var c=calcFurusatoLimit(incomes[i],'couple',0);\n    var c1=calcFurusatoLimit(incomes[i],'couple1',0);\n    var bg=incomes[i]===income?'#dcfce7':i%2===0?'#fff':'#f0fdf4';\n    var bold=incomes[i]===income?'font-weight:bold;':'';\n    thtml+='\u003ctr style=\"background:'+bg+';'+bold+'\"\u003e';\n    thtml+='\u003ctd style=\"padding:6px;\"\u003e'+fmt(incomes[i])+'万円\u003c/td\u003e';\n    thtml+='\u003ctd style=\"padding:6px;text-align:right;\"\u003e'+fmt(s.limit)+'円\u003c/td\u003e';\n    thtml+='\u003ctd style=\"padding:6px;text-align:right;\"\u003e'+fmt(c.limit)+'円\u003c/td\u003e';\n    thtml+='\u003ctd style=\"padding:6px;text-align:right;\"\u003e'+fmt(c1.limit)+'円\u003c/td\u003e';\n    thtml+='\u003c/tr\u003e';\n  }\n  thtml+='\u003c/table\u003e';\n  thtml+='\u003cdiv style=\"margin-top:8px;font-size:11px;color:#64748b;\"\u003e※概算値です。医療費控除・生命保険料控除等がある場合は上限額が変わります。\u003c/div\u003e';\n  document.getElementById('fnTable').innerHTML=thtml;\n\n  // Return goods section\n  var rhtml='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;\"\u003e';\n  var goods=[\n    {name:'お米 20kg',price:20000,value:8000},\n    {name:'国産牛 1kg',price:15000,value:5000},\n    {name:'ホタテ 1kg',price:12000,value:4000},\n    {name:'シャインマスカット',price:10000,value:3500}\n  ];\n  for(var i=0;i\u003cgoods.length;i++){\n    var canAfford=r.limit\u003e=goods[i].price?'#10b981':'#94a3b8';\n    var badge=r.limit\u003e=goods[i].price?'申込OK':'上限超過';\n    var badgeBg=r.limit\u003e=goods[i].price?'#dcfce7':'#f1f5f9';\n    rhtml+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e';\n    rhtml+='\u003cdiv style=\"font-size:13px;font-weight:bold;color:#1e293b;\"\u003e'+goods[i].name+'\u003c/div\u003e';\n    rhtml+='\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e寄付額: '+fmt(goods[i].price)+'円\u003c/div\u003e';\n    rhtml+='\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e市場価値: 約'+fmt(goods[i].value)+'円\u003c/div\u003e';\n    rhtml+='\u003cspan style=\"display:inline-block;margin-top:4px;padding:2px 8px;font-size:11px;font-weight:bold;background:'+badgeBg+';color:'+canAfford+';border-radius:4px;\"\u003e'+badge+'\u003c/span\u003e';\n    rhtml+='\u003c/div\u003e';\n  }\n  rhtml+='\u003c/div\u003e';\n  rhtml+='\u003cdiv style=\"margin-top:12px;font-size:12px;color:#92400e;text-align:center;\"\u003e※返礼品の還元率は2026年時点の一般的な目安です。自治体・時期により変動します。\u003c/div\u003e';\n  document.getElementById('fnReturn').innerHTML=rhtml;\n}\n\ndocument.addEventListener('DOMContentLoaded',function(){calcFN();});\ncalcFN();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"ふるさと納税の仕組み\"\u003eふるさと納税の仕組み\u003c/h2\u003e\n\u003cp\u003eふるさと納税は、好きな自治体に寄付をすると\u003cstrong\u003e寄付額−2,000円\u003c/strong\u003eが所得税・住民税から控除される制度です。さらに返礼品（寄付額の約30%相当）がもらえるため、\u003cstrong\u003e実質2,000円の自己負担で各地の特産品を受け取れる\u003c/strong\u003eお得な仕組みです。\u003c/p\u003e","title":"ふるさと納税シミュレーター｜控除上限額・自己負担・節税効果を自動計算【2026年版】"},{"content":" カラーコントラストチェッカー WCAG 2.1 — AA・AAA準拠チェック、ライブプレビュー、色覚シミュレーション付き\n前景色（テキスト）\nHEX RGB HSL 背景色\nHEX RGB HSL \u0026#8645; 前景・背景を入れ替え \u0026#10022; アクセシブルな配色をランダム生成 14.69 コントラスト比 AA 通常文字 合格 AA 大きい文字 合格 AAA 通常文字 合格 AAA 大きい文字 合格 ライブプレビュー\n見出しテキスト（24px ボールド）\n大きいテキストのサンプル — 18px 通常ウェイト。WCAG 2.1では「大きい文字」に分類されます。\n通常の本文テキスト（15px）。このサイズではWCAG AA基準（4.5:1以上）、AAA基準（7:1以上）のコントラスト比が必要です。低視力や色覚多様性を持つユーザーにも読みやすい配色を選びましょう。\nアクセシブルな代替色の提案\n色覚シミュレーション\n通常の色覚 サンプルテキスト 1型色覚（赤色弱） サンプルテキスト 2型色覚（緑色弱） サンプルテキスト 3型色覚（青色弱） サンプルテキスト カラーコントラストチェッカーの使い方 色の選択 — カラースウォッチをクリックするとブラウザ標準のカラーピッカーが開きます。HEX欄に直接入力することも可能です。HEX・RGB・HSLのタブで入力形式を切り替えられ、値は常に同期されます。\nコントラスト比の確認 — 大きな数値がリアルタイムで更新されます。AA通常文字（4.5:1以上）、AA大きい文字（3:1以上）、AAA通常文字（7:1以上）、AAA大きい文字（4.5:1以上）の4基準に対して合格・不合格を表示します。\nライブプレビューの活用 — 見出し・大きいテキスト・通常本文の3サイズで実際の表示を確認できます。公開前にここで視認性を確かめましょう。\n改善提案の適用 — AA基準を満たしていない場合、前景色または背景色を明るく・暗くした代替案が自動生成されます。候補をクリックすると即座に適用されます。\n色覚シミュレーション — 通常の色覚、1型（赤色弱）、2型（緑色弱）、3型（青色弱）の4パターンで見え方を確認できます。コントラスト比が高くても色覚多様性によって識別しにくい組み合わせがあるため、実際の見え方の確認が重要です。\n入れ替えボタン — 前景色と背景色を一瞬で交換します。ライトテーマとダークテーマを素早く比較できます。\nランダム生成 — WCAG AA基準を満たす配色ペアをランダムに提案します。デザインのアイデア出しにご活用ください。\nWCAG 2.1 コントラスト基準について WCAG（Web Content Accessibility Guidelines）は、W3C（World Wide Web Consortium）が策定するWebアクセシビリティの国際標準です。コントラスト比は2つの色の「相対輝度」の比率として計算され、数値が大きいほどコントラストが強くなります。\nAA基準（最低限の要件） は、通常テキスト（18px未満、または14px未満のボールド）で 4.5:1以上、大きいテキスト（18px以上、または14px以上のボールド）で 3:1以上 が必要です。日本の「JIS X 8341-3:2016」やEU・米国の法律でも参照される実質的な国際標準であり、Webサイト公開時の最低ラインと言えます。\nAAA基準（より高い水準） は、通常テキストで 7:1以上、大きいテキストで 4.5:1以上 が求められます。医療・行政・金融など、情報の正確な伝達が特に重要な場面での適用が推奨されます。\n色覚多様性への配慮 も欠かせません。日本人男性の約5%、女性の約0.2%が色覚多様性を持つとされています。最も多いのは2型色覚（緑色弱）で、赤と緑の区別が難しい方が多くいます。色だけで情報を伝えることを避け、十分なコントラスト比と形・ラベルの組み合わせによる設計が重要です。\n関連ツール カラーピッカー → カラーピッカー 配色パレット生成 → カラーパレットジェネレーター グラデーション作成 → CSSグラデーションジェネレーター デザイナー・Web制作者の経理を効率化\nクリエイティブな制作業務に集中したいのに、請求書作成・経費管理・確定申告の準備に時間を取られていませんか？クラウド会計ソフト「freee」なら、バックオフィス業務を大幅に削減できます。\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/color-contrast-checker/","summary":"\u003cdiv id=\"cc-app\"\u003e\n\u003cstyle\u003e\n#cc-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Noto Sans JP', 'Segoe UI', Roboto, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 0 40px 0;\n  color: #1a1a2e;\n}\n\n#cc-app * {\n  box-sizing: border-box;\n}\n\n/* ── Hero ── */\n.cc-hero {\n  background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);\n  border-radius: 16px;\n  padding: 28px 24px;\n  margin-bottom: 24px;\n  color: #fff;\n}\n\n.cc-hero-title {\n  font-size: 1.5rem;\n  font-weight: 700;\n  margin: 0 0 4px;\n}\n\n.cc-hero-sub {\n  font-size: 0.9rem;\n  opacity: 0.75;\n  margin: 0;\n}\n\n/* ── Layout ── */\n.cc-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 16px;\n}\n\n@media (max-width: 600px) {\n  .cc-grid { grid-template-columns: 1fr; }\n}\n\n.cc-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n}\n\n.cc-card-title {\n  font-size: 0.75rem;\n  font-weight: 700;\n  letter-spacing: 0.06em;\n  text-transform: uppercase;\n  color: #64748b;\n  margin: 0 0 14px;\n}\n\n/* ── Color pickers ── */\n.cc-color-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 12px;\n}\n\n.cc-swatch-btn {\n  width: 48px;\n  height: 48px;\n  border-radius: 10px;\n  border: 3px solid #e2e8f0;\n  cursor: pointer;\n  position: relative;\n  flex-shrink: 0;\n  overflow: hidden;\n  padding: 0;\n  background: transparent;\n}\n\n.cc-swatch-btn input[type=\"color\"] {\n  position: absolute;\n  inset: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0;\n  cursor: pointer;\n  border: none;\n  padding: 0;\n}\n\n.cc-swatch-inner {\n  display: block;\n  width: 100%;\n  height: 100%;\n  border-radius: 7px;\n  pointer-events: none;\n}\n\n.cc-inputs {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  flex: 1;\n}\n\n.cc-mode-tabs {\n  display: flex;\n  gap: 4px;\n  margin-bottom: 4px;\n}\n\n.cc-mode-tab {\n  padding: 2px 8px;\n  border-radius: 6px;\n  border: 1px solid #e2e8f0;\n  background: #f8fafc;\n  font-size: 0.7rem;\n  font-weight: 600;\n  cursor: pointer;\n  color: #64748b;\n  transition: all 0.15s;\n}\n\n.cc-mode-tab.active {\n  background: #0f3460;\n  border-color: #0f3460;\n  color: #fff;\n}\n\n.cc-text-input {\n  width: 100%;\n  padding: 7px 10px;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  font-size: 0.85rem;\n  font-family: 'Courier New', monospace;\n  color: #1a1a2e;\n  background: #f8fafc;\n  outline: none;\n  transition: border-color 0.15s;\n}\n\n.cc-text-input:focus {\n  border-color: #0f3460;\n  background: #fff;\n}\n\n.cc-text-input.invalid {\n  border-color: #ef4444;\n  background: #fef2f2;\n}\n\n/* ── Swap / action buttons ── */\n.cc-action-row {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  justify-content: center;\n  margin-bottom: 24px;\n}\n\n.cc-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 9px 18px;\n  border-radius: 9px;\n  border: none;\n  font-size: 0.85rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n\n.cc-btn-primary {\n  background: #0f3460;\n  color: #fff;\n}\n\n.cc-btn-primary:hover {\n  background: #1a4a80;\n  transform: translateY(-1px);\n}\n\n.cc-btn-swap {\n  background: #f8fafc;\n  color: #334155;\n  border: 1px solid #e2e8f0;\n  border-radius: 50px;\n  padding: 8px 20px;\n  font-size: 0.85rem;\n  font-weight: 600;\n}\n\n.cc-btn-swap:hover { background: #e2e8f0; }\n\n/* ── Ratio + badges ── */\n.cc-ratio-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px 24px;\n  margin-bottom: 16px;\n  display: flex;\n  align-items: center;\n  gap: 24px;\n  flex-wrap: wrap;\n}\n\n.cc-ratio-number {\n  font-size: 3rem;\n  font-weight: 800;\n  line-height: 1;\n  color: #1a1a2e;\n  letter-spacing: -0.03em;\n}\n\n.cc-ratio-label {\n  font-size: 0.8rem;\n  color: #64748b;\n  margin-top: 2px;\n}\n\n.cc-badges {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  flex: 1;\n}\n\n.cc-badge {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 10px 14px;\n  border-radius: 10px;\n  min-width: 80px;\n  text-align: center;\n}\n\n.cc-badge-label {\n  font-size: 0.68rem;\n  font-weight: 700;\n  letter-spacing: 0.04em;\n  margin-bottom: 4px;\n}\n\n.cc-badge-result {\n  font-size: 0.95rem;\n  font-weight: 800;\n}\n\n.cc-badge.pass {\n  background: #dcfce7;\n  color: #15803d;\n}\n\n.cc-badge.fail {\n  background: #fee2e2;\n  color: #dc2626;\n}\n\n/* ── Live Preview ── */\n.cc-preview-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n  margin-bottom: 16px;\n}\n\n.cc-preview-stage {\n  border-radius: 10px;\n  padding: 24px;\n  transition: background-color 0.2s;\n}\n\n.cc-preview-heading {\n  font-size: 1.5rem;\n  font-weight: 700;\n  margin: 0 0 8px;\n  line-height: 1.3;\n}\n\n.cc-preview-large {\n  font-size: 1.125rem;\n  font-weight: 400;\n  margin: 0 0 10px;\n  line-height: 1.6;\n}\n\n.cc-preview-normal {\n  font-size: 0.9375rem;\n  font-weight: 400;\n  margin: 0;\n  line-height: 1.7;\n}\n\n/* ── Suggestions ── */\n.cc-suggestions {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n  margin-bottom: 16px;\n}\n\n.cc-suggestions-title {\n  font-size: 0.75rem;\n  font-weight: 700;\n  letter-spacing: 0.06em;\n  color: #64748b;\n  margin: 0 0 14px;\n}\n\n.cc-suggest-grid {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n}\n\n.cc-suggest-item {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 8px 12px;\n  border-radius: 8px;\n  border: 1px solid #e2e8f0;\n  cursor: pointer;\n  background: #f8fafc;\n  transition: all 0.15s;\n  font-size: 0.8rem;\n}\n\n.cc-suggest-item:hover {\n  border-color: #0f3460;\n  background: #eff6ff;\n}\n\n.cc-suggest-swatch {\n  width: 24px;\n  height: 24px;\n  border-radius: 6px;\n  border: 1px solid rgba(0,0,0,0.1);\n  flex-shrink: 0;\n}\n\n.cc-suggest-info {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n}\n\n.cc-suggest-hex {\n  font-family: 'Courier New', monospace;\n  font-size: 0.78rem;\n  font-weight: 600;\n  color: #1a1a2e;\n}\n\n.cc-suggest-ratio {\n  font-size: 0.72rem;\n  color: #64748b;\n}\n\n/* ── Color blindness simulation ── */\n.cc-cbsim {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n  margin-bottom: 16px;\n}\n\n.cc-cbsim-title {\n  font-size: 0.75rem;\n  font-weight: 700;\n  letter-spacing: 0.06em;\n  color: #64748b;\n  margin: 0 0 14px;\n}\n\n.cc-cbsim-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n  gap: 10px;\n}\n\n.cc-cbsim-item {\n  border-radius: 8px;\n  overflow: hidden;\n  border: 1px solid #e2e8f0;\n}\n\n.cc-cbsim-label {\n  font-size: 0.7rem;\n  font-weight: 600;\n  padding: 5px 10px;\n  background: #f8fafc;\n  color: #64748b;\n  border-bottom: 1px solid #e2e8f0;\n  text-align: center;\n}\n\n.cc-cbsim-stage {\n  padding: 14px;\n  font-size: 0.875rem;\n  font-weight: 500;\n  text-align: center;\n  line-height: 1.5;\n  min-height: 60px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n/* ── Hidden ── */\n.cc-hidden { display: none; }\n\u003c/style\u003e\n\u003c!-- Hero --\u003e\n\u003cdiv class=\"cc-hero\"\u003e\n  \u003cdiv class=\"cc-hero-title\"\u003eカラーコントラストチェッカー\u003c/div\u003e\n  \u003cp class=\"cc-hero-sub\"\u003eWCAG 2.1 — AA・AAA準拠チェック、ライブプレビュー、色覚シミュレーション付き\u003c/p\u003e","title":"カラーコントラストチェッカー — WCAGアクセシビリティツール"},{"content":" ベースカラーを選んでハーモニーモードを切り替えるだけで、色彩理論に基づいた美しい5色パレットを瞬時に生成します。色をロックして他の色だけを再生成したり、HEXコードをワンクリックでコピーできます。\nベースカラー ハーモニーモード 補色 (Complementary) 類似色 (Analogous) トライアド (Triadic) 分割補色 (Split-Complementary) モノクロマティック 生成する \u0026#9684; ランダム CSS変数エクスポート CSSをコピー トレンドパレット プリセット10選\nデザイン作業の請求書・経費管理は freee で フリーランスデザイナー・クリエイター向けの会計ソフト。請求書作成から確定申告まで自動化。初月無料で試せます。\nfreee を無料で試す 関連ツール Color Blindness Simulator → Color Blindness Simulatorツール Color Contrast Checker → Color Contrast Checkerツール Color Converter → Color Converterツール 関連記事 AI画像生成おすすめツール比較2026年版【無料・有料・日本語対応】 ","permalink":"https://productivity-works.com/ja/tools/color-palette-generator/","summary":"\u003cdiv id=\"pal-app\"\u003e\n\u003cstyle\u003e\n#pal-app *,#pal-app *::before,#pal-app *::after{box-sizing:border-box;margin:0;padding:0}\n#pal-app{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Hiragino Sans','Noto Sans JP',sans-serif;color:#1a1a2e;--accent:#6c63ff;--radius:10px;--shadow:0 4px 24px rgba(0,0,0,.10)}\n#pal-app .pa-wrap{max-width:820px;margin:0 auto;padding:0 0 48px}\n#pal-app .pa-lead{font-size:.97rem;color:#555;margin-bottom:24px;line-height:1.7}\n\n/* Controls */\n#pal-app .pa-controls{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;margin-bottom:28px;background:#f7f7fc;border-radius:var(--radius);padding:20px}\n#pal-app .pa-group{display:flex;flex-direction:column;gap:6px}\n#pal-app .pa-group label{font-size:.78rem;font-weight:700;color:#444;text-transform:uppercase;letter-spacing:.04em}\n#pal-app .pa-color-pick{width:60px;height:44px;border:2px solid #ddd;border-radius:8px;cursor:pointer;padding:2px;background:#fff}\n#pal-app .pa-select{height:44px;padding:0 12px;border:2px solid #ddd;border-radius:8px;font-size:.9rem;background:#fff;cursor:pointer;outline:none;transition:border-color .2s}\n#pal-app .pa-select:focus{border-color:var(--accent)}\n#pal-app .pa-btn{height:44px;padding:0 22px;border:none;border-radius:8px;font-size:.9rem;font-weight:700;cursor:pointer;transition:transform .1s,opacity .2s}\n#pal-app .pa-btn:active{transform:scale(.97)}\n#pal-app .pa-btn-primary{background:var(--accent);color:#fff}\n#pal-app .pa-btn-primary:hover{opacity:.88}\n#pal-app .pa-btn-secondary{background:#fff;color:#333;border:2px solid #ddd}\n#pal-app .pa-btn-secondary:hover{border-color:#aaa}\n#pal-app .pa-btn-random{background:#ff6584;color:#fff}\n#pal-app .pa-btn-random:hover{opacity:.88}\n\n/* Strip */\n#pal-app .pa-strip{display:flex;border-radius:var(--radius);overflow:hidden;height:80px;margin-bottom:20px;box-shadow:var(--shadow)}\n#pal-app .pa-strip-swatch{flex:1;transition:flex .3s}\n\n/* Cards */\n#pal-app .pa-cards{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:28px}\n@media(max-width:600px){#pal-app .pa-cards{grid-template-columns:repeat(2,1fr)}}\n#pal-app .pa-card{border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);background:#fff;transition:transform .18s}\n#pal-app .pa-card:hover{transform:translateY(-3px)}\n#pal-app .pa-card-swatch{height:120px;position:relative;cursor:pointer}\n#pal-app .pa-card-swatch:hover::after{content:'コピー';position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.22);color:#fff;font-size:.9rem;font-weight:700}\n#pal-app .pa-card-swatch::after{display:flex;align-items:center;justify-content:center;font-size:.85rem;font-weight:600;color:transparent;transition:color .2s}\n#pal-app .pa-lock-btn{position:absolute;top:8px;right:8px;width:28px;height:28px;border:none;border-radius:50%;background:rgba(255,255,255,.75);cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(4px);transition:background .2s}\n#pal-app .pa-lock-btn:hover{background:rgba(255,255,255,.95)}\n#pal-app .pa-lock-btn.locked{background:rgba(255,255,255,.95)}\n#pal-app .pa-card-info{padding:10px 10px 12px;display:flex;flex-direction:column;gap:4px}\n#pal-app .pa-hex{font-size:.92rem;font-weight:700;color:#1a1a2e;letter-spacing:.02em}\n#pal-app .pa-rgb{font-size:.72rem;color:#888}\n\n/* Toast */\n#pal-app .pa-toast{position:fixed;bottom:32px;left:50%;transform:translateX(-50%) translateY(80px);background:#1a1a2e;color:#fff;padding:10px 24px;border-radius:50px;font-size:.88rem;font-weight:600;opacity:0;transition:opacity .25s,transform .25s;z-index:9999;pointer-events:none}\n#pal-app .pa-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}\n\n/* Export */\n#pal-app .pa-export{margin-bottom:28px}\n#pal-app .pa-export-box{background:#1a1a2e;color:#a8ff78;font-family:'Fira Mono','Courier New',monospace;font-size:.82rem;padding:18px 20px;border-radius:var(--radius);line-height:1.7;white-space:pre;overflow-x:auto}\n#pal-app .pa-export-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}\n#pal-app .pa-export-header h3{font-size:.95rem;font-weight:700;color:#333}\n\n/* Presets */\n#pal-app .pa-presets-title{font-size:.95rem;font-weight:700;color:#333;margin-bottom:12px}\n#pal-app .pa-presets{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:32px}\n#pal-app .pa-preset{border:2px solid transparent;border-radius:8px;overflow:hidden;cursor:pointer;transition:border-color .2s,transform .18s;width:120px}\n#pal-app .pa-preset:hover{border-color:var(--accent);transform:translateY(-2px)}\n#pal-app .pa-preset-strip{display:flex;height:28px}\n#pal-app .pa-preset-swatch{flex:1}\n#pal-app .pa-preset-name{font-size:.7rem;text-align:center;padding:4px;background:#fff;color:#444;font-weight:600}\n\n/* Divider */\n#pal-app .pa-divider{border:none;border-top:1px solid #eee;margin:8px 0 24px}\n\n/* freee CTA */\n#pal-app .pa-cta{background:linear-gradient(135deg,#00c4b4 0%,#00a896 100%);border-radius:var(--radius);padding:22px 24px;margin-top:8px;display:flex;flex-wrap:wrap;align-items:center;gap:16px;box-shadow:var(--shadow)}\n#pal-app .pa-cta-text{flex:1;min-width:200px}\n#pal-app .pa-cta-text h3{color:#fff;font-size:1rem;font-weight:700;margin-bottom:6px}\n#pal-app .pa-cta-text p{color:rgba(255,255,255,.88);font-size:.85rem;line-height:1.6}\n#pal-app .pa-cta-btn{display:inline-block;background:#fff;color:#00a896;font-weight:700;font-size:.9rem;padding:10px 22px;border-radius:8px;text-decoration:none;transition:transform .18s,box-shadow .18s;white-space:nowrap;box-shadow:0 2px 12px rgba(0,0,0,.12)}\n#pal-app .pa-cta-btn:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(0,0,0,.18)}\n\u003c/style\u003e\n\u003cdiv class=\"pa-wrap\"\u003e\n\u003cp class=\"pa-lead\"\u003eベースカラーを選んでハーモニーモードを切り替えるだけで、色彩理論に基づいた美しい5色パレットを瞬時に生成します。色をロックして他の色だけを再生成したり、HEXコードをワンクリックでコピーできます。\u003c/p\u003e","title":"カラーパレットジェネレーター — 無料オンラインツール"},{"content":"本記事にはアフィリエイトリンクが含まれています。紹介料が発生する場合がありますが、読者の追加費用はありません。\nFIREシミュレーター 以下の数字を入力して、FIRE達成に必要な資産額、早期退職までの年数、貯蓄率がタイムラインに与える影響を確認しましょう。\nあなたの財務情報 現在の年齢 年収（円） 年間支出（円） 現在の貯蓄・投資額（円） 期待年利回り: 7.0% 3%12% 安全引き出し率（SWR）: 4.00% 2%（保守的）5%（積極的） 4%ルールが最も広く使われる基準です。 年間貯蓄増加率: 2.0% 0%5%（昇給＋最適化） あなたのFIRE目標資産額 1億円 年間支出 ÷ 安全引き出し率 達成まで 14年3ヶ月 FIRE達成年齢 44歳 貯蓄率 33.3% 月間貯蓄額 17万円 FIRE達成進捗 5% 現在: 500万円 目標: 1億円 FIREの種類 リーンFIRE 支出 × 0.8（倹約型） 8,000万円 12年1ヶ月 通常FIRE あなたの目標 現在の支出水準を維持 1億円 14年3ヶ月 ファットFIRE 支出 × 1.5（ゆとり型） 1.5億円 20年8ヶ月 コーストFIRE 積立停止→65歳まで運用 1,820万円 あと1,320万円必要 貯蓄率別のFIRE達成年数 同じ運用利回りで貯蓄率を変えた場合のFIREまでの年数\n貯蓄率 年間貯蓄額 FIRE達成まで FIRE達成年齢 年次シミュレーション詳細 + 年 年齢 年間貯蓄額 運用益 総資産 FIREとは？ FIREとはFinancial Independence, Retire Early（経済的自立・早期退職）の略です。積極的な貯蓄と投資によって、従来の定年より大幅に早く仕事を辞められる状態を目指すムーブメントです。投資からのリターンだけで生活費を賄える規模のポートフォリオを構築し、お金が自分の代わりに働く状態を実現することが目標です。\n核心的な考え方はシンプルです。収入に対して支出が少ないほど貯蓄が早く積み上がり、「お金が自分より働く」逆転ポイントに早く到達できます。年収1,000万円で10%しか貯蓄しない人より、年収600万円で50%貯蓄する人の方がFIREに早く近づけます。\n4%ルールとは？ 4%ルールはFIRE計画の礎です。1998年のトリニティ研究（2011年改訂）に由来し、株式・債券の分散ポートフォリオから毎年初期資産の4%を引き出しても、30年以上ポートフォリオが枯渇しない確率が約95%であることを示しました。\n実用的には、4%ルールによりFIRE目標資産額は年間支出の25倍（1 ÷ 4% = 25）となります。年間支出400万円なら目標資産額は1億円です。40〜50年の引退期間を想定する場合、より保守的な3〜3.5%のSWRを採用し、年間支出の29〜33倍を目標とするFIRE実践者も多くいます。\nFIREの種類 リーンFIREは最小限の生活コスト（現在の支出の20〜30%削減）を前提とした倹約型FIRE。目標資産額が小さいため早期達成が可能ですが、予期せぬ出費への備えが少なくなります。\n通常FIREは基本形です。現在の生活水準を維持しながら、年間支出の25倍のポートフォリオ（4%ルール）を目標とします。最も一般的なFIRE目標です。\nファットFIREは現在の支出の1.5倍以上のゆとりある老後を目標とします。旅行・外食・子どもの教育費など生活の質を一切妥協しない引退スタイルです。目標額が大きくなる分、積立期間も長くなります。\nコーストFIREは終着点ではなく通過点です。現在の投資残高が65歳までに目標資産額まで成長するのに十分な規模になったとき、コーストFIREを達成したと言えます。この段階で積立をやめ、好きなペースで働くことを選ぶ人も多くいます。\nバリスタFIREはハイブリッド型です。フルFIRE達成前にメインの仕事を辞め、カフェなどのパートタイム勤務で生活費の一部を賄いながらポートフォリオで残りをカバーします。積立期間を大幅に短縮できるため、早期に会社生活から抜け出したい人に人気です。\nFIRE達成を早める方法 貯蓄率を上げる。 上記の貯蓄率別一覧表が明確に示すように、20%から50%に上げるだけでタイムラインをほぼ半分にできます。5%ポイントの改善でも10年スパンでは大きな差になります。\n支出を体系的に削減する。 住居費と交通費が大半の家計で最大の支出項目です。住居のダウンサイジング、賃貸部屋の活用、マイカー売却などは、何年も細かい節約を続けるより効果的な場合があります。生活の質を下げずに削れるコストを探しましょう。\n収入を増やす。 昇給・昇進・転職・副業は、生活水準を変えずに貯蓄率の分子を増やします。FIREコミュニティでは、特にキャリア初期において収入増加が節約と同等以上の効果を持つと強調されています。\n投資を最適化する。 低コストのインデックスファンド（全世界株式・S\u0026amp;P500等）は平均的なアクティブファンドをコスト控除後に上回ることが多いです。NISA・iDeCo等の税制優遇口座を最大限活用し、税金ドラッグを最小化しましょう。手数料を1ベーシスポイント削減するたびに、永続的なリスクゼロのリターン改善が得られます。\n関連ツール 投資の成長を確認 → 予算プランナー 配当収入を試算 → 配当収入計算ツール 緊急資金の目安を計算 → 緊急資金計算ツール 関連記事 FIREムーブメントとは？経済的自立入門ガイド FIRE目標資産額の計算方法と達成を早めるコツ 4%ルールは今も安全？早期退職者のための引き出し戦略 リーンFIRE vs ファットFIRE：あなたに合う道は？ 生活を犠牲にせず貯蓄率を上げる方法 本計算ツールは教育・情報提供のみを目的としています。金融アドバイスを構成するものではありません。投資リターンは保証されず、過去の市場実績は将来の結果を予測するものではありません。重要な財務上の決定を行う前に、資格のある金融専門家にご相談ください。\n資産管理を効率化 → freee会計で家計を自動管理 関連ツール 貯蓄目標シミュレーター → 貯蓄目標シミュレーターツール 複利計算 → 複利計算ツール iDeCo シミュレーター → iDeCo シミュレーターツール ","permalink":"https://productivity-works.com/ja/tools/fire-calculator/","summary":"\u003cp\u003e\u003cem\u003e本記事にはアフィリエイトリンクが含まれています。紹介料が発生する場合がありますが、読者の追加費用はありません。\u003c/em\u003e\u003c/p\u003e\n\u003ch1 id=\"fireシミュレーター\"\u003eFIREシミュレーター\u003c/h1\u003e\n\u003cp\u003e以下の数字を入力して、\u003cstrong\u003eFIRE達成に必要な資産額\u003c/strong\u003e、早期退職までの年数、貯蓄率がタイムラインに与える影響を確認しましょう。\u003c/p\u003e\n\u003cdiv id=\"fire-calc\" style=\"max-width:760px;margin:0 auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;color:#1e293b;\"\u003e\n\u003c!-- INPUTS --\u003e\n\u003cdiv style=\"padding:28px;border:2px solid #7c3aed;border-radius:12px;background:#faf5ff;margin-bottom:20px;\"\u003e\n\u003ch2 style=\"margin:0 0 24px 0;font-size:20px;color:#7c3aed;\"\u003eあなたの財務情報\u003c/h2\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px;\"\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-size:13px;font-weight:600;color:#64748b;margin-bottom:6px;text-transform:uppercase;letter-spacing:0.05em;\"\u003e現在の年齢\u003c/label\u003e\n\u003cinput type=\"number\" id=\"fireAge\" min=\"18\" max=\"70\" step=\"1\" value=\"30\" oninput=\"calcFIRE()\" style=\"width:100%;padding:10px 12px;border:1.5px solid #c4b5fd;border-radius:8px;font-size:16px;box-sizing:border-box;background:#fff;color:#1e293b;\"\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-size:13px;font-weight:600;color:#64748b;margin-bottom:6px;text-transform:uppercase;letter-spacing:0.05em;\"\u003e年収（円）\u003c/label\u003e\n\u003cinput type=\"number\" id=\"fireIncome\" min=\"0\" step=\"100000\" value=\"6000000\" oninput=\"calcFIRE()\" style=\"width:100%;padding:10px 12px;border:1.5px solid #c4b5fd;border-radius:8px;font-size:16px;box-sizing:border-box;background:#fff;color:#1e293b;\"\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-size:13px;font-weight:600;color:#64748b;margin-bottom:6px;text-transform:uppercase;letter-spacing:0.05em;\"\u003e年間支出（円）\u003c/label\u003e\n\u003cinput type=\"number\" id=\"fireExpenses\" min=\"0\" step=\"100000\" value=\"4000000\" oninput=\"calcFIRE()\" style=\"width:100%;padding:10px 12px;border:1.5px solid #c4b5fd;border-radius:8px;font-size:16px;box-sizing:border-box;background:#fff;color:#1e293b;\"\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-size:13px;font-weight:600;color:#64748b;margin-bottom:6px;text-transform:uppercase;letter-spacing:0.05em;\"\u003e現在の貯蓄・投資額（円）\u003c/label\u003e\n\u003cinput type=\"number\" id=\"fireSavings\" min=\"0\" step=\"100000\" value=\"5000000\" oninput=\"calcFIRE()\" style=\"width:100%;padding:10px 12px;border:1.5px solid #c4b5fd;border-radius:8px;font-size:16px;box-sizing:border-box;background:#fff;color:#1e293b;\"\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-size:13px;font-weight:600;color:#64748b;margin-bottom:8px;text-transform:uppercase;letter-spacing:0.05em;\"\u003e期待年利回り: \u003cspan id=\"fireReturnVal\" style=\"color:#7c3aed;font-size:15px;\"\u003e7.0%\u003c/span\u003e\u003c/label\u003e\n\u003cinput type=\"range\" id=\"fireReturn\" min=\"3\" max=\"12\" step=\"0.5\" value=\"7\" oninput=\"calcFIRE()\" style=\"width:100%;accent-color:#7c3aed;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:12px;color:#94a3b8;margin-top:2px;\"\u003e\u003cspan\u003e3%\u003c/span\u003e\u003cspan\u003e12%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-size:13px;font-weight:600;color:#64748b;margin-bottom:8px;text-transform:uppercase;letter-spacing:0.05em;\"\u003e安全引き出し率（SWR）: \u003cspan id=\"fireSWRVal\" style=\"color:#7c3aed;font-size:15px;\"\u003e4.00%\u003c/span\u003e\u003c/label\u003e\n\u003cinput type=\"range\" id=\"fireSWR\" min=\"2\" max=\"5\" step=\"0.25\" value=\"4\" oninput=\"calcFIRE()\" style=\"width:100%;accent-color:#7c3aed;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:12px;color:#94a3b8;margin-top:2px;\"\u003e\u003cspan\u003e2%（保守的）\u003c/span\u003e\u003cspan\u003e5%（積極的）\u003c/span\u003e\u003c/div\u003e\n\u003cdiv style=\"font-size:12px;color:#94a3b8;margin-top:2px;\"\u003e4%ルールが最も広く使われる基準です。\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:4px;\"\u003e\n\u003clabel style=\"display:block;font-size:13px;font-weight:600;color:#64748b;margin-bottom:8px;text-transform:uppercase;letter-spacing:0.05em;\"\u003e年間貯蓄増加率: \u003cspan id=\"fireSavIncVal\" style=\"color:#7c3aed;font-size:15px;\"\u003e2.0%\u003c/span\u003e\u003c/label\u003e\n\u003cinput type=\"range\" id=\"fireSavInc\" min=\"0\" max=\"5\" step=\"0.5\" value=\"2\" oninput=\"calcFIRE()\" style=\"width:100%;accent-color:#7c3aed;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:12px;color:#94a3b8;margin-top:2px;\"\u003e\u003cspan\u003e0%\u003c/span\u003e\u003cspan\u003e5%（昇給＋最適化）\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- RESULTS PANEL --\u003e\n\u003cdiv id=\"fireResults\" style=\"padding:28px;border:2px solid #7c3aed;border-radius:12px;background:linear-gradient(135deg,#7c3aed 0%,#6d28d9 100%);color:white;margin-bottom:20px;\"\u003e\n\u003cdiv style=\"text-align:center;margin-bottom:24px;\"\u003e\n\u003cdiv style=\"font-size:13px;letter-spacing:0.1em;opacity:0.85;margin-bottom:6px;text-transform:uppercase;\"\u003eあなたのFIRE目標資産額\u003c/div\u003e\n\u003cdiv id=\"fireNumber\" style=\"font-size:52px;font-weight:800;letter-spacing:-1px;\"\u003e1億円\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;opacity:0.75;margin-top:4px;\"\u003e年間支出 ÷ 安全引き出し率\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:12px;margin-bottom:20px;\"\u003e\n\u003cdiv style=\"background:rgba(255,255,255,0.15);border-radius:10px;padding:14px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:11px;opacity:0.8;margin-bottom:4px;text-transform:uppercase;letter-spacing:0.05em;\"\u003e達成まで\u003c/div\u003e\n\u003cdiv id=\"fireYears\" style=\"font-size:20px;font-weight:700;\"\u003e14年3ヶ月\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:rgba(255,255,255,0.15);border-radius:10px;padding:14px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:11px;opacity:0.8;margin-bottom:4px;text-transform:uppercase;letter-spacing:0.05em;\"\u003eFIRE達成年齢\u003c/div\u003e\n\u003cdiv id=\"fireAgeResult\" style=\"font-size:20px;font-weight:700;\"\u003e44歳\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:rgba(255,255,255,0.15);border-radius:10px;padding:14px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:11px;opacity:0.8;margin-bottom:4px;text-transform:uppercase;letter-spacing:0.05em;\"\u003e貯蓄率\u003c/div\u003e\n\u003cdiv id=\"fireSavRate\" style=\"font-size:20px;font-weight:700;\"\u003e33.3%\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:rgba(255,255,255,0.15);border-radius:10px;padding:14px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:11px;opacity:0.8;margin-bottom:4px;text-transform:uppercase;letter-spacing:0.05em;\"\u003e月間貯蓄額\u003c/div\u003e\n\u003cdiv id=\"fireMonthly\" style=\"font-size:20px;font-weight:700;\"\u003e17万円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- PROGRESS BAR --\u003e\n\u003cdiv\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;opacity:0.85;margin-bottom:6px;\"\u003e\n\u003cspan\u003eFIRE達成進捗\u003c/span\u003e\n\u003cspan id=\"fireProgressPct\"\u003e5%\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:rgba(255,255,255,0.2);border-radius:999px;height:12px;overflow:hidden;\"\u003e\n\u003cdiv id=\"fireProgressBar\" style=\"background:#a78bfa;height:100%;border-radius:999px;transition:width 0.4s ease;width:5%;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:12px;opacity:0.7;margin-top:5px;\"\u003e\n\u003cspan id=\"fireCurrSavDisplay\"\u003e現在: 500万円\u003c/span\u003e\n\u003cspan id=\"fireNumDisplay\"\u003e目標: 1億円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- FIRE VARIANTS --\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #c4b5fd;border-radius:12px;background:#fff;margin-bottom:20px;\"\u003e\n\u003ch3 style=\"margin:0 0 16px 0;font-size:16px;color:#7c3aed;font-weight:700;\"\u003eFIREの種類\u003c/h3\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;\" id=\"fireVariants\"\u003e\n\u003cdiv id=\"varLean\" style=\"padding:16px;border-radius:10px;border:2px solid #e9d5ff;background:#f5f3ff;\"\u003e\n\u003cdiv style=\"font-weight:700;font-size:14px;color:#6d28d9;margin-bottom:4px;\"\u003eリーンFIRE\u003c/div\u003e\n\u003cdiv style=\"font-size:11px;color:#94a3b8;margin-bottom:8px;\"\u003e支出 × 0.8（倹約型）\u003c/div\u003e\n\u003cdiv id=\"leanNum\" style=\"font-size:22px;font-weight:800;color:#1e293b;\"\u003e8,000万円\u003c/div\u003e\n\u003cdiv id=\"leanYears\" style=\"font-size:13px;color:#64748b;margin-top:4px;\"\u003e12年1ヶ月\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"varRegular\" style=\"padding:16px;border-radius:10px;border:2px solid #7c3aed;background:#ede9fe;\"\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:6px;margin-bottom:4px;\"\u003e\n\u003cdiv style=\"font-weight:700;font-size:14px;color:#6d28d9;\"\u003e通常FIRE\u003c/div\u003e\n\u003cspan style=\"background:#7c3aed;color:white;font-size:10px;padding:1px 6px;border-radius:999px;font-weight:600;\"\u003eあなたの目標\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv style=\"font-size:11px;color:#94a3b8;margin-bottom:8px;\"\u003e現在の支出水準を維持\u003c/div\u003e\n\u003cdiv id=\"regNum\" style=\"font-size:22px;font-weight:800;color:#1e293b;\"\u003e1億円\u003c/div\u003e\n\u003cdiv id=\"regYears\" style=\"font-size:13px;color:#64748b;margin-top:4px;\"\u003e14年3ヶ月\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"varFat\" style=\"padding:16px;border-radius:10px;border:2px solid #e9d5ff;background:#f5f3ff;\"\u003e\n\u003cdiv style=\"font-weight:700;font-size:14px;color:#6d28d9;margin-bottom:4px;\"\u003eファットFIRE\u003c/div\u003e\n\u003cdiv style=\"font-size:11px;color:#94a3b8;margin-bottom:8px;\"\u003e支出 × 1.5（ゆとり型）\u003c/div\u003e\n\u003cdiv id=\"fatNum\" style=\"font-size:22px;font-weight:800;color:#1e293b;\"\u003e1.5億円\u003c/div\u003e\n\u003cdiv id=\"fatYears\" style=\"font-size:13px;color:#64748b;margin-top:4px;\"\u003e20年8ヶ月\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"varCoast\" style=\"padding:16px;border-radius:10px;border:2px solid #e9d5ff;background:#f5f3ff;\"\u003e\n\u003cdiv style=\"font-weight:700;font-size:14px;color:#6d28d9;margin-bottom:4px;\"\u003eコーストFIRE\u003c/div\u003e\n\u003cdiv style=\"font-size:11px;color:#94a3b8;margin-bottom:8px;\"\u003e積立停止→65歳まで運用\u003c/div\u003e\n\u003cdiv id=\"coastNum\" style=\"font-size:22px;font-weight:800;color:#1e293b;\"\u003e1,820万円\u003c/div\u003e\n\u003cdiv id=\"coastStatus\" style=\"font-size:13px;color:#64748b;margin-top:4px;\"\u003eあと1,320万円必要\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- SAVINGS RATE IMPACT TABLE --\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #c4b5fd;border-radius:12px;background:#fff;margin-bottom:20px;\"\u003e\n\u003ch3 style=\"margin:0 0 4px 0;font-size:16px;color:#7c3aed;font-weight:700;\"\u003e貯蓄率別のFIRE達成年数\u003c/h3\u003e\n\u003cp style=\"margin:0 0 16px 0;font-size:13px;color:#64748b;\"\u003e同じ運用利回りで貯蓄率を変えた場合のFIREまでの年数\u003c/p\u003e","title":"FIREシミュレーター | 早期退職まで何年？経済的自立を計算"},{"content":" チェックリスト作成ツール テキストで出力 完了済みを削除 + リストを追加 + 追加 アイテムがありません。上から追加してください！ このリストを削除 カンバンボード -\u0026gt; カンバンボード デイリープランナー -\u0026gt; デイリープランナー 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。 freeeを無料で試す \u0026rarr; 関連記事 Notion 使い方 完全ガイド【2026年版・初心者向け】セットアップから活用術まで ","permalink":"https://productivity-works.com/ja/tools/checklist-maker/","summary":"\u003cdiv id=\"cl-app\"\u003e\n\u003cstyle\u003e\n#cl-app *,#cl-app *::before,#cl-app *::after{box-sizing:border-box;margin:0;padding:0}\n#cl-app{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Hiragino Sans,'Hiragino Kaku Gothic ProN','Noto Sans JP',sans-serif;max-width:720px;margin:0 auto;padding:16px;color:#1e293b}\n#cl-app h2{font-size:1.25rem;font-weight:700;margin-bottom:12px;color:#0f172a}\n#cl-app .cl-header{display:flex;align-items:center;gap:10px;margin-bottom:18px;flex-wrap:wrap}\n#cl-app .cl-header h1{font-size:1.5rem;font-weight:800;color:#0f172a;flex:1}\n#cl-app input[type=\"text\"]{border:1.5px solid #cbd5e1;border-radius:7px;padding:8px 12px;font-size:14px;outline:none;transition:border-color .2s;background:#fff;color:#1e293b}\n#cl-app input[type=\"text\"]:focus{border-color:#3b82f6}\n#cl-app button{border:none;border-radius:7px;padding:8px 14px;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s,transform .1s}\n#cl-app button:active{transform:scale(.97)}\n#cl-app .btn-primary{background:#3b82f6;color:#fff}\n#cl-app .btn-primary:hover{background:#2563eb}\n#cl-app .btn-secondary{background:#e2e8f0;color:#475569}\n#cl-app .btn-secondary:hover{background:#cbd5e1}\n#cl-app .btn-danger{background:#fee2e2;color:#dc2626}\n#cl-app .btn-danger:hover{background:#fecaca}\n#cl-app .btn-sm{padding:4px 10px;font-size:12px}\n#cl-app .cl-top-bar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px;align-items:center}\n#cl-app .cl-search{flex:1;min-width:160px}\n#cl-app .cl-list-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}\n#cl-app .cl-tab{padding:6px 14px;border-radius:20px;font-size:13px;font-weight:600;cursor:pointer;border:1.5px solid #cbd5e1;background:#fff;color:#475569;transition:all .15s}\n#cl-app .cl-tab.active{background:#3b82f6;color:#fff;border-color:#3b82f6}\n#cl-app .cl-new-list{display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap}\n#cl-app .cl-progress-bar-wrap{background:#e2e8f0;border-radius:99px;height:10px;margin-bottom:14px;overflow:hidden}\n#cl-app .cl-progress-bar{background:linear-gradient(90deg,#3b82f6,#06b6d4);height:100%;border-radius:99px;transition:width .3s}\n#cl-app .cl-progress-label{font-size:12px;color:#64748b;margin-bottom:8px}\n#cl-app .cl-add-row{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}\n#cl-app .cl-add-row input{flex:1;min-width:160px}\n#cl-app .cl-list{list-style:none;display:flex;flex-direction:column;gap:6px}\n#cl-app .cl-item{display:flex;align-items:center;gap:8px;background:#fff;border:1.5px solid #e2e8f0;border-radius:9px;padding:10px 12px;transition:box-shadow .15s,opacity .2s;cursor:grab;user-select:none}\n#cl-app .cl-item:active{cursor:grabbing}\n#cl-app .cl-item.dragging{opacity:.4;box-shadow:0 4px 16px rgba(59,130,246,.15)}\n#cl-app .cl-item.drag-over{border-color:#3b82f6;background:#eff6ff}\n#cl-app .cl-item.done .cl-item-text{text-decoration:line-through;color:#94a3b8}\n#cl-app .cl-item-drag{color:#94a3b8;font-size:16px;cursor:grab;flex-shrink:0}\n#cl-app .cl-item input[type=\"checkbox\"]{width:17px;height:17px;accent-color:#3b82f6;cursor:pointer;flex-shrink:0}\n#cl-app .cl-item-text{flex:1;font-size:14px;word-break:break-word}\n#cl-app .cl-item-edit{flex:1;font-size:14px;border:none;outline:none;background:transparent;color:#1e293b}\n#cl-app .cl-item-cat{font-size:11px;padding:2px 8px;border-radius:20px;background:#dbeafe;color:#1d4ed8;font-weight:600;flex-shrink:0}\n#cl-app .cl-item-actions{display:flex;gap:4px;flex-shrink:0}\n#cl-app .cl-empty{text-align:center;color:#94a3b8;font-size:14px;padding:32px 0}\n#cl-app .cl-footer-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}\n#cl-app .cl-cat-group-label{font-size:12px;font-weight:700;color:#3b82f6;margin-top:10px;margin-bottom:4px;padding-left:4px}\n@media(max-width:480px){\n  #cl-app .cl-header h1{font-size:1.2rem}\n  #cl-app .cl-add-row{flex-direction:column}\n  #cl-app .cl-footer-actions{flex-direction:column}\n}\n\u003c/style\u003e\n\u003cdiv class=\"cl-header\"\u003e\n  \u003ch1\u003eチェックリスト作成ツール\u003c/h1\u003e\n\u003c/div\u003e\n\u003cdiv class=\"cl-top-bar\"\u003e\n  \u003cinput type=\"text\" id=\"cl-search\" class=\"cl-search\" placeholder=\"アイテムを検索...\" oninput=\"clRender()\"\u003e\n  \u003cbutton class=\"btn-secondary btn-sm\" onclick=\"clExport()\"\u003eテキストで出力\u003c/button\u003e\n  \u003cbutton class=\"btn-danger btn-sm\" onclick=\"clClearCompleted()\"\u003e完了済みを削除\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"cl-new-list\" id=\"cl-new-list-row\"\u003e\n  \u003cinput type=\"text\" id=\"cl-new-list-name\" placeholder=\"新しいリスト名...\" style=\"width:200px\"\u003e\n  \u003cbutton class=\"btn-primary btn-sm\" onclick=\"clAddList()\"\u003e+ リストを追加\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"cl-tabs\" class=\"cl-list-tabs\"\u003e\u003c/div\u003e\n\u003cdiv class=\"cl-progress-label\" id=\"cl-progress-label\"\u003e\u003c/div\u003e\n\u003cdiv class=\"cl-progress-bar-wrap\"\u003e\u003cdiv class=\"cl-progress-bar\" id=\"cl-progress-bar\" style=\"width:0%\"\u003e\u003c/div\u003e\u003c/div\u003e\n\u003cdiv class=\"cl-add-row\"\u003e\n  \u003cinput type=\"text\" id=\"cl-new-item\" placeholder=\"アイテムを追加...\" onkeydown=\"if(event.key==='Enter')clAddItem()\"\u003e\n  \u003cinput type=\"text\" id=\"cl-new-cat\" placeholder=\"カテゴリ（任意）\" style=\"width:160px\"\u003e\n  \u003cbutton class=\"btn-primary\" onclick=\"clAddItem()\"\u003e+ 追加\u003c/button\u003e\n\u003c/div\u003e\n\u003cul class=\"cl-list\" id=\"cl-list\"\u003e\u003c/ul\u003e\n\u003cdiv id=\"cl-empty\" class=\"cl-empty\" style=\"display:none\"\u003eアイテムがありません。上から追加してください！\u003c/div\u003e\n\u003cdiv class=\"cl-footer-actions\"\u003e\n  \u003cbutton class=\"btn-danger btn-sm\" onclick=\"clDeleteList()\"\u003eこのリストを削除\u003c/button\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var STORE_KEY='cl_app_ja_v1';\n  var state={lists:[],activeList:0};\n\n  function load(){\n    try{var s=localStorage.getItem(STORE_KEY);if(s)state=JSON.parse(s);}catch(e){}\n    if(!state.lists||!state.lists.length){\n      state={lists:[{name:'マイチェックリスト',items:[]}],activeList:0};\n    }\n    if(state.activeList\u003e=state.lists.length)state.activeList=0;\n  }\n\n  function save(){\n    try{localStorage.setItem(STORE_KEY,JSON.stringify(state));}catch(e){}\n  }\n\n  function currentList(){return state.lists[state.activeList];}\n\n  function clAddList(){\n    var n=document.getElementById('cl-new-list-name');\n    var name=(n.value||'').trim();\n    if(!name)return;\n    state.lists.push({name:name,items:[]});\n    state.activeList=state.lists.length-1;\n    n.value='';\n    save();clRender();\n  }\n  window.clAddList=clAddList;\n\n  function clDeleteList(){\n    if(state.lists.length\u003c=1){alert('最後のリストは削除できません。');return;}\n    if(!confirm('このリストとすべてのアイテムを削除しますか？'))return;\n    state.lists.splice(state.activeList,1);\n    if(state.activeList\u003e=state.lists.length)state.activeList=state.lists.length-1;\n    save();clRender();\n  }\n  window.clDeleteList=clDeleteList;\n\n  function clSwitchList(i){\n    state.activeList=i;\n    save();clRender();\n  }\n  window.clSwitchList=clSwitchList;\n\n  function clAddItem(){\n    var n=document.getElementById('cl-new-item');\n    var c=document.getElementById('cl-new-cat');\n    var text=(n.value||'').trim();\n    if(!text)return;\n    currentList().items.push({id:Date.now()+'_'+Math.random(),text:text,done:false,cat:(c.value||'').trim()});\n    n.value='';c.value='';\n    save();clRender();\n  }\n  window.clAddItem=clAddItem;\n\n  function clToggle(id){\n    var item=currentList().items.find(function(x){return x.id===id;});\n    if(item)item.done=!item.done;\n    save();clRender();\n  }\n  window.clToggle=clToggle;\n\n  function clDelete(id){\n    var list=currentList();\n    list.items=list.items.filter(function(x){return x.id!==id;});\n    save();clRender();\n  }\n  window.clDelete=clDelete;\n\n  function clStartEdit(id){\n    var el=document.getElementById('cl-text-'+id);\n    var input=document.getElementById('cl-edit-'+id);\n    if(!el||!input)return;\n    el.style.display='none';\n    input.style.display='block';\n    input.focus();\n    input.select();\n  }\n  window.clStartEdit=clStartEdit;\n\n  function clFinishEdit(id){\n    var input=document.getElementById('cl-edit-'+id);\n    var el=document.getElementById('cl-text-'+id);\n    if(!input||!el)return;\n    var item=currentList().items.find(function(x){return x.id===id;});\n    if(item){item.text=input.value.trim()||item.text;}\n    el.style.display='';\n    input.style.display='none';\n    save();clRender();\n  }\n  window.clFinishEdit=clFinishEdit;\n\n  function clClearCompleted(){\n    var list=currentList();\n    list.items=list.items.filter(function(x){return !x.done;});\n    save();clRender();\n  }\n  window.clClearCompleted=clClearCompleted;\n\n  function clExport(){\n    var list=currentList();\n    var lines=[list.name,''];\n    var cats={};\n    list.items.forEach(function(item){\n      var c=item.cat||'';\n      if(!cats[c])cats[c]=[];\n      cats[c].push(item);\n    });\n    Object.keys(cats).forEach(function(cat){\n      if(cat)lines.push('['+cat+']');\n      cats[cat].forEach(function(item){\n        lines.push((item.done?'[完] ':'[ ] ')+item.text);\n      });\n      lines.push('');\n    });\n    var blob=new Blob([lines.join('\\n')],{type:'text/plain'});\n    var a=document.createElement('a');\n    a.href=URL.createObjectURL(blob);\n    a.download=(list.name||'checklist')+'.txt';\n    a.click();\n    URL.revokeObjectURL(a.href);\n  }\n  window.clExport=clExport;\n\n  // Drag and drop\n  var dragSrcId=null;\n\n  function clDragStart(id){dragSrcId=id;}\n  window.clDragStart=clDragStart;\n\n  function clDragOver(e,id){\n    e.preventDefault();\n    document.querySelectorAll('#cl-app .cl-item').forEach(function(el){el.classList.remove('drag-over');});\n    var el=document.getElementById('cl-li-'+id);\n    if(el)el.classList.add('drag-over');\n  }\n  window.clDragOver=clDragOver;\n\n  function clDrop(id){\n    if(!dragSrcId||dragSrcId===id)return;\n    var items=currentList().items;\n    var srcIdx=items.findIndex(function(x){return x.id===dragSrcId;});\n    var dstIdx=items.findIndex(function(x){return x.id===id;});\n    if(srcIdx\u003c0||dstIdx\u003c0)return;\n    var removed=items.splice(srcIdx,1)[0];\n    items.splice(dstIdx,0,removed);\n    dragSrcId=null;\n    save();clRender();\n  }\n  window.clDrop=clDrop;\n\n  function clDragEnd(){\n    dragSrcId=null;\n    document.querySelectorAll('#cl-app .cl-item').forEach(function(el){el.classList.remove('drag-over','dragging');});\n  }\n  window.clDragEnd=clDragEnd;\n\n  function clRender(){\n    var list=currentList();\n    var search=(document.getElementById('cl-search')||{}).value||'';\n    var sq=search.trim().toLowerCase();\n\n    // Tabs\n    var tabsEl=document.getElementById('cl-tabs');\n    tabsEl.innerHTML='';\n    state.lists.forEach(function(l,i){\n      var btn=document.createElement('button');\n      btn.className='cl-tab'+(i===state.activeList?' active':'');\n      btn.textContent=l.name;\n      btn.onclick=function(){clSwitchList(i);};\n      tabsEl.appendChild(btn);\n    });\n\n    // Progress\n    var total=list.items.length;\n    var done=list.items.filter(function(x){return x.done;}).length;\n    var pct=total?Math.round(done/total*100):0;\n    document.getElementById('cl-progress-label').textContent=total?done+' / '+total+' 完了 ('+pct+'%)':'アイテムなし';\n    document.getElementById('cl-progress-bar').style.width=pct+'%';\n\n    // Filter\n    var filtered=list.items.filter(function(item){\n      return !sq||(item.text.toLowerCase().includes(sq)||(item.cat||'').toLowerCase().includes(sq));\n    });\n\n    // Group by category\n    var cats={};\n    var catOrder=[];\n    filtered.forEach(function(item){\n      var c=item.cat||'';\n      if(!cats[c]){cats[c]=[];catOrder.push(c);}\n      cats[c].push(item);\n    });\n\n    var ul=document.getElementById('cl-list');\n    var emptyEl=document.getElementById('cl-empty');\n    ul.innerHTML='';\n\n    if(!filtered.length){\n      emptyEl.style.display='';\n    } else {\n      emptyEl.style.display='none';\n      catOrder.forEach(function(cat){\n        if(cat){\n          var lbl=document.createElement('li');\n          lbl.className='cl-cat-group-label';\n          lbl.textContent=cat;\n          ul.appendChild(lbl);\n        }\n        cats[cat].forEach(function(item){\n          var li=document.createElement('li');\n          li.className='cl-item'+(item.done?' done':'');\n          li.id='cl-li-'+item.id;\n          li.draggable=true;\n          li.ondragstart=function(){li.classList.add('dragging');clDragStart(item.id);};\n          li.ondragover=function(e){clDragOver(e,item.id);};\n          li.ondrop=function(){clDrop(item.id);};\n          li.ondragend=clDragEnd;\n\n          li.innerHTML=\n            '\u003cspan class=\"cl-item-drag\" title=\"ドラッグして並べ替え\"\u003e\u0026#8942;\u0026#8942;\u003c/span\u003e'+\n            '\u003cinput type=\"checkbox\"'+(item.done?' checked':'')+' onchange=\"clToggle(\\''+item.id+'\\')\"\u003e'+\n            '\u003cspan class=\"cl-item-text\" id=\"cl-text-'+item.id+'\" ondblclick=\"clStartEdit(\\''+item.id+'\\')\"\u003e'+escHtml(item.text)+'\u003c/span\u003e'+\n            '\u003cinput type=\"text\" class=\"cl-item-edit\" id=\"cl-edit-'+item.id+'\" value=\"'+escHtml(item.text)+'\" style=\"display:none\" onblur=\"clFinishEdit(\\''+item.id+'\\')\" onkeydown=\"if(event.key===\\'Enter\\')clFinishEdit(\\''+item.id+'\\')\"\u003e'+\n            (item.cat?'\u003cspan class=\"cl-item-cat\"\u003e'+escHtml(item.cat)+'\u003c/span\u003e':'')+\n            '\u003cspan class=\"cl-item-actions\"\u003e'+\n              '\u003cbutton class=\"btn-secondary btn-sm\" onclick=\"clStartEdit(\\''+item.id+'\\')\"\u003e編集\u003c/button\u003e'+\n              '\u003cbutton class=\"btn-danger btn-sm\" onclick=\"clDelete(\\''+item.id+'\\')\"\u003e削除\u003c/button\u003e'+\n            '\u003c/span\u003e';\n          ul.appendChild(li);\n        });\n      });\n    }\n  }\n\n  function escHtml(s){\n    return String(s).replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;').replace(/\"/g,'\u0026quot;').replace(/'/g,'\u0026#39;');\n  }\n\n  load();\n  clRender();\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003cblockquote\u003e\n\u003cp\u003eカンバンボード -\u0026gt; \u003ca href=\"https://productivity-works.com/ja/tools/kanban-board/\"\u003eカンバンボード\u003c/a\u003e\n\u003c/p\u003e","title":"チェックリスト作成ツール"},{"content":" 読書速度テスト 読了時間計算 難易度： やさしい ふつう むずかしい \u0026lt;div style=\u0026quot;position:relative;\u0026quot;\u0026gt; \u0026lt;div id=\u0026quot;rs-passage-box\u0026quot; class=\u0026quot;rs-passage-box\u0026quot;\u0026gt; \u0026lt;!-- text injected by JS --\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;rs-passage-overlay\u0026quot; class=\u0026quot;rs-passage-overlay\u0026quot;\u0026gt;「読み始める」を押すとテキストが表示されます\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rs-timer-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rs-timer-display\u0026quot; id=\u0026quot;rs-timer-display\u0026quot;\u0026gt;0:00.0\u0026lt;/div\u0026gt; \u0026lt;span class=\u0026quot;rs-badge\u0026quot; id=\u0026quot;rs-status-badge\u0026quot;\u0026gt;待機中\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;display:flex;gap:10px;flex-wrap:wrap;\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;rs-btn rs-btn-primary\u0026quot; id=\u0026quot;rs-start-btn\u0026quot; onclick=\u0026quot;rsStart()\u0026quot;\u0026gt;読み始める\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;rs-btn rs-btn-success\u0026quot; id=\u0026quot;rs-done-btn\u0026quot; onclick=\u0026quot;rsDone()\u0026quot; disabled\u0026gt;読了\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;rs-btn rs-btn-ghost\u0026quot; onclick=\u0026quot;rsReset()\u0026quot;\u0026gt;リセット\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; — WPM（1分あたりの語数） — 読書時間（秒） — 理解度 理解度テスト（3問） 答え合わせ あなたの速度 vs 平均的な読者 文字数を入力 \u0026lt;div class=\u0026quot;rs-input-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;プリセット\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;rs-preset-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;rs-preset-btn\u0026quot; onclick=\u0026quot;rsSetPreset(80000,'小説（8万字）')\u0026quot;\u0026gt;小説（8万字）\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;rs-preset-btn\u0026quot; onclick=\u0026quot;rsSetPreset(1500,'ブログ記事（1,500字）')\u0026quot;\u0026gt;ブログ記事（1,500字）\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;rs-preset-btn\u0026quot; onclick=\u0026quot;rsSetPreset(8000,'論文（8,000字）')\u0026quot;\u0026gt;論文（8,000字）\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;rs-preset-btn\u0026quot; onclick=\u0026quot;rsSetPreset(5000,'教科書章（5,000字）')\u0026quot;\u0026gt;教科書章（5,000字）\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rs-or-divider\u0026quot;\u0026gt;— または —\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rs-input-group\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;rs-paste-text\u0026quot;\u0026gt;テキストを貼り付け（自動カウント）\u0026lt;/label\u0026gt; \u0026lt;textarea id=\u0026quot;rs-paste-text\u0026quot; class=\u0026quot;rs-input\u0026quot; placeholder=\u0026quot;ここにテキストを貼り付けると文字数を自動カウントします...\u0026quot; oninput=\u0026quot;rsCountPaste()\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;div style=\u0026quot;font-size:12px;color:#94a3b8;margin-top:4px;\u0026quot; id=\u0026quot;rs-paste-count\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rs-input-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;読書速度（WPM）\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;rs-wpm-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;rs-wpm-slider\u0026quot; min=\u0026quot;100\u0026quot; max=\u0026quot;800\u0026quot; value=\u0026quot;250\u0026quot; oninput=\u0026quot;rsUpdateWpm();rsCalcTime();\u0026quot; /\u0026gt; \u0026lt;div class=\u0026quot;rs-wpm-val\u0026quot;\u0026gt;\u0026lt;span id=\u0026quot;rs-wpm-display\u0026quot;\u0026gt;250\u0026lt;/span\u0026gt; WPM\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;display:flex;justify-content:space-between;font-size:11px;color:#94a3b8;margin-top:2px;\u0026quot;\u0026gt; \u0026lt;span\u0026gt;100（遅い）\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt;250（平均）\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt;400（速い）\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt;800（速読）\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;rs-btn rs-btn-primary\u0026quot; onclick=\u0026quot;rsCalcTime()\u0026quot; style=\u0026quot;width:100%;margin-top:4px;\u0026quot;\u0026gt;読了時間を計算\u0026lt;/button\u0026gt; 読了時間（推定） — 読書速度の目安（WPM比較） 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → タイピング速度を測定 → タイピング速度テスト\nテキスト行数をカウント → 行数カウンター\nダミーテキストを生成 → Lorem Ipsumジェネレーター\nタイピング速度を測定 → タイピング速度テスト テキスト行数をカウント → 行数カウンター ダミーテキストを生成 → Lorem Ipsumジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 AI英語学習おすすめアプリ2026年版【比較ランキング・無料あり】 AI活用の英語学習法おすすめ5選【2026年版・独学で話せるようになる方法】 オンライン英会話 おすすめ2026年版！料金・講師・教材で比較 ","permalink":"https://productivity-works.com/ja/tools/reading-speed-calculator/","summary":"\u003cdiv id=\"rs-app\"\u003e\n\u003cstyle\u003e\n#rs-app {\n  font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif;\n  max-width: 720px;\n  margin: 0 auto;\n  color: #1e293b;\n  line-height: 1.6;\n}\n#rs-app * { box-sizing: border-box; }\n\u003cp\u003e/* Tabs */\n#rs-app .rs-tabs {\ndisplay: flex;\ngap: 4px;\nmargin-bottom: 24px;\nborder-bottom: 2px solid #cbd5e1;\n}\n#rs-app .rs-tab-btn {\npadding: 10px 20px;\nborder: none;\nbackground: none;\nfont-size: 15px;\nfont-weight: 600;\ncolor: #64748b;\ncursor: pointer;\nborder-bottom: 3px solid transparent;\nmargin-bottom: -2px;\nborder-radius: 6px 6px 0 0;\ntransition: color 0.18s, border-color 0.18s, background 0.18s;\n}\n#rs-app .rs-tab-btn:hover {\ncolor: #0f172a;\nbackground: #f1f5f9;\n}\n#rs-app .rs-tab-btn.active {\ncolor: #0284c7;\nborder-bottom-color: #0284c7;\nbackground: #f0f9ff;\n}\u003c/p\u003e","title":"読書速度テスト"},{"content":"無料のオンライン日付計算ツールです。2つの日付の差を計算、日付への日数加減算、営業日カウントの3モードに対応しています。登録不要・広告なしで即座に利用できます。\n日付の差 日数の加減算 営業日計算 開始日 終了日 差を計算する 開始日と終了日を両方入力してください。 基準日 数値 単位 日 週 ヶ月 年 演算 ＋ 加算 － 減算 日付を計算する 基準日と数値を入力してください。 開始日 終了日 土曜日・日曜日を除外します。祝日は自動除外されません。\n営業日を計算する 開始日と終了日を両方入力してください。 請求書・経費管理をもっとラクに freee会計なら日付入力・締め日管理・営業日ベースの支払サイクル設定がすべて自動化。個人事業主から法人まで無料トライアルで試せます。\nfreeeを無料で試す \u0026rarr; 関連する無料ツール 年齢計算ツール カレンダー生成ツール 使い方 モード1 — 日付の差を計算： 開始日と終了日を入力して「差を計算する」をクリックすると、年・月・日・合計日数・週数・時間数が表示されます。\nモード2 — 日数の加減算： 基準日を選択し、数値と単位（日・週・ヶ月・年）を設定して加算または減算を選びます。結果の日付と曜日が即座に表示されます。\nモード3 — 営業日計算： 2つの日付を入力すると、その期間に含まれる平日（月〜金）の日数をカウントします。土日は自動で除外されます。\nよくある質問 日付の差はどのように計算されますか？ カレンダー上の正確な差を使用します。年・月は暦上の位置で計算し、端数の日数はうるう年を含めて正確にカウントします。\n営業日計算で祝日は除外されますか？ 土曜日と日曜日は自動的に除外されますが、祝日は自動除外されません。祝日を除外したい場合は、計算結果から手動で差し引いてください。\n異なる年をまたぐ計算はできますか？ はい。複数年にわたる期間、うるう年、月の日数の違いもすべて自動で処理します。\n曜日表示は何に使いますか？ 計算結果に曜日（例：月曜日）が表示されるため、会議や締め切りのスケジュール確認に役立ちます。\n関連ツール：年齢計算ツール · カレンダー生成ツール ","permalink":"https://productivity-works.com/ja/tools/date-calculator/","summary":"\u003cp\u003e無料のオンライン日付計算ツールです。2つの日付の差を計算、日付への日数加減算、営業日カウントの3モードに対応しています。登録不要・広告なしで即座に利用できます。\u003c/p\u003e\n\u003cdiv id=\"dt-app\"\u003e\n\u003cstyle\u003e\n#dt-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Yu Gothic\", sans-serif;\n  max-width: 700px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#dt-app * {\n  box-sizing: border-box;\n}\n#dt-app .dt-tabs {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #e0e0e0;\n  margin-bottom: 24px;\n}\n#dt-app .dt-tab {\n  flex: 1;\n  padding: 12px 8px;\n  background: none;\n  border: none;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  font-size: 14px;\n  font-weight: 700;\n  color: #777;\n  cursor: pointer;\n  transition: all 0.2s;\n  text-align: center;\n}\n#dt-app .dt-tab:hover {\n  color: #4f46e5;\n  background: #f5f3ff;\n}\n#dt-app .dt-tab.active {\n  color: #4f46e5;\n  border-bottom-color: #4f46e5;\n  background: none;\n}\n#dt-app .dt-panel {\n  display: none;\n}\n#dt-app .dt-panel.active {\n  display: block;\n}\n#dt-app .dt-card {\n  background: #f9f9ff;\n  border: 1px solid #e8e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 20px;\n}\n#dt-app .dt-row {\n  display: flex;\n  gap: 16px;\n  flex-wrap: wrap;\n  margin-bottom: 16px;\n  align-items: flex-end;\n}\n#dt-app .dt-field {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  flex: 1;\n  min-width: 160px;\n}\n#dt-app .dt-field label {\n  font-size: 13px;\n  font-weight: 700;\n  color: #555;\n}\n#dt-app .dt-field input,\n#dt-app .dt-field select {\n  padding: 10px 12px;\n  border: 1.5px solid #d0d0e0;\n  border-radius: 8px;\n  font-size: 15px;\n  background: #fff;\n  color: #1a1a2e;\n  outline: none;\n  transition: border-color 0.2s;\n  width: 100%;\n}\n#dt-app .dt-field input:focus,\n#dt-app .dt-field select:focus {\n  border-color: #4f46e5;\n}\n#dt-app .dt-btn {\n  display: inline-block;\n  padding: 11px 28px;\n  background: #4f46e5;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n#dt-app .dt-btn:hover {\n  background: #4338ca;\n}\n#dt-app .dt-result {\n  background: #fff;\n  border: 1.5px solid #4f46e5;\n  border-radius: 10px;\n  padding: 20px 24px;\n  margin-top: 16px;\n  display: none;\n}\n#dt-app .dt-result.show {\n  display: block;\n}\n#dt-app .dt-result-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));\n  gap: 12px;\n  margin-bottom: 12px;\n}\n#dt-app .dt-result-item {\n  background: #f5f3ff;\n  border-radius: 8px;\n  padding: 14px 12px;\n  text-align: center;\n}\n#dt-app .dt-result-item .val {\n  font-size: 26px;\n  font-weight: 800;\n  color: #4f46e5;\n  line-height: 1.1;\n}\n#dt-app .dt-result-item .lbl {\n  font-size: 12px;\n  color: #666;\n  margin-top: 4px;\n}\n#dt-app .dt-result-main {\n  font-size: 16px;\n  font-weight: 700;\n  color: #1a1a2e;\n  margin-bottom: 8px;\n}\n#dt-app .dt-result-sub {\n  font-size: 14px;\n  color: #555;\n  line-height: 1.8;\n}\n#dt-app .dt-dow-badge {\n  display: inline-block;\n  background: #e0f2fe;\n  color: #0369a1;\n  border-radius: 6px;\n  padding: 3px 10px;\n  font-size: 13px;\n  font-weight: 700;\n  margin-left: 6px;\n}\n#dt-app .dt-error {\n  color: #dc2626;\n  font-size: 14px;\n  margin-top: 10px;\n  display: none;\n}\n#dt-app .dt-error.show {\n  display: block;\n}\n#dt-app .dt-op-toggle {\n  display: flex;\n  gap: 0;\n  border: 1.5px solid #d0d0e0;\n  border-radius: 8px;\n  overflow: hidden;\n  background: #fff;\n}\n#dt-app .dt-op-btn {\n  flex: 1;\n  padding: 10px;\n  background: none;\n  border: none;\n  font-size: 14px;\n  font-weight: 700;\n  color: #777;\n  cursor: pointer;\n  transition: all 0.2s;\n}\n#dt-app .dt-op-btn.active {\n  background: #4f46e5;\n  color: #fff;\n}\n#dt-app .dt-cta {\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n  border-radius: 12px;\n  padding: 24px;\n  margin-top: 32px;\n  color: #fff;\n}\n#dt-app .dt-cta h3 {\n  margin: 0 0 8px;\n  font-size: 18px;\n  font-weight: 800;\n}\n#dt-app .dt-cta p {\n  margin: 0 0 16px;\n  font-size: 14px;\n  opacity: 0.92;\n  line-height: 1.6;\n}\n#dt-app .dt-cta-btn {\n  display: inline-block;\n  padding: 11px 24px;\n  background: #fff;\n  color: #4f46e5;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 800;\n  text-decoration: none;\n  transition: opacity 0.2s;\n}\n#dt-app .dt-cta-btn:hover {\n  opacity: 0.9;\n}\n#dt-app .dt-related {\n  margin-top: 32px;\n  padding-top: 24px;\n  border-top: 1px solid #e0e0e0;\n}\n#dt-app .dt-related h3 {\n  font-size: 16px;\n  font-weight: 700;\n  margin: 0 0 14px;\n  color: #1a1a2e;\n}\n#dt-app .dt-related-links {\n  display: flex;\n  gap: 12px;\n  flex-wrap: wrap;\n}\n#dt-app .dt-related-link {\n  display: inline-block;\n  padding: 9px 18px;\n  background: #f5f3ff;\n  border: 1.5px solid #c7d2fe;\n  border-radius: 8px;\n  color: #4f46e5;\n  font-size: 14px;\n  font-weight: 700;\n  text-decoration: none;\n  transition: background 0.2s;\n}\n#dt-app .dt-related-link:hover {\n  background: #ede9fe;\n}\n#dt-app .dt-hint {\n  font-size: 13px;\n  color: #888;\n  margin-top: 10px;\n}\n@media (max-width: 500px) {\n  #dt-app .dt-tab { font-size: 12px; padding: 10px 4px; }\n  #dt-app .dt-result-item .val { font-size: 20px; }\n  #dt-app .dt-cta h3 { font-size: 16px; }\n}\n\u003c/style\u003e\n\u003c!-- タブナビゲーション --\u003e\n\u003cdiv class=\"dt-tabs\"\u003e\n  \u003cbutton class=\"dt-tab active\" onclick=\"dtSwitchTab(0, this)\"\u003e日付の差\u003c/button\u003e\n  \u003cbutton class=\"dt-tab\" onclick=\"dtSwitchTab(1, this)\"\u003e日数の加減算\u003c/button\u003e\n  \u003cbutton class=\"dt-tab\" onclick=\"dtSwitchTab(2, this)\"\u003e営業日計算\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- パネル0: 日付の差 --\u003e\n\u003cdiv class=\"dt-panel active\" id=\"dt-panel-0\"\u003e\n  \u003cdiv class=\"dt-card\"\u003e\n    \u003cdiv class=\"dt-row\"\u003e\n      \u003cdiv class=\"dt-field\"\u003e\n        \u003clabel\u003e開始日\u003c/label\u003e\n        \u003cinput type=\"date\" id=\"dd-start\" /\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"dt-field\"\u003e\n        \u003clabel\u003e終了日\u003c/label\u003e\n        \u003cinput type=\"date\" id=\"dd-end\" /\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cbutton class=\"dt-btn\" onclick=\"dtCalcDiff()\"\u003e差を計算する\u003c/button\u003e\n    \u003cdiv class=\"dt-error\" id=\"dd-error\"\u003e開始日と終了日を両方入力してください。\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"dt-result\" id=\"dd-result\"\u003e\n    \u003cdiv class=\"dt-result-main\" id=\"dd-main\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"dt-result-grid\" id=\"dd-grid\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"dt-result-sub\" id=\"dd-sub\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- パネル1: 日数の加減算 --\u003e\n\u003cdiv class=\"dt-panel\" id=\"dt-panel-1\"\u003e\n  \u003cdiv class=\"dt-card\"\u003e\n    \u003cdiv class=\"dt-row\"\u003e\n      \u003cdiv class=\"dt-field\"\u003e\n        \u003clabel\u003e基準日\u003c/label\u003e\n        \u003cinput type=\"date\" id=\"as-date\" /\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"dt-row\"\u003e\n      \u003cdiv class=\"dt-field\" style=\"max-width:100px;\"\u003e\n        \u003clabel\u003e数値\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"as-amount\" value=\"30\" min=\"0\" max=\"9999\" /\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"dt-field\" style=\"max-width:160px;\"\u003e\n        \u003clabel\u003e単位\u003c/label\u003e\n        \u003cselect id=\"as-unit\"\u003e\n          \u003coption value=\"days\"\u003e日\u003c/option\u003e\n          \u003coption value=\"weeks\"\u003e週\u003c/option\u003e\n          \u003coption value=\"months\"\u003eヶ月\u003c/option\u003e\n          \u003coption value=\"years\"\u003e年\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"dt-field\" style=\"max-width:180px;\"\u003e\n        \u003clabel\u003e演算\u003c/label\u003e\n        \u003cdiv class=\"dt-op-toggle\"\u003e\n          \u003cbutton class=\"dt-op-btn active\" id=\"as-add-btn\" onclick=\"dtSetOp('add')\"\u003e＋ 加算\u003c/button\u003e\n          \u003cbutton class=\"dt-op-btn\" id=\"as-sub-btn\" onclick=\"dtSetOp('sub')\"\u003e－ 減算\u003c/button\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cbutton class=\"dt-btn\" onclick=\"dtCalcAddSub()\"\u003e日付を計算する\u003c/button\u003e\n    \u003cdiv class=\"dt-error\" id=\"as-error\"\u003e基準日と数値を入力してください。\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"dt-result\" id=\"as-result\"\u003e\n    \u003cdiv class=\"dt-result-main\" id=\"as-main\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"dt-result-sub\" id=\"as-sub\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- パネル2: 営業日計算 --\u003e\n\u003cdiv class=\"dt-panel\" id=\"dt-panel-2\"\u003e\n  \u003cdiv class=\"dt-card\"\u003e\n    \u003cdiv class=\"dt-row\"\u003e\n      \u003cdiv class=\"dt-field\"\u003e\n        \u003clabel\u003e開始日\u003c/label\u003e\n        \u003cinput type=\"date\" id=\"bd-start\" /\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"dt-field\"\u003e\n        \u003clabel\u003e終了日\u003c/label\u003e\n        \u003cinput type=\"date\" id=\"bd-end\" /\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cp class=\"dt-hint\"\u003e土曜日・日曜日を除外します。祝日は自動除外されません。\u003c/p\u003e","title":"日付計算ツール"},{"content":" オンラインメトロノーム 120 BPM Moderato（モデラート） テンポ調整 スタート タップでテンポ入力 拍子記号 2/4 4/4 3/4 6/8 音量 80% テンポ記号の目安 Largo（ラルゴ）40〜59 BPM非常に遅く、広々と Andante（アンダンテ）60〜85 BPM歩くような速さ Moderato（モデラート）86〜140 BPM中くらいの速さ Allegro（アレグロ）141〜180 BPM速く、生き生きと Presto（プレスト）181〜220 BPM非常に速く 音楽活動の確定申告も簡単 → freee会計で副業収入を管理 関連ツール ノイズ生成 → ノイズ生成ツール ","permalink":"https://productivity-works.com/ja/tools/metronome/","summary":"\u003cdiv id=\"met-app\"\u003e\n\u003cstyle\u003e\n#met-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Noto Sans JP', system-ui, sans-serif;\n  max-width: 540px;\n  margin: 0 auto;\n  padding: 24px 20px;\n  color: #1a1a2e;\n}\n#met-app * { box-sizing: border-box; }\n\n#met-app h2 {\n  text-align: center;\n  font-size: 1.4rem;\n  margin: 0 0 24px;\n  color: #16213e;\n}\n\n/* BPM Display */\n#met-app .bpm-display {\n  text-align: center;\n  margin-bottom: 20px;\n}\n#met-app .bpm-number {\n  font-size: 5rem;\n  font-weight: 800;\n  line-height: 1;\n  color: #0f3460;\n  letter-spacing: -2px;\n}\n#met-app .bpm-label {\n  font-size: 0.85rem;\n  letter-spacing: 3px;\n  text-transform: uppercase;\n  color: #888;\n  margin-top: 4px;\n}\n\n/* Tempo marking */\n#met-app .tempo-marking {\n  text-align: center;\n  font-size: 1.05rem;\n  font-style: italic;\n  color: #e94560;\n  margin-bottom: 20px;\n  min-height: 1.5em;\n}\n\n/* Beat indicator */\n#met-app .beat-row {\n  display: flex;\n  justify-content: center;\n  gap: 10px;\n  margin-bottom: 24px;\n}\n#met-app .beat-dot {\n  width: 36px;\n  height: 36px;\n  border-radius: 50%;\n  background: #dde3f0;\n  transition: background 0.05s, transform 0.05s;\n}\n#met-app .beat-dot.accent {\n  background: #c0c8e0;\n}\n#met-app .beat-dot.active {\n  background: #e94560;\n  transform: scale(1.18);\n  box-shadow: 0 0 12px rgba(233,69,96,0.5);\n}\n#met-app .beat-dot.accent.active {\n  background: #c0392b;\n  box-shadow: 0 0 16px rgba(192,57,43,0.6);\n}\n\n/* Slider */\n#met-app .slider-wrap {\n  margin-bottom: 20px;\n}\n#met-app .slider-wrap label {\n  display: block;\n  font-size: 0.8rem;\n  font-weight: 700;\n  letter-spacing: 1px;\n  color: #555;\n  margin-bottom: 8px;\n}\n#met-app input[type=\"range\"] {\n  width: 100%;\n  height: 6px;\n  accent-color: #0f3460;\n  cursor: pointer;\n}\n\n/* Buttons */\n#met-app .btn-row {\n  display: flex;\n  gap: 12px;\n  margin-bottom: 20px;\n}\n#met-app .btn {\n  flex: 1;\n  padding: 14px;\n  border: none;\n  border-radius: 10px;\n  font-size: 1rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n}\n#met-app .btn:active { transform: scale(0.97); }\n#met-app .btn-start {\n  background: #0f3460;\n  color: #fff;\n}\n#met-app .btn-start.running {\n  background: #e94560;\n}\n#met-app .btn-tap {\n  background: #f0f3fa;\n  color: #0f3460;\n  border: 2px solid #ccd3e8;\n}\n#met-app .btn-tap:active {\n  background: #dde3f0;\n}\n\n/* Time signature */\n#met-app .timesig-wrap {\n  margin-bottom: 20px;\n}\n#met-app .timesig-wrap label {\n  display: block;\n  font-size: 0.8rem;\n  font-weight: 700;\n  color: #555;\n  margin-bottom: 8px;\n}\n#met-app .timesig-grid {\n  display: flex;\n  gap: 8px;\n}\n#met-app .timesig-btn {\n  flex: 1;\n  padding: 10px 4px;\n  border: 2px solid #ccd3e8;\n  border-radius: 8px;\n  background: #f0f3fa;\n  color: #333;\n  font-size: 0.9rem;\n  font-weight: 600;\n  cursor: pointer;\n  text-align: center;\n  transition: all 0.15s;\n}\n#met-app .timesig-btn.selected {\n  border-color: #0f3460;\n  background: #0f3460;\n  color: #fff;\n}\n\n/* Volume */\n#met-app .vol-wrap {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 24px;\n}\n#met-app .vol-wrap label {\n  font-size: 0.8rem;\n  font-weight: 700;\n  color: #555;\n  white-space: nowrap;\n}\n#met-app .vol-wrap input[type=\"range\"] {\n  flex: 1;\n}\n#met-app .vol-pct {\n  font-size: 0.85rem;\n  color: #555;\n  width: 36px;\n  text-align: right;\n}\n\n/* Tempo reference */\n#met-app .tempo-ref {\n  background: #f7f9ff;\n  border: 1px solid #dde3f0;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 24px;\n}\n#met-app .tempo-ref h3 {\n  font-size: 0.8rem;\n  font-weight: 700;\n  color: #888;\n  margin: 0 0 12px;\n}\n#met-app .tempo-ref table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n}\n#met-app .tempo-ref td {\n  padding: 5px 8px;\n  color: #333;\n}\n#met-app .tempo-ref td:first-child {\n  font-style: italic;\n  font-weight: 700;\n  color: #0f3460;\n  width: 38%;\n}\n#met-app .tempo-ref tr:nth-child(even) td {\n  background: #eef1fa;\n}\n#met-app .tempo-ref .current-row td {\n  background: #ffeef1;\n  color: #c0392b;\n  font-weight: 700;\n}\n\n/* freee CTA */\n#met-app .freee-cta {\n  background: linear-gradient(135deg, #e8f4fd 0%, #f0f8ff 100%);\n  border: 1px solid #b8d8f0;\n  border-left: 4px solid #0f3460;\n  border-radius: 8px;\n  padding: 14px 16px;\n  margin-bottom: 24px;\n  font-size: 0.9rem;\n  color: #333;\n  line-height: 1.6;\n}\n#met-app .freee-cta a {\n  color: #0f3460;\n  font-weight: 700;\n  text-decoration: underline;\n}\n#met-app .freee-cta a:hover {\n  color: #e94560;\n}\n\u003c/style\u003e\n\u003ch2\u003eオンラインメトロノーム\u003c/h2\u003e\n\u003c!-- Beat dots --\u003e\n\u003cdiv class=\"beat-row\" id=\"met-beat-row\"\u003e\u003c/div\u003e\n\u003c!-- BPM display --\u003e\n\u003cdiv class=\"bpm-display\"\u003e\n  \u003cdiv class=\"bpm-number\" id=\"met-bpm-num\"\u003e120\u003c/div\u003e\n  \u003cdiv class=\"bpm-label\"\u003eBPM\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Tempo marking --\u003e\n\u003cdiv class=\"tempo-marking\" id=\"met-tempo-name\"\u003eModerato（モデラート）\u003c/div\u003e\n\u003c!-- BPM slider --\u003e\n\u003cdiv class=\"slider-wrap\"\u003e\n  \u003clabel for=\"met-bpm-slider\"\u003eテンポ調整\u003c/label\u003e\n  \u003cinput type=\"range\" id=\"met-bpm-slider\" min=\"40\" max=\"220\" value=\"120\"\u003e\n\u003c/div\u003e\n\u003c!-- Start / Tap --\u003e\n\u003cdiv class=\"btn-row\"\u003e\n  \u003cbutton class=\"btn btn-start\" id=\"met-start-btn\"\u003eスタート\u003c/button\u003e\n  \u003cbutton class=\"btn btn-tap\" id=\"met-tap-btn\"\u003eタップでテンポ入力\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- Time signature --\u003e\n\u003cdiv class=\"timesig-wrap\"\u003e\n  \u003clabel\u003e拍子記号\u003c/label\u003e\n  \u003cdiv class=\"timesig-grid\" id=\"met-timesig-grid\"\u003e\n    \u003cbutton class=\"timesig-btn\" data-beats=\"2\" data-label=\"2/4\"\u003e2/4\u003c/button\u003e\n    \u003cbutton class=\"timesig-btn selected\" data-beats=\"4\" data-label=\"4/4\"\u003e4/4\u003c/button\u003e\n    \u003cbutton class=\"timesig-btn\" data-beats=\"3\" data-label=\"3/4\"\u003e3/4\u003c/button\u003e\n    \u003cbutton class=\"timesig-btn\" data-beats=\"6\" data-label=\"6/8\"\u003e6/8\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Volume --\u003e\n\u003cdiv class=\"vol-wrap\"\u003e\n  \u003clabel for=\"met-vol\"\u003e音量\u003c/label\u003e\n  \u003cinput type=\"range\" id=\"met-vol\" min=\"0\" max=\"100\" value=\"80\"\u003e\n  \u003cspan class=\"vol-pct\" id=\"met-vol-pct\"\u003e80%\u003c/span\u003e\n\u003c/div\u003e\n\u003c!-- Tempo reference table --\u003e\n\u003cdiv class=\"tempo-ref\"\u003e\n  \u003ch3\u003eテンポ記号の目安\u003c/h3\u003e\n  \u003ctable id=\"met-tempo-table\"\u003e\n    \u003ctr data-min=\"40\" data-max=\"59\"\u003e\u003ctd\u003eLargo（ラルゴ）\u003c/td\u003e\u003ctd\u003e40〜59 BPM\u003c/td\u003e\u003ctd\u003e非常に遅く、広々と\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr data-min=\"60\" data-max=\"85\"\u003e\u003ctd\u003eAndante（アンダンテ）\u003c/td\u003e\u003ctd\u003e60〜85 BPM\u003c/td\u003e\u003ctd\u003e歩くような速さ\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr data-min=\"86\" data-max=\"140\"\u003e\u003ctd\u003eModerato（モデラート）\u003c/td\u003e\u003ctd\u003e86〜140 BPM\u003c/td\u003e\u003ctd\u003e中くらいの速さ\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr data-min=\"141\" data-max=\"180\"\u003e\u003ctd\u003eAllegro（アレグロ）\u003c/td\u003e\u003ctd\u003e141〜180 BPM\u003c/td\u003e\u003ctd\u003e速く、生き生きと\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr data-min=\"181\" data-max=\"220\"\u003e\u003ctd\u003ePresto（プレスト）\u003c/td\u003e\u003ctd\u003e181〜220 BPM\u003c/td\u003e\u003ctd\u003e非常に速く\u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv class=\"freee-cta\"\u003e\n  音楽活動の確定申告も簡単 → \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"nofollow noopener\"\u003efreee会計で副業収入を管理\u003c/a\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  // --- State ---\n  var bpm = 120;\n  var beatsPerMeasure = 4;\n  var currentBeat = -1;\n  var isRunning = false;\n  var volume = 0.8;\n  var audioCtx = null;\n  var nextBeatTime = 0;\n  var scheduleAheadTime = 0.1;\n  var lookahead = 25.0;\n  var schedulerTimer = null;\n\n  // Tap tempo state\n  var tapTimes = [];\n\n  // Tempo markings (Japanese)\n  var tempoMarkings = [\n    { name: 'Largo（ラルゴ）',       min: 40,  max: 59  },\n    { name: 'Andante（アンダンテ）', min: 60,  max: 85  },\n    { name: 'Moderato（モデラート）',min: 86,  max: 140 },\n    { name: 'Allegro（アレグロ）',   min: 141, max: 180 },\n    { name: 'Presto（プレスト）',    min: 181, max: 220 }\n  ];\n\n  // --- DOM refs ---\n  var bpmSlider  = document.getElementById('met-bpm-slider');\n  var bpmNumEl   = document.getElementById('met-bpm-num');\n  var tempoName  = document.getElementById('met-tempo-name');\n  var startBtn   = document.getElementById('met-start-btn');\n  var tapBtn     = document.getElementById('met-tap-btn');\n  var beatRow    = document.getElementById('met-beat-row');\n  var timesigGrid= document.getElementById('met-timesig-grid');\n  var volSlider  = document.getElementById('met-vol');\n  var volPct     = document.getElementById('met-vol-pct');\n  var tempoTable = document.getElementById('met-tempo-table');\n\n  // --- Audio ---\n  function getAudioCtx() {\n    if (!audioCtx) {\n      audioCtx = new (window.AudioContext || window.webkitAudioContext)();\n    }\n    return audioCtx;\n  }\n\n  function scheduleClick(time, isAccent) {\n    var ctx = getAudioCtx();\n    var osc = ctx.createOscillator();\n    var env = ctx.createGain();\n\n    osc.connect(env);\n    env.connect(ctx.destination);\n\n    if (isAccent) {\n      osc.frequency.value = 1100;\n      env.gain.setValueAtTime(volume, time);\n      env.gain.exponentialRampToValueAtTime(0.001, time + 0.06);\n    } else {\n      osc.frequency.value = 880;\n      env.gain.setValueAtTime(volume * 0.65, time);\n      env.gain.exponentialRampToValueAtTime(0.001, time + 0.04);\n    }\n\n    osc.start(time);\n    osc.stop(time + 0.08);\n  }\n\n  // --- Beat dots ---\n  function renderBeatDots() {\n    beatRow.innerHTML = '';\n    for (var i = 0; i \u003c beatsPerMeasure; i++) {\n      var d = document.createElement('div');\n      d.className = 'beat-dot' + (i === 0 ? ' accent' : '');\n      d.id = 'met-dot-' + i;\n      beatRow.appendChild(d);\n    }\n  }\n\n  function flashBeat(beatIndex) {\n    for (var i = 0; i \u003c beatsPerMeasure; i++) {\n      var d = document.getElementById('met-dot-' + i);\n      if (d) d.classList.remove('active');\n    }\n    var active = document.getElementById('met-dot-' + beatIndex);\n    if (active) active.classList.add('active');\n  }\n\n  function clearBeats() {\n    for (var i = 0; i \u003c beatsPerMeasure; i++) {\n      var d = document.getElementById('met-dot-' + i);\n      if (d) d.classList.remove('active');\n    }\n  }\n\n  // --- Scheduler ---\n  var pendingFlashes = [];\n\n  function scheduler() {\n    var ctx = getAudioCtx();\n    while (nextBeatTime \u003c ctx.currentTime + scheduleAheadTime) {\n      var isAccent = (currentBeat === 0);\n      scheduleClick(nextBeatTime, isAccent);\n\n      var beatToFlash = currentBeat;\n      pendingFlashes.push({ beat: beatToFlash, time: nextBeatTime });\n\n      currentBeat = (currentBeat + 1) % beatsPerMeasure;\n      nextBeatTime += 60.0 / bpm;\n    }\n  }\n\n  function visualLoop() {\n    if (!isRunning) return;\n    var ctx = getAudioCtx();\n    var now = ctx.currentTime;\n    while (pendingFlashes.length \u0026\u0026 pendingFlashes[0].time \u003c= now + 0.015) {\n      flashBeat(pendingFlashes.shift().beat);\n    }\n    requestAnimationFrame(visualLoop);\n  }\n\n  function startMetronome() {\n    var ctx = getAudioCtx();\n    if (ctx.state === 'suspended') ctx.resume();\n    currentBeat = 0;\n    pendingFlashes = [];\n    nextBeatTime = ctx.currentTime + 0.05;\n    schedulerTimer = setInterval(scheduler, lookahead);\n    visualLoop();\n  }\n\n  function stopMetronome() {\n    clearInterval(schedulerTimer);\n    schedulerTimer = null;\n    pendingFlashes = [];\n    clearBeats();\n  }\n\n  // --- BPM helpers ---\n  function getTempoName(b) {\n    for (var i = 0; i \u003c tempoMarkings.length; i++) {\n      if (b \u003e= tempoMarkings[i].min \u0026\u0026 b \u003c= tempoMarkings[i].max) return tempoMarkings[i].name;\n    }\n    return '';\n  }\n\n  function updateBPM(val) {\n    bpm = Math.min(220, Math.max(40, val));\n    bpmSlider.value = bpm;\n    bpmNumEl.textContent = bpm;\n    tempoName.textContent = getTempoName(bpm);\n    highlightTempoRow(bpm);\n  }\n\n  function highlightTempoRow(b) {\n    var rows = tempoTable.querySelectorAll('tr');\n    rows.forEach(function(row) {\n      var mn = parseInt(row.getAttribute('data-min'));\n      var mx = parseInt(row.getAttribute('data-max'));\n      if (b \u003e= mn \u0026\u0026 b \u003c= mx) {\n        row.classList.add('current-row');\n      } else {\n        row.classList.remove('current-row');\n      }\n    });\n  }\n\n  // --- Events ---\n  bpmSlider.addEventListener('input', function() {\n    updateBPM(parseInt(this.value));\n  });\n\n  startBtn.addEventListener('click', function() {\n    isRunning = !isRunning;\n    if (isRunning) {\n      startBtn.textContent = '停止';\n      startBtn.classList.add('running');\n      startMetronome();\n    } else {\n      startBtn.textContent = 'スタート';\n      startBtn.classList.remove('running');\n      stopMetronome();\n    }\n  });\n\n  // Tap tempo\n  tapBtn.addEventListener('click', function() {\n    var now = Date.now();\n    tapTimes.push(now);\n    tapTimes = tapTimes.filter(function(t) { return now - t \u003c 3000; });\n    if (tapTimes.length \u003e= 2) {\n      var intervals = [];\n      for (var i = 1; i \u003c tapTimes.length; i++) {\n        intervals.push(tapTimes[i] - tapTimes[i-1]);\n      }\n      var avg = intervals.reduce(function(a,b){return a+b;},0) / intervals.length;\n      var tappedBPM = Math.round(60000 / avg);\n      updateBPM(tappedBPM);\n      if (isRunning) {\n        stopMetronome();\n        startMetronome();\n      }\n    }\n    tapBtn.style.background = '#0f3460';\n    tapBtn.style.color = '#fff';\n    setTimeout(function() {\n      tapBtn.style.background = '';\n      tapBtn.style.color = '';\n    }, 100);\n  });\n\n  // Time signature buttons\n  timesigGrid.querySelectorAll('.timesig-btn').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      timesigGrid.querySelectorAll('.timesig-btn').forEach(function(b){ b.classList.remove('selected'); });\n      this.classList.add('selected');\n      beatsPerMeasure = parseInt(this.getAttribute('data-beats'));\n      currentBeat = 0;\n      pendingFlashes = [];\n      renderBeatDots();\n      if (!isRunning) clearBeats();\n    });\n  });\n\n  // Volume\n  volSlider.addEventListener('input', function() {\n    volume = parseInt(this.value) / 100;\n    volPct.textContent = this.value + '%';\n  });\n\n  // BPM number click to type\n  bpmNumEl.style.cursor = 'pointer';\n  bpmNumEl.title = 'クリックしてBPMを直接入力';\n  bpmNumEl.addEventListener('click', function() {\n    var val = prompt('BPMを入力してください（40〜220）:', bpm);\n    if (val !== null) {\n      var n = parseInt(val);\n      if (!isNaN(n)) updateBPM(n);\n    }\n  });\n\n  // --- Init ---\n  renderBeatDots();\n  updateBPM(120);\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003eノイズ生成 → \u003ca href=\"https://productivity-works.com/ja/tools/noise-generator/\"\u003eノイズ生成ツール\u003c/a\u003e\n\u003c/p\u003e","title":"オンラインメトロノーム - 無料BPMタイマー"},{"content":" HTMLやCSS、画像など各アセットのサイズを入力し、接続速度を選ぶだけで読み込み時間の推定値・パフォーマンススコア・改善アドバイスを即座に確認できます。最適化前後の比較機能も搭載しています。 ページアセットのサイズ入力 HTML（KB） CSS（KB） JavaScript（KB） 画像（KB） フォント（KB） その他（KB） 接続速度 3G 低速（3 Mbps） 3G 高速 / 4G（10 Mbps） Wi-Fi（50 Mbps） 光回線（200 Mbps） 分析する リセット ページ合計サイズ — 推定読み込み時間 — 最大アセット — — 最適化アドバイス 最適化前後の比較 最適化後の想定サイズを入力すると、読み込み時間がどれだけ改善するかを可視化できます。\n最適化後 HTML（KB） 最適化後 CSS（KB） 最適化後 JS（KB） 最適化後 画像（KB） 最適化後 フォント（KB） 最適化後 その他（KB） 比較する サイト運営を効率化 ページ表示速度の改善と同様に、事業管理の効率化も重要です。freee会計で事業管理を自動化して、本業に集中しましょう。 ","permalink":"https://productivity-works.com/ja/tools/page-size-analyzer/","summary":"\u003cdiv id=\"psa-app\"\u003e\n\u003cstyle\u003e\n#psa-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Yu Gothic\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#psa-app h2 {\n  font-size: 1.5rem;\n  margin: 1.5rem 0 0.75rem;\n  color: #16213e;\n  border-left: 4px solid #0f3460;\n  padding-left: 0.6rem;\n}\n#psa-app .psa-intro {\n  background: #eef2ff;\n  border-radius: 10px;\n  padding: 1rem 1.25rem;\n  margin-bottom: 1.5rem;\n  font-size: 0.95rem;\n  color: #3a3a5c;\n  line-height: 1.7;\n}\n#psa-app .psa-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n  margin-bottom: 1rem;\n}\n@media (max-width: 600px) {\n  #psa-app .psa-grid { grid-template-columns: 1fr; }\n}\n#psa-app .psa-field {\n  display: flex;\n  flex-direction: column;\n  gap: 0.3rem;\n}\n#psa-app label {\n  font-size: 0.85rem;\n  font-weight: 700;\n  color: #444;\n}\n#psa-app input[type=\"number\"],\n#psa-app select {\n  padding: 0.55rem 0.75rem;\n  border: 1.5px solid #c8d0e7;\n  border-radius: 7px;\n  font-size: 1rem;\n  background: #fff;\n  color: #1a1a2e;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#psa-app input[type=\"number\"]:focus,\n#psa-app select:focus {\n  border-color: #0f3460;\n}\n#psa-app .psa-speed-row {\n  display: flex;\n  gap: 1rem;\n  align-items: flex-end;\n  margin-bottom: 1rem;\n  flex-wrap: wrap;\n}\n#psa-app .psa-speed-row .psa-field {\n  flex: 1;\n  min-width: 180px;\n}\n#psa-app .psa-btn {\n  padding: 0.7rem 2rem;\n  background: #0f3460;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 1rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.2s, transform 0.1s;\n  white-space: nowrap;\n}\n#psa-app .psa-btn:hover { background: #16213e; }\n#psa-app .psa-btn:active { transform: scale(0.97); }\n#psa-app .psa-reset-btn {\n  padding: 0.7rem 1.2rem;\n  background: #e8eaf6;\n  color: #0f3460;\n  border: 1.5px solid #c8d0e7;\n  border-radius: 8px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n#psa-app .psa-reset-btn:hover { background: #dde0f5; }\n#psa-app .psa-results {\n  display: none;\n  margin-top: 1.5rem;\n  animation: psaFadeIn 0.35s ease;\n}\n@keyframes psaFadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }\n#psa-app .psa-summary-cards {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 1rem;\n  margin-bottom: 1.5rem;\n}\n@media (max-width: 600px) {\n  #psa-app .psa-summary-cards { grid-template-columns: 1fr 1fr; }\n}\n#psa-app .psa-card {\n  background: #fff;\n  border: 1.5px solid #e0e5f0;\n  border-radius: 10px;\n  padding: 1rem;\n  text-align: center;\n  box-shadow: 0 2px 8px rgba(15,52,96,0.06);\n}\n#psa-app .psa-card .psa-card-label {\n  font-size: 0.78rem;\n  color: #888;\n  font-weight: 700;\n  margin-bottom: 0.4rem;\n}\n#psa-app .psa-card .psa-card-value {\n  font-size: 1.7rem;\n  font-weight: 800;\n  color: #0f3460;\n  line-height: 1.1;\n}\n#psa-app .psa-card .psa-card-sub {\n  font-size: 0.8rem;\n  color: #aaa;\n  margin-top: 0.2rem;\n}\n#psa-app .psa-score-wrap {\n  display: flex;\n  align-items: center;\n  gap: 1.25rem;\n  background: #fff;\n  border: 1.5px solid #e0e5f0;\n  border-radius: 10px;\n  padding: 1.1rem 1.4rem;\n  margin-bottom: 1.5rem;\n  box-shadow: 0 2px 8px rgba(15,52,96,0.06);\n  flex-wrap: wrap;\n}\n#psa-app .psa-score-circle {\n  width: 90px;\n  height: 90px;\n  border-radius: 50%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n}\n#psa-app .psa-score-num {\n  font-size: 2.1rem;\n  font-weight: 900;\n  color: #fff;\n}\n#psa-app .psa-score-info { flex: 1; min-width: 160px; }\n#psa-app .psa-score-grade {\n  font-size: 1.2rem;\n  font-weight: 800;\n  margin-bottom: 0.25rem;\n}\n#psa-app .psa-score-desc {\n  font-size: 0.88rem;\n  color: #666;\n  line-height: 1.6;\n}\n#psa-app .psa-chart-wrap {\n  background: #fff;\n  border: 1.5px solid #e0e5f0;\n  border-radius: 10px;\n  padding: 1.2rem;\n  margin-bottom: 1.5rem;\n  box-shadow: 0 2px 8px rgba(15,52,96,0.06);\n}\n#psa-app canvas { display: block; max-width: 100%; }\n#psa-app .psa-recs {\n  background: #fff;\n  border: 1.5px solid #e0e5f0;\n  border-radius: 10px;\n  padding: 1.2rem 1.4rem;\n  margin-bottom: 1.5rem;\n  box-shadow: 0 2px 8px rgba(15,52,96,0.06);\n}\n#psa-app .psa-recs h3 {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #16213e;\n  margin: 0 0 0.75rem;\n}\n#psa-app .psa-rec-item {\n  display: flex;\n  align-items: flex-start;\n  gap: 0.6rem;\n  margin-bottom: 0.55rem;\n  font-size: 0.92rem;\n  color: #333;\n  line-height: 1.6;\n}\n#psa-app .psa-rec-icon {\n  font-size: 1rem;\n  flex-shrink: 0;\n  margin-top: 0.1rem;\n}\n#psa-app .psa-compare {\n  background: #f0f7ff;\n  border: 1.5px solid #b8d4f0;\n  border-radius: 10px;\n  padding: 1.2rem 1.4rem;\n  margin-bottom: 1.5rem;\n}\n#psa-app .psa-compare h3 {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #0f3460;\n  margin: 0 0 0.75rem;\n}\n#psa-app .psa-compare-note {\n  font-size: 0.85rem;\n  color: #555;\n  margin-bottom: 0.75rem;\n  line-height: 1.6;\n}\n#psa-app .psa-opt-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  gap: 0.75rem;\n  margin-bottom: 0.75rem;\n}\n@media (max-width: 600px) {\n  #psa-app .psa-opt-grid { grid-template-columns: 1fr; }\n}\n#psa-app .psa-opt-label {\n  font-size: 0.8rem;\n  font-weight: 700;\n  color: #444;\n  margin-bottom: 0.3rem;\n}\n#psa-app .psa-opt-input {\n  width: 100%;\n  box-sizing: border-box;\n}\n#psa-app .psa-compare-result {\n  display: none;\n  margin-top: 1rem;\n  padding-top: 1rem;\n  border-top: 1px solid #c8dff0;\n}\n#psa-app .psa-compare-bars {\n  display: flex;\n  flex-direction: column;\n  gap: 0.6rem;\n  margin-top: 0.5rem;\n}\n#psa-app .psa-bar-row {\n  display: flex;\n  align-items: center;\n  gap: 0.75rem;\n  font-size: 0.88rem;\n}\n#psa-app .psa-bar-lbl { width: 65px; font-weight: 700; color: #555; }\n#psa-app .psa-bar-track {\n  flex: 1;\n  height: 18px;\n  background: #dde8f5;\n  border-radius: 9px;\n  overflow: hidden;\n}\n#psa-app .psa-bar-fill {\n  height: 100%;\n  border-radius: 9px;\n  transition: width 0.7s ease;\n}\n#psa-app .psa-bar-val { width: 60px; text-align: right; color: #333; font-weight: 700; }\n#psa-app .psa-cta {\n  background: linear-gradient(135deg, #fff8e1 0%, #fff3cd 100%);\n  border: 1.5px solid #ffc107;\n  border-radius: 10px;\n  padding: 1.1rem 1.4rem;\n  margin-top: 1.5rem;\n  font-size: 0.93rem;\n  color: #333;\n  line-height: 1.7;\n}\n#psa-app .psa-cta strong {\n  display: block;\n  font-size: 1rem;\n  color: #0f3460;\n  margin-bottom: 0.4rem;\n}\n#psa-app .psa-cta a {\n  color: #0f3460;\n  font-weight: 700;\n}\n\u003c/style\u003e\n\u003cdiv class=\"psa-intro\"\u003e\n  HTMLやCSS、画像など各アセットのサイズを入力し、接続速度を選ぶだけで読み込み時間の推定値・パフォーマンススコア・改善アドバイスを即座に確認できます。最適化前後の比較機能も搭載しています。\n\u003c/div\u003e\n\u003ch2\u003eページアセットのサイズ入力\u003c/h2\u003e\n\u003cdiv class=\"psa-grid\"\u003e\n  \u003cdiv class=\"psa-field\"\u003e\n    \u003clabel for=\"psa-html\"\u003eHTML（KB）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"psa-html\" min=\"0\" step=\"0.1\" value=\"30\" placeholder=\"例: 30\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"psa-field\"\u003e\n    \u003clabel for=\"psa-css\"\u003eCSS（KB）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"psa-css\" min=\"0\" step=\"0.1\" value=\"80\" placeholder=\"例: 80\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"psa-field\"\u003e\n    \u003clabel for=\"psa-js\"\u003eJavaScript（KB）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"psa-js\" min=\"0\" step=\"0.1\" value=\"200\" placeholder=\"例: 200\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"psa-field\"\u003e\n    \u003clabel for=\"psa-img\"\u003e画像（KB）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"psa-img\" min=\"0\" step=\"1\" value=\"500\" placeholder=\"例: 500\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"psa-field\"\u003e\n    \u003clabel for=\"psa-font\"\u003eフォント（KB）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"psa-font\" min=\"0\" step=\"0.1\" value=\"60\" placeholder=\"例: 60\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"psa-field\"\u003e\n    \u003clabel for=\"psa-other\"\u003eその他（KB）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"psa-other\" min=\"0\" step=\"0.1\" value=\"20\" placeholder=\"例: 20\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"psa-speed-row\"\u003e\n  \u003cdiv class=\"psa-field\"\u003e\n    \u003clabel for=\"psa-speed\"\u003e接続速度\u003c/label\u003e\n    \u003cselect id=\"psa-speed\"\u003e\n      \u003coption value=\"0.375\"\u003e3G 低速（3 Mbps）\u003c/option\u003e\n      \u003coption value=\"1.25\" selected\u003e3G 高速 / 4G（10 Mbps）\u003c/option\u003e\n      \u003coption value=\"6.25\"\u003eWi-Fi（50 Mbps）\u003c/option\u003e\n      \u003coption value=\"25\"\u003e光回線（200 Mbps）\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"psa-btn\" onclick=\"psaAnalyze()\"\u003e分析する\u003c/button\u003e\n  \u003cbutton class=\"psa-reset-btn\" onclick=\"psaReset()\"\u003eリセット\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"psa-results\" id=\"psa-results\"\u003e\n  \u003cdiv class=\"psa-summary-cards\"\u003e\n    \u003cdiv class=\"psa-card\"\u003e\n      \u003cdiv class=\"psa-card-label\"\u003eページ合計サイズ\u003c/div\u003e\n      \u003cdiv class=\"psa-card-value\" id=\"psa-total-weight\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"psa-card-sub\" id=\"psa-weight-sub\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"psa-card\"\u003e\n      \u003cdiv class=\"psa-card-label\"\u003e推定読み込み時間\u003c/div\u003e\n      \u003cdiv class=\"psa-card-value\" id=\"psa-load-time\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"psa-card-sub\" id=\"psa-speed-label\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"psa-card\"\u003e\n      \u003cdiv class=\"psa-card-label\"\u003e最大アセット\u003c/div\u003e\n      \u003cdiv class=\"psa-card-value\" id=\"psa-largest\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"psa-card-sub\" id=\"psa-largest-type\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"psa-score-wrap\"\u003e\n    \u003cdiv class=\"psa-score-circle\" id=\"psa-score-circle\"\u003e\n      \u003cspan class=\"psa-score-num\" id=\"psa-score-num\"\u003e—\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"psa-score-info\"\u003e\n      \u003cdiv class=\"psa-score-grade\" id=\"psa-score-grade\"\u003e\u003c/div\u003e\n      \u003cdiv class=\"psa-score-desc\" id=\"psa-score-desc\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"psa-chart-wrap\"\u003e\n    \u003ccanvas id=\"psa-chart\" height=\"220\"\u003e\u003c/canvas\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"psa-recs\" id=\"psa-recs\"\u003e\n    \u003ch3\u003e最適化アドバイス\u003c/h3\u003e\n    \u003cdiv id=\"psa-recs-list\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"psa-compare\"\u003e\n    \u003ch3\u003e最適化前後の比較\u003c/h3\u003e\n    \u003cp class=\"psa-compare-note\"\u003e最適化後の想定サイズを入力すると、読み込み時間がどれだけ改善するかを可視化できます。\u003c/p\u003e","title":"ページサイズ分析ツール - 読み込み時間を推定"},{"content":"テキストを入力し、最大5つのカラーストップを設定して美しいグラデーション文字を生成。HTMLのインラインスパンタグまたはCSS background-clip グラデーションコードをコピーできます。\nテキスト入力 こんにちは！Hello World! プレビューサイズ: 36px \u0026lt;div class=\u0026quot;gt-panel\u0026quot; style=\u0026quot;margin-top:16px;\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;カラーストップ\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;gt-stops\u0026quot; id=\u0026quot;gt-stops-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;gt-add-stop\u0026quot; id=\u0026quot;gt-add-stop-btn\u0026quot;\u0026gt;＋ カラーストップを追加\u0026lt;/button\u0026gt; \u0026lt;div class=\u0026quot;gt-options\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;gt-option-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;gt-skip-spaces\u0026quot;\u0026gt; スペースをスキップ（空白に色を付けない） \u0026lt;/label\u0026gt; \u0026lt;label class=\u0026quot;gt-option-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;gt-bold\u0026quot; checked\u0026gt; 太字プレビュー \u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; リアルタイムプレビュー \u0026lt;div class=\u0026quot;gt-panel\u0026quot; style=\u0026quot;margin-top:16px;\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;出力コード\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;gt-tabs\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;gt-tab active\u0026quot; id=\u0026quot;gt-tab-html\u0026quot; onclick=\u0026quot;gtSwitchTab('html')\u0026quot;\u0026gt;HTML（インラインスパン）\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;gt-tab\u0026quot; id=\u0026quot;gt-tab-css\u0026quot; onclick=\u0026quot;gtSwitchTab('css')\u0026quot;\u0026gt;CSSグラデーション\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;gt-output\u0026quot;\u0026gt; \u0026lt;pre id=\u0026quot;gt-output-code\u0026quot;\u0026gt;\u0026lt;/pre\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;gt-btn-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;gt-btn gt-btn-primary\u0026quot; onclick=\u0026quot;gtCopy()\u0026quot;\u0026gt;コードをコピー\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;gt-btn gt-btn-ghost\u0026quot; onclick=\u0026quot;gtReset()\u0026quot;\u0026gt;リセット\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; コピーしました！ 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 配色生成 → 配色ジェネレーター カラー変換 → RGB⇔HEX変換 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/color-gradient-text/","summary":"\u003cp\u003eテキストを入力し、最大5つのカラーストップを設定して美しいグラデーション文字を生成。HTMLのインラインスパンタグまたはCSS \u003ccode\u003ebackground-clip\u003c/code\u003e グラデーションコードをコピーできます。\u003c/p\u003e\n\u003cdiv id=\"gt-app\"\u003e\n\u003cstyle\u003e\n/* ── Reset ──────────────────────────────────────────────────── */\n#gt-app *, #gt-app *::before, #gt-app *::after {\n  box-sizing: border-box; margin: 0; padding: 0;\n}\n#gt-app {\n  font-family: system-ui, -apple-system, sans-serif;\n  font-size: 14px;\n  color: #1a1a2e;\n  line-height: 1.5;\n}\n\n/* ── Layout ─────────────────────────────────────────────────── */\n#gt-app .gt-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n  margin-top: 20px;\n}\n@media (max-width: 740px) {\n  #gt-app .gt-grid { grid-template-columns: 1fr; }\n}\n\n/* ── Panel ──────────────────────────────────────────────────── */\n#gt-app .gt-panel {\n  background: #f8f9fc;\n  border: 1px solid #e2e6f0;\n  border-radius: 12px;\n  padding: 18px;\n}\n#gt-app .gt-panel h3 {\n  font-size: 12px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: .07em;\n  color: #6b7280;\n  margin-bottom: 14px;\n}\n\n/* ── Text input ─────────────────────────────────────────────── */\n#gt-app textarea {\n  width: 100%;\n  border: 1px solid #d1d5db;\n  border-radius: 8px;\n  padding: 10px 12px;\n  font-size: 15px;\n  font-family: inherit;\n  resize: vertical;\n  min-height: 80px;\n  outline: none;\n  transition: border-color .2s;\n}\n#gt-app textarea:focus { border-color: #6366f1; }\n\n/* ── Color stops ────────────────────────────────────────────── */\n#gt-app .gt-stops {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n#gt-app .gt-stop-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n#gt-app .gt-stop-row input[type=\"color\"] {\n  width: 38px;\n  height: 38px;\n  border: 2px solid #e2e6f0;\n  border-radius: 8px;\n  cursor: pointer;\n  padding: 2px;\n  background: #fff;\n}\n#gt-app .gt-stop-row input[type=\"text\"] {\n  width: 90px;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  padding: 6px 10px;\n  font-size: 13px;\n  font-family: monospace;\n  outline: none;\n  text-transform: uppercase;\n}\n#gt-app .gt-stop-row input[type=\"text\"]:focus { border-color: #6366f1; }\n#gt-app .gt-stop-row .gt-stop-label {\n  font-size: 12px;\n  color: #6b7280;\n  flex: 1;\n}\n#gt-app .gt-stop-row button.gt-rm {\n  background: none;\n  border: 1px solid #e5e7eb;\n  border-radius: 6px;\n  width: 28px; height: 28px;\n  cursor: pointer;\n  font-size: 15px;\n  color: #ef4444;\n  line-height: 1;\n  display: flex; align-items: center; justify-content: center;\n}\n#gt-app .gt-stop-row button.gt-rm:hover { background: #fef2f2; }\n#gt-app button.gt-add-stop {\n  margin-top: 6px;\n  background: none;\n  border: 1.5px dashed #6366f1;\n  border-radius: 8px;\n  padding: 7px 14px;\n  font-size: 13px;\n  color: #6366f1;\n  cursor: pointer;\n  width: 100%;\n  font-weight: 600;\n}\n#gt-app button.gt-add-stop:hover { background: #eef2ff; }\n#gt-app button.gt-add-stop:disabled { opacity: .4; cursor: not-allowed; }\n\n/* ── Options ────────────────────────────────────────────────── */\n#gt-app .gt-options {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  margin-top: 14px;\n}\n#gt-app .gt-option-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 13px;\n  color: #374151;\n  cursor: pointer;\n}\n#gt-app .gt-option-row input[type=\"checkbox\"] { accent-color: #6366f1; width: 15px; height: 15px; }\n\n/* ── Preview ────────────────────────────────────────────────── */\n#gt-app .gt-preview-box {\n  min-height: 90px;\n  background: #fff;\n  border: 1px solid #e2e6f0;\n  border-radius: 10px;\n  padding: 20px 16px;\n  font-size: 32px;\n  font-weight: 800;\n  letter-spacing: .01em;\n  word-break: break-all;\n  line-height: 1.3;\n  margin-bottom: 14px;\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n}\n\n/* ── Gradient bar ───────────────────────────────────────────── */\n#gt-app .gt-bar {\n  height: 10px;\n  border-radius: 5px;\n  margin-bottom: 16px;\n  border: 1px solid #e2e6f0;\n}\n\n/* ── Output ─────────────────────────────────────────────────── */\n#gt-app .gt-output {\n  margin-top: 4px;\n}\n#gt-app .gt-output pre {\n  background: #0f172a;\n  color: #e2e8f0;\n  border-radius: 8px;\n  padding: 14px;\n  font-size: 12px;\n  font-family: monospace;\n  overflow-x: auto;\n  white-space: pre-wrap;\n  word-break: break-all;\n  max-height: 180px;\n  line-height: 1.6;\n}\n#gt-app .gt-tabs {\n  display: flex;\n  gap: 6px;\n  margin-bottom: 10px;\n}\n#gt-app .gt-tab {\n  padding: 6px 14px;\n  border-radius: 6px;\n  border: 1.5px solid #d1d5db;\n  background: #fff;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  color: #374151;\n}\n#gt-app .gt-tab.active {\n  background: #6366f1;\n  color: #fff;\n  border-color: #6366f1;\n}\n\n/* ── Buttons ────────────────────────────────────────────────── */\n#gt-app .gt-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 8px 16px;\n  border-radius: 8px;\n  border: none;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background .15s, transform .1s;\n}\n#gt-app .gt-btn:active { transform: scale(.97); }\n#gt-app .gt-btn-primary {\n  background: #6366f1;\n  color: #fff;\n}\n#gt-app .gt-btn-primary:hover { background: #4f46e5; }\n#gt-app .gt-btn-ghost {\n  background: #f3f4f6;\n  color: #374151;\n}\n#gt-app .gt-btn-ghost:hover { background: #e5e7eb; }\n#gt-app .gt-btn-row {\n  display: flex;\n  gap: 8px;\n  margin-top: 10px;\n  flex-wrap: wrap;\n}\n\n/* ── Toast ──────────────────────────────────────────────────── */\n#gt-app .gt-toast {\n  display: none;\n  position: fixed;\n  bottom: 24px;\n  left: 50%;\n  transform: translateX(-50%);\n  background: #1e293b;\n  color: #f8fafc;\n  padding: 10px 22px;\n  border-radius: 8px;\n  font-size: 13px;\n  z-index: 9999;\n  pointer-events: none;\n}\n#gt-app .gt-toast.show { display: block; }\n\n/* ── Font size ──────────────────────────────────────────────── */\n#gt-app .gt-font-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 10px;\n  font-size: 13px;\n  color: #374151;\n}\n#gt-app .gt-font-row input[type=\"range\"] {\n  flex: 1;\n  accent-color: #6366f1;\n}\n\u003c/style\u003e\n\u003cdiv class=\"gt-grid\"\u003e\n  \u003c!-- LEFT: Controls --\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"gt-panel\"\u003e\n      \u003ch3\u003eテキスト入力\u003c/h3\u003e\n      \u003ctextarea id=\"gt-text\" rows=\"3\" placeholder=\"ここにテキストを入力...\"\u003eこんにちは！Hello World!\u003c/textarea\u003e\n      \u003cdiv class=\"gt-font-row\"\u003e\n        \u003cspan\u003eプレビューサイズ:\u003c/span\u003e\n        \u003cinput type=\"range\" id=\"gt-font-size\" min=\"16\" max=\"72\" value=\"36\"\u003e\n        \u003cspan id=\"gt-font-label\"\u003e36px\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div class=\u0026quot;gt-panel\u0026quot; style=\u0026quot;margin-top:16px;\u0026quot;\u0026gt;\n  \u0026lt;h3\u0026gt;カラーストップ\u0026lt;/h3\u0026gt;\n  \u0026lt;div class=\u0026quot;gt-stops\u0026quot; id=\u0026quot;gt-stops-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n  \u0026lt;button class=\u0026quot;gt-add-stop\u0026quot; id=\u0026quot;gt-add-stop-btn\u0026quot;\u0026gt;＋ カラーストップを追加\u0026lt;/button\u0026gt;\n  \u0026lt;div class=\u0026quot;gt-options\u0026quot;\u0026gt;\n    \u0026lt;label class=\u0026quot;gt-option-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;gt-skip-spaces\u0026quot;\u0026gt; スペースをスキップ（空白に色を付けない）\n    \u0026lt;/label\u0026gt;\n    \u0026lt;label class=\u0026quot;gt-option-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;gt-bold\u0026quot; checked\u0026gt; 太字プレビュー\n    \u0026lt;/label\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- RIGHT: Preview + Output --\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"gt-panel\"\u003e\n      \u003ch3\u003eリアルタイムプレビュー\u003c/h3\u003e\n      \u003cdiv class=\"gt-bar\" id=\"gt-gradient-bar\"\u003e\u003c/div\u003e\n      \u003cdiv class=\"gt-preview-box\" id=\"gt-preview\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div class=\u0026quot;gt-panel\u0026quot; style=\u0026quot;margin-top:16px;\u0026quot;\u0026gt;\n  \u0026lt;h3\u0026gt;出力コード\u0026lt;/h3\u0026gt;\n  \u0026lt;div class=\u0026quot;gt-tabs\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;gt-tab active\u0026quot; id=\u0026quot;gt-tab-html\u0026quot; onclick=\u0026quot;gtSwitchTab('html')\u0026quot;\u0026gt;HTML（インラインスパン）\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;gt-tab\u0026quot; id=\u0026quot;gt-tab-css\u0026quot; onclick=\u0026quot;gtSwitchTab('css')\u0026quot;\u0026gt;CSSグラデーション\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;gt-output\u0026quot;\u0026gt;\n    \u0026lt;pre id=\u0026quot;gt-output-code\u0026quot;\u0026gt;\u0026lt;/pre\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;gt-btn-row\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;gt-btn gt-btn-primary\u0026quot; onclick=\u0026quot;gtCopy()\u0026quot;\u0026gt;コードをコピー\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;gt-btn gt-btn-ghost\u0026quot; onclick=\u0026quot;gtReset()\u0026quot;\u0026gt;リセット\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"gt-toast\" id=\"gt-toast\"\u003eコピーしました！\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  /* ── State ───────────────────────────────────────────────── */\n  var gtStops = [\n    { color: '#6366f1' },\n    { color: '#ec4899' },\n  ];\n  var gtTab = 'html';\n\n  /* ── DOM refs ────────────────────────────────────────────── */\n  var elText     = document.getElementById('gt-text');\n  var elPreview  = document.getElementById('gt-preview');\n  var elBar      = document.getElementById('gt-gradient-bar');\n  var elCode     = document.getElementById('gt-output-code');\n  var elAddBtn   = document.getElementById('gt-add-stop-btn');\n  var elStopList = document.getElementById('gt-stops-list');\n  var elSkip     = document.getElementById('gt-skip-spaces');\n  var elBold     = document.getElementById('gt-bold');\n  var elFontSize = document.getElementById('gt-font-size');\n  var elFontLbl  = document.getElementById('gt-font-label');\n  var elToast    = document.getElementById('gt-toast');\n\n  /* ── Color helpers ───────────────────────────────────────── */\n  function hexToRgb(hex) {\n    hex = hex.replace(/^#/, '');\n    if (hex.length === 3) hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];\n    var n = parseInt(hex, 16);\n    return [(n \u003e\u003e 16) \u0026 255, (n \u003e\u003e 8) \u0026 255, n \u0026 255];\n  }\n\n  function rgbToHex(r, g, b) {\n    return '#' + [r, g, b].map(function (v) {\n      return Math.round(v).toString(16).padStart(2, '0');\n    }).join('');\n  }\n\n  function lerpColor(stops, t) {\n    if (stops.length === 1) return stops[0].color;\n    var seg = 1 / (stops.length - 1);\n    var i = Math.min(Math.floor(t / seg), stops.length - 2);\n    var lt = (t - i * seg) / seg;\n    var a = hexToRgb(stops[i].color);\n    var b = hexToRgb(stops[i + 1].color);\n    return rgbToHex(\n      a[0] + (b[0] - a[0]) * lt,\n      a[1] + (b[1] - a[1]) * lt,\n      a[2] + (b[2] - a[2]) * lt\n    );\n  }\n\n  /* ── Stop labels (JP) ────────────────────────────────────── */\n  function stopLabel(i, total) {\n    if (i === 0) return '開始色';\n    if (i === total - 1) return '終了色';\n    return 'ストップ ' + (i + 1);\n  }\n\n  /* ── Render stop list ────────────────────────────────────── */\n  function renderStops() {\n    elStopList.innerHTML = '';\n    gtStops.forEach(function (stop, i) {\n      var row = document.createElement('div');\n      row.className = 'gt-stop-row';\n\n      var picker = document.createElement('input');\n      picker.type = 'color';\n      picker.value = stop.color;\n      picker.addEventListener('input', function () {\n        gtStops[i].color = picker.value;\n        hexInput.value = picker.value.toUpperCase();\n        update();\n      });\n\n      var hexInput = document.createElement('input');\n      hexInput.type = 'text';\n      hexInput.maxLength = 7;\n      hexInput.value = stop.color.toUpperCase();\n      hexInput.addEventListener('input', function () {\n        var v = hexInput.value.trim();\n        if (/^#?[0-9a-fA-F]{6}$/.test(v)) {\n          var hex = v.startsWith('#') ? v : '#' + v;\n          gtStops[i].color = hex;\n          picker.value = hex;\n          update();\n        }\n      });\n\n      var label = document.createElement('span');\n      label.className = 'gt-stop-label';\n      label.textContent = stopLabel(i, gtStops.length);\n\n      row.appendChild(picker);\n      row.appendChild(hexInput);\n      row.appendChild(label);\n\n      if (gtStops.length \u003e 2) {\n        var rmBtn = document.createElement('button');\n        rmBtn.className = 'gt-rm';\n        rmBtn.textContent = '×';\n        rmBtn.title = '削除';\n        rmBtn.addEventListener('click', function () {\n          gtStops.splice(i, 1);\n          renderStops();\n          update();\n        });\n        row.appendChild(rmBtn);\n      }\n\n      elStopList.appendChild(row);\n    });\n    elAddBtn.disabled = gtStops.length \u003e= 5;\n  }\n\n  elAddBtn.addEventListener('click', function () {\n    if (gtStops.length \u003c 5) {\n      gtStops.push({ color: '#facc15' });\n      renderStops();\n      update();\n    }\n  });\n\n  /* ── Update ──────────────────────────────────────────────── */\n  function update() {\n    var text = elText.value || '';\n    var skip = elSkip.checked;\n    var bold = elBold.checked;\n    var fs   = elFontSize.value + 'px';\n\n    var colors = gtStops.map(function (s) { return s.color; });\n    elBar.style.background = 'linear-gradient(90deg, ' + colors.join(', ') + ')';\n\n    var chars = text.split('');\n    var colorable = skip\n      ? chars.filter(function (c) { return c !== ' '; })\n      : chars;\n    var total = colorable.length;\n    var colorIdx = 0;\n\n    elPreview.innerHTML = '';\n    elPreview.style.fontSize = fs;\n    elPreview.style.fontWeight = bold ? '800' : '400';\n\n    chars.forEach(function (ch) {\n      var span = document.createElement('span');\n      if (skip \u0026\u0026 ch === ' ') {\n        span.textContent = '\\u00a0';\n      } else {\n        var t = total \u003c= 1 ? 0 : colorIdx / (total - 1);\n        var col = lerpColor(gtStops, t);\n        span.style.color = col;\n        span.textContent = ch;\n        colorIdx++;\n      }\n      elPreview.appendChild(span);\n    });\n\n    if (gtTab === 'html') {\n      renderHtmlOutput(chars, skip, bold);\n    } else {\n      renderCssOutput(colors);\n    }\n  }\n\n  function renderHtmlOutput(chars, skip, bold) {\n    var total = skip\n      ? chars.filter(function (c) { return c !== ' '; }).length\n      : chars.length;\n    var colorIdx = 0;\n    var parts = chars.map(function (ch) {\n      if (skip \u0026\u0026 ch === ' ') return ' ';\n      var t = total \u003c= 1 ? 0 : colorIdx / (total - 1);\n      var col = lerpColor(gtStops, t);\n      colorIdx++;\n      return '\u003cspan style=\"color:' + col + '\"\u003e' + escHtml(ch) + '\u003c/span\u003e';\n    });\n    var tag = bold ? 'b' : 'span';\n    elCode.textContent = '\u003c' + tag + '\u003e' + parts.join('') + '\u003c/' + tag + '\u003e';\n  }\n\n  function renderCssOutput(colors) {\n    var gradient = 'linear-gradient(90deg, ' + colors.join(', ') + ')';\n    elCode.textContent =\n      '.gradient-text {\\n' +\n      '  background: ' + gradient + ';\\n' +\n      '  -webkit-background-clip: text;\\n' +\n      '  -webkit-text-fill-color: transparent;\\n' +\n      '  background-clip: text;\\n' +\n      '  display: inline-block;\\n' +\n      '}';\n  }\n\n  function escHtml(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  window.gtSwitchTab = function (tab) {\n    gtTab = tab;\n    document.getElementById('gt-tab-html').classList.toggle('active', tab === 'html');\n    document.getElementById('gt-tab-css').classList.toggle('active', tab === 'css');\n    update();\n  };\n\n  window.gtCopy = function () {\n    var txt = elCode.textContent;\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(txt).then(showToast);\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = txt;\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      showToast();\n    }\n  };\n\n  function showToast() {\n    elToast.classList.add('show');\n    setTimeout(function () { elToast.classList.remove('show'); }, 1800);\n  }\n\n  window.gtReset = function () {\n    elText.value = 'こんにちは！Hello World!';\n    gtStops = [{ color: '#6366f1' }, { color: '#ec4899' }];\n    elSkip.checked = false;\n    elBold.checked = true;\n    elFontSize.value = 36;\n    elFontLbl.textContent = '36px';\n    renderStops();\n    update();\n  };\n\n  elText.addEventListener('input', update);\n  elSkip.addEventListener('change', update);\n  elBold.addEventListener('change', update);\n  elFontSize.addEventListener('input', function () {\n    elFontLbl.textContent = elFontSize.value + 'px';\n    update();\n  });\n\n  renderStops();\n  update();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"グラデーションテキスト生成 — 無料オンラインツール"},{"content":"Markdownドキュメントからクリック可能な目次（TOC）を自動生成します。Markdownを貼り付けて見出しレベルやリスト形式を設定するだけで、GitHub形式のアンカーリンク付き目次が完成します。そのままドキュメントの先頭にコピーして使えます。\n最小見出しレベル H1 H2 H3 H4 最大見出しレベル H2 H3 H4 H5 H6 リスト形式 箇条書き ( - ) 番号付き ( 1. ) インデント スペース2個 スペース4個 タブ \u0026nbsp; H1を太字にする \u0026nbsp; 「目次」ヘッダーを追加 \u0026#9654; 目次を生成 サンプルを読み込む クリア \u0026#128203; 目次をコピー Markdown入力 生成された目次 生成ボタンを押すと目次がここに表示されます... 0見出し数 0H1 0H2 0H3 0H4以上 0目次の行数 プレビュー フリーランス・個人事業主の確定申告をかんたんに freee会計なら請求書・帳簿・確定申告書類をまとめて管理。クラウドだからどこからでもアクセスできます。\nfreeeを無料で試す 使い方 Markdownを貼り付ける — 左側の入力エリアにMarkdownテキストを貼り付けます オプションを設定する — 見出しレベル、リスト形式、インデントを選択します 「目次を生成」をクリック — 全見出しが抽出され、目次が生成されます 目次をコピー — 生成された目次をコピーしてMarkdownドキュメントの先頭に貼り付けます アンカーリンクの仕組み このツールは GitHub形式のスラッグアルゴリズム でアンカーリンクを生成します。\nテキストを小文字に変換 スペースをハイフン - に変換 ハイフン以外の特殊文字を削除 重複する見出し には自動的に連番サフィックスを付与：#installation、#installation-1、#installation-2 この形式はGitHub、GitLab、Obsidian、VS Codeプレビュー、ほとんどのMarkdownレンダラーで動作します。\n関連ツール Markdownプレビュー — Markdownをリアルタイムにレンダリング Markdownリンクチェッカー — Markdown内のリンクを一括検証 ※本ページにはアフィリエイト広告が含まれます（A8.net）。\n","permalink":"https://productivity-works.com/ja/tools/markdown-toc-generator/","summary":"\u003cp\u003eMarkdownドキュメントからクリック可能な目次（TOC）を自動生成します。Markdownを貼り付けて見出しレベルやリスト形式を設定するだけで、GitHub形式のアンカーリンク付き目次が完成します。そのままドキュメントの先頭にコピーして使えます。\u003c/p\u003e\n\u003cdiv id=\"mt-app\"\u003e\n\u003cstyle\u003e\n  #mt-app {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n    color: #1a1a2e;\n    max-width: 900px;\n    margin: 0 auto;\n    padding: 0;\n  }\n  #mt-app * { box-sizing: border-box; }\n\n  #mt-app .mt-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 16px;\n    margin-bottom: 16px;\n  }\n  @media (max-width: 640px) {\n    #mt-app .mt-grid { grid-template-columns: 1fr; }\n  }\n\n  #mt-app .mt-panel {\n    background: #fff;\n    border: 1px solid #e2e8f0;\n    border-radius: 10px;\n    overflow: hidden;\n  }\n  #mt-app .mt-panel-header {\n    background: #f8fafc;\n    border-bottom: 1px solid #e2e8f0;\n    padding: 10px 14px;\n    font-size: 13px;\n    font-weight: 600;\n    color: #475569;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n  }\n  #mt-app textarea {\n    width: 100%;\n    border: none;\n    outline: none;\n    resize: vertical;\n    padding: 12px 14px;\n    font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n    font-size: 13px;\n    line-height: 1.6;\n    color: #1e293b;\n    background: #fff;\n    min-height: 260px;\n    display: block;\n  }\n  #mt-app .mt-output {\n    padding: 12px 14px;\n    font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n    font-size: 13px;\n    line-height: 1.6;\n    color: #1e293b;\n    min-height: 260px;\n    white-space: pre-wrap;\n    word-break: break-word;\n    background: #fff;\n  }\n  #mt-app .mt-output.placeholder {\n    color: #94a3b8;\n    font-style: italic;\n  }\n\n  #mt-app .mt-controls {\n    background: #fff;\n    border: 1px solid #e2e8f0;\n    border-radius: 10px;\n    padding: 14px 16px;\n    margin-bottom: 16px;\n    display: flex;\n    flex-wrap: wrap;\n    gap: 18px;\n    align-items: flex-end;\n  }\n  #mt-app .mt-control-group {\n    display: flex;\n    flex-direction: column;\n    gap: 5px;\n  }\n  #mt-app .mt-control-group label {\n    font-size: 12px;\n    font-weight: 600;\n    color: #64748b;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n  }\n  #mt-app select,\n  #mt-app input[type=\"checkbox\"] {\n    cursor: pointer;\n  }\n  #mt-app select {\n    padding: 6px 10px;\n    border: 1px solid #cbd5e1;\n    border-radius: 6px;\n    font-size: 13px;\n    color: #1e293b;\n    background: #f8fafc;\n    outline: none;\n    min-width: 90px;\n  }\n  #mt-app select:focus {\n    border-color: #6366f1;\n    box-shadow: 0 0 0 2px rgba(99,102,241,0.15);\n  }\n  #mt-app .mt-checkbox-row {\n    display: flex;\n    align-items: center;\n    gap: 7px;\n    font-size: 13px;\n    color: #334155;\n    padding-top: 4px;\n  }\n  #mt-app input[type=\"checkbox\"] {\n    width: 15px;\n    height: 15px;\n    accent-color: #6366f1;\n  }\n\n  #mt-app .mt-btn-row {\n    display: flex;\n    gap: 10px;\n    flex-wrap: wrap;\n    margin-bottom: 16px;\n  }\n  #mt-app .mt-btn {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 9px 18px;\n    border-radius: 7px;\n    font-size: 13px;\n    font-weight: 600;\n    cursor: pointer;\n    border: none;\n    transition: background 0.15s, transform 0.1s;\n  }\n  #mt-app .mt-btn:active { transform: scale(0.97); }\n  #mt-app .mt-btn-primary {\n    background: #6366f1;\n    color: #fff;\n  }\n  #mt-app .mt-btn-primary:hover { background: #4f46e5; }\n  #mt-app .mt-btn-secondary {\n    background: #f1f5f9;\n    color: #334155;\n    border: 1px solid #e2e8f0;\n  }\n  #mt-app .mt-btn-secondary:hover { background: #e2e8f0; }\n  #mt-app .mt-btn-copy {\n    background: #10b981;\n    color: #fff;\n  }\n  #mt-app .mt-btn-copy:hover { background: #059669; }\n  #mt-app .mt-btn-copy.copied { background: #475569; }\n\n  #mt-app .mt-stats {\n    font-size: 12px;\n    color: #64748b;\n    background: #f8fafc;\n    border: 1px solid #e2e8f0;\n    border-radius: 8px;\n    padding: 10px 14px;\n    margin-bottom: 16px;\n    display: flex;\n    gap: 20px;\n    flex-wrap: wrap;\n  }\n  #mt-app .mt-stat { display: flex; flex-direction: column; gap: 2px; }\n  #mt-app .mt-stat strong { font-size: 18px; color: #1e293b; font-weight: 700; }\n\n  #mt-app .mt-preview {\n    background: #fff;\n    border: 1px solid #e2e8f0;\n    border-radius: 10px;\n    overflow: hidden;\n    margin-bottom: 16px;\n  }\n  #mt-app .mt-preview-body {\n    padding: 14px 18px;\n    font-size: 14px;\n    line-height: 1.7;\n    color: #1e293b;\n  }\n  #mt-app .mt-preview-body ul,\n  #mt-app .mt-preview-body ol {\n    margin: 0;\n    padding-left: 20px;\n  }\n  #mt-app .mt-preview-body li { margin: 2px 0; }\n  #mt-app .mt-preview-body a {\n    color: #6366f1;\n    text-decoration: none;\n  }\n  #mt-app .mt-preview-body a:hover { text-decoration: underline; }\n\n  /* freee CTA */\n  #mt-app .mt-freee-cta {\n    background: linear-gradient(135deg, #00c4a7 0%, #00a88d 100%);\n    border-radius: 12px;\n    padding: 20px 24px;\n    margin-bottom: 16px;\n    color: #fff;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 16px;\n    flex-wrap: wrap;\n  }\n  #mt-app .mt-freee-cta .cta-text h3 {\n    margin: 0 0 4px;\n    font-size: 15px;\n    font-weight: 700;\n  }\n  #mt-app .mt-freee-cta .cta-text p {\n    margin: 0;\n    font-size: 13px;\n    opacity: 0.9;\n  }\n  #mt-app .mt-freee-cta .cta-btn {\n    background: #fff;\n    color: #00a88d;\n    font-weight: 700;\n    font-size: 13px;\n    padding: 10px 20px;\n    border-radius: 7px;\n    text-decoration: none;\n    white-space: nowrap;\n    transition: opacity 0.15s;\n    flex-shrink: 0;\n  }\n  #mt-app .mt-freee-cta .cta-btn:hover { opacity: 0.9; }\n\u003c/style\u003e\n\u003cdiv class=\"mt-controls\"\u003e\n  \u003cdiv class=\"mt-control-group\"\u003e\n    \u003clabel\u003e最小見出しレベル\u003c/label\u003e\n    \u003cselect id=\"mt-min-level\"\u003e\n      \u003coption value=\"1\"\u003eH1\u003c/option\u003e\n      \u003coption value=\"2\" selected\u003eH2\u003c/option\u003e\n      \u003coption value=\"3\"\u003eH3\u003c/option\u003e\n      \u003coption value=\"4\"\u003eH4\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mt-control-group\"\u003e\n    \u003clabel\u003e最大見出しレベル\u003c/label\u003e\n    \u003cselect id=\"mt-max-level\"\u003e\n      \u003coption value=\"2\"\u003eH2\u003c/option\u003e\n      \u003coption value=\"3\" selected\u003eH3\u003c/option\u003e\n      \u003coption value=\"4\"\u003eH4\u003c/option\u003e\n      \u003coption value=\"5\"\u003eH5\u003c/option\u003e\n      \u003coption value=\"6\"\u003eH6\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mt-control-group\"\u003e\n    \u003clabel\u003eリスト形式\u003c/label\u003e\n    \u003cselect id=\"mt-list-style\"\u003e\n      \u003coption value=\"bullet\" selected\u003e箇条書き ( - )\u003c/option\u003e\n      \u003coption value=\"numbered\"\u003e番号付き ( 1. )\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mt-control-group\"\u003e\n    \u003clabel\u003eインデント\u003c/label\u003e\n    \u003cselect id=\"mt-indent\"\u003e\n      \u003coption value=\"2\" selected\u003eスペース2個\u003c/option\u003e\n      \u003coption value=\"4\"\u003eスペース4個\u003c/option\u003e\n      \u003coption value=\"tab\"\u003eタブ\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mt-control-group\"\u003e\n    \u003clabel\u003e\u0026nbsp;\u003c/label\u003e\n    \u003cdiv class=\"mt-checkbox-row\"\u003e\n      \u003cinput type=\"checkbox\" id=\"mt-bold-h1\"\u003e\n      \u003cspan\u003eH1を太字にする\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mt-control-group\"\u003e\n    \u003clabel\u003e\u0026nbsp;\u003c/label\u003e\n    \u003cdiv class=\"mt-checkbox-row\"\u003e\n      \u003cinput type=\"checkbox\" id=\"mt-add-title\" checked\u003e\n      \u003cspan\u003e「目次」ヘッダーを追加\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mt-btn-row\"\u003e\n  \u003cbutton class=\"mt-btn mt-btn-primary\" onclick=\"mtGenerate()\"\u003e\u0026#9654; 目次を生成\u003c/button\u003e\n  \u003cbutton class=\"mt-btn mt-btn-secondary\" onclick=\"mtLoadSample()\"\u003eサンプルを読み込む\u003c/button\u003e\n  \u003cbutton class=\"mt-btn mt-btn-secondary\" onclick=\"mtClear()\"\u003eクリア\u003c/button\u003e\n  \u003cbutton class=\"mt-btn mt-btn-copy\" id=\"mt-copy-btn\" onclick=\"mtCopy()\"\u003e\u0026#128203; 目次をコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mt-grid\"\u003e\n  \u003cdiv class=\"mt-panel\"\u003e\n    \u003cdiv class=\"mt-panel-header\"\u003e\n      \u003cspan\u003eMarkdown入力\u003c/span\u003e\n      \u003cspan id=\"mt-line-count\" style=\"font-weight:400;color:#94a3b8;\"\u003e\u003c/span\u003e\n    \u003c/div\u003e\n    \u003ctextarea id=\"mt-input\" placeholder=\"ここにMarkdownを貼り付けてください...\u0026#10;\u0026#10;# はじめに\u0026#10;## セットアップ\u0026#10;### インストール\u0026#10;## 使い方\u0026#10;### 基本的な例\u0026#10;## APIリファレンス\" oninput=\"mtOnInput()\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mt-panel\"\u003e\n    \u003cdiv class=\"mt-panel-header\"\u003e\n      \u003cspan\u003e生成された目次\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"mt-output placeholder\" id=\"mt-output\"\u003e生成ボタンを押すと目次がここに表示されます...\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mt-stats\" id=\"mt-stats\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"mt-stat\"\u003e\u003cstrong id=\"stat-headings\"\u003e0\u003c/strong\u003e\u003cspan\u003e見出し数\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"mt-stat\"\u003e\u003cstrong id=\"stat-h1\"\u003e0\u003c/strong\u003e\u003cspan\u003eH1\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"mt-stat\"\u003e\u003cstrong id=\"stat-h2\"\u003e0\u003c/strong\u003e\u003cspan\u003eH2\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"mt-stat\"\u003e\u003cstrong id=\"stat-h3\"\u003e0\u003c/strong\u003e\u003cspan\u003eH3\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"mt-stat\"\u003e\u003cstrong id=\"stat-h4plus\"\u003e0\u003c/strong\u003e\u003cspan\u003eH4以上\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"mt-stat\"\u003e\u003cstrong id=\"stat-toc-lines\"\u003e0\u003c/strong\u003e\u003cspan\u003e目次の行数\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mt-preview\" id=\"mt-preview\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"mt-panel-header\" style=\"background:#f8fafc;border-bottom:1px solid #e2e8f0;padding:10px 14px;font-size:13px;font-weight:600;color:#475569;\"\u003e\n    プレビュー\n  \u003c/div\u003e\n  \u003cdiv class=\"mt-preview-body\" id=\"mt-preview-body\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mt-freee-cta\"\u003e\n  \u003cdiv class=\"cta-text\"\u003e\n    \u003ch3\u003eフリーランス・個人事業主の確定申告をかんたんに\u003c/h3\u003e\n    \u003cp\u003efreee会計なら請求書・帳簿・確定申告書類をまとめて管理。クラウドだからどこからでもアクセスできます。\u003c/p\u003e","title":"Markdown目次ジェネレーター"},{"content":" OGタグを入力してプレビュー og:title（タイトル） 0 / 60文字 \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-label\u0026quot;\u0026gt; \u0026lt;span\u0026gt;og:description（説明文）\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;og-counter\u0026quot; id=\u0026quot;og-desc-count\u0026quot;\u0026gt;0 / 155文字\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;textarea id=\u0026quot;og-desc\u0026quot; rows=\u0026quot;3\u0026quot; placeholder=\u0026quot;SNSシェア時に表示される説明文（推奨: 155文字以内）\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-label\u0026quot;\u0026gt;\u0026lt;span\u0026gt;og:url（ページURL）\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;og-url\u0026quot; placeholder=\u0026quot;https://example.com/my-page\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-col\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-label\u0026quot;\u0026gt;\u0026lt;span\u0026gt;og:image（画像URL）\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;og-image\u0026quot; placeholder=\u0026quot;https://example.com/og-image.png\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-dim-result\u0026quot; id=\u0026quot;og-dim-result\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-label\u0026quot;\u0026gt;\u0026lt;span\u0026gt;og:type（種別）\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;select id=\u0026quot;og-type\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;website\u0026quot;\u0026gt;website\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;article\u0026quot;\u0026gt;article\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;product\u0026quot;\u0026gt;product\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;profile\u0026quot;\u0026gt;profile\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;video.other\u0026quot;\u0026gt;video.other\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-label\u0026quot;\u0026gt;\u0026lt;span\u0026gt;twitter:card\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;select id=\u0026quot;og-twcard\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;summary_large_image\u0026quot;\u0026gt;summary_large_image（大画像）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;summary\u0026quot;\u0026gt;summary（小画像）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;app\u0026quot;\u0026gt;app\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;player\u0026quot;\u0026gt;player\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;og-label\u0026quot;\u0026gt;\u0026lt;span\u0026gt;twitter:site（任意）\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;og-twsite\u0026quot; placeholder=\u0026quot;@yourusername\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; プレビューを更新 リセット チェック結果 設定済みOGタグ一覧 プラットフォーム別プレビュー Twitter / X Facebook LinkedIn Discord 画像が未設定です example.com ページタイトル ここにページの説明が表示されます。 Twitter/Xは summary_large_image カードで1200\u0026times;630pxの画像を推奨。\n画像が未設定です example.com ページタイトル ここにページの説明が表示されます。 Facebookは1200\u0026times;630px推奨。最小サイズは200\u0026times;200px。\n画像が未設定です ページタイトル example.com LinkedInは1200\u0026times;627px推奨。カード表示ではタイトルのみ（説明文は非表示）。\nexample.com ページタイトル ここにページの説明が表示されます。 画像が未設定です Discordはog:imageとog:descriptionを読み込みます。埋め込みの最大幅は約400px。\nHTMLメタタグ HTMLをコピー 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール メタタグ生成 → メタタグ生成ツール プレースホルダー画像 → プレースホルダー画像生成 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/og-image-tester/","summary":"\u003cdiv id=\"og-app\"\u003e\n\u003cstyle\u003e\n#og-app *,\n#og-app *::before,\n#og-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n#og-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Hiragino Sans\", \"Yu Gothic UI\", sans-serif;\n  font-size: 14px;\n  color: #1e293b;\n  line-height: 1.5;\n}\n\n#og-app h2 {\n  font-size: 15px;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 12px;\n  padding-bottom: 6px;\n  border-bottom: 2px solid #e2e8f0;\n}\n\n#og-app h3 {\n  font-size: 13px;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 10px;\n}\n\n#og-app .og-card {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 18px 20px;\n  margin-bottom: 20px;\n}\n\n#og-app .og-field {\n  margin-bottom: 14px;\n}\n\n#og-app .og-label {\n  display: flex;\n  justify-content: space-between;\n  align-items: baseline;\n  font-size: 12px;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 5px;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n\n#og-app .og-counter {\n  font-size: 11px;\n  font-weight: 400;\n  color: #94a3b8;\n}\n\n#og-app .og-counter.warn { color: #f59e0b; }\n#og-app .og-counter.over { color: #ef4444; }\n\n#og-app input[type=\"text\"],\n#og-app input[type=\"url\"],\n#og-app select,\n#og-app textarea {\n  width: 100%;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  padding: 8px 10px;\n  font-size: 13px;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.15s;\n  font-family: inherit;\n}\n\n#og-app input[type=\"text\"]:focus,\n#og-app input[type=\"url\"]:focus,\n#og-app select:focus,\n#og-app textarea:focus {\n  border-color: #6366f1;\n  box-shadow: 0 0 0 3px rgba(99,102,241,0.08);\n}\n\n#og-app textarea { resize: vertical; min-height: 60px; }\n\n#og-app .og-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 9px 18px;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  border: none;\n  transition: background 0.15s, transform 0.1s;\n  font-family: inherit;\n}\n\n#og-app .og-btn:active { transform: scale(0.97); }\n\n#og-app .og-btn-primary {\n  background: #6366f1;\n  color: #fff;\n}\n#og-app .og-btn-primary:hover { background: #4f46e5; }\n\n#og-app .og-btn-secondary {\n  background: #e2e8f0;\n  color: #334155;\n}\n#og-app .og-btn-secondary:hover { background: #cbd5e1; }\n\n#og-app .og-btn-copy {\n  background: #0ea5e9;\n  color: #fff;\n  font-size: 12px;\n  padding: 6px 14px;\n}\n#og-app .og-btn-copy:hover { background: #0284c7; }\n#og-app .og-btn-copy.copied { background: #22c55e; }\n\n#og-app .og-row {\n  display: flex;\n  gap: 16px;\n  flex-wrap: wrap;\n}\n\n#og-app .og-col {\n  flex: 1;\n  min-width: 260px;\n}\n\n/* Tag grid */\n#og-app .og-tags-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\n  gap: 8px;\n  margin-bottom: 12px;\n}\n\n#og-app .og-tag-item {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 7px;\n  padding: 8px 10px;\n  font-size: 12px;\n}\n\n#og-app .og-tag-name {\n  font-weight: 600;\n  color: #6366f1;\n  font-family: monospace;\n  font-size: 11px;\n  margin-bottom: 2px;\n}\n\n#og-app .og-tag-value {\n  color: #334155;\n  word-break: break-all;\n}\n\n#og-app .og-tag-item.missing {\n  border-color: #fca5a5;\n  background: #fff5f5;\n}\n#og-app .og-tag-item.missing .og-tag-name { color: #ef4444; }\n#og-app .og-tag-item.missing .og-tag-value { color: #ef4444; font-style: italic; }\n\n/* Warnings */\n#og-app .og-warnings {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  margin-bottom: 14px;\n}\n\n#og-app .og-warning {\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n  padding: 8px 12px;\n  border-radius: 7px;\n  font-size: 12px;\n}\n\n#og-app .og-warning.warn { background: #fffbeb; border: 1px solid #fde68a; color: #92400e; }\n#og-app .og-warning.ok { background: #f0fdf4; border: 1px solid #bbf7d0; color: #166534; }\n#og-app .og-warning.err { background: #fef2f2; border: 1px solid #fecaca; color: #991b1b; }\n\n#og-app .og-warning-icon { font-size: 14px; flex-shrink: 0; margin-top: 1px; }\n\n/* Platform tabs */\n#og-app .og-tabs {\n  display: flex;\n  gap: 4px;\n  flex-wrap: wrap;\n  margin-bottom: 16px;\n}\n\n#og-app .og-tab {\n  padding: 7px 16px;\n  border-radius: 6px;\n  border: 1.5px solid #e2e8f0;\n  background: #fff;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  color: #64748b;\n  transition: all 0.15s;\n  font-family: inherit;\n}\n\n#og-app .og-tab:hover { border-color: #6366f1; color: #6366f1; }\n#og-app .og-tab.active { background: #6366f1; border-color: #6366f1; color: #fff; }\n\n/* Platform previews */\n#og-app .og-platform-preview { display: none; }\n#og-app .og-platform-preview.active { display: block; }\n\n/* ---- Twitter / X ---- */\n#og-app .og-twitter-wrap {\n  background: #000;\n  border-radius: 12px;\n  padding: 20px;\n  max-width: 500px;\n}\n\n#og-app .og-twitter-card {\n  border: 1px solid #2f3336;\n  border-radius: 12px;\n  overflow: hidden;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n  background: #000;\n  cursor: pointer;\n}\n\n#og-app .og-twitter-img-wrap {\n  width: 100%;\n  padding-bottom: 52.5%;\n  position: relative;\n  background: #2f3336;\n  overflow: hidden;\n}\n\n#og-app .og-twitter-img-wrap img {\n  position: absolute;\n  top: 0; left: 0;\n  width: 100%; height: 100%;\n  object-fit: cover;\n}\n\n#og-app .og-twitter-img-placeholder {\n  position: absolute;\n  top: 0; left: 0; right: 0; bottom: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #536471;\n  font-size: 13px;\n  flex-direction: column;\n  gap: 8px;\n}\n\n#og-app .og-twitter-img-placeholder svg { opacity: 0.4; }\n\n#og-app .og-twitter-meta {\n  padding: 10px 14px 12px;\n  background: #000;\n  border-top: 1px solid #2f3336;\n}\n\n#og-app .og-twitter-domain {\n  font-size: 13px;\n  color: #536471;\n  margin-bottom: 2px;\n}\n\n#og-app .og-twitter-title {\n  font-size: 15px;\n  font-weight: 700;\n  color: #e7e9ea;\n  line-height: 1.3;\n  margin-bottom: 2px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n#og-app .og-twitter-desc {\n  font-size: 13px;\n  color: #536471;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n\n/* ---- Facebook ---- */\n#og-app .og-fb-wrap {\n  background: #f0f2f5;\n  border-radius: 8px;\n  padding: 20px;\n  max-width: 500px;\n}\n\n#og-app .og-fb-card {\n  border: 1px solid #dddfe2;\n  border-radius: 8px;\n  overflow: hidden;\n  background: #fff;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n}\n\n#og-app .og-fb-img-wrap {\n  width: 100%;\n  padding-bottom: 52.5%;\n  position: relative;\n  background: #e4e6ea;\n  overflow: hidden;\n}\n\n#og-app .og-fb-img-wrap img {\n  position: absolute;\n  top: 0; left: 0;\n  width: 100%; height: 100%;\n  object-fit: cover;\n}\n\n#og-app .og-fb-img-placeholder {\n  position: absolute;\n  top: 0; left: 0; right: 0; bottom: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #bcc0c4;\n  font-size: 13px;\n  flex-direction: column;\n  gap: 8px;\n}\n\n#og-app .og-fb-meta {\n  padding: 10px 12px 12px;\n  border-top: 1px solid #dddfe2;\n  background: #f2f3f5;\n}\n\n#og-app .og-fb-domain {\n  font-size: 11px;\n  color: #606770;\n  text-transform: uppercase;\n  letter-spacing: 0.03em;\n  margin-bottom: 2px;\n}\n\n#og-app .og-fb-title {\n  font-size: 16px;\n  font-weight: 700;\n  color: #1c1e21;\n  line-height: 1.3;\n  margin-bottom: 3px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n#og-app .og-fb-desc {\n  font-size: 14px;\n  color: #606770;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n\n/* ---- LinkedIn ---- */\n#og-app .og-li-wrap {\n  background: #f3f2ef;\n  border-radius: 8px;\n  padding: 20px;\n  max-width: 500px;\n}\n\n#og-app .og-li-card {\n  border: 1px solid #e0dfdb;\n  border-radius: 2px;\n  overflow: hidden;\n  background: #fff;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n}\n\n#og-app .og-li-img-wrap {\n  width: 100%;\n  padding-bottom: 52.5%;\n  position: relative;\n  background: #e8e6e1;\n  overflow: hidden;\n}\n\n#og-app .og-li-img-wrap img {\n  position: absolute;\n  top: 0; left: 0;\n  width: 100%; height: 100%;\n  object-fit: cover;\n}\n\n#og-app .og-li-img-placeholder {\n  position: absolute;\n  top: 0; left: 0; right: 0; bottom: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #b0aba2;\n  font-size: 13px;\n  flex-direction: column;\n  gap: 8px;\n}\n\n#og-app .og-li-meta {\n  padding: 8px 12px 12px;\n  border-top: 1px solid #e0dfdb;\n  background: #eef3f8;\n}\n\n#og-app .og-li-title {\n  font-size: 14px;\n  font-weight: 600;\n  color: rgba(0,0,0,0.9);\n  line-height: 1.3;\n  margin-bottom: 3px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n#og-app .og-li-domain {\n  font-size: 12px;\n  color: rgba(0,0,0,0.6);\n}\n\n/* ---- Discord ---- */\n#og-app .og-dc-wrap {\n  background: #36393f;\n  border-radius: 8px;\n  padding: 20px;\n  max-width: 500px;\n}\n\n#og-app .og-dc-embed {\n  border-left: 4px solid #5865f2;\n  background: #2f3136;\n  border-radius: 4px;\n  padding: 12px 16px;\n  font-family: \"Whitney\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n\n#og-app .og-dc-site {\n  font-size: 12px;\n  font-weight: 600;\n  color: #fff;\n  margin-bottom: 4px;\n}\n\n#og-app .og-dc-title {\n  font-size: 15px;\n  font-weight: 600;\n  color: #00aff4;\n  margin-bottom: 4px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n#og-app .og-dc-desc {\n  font-size: 13px;\n  color: #dcddde;\n  margin-bottom: 12px;\n  display: -webkit-box;\n  -webkit-line-clamp: 3;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n  line-height: 1.4;\n}\n\n#og-app .og-dc-img {\n  width: 100%;\n  border-radius: 4px;\n  display: block;\n  max-height: 300px;\n  object-fit: cover;\n}\n\n#og-app .og-dc-img-placeholder {\n  width: 100%;\n  height: 180px;\n  background: #40444b;\n  border-radius: 4px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #72767d;\n  font-size: 13px;\n  flex-direction: column;\n  gap: 8px;\n}\n\n/* Image dimension checker */\n#og-app .og-dim-result {\n  margin-top: 10px;\n  padding: 10px 14px;\n  border-radius: 7px;\n  font-size: 12px;\n  display: none;\n}\n\n#og-app .og-dim-result.show { display: block; }\n#og-app .og-dim-result.ok { background: #f0fdf4; border: 1px solid #bbf7d0; color: #166534; }\n#og-app .og-dim-result.warn { background: #fffbeb; border: 1px solid #fde68a; color: #92400e; }\n#og-app .og-dim-result.err { background: #fef2f2; border: 1px solid #fecaca; color: #991b1b; }\n\n/* Output code */\n#og-app .og-code-block {\n  background: #0f172a;\n  border-radius: 8px;\n  padding: 14px 16px;\n  font-family: \"Fira Code\", \"Cascadia Code\", monospace;\n  font-size: 12px;\n  color: #94a3b8;\n  overflow-x: auto;\n  white-space: pre;\n  line-height: 1.6;\n  margin-bottom: 10px;\n}\n\n/* Responsive */\n@media (max-width: 600px) {\n  #og-app .og-row { flex-direction: column; }\n  #og-app .og-col { min-width: 0; }\n  #og-app .og-tabs { gap: 3px; }\n  #og-app .og-tab { padding: 6px 12px; font-size: 11px; }\n}\n\u003c/style\u003e\n\u003c!-- ===== 手動入力 ===== --\u003e\n\u003cdiv class=\"og-card\"\u003e\n  \u003ch2\u003eOGタグを入力してプレビュー\u003c/h2\u003e\n  \u003cdiv class=\"og-row\"\u003e\n    \u003cdiv class=\"og-col\"\u003e\n      \u003cdiv class=\"og-field\"\u003e\n        \u003cdiv class=\"og-label\"\u003e\n          \u003cspan\u003eog:title（タイトル）\u003c/span\u003e\n          \u003cspan class=\"og-counter\" id=\"og-title-count\"\u003e0 / 60文字\u003c/span\u003e\n        \u003c/div\u003e\n        \u003cinput type=\"text\" id=\"og-title\" placeholder=\"ページのタイトルを入力（推奨: 60文字以内）\" maxlength=\"200\"\u003e\n      \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e  \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;og-label\u0026quot;\u0026gt;\n      \u0026lt;span\u0026gt;og:description（説明文）\u0026lt;/span\u0026gt;\n      \u0026lt;span class=\u0026quot;og-counter\u0026quot; id=\u0026quot;og-desc-count\u0026quot;\u0026gt;0 / 155文字\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;textarea id=\u0026quot;og-desc\u0026quot; rows=\u0026quot;3\u0026quot; placeholder=\u0026quot;SNSシェア時に表示される説明文（推奨: 155文字以内）\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;og-label\u0026quot;\u0026gt;\u0026lt;span\u0026gt;og:url（ページURL）\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;og-url\u0026quot; placeholder=\u0026quot;https://example.com/my-page\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;og-col\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;og-label\u0026quot;\u0026gt;\u0026lt;span\u0026gt;og:image（画像URL）\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;og-image\u0026quot; placeholder=\u0026quot;https://example.com/og-image.png\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;og-dim-result\u0026quot; id=\u0026quot;og-dim-result\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;og-label\u0026quot;\u0026gt;\u0026lt;span\u0026gt;og:type（種別）\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;select id=\u0026quot;og-type\u0026quot;\u0026gt;\n      \u0026lt;option value=\u0026quot;website\u0026quot;\u0026gt;website\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;article\u0026quot;\u0026gt;article\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;product\u0026quot;\u0026gt;product\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;profile\u0026quot;\u0026gt;profile\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;video.other\u0026quot;\u0026gt;video.other\u0026lt;/option\u0026gt;\n    \u0026lt;/select\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;og-label\u0026quot;\u0026gt;\u0026lt;span\u0026gt;twitter:card\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;select id=\u0026quot;og-twcard\u0026quot;\u0026gt;\n      \u0026lt;option value=\u0026quot;summary_large_image\u0026quot;\u0026gt;summary_large_image（大画像）\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;summary\u0026quot;\u0026gt;summary（小画像）\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;app\u0026quot;\u0026gt;app\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;player\u0026quot;\u0026gt;player\u0026lt;/option\u0026gt;\n    \u0026lt;/select\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;og-field\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;og-label\u0026quot;\u0026gt;\u0026lt;span\u0026gt;twitter:site（任意）\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;og-twsite\u0026quot; placeholder=\u0026quot;@yourusername\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"display:flex;gap:10px;flex-wrap:wrap;margin-top:4px;\"\u003e\n    \u003cbutton class=\"og-btn og-btn-primary\" onclick=\"ogUpdate()\"\u003eプレビューを更新\u003c/button\u003e\n    \u003cbutton class=\"og-btn og-btn-secondary\" onclick=\"ogReset()\"\u003eリセット\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ===== 分析 ===== --\u003e\n\u003cdiv class=\"og-card\" id=\"og-analysis-card\" style=\"display:none;\"\u003e\n  \u003ch2\u003eチェック結果\u003c/h2\u003e\n  \u003cdiv class=\"og-warnings\" id=\"og-warnings\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ===== 検出タグ ===== --\u003e\n\u003cdiv class=\"og-card\" id=\"og-tags-card\" style=\"display:none;\"\u003e\n  \u003ch2\u003e設定済みOGタグ一覧\u003c/h2\u003e\n  \u003cdiv class=\"og-tags-grid\" id=\"og-tags-grid\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ===== プラットフォームプレビュー ===== --\u003e\n\u003cdiv class=\"og-card\" id=\"og-preview-card\" style=\"display:none;\"\u003e\n  \u003ch2\u003eプラットフォーム別プレビュー\u003c/h2\u003e\n  \u003cdiv class=\"og-tabs\"\u003e\n    \u003cbutton class=\"og-tab active\" onclick=\"ogTab(this,'twitter')\"\u003eTwitter / X\u003c/button\u003e\n    \u003cbutton class=\"og-tab\" onclick=\"ogTab(this,'facebook')\"\u003eFacebook\u003c/button\u003e\n    \u003cbutton class=\"og-tab\" onclick=\"ogTab(this,'linkedin')\"\u003eLinkedIn\u003c/button\u003e\n    \u003cbutton class=\"og-tab\" onclick=\"ogTab(this,'discord')\"\u003eDiscord\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- Twitter --\u003e\n  \u003cdiv class=\"og-platform-preview active\" id=\"prev-twitter\"\u003e\n    \u003cdiv class=\"og-twitter-wrap\"\u003e\n      \u003cdiv class=\"og-twitter-card\"\u003e\n        \u003cdiv class=\"og-twitter-img-wrap\" id=\"tw-img-wrap\"\u003e\n          \u003cdiv class=\"og-twitter-img-placeholder\" id=\"tw-img-ph\"\u003e\n            \u003csvg width=\"40\" height=\"40\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\u003e\u003crect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/\u003e\u003ccircle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/\u003e\u003cpath d=\"M21 15l-5-5L5 21\"/\u003e\u003c/svg\u003e\n            画像が未設定です\n          \u003c/div\u003e\n          \u003cimg id=\"tw-img\" src=\"\" alt=\"\" style=\"display:none;\"\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"og-twitter-meta\"\u003e\n          \u003cdiv class=\"og-twitter-domain\" id=\"tw-domain\"\u003eexample.com\u003c/div\u003e\n          \u003cdiv class=\"og-twitter-title\" id=\"tw-title\"\u003eページタイトル\u003c/div\u003e\n          \u003cdiv class=\"og-twitter-desc\" id=\"tw-desc\"\u003eここにページの説明が表示されます。\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cp style=\"font-size:11px;color:#94a3b8;margin-top:8px;\"\u003eTwitter/Xは \u003ccode\u003esummary_large_image\u003c/code\u003e カードで1200\u0026times;630pxの画像を推奨。\u003c/p\u003e","title":"OGP画像プレビューツール"},{"content":"OSSプロジェクトに最適なライセンスを選ぶ無料ツール。質問に答えるだけでおすすめライセンスを提案。主要ライセンスを一覧比較し、名前・年を入力してライセンス文書をそのままコピーできます。\n関連ツール: Gitコマンドジェネレーター — 変更履歴ジェネレーター ウィザード ライセンス一覧比較 ライセンス 種別 商用利用 改変 再配布 特許付与 私的利用 コピーレフト 著作権表示 ネットワーク配布 \u0026#10005; ライセンス選択の基礎知識 許容型（Permissive） — MIT・Apache 2.0・BSD系は制約が少なく、商用プロダクトへの組み込みも自由。採用実績が多く、広く使われることを優先したい場合の第一選択。Apache 2.0は特許付与を明示するため、企業プロジェクトに適する。\n強コピーレフト — GPL v2/v3は派生物を同じライセンスで公開させる義務が生じる。OSSへの改善の還元を重視するプロジェクトや、プロプライエタリな独占利用を防ぎたい場合に選択。\n弱コピーレフト — LGPL・MPL 2.0はライブラリや変更ファイル単位でコピーレフトを適用。プロプライエタリなソフトウェアからリンクして利用することを許容しつつ、ライブラリ本体の改善は還元させたい場合に適する。\nパブリックドメイン — UnlicenseやCC0は著作権を完全に放棄。条件なし・クレジット不要。ソフトウェア向けにはUnlicenseが、データ・コンテンツ向けにはCC0が推奨される。\n目的別クイックガイド 目的 推奨ライセンス 最大限の採用を促したい MIT 特許保護も含めたい Apache 2.0 派生物を必ずオープンにしたい GPL v3 ライブラリ、プロプライエタリなリンクも許可 LGPL または MPL 2.0 制限を一切設けたい Unlicense 関連ツール: Gitコマンドジェネレーター — 変更履歴ジェネレーター freeeで経理・請求書管理を効率化 PR / 広告 freee会計 — 個人事業主・スタートアップの定番クラウド会計 確定申告・請求書・経費精算をまとめて自動化。OSSプロジェクトの副業収入や受託開発の請求管理にも最適。30日間無料トライアル実施中。\nfreeeを無料で試す → 本ページにはアフィリエイト広告が含まれています。\nA8.net を通じた成果報酬型広告を利用しています。掲載内容は編集部が独自に選定しており、広告主からの依頼による誘導は行っていません。 ","permalink":"https://productivity-works.com/ja/tools/license-chooser/","summary":"\u003cp\u003eOSSプロジェクトに最適なライセンスを選ぶ無料ツール。質問に答えるだけでおすすめライセンスを提案。主要ライセンスを一覧比較し、名前・年を入力してライセンス文書をそのままコピーできます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e関連ツール:\u003c/strong\u003e \u003ca href=\"https://productivity-works.com/ja/tools/git-command-generator/\"\u003eGitコマンドジェネレーター\u003c/a\u003e\n — \u003ca href=\"https://productivity-works.com/ja/tools/changelog-generator/\"\u003e変更履歴ジェネレーター\u003c/a\u003e\n\u003c/p\u003e\n\u003cdiv id=\"ol-app\"\u003e\n\u003cstyle\u003e\n#ol-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", \"Segoe UI\", sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#ol-app * { box-sizing: border-box; }\n\n/* Tabs */\n#ol-app .ol-tabs {\n  display: flex;\n  gap: 4px;\n  margin-bottom: 24px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#ol-app .ol-tab-btn {\n  padding: 10px 22px;\n  border: none;\n  background: none;\n  cursor: pointer;\n  font-size: 15px;\n  font-weight: 700;\n  color: #64748b;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  transition: color 0.2s, border-color 0.2s;\n}\n#ol-app .ol-tab-btn.active {\n  color: #4f46e5;\n  border-bottom-color: #4f46e5;\n}\n#ol-app .ol-tab-btn:hover:not(.active) { color: #334155; }\n\n/* Panel */\n#ol-app .ol-panel { display: none; }\n#ol-app .ol-panel.active { display: block; }\n\n/* Wizard */\n#ol-app .ol-wizard-step {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 28px;\n  margin-bottom: 20px;\n}\n#ol-app .ol-wizard-step h3 { margin: 0 0 8px; font-size: 17px; color: #1e293b; }\n#ol-app .ol-wizard-step p { margin: 0 0 16px; color: #64748b; font-size: 14px; }\n#ol-app .ol-btn-group { display: flex; gap: 10px; flex-wrap: wrap; }\n#ol-app .ol-choice-btn {\n  padding: 10px 20px;\n  border: 2px solid #e2e8f0;\n  border-radius: 8px;\n  background: #fff;\n  cursor: pointer;\n  font-size: 14px;\n  font-weight: 500;\n  color: #334155;\n  transition: all 0.15s;\n}\n#ol-app .ol-choice-btn:hover { border-color: #4f46e5; color: #4f46e5; }\n#ol-app .ol-choice-btn.selected { border-color: #4f46e5; background: #eef2ff; color: #4f46e5; }\n\n#ol-app .ol-step-indicator { display: flex; align-items: center; gap: 8px; margin-bottom: 24px; }\n#ol-app .ol-step-dot {\n  width: 28px; height: 28px;\n  border-radius: 50%;\n  display: flex; align-items: center; justify-content: center;\n  font-size: 12px; font-weight: 700;\n  background: #e2e8f0; color: #64748b;\n  transition: all 0.2s;\n}\n#ol-app .ol-step-dot.done { background: #4f46e5; color: #fff; }\n#ol-app .ol-step-dot.current { background: #818cf8; color: #fff; }\n#ol-app .ol-step-line { flex: 1; height: 2px; background: #e2e8f0; }\n#ol-app .ol-step-line.done { background: #4f46e5; }\n\n#ol-app .ol-result-box {\n  border: 2px solid #4f46e5;\n  border-radius: 12px;\n  padding: 28px;\n  background: #eef2ff;\n  margin-top: 24px;\n}\n#ol-app .ol-result-box h3 { margin: 0 0 6px; color: #4f46e5; font-size: 20px; }\n#ol-app .ol-result-box .ol-tldr { font-size: 14px; color: #334155; margin-bottom: 16px; }\n#ol-app .ol-result-actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 16px; }\n#ol-app .ol-btn-primary {\n  padding: 10px 20px; background: #4f46e5; color: #fff;\n  border: none; border-radius: 8px;\n  cursor: pointer; font-size: 14px; font-weight: 700;\n  transition: background 0.2s;\n}\n#ol-app .ol-btn-primary:hover { background: #4338ca; }\n#ol-app .ol-btn-secondary {\n  padding: 10px 20px; background: #fff; color: #4f46e5;\n  border: 2px solid #4f46e5; border-radius: 8px;\n  cursor: pointer; font-size: 14px; font-weight: 700;\n  transition: all 0.2s;\n}\n#ol-app .ol-btn-secondary:hover { background: #eef2ff; }\n\n/* Comparison table */\n#ol-app .ol-table-wrap { overflow-x: auto; }\n#ol-app .ol-table { width: 100%; border-collapse: collapse; font-size: 13px; }\n#ol-app .ol-table th {\n  background: #1e293b; color: #fff;\n  padding: 10px 14px; text-align: left;\n  white-space: nowrap; position: sticky; top: 0;\n}\n#ol-app .ol-table td { padding: 9px 14px; border-bottom: 1px solid #e2e8f0; vertical-align: top; }\n#ol-app .ol-table tr:hover td { background: #f8fafc; }\n#ol-app .ol-table .ol-license-name {\n  font-weight: 700; color: #4f46e5; cursor: pointer; white-space: nowrap;\n}\n#ol-app .ol-table .ol-license-name:hover { text-decoration: underline; }\n#ol-app .ol-check { color: #16a34a; font-weight: 700; }\n#ol-app .ol-cross { color: #dc2626; font-weight: 700; }\n\n/* Badge */\n#ol-app .ol-badge {\n  display: inline-block; padding: 2px 10px; border-radius: 4px;\n  font-size: 11px; font-weight: 700; letter-spacing: 0.02em;\n}\n#ol-app .ol-badge-permissive { background: #dcfce7; color: #15803d; }\n#ol-app .ol-badge-copyleft   { background: #fee2e2; color: #b91c1c; }\n#ol-app .ol-badge-weak       { background: #fef3c7; color: #92400e; }\n#ol-app .ol-badge-public     { background: #e0e7ff; color: #3730a3; }\n\n/* Shield */\n#ol-app .ol-shields-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 12px; }\n#ol-app .ol-shield {\n  display: inline-flex; align-items: center;\n  border-radius: 4px; overflow: hidden;\n  font-size: 11px; font-weight: 600; height: 20px;\n}\n#ol-app .ol-shield-left { background: #555; color: #fff; padding: 0 6px; }\n#ol-app .ol-shield-right { padding: 0 8px; color: #fff; }\n\n/* Modal */\n#ol-app .ol-modal-backdrop {\n  display: none; position: fixed; inset: 0;\n  background: rgba(0,0,0,0.5);\n  z-index: 1000; align-items: center; justify-content: center;\n}\n#ol-app .ol-modal-backdrop.open { display: flex; }\n#ol-app .ol-modal {\n  background: #fff; border-radius: 14px;\n  max-width: 680px; width: 95vw; max-height: 85vh;\n  overflow-y: auto; padding: 32px; position: relative;\n  box-shadow: 0 20px 60px rgba(0,0,0,0.2);\n}\n#ol-app .ol-modal-close {\n  position: absolute; top: 16px; right: 16px;\n  background: #f1f5f9; border: none;\n  width: 32px; height: 32px; border-radius: 50%;\n  cursor: pointer; font-size: 18px; color: #64748b;\n  display: flex; align-items: center; justify-content: center;\n}\n#ol-app .ol-modal-close:hover { background: #e2e8f0; }\n#ol-app .ol-modal h2 { margin: 0 0 4px; font-size: 20px; color: #1e293b; }\n#ol-app .ol-modal .ol-modal-tldr { color: #64748b; font-size: 14px; margin-bottom: 20px; }\n#ol-app .ol-modal pre {\n  background: #0f172a; color: #e2e8f0;\n  padding: 20px; border-radius: 10px;\n  font-size: 12px; line-height: 1.6;\n  white-space: pre-wrap; word-break: break-word;\n  max-height: 280px; overflow-y: auto;\n}\n#ol-app .ol-copy-row { display: flex; gap: 8px; margin-bottom: 14px; flex-wrap: wrap; }\n#ol-app .ol-input-sm {\n  padding: 7px 10px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px; font-size: 13px; width: 160px;\n}\n#ol-app .ol-copy-btn {\n  padding: 7px 16px; background: #4f46e5; color: #fff;\n  border: none; border-radius: 6px;\n  cursor: pointer; font-size: 13px; font-weight: 700;\n  transition: background 0.2s;\n}\n#ol-app .ol-copy-btn:hover { background: #4338ca; }\n#ol-app .ol-copy-btn.copied { background: #16a34a; }\n#ol-app .ol-modal-section { margin-bottom: 18px; }\n#ol-app .ol-modal-section h4 { font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; color: #94a3b8; margin: 0 0 8px; }\n#ol-app .ol-pill-list { display: flex; flex-wrap: wrap; gap: 6px; }\n#ol-app .ol-pill { padding: 3px 10px; border-radius: 20px; font-size: 12px; font-weight: 500; }\n#ol-app .ol-pill-green { background: #dcfce7; color: #15803d; }\n#ol-app .ol-pill-red   { background: #fee2e2; color: #b91c1c; }\n#ol-app .ol-pill-blue  { background: #dbeafe; color: #1d4ed8; }\n\n#ol-app .ol-reset-btn {\n  padding: 8px 16px; border: 1px solid #e2e8f0;\n  border-radius: 8px; background: #fff; cursor: pointer;\n  font-size: 13px; color: #64748b; margin-top: 12px;\n}\n#ol-app .ol-reset-btn:hover { border-color: #94a3b8; color: #334155; }\n\u003c/style\u003e\n\u003cdiv class=\"ol-tabs\"\u003e\n  \u003cbutton class=\"ol-tab-btn active\" onclick=\"olSwitchTab('wizard')\"\u003eウィザード\u003c/button\u003e\n  \u003cbutton class=\"ol-tab-btn\" onclick=\"olSwitchTab('compare')\"\u003eライセンス一覧比較\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- WIZARD PANEL --\u003e\n\u003cdiv id=\"ol-panel-wizard\" class=\"ol-panel active\"\u003e\n  \u003cdiv class=\"ol-step-indicator\" id=\"ol-step-indicator\"\u003e\u003c/div\u003e\n  \u003cdiv id=\"ol-wizard-body\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- COMPARE PANEL --\u003e\n\u003cdiv id=\"ol-panel-compare\" class=\"ol-panel\"\u003e\n  \u003cdiv class=\"ol-table-wrap\"\u003e\n    \u003ctable class=\"ol-table\" id=\"ol-compare-table\"\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\n          \u003cth\u003eライセンス\u003c/th\u003e\n          \u003cth\u003e種別\u003c/th\u003e\n          \u003cth\u003e商用利用\u003c/th\u003e\n          \u003cth\u003e改変\u003c/th\u003e\n          \u003cth\u003e再配布\u003c/th\u003e\n          \u003cth\u003e特許付与\u003c/th\u003e\n          \u003cth\u003e私的利用\u003c/th\u003e\n          \u003cth\u003eコピーレフト\u003c/th\u003e\n          \u003cth\u003e著作権表示\u003c/th\u003e\n          \u003cth\u003eネットワーク配布\u003c/th\u003e\n        \u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody id=\"ol-compare-body\"\u003e\u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- MODAL --\u003e\n\u003cdiv class=\"ol-modal-backdrop\" id=\"ol-modal\" onclick=\"olCloseModal(event)\"\u003e\n  \u003cdiv class=\"ol-modal\" id=\"ol-modal-inner\"\u003e\n    \u003cbutton class=\"ol-modal-close\" onclick=\"olCloseModal(null, true)\"\u003e\u0026#10005;\u003c/button\u003e\n    \u003cdiv id=\"ol-modal-content\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n\"use strict\";\n\nvar LICENSES = [\n  {\n    id: \"mit\",\n    name: \"MIT\",\n    fullName: \"MIT License\",\n    type: \"permissive\",\n    badge: \"permissive\",\n    tldr: \"シンプルで制約が少ない。著作権表示とライセンス文書の同梱だけが条件。商用利用・改変・再配布すべて自由。最も広く使われている。\",\n    permissions: [\"商用利用\",\"改変\",\"再配布\",\"私的利用\"],\n    conditions: [\"著作権・ライセンス表示の保持\"],\n    limitations: [\"免責（無保証）\"],\n    commercial: true, modify: true, distribute: true, patent: false, private: true,\n    copyleft: false, attribution: true, networkUse: false,\n    color: \"#16a34a\",\n    template: `MIT License\n\nCopyright (c) {{YEAR}} {{NAME}}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.`\n  },\n  {\n    id: \"apache2\",\n    name: \"Apache 2.0\",\n    fullName: \"Apache License 2.0\",\n    type: \"permissive\",\n    badge: \"permissive\",\n    tldr: \"MITに特許権の明示的付与と変更箇所の明記義務を加えた許容型。企業プロジェクトに広く採用されている。\",\n    permissions: [\"商用利用\",\"改変\",\"再配布\",\"特許付与\",\"私的利用\"],\n    conditions: [\"著作権・ライセンス表示\",\"変更箇所の明記\",\"NOTICEファイルの保持\"],\n    limitations: [\"免責\",\"商標利用禁止\"],\n    commercial: true, modify: true, distribute: true, patent: true, private: true,\n    copyleft: false, attribution: true, networkUse: false,\n    color: \"#2563eb\",\n    template: `Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nCopyright (c) {{YEAR}} {{NAME}}\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.`\n  },\n  {\n    id: \"gplv3\",\n    name: \"GPL v3\",\n    fullName: \"GNU General Public License v3.0\",\n    type: \"copyleft\",\n    badge: \"copyleft\",\n    tldr: \"強いコピーレフト。派生物は同じライセンスで公開必須。特許保護条項・Tivoization対策あり。OSSコミュニティへの還元を重視する場合に適する。\",\n    permissions: [\"商用利用\",\"改変\",\"再配布\",\"特許付与\",\"私的利用\"],\n    conditions: [\"ソース開示\",\"著作権・ライセンス表示\",\"同一ライセンス\",\"変更箇所の明記\"],\n    limitations: [\"免責\"],\n    commercial: true, modify: true, distribute: true, patent: true, private: true,\n    copyleft: true, attribution: true, networkUse: false,\n    color: \"#dc2626\",\n    template: `GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright (C) {{YEAR}} {{NAME}}\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see \u003chttps://www.gnu.org/licenses/\u003e.`\n  },\n  {\n    id: \"gplv2\",\n    name: \"GPL v2\",\n    fullName: \"GNU General Public License v2.0\",\n    type: \"copyleft\",\n    badge: \"copyleft\",\n    tldr: \"古典的な強コピーレフト。Linuxカーネルが採用。特許付与の明示はなし。GPL v3との互換性問題に注意。\",\n    permissions: [\"商用利用\",\"改変\",\"再配布\",\"私的利用\"],\n    conditions: [\"ソース開示\",\"著作権・ライセンス表示\",\"同一ライセンス\",\"変更箇所の明記\"],\n    limitations: [\"免責\"],\n    commercial: true, modify: true, distribute: true, patent: false, private: true,\n    copyleft: true, attribution: true, networkUse: false,\n    color: \"#b91c1c\",\n    template: `GNU GENERAL PUBLIC LICENSE\nVersion 2, June 1991\n\nCopyright (C) {{YEAR}} {{NAME}}\n\nEveryone is permitted to copy and distribute verbatim copies\nof this license document, but changing it is not allowed.\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.`\n  },\n  {\n    id: \"lgpl\",\n    name: \"LGPL v2.1\",\n    fullName: \"GNU Lesser General Public License v2.1\",\n    type: \"weak-copyleft\",\n    badge: \"weak\",\n    tldr: \"ライブラリ向け弱コピーレフト。ライブラリ本体の改変はオープンにする必要があるが、プロプライエタリなソフトウェアからリンクして使用可能。\",\n    permissions: [\"商用利用\",\"改変\",\"再配布\",\"私的利用\"],\n    conditions: [\"ソース開示（ライブラリ改変分のみ）\",\"著作権・ライセンス表示\",\"同一ライセンス（ライブラリ改変分のみ）\"],\n    limitations: [\"免責\"],\n    commercial: true, modify: true, distribute: true, patent: false, private: true,\n    copyleft: true, attribution: true, networkUse: false,\n    color: \"#d97706\",\n    template: `GNU LESSER GENERAL PUBLIC LICENSE\nVersion 2.1, February 1999\n\nCopyright (C) {{YEAR}} {{NAME}}\n\nThis library is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Lesser General Public\nLicense as published by the Free Software Foundation; either\nversion 2.1 of the License, or (at your option) any later version.\n\nThis library is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nLesser General Public License for more details.`\n  },\n  {\n    id: \"bsd2\",\n    name: \"BSD 2-Clause\",\n    fullName: 'BSD 2-Clause \"Simplified\" License',\n    type: \"permissive\",\n    badge: \"permissive\",\n    tldr: \"シンプルな2条件のみ：ソース配布時とバイナリ配布時の著作権表示。MITとほぼ同等の自由度。\",\n    permissions: [\"商用利用\",\"改変\",\"再配布\",\"私的利用\"],\n    conditions: [\"著作権・ライセンス表示\"],\n    limitations: [\"免責\"],\n    commercial: true, modify: true, distribute: true, patent: false, private: true,\n    copyleft: false, attribution: true, networkUse: false,\n    color: \"#059669\",\n    template: `BSD 2-Clause License\n\nCopyright (c) {{YEAR}}, {{NAME}}\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice,\n   this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED.`\n  },\n  {\n    id: \"bsd3\",\n    name: \"BSD 3-Clause\",\n    fullName: 'BSD 3-Clause \"New\" or \"Revised\" License',\n    type: \"permissive\",\n    badge: \"permissive\",\n    tldr: \"BSD 2-Clauseに「プロジェクト名・貢献者名を宣伝に使用禁止」の条件を追加。Google・Apple・FreeBSD等が採用。\",\n    permissions: [\"商用利用\",\"改変\",\"再配布\",\"私的利用\"],\n    conditions: [\"著作権・ライセンス表示\",\"名称使用禁止（宣伝目的）\"],\n    limitations: [\"免責\"],\n    commercial: true, modify: true, distribute: true, patent: false, private: true,\n    copyleft: false, attribution: true, networkUse: false,\n    color: \"#0891b2\",\n    template: `BSD 3-Clause License\n\nCopyright (c) {{YEAR}}, {{NAME}}\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice,\n   this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its contributors\n   may be used to endorse or promote products derived from this software\n   without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES ARE DISCLAIMED.`\n  },\n  {\n    id: \"mpl2\",\n    name: \"MPL 2.0\",\n    fullName: \"Mozilla Public License 2.0\",\n    type: \"weak-copyleft\",\n    badge: \"weak\",\n    tldr: \"ファイル単位の弱コピーレフト。変更したファイルはオープンにする必要があるが、プロプライエタリなコードと組み合わせ可能。MozillaやFirefoxが採用。\",\n    permissions: [\"商用利用\",\"改変\",\"再配布\",\"特許付与\",\"私的利用\"],\n    conditions: [\"ソース開示（変更ファイルのみ）\",\"著作権・ライセンス表示\",\"同一ライセンス（変更ファイルのみ）\"],\n    limitations: [\"免責\",\"商標利用禁止\"],\n    commercial: true, modify: true, distribute: true, patent: true, private: true,\n    copyleft: true, attribution: true, networkUse: false,\n    color: \"#7c3aed\",\n    template: `Mozilla Public License Version 2.0\n\nCopyright (c) {{YEAR}} {{NAME}}\n\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at https://mozilla.org/MPL/2.0/.`\n  },\n  {\n    id: \"unlicense\",\n    name: \"Unlicense\",\n    fullName: \"The Unlicense\",\n    type: \"public-domain\",\n    badge: \"public\",\n    tldr: \"パブリックドメイン宣言。著作権を完全に放棄。クレジット不要・条件なし。最大限の自由。\",\n    permissions: [\"商用利用\",\"改変\",\"再配布\",\"私的利用\"],\n    conditions: [],\n    limitations: [\"免責\"],\n    commercial: true, modify: true, distribute: true, patent: false, private: true,\n    copyleft: false, attribution: false, networkUse: false,\n    color: \"#6b7280\",\n    template: `This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or\ndistribute this software, either in source code form or as a compiled\nbinary, for any purpose, commercial or non-commercial, and by any means.\n\nIn jurisdictions that recognize copyright laws, the author or authors\nof this software dedicate any and all copyright interest in the software\nto the public domain.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n\nFor more information, please refer to \u003chttps://unlicense.org\u003e`\n  },\n  {\n    id: \"cc0\",\n    name: \"CC0 1.0\",\n    fullName: \"Creative Commons Zero v1.0 Universal\",\n    type: \"public-domain\",\n    badge: \"public\",\n    tldr: \"Creative Commonsのパブリックドメイン宣言。データ・コンテンツ向けに推奨。ソフトウェアには特許付与がなくUnlicenseの方が適切な場合も。\",\n    permissions: [\"商用利用\",\"改変\",\"再配布\",\"私的利用\"],\n    conditions: [],\n    limitations: [\"免責\",\"特許付与なし\",\"商標利用禁止\"],\n    commercial: true, modify: true, distribute: true, patent: false, private: true,\n    copyleft: false, attribution: false, networkUse: false,\n    color: \"#4b5563\",\n    template: `CC0 1.0 Universal\n\nStatement of Purpose\n\nTo the extent possible under law, {{NAME}} has waived all copyright and\nrelated or neighboring rights to this work. This work is published from\nJapan, {{YEAR}}.\n\nYou should have received a copy of the CC0 legalcode along with this work.\nIf not, see \u003chttps://creativecommons.org/publicdomain/zero/1.0/\u003e.`\n  }\n];\n\nvar QUESTIONS = [\n  {\n    id: \"commercial\",\n    q: \"商用利用を許可しますか？\",\n    hint: \"企業が製品に組み込んだり販売したりすることを許可するか。\",\n    options: [\n      { label: \"はい、商用利用を許可する\", value: true },\n      { label: \"いいえ、商用利用を制限したい\", value: false }\n    ]\n  },\n  {\n    id: \"patent\",\n    q: \"特許権を明示的に付与しますか？\",\n    hint: \"コントリビューターの特許をユーザーが侵害しないよう保護する条項。\",\n    options: [\n      { label: \"はい、特許付与を含める（推奨）\", value: true },\n      { label: \"明示的な特許付与は不要\", value: false }\n    ]\n  },\n  {\n    id: \"copyleft\",\n    q: \"コピーレフト（シェアアライク）を採用しますか？\",\n    hint: \"派生物に同じライセンスを適用させるかどうか。\",\n    options: [\n      { label: \"不要 — 許容型にしたい\", value: \"none\" },\n      { label: \"弱コピーレフト（ファイル・ライブラリ単位）\", value: \"weak\" },\n      { label: \"強コピーレフト（すべての派生物）\", value: \"strong\" }\n    ]\n  },\n  {\n    id: \"attribution\",\n    q: \"著作権表示（クレジット）の保持を要求しますか？\",\n    hint: \"多くの許容型ライセンスでも著作権表示の保持は必要。\",\n    options: [\n      { label: \"はい、著作権表示を保持させる\", value: true },\n      { label: \"一切の制限なし（パブリックドメイン）\", value: false }\n    ]\n  }\n];\n\nvar answers = {};\nvar currentStep = 0;\n\nfunction olSwitchTab(tab) {\n  document.querySelectorAll('#ol-app .ol-tab-btn').forEach(function(b) { b.classList.remove('active'); });\n  document.querySelectorAll('#ol-app .ol-panel').forEach(function(p) { p.classList.remove('active'); });\n  var btn = document.querySelector('#ol-app .ol-tab-btn[onclick*=\"' + tab + '\"]');\n  if (btn) btn.classList.add('active');\n  var panel = document.getElementById('ol-panel-' + tab);\n  if (panel) panel.classList.add('active');\n}\nwindow.olSwitchTab = olSwitchTab;\n\nfunction renderWizard() {\n  renderStepIndicator();\n  var body = document.getElementById('ol-wizard-body');\n  if (currentStep \u003c QUESTIONS.length) {\n    var q = QUESTIONS[currentStep];\n    var html = '\u003cdiv class=\"ol-wizard-step\"\u003e\u003ch3\u003e' + q.q + '\u003c/h3\u003e\u003cp\u003e' + q.hint + '\u003c/p\u003e","title":"オープンソースライセンス選択ツール"},{"content":"IPv4アドレスとCIDRプレフィックス（またはサブネットマスク）を入力するだけで、ネットワークアドレス・ブロードキャスト・ホスト範囲・ワイルドカードマスクなどをすぐに計算できます。\nIPv4 サブネット計算ツール IPアドレス サブネットマスク 計算する クリア CIDRプレフィックス長 /0 /32 /24 サブネットマスク ビット表示 計算結果 バイナリ表示 ネットワーク部 = 緑 \u0026nbsp; ホスト部 = 赤 サブネット一覧リファレンス CIDRサブネットマスク利用可能ホスト数ワイルドカード ネットワーク管理の経費もかんたんに\nfreee会計なら、サーバー・ネットワーク費用の経費精算もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → IPアドレスを確認 → IPアドレス情報ツール バイトを変換 → バイト変換ツール DNSレコード → DNSレコードガイド 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/ip-subnet-calculator/","summary":"\u003cp\u003eIPv4アドレスとCIDRプレフィックス（またはサブネットマスク）を入力するだけで、ネットワークアドレス・ブロードキャスト・ホスト範囲・ワイルドカードマスクなどをすぐに計算できます。\u003c/p\u003e\n\u003cdiv id=\"ip-app\"\u003e\n\u003cstyle\u003e\n#ip-app *,#ip-app *::before,#ip-app *::after{box-sizing:border-box;margin:0;padding:0}\n#ip-app{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:15px;color:#1e293b;max-width:780px;margin:0 auto}\n#ip-app .ip-card{background:#fff;border:1.5px solid #e2e8f0;border-radius:12px;padding:24px;margin-bottom:20px}\n#ip-app .ip-title{font-size:17px;font-weight:700;color:#0f172a;margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid #e2e8f0}\n#ip-app .ip-row{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;margin-bottom:16px}\n#ip-app label{display:block;font-size:13px;font-weight:600;color:#475569;margin-bottom:5px}\n#ip-app input[type=text],#ip-app select{width:100%;padding:10px 13px;border:1.5px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#f8fafc;transition:border-color .2s}\n#ip-app input[type=text]:focus,#ip-app select:focus{outline:none;border-color:#3b82f6;background:#fff}\n#ip-app .ip-field{flex:1;min-width:160px}\n#ip-app .ip-field-sm{flex:0 0 160px}\n#ip-app input[type=range]{width:100%;accent-color:#3b82f6;cursor:pointer}\n#ip-app .ip-slider-row{display:flex;align-items:center;gap:12px;margin-bottom:14px}\n#ip-app .ip-slider-val{font-size:20px;font-weight:800;color:#3b82f6;min-width:40px;text-align:center}\n#ip-app .ip-btn{padding:10px 26px;background:#3b82f6;color:#fff;border:none;border-radius:8px;font-size:15px;font-weight:700;cursor:pointer;transition:background .15s;white-space:nowrap}\n#ip-app .ip-btn:hover{background:#2563eb}\n#ip-app .ip-btn-clear{background:#64748b}\n#ip-app .ip-btn-clear:hover{background:#475569}\n#ip-app .ip-error{color:#dc2626;font-size:13px;padding:8px 12px;background:#fef2f2;border:1px solid #fecaca;border-radius:6px;margin-top:-8px;margin-bottom:8px;display:none}\n#ip-app .ip-results{display:none}\n#ip-app .ip-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;margin-bottom:12px}\n#ip-app .ip-stat{background:#f8fafc;border:1px solid #e2e8f0;border-radius:9px;padding:13px 15px}\n#ip-app .ip-stat-label{font-size:12px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px}\n#ip-app .ip-stat-val{font-size:16px;font-weight:700;color:#0f172a;font-family:'Courier New',monospace;word-break:break-all}\n#ip-app .ip-stat-sub{font-size:12px;color:#94a3b8;margin-top:2px}\n#ip-app .ip-badge{display:inline-block;padding:2px 9px;border-radius:20px;font-size:12px;font-weight:700;margin-left:6px}\n#ip-app .ip-badge-a{background:#dbeafe;color:#1d4ed8}\n#ip-app .ip-badge-b{background:#ede9fe;color:#6d28d9}\n#ip-app .ip-badge-c{background:#dcfce7;color:#15803d}\n#ip-app .ip-badge-d{background:#fef9c3;color:#a16207}\n#ip-app .ip-badge-e{background:#fee2e2;color:#b91c1c}\n#ip-app .ip-badge-priv{background:#f0fdf4;color:#166534}\n#ip-app .ip-badge-pub{background:#eff6ff;color:#1e40af}\n#ip-app .ip-bin-box{background:#0f172a;border-radius:9px;padding:14px 16px;font-family:'Courier New',monospace;font-size:13px;line-height:1.9;overflow-x:auto;margin-bottom:12px}\n#ip-app .ip-bin-row{display:flex;gap:6px;align-items:center;white-space:nowrap}\n#ip-app .ip-bin-label{color:#94a3b8;min-width:120px;font-size:12px}\n#ip-app .ip-net-bit{color:#34d399}\n#ip-app .ip-host-bit{color:#f87171}\n#ip-app .ip-bin-sep{color:#475569;margin:0 1px}\n#ip-app .ip-mask-vis{display:flex;gap:3px;flex-wrap:wrap;margin-bottom:14px}\n#ip-app .ip-mask-bit{width:20px;height:20px;border-radius:3px;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700}\n#ip-app .ip-mask-1{background:#3b82f6;color:#fff}\n#ip-app .ip-mask-0{background:#e2e8f0;color:#94a3b8}\n#ip-app .ip-mask-grp{display:flex;gap:3px}\n#ip-app .ip-mask-sep{width:6px}\n#ip-app table{width:100%;border-collapse:collapse;font-size:13px}\n#ip-app th{background:#f1f5f9;color:#475569;font-weight:600;text-align:left;padding:8px 10px;border-bottom:1.5px solid #e2e8f0}\n#ip-app td{padding:7px 10px;border-bottom:1px solid #f1f5f9;font-family:'Courier New',monospace}\n#ip-app tr:last-child td{border-bottom:none}\n#ip-app tr.ip-hl td{background:#eff6ff;font-weight:700}\n#ip-app .ip-tbl-wrap{max-height:320px;overflow-y:auto;border:1px solid #e2e8f0;border-radius:8px}\n#ip-app .ip-section-label{font-size:13px;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.5px;margin-bottom:10px}\n@media(max-width:520px){\n  #ip-app .ip-bin-row{flex-direction:column;align-items:flex-start}\n  #ip-app .ip-stat-val{font-size:14px}\n}\n\u003c/style\u003e\n\u003cdiv class=\"ip-card\"\u003e\n  \u003cdiv class=\"ip-title\"\u003eIPv4 サブネット計算ツール\u003c/div\u003e\n  \u003cdiv class=\"ip-row\"\u003e\n    \u003cdiv class=\"ip-field\"\u003e\n      \u003clabel for=\"ip-addr\"\u003eIPアドレス\u003c/label\u003e\n      \u003cinput type=\"text\" id=\"ip-addr\" placeholder=\"例: 192.168.1.0\" maxlength=\"18\" autocomplete=\"off\" spellcheck=\"false\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ip-field-sm\"\u003e\n      \u003clabel for=\"ip-mask-sel\"\u003eサブネットマスク\u003c/label\u003e\n      \u003cselect id=\"ip-mask-sel\"\u003e\u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"display:flex;gap:8px;padding-bottom:1px\"\u003e\n      \u003cbutton class=\"ip-btn\" onclick=\"ipCalc()\"\u003e計算する\u003c/button\u003e\n      \u003cbutton class=\"ip-btn ip-btn-clear\" onclick=\"ipReset()\"\u003eクリア\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ip-section-label\"\u003eCIDRプレフィックス長\u003c/div\u003e\n  \u003cdiv class=\"ip-slider-row\"\u003e\n    \u003cspan style=\"font-size:12px;color:#94a3b8\"\u003e/0\u003c/span\u003e\n    \u003cinput type=\"range\" id=\"ip-cidr\" min=\"0\" max=\"32\" value=\"24\" oninput=\"ipSliderChange(this.value)\"\u003e\n    \u003cspan style=\"font-size:12px;color:#94a3b8\"\u003e/32\u003c/span\u003e\n    \u003cspan class=\"ip-slider-val\" id=\"ip-cidr-label\"\u003e/24\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ip-section-label\" style=\"margin-bottom:8px\"\u003eサブネットマスク ビット表示\u003c/div\u003e\n  \u003cdiv class=\"ip-mask-vis\" id=\"ip-mask-vis\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"ip-error\" id=\"ip-error\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ip-results\" id=\"ip-results\"\u003e\n  \u003cdiv class=\"ip-card\"\u003e\n    \u003cdiv class=\"ip-title\"\u003e\n      計算結果\n      \u003cspan id=\"ip-class-badge\"\u003e\u003c/span\u003e\n      \u003cspan id=\"ip-scope-badge\"\u003e\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ip-grid\" id=\"ip-grid\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ip-card\"\u003e\n    \u003cdiv class=\"ip-title\"\u003eバイナリ表示\u003c/div\u003e\n    \u003cdiv class=\"ip-section-label\"\u003eネットワーク部 = \u003cspan style=\"color:#34d399\"\u003e緑\u003c/span\u003e \u0026nbsp; ホスト部 = \u003cspan style=\"color:#f87171\"\u003e赤\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"ip-bin-box\" id=\"ip-bin-box\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ip-card\"\u003e\n    \u003cdiv class=\"ip-title\"\u003eサブネット一覧リファレンス\u003c/div\u003e\n    \u003cdiv class=\"ip-tbl-wrap\"\u003e\n      \u003ctable id=\"ip-tbl\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\u003cth\u003eCIDR\u003c/th\u003e\u003cth\u003eサブネットマスク\u003c/th\u003e\u003cth\u003e利用可能ホスト数\u003c/th\u003e\u003cth\u003eワイルドカード\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n        \u003ctbody id=\"ip-tbl-body\"\u003e\u003c/tbody\u003e\n      \u003c/table\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var MASKS=[\n    [0,'0.0.0.0'],[1,'128.0.0.0'],[2,'192.0.0.0'],[3,'224.0.0.0'],\n    [4,'240.0.0.0'],[5,'248.0.0.0'],[6,'252.0.0.0'],[7,'254.0.0.0'],\n    [8,'255.0.0.0'],[9,'255.128.0.0'],[10,'255.192.0.0'],[11,'255.224.0.0'],\n    [12,'255.240.0.0'],[13,'255.248.0.0'],[14,'255.252.0.0'],[15,'255.254.0.0'],\n    [16,'255.255.0.0'],[17,'255.255.128.0'],[18,'255.255.192.0'],[19,'255.255.224.0'],\n    [20,'255.255.240.0'],[21,'255.255.248.0'],[22,'255.255.252.0'],[23,'255.255.254.0'],\n    [24,'255.255.255.0'],[25,'255.255.255.128'],[26,'255.255.255.192'],[27,'255.255.255.224'],\n    [28,'255.255.255.240'],[29,'255.255.255.248'],[30,'255.255.255.252'],[31,'255.255.255.254'],\n    [32,'255.255.255.255']\n  ];\n\n  var sel=document.getElementById('ip-mask-sel');\n  MASKS.forEach(function(m){\n    var o=document.createElement('option');\n    o.value=m[0];\n    o.textContent='/'+m[0]+' — '+m[1];\n    if(m[0]===24)o.selected=true;\n    sel.appendChild(o);\n  });\n  sel.addEventListener('change',function(){\n    document.getElementById('ip-cidr').value=this.value;\n    ipSliderChange(this.value);\n  });\n\n  document.getElementById('ip-addr').addEventListener('keydown',function(e){\n    if(e.key==='Enter')ipCalc();\n  });\n\n  renderMaskVis(24);\n\n  window.ipSliderChange=function(v){\n    v=parseInt(v,10);\n    document.getElementById('ip-cidr-label').textContent='/'+v;\n    document.getElementById('ip-cidr').value=v;\n    sel.value=v;\n    renderMaskVis(v);\n  };\n\n  function renderMaskVis(prefix){\n    var el=document.getElementById('ip-mask-vis');\n    el.innerHTML='';\n    for(var g=0;g\u003c4;g++){\n      var grp=document.createElement('div');\n      grp.className='ip-mask-grp';\n      for(var b=0;b\u003c8;b++){\n        var bit=g*8+b;\n        var d=document.createElement('div');\n        d.className='ip-mask-bit '+(bit\u003cprefix?'ip-mask-1':'ip-mask-0');\n        d.textContent=bit\u003cprefix?'1':'0';\n        grp.appendChild(d);\n      }\n      el.appendChild(grp);\n      if(g\u003c3){var sep=document.createElement('div');sep.className='ip-mask-sep';el.appendChild(sep);}\n    }\n  }\n\n  function parseIP(s){\n    var p=s.trim().split('.');\n    if(p.length!==4)return null;\n    var n=[];\n    for(var i=0;i\u003c4;i++){\n      var x=parseInt(p[i],10);\n      if(isNaN(x)||x\u003c0||x\u003e255||p[i].trim()==='')return null;\n      n.push(x);\n    }\n    return n;\n  }\n\n  function ipToNum(oct){return((oct[0]\u003c\u003c24)|(oct[1]\u003c\u003c16)|(oct[2]\u003c\u003c8)|oct[3])\u003e\u003e\u003e0;}\n  function numToIP(n){return [n\u003e\u003e\u003e24,(n\u003e\u003e\u003e16)\u0026255,(n\u003e\u003e\u003e8)\u0026255,n\u0026255].join('.');}\n\n  function detectClass(oct){\n    var f=oct[0];\n    if(f\u003c128)return 'A';\n    if(f\u003c192)return 'B';\n    if(f\u003c224)return 'C';\n    if(f\u003c240)return 'D';\n    return 'E';\n  }\n\n  function isPrivate(oct){\n    var a=oct[0],b=oct[1];\n    if(a===10)return true;\n    if(a===172\u0026\u0026b\u003e=16\u0026\u0026b\u003c=31)return true;\n    if(a===192\u0026\u0026b===168)return true;\n    if(a===127)return true;\n    if(a===169\u0026\u0026b===254)return true;\n    return false;\n  }\n\n  function formatLarge(n){\n    if(n\u003e=1e9)return (n/1e9).toFixed(2).replace(/\\.?0+$/,'')+'B';\n    if(n\u003e=1e6)return (n/1e6).toFixed(2).replace(/\\.?0+$/,'')+'M';\n    if(n\u003e=1e3)return (n/1e3).toFixed(2).replace(/\\.?0+$/,'')+'K';\n    return n.toString();\n  }\n\n  window.ipCalc=function(){\n    var ipStr=document.getElementById('ip-addr').value.trim();\n    var prefix=parseInt(document.getElementById('ip-cidr').value,10);\n    var errEl=document.getElementById('ip-error');\n    var resEl=document.getElementById('ip-results');\n\n    errEl.style.display='none';\n    resEl.style.display='none';\n\n    if(!ipStr){showErr('IPアドレスを入力してください。');return;}\n    var oct=parseIP(ipStr);\n    if(!oct){showErr('無効なIPアドレスです。ドット区切りの10進数形式（例: 192.168.1.0）で入力してください。');return;}\n    if(isNaN(prefix)||prefix\u003c0||prefix\u003e32){showErr('CIDRプレフィックスは0〜32の範囲で指定してください。');return;}\n\n    var ipNum=ipToNum(oct);\n    var maskNum= prefix===0?0:(0xFFFFFFFF\u003c\u003c(32-prefix))\u003e\u003e\u003e0;\n    var wildNum=(~maskNum)\u003e\u003e\u003e0;\n    var netNum=(ipNum\u0026maskNum)\u003e\u003e\u003e0;\n    var bcastNum=(netNum|wildNum)\u003e\u003e\u003e0;\n    var firstHost=prefix\u003c31?(netNum+1)\u003e\u003e\u003e0:netNum;\n    var lastHost=prefix\u003c31?(bcastNum-1)\u003e\u003e\u003e0:bcastNum;\n    var hostCount=prefix\u003e=31?(prefix===32?1:2):Math.pow(2,32-prefix)-2;\n\n    var cls=detectClass(oct);\n    var priv=isPrivate(oct);\n\n    var clsBadgeMap={A:'ip-badge-a',B:'ip-badge-b',C:'ip-badge-c',D:'ip-badge-d',E:'ip-badge-e'};\n    document.getElementById('ip-class-badge').innerHTML='\u003cspan class=\"ip-badge '+clsBadgeMap[cls]+'\"\u003eクラス'+cls+'\u003c/span\u003e';\n    document.getElementById('ip-scope-badge').innerHTML='\u003cspan class=\"ip-badge '+(priv?'ip-badge-priv':'ip-badge-pub')+'\"\u003e'+(priv?'プライベート':'パブリック')+'\u003c/span\u003e';\n\n    var grid=document.getElementById('ip-grid');\n    var stats=[\n      {label:'IPアドレス',val:numToIP(ipNum),sub:'入力アドレス'},\n      {label:'ネットワークアドレス',val:numToIP(netNum),sub:'サブネットの先頭アドレス'},\n      {label:'ブロードキャストアドレス',val:numToIP(bcastNum),sub:'サブネットの末尾アドレス'},\n      {label:'サブネットマスク',val:numToIP(maskNum),sub:'ドット区切り10進数'},\n      {label:'ワイルドカードマスク',val:numToIP(wildNum),sub:'サブネットマスクの反転'},\n      {label:'CIDR表記',val:numToIP(netNum)+'/'+prefix,sub:'ネットワーク/プレフィックス'},\n      {label:'最初の利用可能ホスト',val:prefix\u003c=30?numToIP(firstHost):'N/A',sub:prefix===31?'ポイントツーポイントリンク':prefix===32?'ホストルート':''},\n      {label:'最後の利用可能ホスト',val:prefix\u003c=30?numToIP(lastHost):'N/A',sub:''},\n      {label:'利用可能ホスト数',val:hostCount\u003e=0?hostCount.toLocaleString():'0',sub:hostCount\u003e=1000?'(約'+formatLarge(hostCount)+')':''},\n      {label:'総アドレス数',val:Math.pow(2,32-prefix).toLocaleString(),sub:'ネット・ブロードキャスト含む'},\n    ];\n    grid.innerHTML=stats.map(function(s){\n      return '\u003cdiv class=\"ip-stat\"\u003e\u003cdiv class=\"ip-stat-label\"\u003e'+s.label+'\u003c/div\u003e\u003cdiv class=\"ip-stat-val\"\u003e'+s.val+'\u003c/div\u003e'+(s.sub?'\u003cdiv class=\"ip-stat-sub\"\u003e'+s.sub+'\u003c/div\u003e':'')+'\u003c/div\u003e';\n    }).join('');\n\n    var binBox=document.getElementById('ip-bin-box');\n    function renderBinRow(label,num,pref){\n      var bits=[];\n      for(var i=31;i\u003e=0;i--){\n        var b=(num\u003e\u003e\u003ei)\u00261;\n        var bitPos=31-i;\n        var cls2=pref!==undefined?(bitPos\u003cpref?'ip-net-bit':'ip-host-bit'):'';\n        bits.push('\u003cspan class=\"'+cls2+'\"\u003e'+b+'\u003c/span\u003e');\n        if(i\u003e0\u0026\u0026(i%8===0))bits.push('\u003cspan class=\"ip-bin-sep\"\u003e . \u003c/span\u003e');\n      }\n      return '\u003cdiv class=\"ip-bin-row\"\u003e\u003cspan class=\"ip-bin-label\"\u003e'+label+'\u003c/span\u003e\u003cspan\u003e'+bits.join('')+'\u003c/span\u003e\u003c/div\u003e';\n    }\n    binBox.innerHTML=[\n      renderBinRow('IPアドレス:',ipNum,prefix),\n      renderBinRow('サブネットマスク:',maskNum),\n      renderBinRow('ネットワーク:',netNum,prefix),\n      renderBinRow('ブロードキャスト:',bcastNum,prefix),\n    ].join('');\n\n    var tbody=document.getElementById('ip-tbl-body');\n    var rows=[];\n    for(var p=8;p\u003c=32;p++){\n      var m=p===0?0:(0xFFFFFFFF\u003c\u003c(32-p))\u003e\u003e\u003e0;\n      var w=(~m)\u003e\u003e\u003e0;\n      var h=p\u003e=31?(p===32?1:2):Math.pow(2,32-p)-2;\n      var hl=p===prefix?' class=\"ip-hl\"':'';\n      rows.push('\u003ctr'+hl+'\u003e\u003ctd\u003e/'+p+'\u003c/td\u003e\u003ctd\u003e'+numToIP(m)+'\u003c/td\u003e\u003ctd\u003e'+(h\u003e0?h.toLocaleString():0)+'\u003c/td\u003e\u003ctd\u003e'+numToIP(w)+'\u003c/td\u003e\u003c/tr\u003e');\n    }\n    tbody.innerHTML=rows.join('');\n\n    setTimeout(function(){\n      var hlRow=tbody.querySelector('.ip-hl');\n      if(hlRow)hlRow.scrollIntoView({block:'nearest'});\n    },50);\n\n    resEl.style.display='block';\n  };\n\n  window.ipReset=function(){\n    document.getElementById('ip-addr').value='';\n    document.getElementById('ip-cidr').value=24;\n    document.getElementById('ip-mask-sel').value=24;\n    ipSliderChange(24);\n    document.getElementById('ip-error').style.display='none';\n    document.getElementById('ip-results').style.display='none';\n  };\n\n  function showErr(msg){\n    var e=document.getElementById('ip-error');\n    e.textContent=msg;\n    e.style.display='block';\n  }\n\n  renderMaskVis(24);\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv class=\"ip-freee-cta\" style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003eネットワーク管理の経費もかんたんに\u003c/p\u003e","title":"IPサブネット計算ツール"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n家計簿シミュレーター｜理想の支出配分を自動計算 手取り月収を入力するだけで、理想的な支出配分を自動計算します。FP（ファイナンシャルプランナー）推奨の配分比率をベースにしています。\n手取り月収（万円） 10万円25万円100万円 世帯タイプ 一人暮らし 二人暮らし（共働き） ファミリー（子どもあり） 毎月の貯蓄・投資目標額 50,000円 年間: 600,000円 配分基準: FP推奨の支出比率をベースに計算。実際の家計は個人の状況により異なります。あくまで目安としてご活用ください。 貯蓄を増やすためのアクション シミュレーション結果をもとに、貯蓄を効率よく増やしましょう。\n固定費を見直す → 通信費・保険料・サブスクの見直しで月1〜2万円削減できることも 貯蓄分はNISAで運用 → 銀行預金より高いリターンが期待できる → 新NISAの始め方 副業で収入を増やす → 月3〜5万円の副収入で貯蓄ペースが倍に → 副業の始め方ガイド 会計ソフトで管理 → freee なら銀行口座と自動連携で家計管理が楽に よくある質問 Q. 住居費は手取りの何%が目安ですか？ 一般的には手取りの25〜30%が目安です。一人暮らしなら28%程度、ファミリーなら25%以下を目指しましょう。\nQ. 貯蓄率20%は現実的ですか？ 一人暮らしの場合、手取り25万円なら月5万円の貯蓄です。固定費の見直しと先取り貯蓄を組み合わせれば十分に達成可能です。\nQ. ボーナスはどう扱えばいいですか？ ボーナスの50%以上を貯蓄・投資に回すのが理想です。毎月の家計とは別に管理しましょう。\nおすすめサービス 家計のバランスが見えたら、次のステップへ進みましょう。\n貯蓄分をNISAで運用 → つみたてNISAシミュレーター で投資した場合の将来資産を計算 iDeCoで節税しながら貯蓄 → iDeCo節税シミュレーター で節税額を計算 年金で足りるか確認 → 年金シミュレーター で将来の受給額をチェック 副業で収入を増やす → 副業の税金計算シミュレーター で手取りを確認 確定申告を自動化 → freee会計 なら銀行口座と自動連携で記帳が楽に 関連ツール・記事 手取り計算シミュレーター — 年収から手取りを計算 iDeCo節税シミュレーター — iDeCoの節税額と将来受取額を計算 つみたてNISAシミュレーター — 将来の資産額を計算 年金シミュレーター — 将来の年金受給額を確認 FX利益計算シミュレーター — 投資の損益を計算 NISAとiDeCo、どっちを先に？ クレジットカードおすすめ 関連記事 freeeとマネーフォワードどっちが副業向き？実際の費用と機能を徹底比較 家計簿アプリから卒業：収入が月10万円超えたらfreeeに切り替える理由 共働き夫婦のExcel家計簿のつけ方【無料テンプレート付き・2026年版】 ","permalink":"https://productivity-works.com/ja/tools/kakeibo-generator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"家計簿シミュレーター理想の支出配分を自動計算\"\u003e家計簿シミュレーター｜理想の支出配分を自動計算\u003c/h1\u003e\n\u003cp\u003e手取り月収を入力するだけで、\u003cstrong\u003e理想的な支出配分\u003c/strong\u003eを自動計算します。FP（ファイナンシャルプランナー）推奨の配分比率をベースにしています。\u003c/p\u003e\n\u003cdiv id=\"kakeibo-calc\" style=\"max-width:640px;margin:0 auto;padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e手取り月収（万円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"monthlyIncome\" min=\"10\" max=\"100\" step=\"1\" value=\"25\" oninput=\"calcBudget()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e10万円\u003c/span\u003e\u003cspan id=\"incomeVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e25万円\u003c/span\u003e\u003cspan\u003e100万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:24px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e世帯タイプ\u003c/label\u003e\n\u003cselect id=\"household\" onchange=\"calcBudget()\" style=\"width:100%;padding:8px;border:1px solid #cbd5e1;border-radius:6px;font-size:16px;\"\u003e\n\u003coption value=\"single\"\u003e一人暮らし\u003c/option\u003e\n\u003coption value=\"couple\"\u003e二人暮らし（共働き）\u003c/option\u003e\n\u003coption value=\"family\"\u003eファミリー（子どもあり）\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#1e40af;color:white;border-radius:8px;padding:20px;text-align:center;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:14px;margin-bottom:4px;\"\u003e毎月の貯蓄・投資目標額\u003c/div\u003e\n\u003cdiv id=\"savingsTarget\" style=\"font-size:36px;font-weight:bold;\"\u003e50,000円\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;margin-top:4px;\"\u003e年間: \u003cspan id=\"savingsYearly\"\u003e600,000円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"budgetBreakdown\" style=\"margin-bottom:16px;\"\u003e\u003c/div\u003e\n\u003cdiv style=\"background:#f1f5f9;border-radius:8px;padding:12px;font-size:13px;color:#475569;\"\u003e\n\u003cstrong\u003e配分基準:\u003c/strong\u003e FP推奨の支出比率をベースに計算。実際の家計は個人の状況により異なります。あくまで目安としてご活用ください。\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction calcBudget(){\n  var income=parseInt(document.getElementById('monthlyIncome').value)*10000;\n  var type=document.getElementById('household').value;\n\n  var ratios;\n  if(type==='single'){\n    ratios=[\n      {name:'住居費',rate:0.28,color:'#ef4444'},\n      {name:'食費',rate:0.15,color:'#f97316'},\n      {name:'水道光熱費',rate:0.05,color:'#eab308'},\n      {name:'通信費',rate:0.05,color:'#22c55e'},\n      {name:'日用品・衣服',rate:0.05,color:'#06b6d4'},\n      {name:'交際費・娯楽',rate:0.08,color:'#8b5cf6'},\n      {name:'交通費',rate:0.04,color:'#ec4899'},\n      {name:'保険・医療',rate:0.03,color:'#6366f1'},\n      {name:'自己投資',rate:0.05,color:'#14b8a6'},\n      {name:'予備費',rate:0.02,color:'#94a3b8'},\n      {name:'貯蓄・投資',rate:0.20,color:'#2563eb'}\n    ];\n  } else if(type==='couple'){\n    ratios=[\n      {name:'住居費',rate:0.25,color:'#ef4444'},\n      {name:'食費',rate:0.15,color:'#f97316'},\n      {name:'水道光熱費',rate:0.05,color:'#eab308'},\n      {name:'通信費',rate:0.05,color:'#22c55e'},\n      {name:'日用品・衣服',rate:0.05,color:'#06b6d4'},\n      {name:'交際費・娯楽',rate:0.07,color:'#8b5cf6'},\n      {name:'交通費',rate:0.04,color:'#ec4899'},\n      {name:'保険・医療',rate:0.04,color:'#6366f1'},\n      {name:'自己投資',rate:0.03,color:'#14b8a6'},\n      {name:'予備費',rate:0.02,color:'#94a3b8'},\n      {name:'貯蓄・投資',rate:0.25,color:'#2563eb'}\n    ];\n  } else {\n    ratios=[\n      {name:'住居費',rate:0.25,color:'#ef4444'},\n      {name:'食費',rate:0.18,color:'#f97316'},\n      {name:'水道光熱費',rate:0.06,color:'#eab308'},\n      {name:'通信費',rate:0.04,color:'#22c55e'},\n      {name:'日用品・衣服',rate:0.06,color:'#06b6d4'},\n      {name:'教育費',rate:0.08,color:'#8b5cf6'},\n      {name:'交通費',rate:0.04,color:'#ec4899'},\n      {name:'保険・医療',rate:0.06,color:'#6366f1'},\n      {name:'娯楽・交際',rate:0.05,color:'#14b8a6'},\n      {name:'予備費',rate:0.03,color:'#94a3b8'},\n      {name:'貯蓄・投資',rate:0.15,color:'#2563eb'}\n    ];\n  }\n\n  var savings=0;\n  var html='';\n  for(var i=0;i\u003cratios.length;i++){\n    var amt=Math.floor(income*ratios[i].rate);\n    var pct=Math.round(ratios[i].rate*100);\n    if(ratios[i].name==='貯蓄・投資') savings=amt;\n    html+='\u003cdiv style=\"display:flex;align-items:center;padding:8px 0;border-bottom:1px solid #e2e8f0;\"\u003e';\n    html+='\u003cdiv style=\"width:12px;height:12px;border-radius:50%;background:'+ratios[i].color+';margin-right:10px;flex-shrink:0;\"\u003e\u003c/div\u003e';\n    html+='\u003cdiv style=\"flex:1;font-size:14px;\"\u003e'+ratios[i].name+' \u003cspan style=\"color:#94a3b8;\"\u003e('+pct+'%)\u003c/span\u003e\u003c/div\u003e';\n    html+='\u003cdiv style=\"font-weight:bold;font-size:15px;\"\u003e'+amt.toLocaleString()+'円\u003c/div\u003e';\n    html+='\u003c/div\u003e';\n  }\n\n  document.getElementById('incomeVal').textContent=(income/10000)+'万円';\n  document.getElementById('savingsTarget').textContent=savings.toLocaleString()+'円';\n  document.getElementById('savingsYearly').textContent=(savings*12).toLocaleString()+'円';\n  document.getElementById('budgetBreakdown').innerHTML=html;\n}\ncalcBudget();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"貯蓄を増やすためのアクション\"\u003e貯蓄を増やすためのアクション\u003c/h2\u003e\n\u003cp\u003eシミュレーション結果をもとに、貯蓄を効率よく増やしましょう。\u003c/p\u003e","title":"家計簿シミュレーター｜月収から理想の支出配分を自動計算"},{"content":" 無料ツール — 日付までの残り日数・週数・営業日数を瞬時に計算します。\nあと何日？ 2日付間の日数 日数の加減算 特定の日まであと何日？ クイック選択： お正月 GW（5/3〜5/6） お盆（8/13〜16） クリスマス ハロウィン バレンタイン 年度末（3/31） 誕生日 対象の日付 営業日のみでカウント（土日を除く） 日付を選択してください。 計算する — 日 — 週間 — ヶ月（概算） — 営業日 今年の経過率 0% 主な日本の連休・節目（参考） スケジュール管理を効率化 → freee会計で経理の締め日を管理 2つの日付の間の日数 開始日 終了日 土日を除いた日数でカウント 開始日と終了日を両方選択してください。 計算する — 合計日数 — 週間 — ヶ月（概算） — 営業日数 日付に日数を足す・引く 基準日 日数 計算方法 日数を足す（未来の日付） 日数を引く（過去の日付） 土日をスキップ（営業日のみ） 基準日と日数を入力してください。 計算する 結果の日付 — 関連ツール 年齢計算 → 年齢計算ツール カウントダウンタイマー → カウントダウンタイマーツール 日付計算 → 日付計算ツール ","permalink":"https://productivity-works.com/ja/tools/days-until-calculator/","summary":"\u003cdiv id=\"duc-app\"\u003e\n\u003cstyle\u003e\n#duc-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 760px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#duc-app * { box-sizing: border-box; }\n#duc-app h2 {\n  font-size: 1.2rem;\n  font-weight: 700;\n  margin: 0 0 1rem 0;\n  color: #1a1a2e;\n}\n#duc-app .duc-tabs {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #e2e8f0;\n  margin-bottom: 1.5rem;\n  flex-wrap: wrap;\n}\n#duc-app .duc-tab {\n  padding: 0.6rem 1rem;\n  font-size: 0.88rem;\n  font-weight: 700;\n  color: #64748b;\n  background: none;\n  border: none;\n  border-bottom: 3px solid transparent;\n  cursor: pointer;\n  transition: all 0.2s;\n  margin-bottom: -2px;\n}\n#duc-app .duc-tab:hover { color: #2563eb; }\n#duc-app .duc-tab.active {\n  color: #2563eb;\n  border-bottom-color: #2563eb;\n}\n#duc-app .duc-panel { display: none; }\n#duc-app .duc-panel.active { display: block; }\n#duc-app .duc-card {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 1.5rem;\n  margin-bottom: 1rem;\n}\n#duc-app label {\n  display: block;\n  font-size: 0.85rem;\n  font-weight: 700;\n  color: #374151;\n  margin-bottom: 0.4rem;\n}\n#duc-app input[type=\"date\"],\n#duc-app input[type=\"number\"],\n#duc-app select {\n  width: 100%;\n  padding: 0.6rem 0.85rem;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  font-size: 0.95rem;\n  color: #1a1a2e;\n  background: #fff;\n  transition: border-color 0.2s;\n}\n#duc-app input[type=\"date\"]:focus,\n#duc-app input[type=\"number\"]:focus,\n#duc-app select:focus {\n  outline: none;\n  border-color: #2563eb;\n}\n#duc-app .duc-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n  margin-bottom: 1rem;\n}\n@media (max-width: 520px) {\n  #duc-app .duc-row { grid-template-columns: 1fr; }\n}\n#duc-app .duc-field { margin-bottom: 1rem; }\n#duc-app .duc-check-row {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n}\n#duc-app .duc-check-row input[type=\"checkbox\"] {\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n}\n#duc-app .duc-check-row label {\n  margin: 0;\n  font-size: 0.88rem;\n  cursor: pointer;\n}\n#duc-app .duc-btn {\n  display: inline-block;\n  padding: 0.65rem 1.6rem;\n  background: #2563eb;\n  color: #fff;\n  font-size: 0.95rem;\n  font-weight: 700;\n  border: none;\n  border-radius: 8px;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n#duc-app .duc-btn:hover { background: #1d4ed8; }\n#duc-app .duc-results {\n  display: none;\n  margin-top: 1.25rem;\n}\n#duc-app .duc-results.show { display: block; }\n#duc-app .duc-result-grid {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 0.75rem;\n  margin-bottom: 1rem;\n}\n@media (max-width: 520px) {\n  #duc-app .duc-result-grid { grid-template-columns: 1fr; }\n}\n#duc-app .duc-result-box {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 1rem;\n  text-align: center;\n}\n#duc-app .duc-result-box.highlight {\n  background: linear-gradient(135deg, #2563eb 0%, #7c3aed 100%);\n  border-color: transparent;\n}\n#duc-app .duc-result-box .rval {\n  font-size: 2rem;\n  font-weight: 800;\n  line-height: 1.1;\n  color: #1a1a2e;\n}\n#duc-app .duc-result-box.highlight .rval { color: #fff; }\n#duc-app .duc-result-box .rlabel {\n  font-size: 0.76rem;\n  font-weight: 700;\n  color: #64748b;\n  margin-top: 0.2rem;\n  letter-spacing: 0.02em;\n}\n#duc-app .duc-result-box.highlight .rlabel { color: rgba(255,255,255,0.85); }\n#duc-app .duc-progress-wrap {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 1rem 1.25rem;\n  margin-bottom: 0.75rem;\n}\n#duc-app .duc-progress-label {\n  display: flex;\n  justify-content: space-between;\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #64748b;\n  margin-bottom: 0.5rem;\n}\n#duc-app .duc-progress-bar {\n  height: 10px;\n  background: #e2e8f0;\n  border-radius: 99px;\n  overflow: hidden;\n}\n#duc-app .duc-progress-fill {\n  height: 100%;\n  background: linear-gradient(90deg, #2563eb, #7c3aed);\n  border-radius: 99px;\n  transition: width 0.6s ease;\n}\n#duc-app .duc-message {\n  background: #eff6ff;\n  border: 1px solid #bfdbfe;\n  border-radius: 8px;\n  padding: 0.75rem 1rem;\n  font-size: 0.9rem;\n  color: #1e3a8a;\n  margin-top: 0.5rem;\n}\n#duc-app .duc-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n}\n#duc-app .duc-preset-btn {\n  padding: 0.35rem 0.85rem;\n  font-size: 0.78rem;\n  font-weight: 700;\n  background: #fff;\n  border: 1.5px solid #d1d5db;\n  border-radius: 20px;\n  cursor: pointer;\n  color: #374151;\n  transition: all 0.2s;\n}\n#duc-app .duc-preset-btn:hover {\n  background: #2563eb;\n  border-color: #2563eb;\n  color: #fff;\n}\n#duc-app .duc-error {\n  color: #dc2626;\n  font-size: 0.85rem;\n  margin-top: 0.5rem;\n  display: none;\n}\n#duc-app .duc-error.show { display: block; }\n#duc-app .duc-holiday-note {\n  background: #fefce8;\n  border: 1px solid #fde68a;\n  border-radius: 10px;\n  padding: 1rem 1.25rem;\n  margin-top: 1rem;\n  font-size: 0.85rem;\n  color: #78350f;\n}\n#duc-app .duc-holiday-note h3 {\n  font-size: 0.9rem;\n  font-weight: 700;\n  margin: 0 0 0.5rem 0;\n  color: #92400e;\n}\n#duc-app .duc-holiday-grid {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 0.4rem 1rem;\n}\n@media (max-width: 420px) {\n  #duc-app .duc-holiday-grid { grid-template-columns: 1fr; }\n}\n#duc-app .duc-holiday-item {\n  display: flex;\n  justify-content: space-between;\n  border-bottom: 1px dashed #fde68a;\n  padding: 0.2rem 0;\n}\n#duc-app .duc-holiday-item .hname { font-weight: 700; }\n#duc-app .duc-holiday-item .hdays { color: #b45309; font-weight: 700; }\n#duc-app .duc-cta {\n  background: #f0fdf4;\n  border: 1px solid #86efac;\n  border-radius: 10px;\n  padding: 1rem 1.25rem;\n  margin-top: 1.25rem;\n  font-size: 0.9rem;\n  color: #14532d;\n}\n#duc-app .duc-add-result {\n  display: none;\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 1rem 1.25rem;\n  margin-top: 1rem;\n}\n#duc-app .duc-add-result.show { display: block; }\n#duc-app .duc-add-result .big-date {\n  font-size: 1.35rem;\n  font-weight: 800;\n  color: #2563eb;\n  margin-top: 0.3rem;\n}\n\u003c/style\u003e\n\u003cp\u003e\u003cstrong\u003e無料ツール\u003c/strong\u003e — 日付までの残り日数・週数・営業日数を瞬時に計算します。\u003c/p\u003e","title":"日数計算ツール - あと何日？日付カウントダウン"},{"content":" テキスト → モールス モールス → テキスト 入力テキスト クリア モールス符号 コピー コピーしました！ \u0026#9654; 音声再生 \u0026#9646;\u0026#9646; 停止 速度 (WPM)： 待機中 ビジュアル表示 符号一覧 （クリックで入力欄に追加） 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; テキスト暗号化 → テキスト暗号化ツール バーコード生成 → バーコードジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/morse-code/","summary":"\u003cdiv id=\"mc-app\"\u003e\n\u003cstyle\u003e\n#mc-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', Roboto, sans-serif;\n  max-width: 820px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#mc-app * {\n  box-sizing: border-box;\n}\n#mc-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin: 0 0 10px 0;\n  color: #0f172a;\n}\n#mc-app .mc-mode-bar {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 18px;\n}\n#mc-app .mc-mode-btn {\n  padding: 9px 20px;\n  border: 2px solid #cbd5e1;\n  border-radius: 8px;\n  background: #fff;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  color: #475569;\n  transition: all 0.15s;\n}\n#mc-app .mc-mode-btn.active {\n  background: #0284c7;\n  border-color: #0284c7;\n  color: #fff;\n}\n#mc-app .mc-mode-btn:hover:not(.active) {\n  border-color: #0284c7;\n  color: #0284c7;\n}\n#mc-app .mc-panels {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 16px;\n}\n@media (max-width: 600px) {\n  #mc-app .mc-panels {\n    grid-template-columns: 1fr;\n  }\n}\n#mc-app .mc-panel {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n#mc-app .mc-panel label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#mc-app .mc-textarea {\n  width: 100%;\n  min-height: 140px;\n  padding: 12px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 10px;\n  font-size: 15px;\n  font-family: inherit;\n  resize: vertical;\n  color: #1e293b;\n  background: #f8fafc;\n  transition: border-color 0.15s;\n  line-height: 1.6;\n}\n#mc-app .mc-textarea:focus {\n  outline: none;\n  border-color: #0284c7;\n  background: #fff;\n}\n#mc-app .mc-output-box {\n  width: 100%;\n  min-height: 140px;\n  padding: 12px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 10px;\n  font-size: 14px;\n  font-family: 'Courier New', monospace;\n  background: #f1f5f9;\n  color: #334155;\n  word-break: break-all;\n  white-space: pre-wrap;\n  line-height: 1.8;\n}\n#mc-app .mc-actions {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n  align-items: center;\n}\n#mc-app .mc-btn {\n  padding: 8px 16px;\n  border-radius: 7px;\n  border: none;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#mc-app .mc-btn-primary {\n  background: #0284c7;\n  color: #fff;\n}\n#mc-app .mc-btn-primary:hover {\n  background: #0369a1;\n}\n#mc-app .mc-btn-secondary {\n  background: #e2e8f0;\n  color: #334155;\n}\n#mc-app .mc-btn-secondary:hover {\n  background: #cbd5e1;\n}\n#mc-app .mc-btn-danger {\n  background: #fee2e2;\n  color: #dc2626;\n}\n#mc-app .mc-btn-danger:hover {\n  background: #fecaca;\n}\n#mc-app .mc-controls {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 14px 16px;\n  margin-bottom: 16px;\n  display: flex;\n  align-items: center;\n  gap: 20px;\n  flex-wrap: wrap;\n}\n#mc-app .mc-controls label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n}\n#mc-app .mc-wpm-group {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n#mc-app .mc-wpm-input {\n  width: 70px;\n  padding: 6px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 14px;\n  font-weight: 600;\n  text-align: center;\n  color: #1e293b;\n}\n#mc-app .mc-wpm-input:focus {\n  outline: none;\n  border-color: #0284c7;\n}\n#mc-app .mc-status {\n  font-size: 12px;\n  color: #64748b;\n  margin-left: auto;\n}\n#mc-app .mc-visual {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 4px;\n  padding: 12px 14px;\n  background: #f1f5f9;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  margin-bottom: 16px;\n  min-height: 52px;\n  align-items: center;\n}\n#mc-app .mc-visual-dot {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  border-radius: 50%;\n  background: #0284c7;\n}\n#mc-app .mc-visual-dash {\n  display: inline-block;\n  width: 28px;\n  height: 10px;\n  border-radius: 5px;\n  background: #0284c7;\n}\n#mc-app .mc-visual-space {\n  display: inline-block;\n  width: 20px;\n}\n#mc-app .mc-visual-letter-gap {\n  display: inline-block;\n  width: 8px;\n}\n#mc-app .mc-ref {\n  margin-top: 24px;\n}\n#mc-app .mc-ref-title {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 12px;\n}\n#mc-app .mc-ref-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));\n  gap: 6px;\n}\n#mc-app .mc-ref-item {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 8px 10px;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  cursor: pointer;\n  transition: all 0.12s;\n}\n#mc-app .mc-ref-item:hover {\n  background: #e0f2fe;\n  border-color: #7dd3fc;\n}\n#mc-app .mc-ref-char {\n  font-size: 16px;\n  font-weight: 700;\n  color: #0284c7;\n  min-width: 20px;\n}\n#mc-app .mc-ref-morse {\n  font-size: 12px;\n  font-family: 'Courier New', monospace;\n  color: #475569;\n}\n#mc-app .mc-copy-toast {\n  display: none;\n  font-size: 12px;\n  color: #16a34a;\n  font-weight: 600;\n}\n#mc-app .mc-copy-toast.show {\n  display: inline;\n}\n#mc-app .mc-error {\n  color: #dc2626;\n  font-size: 13px;\n  margin-top: 4px;\n}\n#mc-app .mc-freee-cta {\n  margin-top: 28px;\n  padding: 18px 20px;\n  background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);\n  border: 1.5px solid #bae6fd;\n  border-radius: 10px;\n}\n\u003c/style\u003e\n\u003cdiv class=\"mc-mode-bar\"\u003e\n  \u003cbutton class=\"mc-mode-btn active\" id=\"mc-btn-t2m\" onclick=\"mcSetMode('t2m')\"\u003eテキスト → モールス\u003c/button\u003e\n  \u003cbutton class=\"mc-mode-btn\" id=\"mc-btn-m2t\" onclick=\"mcSetMode('m2t')\"\u003eモールス → テキスト\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mc-panels\"\u003e\n  \u003cdiv class=\"mc-panel\"\u003e\n    \u003clabel id=\"mc-input-label\"\u003e入力テキスト\u003c/label\u003e\n    \u003ctextarea class=\"mc-textarea\" id=\"mc-input\" placeholder=\"ここにテキストを入力...\" oninput=\"mcConvert()\" autocomplete=\"off\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n    \u003cdiv class=\"mc-actions\"\u003e\n      \u003cbutton class=\"mc-btn mc-btn-danger\" onclick=\"mcClear()\"\u003eクリア\u003c/button\u003e\n      \u003cspan class=\"mc-error\" id=\"mc-error\"\u003e\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mc-panel\"\u003e\n    \u003clabel id=\"mc-output-label\"\u003eモールス符号\u003c/label\u003e\n    \u003cdiv class=\"mc-output-box\" id=\"mc-output\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"mc-actions\"\u003e\n      \u003cbutton class=\"mc-btn mc-btn-secondary\" onclick=\"mcCopy()\"\u003eコピー\u003c/button\u003e\n      \u003cspan class=\"mc-copy-toast\" id=\"mc-copy-toast\"\u003eコピーしました！\u003c/span\u003e\n      \u003cbutton class=\"mc-btn mc-btn-primary\" id=\"mc-play-btn\" onclick=\"mcPlay()\"\u003e\u0026#9654; 音声再生\u003c/button\u003e\n      \u003cbutton class=\"mc-btn mc-btn-danger\" id=\"mc-stop-btn\" onclick=\"mcStop()\" style=\"display:none;\"\u003e\u0026#9646;\u0026#9646; 停止\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mc-controls\"\u003e\n  \u003cdiv class=\"mc-wpm-group\"\u003e\n    \u003clabel for=\"mc-wpm\"\u003e速度 (WPM)：\u003c/label\u003e\n    \u003cinput type=\"number\" class=\"mc-wpm-input\" id=\"mc-wpm\" value=\"15\" min=\"5\" max=\"40\" onchange=\"mcUpdateWpm()\"\u003e\n  \u003c/div\u003e\n  \u003cspan class=\"mc-status\" id=\"mc-status\"\u003e待機中\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv id=\"mc-visual-area\"\u003e\n  \u003ch2\u003eビジュアル表示\u003c/h2\u003e\n  \u003cdiv class=\"mc-visual\" id=\"mc-visual\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mc-ref\"\u003e\n  \u003cdiv class=\"mc-ref-title\"\u003e符号一覧 \u003cspan style=\"font-size:12px;font-weight:400;color:#64748b;\"\u003e（クリックで入力欄に追加）\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"mc-ref-grid\" id=\"mc-ref-grid\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mc-freee-cta\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"モールス信号変換ツール"},{"content":"※本ページにはアフィリエイト広告が含まれています。\n入力項目 現在の年齢 30歳 20歳64歳 年収（万円） 400万円 100万円2,000万円 国民年金加入期間（年） 40年 0年40年 厚生年金加入期間（年） 38年 0年40年 受給開始年齢 60歳（繰上げ受給） 61歳（繰上げ受給） 62歳（繰上げ受給） 63歳（繰上げ受給） 64歳（繰上げ受給） 65歳（通常受給） 66歳（繰下げ受給） 67歳（繰下げ受給） 68歳（繰下げ受給） 69歳（繰下げ受給） 70歳（繰下げ受給） 75歳（繰下げ受給） 月額受給見込み ---円 年額：---円 老齢基礎年金 ---円／年 月額 ---円 老齢厚生年金 ---円／年 月額 ---円 65歳受給（基準）と比較した増減 --- 月額 ---円の--- 受給開始年齢別の月額一覧（65歳基準で比較） 60歳 ---円 -24.0% 65歳（基準） ---円 ±0% 70歳 ---円 +42.0% 75歳 ---円 +84.0% 計算方法： 老齢基礎年金 = 816,000円 × (国民年金加入月数 ÷ 480)（2024年度満額）。 老齢厚生年金 = 平均標準報酬月額（上限650,000円）× 5.481 ÷ 1000 × 厚生年金加入月数。 繰上げ：65歳未満は1ヶ月あたり0.4%減額。繰下げ：66歳以上は1ヶ月あたり0.7%増額。 実際の受給額は加入履歴や標準報酬月額の実績により異なります。 老後資金を今すぐ対策する 楽天証券でiDeCo口座を開設する freee会計を無料で試す 関連ツール FIREシミュレーター iDeCoシミュレーター NISAシミュレーター 手取り計算機 家計簿ツール 副業税金計算 教育費シミュレーター 関連ツール 副業税金計算 → 副業税金計算ツール ふるさと納税シミュレーター → ふるさと納税シミュレーターツール iDeCo シミュレーター → iDeCo シミュレーターツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 iDeCo おすすめ証券会社ランキング【2026年最新版】手数料・商品数を徹底比較 iDeCo節税シミュレーション｜年収別に実際いくら得するか計算 老後2000万円問題を自分で検証｜退職金なしの会社員がとるべき行動 ","permalink":"https://productivity-works.com/ja/tools/nenkin-simulator/","summary":"\u003cp\u003e※本ページにはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cstyle\u003e\n.nenkin-wrap {\n  max-width: 680px;\n  margin: 0 auto;\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic UI\", sans-serif;\n}\n.nenkin-card {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 20px;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n}\n.nenkin-card h2 {\n  font-size: 16px;\n  font-weight: 700;\n  color: #1e293b;\n  margin: 0 0 20px 0;\n  padding-bottom: 10px;\n  border-bottom: 2px solid #4a9eff;\n}\n.input-group {\n  margin-bottom: 22px;\n}\n.input-label {\n  display: flex;\n  justify-content: space-between;\n  align-items: baseline;\n  margin-bottom: 8px;\n}\n.input-label span:first-child {\n  font-size: 14px;\n  font-weight: 600;\n  color: #334155;\n}\n.input-value {\n  font-size: 20px;\n  font-weight: 700;\n  color: #4a9eff;\n}\n.slider-wrap {\n  position: relative;\n}\ninput[type=\"range\"] {\n  -webkit-appearance: none;\n  width: 100%;\n  height: 6px;\n  border-radius: 3px;\n  background: #e2e8f0;\n  outline: none;\n  cursor: pointer;\n}\ninput[type=\"range\"]::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  background: #4a9eff;\n  box-shadow: 0 2px 6px rgba(74,158,255,0.4);\n  cursor: pointer;\n}\ninput[type=\"range\"]::-moz-range-thumb {\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  background: #4a9eff;\n  box-shadow: 0 2px 6px rgba(74,158,255,0.4);\n  cursor: pointer;\n  border: none;\n}\n.slider-limits {\n  display: flex;\n  justify-content: space-between;\n  font-size: 11px;\n  color: #94a3b8;\n  margin-top: 4px;\n}\nselect.nenkin-select {\n  width: 100%;\n  padding: 10px 14px;\n  font-size: 16px;\n  font-weight: 600;\n  color: #1e293b;\n  background: #f8fafc;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  cursor: pointer;\n  outline: none;\n}\nselect.nenkin-select:focus {\n  border-color: #4a9eff;\n  box-shadow: 0 0 0 3px rgba(74,158,255,0.15);\n}\n.result-hero {\n  background: linear-gradient(135deg, #2563eb 0%, #4a9eff 100%);\n  border-radius: 12px;\n  padding: 28px 24px;\n  text-align: center;\n  color: #fff;\n  margin-bottom: 16px;\n}\n.result-hero .hero-label {\n  font-size: 14px;\n  opacity: 0.88;\n  margin-bottom: 6px;\n}\n.result-hero .hero-monthly {\n  font-size: 44px;\n  font-weight: 800;\n  letter-spacing: -1px;\n  line-height: 1;\n}\n.result-hero .hero-unit {\n  font-size: 18px;\n  font-weight: 400;\n  margin-left: 4px;\n}\n.result-hero .hero-annual {\n  font-size: 15px;\n  opacity: 0.88;\n  margin-top: 8px;\n}\n.result-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n  margin-bottom: 16px;\n}\n.result-sub {\n  border-radius: 10px;\n  padding: 16px;\n  text-align: center;\n}\n.result-sub.kiso {\n  background: #eff6ff;\n  border: 1px solid #bfdbfe;\n}\n.result-sub.kousei {\n  background: #f0fdf4;\n  border: 1px solid #bbf7d0;\n}\n.result-sub .sub-label {\n  font-size: 12px;\n  color: #64748b;\n  margin-bottom: 6px;\n}\n.result-sub .sub-annual {\n  font-size: 18px;\n  font-weight: 700;\n}\n.result-sub.kiso .sub-annual { color: #1d4ed8; }\n.result-sub.kousei .sub-annual { color: #15803d; }\n.result-sub .sub-monthly {\n  font-size: 12px;\n  color: #64748b;\n  margin-top: 4px;\n}\n.adjust-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 16px;\n}\n.adjust-card .adj-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #475569;\n  margin-bottom: 12px;\n}\n.adj-row {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 8px 0;\n  border-bottom: 1px solid #e2e8f0;\n  font-size: 14px;\n}\n.adj-row:last-child { border-bottom: none; }\n.adj-row .adj-age { color: #475569; font-weight: 600; }\n.adj-row .adj-amount { font-weight: 700; }\n.adj-row .adj-rate {\n  font-size: 12px;\n  padding: 2px 8px;\n  border-radius: 20px;\n  font-weight: 600;\n}\n.rate-down { background: #fee2e2; color: #dc2626; }\n.rate-base { background: #dbeafe; color: #2563eb; }\n.rate-up { background: #dcfce7; color: #16a34a; }\n.adj-row.selected { background: #eff6ff; border-radius: 6px; padding: 8px 6px; margin: 0 -6px; }\n.compare-box {\n  background: #fff7ed;\n  border: 1.5px solid #fed7aa;\n  border-radius: 10px;\n  padding: 14px 16px;\n  margin-bottom: 16px;\n  text-align: center;\n}\n.compare-box .cmp-label { font-size: 12px; color: #92400e; margin-bottom: 4px; }\n.compare-box .cmp-value { font-size: 18px; font-weight: 700; }\n.cmp-plus { color: #16a34a; }\n.cmp-minus { color: #dc2626; }\n.cmp-zero { color: #2563eb; }\n.notice-box {\n  background: #f1f5f9;\n  border-radius: 8px;\n  padding: 12px 14px;\n  font-size: 12px;\n  color: #64748b;\n  line-height: 1.7;\n}\n.affiliate-section {\n  margin-top: 32px;\n  padding-top: 24px;\n  border-top: 1px solid #e2e8f0;\n}\n.affiliate-section h3 {\n  font-size: 15px;\n  font-weight: 700;\n  color: #334155;\n  margin-bottom: 14px;\n}\n.aff-btn {\n  display: block;\n  background: linear-gradient(135deg, #4a9eff, #2563eb);\n  color: #fff !important;\n  text-decoration: none !important;\n  text-align: center;\n  padding: 14px 20px;\n  border-radius: 8px;\n  font-weight: 700;\n  font-size: 15px;\n  margin-bottom: 10px;\n  transition: opacity 0.2s;\n}\n.aff-btn:hover { opacity: 0.88; }\n.aff-btn-sub {\n  display: block;\n  background: #fff;\n  color: #2563eb !important;\n  text-decoration: none !important;\n  text-align: center;\n  padding: 12px 20px;\n  border-radius: 8px;\n  font-weight: 700;\n  font-size: 14px;\n  border: 1.5px solid #4a9eff;\n  margin-bottom: 10px;\n  transition: background 0.2s;\n}\n.aff-btn-sub:hover { background: #eff6ff; }\n.related-tools {\n  margin-top: 32px;\n}\n.related-tools h3 {\n  font-size: 15px;\n  font-weight: 700;\n  color: #334155;\n  margin-bottom: 12px;\n}\n.tool-links {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 10px;\n}\n.tool-link {\n  display: block;\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 12px 14px;\n  text-decoration: none !important;\n  color: #1e293b !important;\n  font-size: 13px;\n  font-weight: 600;\n  transition: border-color 0.2s, background 0.2s;\n}\n.tool-link:hover {\n  border-color: #4a9eff;\n  background: #eff6ff;\n  color: #2563eb !important;\n}\n@media (max-width: 480px) {\n  .result-grid { grid-template-columns: 1fr; }\n  .tool-links { grid-template-columns: 1fr; }\n  .result-hero .hero-monthly { font-size: 36px; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"nenkin-wrap\"\u003e\n\u003cdiv class=\"nenkin-card\"\u003e\n\u003ch2\u003e入力項目\u003c/h2\u003e\n\u003cdiv class=\"input-group\"\u003e\n  \u003cdiv class=\"input-label\"\u003e\n    \u003cspan\u003e現在の年齢\u003c/span\u003e\n    \u003cspan class=\"input-value\"\u003e\u003cspan id=\"v-age\"\u003e30\u003c/span\u003e歳\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cinput type=\"range\" id=\"s-age\" min=\"20\" max=\"64\" step=\"1\" value=\"30\" oninput=\"nenkinCalc()\"\u003e\n  \u003cdiv class=\"slider-limits\"\u003e\u003cspan\u003e20歳\u003c/span\u003e\u003cspan\u003e64歳\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"input-group\"\u003e\n  \u003cdiv class=\"input-label\"\u003e\n    \u003cspan\u003e年収（万円）\u003c/span\u003e\n    \u003cspan class=\"input-value\"\u003e\u003cspan id=\"v-income\"\u003e400\u003c/span\u003e万円\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cinput type=\"range\" id=\"s-income\" min=\"100\" max=\"2000\" step=\"10\" value=\"400\" oninput=\"nenkinCalc()\"\u003e\n  \u003cdiv class=\"slider-limits\"\u003e\u003cspan\u003e100万円\u003c/span\u003e\u003cspan\u003e2,000万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"input-group\"\u003e\n  \u003cdiv class=\"input-label\"\u003e\n    \u003cspan\u003e国民年金加入期間（年）\u003c/span\u003e\n    \u003cspan class=\"input-value\"\u003e\u003cspan id=\"v-kokumin\"\u003e40\u003c/span\u003e年\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cinput type=\"range\" id=\"s-kokumin\" min=\"0\" max=\"40\" step=\"1\" value=\"40\" oninput=\"nenkinCalc()\"\u003e\n  \u003cdiv class=\"slider-limits\"\u003e\u003cspan\u003e0年\u003c/span\u003e\u003cspan\u003e40年\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"input-group\"\u003e\n  \u003cdiv class=\"input-label\"\u003e\n    \u003cspan\u003e厚生年金加入期間（年）\u003c/span\u003e\n    \u003cspan class=\"input-value\"\u003e\u003cspan id=\"v-kousei\"\u003e38\u003c/span\u003e年\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cinput type=\"range\" id=\"s-kousei\" min=\"0\" max=\"40\" step=\"1\" value=\"38\" oninput=\"nenkinCalc()\"\u003e\n  \u003cdiv class=\"slider-limits\"\u003e\u003cspan\u003e0年\u003c/span\u003e\u003cspan\u003e40年\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"input-group\" style=\"margin-bottom:0;\"\u003e\n  \u003cdiv class=\"input-label\" style=\"margin-bottom:8px;\"\u003e\n    \u003cspan\u003e受給開始年齢\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cselect id=\"s-start\" class=\"nenkin-select\" onchange=\"nenkinCalc()\"\u003e\n    \u003coption value=\"60\"\u003e60歳（繰上げ受給）\u003c/option\u003e\n    \u003coption value=\"61\"\u003e61歳（繰上げ受給）\u003c/option\u003e\n    \u003coption value=\"62\"\u003e62歳（繰上げ受給）\u003c/option\u003e\n    \u003coption value=\"63\"\u003e63歳（繰上げ受給）\u003c/option\u003e\n    \u003coption value=\"64\"\u003e64歳（繰上げ受給）\u003c/option\u003e\n    \u003coption value=\"65\" selected\u003e65歳（通常受給）\u003c/option\u003e\n    \u003coption value=\"66\"\u003e66歳（繰下げ受給）\u003c/option\u003e\n    \u003coption value=\"67\"\u003e67歳（繰下げ受給）\u003c/option\u003e\n    \u003coption value=\"68\"\u003e68歳（繰下げ受給）\u003c/option\u003e\n    \u003coption value=\"69\"\u003e69歳（繰下げ受給）\u003c/option\u003e\n    \u003coption value=\"70\"\u003e70歳（繰下げ受給）\u003c/option\u003e\n    \u003coption value=\"75\"\u003e75歳（繰下げ受給）\u003c/option\u003e\n  \u003c/select\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c!-- .nenkin-card --\u003e\n\u003cdiv id=\"result-area\"\u003e\n\u003cdiv class=\"result-hero\"\u003e\n  \u003cdiv class=\"hero-label\"\u003e月額受給見込み\u003c/div\u003e\n  \u003cdiv class=\"hero-monthly\"\u003e\u003cspan id=\"r-monthly\"\u003e---\u003c/span\u003e\u003cspan class=\"hero-unit\"\u003e円\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"hero-annual\"\u003e年額：\u003cspan id=\"r-annual\"\u003e---\u003c/span\u003e円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"result-grid\"\u003e\n  \u003cdiv class=\"result-sub kiso\"\u003e\n    \u003cdiv class=\"sub-label\"\u003e老齢基礎年金\u003c/div\u003e\n    \u003cdiv class=\"sub-annual\"\u003e\u003cspan id=\"r-kiso-annual\"\u003e---\u003c/span\u003e円／年\u003c/div\u003e\n    \u003cdiv class=\"sub-monthly\"\u003e月額 \u003cspan id=\"r-kiso-monthly\"\u003e---\u003c/span\u003e円\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"result-sub kousei\"\u003e\n    \u003cdiv class=\"sub-label\"\u003e老齢厚生年金\u003c/div\u003e\n    \u003cdiv class=\"sub-annual\"\u003e\u003cspan id=\"r-kousei-annual\"\u003e---\u003c/span\u003e円／年\u003c/div\u003e\n    \u003cdiv class=\"sub-monthly\"\u003e月額 \u003cspan id=\"r-kousei-monthly\"\u003e---\u003c/span\u003e円\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"compare-box\"\u003e\n  \u003cdiv class=\"cmp-label\"\u003e65歳受給（基準）と比較した増減\u003c/div\u003e\n  \u003cdiv class=\"cmp-value\" id=\"r-diff-rate\"\u003e---\u003c/div\u003e\n  \u003cdiv style=\"font-size:12px;color:#92400e;margin-top:4px;\"\u003e月額 \u003cspan id=\"r-diff-amount\"\u003e---\u003c/span\u003e円の\u003cspan id=\"r-diff-sign\"\u003e---\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"adjust-card\"\u003e\n  \u003cdiv class=\"adj-title\"\u003e受給開始年齢別の月額一覧（65歳基準で比較）\u003c/div\u003e\n  \u003cdiv class=\"adj-row\" id=\"row-60\"\u003e\n    \u003cspan class=\"adj-age\"\u003e60歳\u003c/span\u003e\n    \u003cspan class=\"adj-amount\" id=\"t-60\"\u003e---円\u003c/span\u003e\n    \u003cspan class=\"adj-rate rate-down\"\u003e-24.0%\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"adj-row\" id=\"row-65\"\u003e\n    \u003cspan class=\"adj-age\"\u003e65歳（基準）\u003c/span\u003e\n    \u003cspan class=\"adj-amount\" id=\"t-65\"\u003e---円\u003c/span\u003e\n    \u003cspan class=\"adj-rate rate-base\"\u003e±0%\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"adj-row\" id=\"row-70\"\u003e\n    \u003cspan class=\"adj-age\"\u003e70歳\u003c/span\u003e\n    \u003cspan class=\"adj-amount\" id=\"t-70\"\u003e---円\u003c/span\u003e\n    \u003cspan class=\"adj-rate rate-up\"\u003e+42.0%\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"adj-row\" id=\"row-75\"\u003e\n    \u003cspan class=\"adj-age\"\u003e75歳\u003c/span\u003e\n    \u003cspan class=\"adj-amount\" id=\"t-75\"\u003e---円\u003c/span\u003e\n    \u003cspan class=\"adj-rate rate-up\"\u003e+84.0%\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"notice-box\"\u003e\n  \u003cstrong\u003e計算方法：\u003c/strong\u003e\n  老齢基礎年金 = 816,000円 × (国民年金加入月数 ÷ 480)（2024年度満額）。\n  老齢厚生年金 = 平均標準報酬月額（上限650,000円）× 5.481 ÷ 1000 × 厚生年金加入月数。\n  繰上げ：65歳未満は1ヶ月あたり0.4%減額。繰下げ：66歳以上は1ヶ月あたり0.7%増額。\n  実際の受給額は加入履歴や標準報酬月額の実績により異なります。\n\u003c/div\u003e\n\u003c/div\u003e\u003c!-- #result-area --\u003e\n\u003cdiv class=\"affiliate-section\"\u003e\n\u003ch3\u003e老後資金を今すぐ対策する\u003c/h3\u003e\n\u003ca href=\"https://hb.afl.rakuten.co.jp/hsc/41ab8a31.8f450617.41ab8a32.86e006c4/?link_type=hybrid_url\u0026ut=eyJwYWdlIjoic2hvcCIsInR5cGUiOiJoeWJyaWRfdXJsIiwiY29sIjoxLCJjYXQiOiIxIiwiYmFuIjoiMTI0NjkzOSIsImFtcCI6ZmFsc2V9\" target=\"_blank\" rel=\"nofollow\" class=\"aff-btn\"\u003e楽天証券でiDeCo口座を開設する\u003c/a\u003e\n\u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7T0MB6+52NU+5YZ75\" rel=\"nofollow\" class=\"aff-btn-sub\"\u003efreee会計を無料で試す\u003c/a\u003e\u003cimg border=\"0\" width=\"1\" height=\"1\" src=\"https://www14.a8.net/0.gif?a8mat=4B3QAZ+7T0MB6+52NU+5YZ75\" alt=\"\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"related-tools\"\u003e\n\u003ch3\u003e関連ツール\u003c/h3\u003e\n\u003cdiv class=\"tool-links\"\u003e\n  \u003ca href=\"/ja/tools/fire-simulator/\" class=\"tool-link\"\u003eFIREシミュレーター\u003c/a\u003e\n  \u003ca href=\"/ja/tools/ideco-simulator/\" class=\"tool-link\"\u003eiDeCoシミュレーター\u003c/a\u003e\n  \u003ca href=\"/ja/tools/nisa-simulator/\" class=\"tool-link\"\u003eNISAシミュレーター\u003c/a\u003e\n  \u003ca href=\"/ja/tools/salary-tedori-calculator/\" class=\"tool-link\"\u003e手取り計算機\u003c/a\u003e\n  \u003ca href=\"/ja/tools/kakeibo-generator/\" class=\"tool-link\"\u003e家計簿ツール\u003c/a\u003e\n  \u003ca href=\"/ja/tools/fukugyou-tax-calculator/\" class=\"tool-link\"\u003e副業税金計算\u003c/a\u003e\n  \u003ca href=\"/ja/tools/kyouikuhi-simulator/\" class=\"tool-link\"\u003e教育費シミュレーター\u003c/a\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c!-- .nenkin-wrap --\u003e\n\u003cscript\u003e\nfunction fmt(n) {\n  return Math.round(n).toLocaleString('ja-JP');\n}\n\nfunction nenkinCalc() {\n  var age      = parseInt(document.getElementById('s-age').value, 10);\n  var income   = parseInt(document.getElementById('s-income').value, 10);\n  var kokumin  = parseInt(document.getElementById('s-kokumin').value, 10);\n  var kousei   = parseInt(document.getElementById('s-kousei').value, 10);\n  var startAge = parseInt(document.getElementById('s-start').value, 10);\n\n  // Update slider display values\n  document.getElementById('v-age').textContent     = age;\n  document.getElementById('v-income').textContent  = income.toLocaleString('ja-JP');\n  document.getElementById('v-kokumin').textContent = kokumin;\n  document.getElementById('v-kousei').textContent  = kousei;\n\n  // --- 老齢基礎年金 ---\n  // 2024年度満額: 816,000円/年 (40年=480ヶ月加入時)\n  var kisoFull      = 816000;\n  var kokuminMonths = Math.min(kokumin * 12, 480);\n  var kisoAnnual    = kisoFull * (kokuminMonths / 480);\n  var kisoMonthly   = kisoAnnual / 12;\n\n  // --- 老齢厚生年金 ---\n  // 平均標準報酬月額 = 年収/12 、上限 650,000円\n  var avgMonthlyWage = Math.min((income * 10000) / 12, 650000);\n  var kouseiMonths   = kousei * 12;\n  var kouseiAnnual   = avgMonthlyWage * (5.481 / 1000) * kouseiMonths;\n  var kouseiMonthly  = kouseiAnnual / 12;\n\n  // --- 65歳時点の合計 ---\n  var base65Monthly = kisoMonthly + kouseiMonthly;\n\n  // --- 繰上げ/繰下げ調整 ---\n  var adjMonths = (startAge - 65) * 12;\n  var adjRate;\n  if (startAge \u003c 65) {\n    // 繰上げ: 1ヶ月あたり 0.4% 減額\n    adjRate = 1 + adjMonths * 0.004; // adjMonths is negative here\n  } else if (startAge \u003e 65) {\n    // 繰下げ: 1ヶ月あたり 0.7% 増額\n    adjRate = 1 + adjMonths * 0.007;\n  } else {\n    adjRate = 1.0;\n  }\n\n  var selectedMonthly = base65Monthly * adjRate;\n  var selectedAnnual  = selectedMonthly * 12;\n\n  // Adjusted kiso / kousei proportional split\n  var kisoAdj   = kisoMonthly   * adjRate;\n  var kouseiAdj = kouseiMonthly * adjRate;\n\n  // --- 比較 ---\n  var diffMonthly = selectedMonthly - base65Monthly;\n  var diffRate    = ((adjRate - 1) * 100);\n\n  // --- Update result display ---\n  document.getElementById('r-monthly').textContent       = fmt(selectedMonthly);\n  document.getElementById('r-annual').textContent        = fmt(selectedAnnual);\n  document.getElementById('r-kiso-annual').textContent   = fmt(kisoAdj * 12);\n  document.getElementById('r-kiso-monthly').textContent  = fmt(kisoAdj);\n  document.getElementById('r-kousei-annual').textContent  = fmt(kouseiAdj * 12);\n  document.getElementById('r-kousei-monthly').textContent = fmt(kouseiAdj);\n\n  // Diff display\n  var rateEl  = document.getElementById('r-diff-rate');\n  var amtEl   = document.getElementById('r-diff-amount');\n  var signEl  = document.getElementById('r-diff-sign');\n  rateEl.className = 'cmp-value';\n  if (startAge === 65) {\n    rateEl.textContent  = '±0%（65歳通常受給）';\n    rateEl.classList.add('cmp-zero');\n    amtEl.textContent   = '0';\n    signEl.textContent  = '変化なし';\n  } else if (diffRate \u003c 0) {\n    rateEl.textContent  = diffRate.toFixed(1) + '%（繰上げ減額）';\n    rateEl.classList.add('cmp-minus');\n    amtEl.textContent   = fmt(Math.abs(diffMonthly));\n    signEl.textContent  = '減少';\n  } else {\n    rateEl.textContent  = '+' + diffRate.toFixed(1) + '%（繰下げ増額）';\n    rateEl.classList.add('cmp-plus');\n    amtEl.textContent   = fmt(diffMonthly);\n    signEl.textContent  = '増加';\n  }\n\n  // --- 年齢別一覧 ---\n  var ages = [60, 65, 70, 75];\n  ages.forEach(function(a) {\n    var m = (a - 65) * 12;\n    var r;\n    if (a \u003c 65)       r = 1 + m * 0.004;\n    else if (a \u003e 65)  r = 1 + m * 0.007;\n    else              r = 1.0;\n    var val = base65Monthly * r;\n    document.getElementById('t-' + a).textContent = fmt(val) + '円';\n  });\n\n  // Highlight selected row\n  ['60','65','70','75'].forEach(function(a) {\n    var row = document.getElementById('row-' + a);\n    row.classList.remove('selected');\n  });\n  if ([60,65,70,75].indexOf(startAge) !== -1) {\n    document.getElementById('row-' + startAge).classList.add('selected');\n  }\n}\n\n// Initial calculation on load\nnenkinCalc();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e副業税金計算 → \u003ca href=\"https://productivity-works.com/ja/tools/fukugyou-tax-calculator/\"\u003e副業税金計算ツール\u003c/a\u003e\n\nふるさと納税シミュレーター → \u003ca href=\"https://productivity-works.com/ja/tools/furusato-nozei-simulator/\"\u003eふるさと納税シミュレーターツール\u003c/a\u003e\n\niDeCo シミュレーター → \u003ca href=\"https://productivity-works.com/ja/tools/ideco-simulator/\"\u003eiDeCo シミュレーターツール\u003c/a\u003e\n\u003c/p\u003e","title":"年金シミュレーター｜将来の受給額を簡単計算"},{"content":" 総予算・ゲスト人数・ご祝儀収入を入力するだけで、結婚式の費用内訳が一目でわかります。スライダーで各項目の割合を自由に調整しながら、自己負担額をリアルタイムで確認できます。 総予算（円） 招待ゲスト人数（名） ご祝儀収入見込（円） 総予算 300万円 配分合計 300万円 過不足なし 配分率 合計 100% ご祝儀収入見込 200万円 自己負担額（予測） 100万円 お一人あたりのご祝儀目安：2.5万円 費用内訳グラフ ゲスト1人あたりの費用\n3.75万円 結婚資金の管理を効率化 → freee会計で家計を自動管理 ","permalink":"https://productivity-works.com/ja/tools/wedding-budget-calculator/","summary":"\u003cdiv id=\"wb-app\"\u003e\n\u003cstyle\u003e\n#wb-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Noto Sans JP', 'Meiryo', sans-serif;\n  max-width: 880px;\n  margin: 0 auto;\n  color: #2d2d2d;\n  padding: 0 8px;\n}\n#wb-app h2 {\n  font-size: 1.3rem;\n  font-weight: 700;\n  color: #1a1a1a;\n  margin: 1.5rem 0 0.5rem;\n  border-bottom: 2px solid #f0c4d4;\n  padding-bottom: 0.3rem;\n}\n#wb-app .wb-intro {\n  background: linear-gradient(135deg, #fff5f8 0%, #fdf0f5 100%);\n  border: 1px solid #f0c4d4;\n  border-radius: 10px;\n  padding: 1.2rem 1.4rem;\n  margin-bottom: 1.5rem;\n  font-size: 0.95rem;\n  color: #555;\n  line-height: 1.7;\n}\n#wb-app .wb-top-row {\n  display: flex;\n  gap: 14px;\n  flex-wrap: wrap;\n  margin-bottom: 1.4rem;\n}\n#wb-app .wb-top-card {\n  flex: 1 1 180px;\n  background: #fff;\n  border: 1px solid #e8d0d8;\n  border-radius: 10px;\n  padding: 1rem 1.2rem;\n}\n#wb-app .wb-top-card label {\n  display: block;\n  font-size: 0.8rem;\n  font-weight: 700;\n  color: #999;\n  margin-bottom: 0.4rem;\n}\n#wb-app .wb-top-card input {\n  width: 100%;\n  border: 1.5px solid #e0c8d0;\n  border-radius: 6px;\n  padding: 0.45rem 0.7rem;\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #c0396b;\n  background: #fffafb;\n  box-sizing: border-box;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#wb-app .wb-top-card input:focus {\n  border-color: #c0396b;\n  background: #fff;\n}\n#wb-app .wb-goshugi-card {\n  background: linear-gradient(135deg, #fffbf0 0%, #fff8e8 100%);\n  border: 1.5px solid #f5d08c;\n  border-radius: 10px;\n  padding: 1rem 1.2rem;\n  flex: 1 1 180px;\n}\n#wb-app .wb-goshugi-card label {\n  display: block;\n  font-size: 0.8rem;\n  font-weight: 700;\n  color: #b8860b;\n  margin-bottom: 0.4rem;\n}\n#wb-app .wb-goshugi-card input {\n  width: 100%;\n  border: 1.5px solid #f5d08c;\n  border-radius: 6px;\n  padding: 0.45rem 0.7rem;\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #b8860b;\n  background: #fffef8;\n  box-sizing: border-box;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#wb-app .wb-goshugi-card input:focus {\n  border-color: #b8860b;\n  background: #fff;\n}\n#wb-app .wb-status-bar {\n  background: #fff;\n  border: 2px solid #e8d0d8;\n  border-radius: 10px;\n  padding: 1rem 1.4rem;\n  margin-bottom: 1rem;\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  flex-wrap: wrap;\n}\n#wb-app .wb-status-label {\n  font-size: 0.78rem;\n  color: #999;\n  font-weight: 700;\n  margin-bottom: 2px;\n}\n#wb-app .wb-status-amount {\n  font-size: 1.35rem;\n  font-weight: 800;\n  color: #c0396b;\n}\n#wb-app .wb-status-diff {\n  font-size: 0.92rem;\n  font-weight: 700;\n  padding: 0.28rem 0.75rem;\n  border-radius: 20px;\n}\n#wb-app .wb-status-diff.under {\n  background: #e8f5e9;\n  color: #2e7d32;\n}\n#wb-app .wb-status-diff.over {\n  background: #fdecea;\n  color: #c62828;\n}\n#wb-app .wb-status-diff.exact {\n  background: #e8eaf6;\n  color: #3949ab;\n}\n#wb-app .wb-goshugi-banner {\n  background: linear-gradient(135deg, #fffbf0, #fff8e8);\n  border: 1.5px solid #f5d08c;\n  border-radius: 10px;\n  padding: 0.9rem 1.2rem;\n  margin-bottom: 1.2rem;\n  display: flex;\n  align-items: center;\n  gap: 18px;\n  flex-wrap: wrap;\n}\n#wb-app .wb-goshugi-banner .wb-status-label {\n  color: #b8860b;\n}\n#wb-app .wb-goshugi-banner .wb-status-amount {\n  color: #b8860b;\n}\n#wb-app .wb-jishutankin {\n  font-size: 0.88rem;\n  color: #888;\n  margin-top: 2px;\n}\n#wb-app .wb-jishutankin strong {\n  color: #c0396b;\n  font-size: 1.05rem;\n}\n#wb-app .wb-progress-wrap {\n  flex: 1 1 160px;\n  min-width: 100px;\n}\n#wb-app .wb-progress-track {\n  background: #f0e0e8;\n  border-radius: 6px;\n  height: 10px;\n  overflow: hidden;\n}\n#wb-app .wb-progress-fill {\n  height: 100%;\n  border-radius: 6px;\n  transition: width 0.4s, background 0.4s;\n}\n#wb-app .wb-main {\n  display: flex;\n  gap: 22px;\n  flex-wrap: wrap;\n}\n#wb-app .wb-categories {\n  flex: 1 1 340px;\n}\n#wb-app .wb-chart-col {\n  flex: 0 0 230px;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n#wb-app .wb-category-row {\n  background: #fff;\n  border: 1px solid #ecdde4;\n  border-radius: 8px;\n  padding: 0.7rem 0.9rem;\n  margin-bottom: 0.6rem;\n}\n#wb-app .wb-cat-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 0.3rem;\n}\n#wb-app .wb-cat-name {\n  font-weight: 700;\n  font-size: 0.9rem;\n  color: #333;\n}\n#wb-app .wb-cat-amounts {\n  font-size: 0.8rem;\n  color: #aaa;\n  text-align: right;\n}\n#wb-app .wb-cat-pct {\n  font-size: 0.78rem;\n  font-weight: 800;\n  color: #c0396b;\n  min-width: 34px;\n  text-align: right;\n}\n#wb-app .wb-cat-input-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n#wb-app .wb-cat-slider {\n  -webkit-appearance: none;\n  appearance: none;\n  flex: 1;\n  height: 5px;\n  border-radius: 3px;\n  background: #f0c4d4;\n  outline: none;\n  cursor: pointer;\n}\n#wb-app .wb-cat-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 15px;\n  height: 15px;\n  border-radius: 50%;\n  background: #c0396b;\n  cursor: pointer;\n  box-shadow: 0 1px 3px rgba(0,0,0,0.2);\n}\n#wb-app .wb-cat-slider::-moz-range-thumb {\n  width: 15px;\n  height: 15px;\n  border-radius: 50%;\n  background: #c0396b;\n  cursor: pointer;\n  border: none;\n}\n#wb-app .wb-warning {\n  font-size: 0.8rem;\n  color: #e65100;\n  background: #fff3e0;\n  border: 1px solid #ffcc80;\n  border-radius: 6px;\n  padding: 0.4rem 0.7rem;\n  margin-bottom: 0.8rem;\n  display: none;\n}\n#wb-app .wb-chart-title {\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #999;\n  margin-bottom: 0.6rem;\n  text-align: center;\n}\n#wb-app canvas#wb-pie {\n  border-radius: 50%;\n  box-shadow: 0 2px 12px rgba(192,57,107,0.10);\n}\n#wb-app .wb-legend {\n  margin-top: 0.9rem;\n  width: 100%;\n}\n#wb-app .wb-legend-item {\n  display: flex;\n  align-items: center;\n  gap: 7px;\n  font-size: 0.76rem;\n  color: #555;\n  margin-bottom: 0.28rem;\n}\n#wb-app .wb-legend-dot {\n  width: 10px;\n  height: 10px;\n  border-radius: 3px;\n  flex-shrink: 0;\n}\n#wb-app .wb-per-person {\n  background: #fff5f8;\n  border: 1px solid #f0c4d4;\n  border-radius: 8px;\n  padding: 0.75rem 0.9rem;\n  margin-top: 0.9rem;\n  font-size: 0.85rem;\n  color: #555;\n  text-align: center;\n  line-height: 1.6;\n}\n#wb-app .wb-per-person strong {\n  font-size: 1.05rem;\n  color: #c0396b;\n}\n#wb-app .wb-cta {\n  margin-top: 2rem;\n  background: linear-gradient(135deg, #fffbf0, #fff8e8);\n  border: 1.5px solid #f5d08c;\n  border-radius: 10px;\n  padding: 1rem 1.3rem;\n  font-size: 0.92rem;\n  color: #555;\n  line-height: 1.7;\n}\n#wb-app .wb-cta a {\n  color: #b8860b;\n  font-weight: 700;\n  text-decoration: none;\n}\n#wb-app .wb-cta a:hover {\n  text-decoration: underline;\n}\n@media (max-width: 620px) {\n  #wb-app .wb-chart-col {\n    flex: 1 1 100%;\n    align-items: center;\n  }\n  #wb-app .wb-status-bar {\n    gap: 10px;\n  }\n  #wb-app .wb-goshugi-banner {\n    gap: 10px;\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"wb-intro\"\u003e\n  総予算・ゲスト人数・ご祝儀収入を入力するだけで、結婚式の費用内訳が一目でわかります。スライダーで各項目の割合を自由に調整しながら、自己負担額をリアルタイムで確認できます。\n\u003c/div\u003e\n\u003cdiv class=\"wb-top-row\"\u003e\n  \u003cdiv class=\"wb-top-card\"\u003e\n    \u003clabel for=\"wb-total-budget\"\u003e総予算（円）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"wb-total-budget\" value=\"3000000\" min=\"0\" step=\"10000\" placeholder=\"3000000\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wb-top-card\"\u003e\n    \u003clabel for=\"wb-guest-count\"\u003e招待ゲスト人数（名）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"wb-guest-count\" value=\"80\" min=\"1\" step=\"1\" placeholder=\"80\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wb-goshugi-card\"\u003e\n    \u003clabel for=\"wb-goshugi\"\u003eご祝儀収入見込（円）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"wb-goshugi\" value=\"2000000\" min=\"0\" step=\"10000\" placeholder=\"2000000\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wb-status-bar\"\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"wb-status-label\"\u003e総予算\u003c/div\u003e\n    \u003cdiv class=\"wb-status-amount\" id=\"wb-disp-budget\"\u003e300万円\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"wb-status-label\"\u003e配分合計\u003c/div\u003e\n    \u003cdiv class=\"wb-status-amount\" id=\"wb-disp-allocated\"\u003e300万円\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"wb-disp-diff\" class=\"wb-status-diff exact\"\u003e過不足なし\u003c/div\u003e\n  \u003cdiv class=\"wb-progress-wrap\"\u003e\n    \u003cdiv class=\"wb-status-label\" style=\"margin-bottom:0.3rem;\"\u003e配分率\u003c/div\u003e\n    \u003cdiv class=\"wb-progress-track\"\u003e\n      \u003cdiv class=\"wb-progress-fill\" id=\"wb-progress-fill\" style=\"width:100%;background:#c0396b;\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"font-size:0.76rem;color:#bbb;margin-top:3px;\" id=\"wb-pct-total-label\"\u003e合計 100%\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wb-goshugi-banner\"\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"wb-status-label\"\u003eご祝儀収入見込\u003c/div\u003e\n    \u003cdiv class=\"wb-status-amount\" id=\"wb-disp-goshugi\"\u003e200万円\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"wb-status-label\"\u003e自己負担額（予測）\u003c/div\u003e\n    \u003cdiv class=\"wb-status-amount\" id=\"wb-disp-jifutan\"\u003e100万円\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"wb-jishutankin\"\u003eお一人あたりのご祝儀目安：\u003cstrong id=\"wb-per-goshugi\"\u003e2.5万円\u003c/strong\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"wb-pct-warning\" class=\"wb-warning\"\u003e\u003c/div\u003e\n\u003cdiv class=\"wb-main\"\u003e\n  \u003cdiv class=\"wb-categories\" id=\"wb-categories-list\"\u003e\n    \u003c!-- Rows injected by JS --\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wb-chart-col\"\u003e\n    \u003cdiv class=\"wb-chart-title\"\u003e費用内訳グラフ\u003c/div\u003e\n    \u003ccanvas id=\"wb-pie\" width=\"220\" height=\"220\"\u003e\u003c/canvas\u003e\n    \u003cdiv class=\"wb-legend\" id=\"wb-legend\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"wb-per-person\" id=\"wb-per-person\"\u003e\n      ゲスト1人あたりの費用\u003cbr\u003e\n      \u003cstrong id=\"wb-per-person-val\"\u003e3.75万円\u003c/strong\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wb-cta\"\u003e\n\u003cblockquote\u003e\n\u003cp\u003e結婚資金の管理を効率化 → \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計で家計を自動管理\u003c/a\u003e\n\u003c/p\u003e","title":"結婚式費用シミュレーター - 結婚式の予算を簡単計算"},{"content":" 最終月経開始日または排卵（受精）日を入力するだけで、出産予定日・現在の妊娠週数・トリメスター・重要な健診スケジュールを自動計算します。ナーゲレ法則（最終月経日 + 280日）を使用します。 出産予定日計算ツール 最終月経開始日（LMP） 生理が始まった日を選択してください または 排卵日・受精日（わかる場合） 排卵日から最終月経日（約14日前）を自動換算します 最終月経開始日または排卵日を入力してください。 出産予定日を計算する\n出産予定日（EDD） 現在の妊娠週数 — 週 週内の日数 — 日 トリメスター — 期 妊娠の進捗 1週 第1期（1〜13週） 第2期（14〜27週） 第3期（28週〜） 40週 主要な健診・マイルストーン 週別 赤ちゃんの発育ハイライト 妊娠8〜10週 主要臓器が形成される時期 胎芽から胎児へ移行します。小さな指や足の指が現れ始め、心拍数は約170回/分。顔立ちも少しずつはっきりしてきます。 妊娠18〜22週 胎動の始まりと形態異常スクリーニング 初めて赤ちゃんの動き（胎動）を感じる方が多い時期です。妊娠20週前後の胎児超音波検査（形態スクリーニング）では、主要臓器の形態確認と性別確認ができます。 妊娠28〜32週 脳の急速な発達期 脳に特徴的なしわが形成されます。目の開閉ができるようになり、肺も出産に向けて成熟を始めます。 妊娠37〜40週 正期産 — 出産準備完了 37週以降は「正期産」となり、いつ出産してもよい時期です。体重増加が続き、免疫抗体の移行も進みます。 出産費用の管理も簡単 → freee会計で家計を自動管理 関連ツール 年齢計算 → 年齢計算ツール 犬の年齢計算 → 犬の年齢計算ツール ","permalink":"https://productivity-works.com/ja/tools/pregnancy-due-date-calculator/","summary":"\u003cdiv id=\"pdd-app\"\u003e\n\u003cstyle\u003e\n#pdd-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 760px;\n  margin: 0 auto;\n  color: #2d2d2d;\n  line-height: 1.7;\n}\n\n#pdd-app h2 {\n  font-size: 1.4rem;\n  font-weight: 700;\n  color: #c2185b;\n  margin: 0 0 1rem 0;\n}\n\n#pdd-app h3 {\n  font-size: 1.05rem;\n  font-weight: 600;\n  margin: 0 0 0.75rem 0;\n  color: #2d2d2d;\n}\n\n#pdd-app .pdd-intro {\n  background: #fce4ec;\n  border-left: 4px solid #e91e63;\n  border-radius: 0 8px 8px 0;\n  padding: 1rem 1.25rem;\n  margin-bottom: 1.5rem;\n  font-size: 0.95rem;\n  color: #555;\n}\n\n#pdd-app .pdd-card {\n  background: #fff;\n  border: 1px solid #f0c0d0;\n  border-radius: 12px;\n  padding: 1.5rem;\n  margin-bottom: 1.5rem;\n  box-shadow: 0 2px 8px rgba(194,24,91,0.06);\n}\n\n#pdd-app .pdd-input-group {\n  margin-bottom: 1.25rem;\n}\n\n#pdd-app .pdd-input-group label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 0.4rem;\n  font-size: 0.9rem;\n  color: #444;\n}\n\n#pdd-app .pdd-input-group input[type=\"date\"] {\n  width: 100%;\n  padding: 0.65rem 0.9rem;\n  border: 2px solid #f0c0d0;\n  border-radius: 8px;\n  font-size: 1rem;\n  color: #2d2d2d;\n  background: #fff;\n  box-sizing: border-box;\n  transition: border-color 0.2s;\n  outline: none;\n}\n\n#pdd-app .pdd-input-group input[type=\"date\"]:focus {\n  border-color: #e91e63;\n}\n\n#pdd-app .pdd-hint {\n  font-size: 0.8rem;\n  color: #aaa;\n  margin-top: 0.3rem;\n}\n\n#pdd-app .pdd-divider {\n  display: flex;\n  align-items: center;\n  gap: 0.75rem;\n  margin: 1rem 0;\n  color: #aaa;\n  font-size: 0.85rem;\n  font-weight: 600;\n}\n\n#pdd-app .pdd-divider::before,\n#pdd-app .pdd-divider::after {\n  content: '';\n  flex: 1;\n  height: 1px;\n  background: #f0c0d0;\n}\n\n#pdd-app .pdd-btn {\n  display: inline-block;\n  background: #e91e63;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  padding: 0.75rem 2rem;\n  font-size: 1rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.2s, transform 0.1s;\n  width: 100%;\n  margin-top: 0.5rem;\n}\n\n#pdd-app .pdd-btn:hover {\n  background: #c2185b;\n  transform: translateY(-1px);\n}\n\n#pdd-app .pdd-btn:active {\n  transform: translateY(0);\n}\n\n#pdd-app .pdd-result {\n  display: none;\n}\n\n#pdd-app .pdd-result.visible {\n  display: block;\n}\n\n#pdd-app .pdd-due-date-box {\n  background: linear-gradient(135deg, #e91e63 0%, #c2185b 100%);\n  color: #fff;\n  border-radius: 12px;\n  padding: 1.5rem;\n  text-align: center;\n  margin-bottom: 1.5rem;\n}\n\n#pdd-app .pdd-due-date-box .pdd-due-label {\n  font-size: 0.9rem;\n  opacity: 0.85;\n  margin-bottom: 0.4rem;\n  font-weight: 500;\n}\n\n#pdd-app .pdd-due-date-box .pdd-due-value {\n  font-size: 2rem;\n  font-weight: 800;\n  letter-spacing: 0.02em;\n  margin-bottom: 0.5rem;\n}\n\n#pdd-app .pdd-due-date-box .pdd-due-sub {\n  font-size: 0.9rem;\n  opacity: 0.85;\n}\n\n#pdd-app .pdd-stats-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 1rem;\n  margin-bottom: 1.5rem;\n}\n\n@media (max-width: 520px) {\n  #pdd-app .pdd-stats-grid {\n    grid-template-columns: 1fr 1fr;\n  }\n}\n\n#pdd-app .pdd-stat-box {\n  background: #fce4ec;\n  border-radius: 10px;\n  padding: 0.9rem 0.75rem;\n  text-align: center;\n}\n\n#pdd-app .pdd-stat-box .pdd-stat-label {\n  font-size: 0.72rem;\n  color: #888;\n  font-weight: 600;\n  margin-bottom: 0.3rem;\n}\n\n#pdd-app .pdd-stat-box .pdd-stat-value {\n  font-size: 1.4rem;\n  font-weight: 800;\n  color: #c2185b;\n  line-height: 1.1;\n}\n\n#pdd-app .pdd-stat-box .pdd-stat-unit {\n  font-size: 0.75rem;\n  color: #c2185b;\n  font-weight: 500;\n}\n\n#pdd-app .pdd-trimester-bar {\n  background: #fce4ec;\n  border-radius: 10px;\n  padding: 1rem 1.25rem;\n  margin-bottom: 1.5rem;\n}\n\n#pdd-app .pdd-trimester-bar h3 {\n  margin-bottom: 0.75rem;\n  font-size: 0.9rem;\n  color: #888;\n}\n\n#pdd-app .pdd-progress-wrap {\n  background: #f8bbd0;\n  border-radius: 999px;\n  height: 14px;\n  position: relative;\n  overflow: hidden;\n  margin-bottom: 0.4rem;\n}\n\n#pdd-app .pdd-progress-fill {\n  height: 100%;\n  background: linear-gradient(90deg, #e91e63, #c2185b);\n  border-radius: 999px;\n  transition: width 0.6s ease;\n}\n\n#pdd-app .pdd-trimester-labels {\n  display: flex;\n  justify-content: space-between;\n  font-size: 0.7rem;\n  color: #aaa;\n  font-weight: 500;\n}\n\n#pdd-app .pdd-trimester-badge {\n  display: inline-block;\n  background: #e91e63;\n  color: #fff;\n  border-radius: 999px;\n  padding: 0.2rem 0.9rem;\n  font-size: 0.82rem;\n  font-weight: 700;\n  margin-top: 0.6rem;\n}\n\n#pdd-app .pdd-milestones {\n  margin-bottom: 1.5rem;\n}\n\n#pdd-app .pdd-milestone-item {\n  display: flex;\n  align-items: flex-start;\n  gap: 0.9rem;\n  padding: 0.8rem 0;\n  border-bottom: 1px solid #fce4ec;\n}\n\n#pdd-app .pdd-milestone-item:last-child {\n  border-bottom: none;\n}\n\n#pdd-app .pdd-milestone-icon {\n  width: 36px;\n  height: 36px;\n  border-radius: 50%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1rem;\n  flex-shrink: 0;\n  background: #fce4ec;\n}\n\n#pdd-app .pdd-milestone-icon.past {\n  background: #e0e0e0;\n}\n\n#pdd-app .pdd-milestone-icon.current {\n  background: #e91e63;\n}\n\n#pdd-app .pdd-milestone-body {\n  flex: 1;\n}\n\n#pdd-app .pdd-milestone-body .pdd-ms-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  gap: 0.5rem;\n  margin-bottom: 0.2rem;\n  flex-wrap: wrap;\n}\n\n#pdd-app .pdd-milestone-body .pdd-ms-name {\n  font-weight: 700;\n  font-size: 0.9rem;\n  color: #2d2d2d;\n}\n\n#pdd-app .pdd-milestone-body .pdd-ms-date {\n  font-size: 0.78rem;\n  color: #e91e63;\n  font-weight: 600;\n  white-space: nowrap;\n}\n\n#pdd-app .pdd-milestone-body .pdd-ms-desc {\n  font-size: 0.82rem;\n  color: #777;\n}\n\n#pdd-app .pdd-dev-section {\n  margin-bottom: 1.5rem;\n}\n\n#pdd-app .pdd-dev-card {\n  background: #fff9fb;\n  border: 1px solid #f8bbd0;\n  border-radius: 10px;\n  padding: 1rem 1.1rem;\n  margin-bottom: 0.75rem;\n}\n\n#pdd-app .pdd-dev-card .pdd-dev-week {\n  font-weight: 800;\n  color: #e91e63;\n  font-size: 0.82rem;\n  margin-bottom: 0.2rem;\n}\n\n#pdd-app .pdd-dev-card .pdd-dev-title {\n  font-weight: 700;\n  font-size: 0.95rem;\n  margin-bottom: 0.25rem;\n}\n\n#pdd-app .pdd-dev-card .pdd-dev-desc {\n  font-size: 0.85rem;\n  color: #666;\n}\n\n#pdd-app .pdd-cta {\n  background: #fff3e0;\n  border: 1px solid #ffcc80;\n  border-radius: 10px;\n  padding: 1.1rem 1.25rem;\n  margin-top: 1.5rem;\n  font-size: 0.92rem;\n  color: #555;\n}\n\n#pdd-app .pdd-cta strong {\n  color: #e65100;\n}\n\n#pdd-app .pdd-cta a {\n  color: #e65100;\n  font-weight: 700;\n}\n\n#pdd-app .pdd-error {\n  display: none;\n  color: #c2185b;\n  background: #fce4ec;\n  border-radius: 8px;\n  padding: 0.65rem 1rem;\n  font-size: 0.88rem;\n  font-weight: 600;\n  margin-top: 0.5rem;\n}\n\n#pdd-app .pdd-error.visible {\n  display: block;\n}\n\u003c/style\u003e\n\u003cdiv class=\"pdd-intro\"\u003e\n  \u003cstrong\u003e最終月経開始日\u003c/strong\u003eまたは\u003cstrong\u003e排卵（受精）日\u003c/strong\u003eを入力するだけで、出産予定日・現在の妊娠週数・トリメスター・重要な健診スケジュールを自動計算します。ナーゲレ法則（最終月経日 + 280日）を使用します。\n\u003c/div\u003e\n\u003cdiv class=\"pdd-card\"\u003e\n  \u003ch2\u003e出産予定日計算ツール\u003c/h2\u003e\n  \u003cdiv class=\"pdd-input-group\"\u003e\n    \u003clabel for=\"pdd-lmp\"\u003e最終月経開始日（LMP）\u003c/label\u003e\n    \u003cinput type=\"date\" id=\"pdd-lmp\" /\u003e\n    \u003cdiv class=\"pdd-hint\"\u003e生理が始まった日を選択してください\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pdd-divider\"\u003eまたは\u003c/div\u003e\n  \u003cdiv class=\"pdd-input-group\"\u003e\n    \u003clabel for=\"pdd-conception\"\u003e排卵日・受精日（わかる場合）\u003c/label\u003e\n    \u003cinput type=\"date\" id=\"pdd-conception\" /\u003e\n    \u003cdiv class=\"pdd-hint\"\u003e排卵日から最終月経日（約14日前）を自動換算します\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pdd-error\" id=\"pdd-error\"\u003e最終月経開始日または排卵日を入力してください。\u003c/div\u003e\n\u003cp\u003e\u003cbutton class=\"pdd-btn\" onclick=\"pddCalculate()\"\u003e出産予定日を計算する\u003c/button\u003e\u003c/p\u003e","title":"出産予定日計算ツール - 赤ちゃんの予定日を計算"},{"content":" 文字数制限: 0 / 0 上限を超えています 文字数制限: Twitter/X (140) X拡張 (280) ブログタイトル (32) メタディスクリプション (160) Instagram (400) 制限なし コピー 全角→半角 半角→全角 カタカナ→ひらがな ひらがな→カタカナ クリア 文字数（含む） 0 スペース含む 文字数（除く） 0 スペース除く 単語数 0 語 文の数 0 文 段落数 0 段落 読了時間 0 分（500字/分） スピーチ時間 0 分（300字/分） バイト数 0 バイト (UTF-8) 頻出キーワード Top 10 順位 キーワード 出現回数 頻度 テキストを入力すると頻出キーワードが表示されます クリップボードにコピーしました 文字数カウンターの使い方 テキストエリアに文章を入力または貼り付けるだけで、文字数・単語数・読了時間などの統計が即座に表示されます。原稿やブログ記事、SNS投稿など、あらゆるテキストに対応しており、入力のたびにリアルタイムで数値が更新されます。\n文字数制限モードを使えば、Twitter/Xの140文字やブログタイトルの32文字など、プリセットの上限を選ぶだけで入力状況をプログレスバーで確認できます。独自の文字数制限を設定することも可能です。テキスト変換機能では、全角・半角の統一やひらがな・カタカナの変換が一クリックで行えるため、文章の表記ゆれを簡単に修正できます。\n頻出キーワードの分析では、助詞や助動詞などのストップワードを除いた意味のある語が上位10件表示されます。SEO対策としてキーワードが適切に繰り返されているか確認したり、意図せず特定の単語に偏っていないかチェックしたりするのに役立ちます。\n文字数が重要な理由 SNSでは各プラットフォームに文字数制限があります。Twitter/Xは140文字（日本語）、Instagramのキャプションも長すぎると「続きを読む」で折りたたまれ、読了率が下がります。投稿前に正確な文字数を把握しておくことで、伝えたいメッセージを余すことなく収めることができます。ブログやウェブコンテンツでは、メタディスクリプションの推奨文字数（120〜160文字）やタイトルタグの最適な長さ（28〜32文字程度）を守ることがSEO上有利に働きます。\nレポートや論文では「○○字以内」「○○字以上」という要件が課されることが多く、文字数カウンターは必須ツールです。スペースを含む・含まないの切り替えや、バイト数の確認機能もあるため、提出規定に正確に対応できます。ビジネス文書でも、メールの長さや企画書のサマリーを適切な分量に収めることで、読み手への配慮と情報の明快さを両立できます。読了時間の目安が分かれば、読者が「読む価値があるか」を判断しやすいコンテンツ設計にも役立ちます。\n関連ツール ポモドーロテクニックで集中して執筆 → ポモドーロタイマー 安全なパスワードを即座に生成 → パスワード生成ツール フリーランスの適正報酬を計算 → フリーランス報酬計算ツール マークダウンエディターが必要？ → マークダウンプレビュー — リアルタイムでプレビュー\nダミーテキストを生成 → ダミーテキスト生成ツール — レイアウト確認用のプレースホルダーを即作成\nライター・フリーランスの経理を効率化\n文章を書くのは得意でも、経費管理や確定申告は面倒…。クラウド会計ソフト「freee」なら、レシート撮影で経費入力完了。確定申告もスマホで簡単に。\nfreee会計を無料で試す 関連記事 AIで高品質な文章を作成するコツ7つ【プロが使うテクニック】 ChatGPTプロンプトの書き方コツ【2026年版】すぐ使える例文テンプレート付き すぐ使えるChatGPTプロンプトテンプレート20選【コピペOK】 ","permalink":"https://productivity-works.com/ja/tools/moji-counter/","summary":"\u003cdiv id=\"wordcount-app\"\u003e\n\u003cstyle\u003e\n#wordcount-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 16px;\n  color: #1e1b4b;\n}\n\n#wordcount-app * {\n  box-sizing: border-box;\n}\n\n/* テキストエリア */\n#wc-textarea {\n  width: 100%;\n  min-height: 220px;\n  padding: 14px 16px;\n  font-size: 15px;\n  line-height: 1.7;\n  border: 2px solid #c4b5fd;\n  border-radius: 12px;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.2s;\n  background: #faf5ff;\n  color: #1e1b4b;\n  font-family: inherit;\n}\n\n#wc-textarea:focus {\n  border-color: #7c3aed;\n  background: #fff;\n  box-shadow: 0 0 0 3px rgba(124,58,237,0.12);\n}\n\n/* 制限モードバー */\n#wc-limit-bar-wrap {\n  margin-top: 10px;\n  display: none;\n}\n\n#wc-limit-label {\n  font-size: 13px;\n  color: #6d28d9;\n  margin-bottom: 4px;\n  display: flex;\n  justify-content: space-between;\n}\n\n#wc-progress-track {\n  width: 100%;\n  height: 10px;\n  background: #ede9fe;\n  border-radius: 99px;\n  overflow: hidden;\n}\n\n#wc-progress-bar {\n  height: 100%;\n  background: linear-gradient(90deg, #7c3aed, #a78bfa);\n  border-radius: 99px;\n  transition: width 0.3s, background 0.3s;\n  width: 0%;\n}\n\n#wc-progress-bar.over {\n  background: linear-gradient(90deg, #dc2626, #f87171);\n}\n\n/* 制限設定 */\n#wc-limit-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n  margin-top: 12px;\n}\n\n#wc-limit-controls label {\n  font-size: 13px;\n  color: #5b21b6;\n  white-space: nowrap;\n}\n\n#wc-limit-input {\n  width: 90px;\n  padding: 5px 8px;\n  border: 1px solid #c4b5fd;\n  border-radius: 6px;\n  font-size: 13px;\n  color: #1e1b4b;\n  background: #faf5ff;\n  outline: none;\n}\n\n#wc-limit-input:focus {\n  border-color: #7c3aed;\n}\n\n.wc-preset-btn {\n  padding: 4px 10px;\n  background: #ede9fe;\n  color: #5b21b6;\n  border: 1px solid #c4b5fd;\n  border-radius: 99px;\n  font-size: 12px;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n  white-space: nowrap;\n}\n\n.wc-preset-btn:hover {\n  background: #7c3aed;\n  color: #fff;\n  border-color: #7c3aed;\n}\n\n/* ボタン群 */\n#wc-action-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 14px;\n}\n\n.wc-action-btn {\n  padding: 7px 14px;\n  border-radius: 8px;\n  border: none;\n  font-size: 13px;\n  cursor: pointer;\n  font-family: inherit;\n  font-weight: 600;\n  transition: background 0.15s, opacity 0.15s, transform 0.1s;\n}\n\n.wc-action-btn:active {\n  transform: scale(0.97);\n}\n\n.wc-btn-primary {\n  background: #7c3aed;\n  color: #fff;\n}\n\n.wc-btn-primary:hover {\n  background: #6d28d9;\n}\n\n.wc-btn-secondary {\n  background: #ede9fe;\n  color: #5b21b6;\n}\n\n.wc-btn-secondary:hover {\n  background: #ddd6fe;\n}\n\n.wc-btn-danger {\n  background: #fee2e2;\n  color: #b91c1c;\n}\n\n.wc-btn-danger:hover {\n  background: #fecaca;\n}\n\n/* 統計カードグリッド */\n#wc-stats-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n  gap: 12px;\n  margin-top: 20px;\n}\n\n.wc-stat-card {\n  background: linear-gradient(135deg, #faf5ff 0%, #ede9fe 100%);\n  border: 1px solid #c4b5fd;\n  border-radius: 12px;\n  padding: 14px 16px;\n  text-align: center;\n  transition: box-shadow 0.2s, transform 0.2s;\n}\n\n.wc-stat-card:hover {\n  box-shadow: 0 4px 16px rgba(124,58,237,0.15);\n  transform: translateY(-2px);\n}\n\n.wc-stat-label {\n  font-size: 11px;\n  color: #6d28d9;\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  margin-bottom: 6px;\n  text-transform: uppercase;\n}\n\n.wc-stat-value {\n  font-size: 26px;\n  font-weight: 700;\n  color: #7c3aed;\n  line-height: 1.1;\n}\n\n.wc-stat-unit {\n  font-size: 11px;\n  color: #8b5cf6;\n  margin-top: 3px;\n}\n\n/* セクション見出し */\n.wc-section-title {\n  font-size: 14px;\n  font-weight: 700;\n  color: #5b21b6;\n  margin: 24px 0 10px;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n.wc-section-title::before {\n  content: '';\n  display: inline-block;\n  width: 4px;\n  height: 16px;\n  background: #7c3aed;\n  border-radius: 2px;\n}\n\n/* 頻出単語テーブル */\n#wc-freq-table-wrap {\n  overflow-x: auto;\n}\n\n#wc-freq-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n\n#wc-freq-table th {\n  background: #7c3aed;\n  color: #fff;\n  padding: 8px 12px;\n  text-align: left;\n  font-weight: 600;\n}\n\n#wc-freq-table th:first-child { border-radius: 8px 0 0 0; }\n#wc-freq-table th:last-child  { border-radius: 0 8px 0 0; }\n\n#wc-freq-table td {\n  padding: 8px 12px;\n  border-bottom: 1px solid #ede9fe;\n  color: #1e1b4b;\n}\n\n#wc-freq-table tr:nth-child(even) td {\n  background: #faf5ff;\n}\n\n#wc-freq-table tr:hover td {\n  background: #ede9fe;\n}\n\n.wc-freq-bar-cell {\n  width: 140px;\n}\n\n.wc-freq-bar-bg {\n  background: #ede9fe;\n  border-radius: 99px;\n  height: 8px;\n  overflow: hidden;\n}\n\n.wc-freq-bar-fill {\n  height: 100%;\n  background: linear-gradient(90deg, #7c3aed, #a78bfa);\n  border-radius: 99px;\n  transition: width 0.4s;\n}\n\n/* コピー完了トースト */\n#wc-toast {\n  position: fixed;\n  bottom: 28px;\n  left: 50%;\n  transform: translateX(-50%) translateY(20px);\n  background: #1e1b4b;\n  color: #fff;\n  padding: 10px 24px;\n  border-radius: 99px;\n  font-size: 14px;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 0.3s, transform 0.3s;\n  z-index: 9999;\n  white-space: nowrap;\n}\n\n#wc-toast.show {\n  opacity: 1;\n  transform: translateX(-50%) translateY(0);\n}\n\n/* レスポンシブ */\n@media (max-width: 600px) {\n  #wc-stats-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 8px;\n  }\n  .wc-stat-value { font-size: 20px; }\n  #wc-action-row { gap: 6px; }\n  .wc-action-btn { font-size: 12px; padding: 6px 10px; }\n}\n\u003c/style\u003e\n\u003c!-- テキストエリア --\u003e\n\u003ctextarea id=\"wc-textarea\" placeholder=\"ここにテキストを入力または貼り付けてください。文字数・単語数・読了時間などをリアルタイムで計測します。\"\u003e\u003c/textarea\u003e\n\u003c!-- 文字数制限バー --\u003e\n\u003cdiv id=\"wc-limit-bar-wrap\"\u003e\n  \u003cdiv id=\"wc-limit-label\"\u003e\n    \u003cspan id=\"wc-limit-text\"\u003e文字数制限: 0 / 0\u003c/span\u003e\n    \u003cspan id=\"wc-limit-over\" style=\"color:#dc2626;display:none;\"\u003e上限を超えています\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"wc-progress-track\"\u003e\u003cdiv id=\"wc-progress-bar\"\u003e\u003c/div\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 制限設定 --\u003e\n\u003cdiv id=\"wc-limit-controls\"\u003e\n  \u003clabel\u003e文字数制限:\u003c/label\u003e\n  \u003cinput type=\"number\" id=\"wc-limit-input\" placeholder=\"上限文字数\" min=\"1\" /\u003e\n  \u003cbutton class=\"wc-preset-btn\" data-limit=\"140\"\u003eTwitter/X (140)\u003c/button\u003e\n  \u003cbutton class=\"wc-preset-btn\" data-limit=\"280\"\u003eX拡張 (280)\u003c/button\u003e\n  \u003cbutton class=\"wc-preset-btn\" data-limit=\"32\"\u003eブログタイトル (32)\u003c/button\u003e\n  \u003cbutton class=\"wc-preset-btn\" data-limit=\"160\"\u003eメタディスクリプション (160)\u003c/button\u003e\n  \u003cbutton class=\"wc-preset-btn\" data-limit=\"400\"\u003eInstagram (400)\u003c/button\u003e\n  \u003cbutton class=\"wc-preset-btn\" data-limit=\"0\"\u003e制限なし\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- アクションボタン --\u003e\n\u003cdiv id=\"wc-action-row\"\u003e\n  \u003cbutton class=\"wc-action-btn wc-btn-primary\" id=\"wc-copy-btn\"\u003eコピー\u003c/button\u003e\n  \u003cbutton class=\"wc-action-btn wc-btn-secondary\" id=\"wc-zen-to-han\"\u003e全角→半角\u003c/button\u003e\n  \u003cbutton class=\"wc-action-btn wc-btn-secondary\" id=\"wc-han-to-zen\"\u003e半角→全角\u003c/button\u003e\n  \u003cbutton class=\"wc-action-btn wc-btn-secondary\" id=\"wc-kata-to-hira\"\u003eカタカナ→ひらがな\u003c/button\u003e\n  \u003cbutton class=\"wc-action-btn wc-btn-secondary\" id=\"wc-hira-to-kata\"\u003eひらがな→カタカナ\u003c/button\u003e\n  \u003cbutton class=\"wc-action-btn wc-btn-danger\" id=\"wc-clear-btn\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- 統計カード --\u003e\n\u003cdiv id=\"wc-stats-grid\"\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\n    \u003cdiv class=\"wc-stat-label\"\u003e文字数（含む）\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-value\" id=\"wc-chars-with\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-unit\"\u003eスペース含む\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\n    \u003cdiv class=\"wc-stat-label\"\u003e文字数（除く）\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-value\" id=\"wc-chars-without\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-unit\"\u003eスペース除く\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\n    \u003cdiv class=\"wc-stat-label\"\u003e単語数\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-value\" id=\"wc-words\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-unit\"\u003e語\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\n    \u003cdiv class=\"wc-stat-label\"\u003e文の数\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-value\" id=\"wc-sentences\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-unit\"\u003e文\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\n    \u003cdiv class=\"wc-stat-label\"\u003e段落数\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-value\" id=\"wc-paragraphs\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-unit\"\u003e段落\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\n    \u003cdiv class=\"wc-stat-label\"\u003e読了時間\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-value\" id=\"wc-read-time\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-unit\"\u003e分（500字/分）\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\n    \u003cdiv class=\"wc-stat-label\"\u003eスピーチ時間\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-value\" id=\"wc-speech-time\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-unit\"\u003e分（300字/分）\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\n    \u003cdiv class=\"wc-stat-label\"\u003eバイト数\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-value\" id=\"wc-bytes\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"wc-stat-unit\"\u003eバイト (UTF-8)\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 頻出単語 --\u003e\n\u003cdiv class=\"wc-section-title\"\u003e頻出キーワード Top 10\u003c/div\u003e\n\u003cdiv id=\"wc-freq-table-wrap\"\u003e\n  \u003ctable id=\"wc-freq-table\"\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n        \u003cth\u003e順位\u003c/th\u003e\n        \u003cth\u003eキーワード\u003c/th\u003e\n        \u003cth\u003e出現回数\u003c/th\u003e\n        \u003cth class=\"wc-freq-bar-cell\"\u003e頻度\u003c/th\u003e\n      \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody id=\"wc-freq-tbody\"\u003e\n      \u003ctr\u003e\u003ctd colspan=\"4\" style=\"color:#8b5cf6;text-align:center;padding:16px;\"\u003eテキストを入力すると頻出キーワードが表示されます\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\u003c!-- トースト --\u003e\n\u003cdiv id=\"wc-toast\"\u003eクリップボードにコピーしました\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var ta = document.getElementById('wc-textarea');\n  var limitInput = document.getElementById('wc-limit-input');\n  var limitBarWrap = document.getElementById('wc-limit-bar-wrap');\n  var limitText = document.getElementById('wc-limit-text');\n  var limitOver = document.getElementById('wc-limit-over');\n  var progressBar = document.getElementById('wc-progress-bar');\n  var toast = document.getElementById('wc-toast');\n  var currentLimit = 0;\n\n  // 日本語ストップワード\n  var stopWords = new Set([\n    'の','に','は','を','た','が','で','て','と','し','れ','さ','ある','いる','も',\n    'する','から','な','こと','として','い','や','れる','など','なり','ない','この',\n    'ため','その','あ','さ','せ','で','た','どの','という','とき','また','や',\n    'これ','それ','あれ','あの','その','この','あ','え','お','か','き','く','け',\n    'こ','さ','し','す','せ','そ','た','ち','つ','て','と','な','に','ぬ','ね',\n    'の','は','ひ','ふ','へ','ほ','ま','み','む','め','も','や','ゆ','よ','ら',\n    'り','る','れ','ろ','わ','を','ん','が','だ','で','ど','ば','ぱ','へ','べ',\n    'ぺ','ぼ','ぽ','より','から','まで','ので','のに','けど','けれど','しか',\n    'だけ','ほど','くらい','ぐらい','なら','てい','でき','いう','おり','あり',\n    'なっ','なり','でし','です','ます','ました','でした','ください','いただ',\n    'おり','てい','られ','られる','させ','しま','しまう','しまい','てしま',\n    'という','といっ','といえ','において','について','に関し','に対し',\n    'として','とし','により','によっ','のため','のよう','ような','ように',\n    'でき','でき','でも','でも','しかし','ただし','なお','また','さら','そして',\n    'ところ','もの','こと','とき','ため','わけ','はず','みた','もっ','それぞれ',\n    'いく','なる','すべ','するこ','らに','して','してい','しない','してい',\n    'できる','できない','い','う','え','お','あ','き','く','け','こ','さ',\n    'a','an','the','is','are','was','were','be','been','being','have','has','had',\n    'do','does','did','will','would','could','should','may','might','shall',\n    'and','or','but','if','in','on','at','to','for','of','with','by','from',\n    'this','that','these','those','it','its','we','our','you','your','they',\n    'their','i','my','me','he','she','his','her','him','us','not','no'\n  ]);\n\n  // バイト数計算\n  function getByteLength(str) {\n    var b = 0;\n    for (var i = 0; i \u003c str.length; i++) {\n      var c = str.charCodeAt(i);\n      if (c \u003c= 0x7F) b += 1;\n      else if (c \u003c= 0x7FF) b += 2;\n      else if (c \u003c= 0xFFFF) b += 3;\n      else b += 4;\n    }\n    return b;\n  }\n\n  // 単語分割（日本語混在対応）\n  function tokenize(text) {\n    // 英数字トークン + ひらがな/カタカナ/漢字2文字以上の塊\n    var tokens = [];\n    // 英数字ワード\n    var en = text.match(/[a-zA-Z0-9]+/g) || [];\n    tokens = tokens.concat(en);\n    // 日本語: 漢字・カタカナ・ひらがなの2文字以上の塊を抽出\n    var ja = text.match(/[\\u3040-\\u309f\\u30a0-\\u30ff\\u4e00-\\u9fff\\uff66-\\uff9f]{2,}/g) || [];\n    tokens = tokens.concat(ja);\n    return tokens;\n  }\n\n  // 頻出キーワード計算\n  function getFrequency(text) {\n    var tokens = tokenize(text);\n    var freq = {};\n    for (var i = 0; i \u003c tokens.length; i++) {\n      var w = tokens[i].toLowerCase();\n      if (stopWords.has(w)) continue;\n      if (w.length \u003c 2) continue;\n      freq[w] = (freq[w] || 0) + 1;\n    }\n    var arr = Object.keys(freq).map(function(k) { return { word: k, count: freq[k] }; });\n    arr.sort(function(a, b) { return b.count - a.count; });\n    return arr.slice(0, 10);\n  }\n\n  // 段落数\n  function countParagraphs(text) {\n    if (!text.trim()) return 0;\n    var paras = text.split(/\\n\\s*\\n/).filter(function(p) { return p.trim().length \u003e 0; });\n    return paras.length || (text.trim() ? 1 : 0);\n  }\n\n  // 文の数（日本語句点・英語ピリオド）\n  function countSentences(text) {\n    if (!text.trim()) return 0;\n    var matches = text.match(/[。！？!?.]+/g);\n    return matches ? matches.length : (text.trim() ? 1 : 0);\n  }\n\n  // 単語数（英語スペース区切り + 日本語はセグメント）\n  function countWords(text) {\n    if (!text.trim()) return 0;\n    var enWords = (text.match(/[a-zA-Z0-9]+(?:['\\-][a-zA-Z0-9]+)*/g) || []).length;\n    var jaSegments = (text.match(/[\\u3040-\\u309f\\u30a0-\\u30ff\\u4e00-\\u9fff\\uff66-\\uff9f]+/g) || []);\n    var jaCount = 0;\n    for (var i = 0; i \u003c jaSegments.length; i++) {\n      jaCount += Math.ceil(jaSegments[i].length / 3);\n    }\n    return enWords + jaCount;\n  }\n\n  // 時間フォーマット\n  function formatTime(minutes) {\n    if (minutes \u003c 1) return '\u003c 1';\n    return Math.ceil(minutes).toString();\n  }\n\n  // 統計更新\n  function updateStats() {\n    var text = ta.value;\n    var withSpaces = text.length;\n    var withoutSpaces = text.replace(/[\\s\\u3000]/g, '').length;\n    var words = countWords(text);\n    var sentences = countSentences(text);\n    var paragraphs = countParagraphs(text);\n    var readMin = withSpaces / 500;\n    var speechMin = withSpaces / 300;\n    var bytes = getByteLength(text);\n\n    document.getElementById('wc-chars-with').textContent = withSpaces.toLocaleString();\n    document.getElementById('wc-chars-without').textContent = withoutSpaces.toLocaleString();\n    document.getElementById('wc-words').textContent = words.toLocaleString();\n    document.getElementById('wc-sentences').textContent = sentences.toLocaleString();\n    document.getElementById('wc-paragraphs').textContent = paragraphs.toLocaleString();\n    document.getElementById('wc-read-time').textContent = formatTime(readMin);\n    document.getElementById('wc-speech-time').textContent = formatTime(speechMin);\n    document.getElementById('wc-bytes').textContent = bytes.toLocaleString();\n\n    // 制限バー\n    if (currentLimit \u003e 0) {\n      var pct = Math.min((withSpaces / currentLimit) * 100, 100);\n      progressBar.style.width = pct + '%';\n      limitText.textContent = '文字数制限: ' + withSpaces.toLocaleString() + ' / ' + currentLimit.toLocaleString();\n      if (withSpaces \u003e currentLimit) {\n        progressBar.classList.add('over');\n        limitOver.style.display = 'inline';\n      } else {\n        progressBar.classList.remove('over');\n        limitOver.style.display = 'none';\n      }\n    }\n\n    // 頻出キーワード\n    updateFreqTable(text);\n  }\n\n  // 頻出テーブル更新\n  function updateFreqTable(text) {\n    var tbody = document.getElementById('wc-freq-tbody');\n    var freq = getFrequency(text);\n    if (freq.length === 0) {\n      tbody.innerHTML = '\u003ctr\u003e\u003ctd colspan=\"4\" style=\"color:#8b5cf6;text-align:center;padding:16px;\"\u003eテキストを入力すると頻出キーワードが表示されます\u003c/td\u003e\u003c/tr\u003e';\n      return;\n    }\n    var maxCount = freq[0].count;\n    var html = '';\n    for (var i = 0; i \u003c freq.length; i++) {\n      var pct = maxCount \u003e 0 ? Math.round((freq[i].count / maxCount) * 100) : 0;\n      html += '\u003ctr\u003e'\n        + '\u003ctd style=\"color:#8b5cf6;font-weight:700;\"\u003e' + (i + 1) + '\u003c/td\u003e'\n        + '\u003ctd style=\"font-weight:600;\"\u003e' + escHtml(freq[i].word) + '\u003c/td\u003e'\n        + '\u003ctd style=\"color:#7c3aed;font-weight:700;\"\u003e' + freq[i].count + '\u003c/td\u003e'\n        + '\u003ctd class=\"wc-freq-bar-cell\"\u003e\u003cdiv class=\"wc-freq-bar-bg\"\u003e\u003cdiv class=\"wc-freq-bar-fill\" style=\"width:' + pct + '%\"\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e'\n        + '\u003c/tr\u003e';\n    }\n    tbody.innerHTML = html;\n  }\n\n  function escHtml(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  // リアルタイム更新\n  ta.addEventListener('input', updateStats);\n\n  // 制限入力\n  limitInput.addEventListener('input', function() {\n    var v = parseInt(limitInput.value, 10);\n    currentLimit = (isNaN(v) || v \u003c= 0) ? 0 : v;\n    if (currentLimit \u003e 0) {\n      limitBarWrap.style.display = 'block';\n    } else {\n      limitBarWrap.style.display = 'none';\n    }\n    updateStats();\n  });\n\n  // プリセットボタン\n  document.querySelectorAll('.wc-preset-btn').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      var lim = parseInt(btn.getAttribute('data-limit'), 10);\n      currentLimit = lim;\n      limitInput.value = lim \u003e 0 ? lim : '';\n      if (currentLimit \u003e 0) {\n        limitBarWrap.style.display = 'block';\n      } else {\n        limitBarWrap.style.display = 'none';\n      }\n      updateStats();\n    });\n  });\n\n  // コピー\n  document.getElementById('wc-copy-btn').addEventListener('click', function() {\n    var text = ta.value;\n    if (!text) return;\n    if (navigator.clipboard \u0026\u0026 navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).then(showToast);\n    } else {\n      ta.select();\n      document.execCommand('copy');\n      showToast();\n    }\n  });\n\n  function showToast() {\n    toast.classList.add('show');\n    setTimeout(function() { toast.classList.remove('show'); }, 2000);\n  }\n\n  // クリア\n  document.getElementById('wc-clear-btn').addEventListener('click', function() {\n    ta.value = '';\n    updateStats();\n    ta.focus();\n  });\n\n  // 全角→半角\n  document.getElementById('wc-zen-to-han').addEventListener('click', function() {\n    ta.value = ta.value.replace(/[！-～]/g, function(c) {\n      return String.fromCharCode(c.charCodeAt(0) - 0xFEE0);\n    }).replace(/　/g, ' ');\n    updateStats();\n  });\n\n  // 半角→全角\n  document.getElementById('wc-han-to-zen').addEventListener('click', function() {\n    ta.value = ta.value.replace(/[!-~]/g, function(c) {\n      return String.fromCharCode(c.charCodeAt(0) + 0xFEE0);\n    }).replace(/ /g, '　');\n    updateStats();\n  });\n\n  // カタカナ→ひらがな\n  document.getElementById('wc-kata-to-hira').addEventListener('click', function() {\n    ta.value = ta.value.replace(/[\\u30A1-\\u30F6]/g, function(c) {\n      return String.fromCharCode(c.charCodeAt(0) - 0x60);\n    });\n    updateStats();\n  });\n\n  // ひらがな→カタカナ\n  document.getElementById('wc-hira-to-kata').addEventListener('click', function() {\n    ta.value = ta.value.replace(/[\\u3041-\\u3096]/g, function(c) {\n      return String.fromCharCode(c.charCodeAt(0) + 0x60);\n    });\n    updateStats();\n  });\n\n  // 初期化\n  updateStats();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"文字数カウンターの使い方\"\u003e文字数カウンターの使い方\u003c/h2\u003e\n\u003cp\u003eテキストエリアに文章を入力または貼り付けるだけで、文字数・単語数・読了時間などの統計が即座に表示されます。原稿やブログ記事、SNS投稿など、あらゆるテキストに対応しており、入力のたびにリアルタイムで数値が更新されます。\u003c/p\u003e","title":"文字数カウンター - 無料オンライン文字数・単語数チェック"},{"content":"安全なパスワードをブラウザ内で即座に生成。入力内容はサーバーに一切送信されません。\nモード ランダム 発音しやすい パスフレーズ 文字数 大文字 (A-Z) 小文字 (a-z) 数字 (0-9) 記号 (!@#$...) 紛らわしい文字を除外 (0/O, l/1/I) 除外する文字: 単語数 先頭を大文字にする 末尾に数字を追加 区切り文字: 生成数 個まとめて生成 (最大20) 生成結果 強度 -- 生成ボタンを押してください コピー \u0026#x21bb; 生成する すべてコピー 生成履歴 (セッション内のみ保存) クリア まだパスワードが生成されていません。 アカウント管理の経費もかんたんに\nfreee会計なら、SaaSツールのサブスク費用も経費として一元管理。無料トライアル実施中。 freeeを無料で試す → パスワードの仕組みと安全性 パスワードはすべて Web Crypto API（crypto.getRandomValues()）を使ってブラウザ内で生成されます。暗号学的に安全な乱数を使用しており、生成したパスワードはサーバーに一切送信されません。\nエントロピーはパスワードの予測困難さを表す指標です。計算式は 文字数 x log2(文字種の数) です。全文字種を使った20文字のパスワードは約120ビットのエントロピーを持ち、現在のコンピュータでは事実上解読不可能です。\nモードの使い分け モード 向いている用途 ランダム 最高のセキュリティ。パスワードマネージャーと組み合わせて使用 発音しやすい 口頭で伝えやすい。子音・母音を交互に配置 パスフレーズ 覚えやすく高エントロピー。単語の組み合わせで構成 安全なパスワードのヒント 一般的なアカウントは16文字以上、重要なアカウントは24文字以上を推奨します。 ランダムモードでは記号を有効にするとエントロピーが最大になります。 記憶が必要なパスワードにはパスフレーズモードが最適です。 同じパスワードを複数のサービスで使い回さないでください。パスワードマネージャーで管理しましょう。 「紛らわしい文字を除外」オプションは、0/O や l/1/I の混同を防ぎます。 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\nハッシュを生成 → ハッシュ生成ツール テキストのエンコード/デコード → 万能エンコーダー/デコーダー 関連記事 無料で使えるAIツールおすすめ15選【2026年版・目的別に厳選】 VPN おすすめ2026年版！用途別に比較【初心者向けガイド】 ","permalink":"https://productivity-works.com/ja/tools/password-generator/","summary":"\u003cp\u003e安全なパスワードをブラウザ内で即座に生成。入力内容はサーバーに一切送信されません。\u003c/p\u003e\n\u003cdiv id=\"pw-app-ja\"\u003e\n\u003cstyle\u003e\n#pw-app-ja {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, \"Segoe UI\", sans-serif;\n  max-width: 680px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#pw-app-ja * { box-sizing: border-box; }\n\n#pw-app-ja .pw-section {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px 24px;\n  margin-bottom: 16px;\n}\n\n#pw-app-ja h3.pw-section-title {\n  margin: 0 0 14px 0;\n  font-size: 13px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #64748b;\n}\n\n#pw-app-ja .pw-output-box {\n  background: #fff;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  padding: 14px 16px;\n  margin-bottom: 10px;\n  min-height: 52px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n}\n#pw-app-ja .pw-output-box .pw-pass-text {\n  font-family: \"Courier New\", Courier, monospace;\n  font-size: 15px;\n  word-break: break-all;\n  flex: 1;\n  color: #0f172a;\n  line-height: 1.5;\n}\n#pw-app-ja .pw-copy-btn {\n  flex-shrink: 0;\n  background: #3b82f6;\n  color: #fff;\n  border: none;\n  border-radius: 6px;\n  padding: 6px 14px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#pw-app-ja .pw-copy-btn:hover { background: #2563eb; }\n#pw-app-ja .pw-copy-btn.pw-copied { background: #16a34a; }\n\n#pw-app-ja .pw-actions {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  margin-bottom: 4px;\n}\n#pw-app-ja .pw-btn-primary {\n  background: #3b82f6;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  padding: 11px 22px;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n  flex: 1;\n  min-width: 150px;\n}\n#pw-app-ja .pw-btn-primary:hover { background: #2563eb; }\n#pw-app-ja .pw-btn-secondary {\n  background: #fff;\n  color: #374151;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  padding: 11px 18px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, border-color 0.15s;\n}\n#pw-app-ja .pw-btn-secondary:hover { background: #f1f5f9; border-color: #94a3b8; }\n\n#pw-app-ja .pw-strength-wrap { margin-bottom: 16px; }\n#pw-app-ja .pw-strength-label {\n  font-size: 13px;\n  font-weight: 600;\n  margin-bottom: 5px;\n  display: flex;\n  justify-content: space-between;\n}\n#pw-app-ja .pw-strength-bar-bg {\n  background: #e2e8f0;\n  border-radius: 99px;\n  height: 8px;\n  overflow: hidden;\n}\n#pw-app-ja .pw-strength-bar {\n  height: 8px;\n  border-radius: 99px;\n  transition: width 0.3s, background 0.3s;\n  width: 0%;\n}\n\n#pw-app-ja .pw-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 12px;\n}\n#pw-app-ja .pw-row label {\n  font-size: 14px;\n  font-weight: 600;\n  min-width: 80px;\n  color: #374151;\n}\n#pw-app-ja input[type=\"range\"] {\n  flex: 1;\n  accent-color: #3b82f6;\n  cursor: pointer;\n}\n#pw-app-ja .pw-num-input {\n  width: 62px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  padding: 5px 8px;\n  font-size: 14px;\n  text-align: center;\n  color: #0f172a;\n}\n#pw-app-ja .pw-num-input:focus { outline: 2px solid #3b82f6; border-color: transparent; }\n\n#pw-app-ja .pw-row-count {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 12px;\n}\n#pw-app-ja .pw-row-count label {\n  font-size: 14px;\n  font-weight: 600;\n  min-width: 80px;\n  color: #374151;\n}\n\n#pw-app-ja .pw-checks {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px 22px;\n  margin-bottom: 14px;\n}\n#pw-app-ja .pw-check-item {\n  display: flex;\n  align-items: center;\n  gap: 7px;\n  font-size: 14px;\n  cursor: pointer;\n  user-select: none;\n}\n#pw-app-ja .pw-check-item input[type=\"checkbox\"] {\n  width: 16px;\n  height: 16px;\n  accent-color: #3b82f6;\n  cursor: pointer;\n}\n\n#pw-app-ja .pw-exclude-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 6px;\n}\n#pw-app-ja .pw-exclude-row label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #374151;\n  white-space: nowrap;\n}\n#pw-app-ja .pw-exclude-input {\n  flex: 1;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  padding: 6px 10px;\n  font-size: 13px;\n  font-family: \"Courier New\", Courier, monospace;\n  color: #0f172a;\n}\n#pw-app-ja .pw-exclude-input:focus { outline: 2px solid #3b82f6; border-color: transparent; }\n\n#pw-app-ja .pw-mode-tabs {\n  display: flex;\n  gap: 6px;\n  margin-bottom: 16px;\n}\n#pw-app-ja .pw-mode-tab {\n  flex: 1;\n  text-align: center;\n  padding: 9px 10px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  background: #fff;\n  color: #374151;\n  transition: all 0.15s;\n}\n#pw-app-ja .pw-mode-tab.pw-tab-active {\n  background: #3b82f6;\n  color: #fff;\n  border-color: #3b82f6;\n}\n#pw-app-ja .pw-mode-tab:hover:not(.pw-tab-active) { background: #f1f5f9; }\n\n#pw-app-ja .pw-history-list {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n  max-height: 220px;\n  overflow-y: auto;\n}\n#pw-app-ja .pw-history-list li {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 7px 0;\n  border-bottom: 1px solid #e2e8f0;\n  font-family: \"Courier New\", Courier, monospace;\n  font-size: 13px;\n  word-break: break-all;\n  gap: 8px;\n  color: #0f172a;\n}\n#pw-app-ja .pw-history-list li:last-child { border-bottom: none; }\n#pw-app-ja .pw-history-copy {\n  flex-shrink: 0;\n  background: none;\n  border: 1px solid #cbd5e1;\n  border-radius: 5px;\n  padding: 3px 9px;\n  font-size: 12px;\n  cursor: pointer;\n  color: #374151;\n}\n#pw-app-ja .pw-history-copy:hover { background: #f1f5f9; }\n#pw-app-ja .pw-empty-history {\n  font-size: 13px;\n  color: #94a3b8;\n  text-align: center;\n  padding: 14px 0;\n}\n\n#pw-app-ja .pw-multi-list {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n#pw-app-ja .pw-multi-list li {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 7px 0;\n  border-bottom: 1px solid #e2e8f0;\n  gap: 8px;\n}\n#pw-app-ja .pw-multi-list li:last-child { border-bottom: none; }\n#pw-app-ja .pw-multi-list .pw-multi-text {\n  font-family: \"Courier New\", Courier, monospace;\n  font-size: 13px;\n  word-break: break-all;\n  color: #0f172a;\n  flex: 1;\n}\n\n@media (max-width: 480px) {\n  #pw-app-ja .pw-row { flex-wrap: wrap; }\n  #pw-app-ja .pw-row label { min-width: 100%; margin-bottom: 2px; }\n  #pw-app-ja .pw-section { padding: 16px; }\n  #pw-app-ja .pw-mode-tab { font-size: 12px; padding: 8px 5px; }\n}\n\u003c/style\u003e\n\u003c!-- モード切替 --\u003e\n\u003cdiv class=\"pw-section\"\u003e\n  \u003ch3 class=\"pw-section-title\"\u003eモード\u003c/h3\u003e\n  \u003cdiv class=\"pw-mode-tabs\"\u003e\n    \u003cdiv class=\"pw-mode-tab pw-tab-active\" onclick=\"pwjaSetMode('random',this)\"\u003eランダム\u003c/div\u003e\n    \u003cdiv class=\"pw-mode-tab\" onclick=\"pwjaSetMode('pronounceable',this)\"\u003e発音しやすい\u003c/div\u003e\n    \u003cdiv class=\"pw-mode-tab\" onclick=\"pwjaSetMode('passphrase',this)\"\u003eパスフレーズ\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- ランダム / 発音しやすい オプション --\u003e\n  \u003cdiv id=\"pwja-random-opts\"\u003e\n    \u003cdiv class=\"pw-row\"\u003e\n      \u003clabel for=\"pwja-length-slider\"\u003e文字数\u003c/label\u003e\n      \u003cinput type=\"range\" id=\"pwja-length-slider\" min=\"4\" max=\"128\" value=\"20\" oninput=\"pwjaSyncLength(this.value)\"\u003e\n      \u003cinput type=\"number\" class=\"pw-num-input\" id=\"pwja-length-num\" min=\"4\" max=\"128\" value=\"20\" oninput=\"pwjaSyncLength(this.value)\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pw-checks\"\u003e\n      \u003clabel class=\"pw-check-item\"\u003e\u003cinput type=\"checkbox\" id=\"pwja-upper\" checked onchange=\"pwjaGenerate()\"\u003e 大文字 (A-Z)\u003c/label\u003e\n      \u003clabel class=\"pw-check-item\"\u003e\u003cinput type=\"checkbox\" id=\"pwja-lower\" checked onchange=\"pwjaGenerate()\"\u003e 小文字 (a-z)\u003c/label\u003e\n      \u003clabel class=\"pw-check-item\"\u003e\u003cinput type=\"checkbox\" id=\"pwja-nums\" checked onchange=\"pwjaGenerate()\"\u003e 数字 (0-9)\u003c/label\u003e\n      \u003clabel class=\"pw-check-item\"\u003e\u003cinput type=\"checkbox\" id=\"pwja-syms\" onchange=\"pwjaGenerate()\"\u003e 記号 (!@#$...)\u003c/label\u003e\n      \u003clabel class=\"pw-check-item\"\u003e\u003cinput type=\"checkbox\" id=\"pwja-noambig\" onchange=\"pwjaGenerate()\"\u003e 紛らわしい文字を除外 (0/O, l/1/I)\u003c/label\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pw-exclude-row\"\u003e\n      \u003clabel for=\"pwja-exclude-chars\"\u003e除外する文字:\u003c/label\u003e\n      \u003cinput type=\"text\" class=\"pw-exclude-input\" id=\"pwja-exclude-chars\" placeholder=\"例: {}[]\" oninput=\"pwjaGenerate()\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- パスフレーズ オプション --\u003e\n  \u003cdiv id=\"pwja-passphrase-opts\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"pw-row\"\u003e\n      \u003clabel for=\"pwja-word-count\"\u003e単語数\u003c/label\u003e\n      \u003cinput type=\"range\" id=\"pwja-word-count\" min=\"2\" max=\"10\" value=\"4\" oninput=\"pwjaSyncWords(this.value)\"\u003e\n      \u003cinput type=\"number\" class=\"pw-num-input\" id=\"pwja-word-count-num\" min=\"2\" max=\"10\" value=\"4\" oninput=\"pwjaSyncWords(this.value)\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pw-checks\"\u003e\n      \u003clabel class=\"pw-check-item\"\u003e\u003cinput type=\"checkbox\" id=\"pwja-pp-cap\" checked onchange=\"pwjaGenerate()\"\u003e 先頭を大文字にする\u003c/label\u003e\n      \u003clabel class=\"pw-check-item\"\u003e\u003cinput type=\"checkbox\" id=\"pwja-pp-num\" checked onchange=\"pwjaGenerate()\"\u003e 末尾に数字を追加\u003c/label\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pw-exclude-row\"\u003e\n      \u003clabel for=\"pwja-pp-sep\"\u003e区切り文字:\u003c/label\u003e\n      \u003cinput type=\"text\" class=\"pw-exclude-input\" id=\"pwja-pp-sep\" value=\"-\" maxlength=\"5\" style=\"max-width:80px;\" oninput=\"pwjaGenerate()\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 生成数 --\u003e\n  \u003cdiv class=\"pw-row-count\" style=\"margin-top:14px;\"\u003e\n    \u003clabel for=\"pwja-count\"\u003e生成数\u003c/label\u003e\n    \u003cinput type=\"number\" class=\"pw-num-input\" id=\"pwja-count\" min=\"1\" max=\"20\" value=\"1\" oninput=\"pwjaGenerate()\"\u003e\n    \u003cspan style=\"font-size:13px;color:#64748b;\"\u003e個まとめて生成 (最大20)\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 出力 --\u003e\n\u003cdiv class=\"pw-section\"\u003e\n  \u003ch3 class=\"pw-section-title\"\u003e生成結果\u003c/h3\u003e\n  \u003cdiv class=\"pw-strength-wrap\" id=\"pwja-strength-wrap\"\u003e\n    \u003cdiv class=\"pw-strength-label\"\u003e\n      \u003cspan\u003e強度\u003c/span\u003e\n      \u003cspan id=\"pwja-strength-text\" style=\"color:#94a3b8;\"\u003e--\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pw-strength-bar-bg\"\u003e\n      \u003cdiv class=\"pw-strength-bar\" id=\"pwja-strength-bar\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pw-output-box\" id=\"pwja-single-out\"\u003e\n    \u003cspan class=\"pw-pass-text\" id=\"pwja-pass-display\"\u003e生成ボタンを押してください\u003c/span\u003e\n    \u003cbutton class=\"pw-copy-btn\" id=\"pwja-copy-main\" onclick=\"pwjaCopyMain()\"\u003eコピー\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cul class=\"pw-multi-list\" id=\"pwja-multi-out\" style=\"display:none;\"\u003e\u003c/ul\u003e\n  \u003cdiv class=\"pw-actions\"\u003e\n    \u003cbutton class=\"pw-btn-primary\" onclick=\"pwjaGenerate()\"\u003e\u0026#x21bb; 生成する\u003c/button\u003e\n    \u003cbutton class=\"pw-btn-secondary\" id=\"pwja-copy-all-btn\" onclick=\"pwjaCopyAll()\" style=\"display:none;\"\u003eすべてコピー\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 履歴 --\u003e\n\u003cdiv class=\"pw-section\"\u003e\n  \u003cdiv style=\"display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;\"\u003e\n    \u003ch3 class=\"pw-section-title\" style=\"margin:0;\"\u003e生成履歴 \u003cspan style=\"font-weight:400;color:#94a3b8;font-size:11px;\"\u003e(セッション内のみ保存)\u003c/span\u003e\u003c/h3\u003e\n    \u003cbutton class=\"pw-btn-secondary\" style=\"padding:5px 12px;font-size:12px;\" onclick=\"pwjaClearHistory()\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cul class=\"pw-history-list\" id=\"pwja-history-list\"\u003e\n    \u003cli\u003e\u003cspan class=\"pw-empty-history\" style=\"width:100%;\"\u003eまだパスワードが生成されていません。\u003c/span\u003e\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var _mode = 'random';\n  var _hist = [];\n\n  var _WORDS = [\n    \"apple\",\"brave\",\"cloud\",\"dance\",\"eagle\",\"flame\",\"grace\",\"house\",\"ivory\",\"juice\",\n    \"kneel\",\"lemon\",\"mango\",\"night\",\"ocean\",\"piano\",\"queen\",\"river\",\"stone\",\"tiger\",\n    \"ultra\",\"viper\",\"wheat\",\"xenon\",\"yacht\",\"zebra\",\"amber\",\"blaze\",\"coral\",\"drift\",\n    \"ember\",\"frost\",\"globe\",\"haste\",\"inlet\",\"joker\",\"karma\",\"laser\",\"maple\",\"novel\",\n    \"olive\",\"pearl\",\"quill\",\"ridge\",\"solar\",\"tidal\",\"umbra\",\"vault\",\"waltz\",\"pixel\",\n    \"azure\",\"boost\",\"crisp\",\"delta\",\"epoch\",\"flint\",\"grove\",\"hinge\",\"irony\",\"jazzy\",\n    \"knife\",\"lunar\",\"moose\",\"nerve\",\"orbit\",\"prism\",\"quartz\",\"robin\",\"scout\",\"torch\",\n    \"unity\",\"visor\",\"woven\",\"oxide\",\"yield\",\"zonal\",\"alpha\",\"bench\",\"cedar\",\"depot\",\n    \"easel\",\"field\",\"glare\",\"hedge\",\"index\",\"jelly\",\"kinky\",\"lotus\",\"metal\",\"noble\",\n    \"ozone\",\"plumb\",\"quota\",\"ranch\",\"swift\",\"trout\",\"urban\",\"vivid\",\"water\",\"xylem\",\n    \"yearn\",\"zippy\",\"alert\",\"blunt\",\"curve\",\"dense\",\"erupt\",\"fluke\",\"groan\",\"hyper\",\n    \"image\",\"jewel\",\"knack\",\"lofty\",\"micro\",\"nifty\",\"opera\",\"plain\",\"quiet\",\"risky\",\n    \"spite\",\"tango\",\"usher\",\"vigor\",\"wider\",\"extra\",\"young\",\"zesty\",\"agile\",\"brisk\",\n    \"crimp\",\"dwell\",\"elbow\",\"finch\",\"guava\",\"hyena\",\"infer\",\"jaunt\",\"kudos\",\"lyric\",\n    \"merch\",\"navel\",\"onset\",\"patch\",\"quirk\",\"ruddy\",\"sleek\",\"taunt\",\"unfold\",\"venom\",\n    \"wrath\",\"adept\",\"brine\",\"clamp\",\"drive\",\"elegy\",\"forge\",\"glyph\",\"hatch\",\"intro\",\n    \"jumbo\",\"latch\",\"mirth\",\"nudge\",\"optic\",\"plaid\",\"quest\",\"radar\",\"snowy\",\"tapir\",\n    \"untie\",\"vocal\",\"whirl\",\"exert\",\"zilch\",\"amber\",\"birch\",\"candy\",\"daisy\",\"denim\",\n    \"fable\",\"gauge\",\"hazel\",\"kiosk\",\"lilac\",\"melon\",\"nicer\",\"onion\",\"pansy\",\"racer\",\n    \"rivet\",\"swamp\",\"vivid\",\"windy\",\"boxer\",\"crane\",\"floss\",\"graze\",\"kneel\",\"primo\"\n  ];\n\n  var _CON = 'bcdfghjklmnpqrstvwxyz';\n  var _VOW = 'aeiou';\n\n  function _ri(max) {\n    var a = new Uint32Array(1);\n    var lim = Math.floor(4294967296 / max) * max;\n    do { crypto.getRandomValues(a); } while (a[0] \u003e= lim);\n    return a[0] % max;\n  }\n\n  function _cs() {\n    var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n    var lower = 'abcdefghijklmnopqrstuvwxyz';\n    var nums  = '0123456789';\n    var syms  = '!@#$%^\u0026*()-_=+[]{}|;:,.\u003c\u003e?';\n    var ambig = '0Ol1I';\n    var useUp = document.getElementById('pwja-upper').checked;\n    var useLo = document.getElementById('pwja-lower').checked;\n    var useNu = document.getElementById('pwja-nums').checked;\n    var useSy = document.getElementById('pwja-syms').checked;\n    var noAmb = document.getElementById('pwja-noambig').checked;\n    var excl  = document.getElementById('pwja-exclude-chars').value;\n    var cs = '';\n    if (useUp) cs += upper;\n    if (useLo) cs += lower;\n    if (useNu) cs += nums;\n    if (useSy) cs += syms;\n    if (noAmb) { var t=''; for(var i=0;i\u003ccs.length;i++) if(ambig.indexOf(cs[i])===-1) t+=cs[i]; cs=t; }\n    if (excl)  { var t=''; for(var i=0;i\u003ccs.length;i++) if(excl.indexOf(cs[i])===-1) t+=cs[i]; cs=t; }\n    return cs;\n  }\n\n  function _genRandom(len) {\n    var cs = _cs();\n    if (!cs) return '(文字種を1つ以上選択してください)';\n    var out = '';\n    for (var i=0; i\u003clen; i++) out += cs[_ri(cs.length)];\n    return out;\n  }\n\n  function _genPronounceable(len) {\n    var useUp = document.getElementById('pwja-upper').checked;\n    var noAmb = document.getElementById('pwja-noambig').checked;\n    var excl  = document.getElementById('pwja-exclude-chars').value;\n    var con = noAmb ? _CON.replace(/l/g,'') : _CON;\n    var vow = _VOW;\n    var out = '';\n    var useC = true;\n    for (var i=0; i\u003clen; i++) {\n      var pool = useC ? con : vow;\n      var ch = pool[_ri(pool.length)];\n      if (useUp \u0026\u0026 _ri(4)===0) ch = ch.toUpperCase();\n      out += ch;\n      useC = !useC;\n    }\n    if (excl) {\n      var fixed='';\n      for(var j=0;j\u003cout.length;j++){\n        if(excl.indexOf(out[j])===-1){ fixed+=out[j]; }\n        else { var p=(j%2===0)?con:vow; fixed+=p[_ri(p.length)]; }\n      }\n      out=fixed;\n    }\n    return out;\n  }\n\n  function _genPassphrase() {\n    var cnt = Math.min(10,Math.max(2,parseInt(document.getElementById('pwja-word-count').value)||4));\n    var cap = document.getElementById('pwja-pp-cap').checked;\n    var num = document.getElementById('pwja-pp-num').checked;\n    var sep = document.getElementById('pwja-pp-sep').value;\n    var ws = [];\n    for (var i=0; i\u003ccnt; i++) {\n      var w = _WORDS[_ri(_WORDS.length)];\n      if (cap) w = w.charAt(0).toUpperCase()+w.slice(1);\n      ws.push(w);\n    }\n    var r = ws.join(sep);\n    if (num) r += sep + (_ri(90)+10);\n    return r;\n  }\n\n  function _genOne() {\n    var len = parseInt(document.getElementById('pwja-length-slider').value)||20;\n    if (_mode==='random')        return _genRandom(len);\n    if (_mode==='pronounceable') return _genPronounceable(len);\n    if (_mode==='passphrase')    return _genPassphrase();\n    return '';\n  }\n\n  function _entropy(pass) {\n    var cs = _cs();\n    var pool = cs ? cs.length : 26;\n    return pass.length * Math.log2(pool \u003e 1 ? pool : 2);\n  }\n\n  function _ppEntropy(pass) {\n    var sep = document.getElementById('pwja-pp-sep').value || '-';\n    var sepE = sep.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,'\\\\$\u0026');\n    var wc = (pass.match(new RegExp('['+sepE+']','g'))||[]).length + 1;\n    return wc * Math.log2(_WORDS.length);\n  }\n\n  function _strengthInfo(bits) {\n    if (bits \u003c 28)  return {label:'非常に弱い', pct:10,  color:'#ef4444'};\n    if (bits \u003c 36)  return {label:'弱い',       pct:25,  color:'#f97316'};\n    if (bits \u003c 60)  return {label:'普通',        pct:50,  color:'#eab308'};\n    if (bits \u003c 80)  return {label:'強い',        pct:72,  color:'#22c55e'};\n    if (bits \u003c 100) return {label:'とても強い',  pct:88,  color:'#16a34a'};\n    return               {label:'非常に強い',  pct:100, color:'#15803d'};\n  }\n\n  function _updateStrength(pass) {\n    var bits = (_mode==='passphrase') ? _ppEntropy(pass) : _entropy(pass);\n    var info = _strengthInfo(bits);\n    document.getElementById('pwja-strength-text').textContent = info.label + ' (~'+Math.round(bits)+' bits)';\n    document.getElementById('pwja-strength-text').style.color = info.color;\n    document.getElementById('pwja-strength-bar').style.width = info.pct+'%';\n    document.getElementById('pwja-strength-bar').style.background = info.color;\n  }\n\n  function _addHistory(passwords) {\n    for (var i=0; i\u003cpasswords.length; i++) _hist.unshift(passwords[i]);\n    if (_hist.length\u003e10) _hist = _hist.slice(0,10);\n    _renderHistory();\n  }\n\n  function _renderHistory() {\n    var ul = document.getElementById('pwja-history-list');\n    ul.innerHTML = '';\n    if (_hist.length===0) {\n      ul.innerHTML = '\u003cli\u003e\u003cspan class=\"pw-empty-history\" style=\"width:100%;\"\u003eまだパスワードが生成されていません。\u003c/span\u003e\u003c/li\u003e';\n      return;\n    }\n    _hist.forEach(function(p) {\n      var li=document.createElement('li');\n      var sp=document.createElement('span'); sp.textContent=p;\n      var btn=document.createElement('button');\n      btn.className='pw-history-copy'; btn.textContent='コピー';\n      (function(pass,b){ b.onclick=function(){ _clip(pass); b.textContent='コピー済!'; setTimeout(function(){ b.textContent='コピー'; },1500); }; })(p,btn);\n      li.appendChild(sp); li.appendChild(btn); ul.appendChild(li);\n    });\n  }\n\n  function _clip(text) {\n    if (navigator.clipboard \u0026\u0026 navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).catch(function(){});\n    } else {\n      var ta=document.createElement('textarea'); ta.value=text;\n      ta.style.position='fixed'; ta.style.opacity='0';\n      document.body.appendChild(ta); ta.select();\n      document.execCommand('copy'); document.body.removeChild(ta);\n    }\n  }\n\n  window.pwjaGenerate = function() {\n    var count = Math.min(20,Math.max(1,parseInt(document.getElementById('pwja-count').value)||1));\n    var passwords = [];\n    for (var i=0; i\u003ccount; i++) passwords.push(_genOne());\n\n    var singleOut    = document.getElementById('pwja-single-out');\n    var multiOut     = document.getElementById('pwja-multi-out');\n    var copyAllBtn   = document.getElementById('pwja-copy-all-btn');\n    var strengthWrap = document.getElementById('pwja-strength-wrap');\n\n    if (count===1) {\n      document.getElementById('pwja-pass-display').textContent = passwords[0];\n      singleOut.style.display    = 'flex';\n      multiOut.style.display     = 'none';\n      copyAllBtn.style.display   = 'none';\n      strengthWrap.style.display = 'block';\n      _updateStrength(passwords[0]);\n    } else {\n      singleOut.style.display    = 'none';\n      strengthWrap.style.display = 'none';\n      multiOut.style.display     = 'block';\n      copyAllBtn.style.display   = 'inline-block';\n      multiOut.innerHTML = '';\n      passwords.forEach(function(p) {\n        var li=document.createElement('li');\n        var sp=document.createElement('span'); sp.className='pw-multi-text'; sp.textContent=p;\n        var btn=document.createElement('button');\n        btn.className='pw-copy-btn'; btn.textContent='コピー';\n        btn.style.fontSize='12px'; btn.style.padding='5px 12px';\n        (function(pass,b){ b.onclick=function(){ _clip(pass); b.textContent='コピー済!'; b.classList.add('pw-copied'); setTimeout(function(){ b.textContent='コピー'; b.classList.remove('pw-copied'); },1500); }; })(p,btn);\n        li.appendChild(sp); li.appendChild(btn); multiOut.appendChild(li);\n      });\n    }\n    _addHistory(passwords);\n  };\n\n  window.pwjaCopyMain = function() {\n    var text = document.getElementById('pwja-pass-display').textContent;\n    if (!text || text==='生成ボタンを押してください') return;\n    _clip(text);\n    var btn = document.getElementById('pwja-copy-main');\n    btn.textContent='コピー済!'; btn.classList.add('pw-copied');\n    setTimeout(function(){ btn.textContent='コピー'; btn.classList.remove('pw-copied'); },1500);\n  };\n\n  window.pwjaCopyAll = function() {\n    var items = document.querySelectorAll('#pwja-multi-out .pw-multi-text');\n    var all = Array.prototype.slice.call(items).map(function(el){ return el.textContent; }).join('\\n');\n    _clip(all);\n    var btn = document.getElementById('pwja-copy-all-btn');\n    btn.textContent='コピー完了!';\n    setTimeout(function(){ btn.textContent='すべてコピー'; },1500);\n  };\n\n  window.pwjaClearHistory = function() { _hist=[]; _renderHistory(); };\n\n  window.pwjaSyncLength = function(val) {\n    var v = Math.min(128,Math.max(4,parseInt(val)||4));\n    document.getElementById('pwja-length-slider').value = v;\n    document.getElementById('pwja-length-num').value    = v;\n    pwjaGenerate();\n  };\n\n  window.pwjaSyncWords = function(val) {\n    var v = Math.min(10,Math.max(2,parseInt(val)||4));\n    document.getElementById('pwja-word-count').value     = v;\n    document.getElementById('pwja-word-count-num').value = v;\n    pwjaGenerate();\n  };\n\n  window.pwjaSetMode = function(mode, el) {\n    _mode = mode;\n    var tabs = document.querySelectorAll('#pw-app-ja .pw-mode-tab');\n    for (var i=0; i\u003ctabs.length; i++) tabs[i].classList.remove('pw-tab-active');\n    el.classList.add('pw-tab-active');\n    var isPhrase = (mode==='passphrase');\n    document.getElementById('pwja-random-opts').style.display     = isPhrase ? 'none'  : 'block';\n    document.getElementById('pwja-passphrase-opts').style.display = isPhrase ? 'block' : 'none';\n    pwjaGenerate();\n  };\n\n  pwjaGenerate();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003cdiv class=\"pw-freee-cta\" style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003eアカウント管理の経費もかんたんに\u003c/p\u003e","title":"パスワード生成ツール｜安全な強力パスワードをワンクリック作成【無料】"},{"content":"距離とタイムを入力するだけでペース・速度・レースタイム予測を即計算。目標タイムからペースを逆算することも可能です。\n単位： メートル法 (km) ヤード・ポンド法 (mi) ペースを計算（距離＋タイム） タイムを計算（距離＋ペース） 距離を計算（ペース＋時間） ペースを計算する 距離 (km) プリセット距離 — 選択 — 5K 10K ハーフマラソン フルマラソン タイム（時間 : 分 : 秒） 時間 分 秒 ペースを計算する フィニッシュタイムを計算する 距離 (km) プリセット距離 — 選択 — 5K 10K ハーフマラソン フルマラソン ペース（分 : 秒 / km） 分 秒 タイムを計算する 走行距離を計算する ペース（分 : 秒 / km） 分 秒 ランニング時間（時間 : 分 : 秒） 時間 分 秒 距離を計算する 計算結果 リセット レースタイム予測 レース 距離 予測タイム ペース 予測は一定ペースを維持した場合の目安です。実際のレース結果はコース・天候・体調によって異なります。\nラップタイム表 関連ツール カロリーを計算する → カロリー計算ツール 体格指数を確認する → BMI計算ツール 健康管理とお金の管理をまとめて効率化\nランニングで健康を管理するように、家計も賢く管理しませんか？確定申告・帳簿付けはクラウド会計ソフト「freee」で自動化できます。\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/pace-calculator/","summary":"\u003cp\u003e距離とタイムを入力するだけでペース・速度・レースタイム予測を即計算。目標タイムからペースを逆算することも可能です。\u003c/p\u003e\n\u003cdiv id=\"pc-app\"\u003e\n\u003cstyle\u003e\n#pc-app {\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  max-width: 720px;\n  margin: 0 auto;\n  color: #1e293b;\n  font-size: 15px;\n  line-height: 1.6;\n}\n#pc-app * {\n  box-sizing: border-box;\n}\n#pc-app h2 {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 0 0 1rem;\n  padding-bottom: 0.4rem;\n  border-bottom: 2px solid #e2e8f0;\n}\n#pc-app .pc-card {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 1.25rem 1.5rem;\n  margin-bottom: 1.25rem;\n}\n#pc-app .pc-tabs {\n  display: flex;\n  gap: 0.5rem;\n  margin-bottom: 1.25rem;\n  flex-wrap: wrap;\n}\n#pc-app .pc-tab {\n  flex: 1;\n  min-width: 140px;\n  padding: 0.55rem 0.75rem;\n  background: #f1f5f9;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  font-size: 0.82rem;\n  font-weight: 600;\n  color: #64748b;\n  cursor: pointer;\n  text-align: center;\n  transition: all 0.15s;\n}\n#pc-app .pc-tab.active {\n  background: #1e293b;\n  border-color: #1e293b;\n  color: #fff;\n}\n#pc-app .pc-tab:hover:not(.active) {\n  background: #e2e8f0;\n  color: #334155;\n}\n#pc-app .pc-unit-toggle {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  margin-bottom: 1.25rem;\n  font-size: 0.82rem;\n  font-weight: 600;\n  color: #64748b;\n}\n#pc-app .pc-toggle-btn {\n  display: flex;\n  background: #f1f5f9;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  overflow: hidden;\n  font-size: 0.82rem;\n}\n#pc-app .pc-toggle-btn span {\n  padding: 0.35rem 0.9rem;\n  cursor: pointer;\n  font-weight: 600;\n  color: #64748b;\n  transition: all 0.15s;\n}\n#pc-app .pc-toggle-btn span.active {\n  background: #1e293b;\n  color: #fff;\n}\n#pc-app .pc-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n}\n@media (max-width: 520px) {\n  #pc-app .pc-grid {\n    grid-template-columns: 1fr;\n  }\n  #pc-app .pc-tab {\n    min-width: 100%;\n  }\n}\n#pc-app .pc-field {\n  display: flex;\n  flex-direction: column;\n  gap: 0.3rem;\n}\n#pc-app .pc-field label {\n  font-size: 0.78rem;\n  font-weight: 600;\n  color: #64748b;\n  letter-spacing: 0.02em;\n}\n#pc-app .pc-field input,\n#pc-app .pc-field select {\n  padding: 0.5rem 0.75rem;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 0.95rem;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.15s;\n  width: 100%;\n}\n#pc-app .pc-field input:focus,\n#pc-app .pc-field select:focus {\n  border-color: #334155;\n}\n#pc-app .pc-time-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  gap: 0.5rem;\n}\n#pc-app .pc-time-label {\n  font-size: 0.7rem;\n  color: #94a3b8;\n  text-align: center;\n  margin-top: 0.15rem;\n}\n#pc-app .pc-btn {\n  width: 100%;\n  padding: 0.75rem;\n  background: #1e293b;\n  color: #fff;\n  border: none;\n  border-radius: 10px;\n  font-size: 1rem;\n  font-weight: 700;\n  cursor: pointer;\n  margin-top: 1rem;\n  transition: background 0.15s;\n}\n#pc-app .pc-btn:hover {\n  background: #334155;\n}\n#pc-app .pc-results {\n  display: none;\n}\n#pc-app .pc-results.visible {\n  display: block;\n}\n#pc-app .pc-result-grid {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 0.75rem;\n  margin-bottom: 1rem;\n}\n@media (max-width: 400px) {\n  #pc-app .pc-result-grid {\n    grid-template-columns: 1fr;\n  }\n}\n#pc-app .pc-result-box {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 0.9rem 1rem;\n  text-align: center;\n}\n#pc-app .pc-result-box.highlight {\n  border-color: #334155;\n  background: #1e293b;\n  color: #fff;\n}\n#pc-app .pc-result-label {\n  font-size: 0.72rem;\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  color: #94a3b8;\n  margin-bottom: 0.3rem;\n}\n#pc-app .pc-result-box.highlight .pc-result-label {\n  color: #94a3b8;\n}\n#pc-app .pc-result-val {\n  font-size: 1.6rem;\n  font-weight: 800;\n  line-height: 1.1;\n  color: #1e293b;\n}\n#pc-app .pc-result-box.highlight .pc-result-val {\n  color: #fff;\n}\n#pc-app .pc-result-unit {\n  font-size: 0.78rem;\n  color: #64748b;\n  margin-top: 0.15rem;\n}\n#pc-app .pc-result-box.highlight .pc-result-unit {\n  color: #cbd5e1;\n}\n#pc-app .pc-race-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n}\n#pc-app .pc-race-table th {\n  background: #1e293b;\n  color: #fff;\n  padding: 0.5rem 0.75rem;\n  text-align: left;\n  font-weight: 600;\n  font-size: 0.78rem;\n}\n#pc-app .pc-race-table td {\n  padding: 0.5rem 0.75rem;\n  border-bottom: 1px solid #f1f5f9;\n}\n#pc-app .pc-race-table tr:last-child td {\n  border-bottom: none;\n}\n#pc-app .pc-race-table tr:nth-child(even) td {\n  background: #f8fafc;\n}\n#pc-app .pc-split-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.85rem;\n}\n#pc-app .pc-split-table th {\n  background: #334155;\n  color: #fff;\n  padding: 0.45rem 0.75rem;\n  text-align: right;\n  font-weight: 600;\n  font-size: 0.76rem;\n}\n#pc-app .pc-split-table th:first-child {\n  text-align: left;\n}\n#pc-app .pc-split-table td {\n  padding: 0.45rem 0.75rem;\n  border-bottom: 1px solid #f1f5f9;\n  text-align: right;\n}\n#pc-app .pc-split-table td:first-child {\n  text-align: left;\n  font-weight: 600;\n}\n#pc-app .pc-split-table tr:nth-child(even) td {\n  background: #f8fafc;\n}\n#pc-app .pc-error {\n  color: #dc2626;\n  font-size: 0.85rem;\n  font-weight: 600;\n  padding: 0.5rem 0.75rem;\n  background: #fef2f2;\n  border: 1px solid #fecaca;\n  border-radius: 8px;\n  margin-bottom: 0.75rem;\n  display: none;\n}\n#pc-app .pc-error.visible {\n  display: block;\n}\n#pc-app .pc-mode-panel {\n  display: none;\n}\n#pc-app .pc-mode-panel.active {\n  display: block;\n}\n#pc-app .pc-reset-btn {\n  background: none;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  color: #64748b;\n  padding: 0.45rem 1rem;\n  font-size: 0.82rem;\n  font-weight: 600;\n  cursor: pointer;\n  margin-top: 0.5rem;\n  transition: all 0.15s;\n}\n#pc-app .pc-reset-btn:hover {\n  background: #f1f5f9;\n}\n\u003c/style\u003e\n\u003c!-- 単位切替 --\u003e\n\u003cdiv class=\"pc-unit-toggle\"\u003e\n  \u003cspan\u003e単位：\u003c/span\u003e\n  \u003cdiv class=\"pc-toggle-btn\"\u003e\n    \u003cspan id=\"pc-unit-km\" class=\"active\" onclick=\"pcSetUnit('km')\"\u003eメートル法 (km)\u003c/span\u003e\n    \u003cspan id=\"pc-unit-mi\" onclick=\"pcSetUnit('mi')\"\u003eヤード・ポンド法 (mi)\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- モードタブ --\u003e\n\u003cdiv class=\"pc-tabs\"\u003e\n  \u003cdiv class=\"pc-tab active\" id=\"pc-tab-pace\" onclick=\"pcSetMode('pace')\"\u003eペースを計算（距離＋タイム）\u003c/div\u003e\n  \u003cdiv class=\"pc-tab\" id=\"pc-tab-time\" onclick=\"pcSetMode('time')\"\u003eタイムを計算（距離＋ペース）\u003c/div\u003e\n  \u003cdiv class=\"pc-tab\" id=\"pc-tab-dist\" onclick=\"pcSetMode('dist')\"\u003e距離を計算（ペース＋時間）\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- MODE 1: ペース計算 --\u003e\n\u003cdiv class=\"pc-mode-panel active\" id=\"pc-panel-pace\"\u003e\n  \u003cdiv class=\"pc-card\"\u003e\n    \u003ch2\u003eペースを計算する\u003c/h2\u003e\n    \u003cdiv class=\"pc-grid\" style=\"margin-bottom:1rem;\"\u003e\n      \u003cdiv class=\"pc-field\"\u003e\n        \u003clabel id=\"pc-dist-label-1\"\u003e距離 (km)\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"pc-dist-1\" min=\"0.01\" step=\"0.01\" placeholder=\"例: 10\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"pc-field\"\u003e\n        \u003clabel\u003eプリセット距離\u003c/label\u003e\n        \u003cselect id=\"pc-dist-preset-1\" onchange=\"pcApplyPreset(1)\"\u003e\n          \u003coption value=\"\"\u003e— 選択 —\u003c/option\u003e\n          \u003coption value=\"5\"\u003e5K\u003c/option\u003e\n          \u003coption value=\"10\"\u003e10K\u003c/option\u003e\n          \u003coption value=\"21.0975\"\u003eハーフマラソン\u003c/option\u003e\n          \u003coption value=\"42.195\"\u003eフルマラソン\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pc-field\" style=\"margin-bottom:1rem;\"\u003e\n      \u003clabel\u003eタイム（時間 : 分 : 秒）\u003c/label\u003e\n      \u003cdiv class=\"pc-time-row\"\u003e\n        \u003cdiv\u003e\n          \u003cinput type=\"number\" id=\"pc-h-1\" min=\"0\" max=\"99\" placeholder=\"0\"\u003e\n          \u003cdiv class=\"pc-time-label\"\u003e時間\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv\u003e\n          \u003cinput type=\"number\" id=\"pc-m-1\" min=\"0\" max=\"59\" placeholder=\"0\"\u003e\n          \u003cdiv class=\"pc-time-label\"\u003e分\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv\u003e\n          \u003cinput type=\"number\" id=\"pc-s-1\" min=\"0\" max=\"59\" placeholder=\"0\"\u003e\n          \u003cdiv class=\"pc-time-label\"\u003e秒\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pc-error\" id=\"pc-err-1\"\u003e\u003c/div\u003e\n    \u003cbutton class=\"pc-btn\" onclick=\"pcCalcPace()\"\u003eペースを計算する\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- MODE 2: タイム計算 --\u003e\n\u003cdiv class=\"pc-mode-panel\" id=\"pc-panel-time\"\u003e\n  \u003cdiv class=\"pc-card\"\u003e\n    \u003ch2\u003eフィニッシュタイムを計算する\u003c/h2\u003e\n    \u003cdiv class=\"pc-grid\" style=\"margin-bottom:1rem;\"\u003e\n      \u003cdiv class=\"pc-field\"\u003e\n        \u003clabel id=\"pc-dist-label-2\"\u003e距離 (km)\u003c/label\u003e\n        \u003cinput type=\"number\" id=\"pc-dist-2\" min=\"0.01\" step=\"0.01\" placeholder=\"例: 42.195\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"pc-field\"\u003e\n        \u003clabel\u003eプリセット距離\u003c/label\u003e\n        \u003cselect id=\"pc-dist-preset-2\" onchange=\"pcApplyPreset(2)\"\u003e\n          \u003coption value=\"\"\u003e— 選択 —\u003c/option\u003e\n          \u003coption value=\"5\"\u003e5K\u003c/option\u003e\n          \u003coption value=\"10\"\u003e10K\u003c/option\u003e\n          \u003coption value=\"21.0975\"\u003eハーフマラソン\u003c/option\u003e\n          \u003coption value=\"42.195\"\u003eフルマラソン\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pc-field\" style=\"margin-bottom:1rem;\"\u003e\n      \u003clabel id=\"pc-pace-label-2\"\u003eペース（分 : 秒 / km）\u003c/label\u003e\n      \u003cdiv class=\"pc-time-row\" style=\"grid-template-columns:1fr 1fr;\"\u003e\n        \u003cdiv\u003e\n          \u003cinput type=\"number\" id=\"pc-pm-2\" min=\"0\" max=\"59\" placeholder=\"5\"\u003e\n          \u003cdiv class=\"pc-time-label\"\u003e分\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv\u003e\n          \u003cinput type=\"number\" id=\"pc-ps-2\" min=\"0\" max=\"59\" placeholder=\"30\"\u003e\n          \u003cdiv class=\"pc-time-label\"\u003e秒\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pc-error\" id=\"pc-err-2\"\u003e\u003c/div\u003e\n    \u003cbutton class=\"pc-btn\" onclick=\"pcCalcTime()\"\u003eタイムを計算する\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- MODE 3: 距離計算 --\u003e\n\u003cdiv class=\"pc-mode-panel\" id=\"pc-panel-dist\"\u003e\n  \u003cdiv class=\"pc-card\"\u003e\n    \u003ch2\u003e走行距離を計算する\u003c/h2\u003e\n    \u003cdiv class=\"pc-field\" style=\"margin-bottom:1rem;\"\u003e\n      \u003clabel id=\"pc-pace-label-3\"\u003eペース（分 : 秒 / km）\u003c/label\u003e\n      \u003cdiv class=\"pc-time-row\" style=\"grid-template-columns:1fr 1fr;\"\u003e\n        \u003cdiv\u003e\n          \u003cinput type=\"number\" id=\"pc-pm-3\" min=\"0\" max=\"59\" placeholder=\"5\"\u003e\n          \u003cdiv class=\"pc-time-label\"\u003e分\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv\u003e\n          \u003cinput type=\"number\" id=\"pc-ps-3\" min=\"0\" max=\"59\" placeholder=\"30\"\u003e\n          \u003cdiv class=\"pc-time-label\"\u003e秒\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pc-field\" style=\"margin-bottom:1rem;\"\u003e\n      \u003clabel\u003eランニング時間（時間 : 分 : 秒）\u003c/label\u003e\n      \u003cdiv class=\"pc-time-row\"\u003e\n        \u003cdiv\u003e\n          \u003cinput type=\"number\" id=\"pc-h-3\" min=\"0\" max=\"99\" placeholder=\"1\"\u003e\n          \u003cdiv class=\"pc-time-label\"\u003e時間\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv\u003e\n          \u003cinput type=\"number\" id=\"pc-m-3\" min=\"0\" max=\"59\" placeholder=\"0\"\u003e\n          \u003cdiv class=\"pc-time-label\"\u003e分\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv\u003e\n          \u003cinput type=\"number\" id=\"pc-s-3\" min=\"0\" max=\"59\" placeholder=\"0\"\u003e\n          \u003cdiv class=\"pc-time-label\"\u003e秒\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pc-error\" id=\"pc-err-3\"\u003e\u003c/div\u003e\n    \u003cbutton class=\"pc-btn\" onclick=\"pcCalcDist()\"\u003e距離を計算する\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 結果 --\u003e\n\u003cdiv class=\"pc-results\" id=\"pc-results\"\u003e\n  \u003cdiv class=\"pc-card\"\u003e\n    \u003ch2\u003e計算結果\u003c/h2\u003e\n    \u003cdiv class=\"pc-result-grid\" id=\"pc-result-grid\"\u003e\u003c/div\u003e\n    \u003cbutton class=\"pc-reset-btn\" onclick=\"pcReset()\"\u003eリセット\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pc-card\" id=\"pc-race-section\"\u003e\n    \u003ch2\u003eレースタイム予測\u003c/h2\u003e\n    \u003ctable class=\"pc-race-table\"\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\n          \u003cth\u003eレース\u003c/th\u003e\n          \u003cth\u003e距離\u003c/th\u003e\n          \u003cth\u003e予測タイム\u003c/th\u003e\n          \u003cth id=\"pc-race-pace-header\"\u003eペース\u003c/th\u003e\n        \u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody id=\"pc-race-body\"\u003e\u003c/tbody\u003e\n    \u003c/table\u003e\n    \u003cp style=\"font-size:0.75rem;color:#94a3b8;margin-top:0.6rem;\"\u003e予測は一定ペースを維持した場合の目安です。実際のレース結果はコース・天候・体調によって異なります。\u003c/p\u003e","title":"ペース計算ツール"},{"content":"カテゴリから文字を閲覧するか、文字名で検索してください。任意の文字をクリックするとコピーされ、コードポイント・HTMLエンティティ・CSS content 値・UTF-8バイト列も確認できます。\n最近コピーした文字 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール 絵文字を検索 → 絵文字検索ツール HTMLエンティティ → HTMLエンティティ変換 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/character-map/","summary":"\u003cp\u003eカテゴリから文字を閲覧するか、文字名で検索してください。任意の文字をクリックするとコピーされ、コードポイント・HTMLエンティティ・CSS \u003ccode\u003econtent\u003c/code\u003e 値・UTF-8バイト列も確認できます。\u003c/p\u003e\n\u003cdiv id=\"cm-app\"\u003e\n\u003cstyle\u003e\n#cm-app {\n  font-family: system-ui, -apple-system, sans-serif;\n  max-width: 980px;\n  margin: 0 auto;\n  color: #1a1a1a;\n}\n#cm-app *, #cm-app *::before, #cm-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n/* ── Controls ── */\n#cm-app .cm-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-bottom: 18px;\n  align-items: center;\n}\n#cm-app .cm-search {\n  flex: 1 1 220px;\n  padding: 9px 14px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  font-size: 14px;\n  outline: none;\n  transition: border-color .2s;\n}\n#cm-app .cm-search:focus { border-color: #6366f1; }\n\n/* ── Category tabs ── */\n#cm-app .cm-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n  margin-bottom: 16px;\n}\n#cm-app .cm-tab {\n  padding: 6px 13px;\n  border: 1.5px solid #e5e7eb;\n  border-radius: 20px;\n  font-size: 13px;\n  background: #f9fafb;\n  cursor: pointer;\n  transition: background .15s, border-color .15s, color .15s;\n  user-select: none;\n}\n#cm-app .cm-tab:hover { background: #ede9fe; border-color: #a5b4fc; }\n#cm-app .cm-tab.active { background: #6366f1; border-color: #6366f1; color: #fff; font-weight: 600; }\n\n/* ── Grid ── */\n#cm-app .cm-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(52px, 1fr));\n  gap: 6px;\n  margin-bottom: 20px;\n  min-height: 80px;\n}\n#cm-app .cm-cell {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 52px;\n  border: 1.5px solid #e5e7eb;\n  border-radius: 8px;\n  font-size: 22px;\n  cursor: pointer;\n  background: #fff;\n  transition: background .15s, border-color .15s, transform .1s;\n  user-select: none;\n}\n#cm-app .cm-cell:hover {\n  background: #ede9fe;\n  border-color: #6366f1;\n  transform: scale(1.12);\n  z-index: 2;\n}\n#cm-app .cm-cell:active { transform: scale(1.04); }\n#cm-app .cm-cell .cm-tip {\n  display: none;\n  position: absolute;\n  bottom: calc(100% + 6px);\n  left: 50%;\n  transform: translateX(-50%);\n  background: #1e1b4b;\n  color: #fff;\n  font-size: 11px;\n  padding: 5px 8px;\n  border-radius: 6px;\n  white-space: nowrap;\n  pointer-events: none;\n  z-index: 10;\n  line-height: 1.5;\n  text-align: center;\n}\n#cm-app .cm-cell:hover .cm-tip { display: block; }\n\n/* ── Detail panel ── */\n#cm-app .cm-detail {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 16px 20px;\n  margin-bottom: 20px;\n  display: none;\n}\n#cm-app .cm-detail.visible { display: block; }\n#cm-app .cm-detail-char {\n  font-size: 48px;\n  line-height: 1;\n  margin-bottom: 10px;\n}\n#cm-app .cm-detail-name {\n  font-size: 15px;\n  font-weight: 700;\n  color: #4f46e5;\n  margin-bottom: 10px;\n}\n#cm-app .cm-detail-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));\n  gap: 8px;\n}\n#cm-app .cm-detail-row {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 7px;\n  padding: 8px 12px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 8px;\n}\n#cm-app .cm-detail-label {\n  font-size: 11px;\n  color: #64748b;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: .04em;\n  white-space: nowrap;\n}\n#cm-app .cm-detail-val {\n  font-size: 13px;\n  font-family: monospace;\n  color: #1e293b;\n  word-break: break-all;\n}\n#cm-app .cm-copy-btn {\n  padding: 3px 10px;\n  background: #6366f1;\n  color: #fff;\n  border: none;\n  border-radius: 5px;\n  font-size: 12px;\n  cursor: pointer;\n  white-space: nowrap;\n  transition: background .15s;\n}\n#cm-app .cm-copy-btn:hover { background: #4f46e5; }\n\n/* ── Recently copied ── */\n#cm-app .cm-recent-section { margin-bottom: 22px; }\n#cm-app .cm-section-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #6b7280;\n  text-transform: uppercase;\n  letter-spacing: .06em;\n  margin-bottom: 8px;\n}\n#cm-app .cm-recent-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n}\n#cm-app .cm-recent-chip {\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  padding: 5px 10px;\n  background: #f1f5f9;\n  border: 1px solid #e2e8f0;\n  border-radius: 20px;\n  font-size: 18px;\n  cursor: pointer;\n  transition: background .15s;\n  user-select: none;\n}\n#cm-app .cm-recent-chip:hover { background: #ede9fe; border-color: #a5b4fc; }\n#cm-app .cm-recent-chip .chip-label { font-size: 11px; color: #64748b; }\n\n/* ── Toast ── */\n#cm-app .cm-toast {\n  position: fixed;\n  bottom: 24px;\n  right: 24px;\n  background: #1e1b4b;\n  color: #fff;\n  padding: 10px 18px;\n  border-radius: 8px;\n  font-size: 14px;\n  z-index: 9999;\n  opacity: 0;\n  transform: translateY(10px);\n  transition: opacity .25s, transform .25s;\n  pointer-events: none;\n}\n#cm-app .cm-toast.show { opacity: 1; transform: translateY(0); }\n\n/* ── No results ── */\n#cm-app .cm-empty {\n  grid-column: 1/-1;\n  text-align: center;\n  color: #9ca3af;\n  font-size: 14px;\n  padding: 30px 0;\n}\n\n/* ── Responsive ── */\n@media (max-width: 480px) {\n  #cm-app .cm-grid { grid-template-columns: repeat(auto-fill, minmax(44px, 1fr)); gap: 4px; }\n  #cm-app .cm-cell { height: 44px; font-size: 18px; }\n  #cm-app .cm-detail-char { font-size: 36px; }\n}\n\u003c/style\u003e\n\u003c!-- 検索バー --\u003e\n\u003cdiv class=\"cm-controls\"\u003e\n  \u003cinput class=\"cm-search\" id=\"cm-search\" type=\"search\" placeholder=\"文字名で検索（例: arrow, heart, star, currency）...\" autocomplete=\"off\" /\u003e\n\u003c/div\u003e\n\u003c!-- カテゴリタブ --\u003e\n\u003cdiv class=\"cm-tabs\" id=\"cm-tabs\"\u003e\u003c/div\u003e\n\u003c!-- 最近コピーした文字 --\u003e\n\u003cdiv class=\"cm-recent-section\" id=\"cm-recent-section\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"cm-section-title\"\u003e最近コピーした文字\u003c/div\u003e\n  \u003cdiv class=\"cm-recent-row\" id=\"cm-recent-row\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 文字詳細パネル --\u003e\n\u003cdiv class=\"cm-detail\" id=\"cm-detail\"\u003e\n  \u003cdiv class=\"cm-detail-char\" id=\"cm-detail-char\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"cm-detail-name\" id=\"cm-detail-name\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"cm-detail-grid\" id=\"cm-detail-grid\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 文字グリッド --\u003e\n\u003cdiv class=\"cm-grid\" id=\"cm-grid\"\u003e\u003c/div\u003e\n\u003c!-- トースト通知 --\u003e\n\u003cdiv class=\"cm-toast\" id=\"cm-toast\"\u003e\u003c/div\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"Unicode文字マップ"},{"content":" \u0026#128196; マークダウンプレビュー サンプル読み込み クリア \u0026#9790; ダークモード HTMLをコピー .htmlで書き出す マークダウン プレビュー 単語数: 0 文字数: 0 行数: 0 読了時間: 0 分 クリップボードにコピーしました！ 確定申告・会計管理にはfreee\nマークダウンでドキュメント管理をしている方は、経理もデジタル化しませんか？freeeならクラウドで確定申告が簡単に。\nfreeeを無料で試す 関連ツール Html Beautifier → Html Beautifierツール Html Entity Converter → Html Entity Converterツール Html Entity Encoder → Html Entity Encoderツール ","permalink":"https://productivity-works.com/ja/tools/markdown-preview/","summary":"\u003cdiv id=\"md-app\"\u003e\n\u003cstyle\u003e\n/* ── Reset \u0026 Root ─────────────────────────────────────── */\n#md-app {\n  font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif;\n  max-width: 1100px;\n  margin: 0 auto;\n  color: #1e1b4b;\n  --accent: #7c3aed;\n  --accent-dk: #6d28d9;\n  --accent-lt: #ede9fe;\n  --bg: #f8f7ff;\n  --surface: #ffffff;\n  --border: #d8d3f0;\n  --text: #1e1b4b;\n  --text-muted: #6b7280;\n  --code-bg: #f3f0ff;\n  --preview-bg: #ffffff;\n  --editor-bg: #faf9ff;\n  --status-bg: #f3f0ff;\n  --btn-ghost: #ede9fe;\n  --btn-ghost-text: #5b21b6;\n  --shadow: 0 2px 12px rgba(124,58,237,0.10);\n  --radius: 10px;\n}\n#md-app * { box-sizing: border-box; }\n\n/* Dark theme */\n#md-app.md-dark {\n  --bg: #0f0e1a;\n  --surface: #1a1828;\n  --border: #3b3660;\n  --text: #e5e1ff;\n  --text-muted: #9d97c4;\n  --code-bg: #2a2540;\n  --preview-bg: #1a1828;\n  --editor-bg: #15132a;\n  --status-bg: #1a1828;\n  --btn-ghost: #2a2540;\n  --btn-ghost-text: #c4b5fd;\n  --shadow: 0 2px 12px rgba(0,0,0,0.40);\n  color: var(--text);\n}\n\n#md-app.md-dark #md-editor { color: #e5e1ff; }\n\n/* ── Toolbar ──────────────────────────────────────────── */\n#md-toolbar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  gap: 8px;\n  background: var(--surface);\n  border: 1px solid var(--border);\n  border-radius: var(--radius) var(--radius) 0 0;\n  padding: 10px 14px;\n  box-shadow: var(--shadow);\n}\n#md-toolbar-title {\n  font-weight: 700;\n  font-size: 1rem;\n  color: var(--accent);\n  letter-spacing: -0.01em;\n}\n#md-toolbar-btns {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n}\n\n/* ── Buttons ──────────────────────────────────────────── */\n.md-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 6px 13px;\n  border: none;\n  border-radius: 6px;\n  font-size: 0.82rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s, box-shadow 0.15s;\n  line-height: 1.2;\n  white-space: nowrap;\n}\n.md-btn:active { transform: scale(0.96); }\n\n.md-btn-primary {\n  background: var(--accent);\n  color: #fff;\n  box-shadow: 0 1px 4px rgba(124,58,237,0.25);\n}\n.md-btn-primary:hover { background: var(--accent-dk); }\n\n.md-btn-ghost {\n  background: var(--btn-ghost);\n  color: var(--btn-ghost-text);\n}\n.md-btn-ghost:hover { filter: brightness(0.95); }\n\n.md-btn-success {\n  background: #d1fae5;\n  color: #065f46;\n}\n.md-btn-success:hover { background: #a7f3d0; }\n\n.md-dark .md-btn-success {\n  background: #064e3b;\n  color: #6ee7b7;\n}\n\n/* ── Split Pane Container ─────────────────────────────── */\n#md-split {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  border-left: 1px solid var(--border);\n  border-right: 1px solid var(--border);\n  min-height: 460px;\n}\n\n@media (max-width: 640px) {\n  #md-split {\n    grid-template-columns: 1fr;\n  }\n}\n\n/* ── Pane Labels ──────────────────────────────────────── */\n.md-pane-label {\n  font-size: 0.72rem;\n  font-weight: 700;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  color: var(--text-muted);\n  padding: 6px 14px 4px;\n  background: var(--surface);\n  border-bottom: 1px solid var(--border);\n}\n#md-editor-pane {\n  border-right: 1px solid var(--border);\n  display: flex;\n  flex-direction: column;\n}\n#md-preview-pane {\n  display: flex;\n  flex-direction: column;\n  background: var(--preview-bg);\n}\n\n@media (max-width: 640px) {\n  #md-editor-pane { border-right: none; border-bottom: 1px solid var(--border); }\n}\n\n/* ── Editor ───────────────────────────────────────────── */\n#md-editor {\n  flex: 1;\n  width: 100%;\n  padding: 16px;\n  font-size: 0.93rem;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  line-height: 1.65;\n  border: none;\n  outline: none;\n  resize: none;\n  background: var(--editor-bg);\n  color: var(--text);\n  min-height: 420px;\n}\n#md-editor::placeholder { color: var(--text-muted); opacity: 0.7; }\n\n/* ── Preview ──────────────────────────────────────────── */\n#md-preview {\n  flex: 1;\n  padding: 18px 20px;\n  overflow-y: auto;\n  background: var(--preview-bg);\n  color: var(--text);\n  font-size: 0.95rem;\n  line-height: 1.85;\n  min-height: 420px;\n}\n\n/* Rendered markdown styles inside preview */\n#md-preview h1, #md-preview h2, #md-preview h3,\n#md-preview h4, #md-preview h5, #md-preview h6 {\n  color: var(--accent);\n  margin: 1.1em 0 0.4em;\n  line-height: 1.35;\n  font-weight: 700;\n}\n#md-preview h1 { font-size: 1.65em; border-bottom: 2px solid var(--border); padding-bottom: 0.2em; }\n#md-preview h2 { font-size: 1.35em; border-bottom: 1px solid var(--border); padding-bottom: 0.15em; }\n#md-preview h3 { font-size: 1.15em; }\n#md-preview h4 { font-size: 1em; }\n#md-preview h5 { font-size: 0.9em; }\n#md-preview h6 { font-size: 0.85em; color: var(--text-muted); }\n\n#md-preview p { margin: 0.7em 0; }\n\n#md-preview a { color: var(--accent); text-decoration: underline; }\n#md-preview a:hover { color: var(--accent-dk); }\n\n#md-preview strong { font-weight: 700; color: inherit; }\n#md-preview em { font-style: italic; }\n#md-preview del { text-decoration: line-through; color: var(--text-muted); }\n\n#md-preview code {\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.88em;\n  background: var(--code-bg);\n  color: #9333ea;\n  padding: 0.15em 0.45em;\n  border-radius: 4px;\n  border: 1px solid var(--border);\n}\n\n#md-preview pre {\n  background: var(--code-bg);\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  padding: 14px 16px;\n  overflow-x: auto;\n  margin: 1em 0;\n}\n#md-preview pre code {\n  background: none;\n  border: none;\n  padding: 0;\n  color: var(--text);\n  font-size: 0.87em;\n  line-height: 1.6;\n}\n\n/* Basic syntax highlight tokens */\n#md-preview pre .kw { color: #9333ea; font-weight: 700; }\n#md-preview pre .str { color: #059669; }\n#md-preview pre .cm { color: #6b7280; font-style: italic; }\n#md-preview pre .nm { color: #b45309; }\n.md-dark #md-preview pre .kw { color: #c084fc; }\n.md-dark #md-preview pre .str { color: #34d399; }\n.md-dark #md-preview pre .cm { color: #9ca3af; }\n.md-dark #md-preview pre .nm { color: #fbbf24; }\n\n#md-preview blockquote {\n  border-left: 4px solid var(--accent);\n  margin: 1em 0;\n  padding: 8px 16px;\n  background: var(--code-bg);\n  border-radius: 0 6px 6px 0;\n  color: var(--text-muted);\n}\n#md-preview blockquote p { margin: 0; }\n\n#md-preview ul, #md-preview ol {\n  padding-left: 1.6em;\n  margin: 0.6em 0;\n}\n#md-preview li { margin: 0.25em 0; }\n#md-preview ul li { list-style-type: disc; }\n#md-preview ol li { list-style-type: decimal; }\n\n#md-preview hr {\n  border: none;\n  border-top: 2px solid var(--border);\n  margin: 1.5em 0;\n}\n\n#md-preview img {\n  max-width: 100%;\n  border-radius: 6px;\n  margin: 0.5em 0;\n}\n\n/* Tables */\n#md-preview table {\n  border-collapse: collapse;\n  width: 100%;\n  margin: 1em 0;\n  font-size: 0.92em;\n}\n#md-preview th {\n  background: var(--accent-lt);\n  color: var(--accent);\n  font-weight: 700;\n  padding: 8px 12px;\n  border: 1px solid var(--border);\n  text-align: left;\n}\n.md-dark #md-preview th {\n  background: #2a2540;\n  color: #c4b5fd;\n}\n#md-preview td {\n  padding: 7px 12px;\n  border: 1px solid var(--border);\n}\n#md-preview tr:nth-child(even) td { background: var(--code-bg); }\n\n/* ── Status Bar ───────────────────────────────────────── */\n#md-status {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 14px;\n  background: var(--status-bg);\n  border: 1px solid var(--border);\n  border-top: none;\n  border-radius: 0 0 var(--radius) var(--radius);\n  padding: 8px 16px;\n  font-size: 0.8rem;\n  color: var(--text-muted);\n}\n.md-stat {\n  display: inline-flex;\n  align-items: center;\n  gap: 4px;\n}\n.md-stat-val {\n  font-weight: 700;\n  color: var(--accent);\n}\n#md-copy-msg {\n  margin-left: auto;\n  color: #059669;\n  font-weight: 600;\n  font-size: 0.78rem;\n  opacity: 0;\n  transition: opacity 0.3s;\n}\n#md-copy-msg.md-show { opacity: 1; }\n\n/* ── freee CTA ────────────────────────────────────────── */\n#md-freee-cta {\n  margin-top: 24px;\n  padding: 18px 20px;\n  background: linear-gradient(135deg, #f0f4ff 0%, #faf5ff 100%);\n  border: 1px solid var(--border);\n  border-left: 4px solid var(--accent);\n  border-radius: 10px;\n  font-size: 0.9rem;\n  line-height: 1.75;\n  color: var(--text);\n}\n#md-freee-cta strong { color: var(--accent); }\n#md-freee-cta a {\n  display: inline-block;\n  margin-top: 10px;\n  padding: 8px 20px;\n  background: var(--accent);\n  color: #fff;\n  border-radius: 6px;\n  text-decoration: none;\n  font-weight: 700;\n  font-size: 0.88rem;\n  transition: background 0.15s;\n}\n#md-freee-cta a:hover { background: var(--accent-dk); }\n\n.md-dark #md-freee-cta {\n  background: linear-gradient(135deg, #1a1828 0%, #2a2540 100%);\n}\n\u003c/style\u003e\n\u003c!-- Toolbar --\u003e\n\u003cdiv id=\"md-toolbar\"\u003e\n  \u003cspan id=\"md-toolbar-title\"\u003e\u0026#128196; マークダウンプレビュー\u003c/span\u003e\n  \u003cdiv id=\"md-toolbar-btns\"\u003e\n    \u003cbutton class=\"md-btn md-btn-ghost\" id=\"md-btn-sample\" onclick=\"mdLoadSample()\"\u003eサンプル読み込み\u003c/button\u003e\n    \u003cbutton class=\"md-btn md-btn-ghost\" id=\"md-btn-clear\" onclick=\"mdClear()\"\u003eクリア\u003c/button\u003e\n    \u003cbutton class=\"md-btn md-btn-ghost\" id=\"md-btn-theme\" onclick=\"mdToggleTheme()\"\u003e\u0026#9790; ダークモード\u003c/button\u003e\n    \u003cbutton class=\"md-btn md-btn-ghost\" id=\"md-btn-copy\" onclick=\"mdCopyHTML()\"\u003eHTMLをコピー\u003c/button\u003e\n    \u003cbutton class=\"md-btn md-btn-primary\" id=\"md-btn-export\" onclick=\"mdExport()\"\u003e.htmlで書き出す\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Split Pane --\u003e\n\u003cdiv id=\"md-split\"\u003e\n  \u003cdiv id=\"md-editor-pane\"\u003e\n    \u003cdiv class=\"md-pane-label\"\u003eマークダウン\u003c/div\u003e\n    \u003ctextarea id=\"md-editor\" placeholder=\"ここにマークダウンを入力...\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"md-preview-pane\"\u003e\n    \u003cdiv class=\"md-pane-label\"\u003eプレビュー\u003c/div\u003e\n    \u003cdiv id=\"md-preview\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Status Bar --\u003e\n\u003cdiv id=\"md-status\"\u003e\n  \u003cspan class=\"md-stat\"\u003e単語数: \u003cspan class=\"md-stat-val\" id=\"md-stat-words\"\u003e0\u003c/span\u003e\u003c/span\u003e\n  \u003cspan class=\"md-stat\"\u003e文字数: \u003cspan class=\"md-stat-val\" id=\"md-stat-chars\"\u003e0\u003c/span\u003e\u003c/span\u003e\n  \u003cspan class=\"md-stat\"\u003e行数: \u003cspan class=\"md-stat-val\" id=\"md-stat-lines\"\u003e0\u003c/span\u003e\u003c/span\u003e\n  \u003cspan class=\"md-stat\"\u003e読了時間: \u003cspan class=\"md-stat-val\" id=\"md-stat-read\"\u003e0 分\u003c/span\u003e\u003c/span\u003e\n  \u003cspan id=\"md-copy-msg\"\u003eクリップボードにコピーしました！\u003c/span\u003e\n\u003c/div\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv id=\"md-freee-cta\"\u003e\n  \u003cstrong\u003e確定申告・会計管理にはfreee\u003c/strong\u003e\u003cbr\u003e\n  マークダウンでドキュメント管理をしている方は、経理もデジタル化しませんか？freeeならクラウドで確定申告が簡単に。\u003cbr\u003e\n  \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" rel=\"nofollow\"\u003efreeeを無料で試す\u003c/a\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c!-- /#md-app --\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  /* ── サンプルコンテンツ ─────────────────────────────── */\n  var SAMPLE = [\n    '# マークダウンプレビューへようこそ',\n    '',\n    'これは**リアルタイムHTMLプレビュー付き**のマークダウンエディターです。左のペインを編集すると、右側に即座に反映されます。',\n    '',\n    '## 主な機能',\n    '',\n    '- リアルタイムのサイドバイサイド編集',\n    '- **太字**、*斜体*、~~取り消し線~~',\n    '- [リンク](https://example.com)と画像の表示',\n    '- コードブロックのシンタックスハイライト',\n    '- 表・引用・水平線など',\n    '',\n    '## コードの例',\n    '',\n    '```javascript',\n    'function greet(name) {',\n    '  // 挨拶を返す',\n    '  return `こんにちは、${name}！`;',\n    '}',\n    'console.log(greet(\"世界\"));',\n    '```',\n    '',\n    '## インラインコード',\n    '',\n    '`const` や `let` は `var` の代わりに使うのが現代的なJavaScriptです。',\n    '',\n    '## 引用',\n    '',\n    '\u003e 「最良のツールとは、実際に使われるものだ。」',\n    '\u003e — 生産性格言',\n    '',\n    '## 表',\n    '',\n    '| 機能 | 対応 |',\n    '|------|------|',\n    '| 見出し | ✅ |',\n    '| 太字・斜体 | ✅ |',\n    '| コードブロック | ✅ |',\n    '| 表 | ✅ |',\n    '| 引用 | ✅ |',\n    '| 画像 | ✅ |',\n    '',\n    '## 画像',\n    '',\n    '![プレースホルダー画像](https://via.placeholder.com/400x200?text=Markdown+Preview)',\n    '',\n    '## 水平線',\n    '',\n    '---',\n    '',\n    '### 番号付きリスト',\n    '',\n    '1. マークダウンでコンテンツを書く',\n    '2. リアルタイムでHTMLプレビューを確認する',\n    '3. HTMLをコピーまたはエクスポートする',\n    '',\n    '快適なライティングを！'\n  ].join('\\n');\n\n  /* ── Markdown Parser ─────────────────────────────────── */\n  function parseMarkdown(md) {\n    var lines = md.split('\\n');\n    var out = '';\n    var i = 0;\n    var inFence = false;\n    var fenceLang = '';\n    var fenceLines = [];\n\n    while (i \u003c lines.length) {\n      var line = lines[i];\n\n      // Fenced code block\n      var fenceMatch = line.match(/^(`{3,}|~{3,})\\s*(\\w*)/);\n      if (fenceMatch \u0026\u0026 !inFence) {\n        inFence = true;\n        fenceLang = fenceMatch[2] || '';\n        fenceLines = [];\n        i++;\n        continue;\n      }\n      if (inFence) {\n        if (/^(`{3,}|~{3,})/.test(line)) {\n          var codeContent = fenceLines.map(escapeHtml).join('\\n');\n          codeContent = highlightCode(codeContent, fenceLang);\n          out += '\u003cpre\u003e\u003ccode' + (fenceLang ? ' class=\"lang-' + escapeHtml(fenceLang) + '\"' : '') + '\u003e' + codeContent + '\u003c/code\u003e\u003c/pre\u003e\\n';\n\u003cpre\u003e\u003ccode\u003e      inFence = false;\n      fenceLang = '';\n      fenceLines = [];\n    } else {\n      fenceLines.push(line);\n    }\n    i++;\n    continue;\n  }\n\n  // Setext headings\n  if (i + 1 \u0026lt; lines.length) {\n    if (/^=+\\s*$/.test(lines[i+1]) \u0026amp;\u0026amp; line.trim()) {\n      out += '\u0026lt;h1\u0026gt;' + inlineMarkdown(line.trim()) + '\u0026lt;/h1\u0026gt;\\n';\n      i += 2; continue;\n    }\n    if (/^-+\\s*$/.test(lines[i+1]) \u0026amp;\u0026amp; line.trim() \u0026amp;\u0026amp; !/^\\s*[-*+] /.test(line)) {\n      out += '\u0026lt;h2\u0026gt;' + inlineMarkdown(line.trim()) + '\u0026lt;/h2\u0026gt;\\n';\n      i += 2; continue;\n    }\n  }\n\n  // ATX headings\n  var hMatch = line.match(/^(#{1,6})\\s+(.+?)(?:\\s+#+)?$/);\n  if (hMatch) {\n    var lvl = hMatch[1].length;\n    out += '\u0026lt;h' + lvl + '\u0026gt;' + inlineMarkdown(hMatch[2].trim()) + '\u0026lt;/h' + lvl + '\u0026gt;\\n';\n    i++; continue;\n  }\n\n  // Horizontal rule\n  if (/^(\\*{3,}|-{3,}|_{3,})\\s*$/.test(line.trim())) {\n    out += '\u0026lt;hr\u0026gt;\\n'; i++; continue;\n  }\n\n  // Blockquote\n  if (/^\u0026gt;\\s?/.test(line)) {\n    var bqLines = [];\n    while (i \u0026lt; lines.length \u0026amp;\u0026amp; /^\u0026gt;\\s?/.test(lines[i])) {\n      bqLines.push(lines[i].replace(/^\u0026gt;\\s?/, ''));\n      i++;\n    }\n    out += '\u0026lt;blockquote\u0026gt;' + parseParagraphs(bqLines.join('\\n')) + '\u0026lt;/blockquote\u0026gt;\\n';\n    continue;\n  }\n\n  // Table\n  if (/\\|/.test(line) \u0026amp;\u0026amp; i + 1 \u0026lt; lines.length \u0026amp;\u0026amp; /^\\|?[\\s:|-]+\\|/.test(lines[i+1])) {\n    var tableLines = [];\n    while (i \u0026lt; lines.length \u0026amp;\u0026amp; /\\|/.test(lines[i])) {\n      tableLines.push(lines[i]); i++;\n    }\n    out += parseTable(tableLines);\n    continue;\n  }\n\n  // Unordered list\n  if (/^(\\s*)[-*+] /.test(line)) {\n    var ulLines = [];\n    while (i \u0026lt; lines.length \u0026amp;\u0026amp; /^(\\s*)[-*+] /.test(lines[i])) {\n      ulLines.push(lines[i]); i++;\n    }\n    out += '\u0026lt;ul\u0026gt;' + ulLines.map(function(l) {\n      return '\u0026lt;li\u0026gt;' + inlineMarkdown(l.replace(/^\\s*[-*+] /, '')) + '\u0026lt;/li\u0026gt;';\n    }).join('') + '\u0026lt;/ul\u0026gt;\\n';\n    continue;\n  }\n\n  // Ordered list\n  if (/^\\d+\\.\\s/.test(line)) {\n    var olLines = [];\n    while (i \u0026lt; lines.length \u0026amp;\u0026amp; /^\\d+\\.\\s/.test(lines[i])) {\n      olLines.push(lines[i]); i++;\n    }\n    out += '\u0026lt;ol\u0026gt;' + olLines.map(function(l) {\n      return '\u0026lt;li\u0026gt;' + inlineMarkdown(l.replace(/^\\d+\\.\\s/, '')) + '\u0026lt;/li\u0026gt;';\n    }).join('') + '\u0026lt;/ol\u0026gt;\\n';\n    continue;\n  }\n\n  // Blank line\n  if (line.trim() === '') { out += '\\n'; i++; continue; }\n\n  // Paragraph\n  var pLines = [];\n  while (i \u0026lt; lines.length \u0026amp;\u0026amp; lines[i].trim() !== ''\n    \u0026amp;\u0026amp; !/^#{1,6}\\s/.test(lines[i])\n    \u0026amp;\u0026amp; !/^(\\*{3,}|-{3,}|_{3,})\\s*$/.test(lines[i].trim())\n    \u0026amp;\u0026amp; !/^\u0026gt;\\s?/.test(lines[i])\n    \u0026amp;\u0026amp; !/^(\\s*)[-*+] /.test(lines[i])\n    \u0026amp;\u0026amp; !/^\\d+\\.\\s/.test(lines[i])\n    \u0026amp;\u0026amp; !/\\|/.test(lines[i])) {\n    pLines.push(lines[i]); i++;\n  }\n  if (pLines.length) {\n    out += '\u0026lt;p\u0026gt;' + inlineMarkdown(pLines.join(' ')) + '\u0026lt;/p\u0026gt;\\n';\n  }\n}\n\nif (inFence \u0026amp;\u0026amp; fenceLines.length) {\n  out += '\u0026lt;pre\u0026gt;\u0026lt;code\u0026gt;' + fenceLines.map(escapeHtml).join('\\n') + '\u0026lt;/code\u0026gt;\u0026lt;/pre\u0026gt;\\n';\n}\n\nreturn out;\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e}\u003c/p\u003e","title":"マークダウンプレビュー - 無料ライブエディター・HTMLプレビューツール"},{"content":"コードなしで本格的なCSSボタンをビジュアル操作でデザイン。すべてのスタイルプロパティをリアルタイムで調整し、内蔵プリセットから選ぶか、完成したCSSとHTMLをワンクリックでコピーできます。\n\u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;bgen-section-title\u0026quot;\u0026gt;プリセット\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-presets\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;primary\u0026quot;\u0026gt;プライマリ\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;secondary\u0026quot;\u0026gt;セカンダリ\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;outline\u0026quot;\u0026gt;アウトライン\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;ghost\u0026quot;\u0026gt;ゴースト\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;gradient\u0026quot;\u0026gt;グラデーション\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;threed\u0026quot;\u0026gt;3D\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;pill\u0026quot;\u0026gt;ピル\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;icon\u0026quot;\u0026gt;アイコン\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;hr class=\u0026quot;bgen-divider\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ボタンテキスト\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bgen-text\u0026quot; class=\u0026quot;bgen-select\u0026quot; value=\u0026quot;クリック\u0026quot; style=\u0026quot;padding:5px 8px;\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-section-title\u0026quot;\u0026gt;カラー\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;背景色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;bgen-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bgen-bg\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bgen-bg-hex\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;文字色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;bgen-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bgen-color\u0026quot; value=\u0026quot;#ffffff\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bgen-color-hex\u0026quot; value=\u0026quot;#ffffff\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ボーダー色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;bgen-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bgen-border-color\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bgen-border-color-hex\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;hr class=\u0026quot;bgen-divider\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;bgen-section-title\u0026quot;\u0026gt;サイズ・フォント\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;フォントサイズ \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-fontsize-val\u0026quot;\u0026gt;16px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-fontsize\u0026quot; min=\u0026quot;10\u0026quot; max=\u0026quot;36\u0026quot; value=\u0026quot;16\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;パディング 横 \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-padh-val\u0026quot;\u0026gt;20px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-padh\u0026quot; min=\u0026quot;4\u0026quot; max=\u0026quot;80\u0026quot; value=\u0026quot;20\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;パディング 縦 \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-padv-val\u0026quot;\u0026gt;12px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-padv\u0026quot; min=\u0026quot;2\u0026quot; max=\u0026quot;40\u0026quot; value=\u0026quot;12\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;角丸 (border-radius) \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-radius-val\u0026quot;\u0026gt;8px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-radius\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;60\u0026quot; value=\u0026quot;8\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;hr class=\u0026quot;bgen-divider\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;bgen-section-title\u0026quot;\u0026gt;ボーダー\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ボーダー太さ \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-bwidth-val\u0026quot;\u0026gt;0px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-bwidth\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;8\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ボーダースタイル\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;bgen-bstyle\u0026quot; class=\u0026quot;bgen-select\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;solid\u0026quot;\u0026gt;実線 (solid)\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;dashed\u0026quot;\u0026gt;破線 (dashed)\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;dotted\u0026quot;\u0026gt;点線 (dotted)\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;double\u0026quot;\u0026gt;二重線 (double)\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;hr class=\u0026quot;bgen-divider\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;bgen-section-title\u0026quot;\u0026gt;ボックスシャドウ\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;影 X \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-sx-val\u0026quot;\u0026gt;0px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-sx\u0026quot; min=\u0026quot;-20\u0026quot; max=\u0026quot;20\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;影 Y \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-sy-val\u0026quot;\u0026gt;4px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-sy\u0026quot; min=\u0026quot;-20\u0026quot; max=\u0026quot;20\u0026quot; value=\u0026quot;4\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;影 ぼかし \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-sblur-val\u0026quot;\u0026gt;14px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-sblur\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;60\u0026quot; value=\u0026quot;14\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;影 拡散 \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-sspread-val\u0026quot;\u0026gt;0px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-sspread\u0026quot; min=\u0026quot;-10\u0026quot; max=\u0026quot;20\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;影の色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;bgen-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bgen-scolor\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bgen-scolor-hex\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;影の透明度 \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-sopacity-val\u0026quot;\u0026gt;30%\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-sopacity\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;30\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;hr class=\u0026quot;bgen-divider\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;bgen-section-title\u0026quot;\u0026gt;ホバーエフェクト\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ホバー時の背景色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;bgen-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bgen-hbg\u0026quot; value=\u0026quot;#4338ca\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bgen-hbg-hex\u0026quot; value=\u0026quot;#4338ca\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-toggle-row\u0026quot;\u0026gt; \u0026lt;label style=\u0026quot;font-size:13px;font-weight:500;color:#333;\u0026quot;\u0026gt;ホバーでスケール\u0026lt;/label\u0026gt; \u0026lt;label class=\u0026quot;bgen-toggle\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;bgen-hover-scale\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;bgen-toggle-slider\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;スケール倍率 \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-hscale-val\u0026quot;\u0026gt;1.05\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-hscale\u0026quot; min=\u0026quot;100\u0026quot; max=\u0026quot;120\u0026quot; value=\u0026quot;105\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-toggle-row\u0026quot;\u0026gt; \u0026lt;label style=\u0026quot;font-size:13px;font-weight:500;color:#333;\u0026quot;\u0026gt;ホバーで影を強調\u0026lt;/label\u0026gt; \u0026lt;label class=\u0026quot;bgen-toggle\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;bgen-hover-shadow\u0026quot; checked\u0026gt; \u0026lt;span class=\u0026quot;bgen-toggle-slider\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;トランジション時間 \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-trans-val\u0026quot;\u0026gt;300ms\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-trans\u0026quot; min=\u0026quot;50\u0026quot; max=\u0026quot;1000\u0026quot; step=\u0026quot;50\u0026quot; value=\u0026quot;300\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-preview-box light\u0026quot; id=\u0026quot;bgen-preview-box\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;bgen-preview-label\u0026quot;\u0026gt;ライブプレビュー\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;bgen-theme-toggle\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;bgen-theme-btn active\u0026quot; data-theme=\u0026quot;light\u0026quot;\u0026gt;ライト\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bgen-theme-btn\u0026quot; data-theme=\u0026quot;dark\u0026quot;\u0026gt;ダーク\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;button id=\u0026quot;bgen-live-btn\u0026quot;\u0026gt;クリック\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;bgen-code-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;bgen-code-tabs\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;bgen-code-tab active\u0026quot; data-tab=\u0026quot;css\u0026quot;\u0026gt;CSS\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;bgen-code-tab\u0026quot; data-tab=\u0026quot;html\u0026quot;\u0026gt;HTML\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;bgen-copy-btn\u0026quot; id=\u0026quot;bgen-copy-btn\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;div class=\u0026quot;bgen-code-output\u0026quot; id=\u0026quot;bgen-code-output\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 使い方 プリセットを選ぶ — プライマリ、アウトライン、グラデーションなど8種類のプリセットからスタート。 コントロールで調整 — 色・サイズ・ボーダー・シャドウ・ホバーエフェクトをリアルタイムで変更。 プレビューテーマを切り替え — ライト・ダーク背景でボタンの見え方を確認。 CSSまたはHTMLをコピー — タブを切り替えて「コピー」をクリック。 プロジェクトに貼り付け — .my-button を自分のクラス名に変更して使用。 CSSプロパティ解説 プロパティ 役割 background-color ボタンの背景色 color テキストの色 font-size テキストサイズ（px） padding 内側の余白（縦 / 横） border-radius 角丸の半径。9999px でピル形状 border ボーダーの太さ・スタイル・色 box-shadow ドロップシャドウ・グロウシャドウ transition ホバーアニメーションの速度 transform: scale() ホバー時の拡大エフェクト プリセット一覧 プライマリ — インディゴの塗りつぶし、控えめなシャドウ セカンダリ — グレー系、シンプルなデザイン アウトライン — 透明背景、カラーのボーダーとテキスト ゴースト — ボーダーも背景もなし、ホバー時に背景色が出現 グラデーション — linear-gradient 背景、グロウシャドウ、スケールホバー 3D — 下方向の実線シャドウで立体感を演出 ピル — border-radius: 9999px の完全丸角 アイコンボタン — 等幅パディングのコンパクトな正方形ボタン アクセシビリティのポイント テキストと背景の コントラスト比は4.5:1以上 を維持する。 :focus-visible でフォーカスリングを明示し、キーボード操作に対応する。 モバイル向けにタップ領域は 44×44px以上 を確保する。 アクション用は \u0026lt;button\u0026gt;、ページ遷移用は \u0026lt;a\u0026gt; タグを使い分ける。 関連する無料ツール CSSボックスシャドウジェネレーター — 多層シャドウのビルドとプレビュー CSSグラデーションジェネレーター — リニア・ラジアル・コニックグラデーション CSSアニメーションジェネレーター — キーフレームアニメーションとイージング設定 freee会計で経理をもっとスマートに 請求書・経費・確定申告をAIが自動化。個人事業主から中小企業まで、freeeならバックオフィス業務を大幅に削減できます。まずは無料でお試しください。\nfreeeを無料で試す ","permalink":"https://productivity-works.com/ja/tools/css-button-generator/","summary":"\u003cp\u003eコードなしで本格的なCSSボタンをビジュアル操作でデザイン。すべてのスタイルプロパティをリアルタイムで調整し、内蔵プリセットから選ぶか、完成したCSSとHTMLをワンクリックでコピーできます。\u003c/p\u003e\n\u003cdiv id=\"btn-app\"\u003e\n\u003cstyle\u003e\n#btn-app *,\n#btn-app *::before,\n#btn-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#btn-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Noto Sans JP\", \"Yu Gothic\", sans-serif;\n  font-size: 14px;\n  color: #1a1a2e;\n  line-height: 1.5;\n}\n#btn-app .bgen-wrap {\n  display: grid;\n  grid-template-columns: 320px 1fr;\n  gap: 24px;\n  margin: 24px 0;\n}\n@media (max-width: 768px) {\n  #btn-app .bgen-wrap {\n    grid-template-columns: 1fr;\n  }\n}\n#btn-app .bgen-panel {\n  background: #f8f9fa;\n  border: 1px solid #e0e0e0;\n  border-radius: 12px;\n  padding: 20px;\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n}\n#btn-app .bgen-section-title {\n  font-size: 11px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #888;\n  margin-bottom: 4px;\n}\n#btn-app .bgen-field {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n#btn-app .bgen-field label {\n  font-size: 13px;\n  font-weight: 500;\n  color: #333;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n#btn-app .bgen-field label span.bgen-val {\n  font-weight: 400;\n  color: #666;\n  font-size: 12px;\n}\n#btn-app .bgen-field input[type=\"range\"] {\n  width: 100%;\n  accent-color: #4f46e5;\n  cursor: pointer;\n}\n#btn-app .bgen-field input[type=\"color\"] {\n  width: 40px;\n  height: 28px;\n  border: 1px solid #ccc;\n  border-radius: 6px;\n  padding: 2px;\n  cursor: pointer;\n  background: none;\n}\n#btn-app .bgen-color-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n#btn-app .bgen-color-row input[type=\"text\"] {\n  flex: 1;\n  border: 1px solid #ccc;\n  border-radius: 6px;\n  padding: 4px 8px;\n  font-size: 12px;\n  font-family: monospace;\n  color: #333;\n}\n#btn-app .bgen-select {\n  width: 100%;\n  border: 1px solid #ccc;\n  border-radius: 6px;\n  padding: 5px 8px;\n  font-size: 13px;\n  background: #fff;\n  color: #333;\n  cursor: pointer;\n}\n#btn-app .bgen-toggle-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n#btn-app .bgen-toggle {\n  position: relative;\n  width: 36px;\n  height: 20px;\n}\n#btn-app .bgen-toggle input {\n  opacity: 0;\n  width: 0;\n  height: 0;\n}\n#btn-app .bgen-toggle-slider {\n  position: absolute;\n  inset: 0;\n  background: #ccc;\n  border-radius: 20px;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n#btn-app .bgen-toggle-slider::before {\n  content: \"\";\n  position: absolute;\n  width: 14px;\n  height: 14px;\n  left: 3px;\n  top: 3px;\n  background: #fff;\n  border-radius: 50%;\n  transition: transform 0.2s;\n}\n#btn-app .bgen-toggle input:checked + .bgen-toggle-slider {\n  background: #4f46e5;\n}\n#btn-app .bgen-toggle input:checked + .bgen-toggle-slider::before {\n  transform: translateX(16px);\n}\n#btn-app .bgen-divider {\n  border: none;\n  border-top: 1px solid #e0e0e0;\n}\n#btn-app .bgen-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n}\n#btn-app .bgen-preset-btn {\n  border: 1px solid #ccc;\n  border-radius: 6px;\n  padding: 4px 10px;\n  font-size: 12px;\n  cursor: pointer;\n  background: #fff;\n  color: #333;\n  transition: all 0.15s;\n}\n#btn-app .bgen-preset-btn:hover {\n  border-color: #4f46e5;\n  color: #4f46e5;\n}\n#btn-app .bgen-right {\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n}\n#btn-app .bgen-preview-box {\n  border: 1px solid #e0e0e0;\n  border-radius: 12px;\n  min-height: 180px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: background 0.3s;\n  padding: 32px;\n  position: relative;\n}\n#btn-app .bgen-preview-box.dark {\n  background: #1a1a2e;\n  border-color: #333;\n}\n#btn-app .bgen-preview-box.light {\n  background: #ffffff;\n}\n#btn-app .bgen-preview-label {\n  position: absolute;\n  top: 10px;\n  left: 14px;\n  font-size: 11px;\n  color: #aaa;\n  letter-spacing: 0.04em;\n}\n#btn-app .bgen-theme-toggle {\n  position: absolute;\n  top: 8px;\n  right: 12px;\n  display: flex;\n  gap: 6px;\n}\n#btn-app .bgen-theme-btn {\n  border: 1px solid #ccc;\n  border-radius: 6px;\n  padding: 2px 8px;\n  font-size: 11px;\n  cursor: pointer;\n  background: #fff;\n  color: #555;\n}\n#btn-app .bgen-theme-btn.active {\n  background: #4f46e5;\n  color: #fff;\n  border-color: #4f46e5;\n}\n#btn-app #bgen-live-btn {\n  display: inline-block;\n  cursor: pointer;\n  text-decoration: none;\n  border: 2px solid transparent;\n  transition: all 0.3s ease;\n}\n#btn-app .bgen-code-block {\n  background: #1e1e2e;\n  border-radius: 10px;\n  padding: 16px;\n  position: relative;\n}\n#btn-app .bgen-code-tabs {\n  display: flex;\n  gap: 4px;\n  margin-bottom: 12px;\n}\n#btn-app .bgen-code-tab {\n  padding: 4px 12px;\n  border-radius: 6px;\n  font-size: 12px;\n  cursor: pointer;\n  background: #2d2d44;\n  color: #aaa;\n  border: none;\n}\n#btn-app .bgen-code-tab.active {\n  background: #4f46e5;\n  color: #fff;\n}\n#btn-app .bgen-code-output {\n  font-family: \"Fira Code\", \"Cascadia Code\", monospace;\n  font-size: 12px;\n  color: #cdd6f4;\n  white-space: pre-wrap;\n  word-break: break-all;\n  line-height: 1.6;\n  max-height: 200px;\n  overflow-y: auto;\n}\n#btn-app .bgen-copy-btn {\n  position: absolute;\n  top: 12px;\n  right: 12px;\n  background: #4f46e5;\n  color: #fff;\n  border: none;\n  border-radius: 6px;\n  padding: 4px 12px;\n  font-size: 12px;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#btn-app .bgen-copy-btn:hover { background: #4338ca; }\n#btn-app .bgen-copy-btn.copied { background: #16a34a; }\n/* freee CTA */\n#btn-app-freee-cta {\n  margin-top: 40px;\n  background: linear-gradient(135deg, #e8f4fd 0%, #f0f7ff 100%);\n  border: 1px solid #b3d9f7;\n  border-radius: 12px;\n  padding: 24px 28px;\n  display: flex;\n  align-items: center;\n  gap: 20px;\n  flex-wrap: wrap;\n}\n#btn-app-freee-cta .cta-text { flex: 1; min-width: 200px; }\n#btn-app-freee-cta .cta-text h3 { font-size: 16px; font-weight: 700; color: #1a3a5c; margin-bottom: 6px; }\n#btn-app-freee-cta .cta-text p { font-size: 13px; color: #4a6580; line-height: 1.6; }\n#btn-app-freee-cta .cta-btn {\n  display: inline-block;\n  background: #0070c9;\n  color: #fff;\n  font-size: 14px;\n  font-weight: 600;\n  padding: 12px 24px;\n  border-radius: 8px;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: background 0.2s;\n}\n#btn-app-freee-cta .cta-btn:hover { background: #005fa3; }\n\u003c/style\u003e\n\u003cdiv class=\"bgen-wrap\"\u003e\n  \u003c!-- 左: コントロール --\u003e\n  \u003cdiv class=\"bgen-panel\"\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div\u0026gt;\n  \u0026lt;div class=\u0026quot;bgen-section-title\u0026quot;\u0026gt;プリセット\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;bgen-presets\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;primary\u0026quot;\u0026gt;プライマリ\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;secondary\u0026quot;\u0026gt;セカンダリ\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;outline\u0026quot;\u0026gt;アウトライン\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;ghost\u0026quot;\u0026gt;ゴースト\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;gradient\u0026quot;\u0026gt;グラデーション\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;threed\u0026quot;\u0026gt;3D\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;pill\u0026quot;\u0026gt;ピル\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;bgen-preset-btn\u0026quot; data-preset=\u0026quot;icon\u0026quot;\u0026gt;アイコン\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;hr class=\u0026quot;bgen-divider\u0026quot;\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;ボタンテキスト\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bgen-text\u0026quot; class=\u0026quot;bgen-select\u0026quot; value=\u0026quot;クリック\u0026quot; style=\u0026quot;padding:5px 8px;\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-section-title\u0026quot;\u0026gt;カラー\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;背景色\u0026lt;/label\u0026gt;\n  \u0026lt;div class=\u0026quot;bgen-color-row\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bgen-bg\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bgen-bg-hex\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;文字色\u0026lt;/label\u0026gt;\n  \u0026lt;div class=\u0026quot;bgen-color-row\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bgen-color\u0026quot; value=\u0026quot;#ffffff\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bgen-color-hex\u0026quot; value=\u0026quot;#ffffff\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;ボーダー色\u0026lt;/label\u0026gt;\n  \u0026lt;div class=\u0026quot;bgen-color-row\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bgen-border-color\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bgen-border-color-hex\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;hr class=\u0026quot;bgen-divider\u0026quot;\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-section-title\u0026quot;\u0026gt;サイズ・フォント\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;フォントサイズ \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-fontsize-val\u0026quot;\u0026gt;16px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-fontsize\u0026quot; min=\u0026quot;10\u0026quot; max=\u0026quot;36\u0026quot; value=\u0026quot;16\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;パディング 横 \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-padh-val\u0026quot;\u0026gt;20px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-padh\u0026quot; min=\u0026quot;4\u0026quot; max=\u0026quot;80\u0026quot; value=\u0026quot;20\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;パディング 縦 \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-padv-val\u0026quot;\u0026gt;12px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-padv\u0026quot; min=\u0026quot;2\u0026quot; max=\u0026quot;40\u0026quot; value=\u0026quot;12\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;角丸 (border-radius) \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-radius-val\u0026quot;\u0026gt;8px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-radius\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;60\u0026quot; value=\u0026quot;8\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;hr class=\u0026quot;bgen-divider\u0026quot;\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-section-title\u0026quot;\u0026gt;ボーダー\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;ボーダー太さ \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-bwidth-val\u0026quot;\u0026gt;0px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-bwidth\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;8\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;ボーダースタイル\u0026lt;/label\u0026gt;\n  \u0026lt;select id=\u0026quot;bgen-bstyle\u0026quot; class=\u0026quot;bgen-select\u0026quot;\u0026gt;\n    \u0026lt;option value=\u0026quot;solid\u0026quot;\u0026gt;実線 (solid)\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;dashed\u0026quot;\u0026gt;破線 (dashed)\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;dotted\u0026quot;\u0026gt;点線 (dotted)\u0026lt;/option\u0026gt;\n    \u0026lt;option value=\u0026quot;double\u0026quot;\u0026gt;二重線 (double)\u0026lt;/option\u0026gt;\n  \u0026lt;/select\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;hr class=\u0026quot;bgen-divider\u0026quot;\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-section-title\u0026quot;\u0026gt;ボックスシャドウ\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;影 X \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-sx-val\u0026quot;\u0026gt;0px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-sx\u0026quot; min=\u0026quot;-20\u0026quot; max=\u0026quot;20\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;影 Y \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-sy-val\u0026quot;\u0026gt;4px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-sy\u0026quot; min=\u0026quot;-20\u0026quot; max=\u0026quot;20\u0026quot; value=\u0026quot;4\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;影 ぼかし \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-sblur-val\u0026quot;\u0026gt;14px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-sblur\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;60\u0026quot; value=\u0026quot;14\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;影 拡散 \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-sspread-val\u0026quot;\u0026gt;0px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-sspread\u0026quot; min=\u0026quot;-10\u0026quot; max=\u0026quot;20\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;影の色\u0026lt;/label\u0026gt;\n  \u0026lt;div class=\u0026quot;bgen-color-row\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bgen-scolor\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bgen-scolor-hex\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;影の透明度 \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-sopacity-val\u0026quot;\u0026gt;30%\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-sopacity\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;30\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;hr class=\u0026quot;bgen-divider\u0026quot;\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-section-title\u0026quot;\u0026gt;ホバーエフェクト\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;ホバー時の背景色\u0026lt;/label\u0026gt;\n  \u0026lt;div class=\u0026quot;bgen-color-row\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;bgen-hbg\u0026quot; value=\u0026quot;#4338ca\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;bgen-hbg-hex\u0026quot; value=\u0026quot;#4338ca\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-toggle-row\u0026quot;\u0026gt;\n  \u0026lt;label style=\u0026quot;font-size:13px;font-weight:500;color:#333;\u0026quot;\u0026gt;ホバーでスケール\u0026lt;/label\u0026gt;\n  \u0026lt;label class=\u0026quot;bgen-toggle\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;bgen-hover-scale\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;bgen-toggle-slider\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\n  \u0026lt;/label\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;スケール倍率 \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-hscale-val\u0026quot;\u0026gt;1.05\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-hscale\u0026quot; min=\u0026quot;100\u0026quot; max=\u0026quot;120\u0026quot; value=\u0026quot;105\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-toggle-row\u0026quot;\u0026gt;\n  \u0026lt;label style=\u0026quot;font-size:13px;font-weight:500;color:#333;\u0026quot;\u0026gt;ホバーで影を強調\u0026lt;/label\u0026gt;\n  \u0026lt;label class=\u0026quot;bgen-toggle\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;bgen-hover-shadow\u0026quot; checked\u0026gt;\n    \u0026lt;span class=\u0026quot;bgen-toggle-slider\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\n  \u0026lt;/label\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;トランジション時間 \u0026lt;span class=\u0026quot;bgen-val\u0026quot; id=\u0026quot;bgen-trans-val\u0026quot;\u0026gt;300ms\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;bgen-trans\u0026quot; min=\u0026quot;50\u0026quot; max=\u0026quot;1000\u0026quot; step=\u0026quot;50\u0026quot; value=\u0026quot;300\u0026quot;\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- 右: プレビュー + コード --\u003e\n  \u003cdiv class=\"bgen-right\"\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div class=\u0026quot;bgen-preview-box light\u0026quot; id=\u0026quot;bgen-preview-box\u0026quot;\u0026gt;\n  \u0026lt;span class=\u0026quot;bgen-preview-label\u0026quot;\u0026gt;ライブプレビュー\u0026lt;/span\u0026gt;\n  \u0026lt;div class=\u0026quot;bgen-theme-toggle\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;bgen-theme-btn active\u0026quot; data-theme=\u0026quot;light\u0026quot;\u0026gt;ライト\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;bgen-theme-btn\u0026quot; data-theme=\u0026quot;dark\u0026quot;\u0026gt;ダーク\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;button id=\u0026quot;bgen-live-btn\u0026quot;\u0026gt;クリック\u0026lt;/button\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;bgen-code-block\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;bgen-code-tabs\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;bgen-code-tab active\u0026quot; data-tab=\u0026quot;css\u0026quot;\u0026gt;CSS\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;bgen-code-tab\u0026quot; data-tab=\u0026quot;html\u0026quot;\u0026gt;HTML\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;button class=\u0026quot;bgen-copy-btn\u0026quot; id=\u0026quot;bgen-copy-btn\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt;\n  \u0026lt;div class=\u0026quot;bgen-code-output\u0026quot; id=\u0026quot;bgen-code-output\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var S = {\n    text: \"クリック\",\n    bg: \"#4f46e5\",\n    color: \"#ffffff\",\n    borderColor: \"#4f46e5\",\n    fontSize: 16,\n    padH: 20,\n    padV: 12,\n    radius: 8,\n    bwidth: 0,\n    bstyle: \"solid\",\n    sx: 0, sy: 4, sblur: 14, sspread: 0,\n    scolor: \"#4f46e5\",\n    sopacity: 30,\n    hbg: \"#4338ca\",\n    hoverScale: false,\n    hscale: 1.05,\n    hoverShadow: true,\n    trans: 300,\n    activeTab: \"css\"\n  };\n\n  var presets = {\n    primary:   { bg:\"#4f46e5\", color:\"#ffffff\", borderColor:\"#4f46e5\", bwidth:0, radius:8, sx:0, sy:4, sblur:14, sspread:0, scolor:\"#4f46e5\", sopacity:30, hbg:\"#4338ca\", hoverScale:false, hoverShadow:true, padH:20, padV:12 },\n    secondary: { bg:\"#6b7280\", color:\"#ffffff\", borderColor:\"#6b7280\", bwidth:0, radius:8, sx:0, sy:2, sblur:8, sspread:0, scolor:\"#000000\", sopacity:20, hbg:\"#4b5563\", hoverScale:false, hoverShadow:false, padH:20, padV:12 },\n    outline:   { bg:\"#ffffff\", color:\"#4f46e5\", borderColor:\"#4f46e5\", bwidth:2, radius:8, sx:0, sy:0, sblur:0, sspread:0, scolor:\"#4f46e5\", sopacity:0, hbg:\"#eef2ff\", hoverScale:false, hoverShadow:false, padH:20, padV:12 },\n    ghost:     { bg:\"transparent\", color:\"#4f46e5\", borderColor:\"transparent\", bwidth:0, radius:8, sx:0, sy:0, sblur:0, sspread:0, scolor:\"#4f46e5\", sopacity:0, hbg:\"#eef2ff\", hoverScale:false, hoverShadow:false, padH:20, padV:12 },\n    gradient:  { bg:\"#6366f1\", color:\"#ffffff\", borderColor:\"transparent\", bwidth:0, radius:10, sx:0, sy:4, sblur:20, sspread:0, scolor:\"#6366f1\", sopacity:40, hbg:\"#4f46e5\", hoverScale:true, hoverShadow:true, padH:24, padV:14 },\n    threed:    { bg:\"#4f46e5\", color:\"#ffffff\", borderColor:\"#3730a3\", bwidth:0, radius:8, sx:0, sy:5, sblur:0, sspread:0, scolor:\"#3730a3\", sopacity:100, hbg:\"#4338ca\", hoverScale:false, hoverShadow:false, padH:20, padV:12 },\n    pill:      { bg:\"#4f46e5\", color:\"#ffffff\", borderColor:\"#4f46e5\", bwidth:0, radius:60, sx:0, sy:4, sblur:14, sspread:0, scolor:\"#4f46e5\", sopacity:30, hbg:\"#4338ca\", hoverScale:true, hoverShadow:true, padH:28, padV:12 },\n    icon:      { bg:\"#4f46e5\", color:\"#ffffff\", borderColor:\"#4f46e5\", bwidth:0, radius:50, sx:0, sy:4, sblur:14, sspread:0, scolor:\"#4f46e5\", sopacity:30, hbg:\"#4338ca\", hoverScale:true, hoverShadow:true, padH:14, padV:14 }\n  };\n\n  function hexToRgb(hex) {\n    var r=0,g=0,b=0;\n    hex=hex.replace('#','');\n    if(hex.length===3) hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];\n    if(hex.length===6){r=parseInt(hex.substring(0,2),16);g=parseInt(hex.substring(2,4),16);b=parseInt(hex.substring(4,6),16);}\n    return {r:r,g:g,b:b};\n  }\n\n  function shadowCSS() {\n    var rgb=hexToRgb(S.scolor), a=S.sopacity/100;\n    return S.sx+'px '+S.sy+'px '+S.sblur+'px '+S.sspread+'px rgba('+rgb.r+','+rgb.g+','+rgb.b+','+a.toFixed(2)+')';\n  }\n\n  function hoverShadowCSS() {\n    var rgb=hexToRgb(S.scolor);\n    return S.sx+'px '+(S.sy+4)+'px '+(S.sblur+10)+'px '+S.sspread+'px rgba('+rgb.r+','+rgb.g+','+rgb.b+',0.45)';\n  }\n\n  function buildBaseCSS() {\n    var bg = S.bg==='transparent'?'transparent':S.bg;\n    var shadow = (S.sopacity\u003e0||S.sx!==0||S.sy!==0||S.sblur!==0||S.sspread!==0)?shadowCSS():'none';\n    return [\n      'display: inline-block;',\n      'background-color: '+bg+';',\n      'color: '+S.color+';',\n      'font-size: '+S.fontSize+'px;',\n      'padding: '+S.padV+'px '+S.padH+'px;',\n      'border-radius: '+S.radius+'px;',\n      'border: '+S.bwidth+'px '+S.bstyle+' '+S.borderColor+';',\n      'box-shadow: '+shadow+';',\n      'cursor: pointer;',\n      'transition: all '+S.trans+'ms ease;',\n      'text-decoration: none;',\n    ].join('\\n  ');\n  }\n\n  function buildHoverCSS() {\n    var parts=['background-color: '+S.hbg+';'];\n    if(S.hoverScale) parts.push('transform: scale('+S.hscale+');');\n    if(S.hoverShadow) parts.push('box-shadow: '+hoverShadowCSS()+';');\n    return parts.join('\\n  ');\n  }\n\n  function generateCSS() {\n    return '.my-button {\\n  '+buildBaseCSS()+'\\n}\\n\\n.my-button:hover {\\n  '+buildHoverCSS()+'\\n}';\n  }\n\n  function generateHTML() {\n    return '\u003cbutton class=\"my-button\"\u003e'+S.text+'\u003c/button\u003e';\n  }\n\n  var liveBtn = document.getElementById('bgen-live-btn');\n  var codeOut = document.getElementById('bgen-code-output');\n\n  function applyLiveStyle() {\n    var bg = S.bg==='transparent'?'transparent':S.bg;\n    var shadow = (S.sopacity\u003e0||S.sx!==0||S.sy!==0||S.sblur!==0||S.sspread!==0)?shadowCSS():'none';\n    liveBtn.textContent = S.text;\n    liveBtn.style.backgroundColor = bg;\n    liveBtn.style.color = S.color;\n    liveBtn.style.fontSize = S.fontSize+'px';\n    liveBtn.style.padding = S.padV+'px '+S.padH+'px';\n    liveBtn.style.borderRadius = S.radius+'px';\n    liveBtn.style.border = S.bwidth+'px '+S.bstyle+' '+S.borderColor;\n    liveBtn.style.boxShadow = shadow;\n    liveBtn.style.transition = 'all '+S.trans+'ms ease';\n    liveBtn.style.cursor = 'pointer';\n    liveBtn.onmouseover = function() {\n      this.style.backgroundColor = S.hbg;\n      if(S.hoverScale) this.style.transform = 'scale('+S.hscale+')';\n      if(S.hoverShadow) this.style.boxShadow = hoverShadowCSS();\n    };\n    liveBtn.onmouseout = function() {\n      this.style.backgroundColor = bg;\n      this.style.transform = '';\n      this.style.boxShadow = shadow;\n    };\n  }\n\n  function updateCode() {\n    codeOut.textContent = S.activeTab==='css' ? generateCSS() : generateHTML();\n  }\n\n  function update() { applyLiveStyle(); updateCode(); }\n\n  function syncColor(pickerId, hexId, stateKey) {\n    var picker=document.getElementById(pickerId), hex=document.getElementById(hexId);\n    picker.addEventListener('input', function(){ S[stateKey]=this.value; hex.value=this.value; update(); });\n    hex.addEventListener('input', function(){ if(/^#[0-9a-fA-F]{6}$/.test(this.value)){ S[stateKey]=this.value; picker.value=this.value; update(); } });\n  }\n\n  function syncRange(id, stateKey, valId, suffix, divisor) {\n    var el=document.getElementById(id), valEl=document.getElementById(valId);\n    el.addEventListener('input', function(){\n      var v=parseFloat(this.value);\n      S[stateKey]=divisor?v/divisor:v;\n      valEl.textContent=divisor?(v/divisor).toFixed(2):v+suffix;\n      update();\n    });\n  }\n\n  document.getElementById('bgen-text').addEventListener('input', function(){ S.text=this.value||\"ボタン\"; update(); });\n\n  syncColor('bgen-bg','bgen-bg-hex','bg');\n  syncColor('bgen-color','bgen-color-hex','color');\n  syncColor('bgen-border-color','bgen-border-color-hex','borderColor');\n  syncColor('bgen-scolor','bgen-scolor-hex','scolor');\n  syncColor('bgen-hbg','bgen-hbg-hex','hbg');\n\n  syncRange('bgen-fontsize','fontSize','bgen-fontsize-val','px',null);\n  syncRange('bgen-padh','padH','bgen-padh-val','px',null);\n  syncRange('bgen-padv','padV','bgen-padv-val','px',null);\n  syncRange('bgen-radius','radius','bgen-radius-val','px',null);\n  syncRange('bgen-bwidth','bwidth','bgen-bwidth-val','px',null);\n  syncRange('bgen-sx','sx','bgen-sx-val','px',null);\n  syncRange('bgen-sy','sy','bgen-sy-val','px',null);\n  syncRange('bgen-sblur','sblur','bgen-sblur-val','px',null);\n  syncRange('bgen-sspread','sspread','bgen-sspread-val','px',null);\n  syncRange('bgen-sopacity','sopacity','bgen-sopacity-val','%',null);\n  syncRange('bgen-hscale','hscale','bgen-hscale-val','',100);\n  syncRange('bgen-trans','trans','bgen-trans-val','ms',null);\n\n  document.getElementById('bgen-bstyle').addEventListener('change', function(){ S.bstyle=this.value; update(); });\n  document.getElementById('bgen-hover-scale').addEventListener('change', function(){ S.hoverScale=this.checked; update(); });\n  document.getElementById('bgen-hover-shadow').addEventListener('change', function(){ S.hoverShadow=this.checked; update(); });\n\n  document.querySelectorAll('#btn-app .bgen-preset-btn').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      var p=presets[this.dataset.preset];\n      if(!p) return;\n      Object.assign(S,p);\n      document.getElementById('bgen-bg').value = S.bg!=='transparent'?S.bg:'#ffffff';\n      document.getElementById('bgen-bg-hex').value = S.bg;\n      document.getElementById('bgen-color').value = S.color;\n      document.getElementById('bgen-color-hex').value = S.color;\n      document.getElementById('bgen-border-color').value = S.borderColor!=='transparent'?S.borderColor:'#ffffff';\n      document.getElementById('bgen-border-color-hex').value = S.borderColor;\n      document.getElementById('bgen-scolor').value = S.scolor;\n      document.getElementById('bgen-scolor-hex').value = S.scolor;\n      document.getElementById('bgen-hbg').value = S.hbg;\n      document.getElementById('bgen-hbg-hex').value = S.hbg;\n      document.getElementById('bgen-fontsize').value = S.fontSize;\n      document.getElementById('bgen-fontsize-val').textContent = S.fontSize+'px';\n      document.getElementById('bgen-padh').value = S.padH;\n      document.getElementById('bgen-padh-val').textContent = S.padH+'px';\n      document.getElementById('bgen-padv').value = S.padV;\n      document.getElementById('bgen-padv-val').textContent = S.padV+'px';\n      document.getElementById('bgen-radius').value = S.radius;\n      document.getElementById('bgen-radius-val').textContent = S.radius+'px';\n      document.getElementById('bgen-bwidth').value = S.bwidth;\n      document.getElementById('bgen-bwidth-val').textContent = S.bwidth+'px';\n      document.getElementById('bgen-sx').value = S.sx;\n      document.getElementById('bgen-sx-val').textContent = S.sx+'px';\n      document.getElementById('bgen-sy').value = S.sy;\n      document.getElementById('bgen-sy-val').textContent = S.sy+'px';\n      document.getElementById('bgen-sblur').value = S.sblur;\n      document.getElementById('bgen-sblur-val').textContent = S.sblur+'px';\n      document.getElementById('bgen-sspread').value = S.sspread;\n      document.getElementById('bgen-sspread-val').textContent = S.sspread+'px';\n      document.getElementById('bgen-sopacity').value = S.sopacity;\n      document.getElementById('bgen-sopacity-val').textContent = S.sopacity+'%';\n      document.getElementById('bgen-hscale').value = Math.round(S.hscale*100);\n      document.getElementById('bgen-hscale-val').textContent = S.hscale.toFixed(2);\n      document.getElementById('bgen-hover-scale').checked = S.hoverScale;\n      document.getElementById('bgen-hover-shadow').checked = S.hoverShadow;\n      document.getElementById('bgen-trans').value = S.trans;\n      document.getElementById('bgen-trans-val').textContent = S.trans+'ms';\n      update();\n    });\n  });\n\n  document.querySelectorAll('#btn-app .bgen-theme-btn').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      document.querySelectorAll('#btn-app .bgen-theme-btn').forEach(function(b){ b.classList.remove('active'); });\n      this.classList.add('active');\n      var box=document.getElementById('bgen-preview-box');\n      box.classList.remove('light','dark');\n      box.classList.add(this.dataset.theme);\n    });\n  });\n\n  document.querySelectorAll('#btn-app .bgen-code-tab').forEach(function(tab) {\n    tab.addEventListener('click', function() {\n      document.querySelectorAll('#btn-app .bgen-code-tab').forEach(function(t){ t.classList.remove('active'); });\n      this.classList.add('active');\n      S.activeTab=this.dataset.tab;\n      updateCode();\n    });\n  });\n\n  document.getElementById('bgen-copy-btn').addEventListener('click', function() {\n    var text=codeOut.textContent, btn=this;\n    if(navigator.clipboard) {\n      navigator.clipboard.writeText(text).then(function(){\n        btn.textContent='コピー完了!'; btn.classList.add('copied');\n        setTimeout(function(){ btn.textContent='コピー'; btn.classList.remove('copied'); },1800);\n      });\n    } else {\n      var ta=document.createElement('textarea'); ta.value=text; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta);\n      btn.textContent='コピー完了!'; btn.classList.add('copied');\n      setTimeout(function(){ btn.textContent='コピー'; btn.classList.remove('copied'); },1800);\n    }\n  });\n\n  update();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eプリセットを選ぶ\u003c/strong\u003e — プライマリ、アウトライン、グラデーションなど8種類のプリセットからスタート。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eコントロールで調整\u003c/strong\u003e — 色・サイズ・ボーダー・シャドウ・ホバーエフェクトをリアルタイムで変更。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eプレビューテーマを切り替え\u003c/strong\u003e — ライト・ダーク背景でボタンの見え方を確認。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCSSまたはHTMLをコピー\u003c/strong\u003e — タブを切り替えて「コピー」をクリック。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eプロジェクトに貼り付け\u003c/strong\u003e — \u003ccode\u003e.my-button\u003c/code\u003e を自分のクラス名に変更して使用。\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"cssプロパティ解説\"\u003eCSSプロパティ解説\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eプロパティ\u003c/th\u003e\n          \u003cth\u003e役割\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003ebackground-color\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eボタンの背景色\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003ecolor\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eテキストの色\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003efont-size\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eテキストサイズ（px）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003epadding\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e内側の余白（縦 / 横）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003eborder-radius\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e角丸の半径。\u003ccode\u003e9999px\u003c/code\u003e でピル形状\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003eborder\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eボーダーの太さ・スタイル・色\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003ebox-shadow\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eドロップシャドウ・グロウシャドウ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003etransition\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eホバーアニメーションの速度\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003etransform: scale()\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eホバー時の拡大エフェクト\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"プリセット一覧\"\u003eプリセット一覧\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eプライマリ\u003c/strong\u003e — インディゴの塗りつぶし、控えめなシャドウ\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eセカンダリ\u003c/strong\u003e — グレー系、シンプルなデザイン\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eアウトライン\u003c/strong\u003e — 透明背景、カラーのボーダーとテキスト\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eゴースト\u003c/strong\u003e — ボーダーも背景もなし、ホバー時に背景色が出現\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eグラデーション\u003c/strong\u003e — \u003ccode\u003elinear-gradient\u003c/code\u003e 背景、グロウシャドウ、スケールホバー\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e3D\u003c/strong\u003e — 下方向の実線シャドウで立体感を演出\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eピル\u003c/strong\u003e — \u003ccode\u003eborder-radius: 9999px\u003c/code\u003e の完全丸角\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eアイコンボタン\u003c/strong\u003e — 等幅パディングのコンパクトな正方形ボタン\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"アクセシビリティのポイント\"\u003eアクセシビリティのポイント\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eテキストと背景の \u003cstrong\u003eコントラスト比は4.5:1以上\u003c/strong\u003e を維持する。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e:focus-visible\u003c/code\u003e でフォーカスリングを明示し、キーボード操作に対応する。\u003c/li\u003e\n\u003cli\u003eモバイル向けにタップ領域は \u003cstrong\u003e44×44px以上\u003c/strong\u003e を確保する。\u003c/li\u003e\n\u003cli\u003eアクション用は \u003ccode\u003e\u0026lt;button\u0026gt;\u003c/code\u003e、ページ遷移用は \u003ccode\u003e\u0026lt;a\u0026gt;\u003c/code\u003e タグを使い分ける。\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連する無料ツール\"\u003e関連する無料ツール\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/tools/box-shadow-generator/\"\u003eCSSボックスシャドウジェネレーター\u003c/a\u003e\n — 多層シャドウのビルドとプレビュー\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/tools/css-gradient-generator/\"\u003eCSSグラデーションジェネレーター\u003c/a\u003e\n — リニア・ラジアル・コニックグラデーション\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/tools/css-animation-generator/\"\u003eCSSアニメーションジェネレーター\u003c/a\u003e\n — キーフレームアニメーションとイージング設定\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003cdiv id=\"btn-app-freee-cta\"\u003e\n  \u003cdiv class=\"cta-text\"\u003e\n    \u003ch3\u003efreee会計で経理をもっとスマートに\u003c/h3\u003e\n    \u003cp\u003e請求書・経費・確定申告をAIが自動化。個人事業主から中小企業まで、freeeならバックオフィス業務を大幅に削減できます。まずは無料でお試しください。\u003c/p\u003e","title":"CSSボタンジェネレーター — 無料ビジュアルビルダー"},{"content":" テキストを入力してください テキストをコピー クリア 0単語数 0文字数\n（スペース含む） 0文字数\n（スペース除く） 0文の数 0段落数 0平均単語長 \u0026#128214; 0秒 読了時間（225語/分） \u0026#127897; 0秒 朗読時間（130語/分） 可読性スコア（Flesch-Kincaid） \u0026#8212; テキストを入力すると計算されます 非常に難解 (0) 標準 (60) とても簡単 (100) 上位10キーワードと出現頻度 テキストを入力するとキーワード分析が表示されます 検索 \u0026amp; 置換 すべて置換 一致数を確認 クリア 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n文字数カウント → 文字数カウンター 単語頻度 → 単語頻度カウンター 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; 関連ツール Case Converter → Case Converterツール Character Counter → Character Counterツール Lorem Ipsum Generator → Lorem Ipsum Generatorツール 関連記事 AIを使ったブログ記事の書き方入門【2026年版・SEOで上位表示を狙う方法】 AIで高品質な文章を作成するコツ7つ【プロが使うテクニック】 AI要約ツール おすすめ無料10選【2026年版】用途別に徹底比較 ","permalink":"https://productivity-works.com/ja/tools/word-counter/","summary":"\u003cdiv id=\"wc-app\"\u003e\n\u003cstyle\u003e\n#wc-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', 'Meiryo', system-ui, sans-serif;\n  background: #0f0f13;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin: 0 auto;\n  max-width: 960px;\n  box-sizing: border-box;\n}\n#wc-app * { box-sizing: border-box; }\n\n#wc-app h2 {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #f1f5f9;\n  margin: 0 0 12px 0;\n}\n\n#wc-app h3 {\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #94a3b8;\n  margin: 0 0 10px 0;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n\n#wc-textarea {\n  width: 100%;\n  min-height: 160px;\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  color: #e2e8f0;\n  font-size: 0.97rem;\n  padding: 12px 14px;\n  resize: vertical;\n  font-family: inherit;\n  transition: border-color 0.2s;\n  outline: none;\n  line-height: 1.7;\n}\n#wc-textarea:focus { border-color: #6366f1; }\n#wc-textarea::placeholder { color: #4a4a6a; }\n\n.wc-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 10px;\n  margin-bottom: 20px;\n}\n.wc-btn {\n  padding: 7px 15px;\n  border-radius: 6px;\n  border: none;\n  font-size: 0.84rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n  font-family: inherit;\n}\n.wc-btn:active { transform: scale(0.97); }\n.wc-btn-primary { background: #6366f1; color: #fff; }\n.wc-btn-primary:hover { background: #4f46e5; }\n.wc-btn-danger { background: #1a1a24; color: #f87171; border: 1px solid #3d2020; }\n.wc-btn-danger:hover { background: #2d1a1a; }\n.wc-btn-secondary { background: #1e293b; color: #94a3b8; border: 1px solid #2d3748; }\n.wc-btn-secondary:hover { background: #253347; color: #e2e8f0; }\n.wc-copy-btn { background: #1a1a24; color: #a5b4fc; border: 1px solid #2d2d4d; }\n.wc-copy-btn:hover { background: #22224a; }\n\n.wc-stats-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n  gap: 10px;\n  margin-bottom: 20px;\n}\n.wc-stat-card {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 12px 14px;\n  text-align: center;\n}\n.wc-stat-value {\n  font-size: 1.5rem;\n  font-weight: 700;\n  color: #a5b4fc;\n  line-height: 1.2;\n}\n.wc-stat-label {\n  font-size: 0.74rem;\n  color: #64748b;\n  margin-top: 4px;\n  line-height: 1.4;\n}\n\n.wc-time-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n  gap: 10px;\n  margin-bottom: 20px;\n}\n.wc-time-card {\n  background: #161b2e;\n  border: 1px solid #1e2a4a;\n  border-radius: 8px;\n  padding: 12px 16px;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n.wc-time-icon { font-size: 1.4rem; line-height: 1; }\n.wc-time-val {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #7dd3fc;\n}\n.wc-time-desc { font-size: 0.74rem; color: #64748b; }\n\n.wc-readability-wrap {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 16px;\n  margin-bottom: 20px;\n}\n.wc-rbar-track {\n  background: #0f0f18;\n  border-radius: 99px;\n  height: 10px;\n  margin: 10px 0 6px;\n  overflow: hidden;\n}\n.wc-rbar-fill {\n  height: 100%;\n  border-radius: 99px;\n  transition: width 0.4s ease, background 0.4s;\n}\n.wc-rbar-labels {\n  display: flex;\n  justify-content: space-between;\n  font-size: 0.7rem;\n  color: #475569;\n}\n.wc-rbar-score {\n  font-size: 1.2rem;\n  font-weight: 700;\n  color: #f1f5f9;\n}\n.wc-rbar-level {\n  font-size: 0.82rem;\n  color: #94a3b8;\n  margin-top: 4px;\n}\n\n.wc-section {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 16px;\n  margin-bottom: 20px;\n}\n.wc-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.86rem;\n}\n.wc-table th {\n  text-align: left;\n  color: #64748b;\n  font-size: 0.75rem;\n  font-weight: 700;\n  padding: 6px 10px;\n  border-bottom: 1px solid #2d2d3d;\n}\n.wc-table td {\n  padding: 7px 10px;\n  color: #e2e8f0;\n  border-bottom: 1px solid #1e1e2c;\n}\n.wc-table tr:last-child td { border-bottom: none; }\n.wc-table tr:hover td { background: #20202e; }\n.wc-density-bar {\n  display: inline-block;\n  height: 6px;\n  border-radius: 3px;\n  background: #6366f1;\n  vertical-align: middle;\n  margin-right: 6px;\n  transition: width 0.3s;\n}\n\n.wc-fr-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr auto;\n  gap: 8px;\n  align-items: center;\n}\n.wc-fr-input {\n  background: #0f0f18;\n  border: 1px solid #2d2d3d;\n  border-radius: 6px;\n  color: #e2e8f0;\n  font-size: 0.9rem;\n  padding: 8px 12px;\n  outline: none;\n  font-family: inherit;\n  transition: border-color 0.2s;\n}\n.wc-fr-input:focus { border-color: #6366f1; }\n.wc-fr-input::placeholder { color: #3a3a5a; }\n.wc-fr-actions {\n  display: flex;\n  gap: 6px;\n  flex-wrap: wrap;\n  margin-top: 8px;\n}\n.wc-fr-info {\n  font-size: 0.8rem;\n  color: #64748b;\n  margin-top: 6px;\n  min-height: 1.2em;\n}\n\n.wc-empty {\n  color: #3a3a5a;\n  font-size: 0.85rem;\n  text-align: center;\n  padding: 12px 0;\n}\n\n@media (max-width: 600px) {\n  #wc-app { padding: 16px 12px; }\n  .wc-stats-grid { grid-template-columns: repeat(2, 1fr); }\n  .wc-time-grid { grid-template-columns: 1fr 1fr; }\n  .wc-fr-grid { grid-template-columns: 1fr 1fr; }\n  .wc-fr-grid \u003e .wc-btn { grid-column: 1 / -1; }\n}\n\u003c/style\u003e\n\u003ch2\u003eテキストを入力してください\u003c/h2\u003e\n\u003ctextarea id=\"wc-textarea\" placeholder=\"ここにテキストを貼り付けるか、入力してください…\"\u003e\u003c/textarea\u003e\n\u003cdiv class=\"wc-toolbar\"\u003e\n  \u003cbutton class=\"wc-btn wc-copy-btn\" onclick=\"wcCopyText()\"\u003eテキストをコピー\u003c/button\u003e\n  \u003cbutton class=\"wc-btn wc-btn-danger\" onclick=\"wcClear()\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wc-stats-grid\"\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\u003cdiv class=\"wc-stat-value\" id=\"wc-words\"\u003e0\u003c/div\u003e\u003cdiv class=\"wc-stat-label\"\u003e単語数\u003c/div\u003e\u003c/div\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\u003cdiv class=\"wc-stat-value\" id=\"wc-chars\"\u003e0\u003c/div\u003e\u003cdiv class=\"wc-stat-label\"\u003e文字数\u003cbr\u003e（スペース含む）\u003c/div\u003e\u003c/div\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\u003cdiv class=\"wc-stat-value\" id=\"wc-chars-no\"\u003e0\u003c/div\u003e\u003cdiv class=\"wc-stat-label\"\u003e文字数\u003cbr\u003e（スペース除く）\u003c/div\u003e\u003c/div\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\u003cdiv class=\"wc-stat-value\" id=\"wc-sentences\"\u003e0\u003c/div\u003e\u003cdiv class=\"wc-stat-label\"\u003e文の数\u003c/div\u003e\u003c/div\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\u003cdiv class=\"wc-stat-value\" id=\"wc-paragraphs\"\u003e0\u003c/div\u003e\u003cdiv class=\"wc-stat-label\"\u003e段落数\u003c/div\u003e\u003c/div\u003e\n  \u003cdiv class=\"wc-stat-card\"\u003e\u003cdiv class=\"wc-stat-value\" id=\"wc-avg-word\"\u003e0\u003c/div\u003e\u003cdiv class=\"wc-stat-label\"\u003e平均単語長\u003c/div\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wc-time-grid\"\u003e\n  \u003cdiv class=\"wc-time-card\"\u003e\n    \u003cdiv class=\"wc-time-icon\"\u003e\u0026#128214;\u003c/div\u003e\n    \u003cdiv\u003e\n      \u003cdiv class=\"wc-time-val\" id=\"wc-read-time\"\u003e0秒\u003c/div\u003e\n      \u003cdiv class=\"wc-time-desc\"\u003e読了時間（225語/分）\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wc-time-card\"\u003e\n    \u003cdiv class=\"wc-time-icon\"\u003e\u0026#127897;\u003c/div\u003e\n    \u003cdiv\u003e\n      \u003cdiv class=\"wc-time-val\" id=\"wc-speak-time\"\u003e0秒\u003c/div\u003e\n      \u003cdiv class=\"wc-time-desc\"\u003e朗読時間（130語/分）\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wc-readability-wrap\"\u003e\n  \u003ch3\u003e可読性スコア（Flesch-Kincaid）\u003c/h3\u003e\n  \u003cdiv style=\"display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;\"\u003e\n    \u003cspan class=\"wc-rbar-score\" id=\"wc-fk-score\"\u003e\u0026#8212;\u003c/span\u003e\n    \u003cspan class=\"wc-rbar-level\" id=\"wc-fk-level\"\u003eテキストを入力すると計算されます\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wc-rbar-track\"\u003e\n    \u003cdiv class=\"wc-rbar-fill\" id=\"wc-rbar-fill\" style=\"width:0%;background:#6366f1;\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wc-rbar-labels\"\u003e\n    \u003cspan\u003e非常に難解 (0)\u003c/span\u003e\n    \u003cspan\u003e標準 (60)\u003c/span\u003e\n    \u003cspan\u003eとても簡単 (100)\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wc-section\"\u003e\n  \u003ch3\u003e上位10キーワードと出現頻度\u003c/h3\u003e\n  \u003cdiv id=\"wc-keywords-wrap\"\u003e\u003cdiv class=\"wc-empty\"\u003eテキストを入力するとキーワード分析が表示されます\u003c/div\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wc-section\"\u003e\n  \u003ch3\u003e検索 \u0026amp; 置換\u003c/h3\u003e\n  \u003cdiv class=\"wc-fr-grid\"\u003e\n    \u003cinput class=\"wc-fr-input\" id=\"wc-find\" placeholder=\"検索する語句...\" /\u003e\n    \u003cinput class=\"wc-fr-input\" id=\"wc-replace\" placeholder=\"置換後の語句...\" /\u003e\n    \u003cbutton class=\"wc-btn wc-btn-primary\" onclick=\"wcReplaceAll()\"\u003eすべて置換\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wc-fr-actions\"\u003e\n    \u003cbutton class=\"wc-btn wc-btn-secondary\" onclick=\"wcHighlightFind()\"\u003e一致数を確認\u003c/button\u003e\n    \u003cbutton class=\"wc-btn wc-btn-secondary\" onclick=\"wcClearFrInfo()\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wc-fr-info\" id=\"wc-fr-info\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var STOP_JA = new Set([\n    'の','に','は','を','た','が','で','て','と','し','れ','さ','ある','いる','も',\n    'する','から','な','こと','として','い','や','れる','など','なっ','ない','この',\n    'ため','その','あっ','よう','また','もの','という','あり','まで','られ','なる',\n    'へ','か','だ','これ','によって','により','おり','より','による','ず','なり','られる'\n  ]);\n  var STOP_EN = new Set([\n    'a','an','the','and','but','or','for','in','on','at','to','of','by','as','is',\n    'it','be','was','are','were','have','has','do','does','did','will','would',\n    'could','should','this','that','i','you','he','she','we','they','my','your',\n    'not','with','from','about','if','then','there','also','any','very','just'\n  ]);\n\n  function getWords(t) { return t.match(/\\b[a-zA-Z']+\\b/g) || []; }\n\n  function getJaChars(t) {\n    // Count CJK characters as individual tokens\n    return (t.match(/[\\u3000-\\u9fff\\uf900-\\ufaff\\uff01-\\uffee]/g) || []);\n  }\n\n  function getSentences(t) {\n    var s = t.trim();\n    if (!s) return 0;\n    // Match Japanese and English sentence endings\n    var m = s.match(/[^。！？.!?]*[。！？.!?]+/g);\n    if (!m) return s.length \u003e 0 ? 1 : 0;\n    return m.length;\n  }\n\n  function getParagraphs(t) {\n    var s = t.trim();\n    if (!s) return 0;\n    return s.split(/\\n\\s*\\n+/).filter(function(p){ return p.trim().length \u003e 0; }).length || 1;\n  }\n\n  function formatTime(mins) {\n    if (mins === 0) return '0秒';\n    if (mins \u003c 1) return Math.round(mins * 60) + '秒';\n    var m = Math.floor(mins);\n    var s = Math.round((mins - m) * 60);\n    if (s === 0) return m + '分';\n    return m + '分' + s + '秒';\n  }\n\n  function countSyllables(word) {\n    word = word.toLowerCase().replace(/[^a-z]/g, '');\n    if (!word) return 0;\n    if (word.length \u003c= 3) return 1;\n    word = word.replace(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/, '');\n    word = word.replace(/^y/, '');\n    var m = word.match(/[aeiouy]{1,2}/g);\n    return m ? Math.max(1, m.length) : 1;\n  }\n\n  function fleschKincaid(words, sentences) {\n    if (!words.length || !sentences) return null;\n    var syl = words.reduce(function(a,w){ return a + countSyllables(w); }, 0);\n    var asl = words.length / sentences;\n    var asw = syl / words.length;\n    var score = 206.835 - 1.015 * asl - 84.6 * asw;\n    return Math.round(Math.max(0, Math.min(100, score)));\n  }\n\n  function fkLabel(s) {\n    if (s \u003e= 90) return 'とても簡単（小学5年生レベル）';\n    if (s \u003e= 80) return '簡単（小学6年生レベル）';\n    if (s \u003e= 70) return 'やや簡単（中学1年生レベル）';\n    if (s \u003e= 60) return '標準（中学2〜3年生レベル）';\n    if (s \u003e= 50) return 'やや難しい（高校レベル）';\n    if (s \u003e= 30) return '難しい（大学レベル）';\n    return '非常に難しい（専門家レベル）';\n  }\n\n  function fkColor(s) {\n    if (s \u003e= 70) return '#4ade80';\n    if (s \u003e= 50) return '#facc15';\n    if (s \u003e= 30) return '#fb923c';\n    return '#f87171';\n  }\n\n  function esc(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  function analyze() {\n    var text = document.getElementById('wc-textarea').value;\n    var words = getWords(text);\n    var wc = words.length;\n    // For Japanese, also count total characters as \"words\" proxy\n    var jaChars = getJaChars(text);\n    var totalTokens = wc + jaChars.length;\n    var sentences = getSentences(text);\n    var paragraphs = getParagraphs(text);\n    var avgLen = wc \u003e 0\n      ? (words.reduce(function(a,w){ return a + w.replace(/'/g,'').length; }, 0) / wc).toFixed(1)\n      : '0.0';\n\n    document.getElementById('wc-words').textContent = totalTokens.toLocaleString();\n    document.getElementById('wc-chars').textContent = text.length.toLocaleString();\n    document.getElementById('wc-chars-no').textContent = text.replace(/\\s/g,'').length.toLocaleString();\n    document.getElementById('wc-sentences').textContent = sentences.toLocaleString();\n    document.getElementById('wc-paragraphs').textContent = paragraphs.toLocaleString();\n    document.getElementById('wc-avg-word').textContent = avgLen;\n\n    document.getElementById('wc-read-time').textContent = formatTime(totalTokens / 225);\n    document.getElementById('wc-speak-time').textContent = formatTime(totalTokens / 130);\n\n    var fk = words.length \u003e= 5 ? fleschKincaid(words, sentences) : null;\n    var scoreEl = document.getElementById('wc-fk-score');\n    var levelEl = document.getElementById('wc-fk-level');\n    var fillEl  = document.getElementById('wc-rbar-fill');\n    if (fk === null) {\n      scoreEl.textContent = '\\u2014';\n      levelEl.textContent = 'テキストを入力すると計算されます';\n      fillEl.style.width = '0%';\n      fillEl.style.background = '#6366f1';\n    } else {\n      scoreEl.textContent = fk;\n      levelEl.textContent = fkLabel(fk);\n      fillEl.style.width = fk + '%';\n      fillEl.style.background = fkColor(fk);\n    }\n\n    // Keywords — works for both EN and mixed JP/EN text\n    var wrap = document.getElementById('wc-keywords-wrap');\n    if (!text.trim()) {\n      wrap.innerHTML = '\u003cdiv class=\"wc-empty\"\u003eテキストを入力するとキーワード分析が表示されます\u003c/div\u003e';\n      return;\n    }\n\n    var freq = {};\n    // English words\n    words.forEach(function(w) {\n      var lw = w.toLowerCase();\n      if (!STOP_EN.has(lw) \u0026\u0026 lw.length \u003e 1) freq[lw] = (freq[lw] || 0) + 1;\n    });\n    // Japanese words (simple tokenization by known stop particle filter)\n    var jaParts = text.match(/[^\\s、。！？\\n,.!?「」『』【】\\u3000]+/g) || [];\n    jaParts.forEach(function(p) {\n      if (/[\\u3040-\\u9fff]/.test(p) \u0026\u0026 p.length \u003e= 2) {\n        var lp = p;\n        if (!STOP_JA.has(lp)) freq[lp] = (freq[lp] || 0) + 1;\n      }\n    });\n\n    var sorted = Object.keys(freq).sort(function(a,b){ return freq[b]-freq[a]; }).slice(0,10);\n    if (!sorted.length) {\n      wrap.innerHTML = '\u003cdiv class=\"wc-empty\"\u003e有効なキーワードが見つかりませんでした\u003c/div\u003e';\n      return;\n    }\n    var maxC = freq[sorted[0]];\n    var html = '\u003ctable class=\"wc-table\"\u003e\u003cthead\u003e\u003ctr\u003e\u003cth\u003e#\u003c/th\u003e\u003cth\u003eキーワード\u003c/th\u003e\u003cth\u003e出現数\u003c/th\u003e\u003cth\u003e密度\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e';\n    var totalRef = Math.max(totalTokens, 1);\n    sorted.forEach(function(word, i) {\n      var c = freq[word];\n      var d = ((c / totalRef) * 100).toFixed(2);\n      var bw = Math.round((c / maxC) * 80);\n      html += '\u003ctr\u003e\u003ctd style=\"color:#475569;\"\u003e' + (i+1) + '\u003c/td\u003e'\n        + '\u003ctd style=\"color:#a5b4fc;font-weight:700;\"\u003e' + esc(word) + '\u003c/td\u003e'\n        + '\u003ctd\u003e' + c + '\u003c/td\u003e'\n        + '\u003ctd\u003e\u003cspan class=\"wc-density-bar\" style=\"width:' + bw + 'px\"\u003e\u003c/span\u003e' + d + '%\u003c/td\u003e\u003c/tr\u003e';\n    });\n    html += '\u003c/tbody\u003e\u003c/table\u003e';\n    wrap.innerHTML = html;\n  }\n\n  window.wcClear = function() {\n    document.getElementById('wc-textarea').value = '';\n    document.getElementById('wc-find').value = '';\n    document.getElementById('wc-replace').value = '';\n    document.getElementById('wc-fr-info').textContent = '';\n    analyze();\n  };\n\n  window.wcCopyText = function() {\n    var ta = document.getElementById('wc-textarea');\n    ta.select();\n    try { document.execCommand('copy'); } catch(e) {}\n    ta.setSelectionRange(0,0);\n  };\n\n  window.wcReplaceAll = function() {\n    var find = document.getElementById('wc-find').value;\n    var repl = document.getElementById('wc-replace').value;\n    var info = document.getElementById('wc-fr-info');\n    if (!find) { info.textContent = '検索する語句を入力してください。'; return; }\n    var ta = document.getElementById('wc-textarea');\n    var regex = new RegExp(find.replace(/[.*+?^${}()|[\\]\\\\]/g,'\\\\$\u0026'), 'g');\n    var m = (ta.value.match(regex) || []).length;\n    if (!m) { info.textContent = '\"' + find + '\" は見つかりませんでした。'; return; }\n    ta.value = ta.value.replace(regex, repl);\n    info.textContent = m + ' 箇所を置換しました。';\n    analyze();\n  };\n\n  window.wcHighlightFind = function() {\n    var find = document.getElementById('wc-find').value;\n    var info = document.getElementById('wc-fr-info');\n    if (!find) { info.textContent = '検索する語句を入力してください。'; return; }\n    var regex = new RegExp(find.replace(/[.*+?^${}()|[\\]\\\\]/g,'\\\\$\u0026'), 'gi');\n    var m = (document.getElementById('wc-textarea').value.match(regex) || []).length;\n    info.textContent = m \u003e 0\n      ? '\"' + find + '\" が ' + m + ' 箇所見つかりました。'\n      : '\"' + find + '\" は見つかりませんでした。';\n  };\n\n  window.wcClearFrInfo = function() {\n    document.getElementById('wc-find').value = '';\n    document.getElementById('wc-replace').value = '';\n    document.getElementById('wc-fr-info').textContent = '';\n  };\n\n  document.getElementById('wc-textarea').addEventListener('input', analyze);\n  analyze();\n})();\n\u003c/script\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e確定申告・会計をもっとラクに？\u003c/strong\u003e \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計\u003c/a\u003e\n なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\u003c/p\u003e","title":"文字数・単語数カウンター"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n貯蓄目標シミュレーター 目標金額・現在の貯金額・毎月の積立額を入力して、目標達成までの期間を計算します。運用利回りを加味した場合の効果も一目でわかります。\n目標金額（万円） 現在の貯金額（万円） 毎月の積立額（万円） 0.5万円3万円30万円 想定年利回り（%） 0%3.0%10% 目的（参考） 自由に設定 緊急予備資金（生活費6ヶ月分） 車の購入資金 結婚資金 教育資金 住宅頭金 老後資金2,000万円 目標達成まで 11年 2ヶ月 達成予定: 2037年7月 積立総額 450万円 運用益 50万円 最終残高 500万円 内訳 90% 積立 / 10% 運用益 現在の貯金 新規積立 運用益 年次推移を表示 年 積立額 運用益 残高 もっと早く達成するには？ 運用ありvs貯金のみ 使い方 目標金額を入力 — 緊急予備資金、車、結婚、住宅頭金、老後資金など 現在の貯金額を入力 — すでに貯めている額 毎月の積立額を調整 — 毎月いくら貯金・投資するか 想定利回りを設定 — 普通預金なら0%、投資信託なら3〜7%が目安 「目的」プルダウンから選択すると、一般的な金額がプリセットされます。\n貯蓄目標の目安 目的 目標金額の目安 推奨期間 緊急予備資金 生活費3〜6ヶ月分（100〜200万円） 6〜18ヶ月 車の購入 200〜400万円 1〜3年 結婚資金 300〜500万円 1〜3年 教育資金（1人分） 500〜1,500万円 10〜18年 住宅頭金 500〜1,500万円 3〜10年 老後資金 1,500〜3,000万円 20〜35年 目標達成を早めるコツ 1. 先取り貯蓄を徹底する 給料日に自動振替で貯蓄口座に移す「先取り貯蓄」が最も確実です。残ったお金で生活する習慣をつけましょう。\n2. 長期目標は「運用」を組み合わせる 5年以上の目標なら、新NISAやiDeCoを活用した投資信託での積立がおすすめです。年利3〜5%でも、複利効果で大きな差が出ます。\n3. 固定費を見直す 携帯料金、保険料、サブスクリプションなど固定費を月1万円削減すれば、年間12万円が貯蓄に回ります。\n4. 副業収入を丸ごと貯蓄に回す 本業の給料で生活し、副業収入は全額貯蓄に回すと、目標達成が大幅に早まります。\n関連ツール FIRE（経済的自立）までの年数を計算 → FIREシミュレーター 複利効果で資産がどう増えるか確認 → 複利計算シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 新NISAの非課税効果を計算 → NISAシミュレーター 老後に必要な資金を計算 → 年金シミュレーター 子供の教育費総額を計算 → 教育費シミュレーター 関連記事 老後2,000万円問題の対策 新NISA始め方 30代の保険見直しガイド 副業の始め方 Productivity Worksの無料ツール 当サイトの計算ツールはすべて完全無料、ブラウザ上で動作し、データは一切保存されません。\n全ツール一覧はこちら 副業や投資で収入が増えてきたら、確定申告の準備も早めに始めましょう。freee会計なら銀行口座・クレジットカードと連携して収支を自動記録し、確定申告書類もガイドに沿って作成できます。\n本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/tools/chochiku-mokuhyo-simulator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"貯蓄目標シミュレーター\"\u003e貯蓄目標シミュレーター\u003c/h1\u003e\n\u003cp\u003e目標金額・現在の貯金額・毎月の積立額を入力して、\u003cstrong\u003e目標達成までの期間\u003c/strong\u003eを計算します。運用利回りを加味した場合の効果も一目でわかります。\u003c/p\u003e\n\u003cdiv id=\"cs-calc\" style=\"max-width:720px;margin:0 auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Hiragino Sans',sans-serif;color:#1e293b;\"\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #7c3aed;border-radius:12px;background:#faf5ff;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e目標金額（万円）\u003c/label\u003e\n\u003cinput type=\"number\" id=\"csGoal\" min=\"1\" max=\"100000\" step=\"1\" value=\"500\" oninput=\"calcCS()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:16px;color:#1e293b;background:#fff;\"\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e現在の貯金額（万円）\u003c/label\u003e\n\u003cinput type=\"number\" id=\"csCurrent\" min=\"0\" max=\"100000\" step=\"1\" value=\"50\" oninput=\"calcCS()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:16px;color:#1e293b;background:#fff;\"\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e毎月の積立額（万円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"csMonthly\" min=\"0.5\" max=\"30\" step=\"0.5\" value=\"3\" oninput=\"calcCS()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0.5万円\u003c/span\u003e\u003cspan id=\"csMonthlyVal\" style=\"font-weight:bold;font-size:18px;color:#7c3aed;\"\u003e3万円\u003c/span\u003e\u003cspan\u003e30万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e想定年利回り（%）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"csReturn\" min=\"0\" max=\"10\" step=\"0.5\" value=\"3\" oninput=\"calcCS()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0%\u003c/span\u003e\u003cspan id=\"csReturnVal\" style=\"font-weight:bold;font-size:18px;color:#7c3aed;\"\u003e3.0%\u003c/span\u003e\u003cspan\u003e10%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:8px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e目的（参考）\u003c/label\u003e\n\u003cselect id=\"csPurpose\" onchange=\"setPurpose()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#fff;\"\u003e\n\u003coption value=\"custom\"\u003e自由に設定\u003c/option\u003e\n\u003coption value=\"emergency\"\u003e緊急予備資金（生活費6ヶ月分）\u003c/option\u003e\n\u003coption value=\"car\"\u003e車の購入資金\u003c/option\u003e\n\u003coption value=\"wedding\"\u003e結婚資金\u003c/option\u003e\n\u003coption value=\"education\"\u003e教育資金\u003c/option\u003e\n\u003coption value=\"house\"\u003e住宅頭金\u003c/option\u003e\n\u003coption value=\"retirement\"\u003e老後資金2,000万円\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 結果 --\u003e\n\u003cdiv id=\"csResults\" style=\"margin-top:24px;padding:24px;border-radius:12px;background:#f5f3ff;border:1px solid #c4b5fd;\"\u003e\n\u003cdiv style=\"text-align:center;margin-bottom:20px;\"\u003e\n\u003cdiv style=\"font-size:14px;color:#64748b;\"\u003e目標達成まで\u003c/div\u003e\n\u003cdiv id=\"csTime\" style=\"font-size:42px;font-weight:bold;color:#7c3aed;line-height:1.2;\"\u003e11年 2ヶ月\u003c/div\u003e\n\u003cdiv id=\"csDate\" style=\"font-size:14px;color:#64748b;margin-top:4px;\"\u003e達成予定: 2037年7月\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;text-align:center;\"\u003e\n\u003cdiv style=\"padding:16px;background:white;border-radius:8px;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e積立総額\u003c/div\u003e\n\u003cdiv id=\"csContributed\" style=\"font-size:20px;font-weight:bold;color:#1e293b;\"\u003e450万円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:16px;background:white;border-radius:8px;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e運用益\u003c/div\u003e\n\u003cdiv id=\"csInterest\" style=\"font-size:20px;font-weight:bold;color:#7c3aed;\"\u003e50万円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:16px;background:white;border-radius:8px;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e最終残高\u003c/div\u003e\n\u003cdiv id=\"csFinal\" style=\"font-size:20px;font-weight:bold;color:#1e293b;\"\u003e500万円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- プログレスバー --\u003e\n\u003cdiv style=\"margin-top:20px;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;margin-bottom:6px;\"\u003e\n\u003cspan\u003e内訳\u003c/span\u003e\n\u003cspan id=\"csPctLabel\"\u003e90% 積立 / 10% 運用益\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv style=\"height:24px;background:#e2e8f0;border-radius:12px;overflow:hidden;display:flex;\"\u003e\n\u003cdiv id=\"csBarCurrent\" style=\"background:#94a3b8;height:100%;transition:width 0.3s;\" title=\"現在の貯金\"\u003e\u003c/div\u003e\n\u003cdiv id=\"csBarContrib\" style=\"background:#7c3aed;height:100%;transition:width 0.3s;\" title=\"新規積立\"\u003e\u003c/div\u003e\n\u003cdiv id=\"csBarReturn\" style=\"background:#a78bfa;height:100%;transition:width 0.3s;\" title=\"運用益\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;gap:16px;font-size:12px;color:#64748b;margin-top:6px;\"\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#94a3b8;border-radius:2px;\"\u003e\u003c/span\u003e 現在の貯金\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#7c3aed;border-radius:2px;\"\u003e\u003c/span\u003e 新規積立\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#a78bfa;border-radius:2px;\"\u003e\u003c/span\u003e 運用益\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 年次推移表 --\u003e\n\u003cdetails style=\"margin-top:20px;\"\u003e\n\u003csummary style=\"cursor:pointer;font-weight:bold;color:#7c3aed;font-size:15px;\"\u003e年次推移を表示\u003c/summary\u003e\n\u003cdiv style=\"overflow-x:auto;margin-top:12px;\"\u003e\n\u003ctable id=\"csTable\" style=\"width:100%;border-collapse:collapse;font-size:14px;\"\u003e\n\u003cthead\u003e\n\u003ctr style=\"background:#7c3aed;color:white;\"\u003e\n\u003cth style=\"padding:8px;text-align:left;\"\u003e年\u003c/th\u003e\n\u003cth style=\"padding:8px;text-align:right;\"\u003e積立額\u003c/th\u003e\n\u003cth style=\"padding:8px;text-align:right;\"\u003e運用益\u003c/th\u003e\n\u003cth style=\"padding:8px;text-align:right;\"\u003e残高\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody id=\"csTableBody\"\u003e\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/details\u003e\n\u003c/div\u003e\n\u003c!-- シナリオ比較 --\u003e\n\u003cdiv style=\"margin-top:24px;padding:24px;border-radius:12px;background:#f8fafc;border:1px solid #e2e8f0;\"\u003e\n\u003ch3 style=\"margin:0 0 16px 0;font-size:18px;\"\u003eもっと早く達成するには？\u003c/h3\u003e\n\u003cdiv id=\"csScenarios\" style=\"display:grid;gap:8px;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 運用あり vs なし比較 --\u003e\n\u003cdiv style=\"margin-top:24px;padding:24px;border-radius:12px;background:#fffbeb;border:1px solid #fde68a;\"\u003e\n\u003ch3 style=\"margin:0 0 12px 0;font-size:18px;\"\u003e運用ありvs貯金のみ\u003c/h3\u003e\n\u003cdiv id=\"csComparison\" style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction calcCS(){\n  const goalMan=parseFloat(document.getElementById('csGoal').value)||0;\n  const currentMan=parseFloat(document.getElementById('csCurrent').value)||0;\n  const monthlyMan=parseFloat(document.getElementById('csMonthly').value)||0;\n  const annualReturn=parseFloat(document.getElementById('csReturn').value)/100;\n  const monthlyReturn=annualReturn/12;\n\n  const goal=goalMan*10000;\n  const current=currentMan*10000;\n  const monthly=monthlyMan*10000;\n\n  document.getElementById('csMonthlyVal').textContent=monthlyMan+'万円';\n  document.getElementById('csReturnVal').textContent=(annualReturn*100).toFixed(1)+'%';\n\n  if(goal\u003c=current){\n    document.getElementById('csTime').textContent='既に達成済み！';\n    document.getElementById('csDate').textContent='現在の貯金が目標額を超えています。';\n    document.getElementById('csContributed').textContent='0万円';\n    document.getElementById('csInterest').textContent='0万円';\n    document.getElementById('csFinal').textContent=currentMan+'万円';\n    document.getElementById('csBarCurrent').style.width='100%';\n    document.getElementById('csBarContrib').style.width='0%';\n    document.getElementById('csBarReturn').style.width='0%';\n    document.getElementById('csPctLabel').textContent='目標達成済み';\n    document.getElementById('csTableBody').innerHTML='';\n    document.getElementById('csScenarios').innerHTML='';\n    document.getElementById('csComparison').innerHTML='';\n    return;\n  }\n\n  if(monthly\u003c=0){\n    document.getElementById('csTime').textContent='積立額を設定してください';\n    document.getElementById('csDate').textContent='毎月の積立額が必要です。';\n    return;\n  }\n\n  const result=computeM(goal,current,monthly,monthlyReturn);\n  const months=result.months;\n  const years=Math.floor(months/12);\n  const remMonths=months%12;\n\n  let timeStr='';\n  if(years\u003e0) timeStr+=years+'年';\n  if(remMonths\u003e0) timeStr+=(years\u003e0?' ':'')+remMonths+'ヶ月';\n  if(months===0) timeStr='1ヶ月以内';\n  if(months\u003e600){timeStr='50年以上';document.getElementById('csDate').textContent='積立額または利回りを上げましょう。';}\n  else{\n    const td=new Date();\n    td.setMonth(td.getMonth()+months);\n    document.getElementById('csDate').textContent='達成予定: '+td.getFullYear()+'年'+(td.getMonth()+1)+'月';\n  }\n  document.getElementById('csTime').textContent=timeStr;\n\n  const totalContributed=current+monthly*months;\n  const interestEarned=result.finalBalance-totalContributed;\n  const newContributions=monthly*months;\n\n  document.getElementById('csContributed').textContent=Math.round(totalContributed/10000)+'万円';\n  document.getElementById('csInterest').textContent=Math.max(0,Math.round(interestEarned/10000))+'万円';\n  document.getElementById('csFinal').textContent=Math.round(result.finalBalance/10000)+'万円';\n\n  const fb=result.finalBalance;\n  const pC=((current/fb)*100).toFixed(1);\n  const pN=((newContributions/fb)*100).toFixed(1);\n  const pR=(((fb-totalContributed)/fb)*100).toFixed(1);\n  document.getElementById('csBarCurrent').style.width=pC+'%';\n  document.getElementById('csBarContrib').style.width=pN+'%';\n  document.getElementById('csBarReturn').style.width=Math.max(0,pR)+'%';\n  document.getElementById('csPctLabel').textContent=Math.round(parseFloat(pC)+parseFloat(pN))+'% 積立 / '+Math.max(0,Math.round(pR))+'% 運用益';\n\n  // 年次推移表\n  let tbody='';\n  let balance=current;\n  const totalYears=Math.ceil(months/12);\n  for(let y=1;y\u003c=Math.min(totalYears,40);y++){\n    const mty=y===totalYears?(months%12||12):12;\n    let yc=0,yr=0;\n    for(let m=0;m\u003cmty;m++){\n      const ret=balance*monthlyReturn;\n      yr+=ret;balance+=ret+monthly;yc+=monthly;\n      if(balance\u003e=goal){balance=Math.max(balance,goal);break;}\n    }\n    const bg=y%2===0?'#f5f3ff':'white';\n    tbody+='\u003ctr style=\"background:'+bg+'\"\u003e\u003ctd style=\"padding:8px;\"\u003e'+y+'年目\u003c/td\u003e\u003ctd style=\"padding:8px;text-align:right;\"\u003e'+Math.round(yc/10000)+'万円\u003c/td\u003e\u003ctd style=\"padding:8px;text-align:right;color:#7c3aed;\"\u003e'+Math.round(yr/10000)+'万円\u003c/td\u003e\u003ctd style=\"padding:8px;text-align:right;font-weight:bold;\"\u003e'+Math.round(Math.min(balance,goal*1.1)/10000)+'万円\u003c/td\u003e\u003c/tr\u003e';\n    if(balance\u003e=goal) break;\n  }\n  document.getElementById('csTableBody').innerHTML=tbody;\n\n  // シナリオ比較\n  const scenarios=[monthlyMan*1.5,monthlyMan*2,monthlyMan*3].filter(s=\u003es\u003c=50);\n  let sHTML='';\n  scenarios.forEach(s=\u003e{\n    const r=computeM(goal,current,s*10000,monthlyReturn);\n    const sy=Math.floor(r.months/12);\n    const sm=r.months%12;\n    let st='';\n    if(sy\u003e0)st+=sy+'年';\n    if(sm\u003e0)st+=(sy\u003e0?' ':'')+sm+'ヶ月';\n    const saved=months-r.months;\n    sHTML+='\u003cdiv style=\"display:flex;justify-content:space-between;align-items:center;padding:12px;background:white;border-radius:8px;border:1px solid #e2e8f0;\"\u003e';\n    sHTML+='\u003cdiv\u003e\u003cstrong\u003e月'+s+'万円\u003c/strong\u003e\u003c/div\u003e';\n    sHTML+='\u003cdiv style=\"text-align:right;\"\u003e\u003cspan style=\"font-weight:bold;\"\u003e'+st+'\u003c/span\u003e';\n    if(saved\u003e0)sHTML+=' \u003cspan style=\"color:#7c3aed;font-size:13px;\"\u003e('+saved+'ヶ月短縮)\u003c/span\u003e';\n    sHTML+='\u003c/div\u003e\u003c/div\u003e';\n  });\n  document.getElementById('csScenarios').innerHTML=sHTML;\n\n  // 運用あり vs なし\n  const noInvest=computeM(goal,current,monthly,0);\n  const diffMonths=noInvest.months-months;\n  let cHTML='';\n  cHTML+='\u003cdiv style=\"padding:16px;background:white;border-radius:8px;text-align:center;border:2px solid #7c3aed;\"\u003e\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e運用あり（年利'+((annualReturn*100).toFixed(1))+'%）\u003c/div\u003e\u003cdiv style=\"font-size:24px;font-weight:bold;color:#7c3aed;\"\u003e'+timeStr+'\u003c/div\u003e\u003c/div\u003e';\n  const ny=Math.floor(noInvest.months/12);const nm=noInvest.months%12;\n  let nt='';if(ny\u003e0)nt+=ny+'年';if(nm\u003e0)nt+=(ny\u003e0?' ':'')+nm+'ヶ月';\n  if(noInvest.months\u003e600)nt='50年以上';\n  cHTML+='\u003cdiv style=\"padding:16px;background:white;border-radius:8px;text-align:center;border:1px solid #e2e8f0;\"\u003e\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e貯金のみ（利回り0%）\u003c/div\u003e\u003cdiv style=\"font-size:24px;font-weight:bold;color:#94a3b8;\"\u003e'+nt+'\u003c/div\u003e';\n  if(diffMonths\u003e0\u0026\u0026noInvest.months\u003c=600)cHTML+='\u003cdiv style=\"font-size:13px;color:#ef4444;margin-top:4px;\"\u003e'+diffMonths+'ヶ月遅い\u003c/div\u003e';\n  cHTML+='\u003c/div\u003e';\n  document.getElementById('csComparison').innerHTML=cHTML;\n}\n\nfunction computeM(goal,current,monthly,monthlyReturn){\n  let balance=current;let months=0;\n  while(balance\u003cgoal\u0026\u0026months\u003c600){balance+=balance*monthlyReturn;balance+=monthly;months++;}\n  return{months:months,finalBalance:balance};\n}\n\nfunction setPurpose(){\n  const p=document.getElementById('csPurpose').value;\n  const presets={emergency:{goal:150,current:0,monthly:3,ret:0},car:{goal:300,current:50,monthly:5,ret:0},wedding:{goal:350,current:50,monthly:5,ret:0},education:{goal:1000,current:0,monthly:3,ret:3},house:{goal:1000,current:100,monthly:5,ret:3},retirement:{goal:2000,current:0,monthly:5,ret:5}};\n  if(presets[p]){\n    document.getElementById('csGoal').value=presets[p].goal;\n    document.getElementById('csCurrent').value=presets[p].current;\n    document.getElementById('csMonthly').value=presets[p].monthly;\n    document.getElementById('csReturn').value=presets[p].ret;\n    calcCS();\n  }\n}\n\ncalcCS();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e目標金額を入力\u003c/strong\u003e — 緊急予備資金、車、結婚、住宅頭金、老後資金など\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e現在の貯金額を入力\u003c/strong\u003e — すでに貯めている額\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e毎月の積立額を調整\u003c/strong\u003e — 毎月いくら貯金・投資するか\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e想定利回りを設定\u003c/strong\u003e — 普通預金なら0%、投資信託なら3〜7%が目安\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e「目的」プルダウンから選択すると、一般的な金額がプリセットされます。\u003c/p\u003e","title":"貯蓄目標シミュレーター｜目標額まで何ヶ月？無料計算ツール"},{"content":" 基本 SEO タグ ページタイトル （推奨: 30〜60文字） 0 / 60 メタディスクリプション （推奨: 70〜160文字） 0 / 160 キーワード （カンマ区切り） 著者名 インデックス設定 index（クロール許可） noindex（クロール拒否） リンク追跡設定 follow（リンク追跡許可） nofollow（リンク追跡拒否） Open Graph タグ（SNS・Facebook） og:title og:type（コンテンツ種別） website（ウェブサイト） article（記事） product（商品） video.movie（動画） music.song（音楽） book（書籍） og:description og:url（正規URL） og:image URL（シェア画像） Twitter Card タグ twitter:card（カード形式） summary_large_image（大画像） summary（サマリー） app（アプリ） player（動画） twitter:title twitter:image URL twitter:description Google 検索結果プレビュー https://example.com/page ページタイトルがここに表示されます メタディスクリプションがここに表示されます。160文字以内で魅力的な説明文を入力してください。 SNS シェアプレビュー Facebook / Open Graph og:image プレビュー example.com OGタイトルがここに表示されます og:descriptionがここに表示されます。 Twitter / X カード twitter:image プレビュー Twitterタイトルがここに表示されます twitter:descriptionがここに表示されます。 example.com 生成されたHTMLコード コピー 事業のSEO対策と経費管理を同時に効率化しませんか？ ウェブサイトのSEO改善と並行して、事業の財務管理も重要です。 freee会計なら、売上・経費の自動仕訳、確定申告書類の自動作成、 インボイス対応まで一括管理。Webマーケティング費用の経費処理も簡単です。 中小企業・個人事業主の方に選ばれています。 freee会計を無料で試す 関連ツール Html Beautifier → Html Beautifierツール Html Entity Converter → Html Entity Converterツール Html Entity Encoder → Html Entity Encoderツール 関連記事 副業ブログの始め方｜お名前.comでドメイン取得→freeeで経費管理まで AIを使ったブログ記事の書き方入門【2026年版・SEOで上位表示を狙う方法】 レンタルサーバー おすすめ2026年版！ブログ・サイト制作向け比較 ","permalink":"https://productivity-works.com/ja/tools/meta-tag-generator/","summary":"\u003cstyle\u003e\n#meta-app *,\n#meta-app *::before,\n#meta-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#meta-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Noto Sans JP\", \"Yu Gothic\", sans-serif;\n  color: #1e293b;\n  max-width: 860px;\n  margin: 0 auto;\n  padding: 0 0 2rem;\n}\n#meta-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 1.75rem 0 1rem;\n  padding-bottom: 0.4rem;\n  border-bottom: 2px solid #e2e8f0;\n}\n#meta-app .field {\n  margin-bottom: 1.1rem;\n}\n#meta-app label {\n  display: block;\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #374151;\n  margin-bottom: 0.3rem;\n}\n#meta-app input[type=\"text\"],\n#meta-app input[type=\"url\"],\n#meta-app select,\n#meta-app textarea {\n  width: 100%;\n  padding: 0.55rem 0.75rem;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 0.93rem;\n  background: #fff;\n  color: #1e293b;\n  transition: border-color 0.18s;\n  outline: none;\n}\n#meta-app input[type=\"text\"]:focus,\n#meta-app input[type=\"url\"]:focus,\n#meta-app select:focus,\n#meta-app textarea:focus {\n  border-color: #2563eb;\n  box-shadow: 0 0 0 3px rgba(37,99,235,0.12);\n}\n#meta-app textarea {\n  resize: vertical;\n  min-height: 72px;\n}\n#meta-app .counter {\n  font-size: 0.78rem;\n  margin-top: 0.25rem;\n  font-weight: 500;\n  transition: color 0.18s;\n}\n#meta-app .counter.ok   { color: #16a34a; }\n#meta-app .counter.warn { color: #d97706; }\n#meta-app .counter.over { color: #dc2626; }\n#meta-app .row2 {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n}\n#meta-app .row3 {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  gap: 1rem;\n}\n@media (max-width: 580px) {\n  #meta-app .row2,\n  #meta-app .row3 { grid-template-columns: 1fr; }\n}\n\n/* SERP Preview */\n#meta-app .serp-box {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 1.1rem 1.3rem;\n  margin-top: 0.5rem;\n}\n#meta-app .serp-url {\n  font-size: 0.82rem;\n  color: #16a34a;\n  margin-bottom: 0.18rem;\n  word-break: break-all;\n}\n#meta-app .serp-title {\n  font-size: 1.1rem;\n  color: #2563eb;\n  font-weight: 600;\n  cursor: pointer;\n  line-height: 1.35;\n  margin-bottom: 0.22rem;\n  word-break: break-word;\n}\n#meta-app .serp-desc {\n  font-size: 0.88rem;\n  color: #4b5563;\n  line-height: 1.55;\n  word-break: break-word;\n}\n\n/* Social Previews */\n#meta-app .social-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n  margin-top: 0.5rem;\n}\n@media (max-width: 580px) {\n  #meta-app .social-row { grid-template-columns: 1fr; }\n}\n#meta-app .social-card {\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  overflow: hidden;\n  background: #f8fafc;\n}\n#meta-app .social-card-header {\n  background: #e2e8f0;\n  padding: 0.45rem 0.8rem;\n  font-size: 0.75rem;\n  font-weight: 700;\n  color: #475569;\n  letter-spacing: 0.03em;\n  text-transform: uppercase;\n}\n#meta-app .social-img-placeholder {\n  background: #cbd5e1;\n  height: 130px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #94a3b8;\n  font-size: 0.82rem;\n  position: relative;\n  overflow: hidden;\n}\n#meta-app .social-img-placeholder img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: none;\n}\n#meta-app .social-img-placeholder .placeholder-text { position: absolute; }\n#meta-app .social-body {\n  padding: 0.6rem 0.8rem 0.7rem;\n}\n#meta-app .fb-card .social-domain {\n  font-size: 0.72rem;\n  color: #6b7280;\n  text-transform: uppercase;\n  margin-bottom: 0.2rem;\n}\n#meta-app .fb-card .social-title {\n  font-size: 0.9rem;\n  font-weight: 700;\n  color: #1e293b;\n  margin-bottom: 0.15rem;\n  line-height: 1.3;\n}\n#meta-app .fb-card .social-desc {\n  font-size: 0.78rem;\n  color: #6b7280;\n  line-height: 1.4;\n}\n#meta-app .tw-card-inner {\n  border-radius: 0 0 10px 10px;\n  overflow: hidden;\n}\n#meta-app .tw-card .social-body {\n  background: #fff;\n  border-top: 1px solid #e2e8f0;\n}\n#meta-app .tw-card .social-title {\n  font-size: 0.88rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 0.15rem;\n}\n#meta-app .tw-card .social-desc {\n  font-size: 0.78rem;\n  color: #6b7280;\n  line-height: 1.4;\n}\n#meta-app .tw-card .social-domain {\n  font-size: 0.72rem;\n  color: #6b7280;\n  margin-top: 0.2rem;\n}\n\n/* Output */\n#meta-app .output-box {\n  position: relative;\n  margin-top: 0.5rem;\n}\n#meta-app pre {\n  background: #0f172a;\n  color: #e2e8f0;\n  padding: 1.1rem 1.2rem;\n  border-radius: 8px;\n  font-size: 0.82rem;\n  line-height: 1.65;\n  overflow-x: auto;\n  white-space: pre-wrap;\n  word-break: break-word;\n  font-family: \"Fira Code\", \"Cascadia Code\", \"Consolas\", monospace;\n}\n#meta-app .copy-btn {\n  position: absolute;\n  top: 0.6rem;\n  right: 0.6rem;\n  background: #2563eb;\n  color: #fff;\n  border: none;\n  padding: 0.35rem 0.85rem;\n  border-radius: 5px;\n  font-size: 0.8rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.16s;\n}\n#meta-app .copy-btn:hover { background: #1d4ed8; }\n#meta-app .copy-btn.copied { background: #16a34a; }\n\n/* freee CTA */\n#meta-app .freee-cta {\n  margin-top: 2.2rem;\n  background: linear-gradient(135deg, #eff6ff 0%, #f0fdf4 100%);\n  border: 1.5px solid #bfdbfe;\n  border-radius: 12px;\n  padding: 1.3rem 1.5rem;\n}\n#meta-app .freee-cta h3 {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #1e293b;\n  margin-bottom: 0.5rem;\n}\n#meta-app .freee-cta p {\n  font-size: 0.88rem;\n  color: #374151;\n  line-height: 1.65;\n  margin-bottom: 0.9rem;\n}\n#meta-app .freee-cta a.cta-btn {\n  display: inline-block;\n  background: #2563eb;\n  color: #fff;\n  padding: 0.55rem 1.3rem;\n  border-radius: 6px;\n  font-size: 0.88rem;\n  font-weight: 700;\n  text-decoration: none;\n  transition: background 0.16s;\n}\n#meta-app .freee-cta a.cta-btn:hover { background: #1d4ed8; }\n\u003c/style\u003e\n\u003cdiv id=\"meta-app\"\u003e\n\u003ch2\u003e基本 SEO タグ\u003c/h2\u003e\n\u003cdiv class=\"field\"\u003e\n  \u003clabel for=\"mg-title\"\u003eページタイトル \u003cspan style=\"font-weight:400;color:#6b7280;\"\u003e（推奨: 30〜60文字）\u003c/span\u003e\u003c/label\u003e\n  \u003cinput type=\"text\" id=\"mg-title\" placeholder=\"魅力的なページタイトルを入力\" maxlength=\"100\" oninput=\"mgUpdate()\"\u003e\n  \u003cdiv class=\"counter ok\" id=\"cnt-title\"\u003e0 / 60\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"field\"\u003e\n  \u003clabel for=\"mg-desc\"\u003eメタディスクリプション \u003cspan style=\"font-weight:400;color:#6b7280;\"\u003e（推奨: 70〜160文字）\u003c/span\u003e\u003c/label\u003e\n  \u003ctextarea id=\"mg-desc\" placeholder=\"検索結果に表示される、ページの簡潔な説明文を入力してください。\" maxlength=\"300\" oninput=\"mgUpdate()\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"counter ok\" id=\"cnt-desc\"\u003e0 / 160\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"row2\"\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"mg-keywords\"\u003eキーワード \u003cspan style=\"font-weight:400;color:#6b7280;\"\u003e（カンマ区切り）\u003c/span\u003e\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"mg-keywords\" placeholder=\"SEO, メタタグ, ジェネレーター\" oninput=\"mgUpdate()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"mg-author\"\u003e著者名\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"mg-author\" placeholder=\"山田 太郎\" oninput=\"mgUpdate()\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"row2\"\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"mg-robots-index\"\u003eインデックス設定\u003c/label\u003e\n    \u003cselect id=\"mg-robots-index\" onchange=\"mgUpdate()\"\u003e\n      \u003coption value=\"index\"\u003eindex（クロール許可）\u003c/option\u003e\n      \u003coption value=\"noindex\"\u003enoindex（クロール拒否）\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"mg-robots-follow\"\u003eリンク追跡設定\u003c/label\u003e\n    \u003cselect id=\"mg-robots-follow\" onchange=\"mgUpdate()\"\u003e\n      \u003coption value=\"follow\"\u003efollow（リンク追跡許可）\u003c/option\u003e\n      \u003coption value=\"nofollow\"\u003enofollow（リンク追跡拒否）\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003eOpen Graph タグ（SNS・Facebook）\u003c/h2\u003e\n\u003cdiv class=\"row2\"\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"mg-og-title\"\u003eog:title\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"mg-og-title\" placeholder=\"SNSシェア時のタイトル\" oninput=\"mgUpdate()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"mg-og-type\"\u003eog:type（コンテンツ種別）\u003c/label\u003e\n    \u003cselect id=\"mg-og-type\" onchange=\"mgUpdate()\"\u003e\n      \u003coption value=\"website\"\u003ewebsite（ウェブサイト）\u003c/option\u003e\n      \u003coption value=\"article\"\u003earticle（記事）\u003c/option\u003e\n      \u003coption value=\"product\"\u003eproduct（商品）\u003c/option\u003e\n      \u003coption value=\"video.movie\"\u003evideo.movie（動画）\u003c/option\u003e\n      \u003coption value=\"music.song\"\u003emusic.song（音楽）\u003c/option\u003e\n      \u003coption value=\"book\"\u003ebook（書籍）\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"field\"\u003e\n  \u003clabel for=\"mg-og-desc\"\u003eog:description\u003c/label\u003e\n  \u003ctextarea id=\"mg-og-desc\" placeholder=\"SNSシェア時に表示される説明文。\" oninput=\"mgUpdate()\"\u003e\u003c/textarea\u003e\n\u003c/div\u003e\n\u003cdiv class=\"row2\"\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"mg-og-url\"\u003eog:url（正規URL）\u003c/label\u003e\n    \u003cinput type=\"url\" id=\"mg-og-url\" placeholder=\"https://example.com/page\" oninput=\"mgUpdate()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"mg-og-image\"\u003eog:image URL（シェア画像）\u003c/label\u003e\n    \u003cinput type=\"url\" id=\"mg-og-image\" placeholder=\"https://example.com/image.jpg\" oninput=\"mgUpdate()\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003eTwitter Card タグ\u003c/h2\u003e\n\u003cdiv class=\"row3\"\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"mg-tw-card\"\u003etwitter:card（カード形式）\u003c/label\u003e\n    \u003cselect id=\"mg-tw-card\" onchange=\"mgUpdate()\"\u003e\n      \u003coption value=\"summary_large_image\"\u003esummary_large_image（大画像）\u003c/option\u003e\n      \u003coption value=\"summary\"\u003esummary（サマリー）\u003c/option\u003e\n      \u003coption value=\"app\"\u003eapp（アプリ）\u003c/option\u003e\n      \u003coption value=\"player\"\u003eplayer（動画）\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"mg-tw-title\"\u003etwitter:title\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"mg-tw-title\" placeholder=\"Twitterシェア時のタイトル\" oninput=\"mgUpdate()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"mg-tw-image\"\u003etwitter:image URL\u003c/label\u003e\n    \u003cinput type=\"url\" id=\"mg-tw-image\" placeholder=\"https://example.com/image.jpg\" oninput=\"mgUpdate()\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"field\"\u003e\n  \u003clabel for=\"mg-tw-desc\"\u003etwitter:description\u003c/label\u003e\n  \u003ctextarea id=\"mg-tw-desc\" placeholder=\"Twitterシェア時の説明文。\" oninput=\"mgUpdate()\" style=\"min-height:56px;\"\u003e\u003c/textarea\u003e\n\u003c/div\u003e\n\u003ch2\u003eGoogle 検索結果プレビュー\u003c/h2\u003e\n\u003cdiv class=\"serp-box\"\u003e\n  \u003cdiv class=\"serp-url\" id=\"prev-url\"\u003ehttps://example.com/page\u003c/div\u003e\n  \u003cdiv class=\"serp-title\" id=\"prev-title\"\u003eページタイトルがここに表示されます\u003c/div\u003e\n  \u003cdiv class=\"serp-desc\" id=\"prev-desc\"\u003eメタディスクリプションがここに表示されます。160文字以内で魅力的な説明文を入力してください。\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003eSNS シェアプレビュー\u003c/h2\u003e\n\u003cdiv class=\"social-row\"\u003e\n  \u003cdiv class=\"social-card fb-card\"\u003e\n    \u003cdiv class=\"social-card-header\"\u003eFacebook / Open Graph\u003c/div\u003e\n    \u003cdiv class=\"social-img-placeholder\" id=\"fb-img-wrap\"\u003e\n      \u003cimg id=\"fb-img\" src=\"\" alt=\"OG画像\"\u003e\n      \u003cspan class=\"placeholder-text\" id=\"fb-img-placeholder\"\u003eog:image プレビュー\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"social-body\"\u003e\n      \u003cdiv class=\"social-domain\" id=\"fb-domain\"\u003eexample.com\u003c/div\u003e\n      \u003cdiv class=\"social-title\" id=\"fb-title\"\u003eOGタイトルがここに表示されます\u003c/div\u003e\n      \u003cdiv class=\"social-desc\" id=\"fb-desc\"\u003eog:descriptionがここに表示されます。\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"social-card tw-card\"\u003e\n    \u003cdiv class=\"social-card-header\"\u003eTwitter / X カード\u003c/div\u003e\n    \u003cdiv class=\"tw-card-inner\"\u003e\n      \u003cdiv class=\"social-img-placeholder\" id=\"tw-img-wrap\"\u003e\n        \u003cimg id=\"tw-img\" src=\"\" alt=\"Twitter画像\"\u003e\n        \u003cspan class=\"placeholder-text\" id=\"tw-img-placeholder\"\u003etwitter:image プレビュー\u003c/span\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"social-body\"\u003e\n        \u003cdiv class=\"social-title\" id=\"tw-title\"\u003eTwitterタイトルがここに表示されます\u003c/div\u003e\n        \u003cdiv class=\"social-desc\" id=\"tw-desc\"\u003etwitter:descriptionがここに表示されます。\u003c/div\u003e\n        \u003cdiv class=\"social-domain\" id=\"tw-domain\"\u003eexample.com\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003e生成されたHTMLコード\u003c/h2\u003e\n\u003cdiv class=\"output-box\"\u003e\n  \u003cpre id=\"mg-output\"\u003e\u003c!-- 上のフォームを入力してタグを生成 --\u003e\u003c/pre\u003e\n  \u003cbutton class=\"copy-btn\" id=\"copy-btn\" onclick=\"mgCopy()\"\u003eコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"freee-cta\"\u003e\n  \u003ch3\u003e事業のSEO対策と経費管理を同時に効率化しませんか？\u003c/h3\u003e\n  \u003cp\u003e\n    ウェブサイトのSEO改善と並行して、事業の財務管理も重要です。\n    \u003cstrong\u003efreee会計\u003c/strong\u003eなら、売上・経費の自動仕訳、確定申告書類の自動作成、\n    インボイス対応まで一括管理。Webマーケティング費用の経費処理も簡単です。\n    中小企業・個人事業主の方に選ばれています。\n  \u003c/p\u003e","title":"メタタグジェネレーター — SEO・OGタグ自動生成"},{"content":" \u0026#128197; イベントカウントダウン イベント名 目標日時 クイックプリセット \u0026#9654; カウントダウン開始 + リストに追加 \u0026#128279; リンクをシェア 上でイベントを設定し、「カウントダウン開始」をクリックしてください。 \u0026#128203; マイカウントダウン一覧 まだイベントが登録されていません。イベントを設定して「+ リストに追加」をクリックしてください。 リンクをコピーしました！ 使い方 イベント名を入力 — 「プロジェクト締切」「旅行出発」など、わかりやすい名前を入力します。 目標日時を選択 — 日付と時刻を設定すると、秒単位まで精確にカウントダウンできます。 プリセットを活用 — 元日・クリスマス・ハロウィンなど日本の主要イベントのプリセットをワンクリックで選択できます。 「カウントダウン開始」をクリック — 日・時間・分・秒が毎秒リアルタイムで更新されます。 プログレスバー確認 — 開始から目標日時までの経過率（%）を視覚的に確認できます。 リストに追加 — 「+ リストに追加」で複数のイベントを登録し、一覧で日数を管理できます。 リンクをシェア — 「リンクをシェア」でURLをコピーし、チームや友人と共有できます。ページを再読み込みしてもカウントダウンが復元されます。 過去の日付 — 過去の日付を入力すると「〇日前」と表示します。 ゼロになったら紙吹雪 — カウントダウンがゼロになると紙吹雪アニメーションが自動再生されます。 カウントダウンタイマーとの違い このサイトのカウントダウンタイマーは、「25分間」のような時間の長さを入力するシンプルなタイマーです。ポモドーロや料理など短時間の集中作業向けです。\nイベントカウントダウンは、特定の未来の日時を指定して「あと何日何時間何分何秒か」を表示します。ページを再読み込みしても継続し、URLで共有できます。\n機能 カウントダウンタイマー イベントカウントダウン 入力 時間の長さ 特定の日時 用途 短時間の作業 将来のイベント・締切 日数表示 なし あり URLシェア なし あり 過去日付対応 なし あり（〇日前表示） 複数イベント管理 なし あり（リスト機能） こんな用途に最適 カテゴリ 用途例 仕事・締切 プロジェクト納期、確定申告期限、試験日 記念日 誕生日、結婚記念日、交際記念日 旅行 フライト出発日、ホテルチェックイン イベント ライブ・コンサート、スポーツ観戦、お祭り ライフイベント 入学式、卒業式、引っ越し 関連ツール 作業集中タイマー → カウントダウンタイマー 正確な年齢を計算 → 年齢計算ツール 確定申告の期限もカウントダウンで管理しよう\n期限まで残り何日かをリアルタイムで把握しながら、クラウド会計ソフト「freee」で日々の経費入力から申告書作成まで一括管理。スマホひとつで確定申告が完結します。\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/event-countdown/","summary":"\u003cdiv id=\"ec-app\"\u003e\n\u003cstyle\u003e\n/* =============================================\n   イベントカウントダウン - Teal + Amber Theme\n   ============================================= */\n\n#ec-app {\n  font-family: 'Segoe UI', 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #0f172a;\n}\n\n#ec-app * {\n  box-sizing: border-box;\n}\n\n/* --- 入力パネル --- */\n#ec-app .ec-panel {\n  background: linear-gradient(135deg, #0d9488 0%, #0f766e 100%);\n  border-radius: 16px;\n  padding: 28px 28px 24px;\n  color: #fff;\n  margin-bottom: 24px;\n  box-shadow: 0 8px 32px rgba(13,148,136,0.28);\n}\n\n#ec-app .ec-panel h2 {\n  margin: 0 0 20px;\n  font-size: 1.3rem;\n  font-weight: 700;\n  letter-spacing: .02em;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  color: #f0fdfa;\n}\n\n#ec-app .ec-form-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  align-items: flex-end;\n  margin-bottom: 14px;\n}\n\n#ec-app .ec-form-group {\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n  flex: 1;\n  min-width: 160px;\n}\n\n#ec-app .ec-form-group label {\n  font-size: .8rem;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: .06em;\n  color: #ccfbf1;\n}\n\n#ec-app .ec-input {\n  padding: 9px 12px;\n  border-radius: 8px;\n  border: 2px solid rgba(255,255,255,0.25);\n  background: rgba(255,255,255,0.15);\n  color: #fff;\n  font-size: .95rem;\n  outline: none;\n  transition: border-color .2s;\n  width: 100%;\n  font-family: inherit;\n}\n\n#ec-app .ec-input::placeholder { color: rgba(255,255,255,0.55); }\n#ec-app .ec-input:focus { border-color: rgba(255,255,255,0.7); }\n\n#ec-app input[type=\"datetime-local\"]::-webkit-calendar-picker-indicator {\n  filter: invert(1) opacity(0.7);\n  cursor: pointer;\n}\n\n/* プリセットチップ */\n#ec-app .ec-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 16px;\n}\n\n#ec-app .ec-chip {\n  background: rgba(255,255,255,0.15);\n  border: 1px solid rgba(255,255,255,0.3);\n  color: #fff;\n  border-radius: 20px;\n  padding: 4px 12px;\n  font-size: .82rem;\n  cursor: pointer;\n  transition: background .2s, transform .1s;\n  white-space: nowrap;\n  font-family: inherit;\n}\n\n#ec-app .ec-chip:hover {\n  background: rgba(255,255,255,0.3);\n  transform: translateY(-1px);\n}\n\n/* ボタン */\n#ec-app .ec-btn-row {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n#ec-app .ec-btn {\n  padding: 10px 20px;\n  border-radius: 8px;\n  border: none;\n  font-size: .9rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: transform .15s, opacity .15s;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-family: inherit;\n}\n\n#ec-app .ec-btn:hover { transform: translateY(-1px); opacity: .9; }\n#ec-app .ec-btn:active { transform: translateY(0); }\n\n#ec-app .ec-btn-primary {\n  background: #fbbf24;\n  color: #0f172a;\n}\n\n#ec-app .ec-btn-secondary {\n  background: rgba(255,255,255,0.2);\n  color: #fff;\n  border: 1px solid rgba(255,255,255,0.35);\n}\n\n#ec-app .ec-btn-share {\n  background: rgba(255,255,255,0.15);\n  color: #fff;\n  border: 1px solid rgba(255,255,255,0.35);\n}\n\n/* --- メイン表示 --- */\n#ec-app .ec-display {\n  background: #fff;\n  border-radius: 16px;\n  padding: 32px 28px;\n  box-shadow: 0 2px 16px rgba(0,0,0,0.08);\n  margin-bottom: 24px;\n  text-align: center;\n  border: 1px solid #e2e8f0;\n  min-height: 180px;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n}\n\n#ec-app .ec-event-label {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #0f766e;\n  margin-bottom: 8px;\n  letter-spacing: .01em;\n}\n\n#ec-app .ec-placeholder {\n  color: #94a3b8;\n  font-size: 1rem;\n}\n\n/* カウントダウンブロック */\n#ec-app .ec-blocks {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  flex-wrap: wrap;\n  margin: 12px 0 16px;\n}\n\n#ec-app .ec-block {\n  background: linear-gradient(135deg, #f0fdfa, #ccfbf1);\n  border-radius: 12px;\n  padding: 16px 20px 12px;\n  min-width: 90px;\n  border: 1px solid #99f6e4;\n}\n\n#ec-app .ec-block-num {\n  font-size: 2.6rem;\n  font-weight: 800;\n  color: #0d9488;\n  line-height: 1;\n  font-variant-numeric: tabular-nums;\n  display: block;\n}\n\n#ec-app .ec-block-label {\n  font-size: .72rem;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: .06em;\n  color: #5eead4;\n  display: block;\n  margin-top: 4px;\n}\n\n/* 過去の日付 */\n#ec-app .ec-past-msg {\n  font-size: 1.8rem;\n  font-weight: 800;\n  color: #7c3aed;\n}\n\n#ec-app .ec-zero-msg {\n  font-size: 1.6rem;\n  font-weight: 800;\n  color: #f59e0b;\n  animation: ec-pulse 0.8s ease-in-out infinite alternate;\n}\n\n@keyframes ec-pulse {\n  from { transform: scale(1); }\n  to   { transform: scale(1.04); }\n}\n\n/* プログレスバー */\n#ec-app .ec-progress-wrap {\n  width: 100%;\n  max-width: 420px;\n  margin-top: 4px;\n}\n\n#ec-app .ec-progress-labels {\n  display: flex;\n  justify-content: space-between;\n  font-size: .75rem;\n  color: #94a3b8;\n  margin-bottom: 4px;\n}\n\n#ec-app .ec-progress-track {\n  background: #e2e8f0;\n  border-radius: 99px;\n  height: 8px;\n  overflow: hidden;\n}\n\n#ec-app .ec-progress-bar {\n  height: 100%;\n  background: linear-gradient(90deg, #0d9488, #fbbf24);\n  border-radius: 99px;\n  transition: width .5s ease;\n}\n\n#ec-app .ec-progress-pct {\n  font-size: .78rem;\n  color: #64748b;\n  margin-top: 4px;\n}\n\n/* シェアトースト */\n#ec-app .ec-toast {\n  position: fixed;\n  bottom: 28px;\n  left: 50%;\n  transform: translateX(-50%) translateY(80px);\n  background: #0f172a;\n  color: #fff;\n  padding: 10px 20px;\n  border-radius: 8px;\n  font-size: .9rem;\n  font-weight: 600;\n  transition: transform .3s ease;\n  z-index: 9999;\n  pointer-events: none;\n}\n\n#ec-app .ec-toast.ec-toast-show {\n  transform: translateX(-50%) translateY(0);\n}\n\n/* --- リストパネル --- */\n#ec-app .ec-list-panel {\n  background: #fff;\n  border-radius: 16px;\n  padding: 24px 24px 16px;\n  box-shadow: 0 2px 16px rgba(0,0,0,0.08);\n  border: 1px solid #e2e8f0;\n  margin-bottom: 24px;\n}\n\n#ec-app .ec-list-panel h3 {\n  margin: 0 0 16px;\n  font-size: 1rem;\n  font-weight: 700;\n  color: #0f766e;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n#ec-app .ec-list-empty {\n  color: #94a3b8;\n  font-size: .9rem;\n  text-align: center;\n  padding: 12px 0;\n}\n\n#ec-app .ec-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n\n#ec-app .ec-list-item {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 12px 14px;\n  border-radius: 10px;\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  transition: box-shadow .2s;\n}\n\n#ec-app .ec-list-item:hover {\n  box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n}\n\n#ec-app .ec-list-item-name {\n  flex: 1;\n  font-weight: 600;\n  font-size: .9rem;\n  color: #1e293b;\n}\n\n#ec-app .ec-list-item-date {\n  font-size: .78rem;\n  color: #94a3b8;\n}\n\n#ec-app .ec-list-item-days {\n  font-weight: 800;\n  font-size: 1.05rem;\n  color: #0d9488;\n  white-space: nowrap;\n  min-width: 90px;\n  text-align: right;\n}\n\n#ec-app .ec-list-item-days.past  { color: #7c3aed; }\n#ec-app .ec-list-item-days.today { color: #f59e0b; }\n\n#ec-app .ec-list-item-del {\n  background: none;\n  border: none;\n  cursor: pointer;\n  color: #cbd5e1;\n  font-size: 1rem;\n  padding: 2px 4px;\n  border-radius: 4px;\n  transition: color .2s;\n  line-height: 1;\n}\n\n#ec-app .ec-list-item-del:hover { color: #ef4444; }\n\n/* 紙吹雪キャンバス */\n#ec-confetti-canvas {\n  position: fixed;\n  top: 0; left: 0;\n  width: 100%; height: 100%;\n  pointer-events: none;\n  z-index: 9998;\n}\n\n/* レスポンシブ */\n@media (max-width: 520px) {\n  #ec-app .ec-block-num { font-size: 2rem; }\n  #ec-app .ec-block { min-width: 70px; padding: 12px 12px 10px; }\n  #ec-app .ec-blocks { gap: 10px; }\n  #ec-app .ec-panel { padding: 20px 16px 18px; }\n  #ec-app .ec-display { padding: 24px 16px; }\n}\n\u003c/style\u003e\n\u003c!-- 入力パネル --\u003e\n\u003cdiv class=\"ec-panel\"\u003e\n  \u003ch2\u003e\u0026#128197; イベントカウントダウン\u003c/h2\u003e\n  \u003cdiv class=\"ec-form-row\"\u003e\n    \u003cdiv class=\"ec-form-group\" style=\"flex:2;min-width:200px;\"\u003e\n      \u003clabel for=\"ec-name\"\u003eイベント名\u003c/label\u003e\n      \u003cinput type=\"text\" id=\"ec-name\" class=\"ec-input\" placeholder=\"例：プロジェクト締切、旅行出発日...\" maxlength=\"60\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ec-form-group\"\u003e\n      \u003clabel for=\"ec-date\"\u003e目標日時\u003c/label\u003e\n      \u003cinput type=\"datetime-local\" id=\"ec-date\" class=\"ec-input\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"margin-bottom:14px;\"\u003e\n    \u003cdiv style=\"font-size:.8rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#ccfbf1;margin-bottom:8px;\"\u003eクイックプリセット\u003c/div\u003e\n    \u003cdiv class=\"ec-presets\" id=\"ec-presets\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ec-btn-row\"\u003e\n    \u003cbutton class=\"ec-btn ec-btn-primary\" id=\"ec-start-btn\"\u003e\u0026#9654; カウントダウン開始\u003c/button\u003e\n    \u003cbutton class=\"ec-btn ec-btn-secondary\" id=\"ec-add-btn\"\u003e+ リストに追加\u003c/button\u003e\n    \u003cbutton class=\"ec-btn ec-btn-share\" id=\"ec-share-btn\"\u003e\u0026#128279; リンクをシェア\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- メイン表示 --\u003e\n\u003cdiv class=\"ec-display\" id=\"ec-display\"\u003e\n  \u003cdiv class=\"ec-placeholder\"\u003e上でイベントを設定し、「カウントダウン開始」をクリックしてください。\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- リストパネル --\u003e\n\u003cdiv class=\"ec-list-panel\"\u003e\n  \u003ch3\u003e\u0026#128203; マイカウントダウン一覧\u003c/h3\u003e\n  \u003cul class=\"ec-list\" id=\"ec-list\"\u003e\n    \u003cli class=\"ec-list-empty\" id=\"ec-list-empty\"\u003eまだイベントが登録されていません。イベントを設定して「+ リストに追加」をクリックしてください。\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\u003c!-- 紙吹雪キャンバス --\u003e\n\u003cp\u003e\u003ccanvas id=\"ec-confetti-canvas\" style=\"display:none;\"\u003e\u003c/canvas\u003e\u003c/p\u003e","title":"イベントカウントダウン"},{"content":" すべてのカテゴリ アルカリ金属 アルカリ土類金属 遷移金属 典型金属 半金属 非金属 ハロゲン 希ガス ランタノイド アクチノイド 性質不明 クリア ← 横スクロールで全体を表示できます →\n× 原子番号 原子量 カテゴリ 常温での状態 電子配置 発見年 周期 族 研究費・実験材料費の管理もかんたんに\nfreee会計なら、研究費用・材料費の経費管理もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール:\n単位変換 → 単位変換ツール 関数電卓 → 関数電卓 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/periodic-table/","summary":"\u003cdiv id=\"pt-app\"\u003e\n\u003cstyle\u003e\n#pt-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  color: #1a1a1a;\n  max-width: 100%;\n}\n#pt-app * { box-sizing: border-box; }\n\n#pt-app .pt-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-bottom: 16px;\n  align-items: center;\n}\n#pt-app .pt-search {\n  flex: 1;\n  min-width: 180px;\n  padding: 8px 12px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  font-size: 14px;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#pt-app .pt-search:focus { border-color: #3b82f6; }\n#pt-app .pt-filter {\n  padding: 8px 12px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  font-size: 13px;\n  background: #fff;\n  cursor: pointer;\n  outline: none;\n}\n#pt-app .pt-clear {\n  padding: 8px 14px;\n  background: #6b7280;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 13px;\n  cursor: pointer;\n}\n#pt-app .pt-clear:hover { background: #4b5563; }\n\n/* Legend */\n#pt-app .pt-legend {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n  margin-bottom: 14px;\n}\n#pt-app .pt-legend-item {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  font-size: 11px;\n  color: #374151;\n  cursor: pointer;\n  padding: 2px 6px;\n  border-radius: 4px;\n  border: 1px solid transparent;\n  transition: border-color 0.15s;\n}\n#pt-app .pt-legend-item:hover { border-color: #9ca3af; }\n#pt-app .pt-legend-swatch {\n  width: 12px; height: 12px;\n  border-radius: 3px;\n  flex-shrink: 0;\n}\n\n/* Table wrapper */\n#pt-app .pt-wrapper {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n  padding-bottom: 8px;\n}\n#pt-app .pt-grid {\n  display: grid;\n  grid-template-columns: repeat(18, minmax(46px, 1fr));\n  grid-template-rows: repeat(9, 48px);\n  gap: 2px;\n  min-width: 860px;\n}\n\n/* Element cell */\n#pt-app .el {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  border-radius: 4px;\n  cursor: pointer;\n  padding: 2px;\n  transition: transform 0.1s, box-shadow 0.1s, opacity 0.2s;\n  border: 1px solid rgba(0,0,0,0.12);\n  position: relative;\n  user-select: none;\n}\n#pt-app .el:hover {\n  transform: scale(1.12);\n  box-shadow: 0 4px 12px rgba(0,0,0,0.22);\n  z-index: 5;\n}\n#pt-app .el.dimmed { opacity: 0.18; }\n#pt-app .el.highlighted { opacity: 1; box-shadow: 0 0 0 2px #1d4ed8; }\n\n#pt-app .el-num {\n  font-size: 8px;\n  color: rgba(0,0,0,0.55);\n  line-height: 1;\n  align-self: flex-start;\n  padding-left: 2px;\n}\n#pt-app .el-sym {\n  font-size: 16px;\n  font-weight: 700;\n  line-height: 1;\n}\n#pt-app .el-name {\n  font-size: 7px;\n  line-height: 1.1;\n  text-align: center;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  width: 100%;\n  text-align: center;\n}\n#pt-app .el-mass {\n  font-size: 7px;\n  color: rgba(0,0,0,0.5);\n  line-height: 1;\n}\n\n/* Category colors */\n#pt-app .cat-alkali       { background: #fca5a5; }\n#pt-app .cat-alkaline     { background: #fdba74; }\n#pt-app .cat-lanthanide   { background: #fde68a; }\n#pt-app .cat-actinide     { background: #d9f99d; }\n#pt-app .cat-transition   { background: #93c5fd; }\n#pt-app .cat-post         { background: #6ee7b7; }\n#pt-app .cat-metalloid    { background: #a5b4fc; }\n#pt-app .cat-nonmetal     { background: #f9a8d4; }\n#pt-app .cat-halogen      { background: #fb923c; color: #fff; }\n#pt-app .cat-noble        { background: #c4b5fd; }\n#pt-app .cat-unknown      { background: #d1d5db; }\n\n/* Popup */\n#pt-app .pt-popup-overlay {\n  display: none;\n  position: fixed;\n  inset: 0;\n  background: rgba(0,0,0,0.45);\n  z-index: 1000;\n  align-items: center;\n  justify-content: center;\n}\n#pt-app .pt-popup-overlay.open { display: flex; }\n#pt-app .pt-popup {\n  background: #fff;\n  border-radius: 14px;\n  padding: 24px 28px;\n  max-width: 440px;\n  width: 90vw;\n  box-shadow: 0 20px 60px rgba(0,0,0,0.3);\n  position: relative;\n  animation: ptPopIn 0.18s ease;\n}\n@keyframes ptPopIn {\n  from { transform: scale(0.88); opacity: 0; }\n  to   { transform: scale(1); opacity: 1; }\n}\n#pt-app .pt-popup-close {\n  position: absolute;\n  top: 12px; right: 14px;\n  background: none;\n  border: none;\n  font-size: 22px;\n  cursor: pointer;\n  color: #6b7280;\n  line-height: 1;\n}\n#pt-app .pt-popup-close:hover { color: #1a1a1a; }\n#pt-app .pt-popup-header {\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  margin-bottom: 16px;\n}\n#pt-app .pt-popup-sym-box {\n  width: 72px; height: 72px;\n  border-radius: 10px;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n}\n#pt-app .pt-popup-sym {\n  font-size: 32px;\n  font-weight: 800;\n  line-height: 1;\n}\n#pt-app .pt-popup-num-small {\n  font-size: 12px;\n  color: rgba(0,0,0,0.5);\n}\n#pt-app .pt-popup-name {\n  font-size: 22px;\n  font-weight: 700;\n  margin: 0 0 4px;\n}\n#pt-app .pt-popup-cat {\n  font-size: 12px;\n  color: #6b7280;\n}\n#pt-app .pt-popup-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 8px 16px;\n}\n#pt-app .pt-popup-field label {\n  font-size: 11px;\n  color: #9ca3af;\n  display: block;\n  margin-bottom: 1px;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#pt-app .pt-popup-field span {\n  font-size: 14px;\n  font-weight: 600;\n  color: #111;\n}\n\n#pt-app .pt-mobile-hint {\n  text-align: center;\n  font-size: 12px;\n  color: #9ca3af;\n  margin-top: 6px;\n}\n\n@media (max-width: 600px) {\n  #pt-app .pt-grid { min-width: 760px; }\n  #pt-app .el { border-radius: 3px; }\n  #pt-app .el-sym { font-size: 13px; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"pt-controls\"\u003e\n  \u003cinput class=\"pt-search\" id=\"ptSearch\" type=\"text\" placeholder=\"元素名または元素記号で検索…\" autocomplete=\"off\" /\u003e\n  \u003cselect class=\"pt-filter\" id=\"ptFilter\"\u003e\n    \u003coption value=\"\"\u003eすべてのカテゴリ\u003c/option\u003e\n    \u003coption value=\"alkali\"\u003eアルカリ金属\u003c/option\u003e\n    \u003coption value=\"alkaline\"\u003eアルカリ土類金属\u003c/option\u003e\n    \u003coption value=\"transition\"\u003e遷移金属\u003c/option\u003e\n    \u003coption value=\"post\"\u003e典型金属\u003c/option\u003e\n    \u003coption value=\"metalloid\"\u003e半金属\u003c/option\u003e\n    \u003coption value=\"nonmetal\"\u003e非金属\u003c/option\u003e\n    \u003coption value=\"halogen\"\u003eハロゲン\u003c/option\u003e\n    \u003coption value=\"noble\"\u003e希ガス\u003c/option\u003e\n    \u003coption value=\"lanthanide\"\u003eランタノイド\u003c/option\u003e\n    \u003coption value=\"actinide\"\u003eアクチノイド\u003c/option\u003e\n    \u003coption value=\"unknown\"\u003e性質不明\u003c/option\u003e\n  \u003c/select\u003e\n  \u003cbutton class=\"pt-clear\" id=\"ptClear\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"pt-legend\" id=\"ptLegend\"\u003e\u003c/div\u003e\n\u003cdiv class=\"pt-wrapper\"\u003e\n  \u003cdiv class=\"pt-grid\" id=\"ptGrid\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cp class=\"pt-mobile-hint\"\u003e← 横スクロールで全体を表示できます →\u003c/p\u003e","title":"インタラクティブ周期表"},{"content":" アスペクト比クロップ計算ツール 元の画像サイズ（ピクセル）\n幅 高さ ターゲットのアスペクト比\n16:9 4:3 1:1 3:2 21:9 9:16 5:4 カスタム カスタム比率: : クロップ幅 — ピクセル クロップ高さ — ピクセル オフセット（中央寄せ） — 左上からのx, y 除去ピクセル（幅） — px 削除 除去ピクセル（高さ） — px 削除 保持率 — 元画像の % ビジュアルプレビュー アスペクト比を選択し、画像サイズを入力するとクロップ寸法を計算します。\n事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール アスペクト比計算 → アスペクト比計算ツール 画像サイズを変更 → 画像リサイザー 画像をBase64に変換 → 画像をBase64に変換 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/aspect-ratio-crop/","summary":"\u003cdiv id=\"arc-app\"\u003e\n\u003cstyle\u003e\n#arc-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', 'Segoe UI', sans-serif;\n  background: #0f0f13;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin: 0 auto;\n  max-width: 860px;\n  box-sizing: border-box;\n}\n#arc-app * { box-sizing: border-box; }\n\n#arc-app h2 {\n  font-size: 1.05rem;\n  font-weight: 600;\n  color: #f1f5f9;\n  margin: 0 0 18px;\n  letter-spacing: 0.02em;\n}\n\n.arc-label {\n  font-size: 0.72rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #64748b;\n  margin-bottom: 8px;\n  display: block;\n}\n\n.arc-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n  margin-bottom: 16px;\n}\n@media (max-width: 500px) { .arc-row { grid-template-columns: 1fr; } }\n\n.arc-field { display: flex; flex-direction: column; gap: 5px; }\n.arc-field label { font-size: 0.78rem; color: #94a3b8; font-weight: 600; }\n\n.arc-input {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 7px;\n  color: #e2e8f0;\n  font-size: 1rem;\n  padding: 9px 12px;\n  font-family: inherit;\n  outline: none;\n  transition: border-color 0.2s;\n  width: 100%;\n}\n.arc-input:focus { border-color: #6366f1; }\n.arc-input::placeholder { color: #4a5568; }\n\n.arc-ratio-row {\n  display: flex;\n  gap: 6px;\n  flex-wrap: wrap;\n  margin-bottom: 16px;\n}\n\n.arc-ratio-btn {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 20px;\n  color: #94a3b8;\n  font-size: 0.8rem;\n  font-weight: 600;\n  padding: 5px 14px;\n  cursor: pointer;\n  font-family: inherit;\n  transition: all 0.15s;\n  white-space: nowrap;\n}\n.arc-ratio-btn:hover { border-color: #6366f1; color: #a5b4fc; }\n.arc-ratio-btn.arc-active { background: rgba(99,102,241,0.18); border-color: #6366f1; color: #a5b4fc; }\n\n.arc-custom-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 16px;\n  flex-wrap: wrap;\n}\n.arc-custom-row label { font-size: 0.78rem; color: #94a3b8; white-space: nowrap; }\n.arc-custom-input {\n  width: 68px;\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 7px;\n  color: #e2e8f0;\n  font-size: 0.95rem;\n  padding: 7px 10px;\n  font-family: inherit;\n  outline: none;\n  transition: border-color 0.2s;\n  text-align: center;\n}\n.arc-custom-input:focus { border-color: #6366f1; }\n.arc-sep { color: #64748b; font-size: 1rem; font-weight: 700; }\n\n.arc-results {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  gap: 10px;\n  margin-bottom: 20px;\n}\n@media (max-width: 500px) { .arc-results { grid-template-columns: 1fr; } }\n\n.arc-card { background: #1a1a24; border: 1px solid #2d2d3d; border-radius: 8px; padding: 12px 14px; }\n.arc-card-label { font-size: 0.68rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: #64748b; margin-bottom: 4px; }\n.arc-card-value { font-size: 1.1rem; font-weight: 700; color: #a5b4fc; font-family: 'Courier New', monospace; }\n.arc-card-unit { font-size: 0.72rem; color: #475569; margin-top: 2px; }\n.arc-card.arc-highlight { border-color: #6366f1; }\n.arc-card.arc-highlight .arc-card-label { color: #6366f1; }\n\n.arc-preview-wrap {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 16px;\n  margin-bottom: 16px;\n}\n.arc-preview-title { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: #64748b; margin-bottom: 12px; }\n#arc-canvas { display: block; margin: 0 auto; border-radius: 4px; max-width: 100%; }\n\n.arc-note { font-size: 0.78rem; color: #4a5568; line-height: 1.6; }\n.arc-note strong { color: #64748b; }\n\u003c/style\u003e\n\u003ch2\u003eアスペクト比クロップ計算ツール\u003c/h2\u003e\n\u003cp\u003e\u003cspan class=\"arc-label\"\u003e元の画像サイズ（ピクセル）\u003c/span\u003e\u003c/p\u003e","title":"アスペクト比クロップ計算"},{"content":"TailwindのユーティリティクラスをコピペするだけでTailwind推奨順序に自動整列。レイアウト→ポジション→サイズ→スペーシング→タイポグラフィ→背景→ボーダー→エフェクト→トランジション→インタラクションの順でキレイに並べ替えます。\n関連ツール：CSS変数ジェネレーター · CSSメディアクエリジェネレーター 入力モード\nクラス文字列 HTML要素 Tailwindクラスを貼り付け\nスペース区切りのTailwindユーティリティクラスを貼り付けてください。\n重複クラスを削除する クラスを並べ替え サンプルを読み込む クリア 結果\n\u0026lt;div class=\u0026quot;tw-diff\u0026quot; id=\u0026quot;tw-ja-diff-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;tw-diff-box before\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;tw-diff-label before\u0026quot;\u0026gt;並べ替え前\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;tw-diff-content\u0026quot; id=\u0026quot;tw-ja-before\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;tw-diff-box after\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;tw-diff-label after\u0026quot;\u0026gt;並べ替え後\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;tw-diff-content\u0026quot; id=\u0026quot;tw-ja-after\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;label\u0026gt;ソート済み出力\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;tw-output-wrap\u0026quot;\u0026gt; \u0026lt;textarea class=\u0026quot;tw-output\u0026quot; id=\u0026quot;tw-ja-output\u0026quot; readonly rows=\u0026quot;5\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;button class=\u0026quot;tw-copy-btn\u0026quot; id=\u0026quot;tw-ja-copy-btn\u0026quot; onclick=\u0026quot;twJaCopy()\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; 💼 フリーランス・個人事業主の経理をまるごと自動化 freee会計なら確定申告・請求書・帳簿がすべて一元管理。開発者・フリーランスエンジニアに選ばれています。 freeeを無料で試す ※本記事にはアフィリエイト広告が含まれます。 ソート順の仕組み Tailwind CSS公式のPrettier プラグイン と同じ推奨順序でクラスを並べ替えます。\nグループ 代表クラス例 レイアウト flex, grid, block, hidden, overflow-hidden ポジション relative, absolute, top-0, z-10 サイズ w-full, h-16, max-w-md スペーシング p-4, mx-auto, space-x-2 タイポグラフィ text-lg, font-bold, leading-tight, text-gray-900 背景 bg-white, from-blue-500, bg-gradient-to-r ボーダー rounded-xl, border, ring-2 エフェクト shadow-lg, opacity-75 トランジション transition, duration-200, ease-in-out トランスフォーム scale-95, rotate-3, translate-x-1 インタラクション cursor-pointer, select-none レスポンシブ（sm:, md:, lg:）・状態（hover:, focus:, dark:）バリアントは、対応するベースクラスグループの後ろにまとめてソートされます。\n使い方のヒント HTML要素モードはコンポーネントをまるごと貼り付けるときに便利。各 class=\u0026quot;...\u0026quot; 属性を個別にソートします。 重複削除はデフォルトでオンです。オフにすると元のクラス一覧がソートのみされます。 すべてブラウザ内で処理します。入力内容はサーバーに送信されません。 関連ツール：CSS変数ジェネレーター · CSSメディアクエリジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/tailwind-class-sorter/","summary":"\u003cp\u003eTailwindのユーティリティクラスをコピペするだけでTailwind推奨順序に自動整列。レイアウト→ポジション→サイズ→スペーシング→タイポグラフィ→背景→ボーダー→エフェクト→トランジション→インタラクションの順でキレイに並べ替えます。\u003c/p\u003e\n\u003cp\u003e関連ツール：\u003ca href=\"https://productivity-works.com/ja/tools/css-variables-generator/\"\u003eCSS変数ジェネレーター\u003c/a\u003e\n · \u003ca href=\"https://productivity-works.com/ja/tools/media-query-generator/\"\u003eCSSメディアクエリジェネレーター\u003c/a\u003e\n\u003c/p\u003e\n\u003cdiv id=\"tw-app-ja\"\u003e\n\u003cstyle\u003e\n  #tw-app-ja {\n    font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic UI\", \"Segoe UI\", sans-serif;\n    max-width: 860px;\n    margin: 0 auto;\n    color: #1e293b;\n  }\n  #tw-app-ja * { box-sizing: border-box; }\n\u003cp\u003e#tw-app-ja .tw-card {\nbackground: #fff;\nborder: 1px solid #e2e8f0;\nborder-radius: 12px;\npadding: 24px;\nmargin-bottom: 20px;\nbox-shadow: 0 1px 4px rgba(0,0,0,0.06);\n}\u003c/p\u003e\n\u003cp\u003e#tw-app-ja label {\ndisplay: block;\nfont-size: 13px;\nfont-weight: 600;\ncolor: #475569;\nmargin-bottom: 6px;\ntext-transform: uppercase;\nletter-spacing: 0.04em;\n}\u003c/p\u003e\n\u003cp\u003e#tw-app-ja textarea {\nwidth: 100%;\nborder: 1px solid #cbd5e1;\nborder-radius: 8px;\npadding: 12px 14px;\nfont-family: \u0026ldquo;SFMono-Regular\u0026rdquo;, Consolas, \u0026ldquo;Liberation Mono\u0026rdquo;, Menlo, monospace;\nfont-size: 13px;\nline-height: 1.6;\nresize: vertical;\ncolor: #0f172a;\nbackground: #f8fafc;\ntransition: border-color 0.15s;\nmin-height: 120px;\n}\n#tw-app-ja textarea:focus {\noutline: none;\nborder-color: #38bdf8;\nbackground: #fff;\nbox-shadow: 0 0 0 3px rgba(56,189,248,0.15);\n}\u003c/p\u003e","title":"Tailwind CSSクラスソーター"},{"content":" 無料画像リサイザー 画像のサイズ変更・圧縮をブラウザ上で完結。アップロード不要、アカウント不要。Canvas APIを使い、データはすべてあなたのデバイス内で処理されます。\n🖼️ ここに画像をドラッグ＆ドロップ JPG・PNG・WebP・GIF・BMP対応 · 最大20MB ファイルを選択 プレビュー 📂 画像をアップロードするとプレビューが表示されます サイズ指定 幅（px） 🔒 高さ（px） プリセットサイズ SNSヘッダー / OG画像 1200 × 630 px Instagramスクエア 1080 × 1080 px YouTubeサムネイル 1280 × 720 px プロフィール画像 400 × 400 px Instagramストーリー 1080 × 1920 px Twitterヘッダー 1500 × 500 px ブログサムネイル 800 × 800 px フルHD 1920 × 1080 px 出力設定 画質（JPEG / WebP） 85% 出力フォーマット JPEG PNG WebP ファイルサイズ比較 元のサイズ — 画像をアップロード 出力サイズ（推定） — — 削減サイズ — — リサイズした画像をダウンロード 使い方 STEP 1 — 画像をアップロード: ドラッグ＆ドロップするか、「ファイルを選択」から画像を選びます。JPG・PNG・WebP・GIF・BMP（最大20MB）に対応しています。\nSTEP 2 — サイズを指定: 幅・高さをピクセルで入力します。🔒アイコンをクリックするとアスペクト比ロックのON/OFFを切り替えられます。プリセットボタンをクリックすれば、よく使うサイズに一発変換。\nSTEP 3 — 出力設定: JPEG・PNG・WebPから出力フォーマットを選び、画質スライダー（10〜100%）で圧縮率を調整します。PNGは可逆圧縮のため画質設定はJPEG・WebPのみ有効です。\nSTEP 4 — サイズ確認: 変換前後のファイルサイズと削減量を確認できます。プレビューで視覚的に品質を確かめてからダウンロードしましょう。\nSTEP 5 — ダウンロード: 「リサイズした画像をダウンロード」をクリックして保存します。\nSNS別・推奨画像サイズ（2025年版） プラットフォーム 推奨サイズ OGP / Facebook シェア画像 1200 × 630 px Instagram スクエア投稿 1080 × 1080 px Instagram / TikTok ストーリー 1080 × 1920 px YouTube サムネイル 1280 × 720 px Twitter / X ヘッダー 1500 × 500 px プロフィール・アイコン 400 × 400 px 上記はすべてプリセットとして登録済みです。ボタンをクリックするだけで即座に適用できます。\nフォーマットの選び方 JPEG は写真や複雑な色のある画像に最適。ファイルサイズが小さく、Web表示に向いています。画質80〜85%が品質とサイズのバランス点です。\nPNG はスクリーンショット、ロゴ、テキスト入り画像、透過画像に最適。可逆圧縮のため劣化なし。ただしJPEGよりファイルサイズは大きくなります。\nWebP はGoogleが開発した次世代フォーマット。同等品質でJPEGより30〜40%小さいことが多く、主要ブラウザすべてで対応済み。Web用途に最も推奨されます。\n関連ツール QRコードを生成してマーケティング素材やURLを共有 → QRコードジェネレーター 画面の解像度・ビューポートサイズを確認 → 画面解像度チェッカー デザインに使う色を選択・変換 → カラーピッカー 画像管理もfreeeで効率化 ブログやSNSの画像を編集している方、経費管理もfreeeで一括管理しませんか？ freeeを無料で試す\n関連記事 無料AI画像生成ツール比較2026年版【目的別おすすめランキング】 AI画像生成おすすめツール比較2026年版【無料・有料・日本語対応】 ","permalink":"https://productivity-works.com/ja/tools/image-resizer/","summary":"\u003cdiv id=\"resize-app\"\u003e\n\u003cstyle\u003e\n#resize-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Yu Gothic UI', Roboto, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  padding: 0 0 48px 0;\n  color: #1a202c;\n}\n\n#resize-app * {\n  box-sizing: border-box;\n}\n\n/* Hero */\n.ra-hero {\n  background: linear-gradient(135deg, #059669 0%, #047857 50%, #065f46 100%);\n  border-radius: 16px;\n  padding: 32px 28px;\n  margin-bottom: 24px;\n  color: #fff;\n}\n\n.ra-hero h2 {\n  margin: 0 0 6px 0;\n  font-size: 22px;\n  font-weight: 800;\n}\n\n.ra-hero p {\n  margin: 0;\n  font-size: 14px;\n  opacity: 0.88;\n  line-height: 1.7;\n}\n\n/* Drop Zone */\n.ra-dropzone {\n  border: 3px dashed #059669;\n  border-radius: 14px;\n  padding: 44px 24px;\n  text-align: center;\n  background: #f0fdf4;\n  cursor: pointer;\n  transition: background 0.2s, border-color 0.2s;\n  margin-bottom: 20px;\n  position: relative;\n}\n\n.ra-dropzone.drag-over {\n  background: #d1fae5;\n  border-color: #047857;\n}\n\n.ra-dropzone-icon {\n  font-size: 48px;\n  line-height: 1;\n  margin-bottom: 12px;\n  display: block;\n}\n\n.ra-dropzone-title {\n  font-size: 17px;\n  font-weight: 700;\n  color: #065f46;\n  margin-bottom: 6px;\n}\n\n.ra-dropzone-sub {\n  font-size: 13px;\n  color: #6b7280;\n  margin-bottom: 16px;\n}\n\n.ra-browse-btn {\n  display: inline-block;\n  padding: 10px 24px;\n  background: #059669;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n\n.ra-browse-btn:hover {\n  background: #047857;\n}\n\n#ra-file-input-ja {\n  display: none;\n}\n\n/* Card */\n.ra-card {\n  background: #fff;\n  border-radius: 14px;\n  box-shadow: 0 2px 16px rgba(0,0,0,0.08);\n  padding: 22px 24px;\n  margin-bottom: 18px;\n}\n\n.ra-card h3 {\n  margin: 0 0 18px 0;\n  font-size: 13px;\n  font-weight: 700;\n  color: #374151;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  border-bottom: 2px solid #f0fdf4;\n  padding-bottom: 10px;\n}\n\n/* Preview */\n.ra-preview-wrap {\n  display: flex;\n  gap: 20px;\n  align-items: flex-start;\n  flex-wrap: wrap;\n}\n\n.ra-preview-box {\n  flex: 1;\n  min-width: 200px;\n  text-align: center;\n}\n\n.ra-preview-label {\n  font-size: 11px;\n  font-weight: 700;\n  color: #6b7280;\n  margin-bottom: 8px;\n}\n\n.ra-preview-img-wrap {\n  border-radius: 10px;\n  overflow: hidden;\n  background: repeating-conic-gradient(#e5e7eb 0% 25%, #fff 0% 50%) 0 0 / 16px 16px;\n  border: 1px solid #e5e7eb;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 120px;\n  max-height: 300px;\n}\n\n.ra-preview-img-wrap img {\n  max-width: 100%;\n  max-height: 280px;\n  display: block;\n  object-fit: contain;\n}\n\n.ra-preview-info {\n  margin-top: 8px;\n  font-size: 12px;\n  color: #6b7280;\n}\n\n/* Dimension inputs */\n.ra-dim-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  flex-wrap: wrap;\n  margin-bottom: 16px;\n}\n\n.ra-dim-field {\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n  flex: 1;\n  min-width: 110px;\n}\n\n.ra-dim-field label {\n  font-size: 12px;\n  font-weight: 700;\n  color: #374151;\n  letter-spacing: 0.02em;\n}\n\n.ra-dim-input {\n  padding: 9px 12px;\n  border: 2px solid #d1fae5;\n  border-radius: 8px;\n  font-size: 15px;\n  font-weight: 600;\n  color: #1a202c;\n  transition: border-color 0.2s;\n  width: 100%;\n}\n\n.ra-dim-input:focus {\n  outline: none;\n  border-color: #059669;\n}\n\n.ra-lock-btn {\n  margin-top: 20px;\n  padding: 9px 16px;\n  border: 2px solid #d1fae5;\n  border-radius: 8px;\n  background: #fff;\n  font-size: 18px;\n  cursor: pointer;\n  transition: background 0.2s, border-color 0.2s;\n  flex-shrink: 0;\n}\n\n.ra-lock-btn.locked {\n  background: #d1fae5;\n  border-color: #059669;\n}\n\n.ra-lock-btn:hover {\n  background: #ecfdf5;\n}\n\n/* Presets */\n.ra-preset-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(176px, 1fr));\n  gap: 10px;\n}\n\n.ra-preset-btn {\n  padding: 10px 14px;\n  border: 2px solid #e5e7eb;\n  border-radius: 10px;\n  background: #fff;\n  text-align: left;\n  cursor: pointer;\n  transition: all 0.18s;\n}\n\n.ra-preset-btn:hover {\n  border-color: #059669;\n  background: #f0fdf4;\n}\n\n.ra-preset-name {\n  font-size: 13px;\n  font-weight: 700;\n  color: #1a202c;\n  display: block;\n  margin-bottom: 2px;\n}\n\n.ra-preset-size {\n  font-size: 11px;\n  color: #6b7280;\n}\n\n/* Quality + Format */\n.ra-settings-row {\n  display: flex;\n  gap: 20px;\n  flex-wrap: wrap;\n  align-items: flex-start;\n}\n\n.ra-setting-group {\n  flex: 1;\n  min-width: 180px;\n}\n\n.ra-setting-group label {\n  display: block;\n  font-size: 12px;\n  font-weight: 700;\n  color: #374151;\n  letter-spacing: 0.02em;\n  margin-bottom: 8px;\n}\n\n.ra-quality-wrap {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n.ra-quality-slider {\n  flex: 1;\n  height: 6px;\n  border-radius: 3px;\n  background: linear-gradient(to right, #d1fae5, #059669);\n  -webkit-appearance: none;\n  appearance: none;\n  outline: none;\n  cursor: pointer;\n}\n\n.ra-quality-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  background: #fff;\n  border: 2px solid #059669;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.15);\n  cursor: pointer;\n}\n\n.ra-quality-slider::-moz-range-thumb {\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  background: #fff;\n  border: 2px solid #059669;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.15);\n  cursor: pointer;\n}\n\n.ra-quality-val {\n  font-size: 15px;\n  font-weight: 800;\n  color: #059669;\n  width: 42px;\n  text-align: right;\n}\n\n.ra-format-btns {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n\n.ra-format-btn {\n  padding: 8px 18px;\n  border: 2px solid #e5e7eb;\n  border-radius: 20px;\n  background: #fff;\n  font-size: 13px;\n  font-weight: 700;\n  color: #374151;\n  cursor: pointer;\n  transition: all 0.18s;\n}\n\n.ra-format-btn:hover {\n  border-color: #059669;\n  color: #059669;\n}\n\n.ra-format-btn.active {\n  border-color: #059669;\n  background: #059669;\n  color: #fff;\n}\n\n/* Size comparison */\n.ra-size-comparison {\n  display: flex;\n  gap: 16px;\n  flex-wrap: wrap;\n}\n\n.ra-size-box {\n  flex: 1;\n  min-width: 130px;\n  background: #f9fafb;\n  border-radius: 10px;\n  padding: 14px 16px;\n  text-align: center;\n  border: 1px solid #e5e7eb;\n}\n\n.ra-size-box-label {\n  font-size: 11px;\n  font-weight: 700;\n  color: #6b7280;\n  margin-bottom: 6px;\n}\n\n.ra-size-box-value {\n  font-size: 20px;\n  font-weight: 800;\n  color: #1a202c;\n}\n\n.ra-size-box-sub {\n  font-size: 11px;\n  color: #9ca3af;\n  margin-top: 3px;\n}\n\n.ra-size-box.original .ra-size-box-value { color: #374151; }\n.ra-size-box.output .ra-size-box-value   { color: #059669; }\n.ra-size-box.savings .ra-size-box-value  { color: #dc2626; }\n\n/* Download */\n.ra-download-btn {\n  display: block;\n  width: 100%;\n  padding: 14px 24px;\n  background: linear-gradient(135deg, #059669, #047857);\n  color: #fff;\n  border: none;\n  border-radius: 12px;\n  font-size: 16px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.2s, transform 0.1s;\n  text-align: center;\n  margin-top: 4px;\n}\n\n.ra-download-btn:hover:not(:disabled) { opacity: 0.92; }\n.ra-download-btn:active:not(:disabled) { transform: scale(0.98); }\n.ra-download-btn:disabled { background: #9ca3af; cursor: not-allowed; }\n\n/* Hidden canvas */\n#ra-canvas-ja { display: none; }\n\n/* Placeholder */\n.ra-placeholder {\n  text-align: center;\n  padding: 32px 16px;\n  color: #9ca3af;\n  font-size: 14px;\n}\n.ra-placeholder-icon {\n  font-size: 40px;\n  display: block;\n  margin-bottom: 8px;\n}\n\n/* Responsive */\n@media (max-width: 600px) {\n  .ra-hero { padding: 22px 16px; }\n  .ra-hero h2 { font-size: 18px; }\n  .ra-card { padding: 16px 14px; }\n  .ra-dim-row { gap: 8px; }\n  .ra-preset-grid { grid-template-columns: 1fr 1fr; }\n  .ra-settings-row { flex-direction: column; gap: 16px; }\n  .ra-size-comparison { gap: 8px; }\n}\n\u003c/style\u003e\n\u003c!-- Hero --\u003e\n\u003cdiv class=\"ra-hero\"\u003e\n  \u003ch2\u003e無料画像リサイザー\u003c/h2\u003e\n  \u003cp\u003e画像のサイズ変更・圧縮をブラウザ上で完結。アップロード不要、アカウント不要。Canvas APIを使い、データはすべてあなたのデバイス内で処理されます。\u003c/p\u003e","title":"画像リサイザー｜無料でオンライン画像サイズ変更・圧縮ツール"},{"content":"本ページにはアフィリエイトリンクが含まれます。\n所得税計算機 2026 課税所得と申告区分を入力して、税率・実効税率・税額をビジュアルで確認しましょう。\n年間課税所得（円） 申告区分 単身（一般） 配偶者控除あり 老人扶養控除あり ひとり親控除あり 基礎控除 基礎控除を適用する （48万円） 最高限界税率 23% 実効税率 0.0% 所得税額合計 ¥0 税引後所得 ¥0 月換算手取り（所得税のみ） ¥0 各税率段階での課税内訳 2026年度 所得税の速算表 税率 課税所得の範囲 この段階の税額 累計税額 収入が増えたら？ 日本の所得税の仕組み 日本は超過累進課税制度を採用しています。所得を段階ごとに分割し、それぞれの部分に異なる税率を適用します。高い税率が適用されるのはその段階を超えた部分だけです。\nよくある誤解： 「収入が増えて上の税率に入ったら、全部の所得に高い税率がかかる」— これは誤りです。超えた部分だけが高い税率で課税されます。\n2026年度 所得税速算表 税率 課税所得の範囲 控除額 5% 195万円以下 — 10% 195万円超〜330万円以下 9.75万円 20% 330万円超〜695万円以下 42.75万円 23% 695万円超〜900万円以下 63.6万円 33% 900万円超〜1,800万円以下 153.6万円 40% 1,800万円超〜4,000万円以下 279.6万円 45% 4,000万円超 479.6万円 ※復興特別所得税（2.1%加算）を含めて計算しています。基礎控除48万円は別途適用。\n税負担を減らす方法 1. iDeCo・企業型DCで節税 iDeCoの掛金は全額所得控除。年間最大81.6万円（自営業者）の拠出が可能で、高い税率段階の方ほど節税効果が大きくなります。\n2. 基礎控除・各種控除を活用 配偶者控除・扶養控除・医療費控除・生命保険料控除など、忘れずに申告しましょう。\n3. NISAで運用益を非課税に NISA口座内の利益・配当は非課税。税率20%分を丸ごと節税できます。\n4. 損益通算・繰越控除 株式・投資信託の売却損は他の譲渡益と通算でき、最大3年間繰り越すことができます。\n関連ツール 副業にかかる税金を計算 → 副業税金計算機 老後資産をシミュレーション → 老後資産計算機 毎月の予算を最適化 → 予算プランナー 資産管理を効率化 → freee会計で家計を自動管理 ","permalink":"https://productivity-works.com/ja/tools/tax-bracket-calculator/","summary":"\u003cp\u003e\u003cem\u003e本ページにはアフィリエイトリンクが含まれます。\u003c/em\u003e\u003c/p\u003e\n\u003ch1 id=\"所得税計算機-2026\"\u003e所得税計算機 2026\u003c/h1\u003e\n\u003cp\u003e課税所得と申告区分を入力して、\u003cstrong\u003e税率・実効税率・税額\u003c/strong\u003eをビジュアルで確認しましょう。\u003c/p\u003e\n\u003cdiv id=\"tb-calc\" style=\"max-width:720px;margin:0 auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;color:#1e293b;\"\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #dc2626;border-radius:12px;background:#fef2f2;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e年間課税所得（円）\u003c/label\u003e\n\u003cinput type=\"number\" id=\"tbIncome\" min=\"0\" max=\"500000000\" step=\"100000\" value=\"5000000\" oninput=\"calcTB()\" style=\"width:100%;padding:12px;border:1px solid #cbd5e1;border-radius:8px;font-size:18px;\"\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e申告区分\u003c/label\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:8px;\"\u003e\n\u003clabel style=\"display:flex;align-items:center;padding:12px;border:2px solid #e2e8f0;border-radius:8px;cursor:pointer;background:white;\" id=\"lbl-single\"\u003e\n\u003cinput type=\"radio\" name=\"tbStatus\" value=\"single\" checked onchange=\"calcTB()\" style=\"margin-right:8px;\"\u003e 単身（一般）\n\u003c/label\u003e\n\u003clabel style=\"display:flex;align-items:center;padding:12px;border:2px solid #e2e8f0;border-radius:8px;cursor:pointer;background:white;\" id=\"lbl-mfj\"\u003e\n\u003cinput type=\"radio\" name=\"tbStatus\" value=\"mfj\" onchange=\"calcTB()\" style=\"margin-right:8px;\"\u003e 配偶者控除あり\n\u003c/label\u003e\n\u003clabel style=\"display:flex;align-items:center;padding:12px;border:2px solid #e2e8f0;border-radius:8px;cursor:pointer;background:white;\" id=\"lbl-mfs\"\u003e\n\u003cinput type=\"radio\" name=\"tbStatus\" value=\"mfs\" onchange=\"calcTB()\" style=\"margin-right:8px;\"\u003e 老人扶養控除あり\n\u003c/label\u003e\n\u003clabel style=\"display:flex;align-items:center;padding:12px;border:2px solid #e2e8f0;border-radius:8px;cursor:pointer;background:white;\" id=\"lbl-hoh\"\u003e\n\u003cinput type=\"radio\" name=\"tbStatus\" value=\"hoh\" onchange=\"calcTB()\" style=\"margin-right:8px;\"\u003e ひとり親控除あり\n\u003c/label\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:8px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e基礎控除\u003c/label\u003e\n\u003cdiv style=\"display:flex;gap:12px;align-items:center;\"\u003e\n\u003clabel style=\"display:flex;align-items:center;cursor:pointer;\"\u003e\n\u003cinput type=\"checkbox\" id=\"tbDeduction\" checked onchange=\"calcTB()\" style=\"margin-right:6px;width:18px;height:18px;\"\u003e 基礎控除を適用する\n\u003c/label\u003e\n\u003cspan id=\"tbDeductionAmt\" style=\"color:#64748b;font-size:14px;\"\u003e（48万円）\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 結果 --\u003e\n\u003cdiv id=\"tbResults\" style=\"margin-top:24px;\"\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;text-align:center;\"\u003e\n\u003cdiv style=\"padding:20px;background:#fef2f2;border-radius:12px;border:1px solid #fecaca;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e最高限界税率\u003c/div\u003e\n\u003cdiv id=\"tbBracket\" style=\"font-size:36px;font-weight:bold;color:#dc2626;\"\u003e23%\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:20px;background:#f0fdf4;border-radius:12px;border:1px solid #bbf7d0;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e実効税率\u003c/div\u003e\n\u003cdiv id=\"tbEffective\" style=\"font-size:36px;font-weight:bold;color:#16a34a;\"\u003e0.0%\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:20px;background:#f8fafc;border-radius:12px;border:1px solid #e2e8f0;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e所得税額合計\u003c/div\u003e\n\u003cdiv id=\"tbTotal\" style=\"font-size:28px;font-weight:bold;color:#1e293b;\"\u003e¥0\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px;text-align:center;\"\u003e\n\u003cdiv style=\"padding:16px;background:white;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e税引後所得\u003c/div\u003e\n\u003cdiv id=\"tbAfterTax\" style=\"font-size:22px;font-weight:bold;color:#1e293b;\"\u003e¥0\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:16px;background:white;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e月換算手取り（所得税のみ）\u003c/div\u003e\n\u003cdiv id=\"tbMonthly\" style=\"font-size:22px;font-weight:bold;color:#1e293b;\"\u003e¥0\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 税率段階バー --\u003e\n\u003cdiv style=\"margin-top:24px;padding:20px;background:#f8fafc;border-radius:12px;border:1px solid #e2e8f0;\"\u003e\n\u003ch3 style=\"margin:0 0 12px 0;font-size:16px;\"\u003e各税率段階での課税内訳\u003c/h3\u003e\n\u003cdiv id=\"tbBar\" style=\"height:32px;border-radius:8px;overflow:hidden;display:flex;margin-bottom:8px;\"\u003e\u003c/div\u003e\n\u003cdiv id=\"tbLegend\" style=\"display:flex;flex-wrap:wrap;gap:8px;font-size:12px;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 税率テーブル --\u003e\n\u003cdiv style=\"margin-top:20px;padding:20px;background:white;border-radius:12px;border:1px solid #e2e8f0;\"\u003e\n\u003ch3 style=\"margin:0 0 12px 0;font-size:16px;\"\u003e2026年度 所得税の速算表\u003c/h3\u003e\n\u003cdiv style=\"overflow-x:auto;\"\u003e\n\u003ctable id=\"tbTable\" style=\"width:100%;border-collapse:collapse;font-size:14px;\"\u003e\n\u003cthead\u003e\n\u003ctr style=\"background:#dc2626;color:white;\"\u003e\n\u003cth style=\"padding:8px;text-align:left;\"\u003e税率\u003c/th\u003e\n\u003cth style=\"padding:8px;text-align:right;\"\u003e課税所得の範囲\u003c/th\u003e\n\u003cth style=\"padding:8px;text-align:right;\"\u003eこの段階の税額\u003c/th\u003e\n\u003cth style=\"padding:8px;text-align:right;\"\u003e累計税額\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody id=\"tbTableBody\"\u003e\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- シナリオ比較 --\u003e\n\u003cdiv style=\"margin-top:20px;padding:20px;background:#fffbeb;border-radius:12px;border:1px solid #fde68a;\"\u003e\n\u003ch3 style=\"margin:0 0 12px 0;font-size:16px;\"\u003e収入が増えたら？\u003c/h3\u003e\n\u003cdiv id=\"tbScenarios\" style=\"display:grid;gap:8px;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n// 日本の所得税速算表（2026年度）\nconst BRACKETS={\n  single:[\n    [0,1950000,0.05,0],\n    [1950000,3300000,0.10,97500],\n    [3300000,6950000,0.20,427500],\n    [6950000,9000000,0.23,636000],\n    [9000000,18000000,0.33,1536000],\n    [18000000,40000000,0.40,2796000],\n    [40000000,Infinity,0.45,4796000]\n  ],\n  mfj:[\n    [0,1950000,0.05,0],\n    [1950000,3300000,0.10,97500],\n    [3300000,6950000,0.20,427500],\n    [6950000,9000000,0.23,636000],\n    [9000000,18000000,0.33,1536000],\n    [18000000,40000000,0.40,2796000],\n    [40000000,Infinity,0.45,4796000]\n  ],\n  mfs:[\n    [0,1950000,0.05,0],\n    [1950000,3300000,0.10,97500],\n    [3300000,6950000,0.20,427500],\n    [6950000,9000000,0.23,636000],\n    [9000000,18000000,0.33,1536000],\n    [18000000,40000000,0.40,2796000],\n    [40000000,Infinity,0.45,4796000]\n  ],\n  hoh:[\n    [0,1950000,0.05,0],\n    [1950000,3300000,0.10,97500],\n    [3300000,6950000,0.20,427500],\n    [6950000,9000000,0.23,636000],\n    [9000000,18000000,0.33,1536000],\n    [18000000,40000000,0.40,2796000],\n    [40000000,Infinity,0.45,4796000]\n  ]\n};\n// 各区分の追加控除（基礎控除48万は別途）\nconst EXTRA_DED={single:0,mfj:380000,mfs:480000,hoh:350000};\nconst BASE_DED=480000;\nconst COLORS=['#dbeafe','#bfdbfe','#93c5fd','#60a5fa','#3b82f6','#2563eb','#1d4ed8'];\n\nfunction getStatus(){\n  return document.querySelector('input[name=\"tbStatus\"]:checked').value;\n}\n\nfunction computeTax(income,status){\n  const brackets=BRACKETS[status];\n  let tax=0;const details=[];\n  for(const[lo,hi,rate,ded]of brackets){\n    if(income\u003c=lo)break;\n    const taxable=Math.min(income,hi)-lo;\n    const t=taxable*rate;\n    tax+=t;\n    details.push({lo,hi:Math.min(income,hi),rate,taxable,tax:t,cumTax:tax});\n  }\n  // 復興特別所得税 2.1%\n  const finalTax=tax*1.021;\n  return{tax:finalTax,details};\n}\n\nfunction calcTB(){\n  const grossIncome=parseFloat(document.getElementById('tbIncome').value)||0;\n  const status=getStatus();\n  const useDeduction=document.getElementById('tbDeduction').checked;\n  const deduction=useDeduction?(BASE_DED+EXTRA_DED[status]):0;\n  const taxableIncome=Math.max(0,grossIncome-deduction);\n\n  document.getElementById('tbDeductionAmt').textContent='\\uff08'+deduction.toLocaleString('ja-JP')+'\\u5186\\uff09';\n\n  ['single','mfj','mfs','hoh'].forEach(s=\u003e{\n    document.getElementById('lbl-'+s).style.borderColor=s===status?'#dc2626':'#e2e8f0';\n    document.getElementById('lbl-'+s).style.background=s===status?'#fef2f2':'white';\n  });\n\n  const{tax,details}=computeTax(taxableIncome,status);\n  const marginalRate=details.length\u003e0?details[details.length-1].rate:0;\n  const effectiveRate=grossIncome\u003e0?(tax/grossIncome)*100:0;\n  const afterTax=grossIncome-tax;\n\n  document.getElementById('tbBracket').textContent=Math.round(marginalRate*100)+'%';\n  document.getElementById('tbEffective').textContent=effectiveRate.toFixed(1)+'%';\n  document.getElementById('tbTotal').textContent='\\u00a5'+Math.round(tax).toLocaleString('ja-JP');\n  document.getElementById('tbAfterTax').textContent='\\u00a5'+Math.round(afterTax).toLocaleString('ja-JP');\n  document.getElementById('tbMonthly').textContent='\\u00a5'+Math.round(afterTax/12).toLocaleString('ja-JP');\n\n  let barHTML='';let legendHTML='';\n  if(taxableIncome\u003e0){\n    details.forEach((d,i)=\u003e{\n      const pct=(d.taxable/taxableIncome)*100;\n      if(pct\u003e0){\n        barHTML+='\u003cdiv style=\"width:'+pct+'%;background:'+COLORS[i%COLORS.length]+';height:100%;\" title=\"'+Math.round(d.rate*100)+'%: \\u00a5'+d.taxable.toLocaleString('ja-JP')+'\"\u003e\u003c/div\u003e';\n        legendHTML+='\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:'+COLORS[i%COLORS.length]+';border-radius:2px;\"\u003e\u003c/span\u003e '+Math.round(d.rate*100)+'%\u003c/span\u003e';\n      }\n    });\n  }\n  document.getElementById('tbBar').innerHTML=barHTML;\n  document.getElementById('tbLegend').innerHTML=legendHTML;\n\n  const allBrackets=BRACKETS[status];\n  let tbody='';let cumTax=0;\n  allBrackets.forEach((b,i)=\u003e{\n    const[lo,hi,rate,ded]=b;\n    const taxable=taxableIncome\u003elo?Math.min(taxableIncome,hi)-lo:0;\n    const t=taxable*rate*1.021;\n    cumTax+=t;\n    const active=taxableIncome\u003elo;\n    const current=taxableIncome\u003elo\u0026\u0026(hi===Infinity||taxableIncome\u003c=hi);\n    const bg=current?'#fef2f2':i%2===0?'#f8fafc':'white';\n    const hiStr=hi===Infinity?'\\u8d85':''+hi.toLocaleString('ja-JP')+'\\u5186';\n    const arrow=current?' \\u2190':'';\n    tbody+='\u003ctr style=\"background:'+bg+';'+(current?'font-weight:bold;':'')+'\"\u003e';\n    tbody+='\u003ctd style=\"padding:8px;\"\u003e'+Math.round(rate*100)+'%'+arrow+'\u003c/td\u003e';\n    tbody+='\u003ctd style=\"padding:8px;text-align:right;\"\u003e\\u00a5'+lo.toLocaleString('ja-JP')+' \\uff5e '+hiStr+'\u003c/td\u003e';\n    tbody+='\u003ctd style=\"padding:8px;text-align:right;'+(active?'':'color:#94a3b8;')+'\"\u003e\\u00a5'+Math.round(t).toLocaleString('ja-JP')+'\u003c/td\u003e';\n    tbody+='\u003ctd style=\"padding:8px;text-align:right;'+(active?'':'color:#94a3b8;')+'\"\u003e\\u00a5'+Math.round(cumTax).toLocaleString('ja-JP')+'\u003c/td\u003e';\n    tbody+='\u003c/tr\u003e';\n  });\n  document.getElementById('tbTableBody').innerHTML=tbody;\n\n  const changes=[500000,1000000,2000000];\n  let sHTML='';\n  changes.forEach(c=\u003e{\n    const newGross=grossIncome+c;\n    const newTaxable=Math.max(0,newGross-deduction);\n    const r=computeTax(newTaxable,status);\n    const diff=r.tax-tax;\n    const newEff=newGross\u003e0?(r.tax/newGross)*100:0;\n    sHTML+='\u003cdiv style=\"display:flex;justify-content:space-between;align-items:center;padding:12px;background:white;border-radius:8px;border:1px solid #e2e8f0;\"\u003e';\n    sHTML+='\u003cdiv\u003e\u003cstrong\u003e\\u00a5'+newGross.toLocaleString('ja-JP')+'\u003c/strong\u003e \u003cspan style=\"color:#64748b;font-size:13px;\"\u003e(+\\u00a5'+c.toLocaleString('ja-JP')+')\u003c/span\u003e\u003c/div\u003e';\n    sHTML+='\u003cdiv style=\"text-align:right;font-size:14px;\"\u003e\\u7a0e\\u984d: \\u00a5'+Math.round(r.tax).toLocaleString('ja-JP')+' \u003cspan style=\"color:#dc2626;\"\u003e(+\\u00a5'+Math.round(diff).toLocaleString('ja-JP')+')\u003c/span\u003e | \\u5b9f\\u52b9: '+newEff.toFixed(1)+'%\u003c/div\u003e';\n    sHTML+='\u003c/div\u003e';\n  });\n  document.getElementById('tbScenarios').innerHTML=sHTML;\n}\n\ncalcTB();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"日本の所得税の仕組み\"\u003e日本の所得税の仕組み\u003c/h2\u003e\n\u003cp\u003e日本は\u003cstrong\u003e超過累進課税制度\u003c/strong\u003eを採用しています。所得を段階ごとに分割し、それぞれの部分に異なる税率を適用します。高い税率が適用されるのは\u003cstrong\u003eその段階を超えた部分だけ\u003c/strong\u003eです。\u003c/p\u003e","title":"所得税計算機 2026 | 日本の税率・税額シミュレーター（無料）"},{"content":"text-shadow CSSを即座に生成。複数のシャドウレイヤーを追加し、プリセットから選択、リアルタイムでプレビューしてワンクリックでCSSをコピーできます。\nライブプレビュー テキスト シャドウ テキスト： 文字色： サイズ： 48px 背景： プリセット シャドウレイヤー ＋ レイヤーを追加 生成されたCSS コピー 使い方 レイヤーを追加 — 「レイヤーを追加」をクリックするか、プリセットを選択して即座にシャドウレイヤーを読み込みます。 各レイヤーを調整 — 水平・垂直オフセット、ぼかし半径、カラー、不透明度のスライダーを操作します。 プレビューをカスタマイズ — プレビューテキスト・文字色・フォントサイズ・背景色を変更できます。 CSSをコピー — 「コピー」をクリックして text-shadow ルールをスタイルシートに貼り付けます。 プリセット一覧 プリセット 効果 ネオングロー 同じ色相に拡大するぼかしを重ねた発光エフェクト エンボス 明暗のシャドウで浮き彫り・くぼみ感を表現 レトロ ハードに積み重なるシャドウでヴィンテージ印刷風に ファイア 黄色から深紅へのグラデーションで炎を表現 3D 段差状のソリッドシャドウで立体感を演出 アウトライン 4方向の1pxシャドウでテキストのふち取りを実現 CSS text-shadow の書式 text-shadow: 水平 垂直 ぼかし カラー, /* レイヤー1 */ 水平 垂直 ぼかし カラー; /* レイヤー2 */ 水平オフセット — 正の値で右方向、負の値で左方向 垂直オフセット — 正の値で下方向、負の値で上方向 ぼかし半径 — 大きいほど滑らか（0はシャープなシャドウ） カラー — rgba() も使用可能。透明度を指定してシャドウを重ねるのがコツ 複数のシャドウはカンマで区切り、前から後ろの順で重なります。\nWeb制作の経費管理もかんたんに\nfreee会計なら、デザインツール費用の経費精算もクラウドで一元管理。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n関連ツール ボックスシャドウ ジェネレーター — 要素・カードの box-shadow CSSを生成 テキストグラデーション ジェネレーター — background-clip を使ったテキストグラデーションをライブプレビューで生成 ","permalink":"https://productivity-works.com/ja/tools/text-shadow-generator/","summary":"\u003cp\u003e\u003ccode\u003etext-shadow\u003c/code\u003e CSSを即座に生成。複数のシャドウレイヤーを追加し、プリセットから選択、リアルタイムでプレビューしてワンクリックでCSSをコピーできます。\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv id=\"ts-app\"\u003e\n\u003cstyle\u003e\n#ts-app *,#ts-app *::before,#ts-app *::after{box-sizing:border-box;margin:0;padding:0}\n#ts-app{font-family:-apple-system,BlinkMacSystemFont,'Hiragino Sans','Yu Gothic UI',Roboto,sans-serif;font-size:14px;color:#1e293b;max-width:860px}\n#ts-app h2{font-size:15px;font-weight:700;margin-bottom:10px;color:#0f172a}\n#ts-app .ts-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}\n@media(max-width:640px){#ts-app .ts-grid{grid-template-columns:1fr}}\n#ts-app .ts-panel{background:#f8fafc;border:1.5px solid #e2e8f0;border-radius:10px;padding:16px}\n#ts-app .ts-preview-wrap{background:#1e293b;border-radius:10px;padding:30px 20px;text-align:center;min-height:140px;display:flex;align-items:center;justify-content:center;margin-bottom:16px;overflow:hidden;position:relative}\n#ts-app #ts-preview-text{font-weight:700;white-space:nowrap;transition:text-shadow .15s,color .15s,font-size .15s}\n#ts-app .ts-ctrl-row{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}\n#ts-app .ts-ctrl-row label{min-width:90px;font-size:13px;color:#475569}\n#ts-app input[type=range]{flex:1;min-width:80px;accent-color:#6366f1}\n#ts-app input[type=color]{width:36px;height:28px;border:1.5px solid #cbd5e1;border-radius:5px;cursor:pointer;padding:1px}\n#ts-app input[type=text]{border:1.5px solid #cbd5e1;border-radius:6px;padding:5px 8px;font-size:13px;width:100%;background:#fff}\n#ts-app select{border:1.5px solid #cbd5e1;border-radius:6px;padding:5px 8px;font-size:13px;background:#fff;cursor:pointer}\n#ts-app .ts-val{min-width:36px;text-align:right;font-size:12px;color:#64748b}\n#ts-app .ts-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:7px;font-size:13px;font-weight:600;border:none;cursor:pointer;transition:opacity .15s}\n#ts-app .ts-btn-primary{background:#6366f1;color:#fff}\n#ts-app .ts-btn-primary:hover{opacity:.88}\n#ts-app .ts-btn-sm{padding:5px 11px;font-size:12px;background:#fff;border:1.5px solid #cbd5e1;color:#374151;border-radius:6px}\n#ts-app .ts-btn-sm:hover{background:#f1f5f9}\n#ts-app .ts-btn-danger{background:#fff;border:1.5px solid #fca5a5;color:#dc2626;padding:5px 10px;font-size:12px;border-radius:6px}\n#ts-app .ts-btn-danger:hover{background:#fef2f2}\n#ts-app .ts-layers{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}\n#ts-app .ts-layer-card{background:#fff;border:1.5px solid #e2e8f0;border-radius:8px;padding:12px}\n#ts-app .ts-layer-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}\n#ts-app .ts-layer-title{font-size:13px;font-weight:600;color:#334155}\n#ts-app .ts-presets{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:14px}\n#ts-app .ts-preset-btn{padding:6px 13px;border-radius:20px;border:1.5px solid #cbd5e1;background:#fff;font-size:12px;font-weight:600;cursor:pointer;transition:border-color .15s,background .15s}\n#ts-app .ts-preset-btn:hover{border-color:#6366f1;background:#eef2ff}\n#ts-app .ts-code-wrap{position:relative;background:#0f172a;border-radius:8px;padding:14px 14px 14px 14px;margin-top:4px}\n#ts-app .ts-code{color:#7dd3fc;font-family:'Courier New',monospace;font-size:12.5px;word-break:break-all;white-space:pre-wrap;line-height:1.6}\n#ts-app .ts-copy-btn{position:absolute;top:10px;right:10px;padding:5px 12px;background:#6366f1;color:#fff;border:none;border-radius:6px;font-size:12px;font-weight:600;cursor:pointer}\n#ts-app .ts-copy-btn:hover{background:#4f46e5}\n#ts-app .ts-copy-btn.copied{background:#10b981}\n#ts-app .ts-preview-controls{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;align-items:center}\n#ts-app .ts-preview-controls label{font-size:13px;color:#475569}\n#ts-app .ts-sep{border:none;border-top:1.5px solid #e2e8f0;margin:14px 0}\n#ts-app .ts-add-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}\n\u003c/style\u003e\n\u003c!-- ライブプレビュー --\u003e\n\u003cdiv class=\"ts-panel\" style=\"margin-bottom:16px\"\u003e\n  \u003ch2\u003eライブプレビュー\u003c/h2\u003e\n  \u003cdiv class=\"ts-preview-wrap\" id=\"ts-preview-bg\"\u003e\n    \u003cspan id=\"ts-preview-text\"\u003eテキスト シャドウ\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ts-preview-controls\"\u003e\n    \u003clabel\u003eテキスト：\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"ts-input-text\" value=\"テキスト シャドウ\" style=\"width:180px\"\u003e\n    \u003clabel\u003e文字色：\u003c/label\u003e\n    \u003cinput type=\"color\" id=\"ts-input-textcolor\" value=\"#ffffff\"\u003e\n    \u003clabel\u003eサイズ：\u003c/label\u003e\n    \u003cinput type=\"range\" id=\"ts-input-fontsize\" min=\"16\" max=\"96\" value=\"48\" style=\"width:100px\"\u003e\n    \u003cspan class=\"ts-val\" id=\"ts-fontsize-val\"\u003e48px\u003c/span\u003e\n    \u003clabel\u003e背景：\u003c/label\u003e\n    \u003cinput type=\"color\" id=\"ts-input-bg\" value=\"#1e293b\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- プリセット --\u003e\n\u003cdiv class=\"ts-panel\" style=\"margin-bottom:16px\"\u003e\n  \u003ch2\u003eプリセット\u003c/h2\u003e\n  \u003cdiv class=\"ts-presets\" id=\"ts-presets\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- レイヤー + CSS出力 --\u003e\n\u003cdiv class=\"ts-grid\"\u003e\n  \u003cdiv class=\"ts-panel\"\u003e\n    \u003ch2\u003eシャドウレイヤー\u003c/h2\u003e\n    \u003cdiv class=\"ts-layers\" id=\"ts-layers\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"ts-add-row\"\u003e\n      \u003cbutton class=\"ts-btn ts-btn-primary\" onclick=\"tsAddLayer()\"\u003e＋ レイヤーを追加\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ts-panel\"\u003e\n    \u003ch2\u003e生成されたCSS\u003c/h2\u003e\n    \u003cdiv class=\"ts-code-wrap\"\u003e\n      \u003cpre class=\"ts-code\" id=\"ts-css-out\"\u003e\u003c/pre\u003e\n      \u003cbutton class=\"ts-copy-btn\" id=\"ts-copy-btn\" onclick=\"tsCopy()\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var layers=[];\n  var lid=0;\n\n  var PRESETS=[\n    {name:\"ネオングロー\",layers:[\n      {h:0,v:0,b:4,c:\"#ff00ff\",a:1},\n      {h:0,v:0,b:16,c:\"#ff00ff\",a:.8},\n      {h:0,v:0,b:32,c:\"#ff00ff\",a:.4}\n    ],bg:\"#0a0a1a\",tc:\"#ff00ff\",fs:48},\n    {name:\"エンボス\",layers:[\n      {h:-2,v:-2,b:4,c:\"#ffffff\",a:.9},\n      {h:2,v:2,b:4,c:\"#000000\",a:.4}\n    ],bg:\"#c0c8d8\",tc:\"#c0c8d8\",fs:48},\n    {name:\"レトロ\",layers:[\n      {h:3,v:3,b:0,c:\"#f97316\",a:1},\n      {h:6,v:6,b:0,c:\"#ef4444\",a:1}\n    ],bg:\"#fef9c3\",tc:\"#1e293b\",fs:48},\n    {name:\"ファイア\",layers:[\n      {h:0,v:-4,b:8,c:\"#fbbf24\",a:1},\n      {h:0,v:-8,b:16,c:\"#f97316\",a:.9},\n      {h:0,v:-16,b:24,c:\"#ef4444\",a:.6},\n      {h:0,v:-24,b:32,c:\"#dc2626\",a:.3}\n    ],bg:\"#18181b\",tc:\"#fef9c3\",fs:48},\n    {name:\"3D\",layers:[\n      {h:1,v:1,b:0,c:\"#475569\",a:1},\n      {h:2,v:2,b:0,c:\"#64748b\",a:1},\n      {h:3,v:3,b:0,c:\"#94a3b8\",a:1},\n      {h:4,v:4,b:0,c:\"#cbd5e1\",a:1}\n    ],bg:\"#1e293b\",tc:\"#f8fafc\",fs:48},\n    {name:\"アウトライン\",layers:[\n      {h:1,v:0,b:0,c:\"#000000\",a:1},\n      {h:-1,v:0,b:0,c:\"#000000\",a:1},\n      {h:0,v:1,b:0,c:\"#000000\",a:1},\n      {h:0,v:-1,b:0,c:\"#000000\",a:1}\n    ],bg:\"#f8fafc\",tc:\"#6366f1\",fs:48}\n  ];\n\n  function hexToRgba(hex,a){\n    var r=parseInt(hex.slice(1,3),16),g=parseInt(hex.slice(3,5),16),b=parseInt(hex.slice(5,7),16);\n    return a\u003c1?'rgba('+r+','+g+','+b+','+a+')':'rgb('+r+','+g+','+b+')';\n  }\n\n  function makeCss(){\n    if(!layers.length)return'text-shadow: none;';\n    var parts=layers.map(function(l){\n      return l.h+'px '+l.v+'px '+l.b+'px '+hexToRgba(l.c,l.a);\n    });\n    return'text-shadow:\\n  '+parts.join(',\\n  ')+';';\n  }\n\n  function applyPreview(){\n    var text=document.getElementById('ts-input-text').value||'テキスト シャドウ';\n    var tc=document.getElementById('ts-input-textcolor').value;\n    var fs=document.getElementById('ts-input-fontsize').value;\n    var bg=document.getElementById('ts-input-bg').value;\n    document.getElementById('ts-fontsize-val').textContent=fs+'px';\n    var el=document.getElementById('ts-preview-text');\n    el.textContent=text;\n    el.style.color=tc;\n    el.style.fontSize=fs+'px';\n    el.style.textShadow=layers.map(function(l){\n      return l.h+'px '+l.v+'px '+l.b+'px '+hexToRgba(l.c,l.a);\n    }).join(', ')||'none';\n    document.getElementById('ts-preview-bg').style.background=bg;\n    document.getElementById('ts-css-out').textContent=makeCss();\n  }\n\n  function renderLayers(){\n    var cont=document.getElementById('ts-layers');\n    cont.innerHTML='';\n    if(!layers.length){\n      cont.innerHTML='\u003cp style=\"color:#94a3b8;font-size:13px;text-align:center;padding:16px 0;\"\u003eレイヤーがありません。追加またはプリセットを選択してください。\u003c/p\u003e","title":"CSSテキストシャドウ ジェネレーター"},{"content":" JSON・JavaScript/TypeScript・Python・Java・C#・SQL・HTML・XML・CSV・正規表現の10モードに対応した文字列エスケープ/アンエスケープツールです。テキストを貼り付け、モードを選んでエスケープボタンを押すだけ。アンエスケープも同様に1クリックで完了します。データはブラウザ外に送信されません。 言語 / コンテキストを選択 一括モード（各行を個別にエスケープ/アンエスケープ） 入力 出力 エスケープ アンエスケープ 出力をコピー クリア エスケープシーケンス 早見表 使い方 モードを選ぶ — 対象の言語・フォーマットをボタンで選択します。 入力に貼り付ける — エスケープしたい生の文字列（またはアンエスケープしたいエスケープ済み文字列）を貼り付けます。 エスケープ / アンエスケープ — 目的のボタンをクリックすると右側に結果が即時表示されます。 一括モード — チェックを入れると、入力の各行を独立してエスケープ/アンエスケープします。文字列リストの一括処理に便利です。 出力をコピー — ワンクリックで結果をクリップボードにコピーします。 各モードの処理内容 JSON — \"・\\・/・制御文字・ユニコード（\\uXXXX）をRFC 8259準拠でエスケープ JavaScript / TypeScript — シングル・ダブルクォート・バッククォート・\\n \\t \\r \\0・ユニコード Python — シングル・ダブルクォート・\\n \\t \\r \\\\ \\0・16進エスケープ Java / C# — Cスタイルエスケープ + ユニコード \\uXXXX SQL — シングルクォートの二重化（ANSI SQL標準） HTML — 名前付きエンティティ：\u0026amp;amp; \u0026amp;lt; \u0026amp;gt; \u0026amp;quot; \u0026amp;#39; XML — XML仕様に準拠した5つの定義済みエンティティ CSV — RFC 4180に基づくフィールドクォーティング・埋め込みクォートの二重化 正規表現 — . * + ? ^ $ { } [ ] | ( ) \\ などすべてのメタ文字をエスケープ 関連ツール JSONフォーマッター HTMLエンティティエンコーダー URLエンコーダー freeeで会計・経費管理をもっとスマートに 開発者・フリーランスの方も、freeeなら請求書発行・経費精算・確定申告をまとめて自動化できます。\n面倒な帳簿作業から解放されて、本業に集中しましょう。 freeeを無料で試す \u0026rarr; 関連ツール Case Converter → Case Converterツール Character Counter → Character Counterツール Regex Cheatsheet → Regex Cheatsheetツール ","permalink":"https://productivity-works.com/ja/tools/string-escape-tool/","summary":"\u003cdiv id=\"esc-app\"\u003e\n\u003cstyle\u003e\n#esc-app *,\n#esc-app *::before,\n#esc-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#esc-app {\n  font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  font-size: 15px;\n  color: #1a1a2e;\n  max-width: 860px;\n  margin: 0 auto;\n  padding: 0 8px 48px;\n}\n\n#esc-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin-bottom: 12px;\n  color: #1a1a2e;\n}\n\n#esc-app .esc-intro {\n  background: #f0f4ff;\n  border-left: 4px solid #3b6ef8;\n  border-radius: 4px;\n  padding: 14px 16px;\n  margin-bottom: 24px;\n  font-size: 0.93rem;\n  color: #333;\n  line-height: 1.75;\n}\n\n/* モード選択 */\n#esc-app .esc-mode-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 20px;\n}\n\n#esc-app .esc-mode-btn {\n  padding: 6px 14px;\n  border-radius: 20px;\n  border: 2px solid #d0d5e8;\n  background: #fff;\n  color: #555;\n  font-size: 0.85rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: border-color 0.15s, background 0.15s, color 0.15s;\n  white-space: nowrap;\n}\n\n#esc-app .esc-mode-btn:hover {\n  border-color: #3b6ef8;\n  color: #3b6ef8;\n}\n\n#esc-app .esc-mode-btn.active {\n  background: #3b6ef8;\n  border-color: #3b6ef8;\n  color: #fff;\n}\n\n/* オプション行 */\n#esc-app .esc-options-row {\n  display: flex;\n  align-items: center;\n  gap: 20px;\n  margin-bottom: 16px;\n  flex-wrap: wrap;\n}\n\n#esc-app .esc-toggle-label {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  cursor: pointer;\n  font-size: 0.88rem;\n  color: #444;\n  user-select: none;\n}\n\n#esc-app .esc-toggle-label input[type=\"checkbox\"] {\n  width: 16px;\n  height: 16px;\n  accent-color: #3b6ef8;\n  cursor: pointer;\n}\n\n#esc-app .esc-mode-desc {\n  font-size: 0.82rem;\n  color: #777;\n  font-style: italic;\n}\n\n/* テキストエリア */\n#esc-app .esc-panels {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 16px;\n}\n\n@media (max-width: 600px) {\n  #esc-app .esc-panels {\n    grid-template-columns: 1fr;\n  }\n}\n\n#esc-app .esc-panel {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n\n#esc-app .esc-panel-label {\n  font-size: 0.82rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: #555;\n}\n\n#esc-app .esc-textarea {\n  width: 100%;\n  min-height: 200px;\n  padding: 12px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.88rem;\n  line-height: 1.6;\n  border: 2px solid #d0d5e8;\n  border-radius: 8px;\n  background: #fafbff;\n  color: #1a1a2e;\n  resize: vertical;\n  transition: border-color 0.15s;\n  outline: none;\n}\n\n#esc-app .esc-textarea:focus {\n  border-color: #3b6ef8;\n  background: #fff;\n}\n\n#esc-app .esc-textarea.output {\n  background: #f4f7ff;\n  color: #1a3a6e;\n}\n\n/* ボタン */\n#esc-app .esc-action-row {\n  display: flex;\n  gap: 10px;\n  margin-bottom: 8px;\n  flex-wrap: wrap;\n  align-items: center;\n}\n\n#esc-app .esc-btn {\n  padding: 10px 24px;\n  border-radius: 8px;\n  border: none;\n  font-size: 0.9rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n  letter-spacing: 0.02em;\n  font-family: inherit;\n}\n\n#esc-app .esc-btn:active {\n  transform: scale(0.97);\n}\n\n#esc-app .esc-btn-escape {\n  background: #3b6ef8;\n  color: #fff;\n}\n\n#esc-app .esc-btn-escape:hover {\n  background: #2550d0;\n}\n\n#esc-app .esc-btn-unescape {\n  background: #12b886;\n  color: #fff;\n}\n\n#esc-app .esc-btn-unescape:hover {\n  background: #0a9a70;\n}\n\n#esc-app .esc-btn-copy {\n  background: #f0f4ff;\n  color: #3b6ef8;\n  border: 2px solid #3b6ef8;\n  padding: 8px 18px;\n}\n\n#esc-app .esc-btn-copy:hover {\n  background: #3b6ef8;\n  color: #fff;\n}\n\n#esc-app .esc-btn-clear {\n  background: #fff;\n  color: #999;\n  border: 2px solid #d0d5e8;\n  padding: 8px 14px;\n  font-size: 0.82rem;\n}\n\n#esc-app .esc-btn-clear:hover {\n  border-color: #e05c5c;\n  color: #e05c5c;\n}\n\n/* ステータス */\n#esc-app .esc-status {\n  font-size: 0.82rem;\n  color: #12b886;\n  font-weight: 600;\n  min-height: 18px;\n  transition: opacity 0.3s;\n}\n\n#esc-app .esc-status.error {\n  color: #e05c5c;\n}\n\n/* 参照テーブル */\n#esc-app .esc-ref {\n  margin-top: 32px;\n  background: #fafbff;\n  border: 1px solid #d0d5e8;\n  border-radius: 10px;\n  padding: 20px;\n}\n\n#esc-app .esc-ref h3 {\n  font-size: 0.95rem;\n  font-weight: 700;\n  margin-bottom: 14px;\n  color: #1a1a2e;\n}\n\n#esc-app .esc-ref-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n  gap: 8px;\n}\n\n#esc-app .esc-ref-item {\n  background: #fff;\n  border: 1px solid #e0e5f0;\n  border-radius: 6px;\n  padding: 8px 12px;\n  font-size: 0.82rem;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 8px;\n}\n\n#esc-app .esc-ref-item code {\n  font-family: monospace;\n  background: #f0f4ff;\n  padding: 1px 5px;\n  border-radius: 3px;\n  color: #3b6ef8;\n  font-size: 0.88em;\n  white-space: nowrap;\n}\n\n#esc-app .esc-ref-item span {\n  color: #777;\n}\n\n/* 使い方 */\n#esc-app .esc-howto {\n  margin-top: 28px;\n}\n\n#esc-app .esc-howto h3 {\n  font-size: 1rem;\n  font-weight: 700;\n  margin-bottom: 10px;\n}\n\n#esc-app .esc-howto ul {\n  padding-left: 20px;\n  line-height: 1.9;\n  color: #444;\n  font-size: 0.92rem;\n}\n\n/* 関連リンク */\n#esc-app .esc-related {\n  margin-top: 32px;\n  padding-top: 20px;\n  border-top: 1px solid #e0e5f0;\n}\n\n#esc-app .esc-related h3 {\n  font-size: 0.88rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  color: #777;\n  margin-bottom: 10px;\n}\n\n#esc-app .esc-related-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n}\n\n#esc-app .esc-related-links a {\n  display: inline-block;\n  padding: 7px 16px;\n  border-radius: 20px;\n  border: 2px solid #3b6ef8;\n  color: #3b6ef8;\n  font-size: 0.85rem;\n  font-weight: 600;\n  text-decoration: none;\n  transition: background 0.15s, color 0.15s;\n}\n\n#esc-app .esc-related-links a:hover {\n  background: #3b6ef8;\n  color: #fff;\n}\n\n/* freee CTA */\n#esc-app .esc-cta-freee {\n  margin-top: 36px;\n  background: linear-gradient(135deg, #003087 0%, #0051cc 100%);\n  border-radius: 12px;\n  padding: 24px 28px;\n  color: #fff;\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n\n#esc-app .esc-cta-freee h3 {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #fff;\n  margin: 0;\n}\n\n#esc-app .esc-cta-freee p {\n  font-size: 0.88rem;\n  line-height: 1.7;\n  color: #cce0ff;\n  margin: 0;\n}\n\n#esc-app .esc-cta-freee a.esc-cta-btn {\n  display: inline-block;\n  align-self: flex-start;\n  background: #fff;\n  color: #003087;\n  font-weight: 700;\n  font-size: 0.88rem;\n  padding: 10px 22px;\n  border-radius: 8px;\n  text-decoration: none;\n  transition: background 0.15s, color 0.15s;\n}\n\n#esc-app .esc-cta-freee a.esc-cta-btn:hover {\n  background: #e6f0ff;\n}\n\n@media (max-width: 480px) {\n  #esc-app .esc-cta-freee {\n    padding: 18px 16px;\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"esc-intro\"\u003e\n  JSON・JavaScript/TypeScript・Python・Java・C#・SQL・HTML・XML・CSV・正規表現の10モードに対応した文字列エスケープ/アンエスケープツールです。テキストを貼り付け、モードを選んで\u003cstrong\u003eエスケープ\u003c/strong\u003eボタンを押すだけ。アンエスケープも同様に1クリックで完了します。データはブラウザ外に送信されません。\n\u003c/div\u003e\n\u003ch2\u003e言語 / コンテキストを選択\u003c/h2\u003e\n\u003cdiv class=\"esc-mode-row\" id=\"escModeRow\"\u003e\u003c/div\u003e\n\u003cdiv class=\"esc-options-row\"\u003e\n  \u003clabel class=\"esc-toggle-label\"\u003e\n    \u003cinput type=\"checkbox\" id=\"escBulkMode\"\u003e\n    一括モード（各行を個別にエスケープ/アンエスケープ）\n  \u003c/label\u003e\n  \u003cspan class=\"esc-mode-desc\" id=\"escModeDesc\"\u003e\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv class=\"esc-panels\"\u003e\n  \u003cdiv class=\"esc-panel\"\u003e\n    \u003cdiv class=\"esc-panel-label\"\u003e入力\u003c/div\u003e\n    \u003ctextarea class=\"esc-textarea\" id=\"escInput\" placeholder=\"ここに文字列を貼り付けてください…\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"esc-panel\"\u003e\n    \u003cdiv class=\"esc-panel-label\"\u003e出力\u003c/div\u003e\n    \u003ctextarea class=\"esc-textarea output\" id=\"escOutput\" placeholder=\"結果がここに表示されます…\" readonly spellcheck=\"false\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"esc-action-row\"\u003e\n  \u003cbutton class=\"esc-btn esc-btn-escape\" id=\"escEscapeBtn\"\u003eエスケープ\u003c/button\u003e\n  \u003cbutton class=\"esc-btn esc-btn-unescape\" id=\"escUnescapeBtn\"\u003eアンエスケープ\u003c/button\u003e\n  \u003cbutton class=\"esc-btn esc-btn-copy\" id=\"escCopyBtn\"\u003e出力をコピー\u003c/button\u003e\n  \u003cbutton class=\"esc-btn esc-btn-clear\" id=\"escClearBtn\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"esc-status\" id=\"escStatus\"\u003e\u003c/div\u003e\n\u003cdiv class=\"esc-ref\"\u003e\n  \u003ch3\u003eエスケープシーケンス 早見表\u003c/h3\u003e\n  \u003cdiv class=\"esc-ref-grid\" id=\"escRefGrid\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"esc-howto\"\u003e\n  \u003ch3\u003e使い方\u003c/h3\u003e\n  \u003cul\u003e\n    \u003cli\u003e\u003cstrong\u003eモードを選ぶ\u003c/strong\u003e — 対象の言語・フォーマットをボタンで選択します。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e入力に貼り付ける\u003c/strong\u003e — エスケープしたい生の文字列（またはアンエスケープしたいエスケープ済み文字列）を貼り付けます。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003eエスケープ / アンエスケープ\u003c/strong\u003e — 目的のボタンをクリックすると右側に結果が即時表示されます。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e一括モード\u003c/strong\u003e — チェックを入れると、入力の各行を独立してエスケープ/アンエスケープします。文字列リストの一括処理に便利です。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e出力をコピー\u003c/strong\u003e — ワンクリックで結果をクリップボードにコピーします。\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"esc-howto\" style=\"margin-top:20px;\"\u003e\n  \u003ch3\u003e各モードの処理内容\u003c/h3\u003e\n  \u003cul\u003e\n    \u003cli\u003e\u003cstrong\u003eJSON\u003c/strong\u003e — \u003ccode\u003e\"\u003c/code\u003e・\u003ccode\u003e\\\u003c/code\u003e・\u003ccode\u003e/\u003c/code\u003e・制御文字・ユニコード（\u003ccode\u003e\\uXXXX\u003c/code\u003e）をRFC 8259準拠でエスケープ\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003eJavaScript / TypeScript\u003c/strong\u003e — シングル・ダブルクォート・バッククォート・\u003ccode\u003e\\n \\t \\r \\0\u003c/code\u003e・ユニコード\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003ePython\u003c/strong\u003e — シングル・ダブルクォート・\u003ccode\u003e\\n \\t \\r \\\\ \\0\u003c/code\u003e・16進エスケープ\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003eJava / C#\u003c/strong\u003e — Cスタイルエスケープ + ユニコード \u003ccode\u003e\\uXXXX\u003c/code\u003e\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003eSQL\u003c/strong\u003e — シングルクォートの二重化（ANSI SQL標準）\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003eHTML\u003c/strong\u003e — 名前付きエンティティ：\u003ccode\u003e\u0026amp;amp; \u0026amp;lt; \u0026amp;gt; \u0026amp;quot; \u0026amp;#39;\u003c/code\u003e\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003eXML\u003c/strong\u003e — XML仕様に準拠した5つの定義済みエンティティ\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003eCSV\u003c/strong\u003e — RFC 4180に基づくフィールドクォーティング・埋め込みクォートの二重化\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e正規表現\u003c/strong\u003e — \u003ccode\u003e. * + ? ^ $ { } [ ] | ( ) \\\u003c/code\u003e などすべてのメタ文字をエスケープ\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"esc-related\"\u003e\n  \u003ch3\u003e関連ツール\u003c/h3\u003e\n  \u003cdiv class=\"esc-related-links\"\u003e\n    \u003ca href=\"/ja/tools/json-formatter/\"\u003eJSONフォーマッター\u003c/a\u003e\n    \u003ca href=\"/ja/tools/html-entity-encoder/\"\u003eHTMLエンティティエンコーダー\u003c/a\u003e\n    \u003ca href=\"/ja/tools/url-encoder/\"\u003eURLエンコーダー\u003c/a\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"esc-cta-freee\"\u003e\n  \u003ch3\u003efreeeで会計・経費管理をもっとスマートに\u003c/h3\u003e\n  \u003cp\u003e\n    開発者・フリーランスの方も、freeeなら請求書発行・経費精算・確定申告をまとめて自動化できます。\u003cbr\u003e\n    面倒な帳簿作業から解放されて、本業に集中しましょう。\n  \u003c/p\u003e","title":"文字列エスケープツール — マルチ言語エスケーパー"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n副業の税金計算シミュレーター【2026年版】 本業の年収と副業の収入・経費を入力するだけで、追加で支払う税金と確定申告の要否を自動判定します。\n本業の年収（額面・万円） 200万円500万円1,500万円 副業の年間収入（万円） 0万円100万円500万円 副業の年間経費（万円） 0万円20万円200万円 確定申告が必要です 副業にかかる追加税額（概算） 162,000円 副業の手取り: 638,000円 副業所得（収入-経費） 800,000円 適用される税率 所得税20%+住民税10% 追加所得税 82,000円 追加住民税 80,000円 計算条件: 会社員（給与所得者）、青色申告なし（雑所得扱い）の概算値。青色申告を適用すると最大65万円の追加控除が受けられます。実際の税額は個人の控除状況により異なります。 副業の税金を減らす方法 1. 経費を漏れなく計上する 副業に関連する支出はすべて経費にできます。\n経費項目 具体例 通信費 インターネット代（副業割合で按分） PC・機材 パソコン、カメラ、ソフトウェア 書籍・研修 専門書、オンライン講座 交通費 打ち合わせの交通費 家賃按分 自宅作業スペース分 2. 青色申告で65万円控除 開業届を出して青色申告にすれば、最大65万円の追加控除が受けられます。副業所得100万円の場合、約13万円の節税効果です。\n会計ソフトを使えば複式簿記も自動化できます → freeeで無料トライアル開始 3. iDeCoで節税 iDeCoの掛金は全額所得控除。副業で増えた税負担をiDeCoで相殺できます → iDeCoおすすめ証券会社 よくある質問 Q. 副業所得20万円以下なら本当に申告不要ですか？ 所得税は不要ですが、住民税の申告が別途必要な場合があります。お住まいの市区町村に確認してください。\nQ. 会社にバレない方法はありますか？ 確定申告書で住民税を「自分で納付（普通徴収）」にすれば、会社の給与から天引きされません → 副業がバレない方法 Q. 副業の種類で税金は変わりますか？ 雑所得（アフィリエイト・ライティング等）と事業所得（開業届あり）で控除額が異なります。継続的な副業なら開業届を出して事業所得にするのが有利です。\n関連ツール・記事 手取り計算シミュレーター — 本業の手取りを計算 つみたてNISAシミュレーター — 副業収入を投資に回した場合の試算 家計簿シミュレーター — 理想の支出配分を計算 副業の確定申告やり方 フリーランス確定申告ガイド 関連記事 FX確定申告に必要な書類一覧と取得方法｜初心者向け完全手順 FX利益20万円超えたら確定申告が必要？サラリーマン向けに税額を実計算 FXのスワップポイントに税金はかかる？計算方法と確定申告の注意点 ","permalink":"https://productivity-works.com/ja/tools/fukugyou-tax-calculator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"副業の税金計算シミュレーター2026年版\"\u003e副業の税金計算シミュレーター【2026年版】\u003c/h1\u003e\n\u003cp\u003e本業の年収と副業の収入・経費を入力するだけで、\u003cstrong\u003e追加で支払う税金\u003c/strong\u003eと\u003cstrong\u003e確定申告の要否\u003c/strong\u003eを自動判定します。\u003c/p\u003e\n\u003cdiv id=\"tax-calc\" style=\"max-width:640px;margin:0 auto;padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e本業の年収（額面・万円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"mainIncome\" min=\"200\" max=\"1500\" step=\"10\" value=\"500\" oninput=\"calcSideTax()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e200万円\u003c/span\u003e\u003cspan id=\"mainIncomeVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e500万円\u003c/span\u003e\u003cspan\u003e1,500万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e副業の年間収入（万円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"sideRevenue\" min=\"0\" max=\"500\" step=\"5\" value=\"100\" oninput=\"calcSideTax()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0万円\u003c/span\u003e\u003cspan id=\"sideRevenueVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e100万円\u003c/span\u003e\u003cspan\u003e500万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:24px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e副業の年間経費（万円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"sideExpense\" min=\"0\" max=\"200\" step=\"5\" value=\"20\" oninput=\"calcSideTax()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0万円\u003c/span\u003e\u003cspan id=\"sideExpenseVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e20万円\u003c/span\u003e\u003cspan\u003e200万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"filingAlert\" style=\"background:#dc2626;color:white;border-radius:8px;padding:16px;text-align:center;margin-bottom:16px;font-weight:bold;font-size:18px;\"\u003e\n確定申告が必要です\n\u003c/div\u003e\n\u003cdiv style=\"background:#1e40af;color:white;border-radius:8px;padding:20px;text-align:center;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:14px;margin-bottom:4px;\"\u003e副業にかかる追加税額（概算）\u003c/div\u003e\n\u003cdiv id=\"additionalTax\" style=\"font-size:36px;font-weight:bold;\"\u003e162,000円\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;margin-top:4px;\"\u003e副業の手取り: \u003cspan id=\"sideTedori\" style=\"font-weight:bold;\"\u003e638,000円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px;\"\u003e\n\u003cdiv style=\"background:#e0f2fe;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e副業所得（収入-経費）\u003c/div\u003e\n\u003cdiv id=\"sideIncome\" style=\"font-size:16px;font-weight:bold;color:#0369a1;\"\u003e800,000円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#fee2e2;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e適用される税率\u003c/div\u003e\n\u003cdiv id=\"taxRate\" style=\"font-size:16px;font-weight:bold;color:#dc2626;\"\u003e所得税20%+住民税10%\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"background:#fef3c7;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e追加所得税\u003c/div\u003e\n\u003cdiv id=\"addIncomeTax\" style=\"font-size:16px;font-weight:bold;color:#d97706;\"\u003e82,000円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#fce7f3;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e追加住民税\u003c/div\u003e\n\u003cdiv id=\"addResidentTax\" style=\"font-size:16px;font-weight:bold;color:#be185d;\"\u003e80,000円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f1f5f9;border-radius:8px;padding:12px;font-size:13px;color:#475569;\"\u003e\n\u003cstrong\u003e計算条件:\u003c/strong\u003e 会社員（給与所得者）、青色申告なし（雑所得扱い）の概算値。青色申告を適用すると最大65万円の追加控除が受けられます。実際の税額は個人の控除状況により異なります。\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction calcSideTax(){\n  var mainAnnual=parseInt(document.getElementById('mainIncome').value)*10000;\n  var sideRev=parseInt(document.getElementById('sideRevenue').value)*10000;\n  var sideExp=parseInt(document.getElementById('sideExpense').value)*10000;\n  var sideShotoku=Math.max(sideRev-sideExp,0);\n\n  // 本業の給与所得控除\n  var mainDed;\n  if(mainAnnual\u003c=1625000) mainDed=550000;\n  else if(mainAnnual\u003c=1800000) mainDed=mainAnnual*0.4-100000;\n  else if(mainAnnual\u003c=3600000) mainDed=mainAnnual*0.3+80000;\n  else if(mainAnnual\u003c=6600000) mainDed=mainAnnual*0.2+440000;\n  else if(mainAnnual\u003c=8500000) mainDed=mainAnnual*0.1+1100000;\n  else mainDed=1950000;\n\n  var mainShotoku=mainAnnual-mainDed;\n  var socialIns=Math.floor(mainAnnual*0.147);\n  var basicDed=480000;\n\n  // 本業のみの課税所得\n  var mainTaxable=Math.max(mainShotoku-basicDed-socialIns,0);\n\n  // 本業+副業の課税所得\n  var totalTaxable=Math.max(mainShotoku+sideShotoku-basicDed-socialIns,0);\n\n  // 所得税計算関数\n  function incomeTax(t){\n    var tax;\n    if(t\u003c=1950000) tax=t*0.05;\n    else if(t\u003c=3300000) tax=t*0.1-97500;\n    else if(t\u003c=6950000) tax=t*0.2-427500;\n    else if(t\u003c=9000000) tax=t*0.23-636000;\n    else if(t\u003c=18000000) tax=t*0.33-1536000;\n    else if(t\u003c=40000000) tax=t*0.40-2796000;\n    else tax=t*0.45-4796000;\n    return Math.floor(tax*1.021);\n  }\n\n  var mainTax=incomeTax(mainTaxable);\n  var totalTax=incomeTax(totalTaxable);\n  var addIncomeTax=totalTax-mainTax;\n\n  // 住民税（副業所得×10%）\n  var addResidentTax=Math.floor(sideShotoku*0.1);\n\n  var totalAddTax=addIncomeTax+addResidentTax;\n  var sideTedori=sideShotoku-totalAddTax;\n\n  // 適用税率の表示\n  var marginalRate;\n  if(totalTaxable\u003c=1950000) marginalRate='5%';\n  else if(totalTaxable\u003c=3300000) marginalRate='10%';\n  else if(totalTaxable\u003c=6950000) marginalRate='20%';\n  else if(totalTaxable\u003c=9000000) marginalRate='23%';\n  else if(totalTaxable\u003c=18000000) marginalRate='33%';\n  else marginalRate='40%+';\n\n  // 確定申告判定\n  var needFiling=sideShotoku\u003e200000;\n  var alertEl=document.getElementById('filingAlert');\n  if(sideShotoku===0){\n    alertEl.style.background='#94a3b8';\n    alertEl.textContent='副業所得0円：申告不要';\n  } else if(needFiling){\n    alertEl.style.background='#dc2626';\n    alertEl.textContent='確定申告が必要です（所得20万円超）';\n  } else {\n    alertEl.style.background='#16a34a';\n    alertEl.textContent='確定申告は不要です（所得20万円以下）';\n  }\n\n  document.getElementById('mainIncomeVal').textContent=(mainAnnual/10000).toLocaleString()+'万円';\n  document.getElementById('sideRevenueVal').textContent=(sideRev/10000).toLocaleString()+'万円';\n  document.getElementById('sideExpenseVal').textContent=(sideExp/10000).toLocaleString()+'万円';\n  document.getElementById('additionalTax').textContent=Math.max(totalAddTax,0).toLocaleString()+'円';\n  document.getElementById('sideTedori').textContent=Math.max(sideTedori,0).toLocaleString()+'円';\n  document.getElementById('sideIncome').textContent=sideShotoku.toLocaleString()+'円';\n  document.getElementById('taxRate').textContent='所得税'+marginalRate+'+住民税10%';\n  document.getElementById('addIncomeTax').textContent=Math.max(addIncomeTax,0).toLocaleString()+'円';\n  document.getElementById('addResidentTax').textContent=Math.max(addResidentTax,0).toLocaleString()+'円';\n}\ncalcSideTax();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"副業の税金を減らす方法\"\u003e副業の税金を減らす方法\u003c/h2\u003e\n\u003ch3 id=\"1-経費を漏れなく計上する\"\u003e1. 経費を漏れなく計上する\u003c/h3\u003e\n\u003cp\u003e副業に関連する支出はすべて経費にできます。\u003c/p\u003e","title":"副業の税金計算シミュレーター｜確定申告が必要か自動判定【2026年版】"},{"content":"デザインや配色が色覚特性を持つ方にどう見えるか、8種類のシミュレーションで即確認。Webデザイン・UI・データビジュアライゼーションのアクセシビリティ改善に。\n色を入力 + 色を追加（最大5色） シミュレーション実行 リセット シミュレーション結果 色はVienot/Brettelアルゴリズムによる近似値です。医学的な診断基準ではなく、視覚的な参考としてご利用ください。 アクセシビリティのヒント 色覚特性に配慮したデザインのポイント 色だけで情報を伝えない — ラベル・アイコン・パターンを併用する。 隣接する色のコントラスト比をWCAG AA基準（テキスト4.5:1以上）に保つ。 グラフやUIの主な区別に赤と緑の組み合わせだけを使わない。 データビジュアライゼーションにはOkabe-Ito・IBM Carbonなどのカラーブラインドフレンドリーパレットを使う。 色コードに加えてテクスチャやパターンをグラフに使用する。 色によって表現された情報には代替テキストを提供する。 実際にシミュレーターで確認してからリリースする習慣をつける。 色覚特性の統計 種類 説明 推定割合 デュータノピア (Deuteranopia)緑錐体なし（赤緑型）男性の約1% プロタノピア (Protanopia)赤錐体なし（赤緑型）男性の約1% デュータノマリー (Deuteranomaly)緑錐体がずれ（最多）男性の約5% プロタノマリー (Protanomaly)赤錐体がずれ男性の約1% トリタノピア (Tritanopia)青錐体なし（青黄型）約0.003% トリタノマリー (Tritanomaly)青錐体がずれ約0.01% アクロマトプシア (Achromatopsia)完全色盲約0.003% アクロマトマリー (Achromatomaly)色覚が著しく低下まれ 出典：Colour Blind Awareness。赤緑型はX染色体連鎖のため男性に多く、男性全体の約8%・女性の約0.5%が何らかの色覚特性を持つとされています。\nアクセシブルなWeb制作の経費管理も\nfreee会計なら、デザインツール・制作費用の経費精算もクラウドで一元管理。 freeeを無料で試す → コントラスト比を確認 → カラーコントラストチェッカー 色を変換 → カラーコンバーター パレットを生成 → カラーパレットジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/color-blindness-simulator/","summary":"\u003cp\u003eデザインや配色が色覚特性を持つ方にどう見えるか、8種類のシミュレーションで即確認。Webデザイン・UI・データビジュアライゼーションのアクセシビリティ改善に。\u003c/p\u003e\n\u003cdiv id=\"cb-app\"\u003e\n\u003cstyle\u003e\n#cb-app {\n  font-family: system-ui, -apple-system, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#cb-app * { box-sizing: border-box; }\n\n#cb-app h2 {\n  font-size: 1.15rem;\n  font-weight: 700;\n  margin: 28px 0 12px;\n  color: #0f172a;\n  border-left: 4px solid #6366f1;\n  padding-left: 10px;\n}\n\n#cb-app .cb-input-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  align-items: center;\n  margin-bottom: 18px;\n}\n\n#cb-app .cb-color-entry {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 8px 12px;\n}\n\n#cb-app .cb-color-entry input[type=\"color\"] {\n  width: 40px;\n  height: 36px;\n  border: none;\n  border-radius: 6px;\n  cursor: pointer;\n  padding: 0;\n  background: none;\n}\n\n#cb-app .cb-color-entry input[type=\"text\"] {\n  width: 110px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  padding: 6px 10px;\n  font-size: 0.9rem;\n  font-family: monospace;\n  color: #334155;\n}\n\n#cb-app .cb-color-entry input[type=\"text\"]:focus {\n  outline: none;\n  border-color: #6366f1;\n}\n\n#cb-app .cb-remove-btn {\n  background: none;\n  border: none;\n  color: #94a3b8;\n  cursor: pointer;\n  font-size: 1.1rem;\n  padding: 2px 4px;\n  border-radius: 4px;\n  line-height: 1;\n}\n#cb-app .cb-remove-btn:hover { color: #ef4444; background: #fee2e2; }\n\n#cb-app .cb-btn {\n  padding: 9px 18px;\n  border-radius: 8px;\n  border: none;\n  font-size: 0.9rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n}\n#cb-app .cb-btn:active { transform: scale(0.97); }\n\n#cb-app .cb-btn-primary {\n  background: #6366f1;\n  color: #fff;\n}\n#cb-app .cb-btn-primary:hover { background: #4f46e5; }\n\n#cb-app .cb-btn-secondary {\n  background: #e0e7ff;\n  color: #4338ca;\n}\n#cb-app .cb-btn-secondary:hover { background: #c7d2fe; }\n\n#cb-app .cb-btn-row {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  margin-bottom: 24px;\n}\n\n#cb-app .cb-results-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n  gap: 20px;\n  margin-bottom: 32px;\n}\n\n#cb-app .cb-palette-block {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 14px;\n}\n\n#cb-app .cb-palette-label {\n  font-size: 0.8rem;\n  font-weight: 600;\n  color: #64748b;\n  margin-bottom: 10px;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n\n#cb-app .cb-swatches {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n\n#cb-app .cb-swatch-item {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 4px;\n}\n\n#cb-app .cb-swatch {\n  width: 56px;\n  height: 56px;\n  border-radius: 8px;\n  border: 1px solid rgba(0,0,0,0.1);\n  box-shadow: 0 1px 3px rgba(0,0,0,0.08);\n}\n\n#cb-app .cb-swatch-hex {\n  font-size: 0.7rem;\n  font-family: monospace;\n  color: #475569;\n}\n\n#cb-app .cb-type-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 6px;\n}\n\n#cb-app .cb-type-name {\n  font-size: 0.95rem;\n  font-weight: 700;\n  color: #1e293b;\n}\n\n#cb-app .cb-type-stat {\n  font-size: 0.78rem;\n  color: #64748b;\n  background: #e2e8f0;\n  border-radius: 99px;\n  padding: 2px 8px;\n}\n\n#cb-app .cb-type-desc {\n  font-size: 0.82rem;\n  color: #64748b;\n  margin-bottom: 10px;\n}\n\n#cb-app .cb-tips {\n  background: #f0fdf4;\n  border: 1.5px solid #bbf7d0;\n  border-radius: 10px;\n  padding: 16px 20px;\n  margin-top: 8px;\n}\n\n#cb-app .cb-tips h3 {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #15803d;\n  margin: 0 0 10px;\n}\n\n#cb-app .cb-tips ul {\n  margin: 0;\n  padding-left: 20px;\n  color: #166534;\n  font-size: 0.88rem;\n  line-height: 1.8;\n}\n\n#cb-app .cb-stats-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n  margin-bottom: 12px;\n}\n\n#cb-app .cb-stats-table th {\n  background: #f1f5f9;\n  padding: 8px 12px;\n  text-align: left;\n  font-weight: 600;\n  color: #475569;\n  border-bottom: 2px solid #e2e8f0;\n}\n\n#cb-app .cb-stats-table td {\n  padding: 8px 12px;\n  border-bottom: 1px solid #f1f5f9;\n  color: #334155;\n}\n\n#cb-app .cb-stats-table tr:hover td { background: #f8fafc; }\n\n#cb-app .cb-error {\n  color: #dc2626;\n  font-size: 0.85rem;\n  margin-top: 4px;\n}\n\n#cb-app .cb-notice {\n  background: #fefce8;\n  border: 1.5px solid #fde68a;\n  border-radius: 8px;\n  padding: 10px 14px;\n  font-size: 0.85rem;\n  color: #92400e;\n  margin-bottom: 16px;\n}\n\n@media (max-width: 600px) {\n  #cb-app .cb-results-grid { grid-template-columns: 1fr; }\n  #cb-app .cb-swatch { width: 44px; height: 44px; }\n}\n\u003c/style\u003e\n\u003ch2\u003e色を入力\u003c/h2\u003e\n\u003cdiv id=\"cb-color-list\"\u003e\u003c/div\u003e\n\u003cdiv class=\"cb-btn-row\"\u003e\n  \u003cbutton class=\"cb-btn cb-btn-secondary\" onclick=\"cbAddColor()\"\u003e+ 色を追加（最大5色）\u003c/button\u003e\n  \u003cbutton class=\"cb-btn cb-btn-primary\" onclick=\"cbSimulate()\"\u003eシミュレーション実行\u003c/button\u003e\n  \u003cbutton class=\"cb-btn cb-btn-secondary\" onclick=\"cbReset()\"\u003eリセット\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"cb-error\" class=\"cb-error\" style=\"display:none;\"\u003e\u003c/div\u003e\n\u003ch2\u003eシミュレーション結果\u003c/h2\u003e\n\u003cdiv class=\"cb-notice\"\u003e色はVienot/Brettelアルゴリズムによる近似値です。医学的な診断基準ではなく、視覚的な参考としてご利用ください。\u003c/div\u003e\n\u003cdiv id=\"cb-results\" class=\"cb-results-grid\"\u003e\u003c/div\u003e\n\u003ch2\u003eアクセシビリティのヒント\u003c/h2\u003e\n\u003cdiv class=\"cb-tips\"\u003e\n  \u003ch3\u003e色覚特性に配慮したデザインのポイント\u003c/h3\u003e\n  \u003cul\u003e\n    \u003cli\u003e色だけで情報を伝えない — ラベル・アイコン・パターンを併用する。\u003c/li\u003e\n    \u003cli\u003e隣接する色のコントラスト比をWCAG AA基準（テキスト4.5:1以上）に保つ。\u003c/li\u003e\n    \u003cli\u003eグラフやUIの主な区別に赤と緑の組み合わせだけを使わない。\u003c/li\u003e\n    \u003cli\u003eデータビジュアライゼーションにはOkabe-Ito・IBM Carbonなどのカラーブラインドフレンドリーパレットを使う。\u003c/li\u003e\n    \u003cli\u003e色コードに加えてテクスチャやパターンをグラフに使用する。\u003c/li\u003e\n    \u003cli\u003e色によって表現された情報には代替テキストを提供する。\u003c/li\u003e\n    \u003cli\u003e実際にシミュレーターで確認してからリリースする習慣をつける。\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\u003ch2\u003e色覚特性の統計\u003c/h2\u003e\n\u003ctable class=\"cb-stats-table\"\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003e種類\u003c/th\u003e\n      \u003cth\u003e説明\u003c/th\u003e\n      \u003cth\u003e推定割合\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\u003ctd\u003eデュータノピア (Deuteranopia)\u003c/td\u003e\u003ctd\u003e緑錐体なし（赤緑型）\u003c/td\u003e\u003ctd\u003e男性の約1%\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eプロタノピア (Protanopia)\u003c/td\u003e\u003ctd\u003e赤錐体なし（赤緑型）\u003c/td\u003e\u003ctd\u003e男性の約1%\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eデュータノマリー (Deuteranomaly)\u003c/td\u003e\u003ctd\u003e緑錐体がずれ（最多）\u003c/td\u003e\u003ctd\u003e男性の約5%\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eプロタノマリー (Protanomaly)\u003c/td\u003e\u003ctd\u003e赤錐体がずれ\u003c/td\u003e\u003ctd\u003e男性の約1%\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eトリタノピア (Tritanopia)\u003c/td\u003e\u003ctd\u003e青錐体なし（青黄型）\u003c/td\u003e\u003ctd\u003e約0.003%\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eトリタノマリー (Tritanomaly)\u003c/td\u003e\u003ctd\u003e青錐体がずれ\u003c/td\u003e\u003ctd\u003e約0.01%\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eアクロマトプシア (Achromatopsia)\u003c/td\u003e\u003ctd\u003e完全色盲\u003c/td\u003e\u003ctd\u003e約0.003%\u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd\u003eアクロマトマリー (Achromatomaly)\u003c/td\u003e\u003ctd\u003e色覚が著しく低下\u003c/td\u003e\u003ctd\u003eまれ\u003c/td\u003e\u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp style=\"font-size:0.82rem;color:#64748b;\"\u003e出典：Colour Blind Awareness。赤緑型はX染色体連鎖のため男性に多く、男性全体の約8%・女性の約0.5%が何らかの色覚特性を持つとされています。\u003c/p\u003e","title":"色覚シミュレーター"},{"content":" 変換 ワールドクロック 会議プランナー 日時を変換 日付・時刻 変換元タイムゾーン ⇄ 変換先タイムゾーン 変換後の時刻 — ライブ世界時計 — — — — 複数タイムゾーンを比較 タイムゾーンを追加（最大6件） + 追加 会議プランナー — 業務時間の重複を確認 選択した各タイムゾーンで9時〜17時（業務時間）が重なる時間帯を表示します。まずワールドクロックタブでタイムゾーンを追加してください。\n夜間 昼間（業務時間外） 業務時間 全員の重複時間 海外取引の会計管理にはfreee 海外クライアントとの取引がある方、freeeなら外貨取引も簡単に記帳できます。 freeeを無料で試す\n","permalink":"https://productivity-works.com/ja/tools/timezone-converter/","summary":"\u003cdiv id=\"tz-app\"\u003e\n\u003cstyle\u003e\n  #tz-app {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', Roboto, sans-serif;\n    max-width: 780px;\n    margin: 0 auto;\n    padding: 16px;\n    color: #1e1b4b;\n  }\n\n  #tz-app * { box-sizing: border-box; }\n\n  #tz-app h2 {\n    font-size: 1.1rem;\n    font-weight: 700;\n    color: #4f46e5;\n    margin: 0 0 12px;\n    padding-bottom: 6px;\n    border-bottom: 2px solid #e0e7ff;\n  }\n\n  /* Mode tabs */\n  #tz-app .tz-tabs {\n    display: flex;\n    gap: 8px;\n    margin-bottom: 24px;\n    flex-wrap: wrap;\n  }\n  #tz-app .tz-tab {\n    padding: 8px 20px;\n    border: 2px solid #4f46e5;\n    border-radius: 24px;\n    background: transparent;\n    color: #4f46e5;\n    font-size: 14px;\n    font-weight: 600;\n    cursor: pointer;\n    transition: all 0.2s;\n  }\n  #tz-app .tz-tab.active {\n    background: #4f46e5;\n    color: #fff;\n  }\n  #tz-app .tz-tab:hover:not(.active) {\n    background: #eef2ff;\n  }\n\n  /* Cards */\n  #tz-app .tz-card {\n    background: #fff;\n    border: 1px solid #e0e7ff;\n    border-radius: 12px;\n    padding: 20px;\n    margin-bottom: 20px;\n    box-shadow: 0 1px 4px rgba(79,70,229,0.07);\n  }\n\n  /* Live clock section */\n  #tz-app .tz-live-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 16px;\n    margin-bottom: 12px;\n  }\n  @media (max-width: 500px) {\n    #tz-app .tz-live-grid { grid-template-columns: 1fr; }\n  }\n  #tz-app .tz-clock-box {\n    background: #f5f3ff;\n    border-radius: 10px;\n    padding: 16px;\n    text-align: center;\n  }\n  #tz-app .tz-clock-label {\n    font-size: 12px;\n    font-weight: 600;\n    color: #6d6fae;\n    margin-bottom: 4px;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n  }\n  #tz-app .tz-clock-time {\n    font-size: 2rem;\n    font-weight: 700;\n    color: #4f46e5;\n    font-variant-numeric: tabular-nums;\n    letter-spacing: -0.02em;\n  }\n  #tz-app .tz-clock-date {\n    font-size: 13px;\n    color: #6b7280;\n    margin-top: 2px;\n  }\n\n  /* Select */\n  #tz-app select {\n    width: 100%;\n    padding: 9px 12px;\n    border: 1.5px solid #c7d2fe;\n    border-radius: 8px;\n    font-size: 14px;\n    color: #1e1b4b;\n    background: #fff;\n    cursor: pointer;\n    outline: none;\n    transition: border-color 0.2s;\n    appearance: none;\n    background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%234f46e5' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");\n    background-repeat: no-repeat;\n    background-position: right 10px center;\n    padding-right: 36px;\n  }\n  #tz-app select:focus { border-color: #4f46e5; }\n\n  #tz-app label {\n    display: block;\n    font-size: 12px;\n    font-weight: 600;\n    color: #6d6fae;\n    margin-bottom: 4px;\n    letter-spacing: 0.02em;\n  }\n\n  /* Converter row */\n  #tz-app .tz-conv-row {\n    display: grid;\n    grid-template-columns: 1fr auto 1fr;\n    gap: 12px;\n    align-items: end;\n    margin-bottom: 16px;\n  }\n  @media (max-width: 540px) {\n    #tz-app .tz-conv-row {\n      grid-template-columns: 1fr;\n    }\n    #tz-app .tz-swap-col { text-align: center; }\n  }\n\n  #tz-app .tz-swap-btn {\n    background: #4f46e5;\n    color: #fff;\n    border: none;\n    border-radius: 50%;\n    width: 38px;\n    height: 38px;\n    font-size: 18px;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition: background 0.2s, transform 0.2s;\n    flex-shrink: 0;\n    margin: 0 auto;\n  }\n  #tz-app .tz-swap-btn:hover { background: #4338ca; transform: rotate(180deg); }\n\n  #tz-app input[type=\"datetime-local\"] {\n    width: 100%;\n    padding: 9px 12px;\n    border: 1.5px solid #c7d2fe;\n    border-radius: 8px;\n    font-size: 14px;\n    color: #1e1b4b;\n    outline: none;\n    transition: border-color 0.2s;\n  }\n  #tz-app input[type=\"datetime-local\"]:focus { border-color: #4f46e5; }\n\n  #tz-app .tz-result-box {\n    background: #f5f3ff;\n    border-radius: 10px;\n    padding: 14px 16px;\n    margin-top: 12px;\n    display: flex;\n    align-items: center;\n    gap: 12px;\n  }\n  #tz-app .tz-result-label { font-size: 12px; color: #6d6fae; font-weight: 600; }\n  #tz-app .tz-result-value { font-size: 1.3rem; font-weight: 700; color: #4f46e5; }\n  #tz-app .tz-result-offset { font-size: 12px; color: #9ca3af; margin-top: 2px; }\n\n  /* Multi-timezone comparison */\n  #tz-app .tz-multi-add-row {\n    display: flex;\n    gap: 10px;\n    align-items: flex-end;\n    margin-bottom: 16px;\n    flex-wrap: wrap;\n  }\n  #tz-app .tz-multi-add-row \u003e div { flex: 1; min-width: 200px; }\n  #tz-app .tz-add-btn {\n    background: #4f46e5;\n    color: #fff;\n    border: none;\n    border-radius: 8px;\n    padding: 9px 18px;\n    font-size: 14px;\n    font-weight: 600;\n    cursor: pointer;\n    transition: background 0.2s;\n    white-space: nowrap;\n  }\n  #tz-app .tz-add-btn:hover { background: #4338ca; }\n  #tz-app .tz-add-btn:disabled { background: #c7d2fe; cursor: not-allowed; }\n\n  #tz-app .tz-multi-list {\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n  }\n  #tz-app .tz-multi-item {\n    background: #fff;\n    border: 1.5px solid #e0e7ff;\n    border-radius: 10px;\n    padding: 12px 14px;\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    flex-wrap: wrap;\n  }\n  #tz-app .tz-multi-item.is-day { border-color: #fbbf24; background: #fffbeb; }\n  #tz-app .tz-multi-item.is-night { border-color: #818cf8; background: #f5f3ff; }\n  #tz-app .tz-multi-name { font-weight: 600; font-size: 14px; flex: 1; min-width: 120px; }\n  #tz-app .tz-multi-time { font-size: 1.4rem; font-weight: 700; color: #4f46e5; font-variant-numeric: tabular-nums; }\n  #tz-app .tz-multi-date { font-size: 12px; color: #9ca3af; }\n  #tz-app .tz-multi-badge {\n    font-size: 11px;\n    padding: 2px 8px;\n    border-radius: 12px;\n    font-weight: 600;\n  }\n  #tz-app .badge-day { background: #fef3c7; color: #92400e; }\n  #tz-app .badge-night { background: #e0e7ff; color: #3730a3; }\n  #tz-app .tz-remove-btn {\n    background: none;\n    border: none;\n    color: #9ca3af;\n    font-size: 18px;\n    cursor: pointer;\n    line-height: 1;\n    padding: 0 4px;\n    transition: color 0.2s;\n  }\n  #tz-app .tz-remove-btn:hover { color: #ef4444; }\n\n  /* Timeline bar */\n  #tz-app .tz-timeline {\n    margin-top: 16px;\n  }\n  #tz-app .tz-tl-label {\n    font-size: 11px;\n    color: #9ca3af;\n    margin-bottom: 6px;\n    font-weight: 600;\n  }\n  #tz-app .tz-tl-row {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 6px;\n  }\n  #tz-app .tz-tl-name {\n    font-size: 12px;\n    width: 90px;\n    flex-shrink: 0;\n    color: #4b5563;\n    font-weight: 500;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  #tz-app .tz-tl-bar-wrap {\n    flex: 1;\n    height: 20px;\n    background: #1e1b4b;\n    border-radius: 4px;\n    position: relative;\n    overflow: hidden;\n  }\n  #tz-app .tz-tl-day-seg {\n    position: absolute;\n    top: 0;\n    height: 100%;\n    background: #fbbf24;\n    border-radius: 2px;\n  }\n  #tz-app .tz-tl-now-line {\n    position: absolute;\n    top: 0;\n    height: 100%;\n    width: 2px;\n    background: #ef4444;\n    border-radius: 1px;\n  }\n  #tz-app .tz-tl-hour {\n    font-size: 11px;\n    color: #9ca3af;\n    width: 90px;\n    flex-shrink: 0;\n  }\n  #tz-app .tz-tl-labels {\n    display: flex;\n    flex: 1;\n    justify-content: space-between;\n    font-size: 10px;\n    color: #9ca3af;\n    padding: 0 2px;\n    margin-top: 2px;\n  }\n\n  /* Meeting planner */\n  #tz-app .tz-meeting-grid {\n    overflow-x: auto;\n  }\n  #tz-app .tz-meeting-table {\n    width: 100%;\n    border-collapse: collapse;\n    min-width: 500px;\n  }\n  #tz-app .tz-meeting-table th {\n    font-size: 11px;\n    font-weight: 600;\n    color: #6d6fae;\n    text-align: center;\n    padding: 4px 2px;\n    border-bottom: 1px solid #e0e7ff;\n  }\n  #tz-app .tz-meeting-table td {\n    width: 3.8%;\n    height: 32px;\n    text-align: center;\n    font-size: 10px;\n    border: 1px solid #f3f4f6;\n  }\n  #tz-app .tz-meeting-table .tz-row-label {\n    font-size: 11px;\n    font-weight: 600;\n    color: #4b5563;\n    text-align: left;\n    padding: 4px 8px;\n    white-space: nowrap;\n    width: auto;\n  }\n  #tz-app .cell-night { background: #1e1b4b; }\n  #tz-app .cell-day { background: #fef9c3; }\n  #tz-app .cell-work { background: #6ee7b7; }\n  #tz-app .cell-overlap { background: #4f46e5; }\n  #tz-app .tz-legend {\n    display: flex;\n    gap: 16px;\n    flex-wrap: wrap;\n    margin-top: 12px;\n    font-size: 12px;\n    color: #6b7280;\n  }\n  #tz-app .tz-legend-item { display: flex; align-items: center; gap: 6px; }\n  #tz-app .tz-legend-dot {\n    width: 14px;\n    height: 14px;\n    border-radius: 3px;\n  }\n\n  /* Sections */\n  #tz-app .tz-section { display: none; }\n  #tz-app .tz-section.active { display: block; }\n\n  #tz-app .tz-field { margin-bottom: 14px; }\n\n  /* freee CTA */\n  #tz-app .tz-freee-cta {\n    background: #f0fdf4;\n    border: 1.5px solid #86efac;\n    border-radius: 10px;\n    padding: 16px 20px;\n    margin-top: 24px;\n    font-size: 14px;\n    line-height: 1.7;\n  }\n  #tz-app .tz-freee-cta strong { color: #166534; }\n  #tz-app .tz-freee-cta a {\n    color: #4f46e5;\n    font-weight: 600;\n    text-decoration: underline;\n  }\n\u003c/style\u003e\n\u003c!-- Mode Tabs --\u003e\n\u003cdiv class=\"tz-tabs\"\u003e\n  \u003cbutton class=\"tz-tab active\" onclick=\"tzSetMode('converter')\"\u003e変換\u003c/button\u003e\n  \u003cbutton class=\"tz-tab\" onclick=\"tzSetMode('world-clock')\"\u003eワールドクロック\u003c/button\u003e\n  \u003cbutton class=\"tz-tab\" onclick=\"tzSetMode('meeting')\"\u003e会議プランナー\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- ===== CONVERTER MODE ===== --\u003e\n\u003cdiv id=\"tz-section-converter\" class=\"tz-section active\"\u003e\n  \u003cdiv class=\"tz-card\"\u003e\n    \u003ch2\u003e日時を変換\u003c/h2\u003e\n    \u003cdiv class=\"tz-field\"\u003e\n      \u003clabel\u003e日付・時刻\u003c/label\u003e\n      \u003cinput type=\"datetime-local\" id=\"tz-dt-input\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tz-conv-row\"\u003e\n      \u003cdiv\u003e\n        \u003clabel\u003e変換元タイムゾーン\u003c/label\u003e\n        \u003cselect id=\"tz-from\"\u003e\u003c/select\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"tz-swap-col\"\u003e\n        \u003cbutton class=\"tz-swap-btn\" onclick=\"tzSwap()\" title=\"入れ替え\"\u003e⇄\u003c/button\u003e\n      \u003c/div\u003e\n      \u003cdiv\u003e\n        \u003clabel\u003e変換先タイムゾーン\u003c/label\u003e\n        \u003cselect id=\"tz-to\"\u003e\u003c/select\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tz-result-box\" id=\"tz-conv-result\"\u003e\n      \u003cdiv\u003e\n        \u003cdiv class=\"tz-result-label\"\u003e変換後の時刻\u003c/div\u003e\n        \u003cdiv class=\"tz-result-value\" id=\"tz-conv-value\"\u003e—\u003c/div\u003e\n        \u003cdiv class=\"tz-result-offset\" id=\"tz-conv-offset\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ===== WORLD CLOCK MODE ===== --\u003e\n\u003cdiv id=\"tz-section-world-clock\" class=\"tz-section\"\u003e\n  \u003cdiv class=\"tz-card\"\u003e\n    \u003ch2\u003eライブ世界時計\u003c/h2\u003e\n    \u003cdiv class=\"tz-live-grid\" id=\"tz-live-primary\"\u003e\n      \u003cdiv class=\"tz-clock-box\"\u003e\n        \u003cdiv class=\"tz-clock-label\" id=\"tz-live-from-label\"\u003e—\u003c/div\u003e\n        \u003cdiv class=\"tz-clock-time\" id=\"tz-live-from-time\"\u003e—\u003c/div\u003e\n        \u003cdiv class=\"tz-clock-date\" id=\"tz-live-from-date\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"tz-clock-box\"\u003e\n        \u003cdiv class=\"tz-clock-label\" id=\"tz-live-to-label\"\u003e—\u003c/div\u003e\n        \u003cdiv class=\"tz-clock-time\" id=\"tz-live-to-time\"\u003e—\u003c/div\u003e\n        \u003cdiv class=\"tz-clock-date\" id=\"tz-live-to-date\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"tz-card\"\u003e\n    \u003ch2\u003e複数タイムゾーンを比較\u003c/h2\u003e\n    \u003cdiv class=\"tz-multi-add-row\"\u003e\n      \u003cdiv\u003e\n        \u003clabel\u003eタイムゾーンを追加（最大6件）\u003c/label\u003e\n        \u003cselect id=\"tz-add-select\"\u003e\u003c/select\u003e\n      \u003c/div\u003e\n      \u003cbutton class=\"tz-add-btn\" id=\"tz-add-btn\" onclick=\"tzAddZone()\"\u003e+ 追加\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tz-multi-list\" id=\"tz-multi-list\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"tz-timeline\" id=\"tz-timeline\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ===== MEETING PLANNER MODE ===== --\u003e\n\u003cdiv id=\"tz-section-meeting\" class=\"tz-section\"\u003e\n  \u003cdiv class=\"tz-card\"\u003e\n    \u003ch2\u003e会議プランナー — 業務時間の重複を確認\u003c/h2\u003e\n    \u003cp style=\"font-size:13px;color:#6b7280;margin:0 0 16px;\"\u003e選択した各タイムゾーンで9時〜17時（業務時間）が重なる時間帯を表示します。まずワールドクロックタブでタイムゾーンを追加してください。\u003c/p\u003e","title":"タイムゾーン変換ツール - 無料ワールドクロック・会議時間調整"},{"content":"自分のタイピング速度を計測してみましょう。難易度を選んでテキストを入力するだけで、WPM・正確率・ミス数をリアルタイムで確認できます。会員登録不要、完全無料です。\n\u0026#9000; タイピング速度テスト 難易度： 初級 中級 上級 制限時間： 30秒 60秒 120秒 スタート リセット 60 難易度と制限時間を選んで「スタート」を押すか、入力欄に最初の文字を入力してください。\nWPM 0 正確率 100% 文字数 0 ミス 0 経過時間 0s テスト結果 0 WPM 0% 正確率 0 総文字数 0 ミス数 もう一度挑戦 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → コード行数をカウント → 行数カウンター コードを整形 → コード圧縮ツール テキストの差分を確認 → テキスト差分比較ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 AI英語学習おすすめアプリ2026年版【比較ランキング・無料あり】 AI活用の英語学習法おすすめ5選【2026年版・独学で話せるようになる方法】 ","permalink":"https://productivity-works.com/ja/tools/typing-speed-test/","summary":"\u003cp\u003e自分のタイピング速度を計測してみましょう。難易度を選んでテキストを入力するだけで、WPM・正確率・ミス数をリアルタイムで確認できます。会員登録不要、完全無料です。\u003c/p\u003e\n\u003cdiv id=\"tt-app\"\u003e\n\u003cstyle\u003e\n#tt-app *,\n#tt-app *::before,\n#tt-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#tt-app {\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  max-width: 760px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n\n#tt-app h2 {\n  font-size: 18px;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 16px;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n/* Controls */\n#tt-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  margin-bottom: 18px;\n  align-items: center;\n}\n\n#tt-controls label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  margin-right: 4px;\n}\n\n#tt-controls select {\n  font-size: 13px;\n  padding: 6px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  background: #fff;\n  color: #1e293b;\n  cursor: pointer;\n  outline: none;\n  transition: border-color 0.15s;\n}\n\n#tt-controls select:focus {\n  border-color: #3b82f6;\n}\n\n#tt-btn-start {\n  padding: 7px 20px;\n  font-size: 13px;\n  font-weight: 700;\n  border: none;\n  border-radius: 6px;\n  cursor: pointer;\n  background: #3b82f6;\n  color: #fff;\n  transition: background 0.15s, transform 0.1s;\n}\n\n#tt-btn-start:hover {\n  background: #2563eb;\n}\n\n#tt-btn-start:active {\n  transform: scale(0.97);\n}\n\n#tt-btn-reset {\n  padding: 7px 16px;\n  font-size: 13px;\n  font-weight: 600;\n  border: 1.5px solid #94a3b8;\n  border-radius: 6px;\n  cursor: pointer;\n  background: #fff;\n  color: #475569;\n  transition: background 0.15s, border-color 0.15s;\n}\n\n#tt-btn-reset:hover {\n  background: #f1f5f9;\n  border-color: #64748b;\n}\n\n/* Timer */\n#tt-timer-bar {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 14px;\n}\n\n#tt-timer-display {\n  font-size: 28px;\n  font-weight: 800;\n  color: #0f172a;\n  min-width: 56px;\n  text-align: center;\n  font-variant-numeric: tabular-nums;\n}\n\n#tt-timer-display.tt-warning {\n  color: #ef4444;\n}\n\n#tt-progress-track {\n  flex: 1;\n  height: 6px;\n  background: #e2e8f0;\n  border-radius: 99px;\n  overflow: hidden;\n}\n\n#tt-progress-fill {\n  height: 100%;\n  background: #3b82f6;\n  border-radius: 99px;\n  transition: width 0.5s linear, background 0.3s;\n  width: 100%;\n}\n\n#tt-progress-fill.tt-warning {\n  background: #ef4444;\n}\n\n/* Text display */\n#tt-text-box {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 16px 18px;\n  font-size: 17px;\n  line-height: 1.9;\n  letter-spacing: 0.01em;\n  margin-bottom: 14px;\n  min-height: 88px;\n  word-break: break-all;\n  user-select: none;\n  cursor: text;\n  transition: border-color 0.15s;\n}\n\n#tt-text-box.tt-active {\n  border-color: #93c5fd;\n  box-shadow: 0 0 0 3px rgba(59,130,246,0.1);\n}\n\n#tt-text-box .char-pending {\n  color: #94a3b8;\n}\n\n#tt-text-box .char-current {\n  color: #1e40af;\n  background: #dbeafe;\n  border-radius: 3px;\n  padding: 0 1px;\n  animation: tt-blink 1s step-end infinite;\n}\n\n@keyframes tt-blink {\n  50% { background: #bfdbfe; }\n}\n\n#tt-text-box .char-correct {\n  color: #16a34a;\n}\n\n#tt-text-box .char-wrong {\n  color: #dc2626;\n  text-decoration: line-through;\n  text-decoration-color: #dc2626;\n}\n\n/* Input */\n#tt-input {\n  width: 100%;\n  padding: 10px 14px;\n  font-size: 15px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  outline: none;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.15s;\n  margin-bottom: 16px;\n  font-family: inherit;\n}\n\n#tt-input:focus {\n  border-color: #3b82f6;\n  box-shadow: 0 0 0 3px rgba(59,130,246,0.1);\n}\n\n#tt-input:disabled {\n  background: #f1f5f9;\n  color: #94a3b8;\n  cursor: not-allowed;\n}\n\n/* Stats */\n#tt-stats {\n  display: grid;\n  grid-template-columns: repeat(5, 1fr);\n  gap: 10px;\n  margin-bottom: 18px;\n}\n\n@media (max-width: 560px) {\n  #tt-stats {\n    grid-template-columns: repeat(3, 1fr);\n  }\n}\n\n@media (max-width: 380px) {\n  #tt-stats {\n    grid-template-columns: repeat(2, 1fr);\n  }\n}\n\n.tt-stat-card {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 10px 8px;\n  text-align: center;\n}\n\n.tt-stat-label {\n  font-size: 11px;\n  font-weight: 600;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  margin-bottom: 4px;\n}\n\n.tt-stat-value {\n  font-size: 22px;\n  font-weight: 800;\n  color: #0f172a;\n  font-variant-numeric: tabular-nums;\n  line-height: 1;\n}\n\n.tt-stat-value.tt-wpm {\n  color: #2563eb;\n}\n\n.tt-stat-value.tt-acc {\n  color: #16a34a;\n}\n\n/* Result */\n#tt-result {\n  display: none;\n  background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);\n  border: 1.5px solid #bae6fd;\n  border-radius: 10px;\n  padding: 22px 20px;\n  margin-bottom: 18px;\n  text-align: center;\n}\n\n#tt-result h3 {\n  font-size: 17px;\n  font-weight: 700;\n  color: #0369a1;\n  margin-bottom: 14px;\n}\n\n#tt-result-level {\n  font-size: 26px;\n  font-weight: 800;\n  color: #0f172a;\n  margin-bottom: 10px;\n}\n\n#tt-result-stats {\n  display: flex;\n  justify-content: center;\n  gap: 24px;\n  flex-wrap: wrap;\n  margin-bottom: 16px;\n}\n\n.tt-res-item {\n  text-align: center;\n}\n\n.tt-res-item .rval {\n  font-size: 28px;\n  font-weight: 800;\n  color: #0c4a6e;\n  font-variant-numeric: tabular-nums;\n  display: block;\n  line-height: 1.1;\n}\n\n.tt-res-item .rlbl {\n  font-size: 12px;\n  color: #0369a1;\n  font-weight: 600;\n}\n\n#tt-result-comment {\n  font-size: 13px;\n  color: #334155;\n  margin-bottom: 14px;\n}\n\n#tt-btn-retry {\n  padding: 9px 24px;\n  font-size: 14px;\n  font-weight: 700;\n  border: none;\n  border-radius: 7px;\n  cursor: pointer;\n  background: #0284c7;\n  color: #fff;\n  transition: background 0.15s;\n}\n\n#tt-btn-retry:hover {\n  background: #0369a1;\n}\n\n/* Status message */\n#tt-status {\n  font-size: 13px;\n  color: #64748b;\n  text-align: center;\n  margin-bottom: 10px;\n  min-height: 18px;\n}\n\u003c/style\u003e\n\u003ch2\u003e\u0026#9000; タイピング速度テスト\u003c/h2\u003e\n\u003cdiv id=\"tt-controls\"\u003e\n  \u003cdiv\u003e\n    \u003clabel for=\"tt-select-diff\"\u003e難易度：\u003c/label\u003e\n    \u003cselect id=\"tt-select-diff\"\u003e\n      \u003coption value=\"easy\"\u003e初級\u003c/option\u003e\n      \u003coption value=\"medium\" selected\u003e中級\u003c/option\u003e\n      \u003coption value=\"hard\"\u003e上級\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003clabel for=\"tt-select-time\"\u003e制限時間：\u003c/label\u003e\n    \u003cselect id=\"tt-select-time\"\u003e\n      \u003coption value=\"30\"\u003e30秒\u003c/option\u003e\n      \u003coption value=\"60\" selected\u003e60秒\u003c/option\u003e\n      \u003coption value=\"120\"\u003e120秒\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cbutton id=\"tt-btn-start\"\u003eスタート\u003c/button\u003e\n  \u003cbutton id=\"tt-btn-reset\"\u003eリセット\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"tt-timer-bar\"\u003e\n  \u003cdiv id=\"tt-timer-display\"\u003e60\u003c/div\u003e\n  \u003cdiv id=\"tt-progress-track\"\u003e\n    \u003cdiv id=\"tt-progress-fill\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"tt-text-box\" aria-label=\"タイピングテキスト\"\u003e\u003c/div\u003e\n\u003cp id=\"tt-status\"\u003e難易度と制限時間を選んで「スタート」を押すか、入力欄に最初の文字を入力してください。\u003c/p\u003e","title":"タイピング速度テスト"},{"content":" YAMLまたはJSONを貼り付けて、バリデーション・変換・整形をすぐに実行できます。データはブラウザ外に送信されません。\n入力形式: YAML JSON ファイルを開く クリア 入力 出力 コピー バリデーション YAML → JSON JSON → YAML 整形 / 正規化 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール JSONを検証 → JSONバリデーター HTMLを整形 → HTML整形ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/yaml-validator/","summary":"\u003cdiv id=\"ym-app\"\u003e\n\u003cstyle\u003e\n#ym-app *,\n#ym-app *::before,\n#ym-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#ym-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Yu Gothic\", Meiryo, sans-serif;\n  font-size: 15px;\n  color: #1e293b;\n  line-height: 1.6;\n  max-width: 860px;\n}\n#ym-app h2 {\n  font-size: 1.15rem;\n  font-weight: 700;\n  color: #1e293b;\n  margin-bottom: 10px;\n}\n#ym-app .ym-desc {\n  font-size: 14px;\n  color: #475569;\n  margin-bottom: 18px;\n}\n#ym-app .ym-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 18px;\n}\n@media (max-width: 640px) {\n  #ym-app .ym-grid {\n    grid-template-columns: 1fr;\n  }\n}\n#ym-app .ym-panel {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n#ym-app .ym-panel-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #334155;\n}\n#ym-app textarea {\n  width: 100%;\n  height: 280px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 13px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  padding: 12px;\n  resize: vertical;\n  color: #1e293b;\n  background: #f8fafc;\n  line-height: 1.55;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#ym-app textarea:focus {\n  border-color: #6366f1;\n  background: #fff;\n}\n#ym-app .ym-output-wrap {\n  position: relative;\n}\n#ym-app .ym-output {\n  width: 100%;\n  min-height: 280px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 13px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  padding: 12px;\n  background: #0f172a;\n  color: #e2e8f0;\n  line-height: 1.55;\n  white-space: pre-wrap;\n  word-break: break-all;\n  overflow: auto;\n}\n#ym-app .ym-copy-btn {\n  position: absolute;\n  top: 8px;\n  right: 8px;\n  padding: 4px 10px;\n  font-size: 12px;\n  font-weight: 600;\n  background: #334155;\n  color: #e2e8f0;\n  border: none;\n  border-radius: 5px;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#ym-app .ym-copy-btn:hover {\n  background: #475569;\n}\n#ym-app .ym-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin: 14px 0;\n  align-items: center;\n}\n#ym-app .ym-btn {\n  padding: 8px 16px;\n  font-size: 13px;\n  font-weight: 600;\n  border: none;\n  border-radius: 7px;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.08s;\n}\n#ym-app .ym-btn:active {\n  transform: scale(0.97);\n}\n#ym-app .ym-btn-primary {\n  background: #6366f1;\n  color: #fff;\n}\n#ym-app .ym-btn-primary:hover {\n  background: #4f46e5;\n}\n#ym-app .ym-btn-green {\n  background: #10b981;\n  color: #fff;\n}\n#ym-app .ym-btn-green:hover {\n  background: #059669;\n}\n#ym-app .ym-btn-amber {\n  background: #f59e0b;\n  color: #fff;\n}\n#ym-app .ym-btn-amber:hover {\n  background: #d97706;\n}\n#ym-app .ym-btn-slate {\n  background: #64748b;\n  color: #fff;\n}\n#ym-app .ym-btn-slate:hover {\n  background: #475569;\n}\n#ym-app .ym-btn-red {\n  background: #ef4444;\n  color: #fff;\n}\n#ym-app .ym-btn-red:hover {\n  background: #dc2626;\n}\n#ym-app .ym-upload-label {\n  display: inline-block;\n  padding: 8px 16px;\n  font-size: 13px;\n  font-weight: 600;\n  background: #e2e8f0;\n  color: #334155;\n  border-radius: 7px;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#ym-app .ym-upload-label:hover {\n  background: #cbd5e1;\n}\n#ym-app #ym-file-input {\n  display: none;\n}\n#ym-app .ym-status {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  padding: 10px 14px;\n  border-radius: 8px;\n  min-height: 40px;\n}\n#ym-app .ym-status.ok {\n  background: #dcfce7;\n  color: #166534;\n  border: 1px solid #bbf7d0;\n}\n#ym-app .ym-status.err {\n  background: #fee2e2;\n  color: #991b1b;\n  border: 1px solid #fecaca;\n}\n#ym-app .ym-status.info {\n  background: #eff6ff;\n  color: #1e40af;\n  border: 1px solid #bfdbfe;\n}\n#ym-app .ym-status.hidden {\n  display: none;\n}\n/* Syntax highlight tokens */\n#ym-app .yt-key    { color: #a78bfa; }  /* 紫 */\n#ym-app .yt-str    { color: #4ade80; }  /* 緑 */\n#ym-app .yt-num    { color: #60a5fa; }  /* 青 */\n#ym-app .yt-bool   { color: #fb923c; }  /* オレンジ */\n#ym-app .yt-null   { color: #94a3b8; }  /* スレート */\n#ym-app .yt-punct  { color: #e2e8f0; }\n#ym-app .yt-cmt    { color: #64748b; font-style: italic; }\n#ym-app .yt-dash   { color: #f472b6; }\n#ym-app .ym-mode-row {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n  flex-wrap: wrap;\n  margin-bottom: 6px;\n}\n#ym-app .ym-mode-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #94a3b8;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n#ym-app .ym-sep {\n  height: 1px;\n  background: #e2e8f0;\n  margin: 20px 0;\n}\n\u003c/style\u003e\n\u003cp class=\"ym-desc\"\u003eYAMLまたはJSONを貼り付けて、バリデーション・変換・整形をすぐに実行できます。データはブラウザ外に送信されません。\u003c/p\u003e","title":"YAMLバリデーター＆変換ツール"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nインフレ計算ツール｜物価上昇で将来お金の価値はどう変わる？ 日本でも2022年以降、物価の上昇が続いています。年2〜3%のインフレが続くと、今持っている100万円は20年後にいくらの価値になるでしょうか？このツールでは、インフレ率と期間を指定するだけで、将来のお金の実質購買力を即座に計算できます。資産防衛の第一歩として、まずは現実を数字で把握しましょう。\n条件を入力してください \u0026lt;!-- 現在の金額 --\u0026gt; \u0026lt;div style=\u0026quot;margin-bottom: 1.4rem;\u0026quot;\u0026gt; \u0026lt;label style=\u0026quot;display: block; font-size: 0.9rem; font-weight: 600; color: #44403c; margin-bottom: 0.5rem;\u0026quot;\u0026gt;現在の金額\u0026lt;/label\u0026gt; \u0026lt;div style=\u0026quot;display: flex; align-items: center; gap: 0.75rem;\u0026quot;\u0026gt; \u0026lt;input id=\u0026quot;ic-amount\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;100\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;100000\u0026quot; step=\u0026quot;1\u0026quot; style=\u0026quot;width: 130px; padding: 0.55rem 0.75rem; border: 1.5px solid #d97706; border-radius: 8px; font-size: 1.1rem; font-weight: 700; color: #1c1917; background: #fff; text-align: right;\u0026quot; oninput=\u0026quot;icCalc()\u0026quot; /\u0026gt; \u0026lt;span style=\u0026quot;font-size: 1rem; color: #57534e; font-weight: 600;\u0026quot;\u0026gt;万円\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- インフレ率スライダー --\u0026gt; \u0026lt;div style=\u0026quot;margin-bottom: 1.4rem;\u0026quot;\u0026gt; \u0026lt;label style=\u0026quot;display: flex; justify-content: space-between; font-size: 0.9rem; font-weight: 600; color: #44403c; margin-bottom: 0.5rem;\u0026quot;\u0026gt; \u0026lt;span\u0026gt;年間インフレ率\u0026lt;/span\u0026gt; \u0026lt;span id=\u0026quot;ic-rate-label\u0026quot; style=\u0026quot;color: #d97706; font-size: 1rem; font-weight: 700;\u0026quot;\u0026gt;2.5%\u0026lt;/span\u0026gt; \u0026lt;/label\u0026gt; \u0026lt;input id=\u0026quot;ic-rate\u0026quot; type=\u0026quot;range\u0026quot; min=\u0026quot;0.5\u0026quot; max=\u0026quot;8\u0026quot; step=\u0026quot;0.5\u0026quot; value=\u0026quot;2.5\u0026quot; style=\u0026quot;width: 100%; accent-color: #d97706; cursor: pointer;\u0026quot; oninput=\u0026quot;icUpdateRateLabel(); icCalc()\u0026quot; /\u0026gt; \u0026lt;div style=\u0026quot;display: flex; justify-content: space-between; font-size: 0.75rem; color: #78716c; margin-top: 0.25rem;\u0026quot;\u0026gt; \u0026lt;span\u0026gt;0.5%\u0026lt;/span\u0026gt; \u0026lt;span style=\u0026quot;color: #d97706; font-size: 0.72rem;\u0026quot;\u0026gt;日本の直近インフレ率: 2〜3%\u0026lt;/span\u0026gt; \u0026lt;span\u0026gt;8.0%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- 期間スライダー --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;label style=\u0026quot;display: flex; justify-content: space-between; font-size: 0.9rem; font-weight: 600; color: #44403c; margin-bottom: 0.5rem;\u0026quot;\u0026gt; \u0026lt;span\u0026gt;計算期間\u0026lt;/span\u0026gt; \u0026lt;span id=\u0026quot;ic-years-label\u0026quot; style=\u0026quot;color: #d97706; font-size: 1rem; font-weight: 700;\u0026quot;\u0026gt;20年後\u0026lt;/span\u0026gt; \u0026lt;/label\u0026gt; \u0026lt;input id=\u0026quot;ic-years\u0026quot; type=\u0026quot;range\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;40\u0026quot; step=\u0026quot;1\u0026quot; value=\u0026quot;20\u0026quot; style=\u0026quot;width: 100%; accent-color: #d97706; cursor: pointer;\u0026quot; oninput=\u0026quot;icUpdateYearsLabel(); icCalc()\u0026quot; /\u0026gt; \u0026lt;div style=\u0026quot;display: flex; justify-content: space-between; font-size: 0.75rem; color: #78716c; margin-top: 0.25rem;\u0026quot;\u0026gt; \u0026lt;span\u0026gt;1年\u0026lt;/span\u0026gt; \u0026lt;span\u0026gt;40年\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 計算結果 \u0026lt;div style=\u0026quot;display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-bottom: 1.25rem;\u0026quot;\u0026gt; \u0026lt;!-- 将来の実質価値 --\u0026gt; \u0026lt;div style=\u0026quot;background: #fffbeb; border-radius: 12px; padding: 1.1rem 1.25rem; border: 1.5px solid #fcd34d; text-align: center;\u0026quot;\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.8rem; color: #92400e; font-weight: 600; margin-bottom: 0.4rem;\u0026quot;\u0026gt;将来の実質価値\u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;ic-result-value\u0026quot; style=\u0026quot;font-size: 1.85rem; font-weight: 800; color: #d97706; line-height: 1.1;\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.78rem; color: #78716c; margin-top: 0.2rem;\u0026quot;\u0026gt;（今の価値に換算）\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- 購買力の低下率 --\u0026gt; \u0026lt;div style=\u0026quot;background: #fef2f2; border-radius: 12px; padding: 1.1rem 1.25rem; border: 1.5px solid #fca5a5; text-align: center;\u0026quot;\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.8rem; color: #991b1b; font-weight: 600; margin-bottom: 0.4rem;\u0026quot;\u0026gt;購買力の低下率\u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;ic-result-loss\u0026quot; style=\u0026quot;font-size: 1.85rem; font-weight: 800; color: #dc2626; line-height: 1.1;\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.78rem; color: #78716c; margin-top: 0.2rem;\u0026quot;\u0026gt;（実質価値の目減り）\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- 現在の価値を維持するために必要な金額 --\u0026gt; \u0026lt;div style=\u0026quot;background: #f0fdf4; border-radius: 12px; padding: 1rem 1.25rem; border: 1.5px solid #86efac; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 0.5rem;\u0026quot;\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.85rem; color: #14532d; font-weight: 600;\u0026quot;\u0026gt;現在の価値を維持するために将来必要な金額\u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;ic-result-needed\u0026quot; style=\u0026quot;font-size: 1.4rem; font-weight: 800; color: #16a34a;\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 購買力の比較 \u0026lt;div style=\u0026quot;margin-bottom: 0.85rem;\u0026quot;\u0026gt; \u0026lt;div style=\u0026quot;display: flex; justify-content: space-between; font-size: 0.82rem; color: #57534e; margin-bottom: 0.3rem;\u0026quot;\u0026gt; \u0026lt;span\u0026gt;今の購買力\u0026lt;/span\u0026gt; \u0026lt;span id=\u0026quot;ic-bar-now-label\u0026quot; style=\u0026quot;font-weight: 700; color: #d97706;\u0026quot;\u0026gt;100%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;background: #e7e5e4; border-radius: 99px; height: 22px; overflow: hidden;\u0026quot;\u0026gt; \u0026lt;div id=\u0026quot;ic-bar-now\u0026quot; style=\u0026quot;height: 100%; width: 100%; background: linear-gradient(90deg, #d97706, #f59e0b); border-radius: 99px; transition: width 0.4s ease;\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div style=\u0026quot;display: flex; justify-content: space-between; font-size: 0.82rem; color: #57534e; margin-bottom: 0.3rem;\u0026quot;\u0026gt; \u0026lt;span id=\u0026quot;ic-bar-future-title\u0026quot;\u0026gt;将来の購買力（20年後）\u0026lt;/span\u0026gt; \u0026lt;span id=\u0026quot;ic-bar-future-label\u0026quot; style=\u0026quot;font-weight: 700; color: #dc2626;\u0026quot;\u0026gt;—\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;background: #e7e5e4; border-radius: 99px; height: 22px; overflow: hidden;\u0026quot;\u0026gt; \u0026lt;div id=\u0026quot;ic-bar-future\u0026quot; style=\u0026quot;height: 100%; width: 0%; background: linear-gradient(90deg, #dc2626, #f87171); border-radius: 99px; transition: width 0.4s ease;\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 年次推移テーブル 経過年数 実質価値（万円） 購買力 目減り額（万円） 全年次を表示する インフレに勝つには？ — 必要な運用利回り 資産の実質価値を維持するには、少なくともインフレ率と同等の運用利回りが必要です。購買力を増やすにはさらに高いリターンが求められます。\n価値を維持 — 以上の利回りが必要 +10%増やす — 以上の利回りが必要 +30%増やす — 以上の利回りが必要 身近な例：100万円分の買い物が将来いくらに？ 現在100万円で買えるものが、インフレが続くと将来は以下の金額が必要になります。\n\u0026lt;div style=\u0026quot;display: flex; align-items: center; justify-content: space-between; padding: 0.9rem 1rem; background: #fafaf9; border-radius: 10px; border: 1px solid #e7e5e4; flex-wrap: wrap; gap: 0.5rem;\u0026quot;\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.85rem; font-weight: 700; color: #1c1917;\u0026quot;\u0026gt;食費・日用品（年間100万円）\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.78rem; color: #78716c; margin-top: 0.15rem;\u0026quot;\u0026gt;同じ生活水準を維持するためのコスト\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;text-align: right;\u0026quot;\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.75rem; color: #78716c;\u0026quot;\u0026gt;将来必要な金額\u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;ic-ex-food\u0026quot; style=\u0026quot;font-size: 1.15rem; font-weight: 800; color: #dc2626;\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;display: flex; align-items: center; justify-content: space-between; padding: 0.9rem 1rem; background: #fafaf9; border-radius: 10px; border: 1px solid #e7e5e4; flex-wrap: wrap; gap: 0.5rem;\u0026quot;\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.85rem; font-weight: 700; color: #1c1917;\u0026quot;\u0026gt;家賃（月8.4万円 × 年間100万円相当）\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.78rem; color: #78716c; margin-top: 0.15rem;\u0026quot;\u0026gt;都市部の賃貸マンション想定\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;text-align: right;\u0026quot;\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.75rem; color: #78716c;\u0026quot;\u0026gt;将来必要な金額\u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;ic-ex-rent\u0026quot; style=\u0026quot;font-size: 1.15rem; font-weight: 800; color: #dc2626;\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;display: flex; align-items: center; justify-content: space-between; padding: 0.9rem 1rem; background: #fafaf9; border-radius: 10px; border: 1px solid #e7e5e4; flex-wrap: wrap; gap: 0.5rem;\u0026quot;\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.85rem; font-weight: 700; color: #1c1917;\u0026quot;\u0026gt;教育費（子ども1人・年間100万円）\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.78rem; color: #78716c; margin-top: 0.15rem;\u0026quot;\u0026gt;学費・習い事・進学費用など\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;text-align: right;\u0026quot;\u0026gt; \u0026lt;div style=\u0026quot;font-size: 0.75rem; color: #78716c;\u0026quot;\u0026gt;将来必要な金額\u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;ic-ex-edu\u0026quot; style=\u0026quot;font-size: 1.15rem; font-weight: 800; color: #dc2626;\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; インフレから資産を守る方法 物価上昇が続く時代に、現金だけで資産を持ち続けることは実質的な目減りを意味します。以下の4つの対策が有効です。\n1. NISAでの積立投資 新NISAの「つみたて投資枠」を活用し、インデックスファンドへ長期・分散投資することで、年平均3〜7%程度のリターンを狙えます。歴史的にインフレを上回るリターンが期待できる最も手軽な方法です。\n2. iDeCoで税制優遇を活用 個人型確定拠出年金（iDeCo）は掛金が全額所得控除され、運用益も非課税です。老後資金の形成とインフレ対策を同時に行えます。\n3. 実物資産への分散 不動産や金（ゴールド）などの実物資産は、インフレ時に価値が上昇しやすい傾向があります。ETFやREITを通じて少額から分散投資することも可能です。\n4. 変動金利型ローンに注意 インフレ局面では政策金利が上昇しやすく、変動金利ローンの返済額が増える可能性があります。住宅ローンを変動金利で借りている方は特に注意が必要です。\n収支を把握してインフレに備える → freee会計で家計管理を始める 関連ツール 複利の効果を計算 → 複利計算シミュレーター NISAの運用シミュレーション → NISAシミュレーター FIRE達成年数を計算 → FIREシミュレーター 純資産を把握する → 資産管理シミュレーター ","permalink":"https://productivity-works.com/ja/tools/inflation-calculator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"インフレ計算ツール物価上昇で将来お金の価値はどう変わる\"\u003eインフレ計算ツール｜物価上昇で将来お金の価値はどう変わる？\u003c/h1\u003e\n\u003cp\u003e日本でも2022年以降、物価の上昇が続いています。年2〜3%のインフレが続くと、今持っている100万円は20年後にいくらの価値になるでしょうか？このツールでは、インフレ率と期間を指定するだけで、将来のお金の実質購買力を即座に計算できます。資産防衛の第一歩として、まずは現実を数字で把握しましょう。\u003c/p\u003e\n\u003cdiv id=\"inflation-calc-app\" style=\"font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Yu Gothic', sans-serif; max-width: 720px; margin: 2rem auto; color: #1c1917;\"\u003e\n  \u003c!-- 入力パネル --\u003e\n  \u003cdiv style=\"background: #fffbeb; border: 2px solid #d97706; border-radius: 16px; padding: 1.75rem 2rem; margin-bottom: 1.5rem;\"\u003e\n    \u003ch2 style=\"margin: 0 0 1.5rem; font-size: 1.1rem; font-weight: 700; color: #92400e; letter-spacing: 0.02em;\"\u003e条件を入力してください\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;!-- 現在の金額 --\u0026gt;\n\u0026lt;div style=\u0026quot;margin-bottom: 1.4rem;\u0026quot;\u0026gt;\n  \u0026lt;label style=\u0026quot;display: block; font-size: 0.9rem; font-weight: 600; color: #44403c; margin-bottom: 0.5rem;\u0026quot;\u0026gt;現在の金額\u0026lt;/label\u0026gt;\n  \u0026lt;div style=\u0026quot;display: flex; align-items: center; gap: 0.75rem;\u0026quot;\u0026gt;\n    \u0026lt;input\n      id=\u0026quot;ic-amount\u0026quot;\n      type=\u0026quot;number\u0026quot;\n      value=\u0026quot;100\u0026quot;\n      min=\u0026quot;1\u0026quot;\n      max=\u0026quot;100000\u0026quot;\n      step=\u0026quot;1\u0026quot;\n      style=\u0026quot;width: 130px; padding: 0.55rem 0.75rem; border: 1.5px solid #d97706; border-radius: 8px; font-size: 1.1rem; font-weight: 700; color: #1c1917; background: #fff; text-align: right;\u0026quot;\n      oninput=\u0026quot;icCalc()\u0026quot;\n    /\u0026gt;\n    \u0026lt;span style=\u0026quot;font-size: 1rem; color: #57534e; font-weight: 600;\u0026quot;\u0026gt;万円\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- インフレ率スライダー --\u0026gt;\n\u0026lt;div style=\u0026quot;margin-bottom: 1.4rem;\u0026quot;\u0026gt;\n  \u0026lt;label style=\u0026quot;display: flex; justify-content: space-between; font-size: 0.9rem; font-weight: 600; color: #44403c; margin-bottom: 0.5rem;\u0026quot;\u0026gt;\n    \u0026lt;span\u0026gt;年間インフレ率\u0026lt;/span\u0026gt;\n    \u0026lt;span id=\u0026quot;ic-rate-label\u0026quot; style=\u0026quot;color: #d97706; font-size: 1rem; font-weight: 700;\u0026quot;\u0026gt;2.5%\u0026lt;/span\u0026gt;\n  \u0026lt;/label\u0026gt;\n  \u0026lt;input\n    id=\u0026quot;ic-rate\u0026quot;\n    type=\u0026quot;range\u0026quot;\n    min=\u0026quot;0.5\u0026quot;\n    max=\u0026quot;8\u0026quot;\n    step=\u0026quot;0.5\u0026quot;\n    value=\u0026quot;2.5\u0026quot;\n    style=\u0026quot;width: 100%; accent-color: #d97706; cursor: pointer;\u0026quot;\n    oninput=\u0026quot;icUpdateRateLabel(); icCalc()\u0026quot;\n  /\u0026gt;\n  \u0026lt;div style=\u0026quot;display: flex; justify-content: space-between; font-size: 0.75rem; color: #78716c; margin-top: 0.25rem;\u0026quot;\u0026gt;\n    \u0026lt;span\u0026gt;0.5%\u0026lt;/span\u0026gt;\n    \u0026lt;span style=\u0026quot;color: #d97706; font-size: 0.72rem;\u0026quot;\u0026gt;日本の直近インフレ率: 2〜3%\u0026lt;/span\u0026gt;\n    \u0026lt;span\u0026gt;8.0%\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- 期間スライダー --\u0026gt;\n\u0026lt;div\u0026gt;\n  \u0026lt;label style=\u0026quot;display: flex; justify-content: space-between; font-size: 0.9rem; font-weight: 600; color: #44403c; margin-bottom: 0.5rem;\u0026quot;\u0026gt;\n    \u0026lt;span\u0026gt;計算期間\u0026lt;/span\u0026gt;\n    \u0026lt;span id=\u0026quot;ic-years-label\u0026quot; style=\u0026quot;color: #d97706; font-size: 1rem; font-weight: 700;\u0026quot;\u0026gt;20年後\u0026lt;/span\u0026gt;\n  \u0026lt;/label\u0026gt;\n  \u0026lt;input\n    id=\u0026quot;ic-years\u0026quot;\n    type=\u0026quot;range\u0026quot;\n    min=\u0026quot;1\u0026quot;\n    max=\u0026quot;40\u0026quot;\n    step=\u0026quot;1\u0026quot;\n    value=\u0026quot;20\u0026quot;\n    style=\u0026quot;width: 100%; accent-color: #d97706; cursor: pointer;\u0026quot;\n    oninput=\u0026quot;icUpdateYearsLabel(); icCalc()\u0026quot;\n  /\u0026gt;\n  \u0026lt;div style=\u0026quot;display: flex; justify-content: space-between; font-size: 0.75rem; color: #78716c; margin-top: 0.25rem;\u0026quot;\u0026gt;\n    \u0026lt;span\u0026gt;1年\u0026lt;/span\u0026gt;\n    \u0026lt;span\u0026gt;40年\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- 結果パネル --\u003e\n  \u003cdiv style=\"background: #fff; border: 2px solid #e7e5e4; border-radius: 16px; padding: 1.75rem 2rem; margin-bottom: 1.5rem;\"\u003e\n    \u003ch2 style=\"margin: 0 0 1.25rem; font-size: 1.05rem; font-weight: 700; color: #44403c;\"\u003e計算結果\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div style=\u0026quot;display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin-bottom: 1.25rem;\u0026quot;\u0026gt;\n\n  \u0026lt;!-- 将来の実質価値 --\u0026gt;\n  \u0026lt;div style=\u0026quot;background: #fffbeb; border-radius: 12px; padding: 1.1rem 1.25rem; border: 1.5px solid #fcd34d; text-align: center;\u0026quot;\u0026gt;\n    \u0026lt;div style=\u0026quot;font-size: 0.8rem; color: #92400e; font-weight: 600; margin-bottom: 0.4rem;\u0026quot;\u0026gt;将来の実質価値\u0026lt;/div\u0026gt;\n    \u0026lt;div id=\u0026quot;ic-result-value\u0026quot; style=\u0026quot;font-size: 1.85rem; font-weight: 800; color: #d97706; line-height: 1.1;\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\n    \u0026lt;div style=\u0026quot;font-size: 0.78rem; color: #78716c; margin-top: 0.2rem;\u0026quot;\u0026gt;（今の価値に換算）\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- 購買力の低下率 --\u0026gt;\n  \u0026lt;div style=\u0026quot;background: #fef2f2; border-radius: 12px; padding: 1.1rem 1.25rem; border: 1.5px solid #fca5a5; text-align: center;\u0026quot;\u0026gt;\n    \u0026lt;div style=\u0026quot;font-size: 0.8rem; color: #991b1b; font-weight: 600; margin-bottom: 0.4rem;\u0026quot;\u0026gt;購買力の低下率\u0026lt;/div\u0026gt;\n    \u0026lt;div id=\u0026quot;ic-result-loss\u0026quot; style=\u0026quot;font-size: 1.85rem; font-weight: 800; color: #dc2626; line-height: 1.1;\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\n    \u0026lt;div style=\u0026quot;font-size: 0.78rem; color: #78716c; margin-top: 0.2rem;\u0026quot;\u0026gt;（実質価値の目減り）\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- 現在の価値を維持するために必要な金額 --\u0026gt;\n\u0026lt;div style=\u0026quot;background: #f0fdf4; border-radius: 12px; padding: 1rem 1.25rem; border: 1.5px solid #86efac; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 0.5rem;\u0026quot;\u0026gt;\n  \u0026lt;div style=\u0026quot;font-size: 0.85rem; color: #14532d; font-weight: 600;\u0026quot;\u0026gt;現在の価値を維持するために将来必要な金額\u0026lt;/div\u0026gt;\n  \u0026lt;div id=\u0026quot;ic-result-needed\u0026quot; style=\u0026quot;font-size: 1.4rem; font-weight: 800; color: #16a34a;\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- 視覚的バー比較 --\u003e\n  \u003cdiv style=\"background: #fff; border: 2px solid #e7e5e4; border-radius: 16px; padding: 1.75rem 2rem; margin-bottom: 1.5rem;\"\u003e\n    \u003ch2 style=\"margin: 0 0 1.1rem; font-size: 1.05rem; font-weight: 700; color: #44403c;\"\u003e購買力の比較\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div style=\u0026quot;margin-bottom: 0.85rem;\u0026quot;\u0026gt;\n  \u0026lt;div style=\u0026quot;display: flex; justify-content: space-between; font-size: 0.82rem; color: #57534e; margin-bottom: 0.3rem;\u0026quot;\u0026gt;\n    \u0026lt;span\u0026gt;今の購買力\u0026lt;/span\u0026gt;\n    \u0026lt;span id=\u0026quot;ic-bar-now-label\u0026quot; style=\u0026quot;font-weight: 700; color: #d97706;\u0026quot;\u0026gt;100%\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div style=\u0026quot;background: #e7e5e4; border-radius: 99px; height: 22px; overflow: hidden;\u0026quot;\u0026gt;\n    \u0026lt;div id=\u0026quot;ic-bar-now\u0026quot; style=\u0026quot;height: 100%; width: 100%; background: linear-gradient(90deg, #d97706, #f59e0b); border-radius: 99px; transition: width 0.4s ease;\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div\u0026gt;\n  \u0026lt;div style=\u0026quot;display: flex; justify-content: space-between; font-size: 0.82rem; color: #57534e; margin-bottom: 0.3rem;\u0026quot;\u0026gt;\n    \u0026lt;span id=\u0026quot;ic-bar-future-title\u0026quot;\u0026gt;将来の購買力（20年後）\u0026lt;/span\u0026gt;\n    \u0026lt;span id=\u0026quot;ic-bar-future-label\u0026quot; style=\u0026quot;font-weight: 700; color: #dc2626;\u0026quot;\u0026gt;—\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div style=\u0026quot;background: #e7e5e4; border-radius: 99px; height: 22px; overflow: hidden;\u0026quot;\u0026gt;\n    \u0026lt;div id=\u0026quot;ic-bar-future\u0026quot; style=\u0026quot;height: 100%; width: 0%; background: linear-gradient(90deg, #dc2626, #f87171); border-radius: 99px; transition: width 0.4s ease;\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- 年次テーブル --\u003e\n  \u003cdiv style=\"background: #fff; border: 2px solid #e7e5e4; border-radius: 16px; padding: 1.75rem 2rem; margin-bottom: 1.5rem;\"\u003e\n    \u003ch2 style=\"margin: 0 0 1.1rem; font-size: 1.05rem; font-weight: 700; color: #44403c;\"\u003e年次推移テーブル\u003c/h2\u003e\n    \u003cdiv style=\"overflow-x: auto;\"\u003e\n      \u003ctable id=\"ic-table\" style=\"width: 100%; border-collapse: collapse; font-size: 0.88rem;\"\u003e\n        \u003cthead\u003e\n          \u003ctr style=\"background: #fef3c7; border-bottom: 2px solid #d97706;\"\u003e\n            \u003cth style=\"padding: 0.6rem 0.75rem; text-align: center; color: #92400e; font-weight: 700; white-space: nowrap;\"\u003e経過年数\u003c/th\u003e\n            \u003cth style=\"padding: 0.6rem 0.75rem; text-align: right; color: #92400e; font-weight: 700; white-space: nowrap;\"\u003e実質価値（万円）\u003c/th\u003e\n            \u003cth style=\"padding: 0.6rem 0.75rem; text-align: right; color: #92400e; font-weight: 700; white-space: nowrap;\"\u003e購買力\u003c/th\u003e\n            \u003cth style=\"padding: 0.6rem 0.75rem; text-align: right; color: #92400e; font-weight: 700; white-space: nowrap;\"\u003e目減り額（万円）\u003c/th\u003e\n          \u003c/tr\u003e\n        \u003c/thead\u003e\n        \u003ctbody id=\"ic-table-body\"\u003e\u003c/tbody\u003e\n      \u003c/table\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"text-align: center; margin-top: 1rem;\"\u003e\n      \u003cbutton\n        id=\"ic-expand-btn\"\n        onclick=\"icToggleTable()\"\n        style=\"background: #d97706; color: #fff; border: none; border-radius: 8px; padding: 0.5rem 1.5rem; font-size: 0.85rem; font-weight: 700; cursor: pointer; transition: background 0.2s;\"\n        onmouseover=\"this.style.background='#b45309'\"\n        onmouseout=\"this.style.background='#d97706'\"\n      \u003e全年次を表示する\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- インフレに勝つには？パネル --\u003e\n  \u003cdiv style=\"background: #fffbeb; border: 2px solid #d97706; border-radius: 16px; padding: 1.75rem 2rem; margin-bottom: 1.5rem;\"\u003e\n    \u003ch2 style=\"margin: 0 0 0.75rem; font-size: 1.05rem; font-weight: 700; color: #92400e;\"\u003eインフレに勝つには？ — 必要な運用利回り\u003c/h2\u003e\n    \u003cp style=\"margin: 0 0 1rem; font-size: 0.88rem; color: #57534e; line-height: 1.6;\"\u003e資産の実質価値を維持するには、少なくともインフレ率と同等の運用利回りが必要です。購買力を増やすにはさらに高いリターンが求められます。\u003c/p\u003e","title":"インフレ計算ツール｜物価上昇で将来お金の価値はどう変わる？【無料】"},{"content":" ブラウザでドット絵が描けるオンラインツールです。登録不要・インストール不要。グリッドサイズを選んで、色を選んで、作品をPNGでダウンロードできます。\nグリッド: 16×16 32×32 64×64 色: 鉛筆 消しゴム 塗りつぶし スポイト グリッド非表示 準備完了 — クリックまたはドラッグで描画 元に戻す やり直す キャンバスをクリア PNGでダウンロード クリエイティブ活動の確定申告も簡単 → freee会計で副業収入を管理 このツールが役に立ったら、ぜひ他の無料ツールもお試しください。作ったドット絵はSNSでシェアしてもらえると励みになります！ 関連ツール Favicon Generator → Favicon Generatorツール Image Color Picker → Image Color Pickerツール 画像圧縮 → 画像圧縮ツール ","permalink":"https://productivity-works.com/ja/tools/pixel-art-maker/","summary":"\u003cdiv id=\"pam-app\"\u003e\n\u003cstyle\u003e\n#pam-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Yu Gothic UI\", Meiryo, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 16px;\n  color: #222;\n}\n#pam-app h1 {\n  font-size: 1.6rem;\n  margin-bottom: 4px;\n}\n#pam-app p.pam-desc {\n  color: #555;\n  margin-top: 0;\n  margin-bottom: 16px;\n}\n#pam-app .pam-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n  margin-bottom: 12px;\n  background: #f5f5f5;\n  border: 1px solid #ddd;\n  border-radius: 8px;\n  padding: 10px 12px;\n}\n#pam-app .pam-toolbar label {\n  font-size: 0.82rem;\n  color: #444;\n  margin-right: 2px;\n}\n#pam-app select, #pam-app button {\n  font-size: 0.85rem;\n  border: 1px solid #ccc;\n  border-radius: 5px;\n  padding: 4px 9px;\n  background: #fff;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#pam-app button:hover { background: #e8e8e8; }\n#pam-app button.pam-active {\n  background: #3b82f6;\n  color: #fff;\n  border-color: #2563eb;\n}\n#pam-app .pam-color-wrap {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n#pam-app input[type=color] {\n  width: 34px;\n  height: 30px;\n  border: 1px solid #ccc;\n  border-radius: 5px;\n  padding: 1px;\n  cursor: pointer;\n  background: none;\n}\n#pam-app .pam-recent-colors {\n  display: flex;\n  gap: 4px;\n  align-items: center;\n}\n#pam-app .pam-recent-swatch {\n  width: 20px;\n  height: 20px;\n  border-radius: 3px;\n  border: 1px solid #aaa;\n  cursor: pointer;\n  flex-shrink: 0;\n  transition: transform 0.1s;\n}\n#pam-app .pam-recent-swatch:hover { transform: scale(1.2); }\n#pam-app .pam-canvas-wrap {\n  display: flex;\n  justify-content: center;\n  margin-bottom: 12px;\n  overflow: auto;\n}\n#pam-app #pam-canvas {\n  display: block;\n  cursor: crosshair;\n  border: 2px solid #555;\n  image-rendering: pixelated;\n  image-rendering: crisp-edges;\n}\n#pam-app .pam-status {\n  font-size: 0.8rem;\n  color: #666;\n  text-align: center;\n  margin-bottom: 14px;\n  min-height: 18px;\n}\n#pam-app .pam-actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 20px;\n}\n#pam-app .pam-actions button {\n  padding: 6px 14px;\n}\n#pam-app .pam-cta {\n  background: #fff8e1;\n  border: 1px solid #ffe082;\n  border-radius: 8px;\n  padding: 14px 16px;\n  margin-bottom: 20px;\n  font-size: 0.92rem;\n  line-height: 1.7;\n  color: #444;\n}\n#pam-app .pam-sep {\n  width: 1px;\n  height: 24px;\n  background: #ccc;\n  margin: 0 2px;\n}\n\u003c/style\u003e\n\u003cp class=\"pam-desc\"\u003eブラウザでドット絵が描けるオンラインツールです。登録不要・インストール不要。グリッドサイズを選んで、色を選んで、作品をPNGでダウンロードできます。\u003c/p\u003e","title":"ドット絵メーカー - オンラインでピクセルアートを作成"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n教育費シミュレーター【2026年版】 幼稚園から大学まで進路を選択するだけで、子供1人にかかる教育費の総額を自動計算します。毎月の積立額との比較や、児童手当を活用した場合の試算も確認できます。\n子供の現在年齢 0歳3歳18歳 進路選択 幼稚園（3年間） 公立（17万円/年） 私立（31万円/年） 小学校（6年間） 公立（35万円/年） 私立（167万円/年） 中学校（3年間） 公立（54万円/年） 私立（144万円/年） 高校（3年間） 公立（51万円/年） 私立（105万円/年） 大学 国公立（54万円/年・4年） 私立文系（95万円/年・4年） 私立理系（130万円/年・4年） 私立医学部（350万円/年・6年） なし クイックプリセット オール公立 高校まで公立＋私立大学 オール私立 毎月の積立額（万円） 1万円3万円10万円 教育費総額（目安） 1,577万円 大学卒業まで約19年 ステージ別内訳 ステージ 年数 年間費用 小計 積立シミュレーション 総積立額 684万円 3万円×228ヶ月 教育費総額 1,577万円 児童手当を全額貯蓄した場合 0〜3歳：15,000円/月 ／ 3歳〜中学卒業：10,000円/月 児童手当 総受給額（目安） 約200万円 積立後の実質不足額 — ※児童手当は所得制限・2024年改正後の金額を参考にした概算です。 進路パターン比較 パターン 教育費総額 月額換算 教育費の目安と準備方法 文部科学省「子供の学習費調査」によると、子供1人にかかる教育費は進路によって大きく異なります。\n進路パターン 教育費総額の目安 幼稚園〜大学すべて公立（国公立大） 約800〜900万円 高校まで公立 ＋ 私立文系大学 約1,100〜1,200万円 すべて私立（私立理系大学） 約1,700〜2,000万円 すべて私立（私立医学部） 約3,000〜3,500万円 教育費は住宅購入・老後資金と並ぶ「人生の三大支出」のひとつです。子供が生まれた時点から計画的に準備を始めることが重要です。\n教育費を賢く準備する5つの方法 1. 学資保険 子供が生まれてすぐ加入できる保険型の貯蓄商品です。受取時期（小学校入学、中学入学、大学入学など）を設定でき、万が一の際には保険料払込が免除されます。返戻率は107〜112%程度が一般的で、確実性を重視する家庭に向いています。\n2. 新NISA（積立投資） 非課税で運用できる新NISAを活用した積立投資は、長期間の資産形成に適しています。たとえば毎月3万円を年利5%で15年間運用すると、元本540万円が約800万円に成長する計算です。教育費のような長期目標には特に有効です。\n3. 児童手当の全額貯蓄 0歳から中学卒業まで受け取れる児童手当（0〜3歳：15,000円/月、3歳〜中学：10,000円/月）を全額貯蓄すると、総額約200万円になります。子育て費用に使わず全額貯蓄に回すだけで、教育費の一部をカバーできます。\n4. 奨学金 日本学生支援機構の奨学金には、返済不要の「給付型」と利子付きの「貸与型」があります。給付型は家庭の収入要件がありますが、貸与型は多くの学生が利用できます。大学の推定費用が高い場合の補完手段として検討しましょう。\n5. 教育ローン 国の教育ローン（日本政策金融公庫）は年利約2.25%（固定）で最大450万円まで借入可能です。在学中は利息のみの返済も選択できます。突発的な教育費への対応や、貯蓄が間に合わない場合の最後の手段として活用できます。\n関連ツール 貯蓄計画を立てる → 貯蓄目標シミュレーター NISAで教育資金を運用 → NISAシミュレーター iDeCoで老後資金を確保 → iDeCoシミュレーター 手取り額から積立可能額を確認 → 手取り計算シミュレーター 住宅ローンと教育費の両立 → 住宅ローンシミュレーター 関連記事 新NISAの始め方｜初心者向け完全ガイド2026 老後2,000万円問題の対策と対応策 30代の保険見直しガイド 副業の始め方｜初心者向け2026年版 iDeCo vs 新NISA どちらを優先すべきか 教育費の積立を家計簿で管理するなら**freee会計（無料トライアルあり） **で収支を自動記録し、積立状況を一元管理できます。\nProductivity Works 無料ツール 当サイトの計算ツールはすべて完全無料、ブラウザ上で動作し、データは一切保存されません。\n全ツール一覧はこちら 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/tools/kyouikuhi-simulator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"教育費シミュレーター2026年版\"\u003e教育費シミュレーター【2026年版】\u003c/h1\u003e\n\u003cp\u003e幼稚園から大学まで\u003cstrong\u003e進路を選択するだけ\u003c/strong\u003eで、子供1人にかかる教育費の総額を自動計算します。毎月の積立額との比較や、児童手当を活用した場合の試算も確認できます。\u003c/p\u003e\n\u003cdiv id=\"edu-calc\" style=\"max-width:720px;margin:0 auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Hiragino Sans',sans-serif;color:#1e293b;\"\u003e\n\u003c!-- 入力パネル --\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #d97706;border-radius:12px;background:#fffbeb;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e子供の現在年齢\u003c/label\u003e\n\u003cinput type=\"range\" id=\"childAge\" min=\"0\" max=\"18\" step=\"1\" value=\"3\" oninput=\"calcEdu()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0歳\u003c/span\u003e\u003cspan id=\"childAgeVal\" style=\"font-weight:bold;font-size:18px;color:#d97706;\"\u003e3歳\u003c/span\u003e\u003cspan\u003e18歳\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003cdiv style=\"font-weight:bold;margin-bottom:10px;\"\u003e進路選択\u003c/div\u003e\n\u003cdiv style=\"display:grid;gap:10px;\"\u003e\n\u003cdiv style=\"padding:12px;background:white;border-radius:8px;border:1px solid #fde68a;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#92400e;margin-bottom:6px;\"\u003e幼稚園（3年間）\u003c/div\u003e\n\u003cdiv style=\"display:flex;gap:16px;flex-wrap:wrap;\"\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"yochien\" value=\"public\" checked onchange=\"calcEdu()\"\u003e 公立（17万円/年）\u003c/label\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"yochien\" value=\"private\" onchange=\"calcEdu()\"\u003e 私立（31万円/年）\u003c/label\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:12px;background:white;border-radius:8px;border:1px solid #fde68a;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#92400e;margin-bottom:6px;\"\u003e小学校（6年間）\u003c/div\u003e\n\u003cdiv style=\"display:flex;gap:16px;flex-wrap:wrap;\"\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"shougakkou\" value=\"public\" checked onchange=\"calcEdu()\"\u003e 公立（35万円/年）\u003c/label\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"shougakkou\" value=\"private\" onchange=\"calcEdu()\"\u003e 私立（167万円/年）\u003c/label\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:12px;background:white;border-radius:8px;border:1px solid #fde68a;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#92400e;margin-bottom:6px;\"\u003e中学校（3年間）\u003c/div\u003e\n\u003cdiv style=\"display:flex;gap:16px;flex-wrap:wrap;\"\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"chugakkou\" value=\"public\" checked onchange=\"calcEdu()\"\u003e 公立（54万円/年）\u003c/label\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"chugakkou\" value=\"private\" onchange=\"calcEdu()\"\u003e 私立（144万円/年）\u003c/label\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:12px;background:white;border-radius:8px;border:1px solid #fde68a;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#92400e;margin-bottom:6px;\"\u003e高校（3年間）\u003c/div\u003e\n\u003cdiv style=\"display:flex;gap:16px;flex-wrap:wrap;\"\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"koukou\" value=\"public\" checked onchange=\"calcEdu()\"\u003e 公立（51万円/年）\u003c/label\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"koukou\" value=\"private\" onchange=\"calcEdu()\"\u003e 私立（105万円/年）\u003c/label\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:12px;background:white;border-radius:8px;border:1px solid #fde68a;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#92400e;margin-bottom:6px;\"\u003e大学\u003c/div\u003e\n\u003cdiv style=\"display:flex;gap:12px;flex-wrap:wrap;\"\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"daigaku\" value=\"national\" checked onchange=\"calcEdu()\"\u003e 国公立（54万円/年・4年）\u003c/label\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"daigaku\" value=\"private_bun\" onchange=\"calcEdu()\"\u003e 私立文系（95万円/年・4年）\u003c/label\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"daigaku\" value=\"private_ri\" onchange=\"calcEdu()\"\u003e 私立理系（130万円/年・4年）\u003c/label\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"daigaku\" value=\"medical\" onchange=\"calcEdu()\"\u003e 私立医学部（350万円/年・6年）\u003c/label\u003e\n\u003clabel style=\"cursor:pointer;display:flex;align-items:center;gap:4px;\"\u003e\u003cinput type=\"radio\" name=\"daigaku\" value=\"none\" onchange=\"calcEdu()\"\u003e なし\u003c/label\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- クイックプリセット --\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#92400e;margin-bottom:8px;\"\u003eクイックプリセット\u003c/div\u003e\n\u003cdiv style=\"display:flex;gap:8px;flex-wrap:wrap;\"\u003e\n\u003cbutton onclick=\"setPreset('all_public')\" style=\"padding:8px 14px;background:#d97706;color:white;border:none;border-radius:6px;cursor:pointer;font-size:13px;font-weight:bold;\"\u003eオール公立\u003c/button\u003e\n\u003cbutton onclick=\"setPreset('high_public_univ_private')\" style=\"padding:8px 14px;background:#f59e0b;color:white;border:none;border-radius:6px;cursor:pointer;font-size:13px;font-weight:bold;\"\u003e高校まで公立＋私立大学\u003c/button\u003e\n\u003cbutton onclick=\"setPreset('all_private')\" style=\"padding:8px 14px;background:#b45309;color:white;border:none;border-radius:6px;cursor:pointer;font-size:13px;font-weight:bold;\"\u003eオール私立\u003c/button\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 積立額 --\u003e\n\u003cdiv style=\"margin-bottom:8px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e毎月の積立額（万円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"monthlyAmt\" min=\"1\" max=\"10\" step=\"0.5\" value=\"3\" oninput=\"calcEdu()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1万円\u003c/span\u003e\u003cspan id=\"monthlyAmtVal\" style=\"font-weight:bold;font-size:18px;color:#d97706;\"\u003e3万円\u003c/span\u003e\u003cspan\u003e10万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 結果パネル --\u003e\n\u003cdiv id=\"eduResults\" style=\"margin-top:24px;padding:24px;border-radius:12px;background:#fef3c7;border:2px solid #d97706;\"\u003e\n\u003c!-- 総額ヒーロー表示 --\u003e\n\u003cdiv style=\"text-align:center;margin-bottom:24px;padding:20px;background:white;border-radius:10px;\"\u003e\n\u003cdiv style=\"font-size:14px;color:#64748b;margin-bottom:4px;\"\u003e教育費総額（目安）\u003c/div\u003e\n\u003cdiv id=\"totalCost\" style=\"font-size:52px;font-weight:bold;color:#d97706;line-height:1.1;\"\u003e1,577万円\u003c/div\u003e\n\u003cdiv id=\"remainingYears\" style=\"font-size:13px;color:#64748b;margin-top:6px;\"\u003e大学卒業まで約19年\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ステージ別積み上げバー --\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003cdiv style=\"font-size:14px;font-weight:bold;margin-bottom:8px;\"\u003eステージ別内訳\u003c/div\u003e\n\u003cdiv id=\"stackedBar\" style=\"height:28px;border-radius:8px;overflow:hidden;display:flex;\"\u003e\u003c/div\u003e\n\u003cdiv id=\"barLegend\" style=\"display:flex;flex-wrap:wrap;gap:10px;margin-top:8px;font-size:12px;color:#64748b;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 内訳テーブル --\u003e\n\u003cdiv style=\"overflow-x:auto;margin-bottom:20px;\"\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;font-size:14px;\"\u003e\n\u003cthead\u003e\n\u003ctr style=\"background:#d97706;color:white;\"\u003e\n\u003cth style=\"padding:10px 8px;text-align:left;\"\u003eステージ\u003c/th\u003e\n\u003cth style=\"padding:10px 8px;text-align:center;\"\u003e年数\u003c/th\u003e\n\u003cth style=\"padding:10px 8px;text-align:right;\"\u003e年間費用\u003c/th\u003e\n\u003cth style=\"padding:10px 8px;text-align:right;\"\u003e小計\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody id=\"breakdownTable\"\u003e\u003c/tbody\u003e\n\u003ctfoot id=\"breakdownFoot\"\u003e\u003c/tfoot\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c!-- 積立シミュレーション --\u003e\n\u003cdiv style=\"padding:16px;background:white;border-radius:10px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:15px;font-weight:bold;margin-bottom:12px;\"\u003e積立シミュレーション\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;text-align:center;margin-bottom:12px;\"\u003e\n\u003cdiv style=\"padding:12px;background:#fef3c7;border-radius:8px;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e総積立額\u003c/div\u003e\n\u003cdiv id=\"totalSavings\" style=\"font-size:22px;font-weight:bold;color:#d97706;\"\u003e684万円\u003c/div\u003e\n\u003cdiv id=\"savingsDetail\" style=\"font-size:11px;color:#64748b;margin-top:2px;\"\u003e3万円×228ヶ月\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:12px;background:#fef3c7;border-radius:8px;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e教育費総額\u003c/div\u003e\n\u003cdiv id=\"costDisplay\" style=\"font-size:22px;font-weight:bold;color:#1e293b;\"\u003e1,577万円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"gapDisplay\" style=\"padding:12px;border-radius:8px;text-align:center;font-size:15px;font-weight:bold;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 児童手当活用パネル --\u003e\n\u003cdiv style=\"padding:16px;background:white;border-radius:10px;margin-bottom:0;\"\u003e\n\u003cdiv style=\"font-size:15px;font-weight:bold;margin-bottom:8px;\"\u003e児童手当を全額貯蓄した場合\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;color:#64748b;margin-bottom:10px;\"\u003e0〜3歳：15,000円/月 ／ 3歳〜中学卒業：10,000円/月\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:10px;text-align:center;\"\u003e\n\u003cdiv style=\"padding:10px;background:#fef3c7;border-radius:8px;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e児童手当 総受給額（目安）\u003c/div\u003e\n\u003cdiv style=\"font-size:20px;font-weight:bold;color:#d97706;\"\u003e約200万円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:10px;background:#fef3c7;border-radius:8px;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e積立後の実質不足額\u003c/div\u003e\n\u003cdiv id=\"gapAfterJidou\" style=\"font-size:20px;font-weight:bold;color:#dc2626;\"\u003e—\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:10px;font-size:12px;color:#64748b;\"\u003e※児童手当は所得制限・2024年改正後の金額を参考にした概算です。\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 進路パターン比較 --\u003e\n\u003cdiv style=\"margin-top:24px;padding:20px;background:#f8fafc;border-radius:12px;border:1px solid #e2e8f0;\"\u003e\n\u003cdiv style=\"font-size:16px;font-weight:bold;margin-bottom:14px;\"\u003e進路パターン比較\u003c/div\u003e\n\u003cdiv style=\"overflow-x:auto;\"\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;font-size:14px;\"\u003e\n\u003cthead\u003e\n\u003ctr style=\"background:#f1f5f9;\"\u003e\n\u003cth style=\"padding:10px 8px;text-align:left;border-bottom:2px solid #e2e8f0;\"\u003eパターン\u003c/th\u003e\n\u003cth style=\"padding:10px 8px;text-align:right;border-bottom:2px solid #e2e8f0;\"\u003e教育費総額\u003c/th\u003e\n\u003cth style=\"padding:10px 8px;text-align:right;border-bottom:2px solid #e2e8f0;\"\u003e月額換算\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody id=\"comparisonTable\"\u003e\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nvar EDU_COSTS = {\n  yochien:    { public: 17, private: 31,  years: 3 },\n  shougakkou: { public: 35, private: 167, years: 6 },\n  chugakkou:  { public: 54, private: 144, years: 3 },\n  koukou:     { public: 51, private: 105, years: 3 },\n  daigaku: {\n    national:    { cost: 54,  years: 4 },\n    private_bun: { cost: 95,  years: 4 },\n    private_ri:  { cost: 130, years: 4 },\n    medical:     { cost: 350, years: 6 },\n    none:        { cost: 0,   years: 0 }\n  }\n};\n\nvar STAGE_COLORS = {\n  yochien:    '#fbbf24',\n  shougakkou: '#f59e0b',\n  chugakkou:  '#d97706',\n  koukou:     '#b45309',\n  daigaku:    '#92400e'\n};\n\nvar STAGE_LABELS = {\n  yochien:    '幼稚園',\n  shougakkou: '小学校',\n  chugakkou:  '中学校',\n  koukou:     '高校',\n  daigaku:    '大学'\n};\n\nfunction getRadioVal(name) {\n  var radios = document.getElementsByName(name);\n  for (var i = 0; i \u003c radios.length; i++) {\n    if (radios[i].checked) return radios[i].value;\n  }\n  return '';\n}\n\nfunction setRadio(name, value) {\n  var radios = document.getElementsByName(name);\n  for (var i = 0; i \u003c radios.length; i++) {\n    radios[i].checked = (radios[i].value === value);\n  }\n}\n\nfunction setPreset(type) {\n  if (type === 'all_public') {\n    setRadio('yochien', 'public');\n    setRadio('shougakkou', 'public');\n    setRadio('chugakkou', 'public');\n    setRadio('koukou', 'public');\n    setRadio('daigaku', 'national');\n  } else if (type === 'high_public_univ_private') {\n    setRadio('yochien', 'public');\n    setRadio('shougakkou', 'public');\n    setRadio('chugakkou', 'public');\n    setRadio('koukou', 'public');\n    setRadio('daigaku', 'private_bun');\n  } else if (type === 'all_private') {\n    setRadio('yochien', 'private');\n    setRadio('shougakkou', 'private');\n    setRadio('chugakkou', 'private');\n    setRadio('koukou', 'private');\n    setRadio('daigaku', 'private_ri');\n  }\n  calcEdu();\n}\n\nfunction calcTotal(yochien, shougakkou, chugakkou, koukou, daigaku) {\n  var t = 0;\n  t += EDU_COSTS.yochien[yochien] * EDU_COSTS.yochien.years;\n  t += EDU_COSTS.shougakkou[shougakkou] * EDU_COSTS.shougakkou.years;\n  t += EDU_COSTS.chugakkou[chugakkou] * EDU_COSTS.chugakkou.years;\n  t += EDU_COSTS.koukou[koukou] * EDU_COSTS.koukou.years;\n  t += EDU_COSTS.daigaku[daigaku].cost * EDU_COSTS.daigaku[daigaku].years;\n  return t;\n}\n\nfunction fmtMan(val) {\n  if (val \u003e= 10000) {\n    return (val / 10000).toFixed(0) + '億' + (val % 10000 \u003e 0 ? (val % 10000) + '万' : '') + '円';\n  }\n  return val.toLocaleString() + '万円';\n}\n\nfunction calcEdu() {\n  var age = parseInt(document.getElementById('childAge').value);\n  var monthly = parseFloat(document.getElementById('monthlyAmt').value);\n\n  document.getElementById('childAgeVal').textContent = age + '歳';\n  document.getElementById('monthlyAmtVal').textContent = monthly + '万円';\n\n  var y = getRadioVal('yochien');\n  var s = getRadioVal('shougakkou');\n  var c = getRadioVal('chugakkou');\n  var k = getRadioVal('koukou');\n  var d = getRadioVal('daigaku');\n\n  // Stage subtotals\n  var stages = [\n    { key: 'yochien',    label: '幼稚園', annual: EDU_COSTS.yochien[y],          years: EDU_COSTS.yochien.years,    subtotal: EDU_COSTS.yochien[y] * EDU_COSTS.yochien.years },\n    { key: 'shougakkou', label: '小学校', annual: EDU_COSTS.shougakkou[s],        years: EDU_COSTS.shougakkou.years, subtotal: EDU_COSTS.shougakkou[s] * EDU_COSTS.shougakkou.years },\n    { key: 'chugakkou',  label: '中学校', annual: EDU_COSTS.chugakkou[c],         years: EDU_COSTS.chugakkou.years,  subtotal: EDU_COSTS.chugakkou[c] * EDU_COSTS.chugakkou.years },\n    { key: 'koukou',     label: '高校',   annual: EDU_COSTS.koukou[k],            years: EDU_COSTS.koukou.years,     subtotal: EDU_COSTS.koukou[k] * EDU_COSTS.koukou.years },\n    { key: 'daigaku',    label: '大学',   annual: EDU_COSTS.daigaku[d].cost,      years: EDU_COSTS.daigaku[d].years, subtotal: EDU_COSTS.daigaku[d].cost * EDU_COSTS.daigaku[d].years }\n  ];\n\n  var total = 0;\n  for (var i = 0; i \u003c stages.length; i++) total += stages[i].subtotal;\n\n  // Total years until graduation\n  var univEndAge = 3 + 3 + 6 + 3 + 3 + EDU_COSTS.daigaku[d].years; // 18 + univ years, from birth\n  var yearsLeft = Math.max(0, univEndAge - age);\n  var monthsLeft = yearsLeft * 12;\n\n  document.getElementById('totalCost').textContent = fmtMan(total);\n  document.getElementById('remainingYears').textContent = '大学卒業まで約' + yearsLeft + '年（' + age + '歳から）';\n\n  // Stacked bar\n  var barHTML = '';\n  var legendHTML = '';\n  for (var i = 0; i \u003c stages.length; i++) {\n    if (stages[i].subtotal === 0) continue;\n    var pct = total \u003e 0 ? (stages[i].subtotal / total * 100).toFixed(1) : 0;\n    barHTML += '\u003cdiv style=\"width:' + pct + '%;background:' + STAGE_COLORS[stages[i].key] + ';height:100%;transition:width 0.3s;\" title=\"' + stages[i].label + ': ' + stages[i].subtotal + '万円\"\u003e\u003c/div\u003e';\n    legendHTML += '\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:' + STAGE_COLORS[stages[i].key] + ';border-radius:2px;margin-right:3px;\"\u003e\u003c/span\u003e' + stages[i].label + ' ' + stages[i].subtotal + '万円\u003c/span\u003e';\n  }\n  document.getElementById('stackedBar').innerHTML = barHTML;\n  document.getElementById('barLegend').innerHTML = legendHTML;\n\n  // Breakdown table\n  var tbodyHTML = '';\n  for (var i = 0; i \u003c stages.length; i++) {\n    var st = stages[i];\n    var bg = i % 2 === 0 ? '#fff' : '#fffbeb';\n    var typeLabel = '';\n    if (st.key === 'yochien') typeLabel = y === 'public' ? '公立' : '私立';\n    else if (st.key === 'shougakkou') typeLabel = s === 'public' ? '公立' : '私立';\n    else if (st.key === 'chugakkou') typeLabel = c === 'public' ? '公立' : '私立';\n    else if (st.key === 'koukou') typeLabel = k === 'public' ? '公立' : '私立';\n    else {\n      var labels = { national: '国公立', private_bun: '私立文系', private_ri: '私立理系', medical: '私立医学部', none: 'なし' };\n      typeLabel = labels[d] || '';\n    }\n    tbodyHTML += '\u003ctr style=\"background:' + bg + ';\"\u003e';\n    tbodyHTML += '\u003ctd style=\"padding:9px 8px;\"\u003e' + st.label + '\u003cspan style=\"font-size:11px;color:#64748b;margin-left:6px;\"\u003e（' + typeLabel + '）\u003c/span\u003e\u003c/td\u003e';\n    tbodyHTML += '\u003ctd style=\"padding:9px 8px;text-align:center;\"\u003e' + st.years + '年\u003c/td\u003e';\n    tbodyHTML += '\u003ctd style=\"padding:9px 8px;text-align:right;\"\u003e' + (st.annual \u003e 0 ? st.annual + '万円' : '—') + '\u003c/td\u003e';\n    tbodyHTML += '\u003ctd style=\"padding:9px 8px;text-align:right;font-weight:bold;\"\u003e' + (st.subtotal \u003e 0 ? st.subtotal + '万円' : '—') + '\u003c/td\u003e';\n    tbodyHTML += '\u003c/tr\u003e';\n  }\n  document.getElementById('breakdownTable').innerHTML = tbodyHTML;\n  document.getElementById('breakdownFoot').innerHTML = '\u003ctr style=\"background:#d97706;color:white;\"\u003e\u003ctd colspan=\"3\" style=\"padding:10px 8px;font-weight:bold;\"\u003e合計\u003c/td\u003e\u003ctd style=\"padding:10px 8px;text-align:right;font-weight:bold;font-size:16px;\"\u003e' + total + '万円\u003c/td\u003e\u003c/tr\u003e';\n\n  // Savings simulation\n  var totalSavings = Math.round(monthly * monthsLeft);\n  document.getElementById('totalSavings').textContent = fmtMan(totalSavings);\n  document.getElementById('savingsDetail').textContent = monthly + '万円×' + monthsLeft + 'ヶ月';\n  document.getElementById('costDisplay').textContent = fmtMan(total);\n\n  var gap = totalSavings - total;\n  var gapEl = document.getElementById('gapDisplay');\n  if (gap \u003e= 0) {\n    gapEl.style.background = '#d1fae5';\n    gapEl.style.color = '#065f46';\n    gapEl.textContent = '余裕額: ' + fmtMan(gap) + '（積立で教育費をカバーできます）';\n  } else {\n    gapEl.style.background = '#fee2e2';\n    gapEl.style.color = '#991b1b';\n    gapEl.textContent = '不足額: ' + fmtMan(Math.abs(gap)) + '（積立額を増やすか他の資金源を検討しましょう）';\n  }\n\n  // 児童手当後の不足\n  var jidou = 200; // 約200万円\n  var gapAfterJidou = gap + jidou;\n  var gapJEl = document.getElementById('gapAfterJidou');\n  if (gapAfterJidou \u003e= 0) {\n    gapJEl.style.color = '#065f46';\n    gapJEl.textContent = '余裕額 ' + fmtMan(gapAfterJidou);\n  } else {\n    gapJEl.style.color = '#dc2626';\n    gapJEl.textContent = '不足額 ' + fmtMan(Math.abs(gapAfterJidou));\n  }\n\n  // Comparison table\n  var allPublic    = calcTotal('public', 'public', 'public', 'public', 'national');\n  var mixPattern   = calcTotal('public', 'public', 'public', 'public', 'private_bun');\n  var allPrivate   = calcTotal('private', 'private', 'private', 'private', 'private_ri');\n  var userPattern  = total;\n\n  var univTotalYears = 3 + 6 + 3 + 3 + EDU_COSTS.daigaku[d].years;\n  var allPubMonths = univTotalYears * 12;\n\n  var patterns = [\n    { label: 'オール公立（国公立大）', total: allPublic,   months: allPubMonths },\n    { label: '高校まで公立＋私立文系大', total: mixPattern,  months: allPubMonths },\n    { label: 'オール私立（私立理系大）', total: allPrivate,  months: allPubMonths },\n    { label: 'あなたの選択', total: userPattern, months: monthsLeft, highlight: true }\n  ];\n\n  var compHTML = '';\n  for (var i = 0; i \u003c patterns.length; i++) {\n    var p = patterns[i];\n    var monthlyEq = p.months \u003e 0 ? Math.ceil(p.total / p.months * 10) / 10 : 0;\n    var bg = p.highlight ? '#fef3c7' : (i % 2 === 0 ? '#fff' : '#f8fafc');\n    var fw = p.highlight ? 'bold' : 'normal';\n    compHTML += '\u003ctr style=\"background:' + bg + ';font-weight:' + fw + ';\"\u003e';\n    compHTML += '\u003ctd style=\"padding:9px 8px;border-bottom:1px solid #e2e8f0;\"\u003e' + p.label + (p.highlight ? ' ★' : '') + '\u003c/td\u003e';\n    compHTML += '\u003ctd style=\"padding:9px 8px;text-align:right;border-bottom:1px solid #e2e8f0;color:#d97706;font-weight:bold;\"\u003e' + fmtMan(p.total) + '\u003c/td\u003e';\n    compHTML += '\u003ctd style=\"padding:9px 8px;text-align:right;border-bottom:1px solid #e2e8f0;\"\u003e' + monthlyEq + '万円\u003c/td\u003e';\n    compHTML += '\u003c/tr\u003e';\n  }\n  document.getElementById('comparisonTable').innerHTML = compHTML;\n}\n\ncalcEdu();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"教育費の目安と準備方法\"\u003e教育費の目安と準備方法\u003c/h2\u003e\n\u003cp\u003e文部科学省「子供の学習費調査」によると、子供1人にかかる教育費は進路によって大きく異なります。\u003c/p\u003e","title":"教育費シミュレーター｜子供1人の学費総額を自動計算【2026年版】"},{"content":" 賃貸 vs 購入シミュレーター 賃貸と持ち家の長期コストを比較して、あなたに最適な選択を見つけよう\n賃貸の場合 月額家賃（円） 家賃年間上昇率（%） 火災保険料（円/月） \u0026lt;!-- 購入カード --\u0026gt; \u0026lt;div class=\u0026quot;rvb-card buy-card\u0026quot;\u0026gt; \u0026lt;h2\u0026gt;購入の場合\u0026lt;/h2\u0026gt; \u0026lt;div class=\u0026quot;rvb-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;物件価格（円）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;rvb-home-price\u0026quot; value=\u0026quot;50000000\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;100000\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rvb-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;頭金割合（%）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;rvb-down-pct\u0026quot; value=\u0026quot;20\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; step=\u0026quot;0.5\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rvb-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;住宅ローン金利（%）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;rvb-interest-rate\u0026quot; value=\u0026quot;1.5\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;20\u0026quot; step=\u0026quot;0.05\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rvb-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;返済期間（年）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;rvb-loan-term\u0026quot; value=\u0026quot;35\u0026quot; min=\u0026quot;5\u0026quot; max=\u0026quot;50\u0026quot; step=\u0026quot;5\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rvb-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;固定資産税（物件価格の %/年）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;rvb-property-tax\u0026quot; value=\u0026quot;0.7\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;5\u0026quot; step=\u0026quot;0.05\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rvb-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;管理費・修繕積立金（円/月）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;rvb-hoa\u0026quot; value=\u0026quot;20000\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;1000\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rvb-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;維持修繕費（物件価格の %/年）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;rvb-maintenance\u0026quot; value=\u0026quot;0.5\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;5\u0026quot; step=\u0026quot;0.1\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rvb-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;火災・地震保険（円/月）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;rvb-home-insurance\u0026quot; value=\u0026quot;5000\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;500\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 共通の前提条件 投資収益率（%/年） 不動産価格上昇率（%/年） 売却コスト（物件価格の %） シミュレーション期間 15年 累積純コストの推移 賃貸（純コスト） 購入（純コスト） \u0026#8987; 計算中... 賃貸の総純コスト 購入の総純コスト 差額 住宅ローン管理を効率化 — 毎月の返済額・資産推移・税務処理をまとめて自動化しましょう。\nfreee会計で資産管理を自動化 関連ツール 借金返済計算 → 借金返済計算ツール ローン比較 → ローン比較ツール 住宅ローン借入可能額 → 住宅ローン借入可能額ツール ","permalink":"https://productivity-works.com/ja/tools/rent-vs-buy-calculator/","summary":"\u003cdiv id=\"rvb-app\"\u003e\n\u003cstyle\u003e\n#rvb-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, -apple-system, BlinkMacSystemFont, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  color: #1a1a2e;\n  background: #f8f9ff;\n  border-radius: 16px;\n  overflow: hidden;\n  box-shadow: 0 4px 24px rgba(0,0,0,0.08);\n}\n#rvb-app h2 {\n  margin: 0;\n  font-size: 1.05rem;\n  font-weight: 700;\n  letter-spacing: 0.02em;\n}\n#rvb-app .rvb-header {\n  background: linear-gradient(135deg, #16213e 0%, #0f3460 100%);\n  color: #fff;\n  padding: 28px 32px;\n  text-align: center;\n}\n#rvb-app .rvb-header h1 {\n  margin: 0 0 8px;\n  font-size: 1.5rem;\n  font-weight: 800;\n}\n#rvb-app .rvb-header p {\n  margin: 0;\n  opacity: 0.8;\n  font-size: 0.93rem;\n}\n#rvb-app .rvb-body {\n  padding: 28px 32px;\n}\n#rvb-app .rvb-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n  margin-bottom: 20px;\n}\n@media (max-width: 620px) {\n  #rvb-app .rvb-grid { grid-template-columns: 1fr; }\n  #rvb-app .rvb-body { padding: 20px 16px; }\n}\n#rvb-app .rvb-card {\n  background: #fff;\n  border-radius: 12px;\n  padding: 20px;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n}\n#rvb-app .rvb-card.rent-card { border-top: 4px solid #3498db; }\n#rvb-app .rvb-card.buy-card  { border-top: 4px solid #e67e22; }\n#rvb-app .rvb-card h2 { margin-bottom: 16px; }\n#rvb-app .rvb-card.rent-card h2 { color: #3498db; }\n#rvb-app .rvb-card.buy-card h2  { color: #e67e22; }\n#rvb-app .rvb-field {\n  margin-bottom: 14px;\n}\n#rvb-app .rvb-field label {\n  display: block;\n  font-size: 0.8rem;\n  font-weight: 600;\n  color: #555;\n  margin-bottom: 5px;\n  letter-spacing: 0.03em;\n}\n#rvb-app .rvb-field input[type=\"number\"],\n#rvb-app .rvb-field input[type=\"range\"] {\n  width: 100%;\n  box-sizing: border-box;\n}\n#rvb-app .rvb-field input[type=\"number\"] {\n  padding: 8px 12px;\n  border: 1.5px solid #dde1f0;\n  border-radius: 8px;\n  font-size: 0.97rem;\n  color: #1a1a2e;\n  background: #f8f9ff;\n  transition: border-color 0.2s;\n  -moz-appearance: textfield;\n}\n#rvb-app .rvb-field input[type=\"number\"]::-webkit-outer-spin-button,\n#rvb-app .rvb-field input[type=\"number\"]::-webkit-inner-spin-button { -webkit-appearance: none; }\n#rvb-app .rvb-field input[type=\"number\"]:focus {\n  outline: none;\n  border-color: #0f3460;\n  background: #fff;\n}\n#rvb-app .rvb-shared-card {\n  background: #fff;\n  border-radius: 12px;\n  padding: 20px;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  margin-bottom: 20px;\n  border-top: 4px solid #6c5ce7;\n}\n#rvb-app .rvb-shared-card h2 { color: #6c5ce7; margin-bottom: 16px; }\n#rvb-app .rvb-shared-inner {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 14px;\n}\n@media (max-width: 620px) {\n  #rvb-app .rvb-shared-inner { grid-template-columns: 1fr 1fr; }\n}\n#rvb-app .rvb-timeline-card {\n  background: #fff;\n  border-radius: 12px;\n  padding: 20px;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  margin-bottom: 20px;\n}\n#rvb-app .rvb-timeline-card label {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  font-weight: 700;\n  font-size: 1rem;\n  margin-bottom: 10px;\n}\n#rvb-app .rvb-timeline-card label span {\n  background: #0f3460;\n  color: #fff;\n  padding: 3px 12px;\n  border-radius: 20px;\n  font-size: 0.93rem;\n}\n#rvb-app input[type=\"range\"] {\n  -webkit-appearance: none;\n  height: 6px;\n  border-radius: 3px;\n  background: #dde1f0;\n  cursor: pointer;\n}\n#rvb-app input[type=\"range\"]::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  background: #0f3460;\n  cursor: pointer;\n  box-shadow: 0 2px 6px rgba(15,52,96,0.3);\n}\n#rvb-app .rvb-chart-card {\n  background: #fff;\n  border-radius: 12px;\n  padding: 20px;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  margin-bottom: 20px;\n}\n#rvb-app .rvb-chart-card h2 { margin-bottom: 16px; color: #1a1a2e; }\n#rvb-app canvas {\n  width: 100% !important;\n  max-width: 100%;\n  border-radius: 8px;\n}\n#rvb-app .rvb-legend {\n  display: flex;\n  gap: 20px;\n  margin-top: 10px;\n  flex-wrap: wrap;\n}\n#rvb-app .rvb-legend-item {\n  display: flex;\n  align-items: center;\n  gap: 7px;\n  font-size: 0.85rem;\n  font-weight: 600;\n}\n#rvb-app .rvb-legend-dot {\n  width: 14px;\n  height: 14px;\n  border-radius: 3px;\n  flex-shrink: 0;\n}\n#rvb-app .rvb-result-card {\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 20px;\n  text-align: center;\n}\n#rvb-app .rvb-result-card.rent-wins {\n  background: linear-gradient(135deg, #e8f4fd, #d0eaf9);\n  border: 2px solid #3498db;\n}\n#rvb-app .rvb-result-card.buy-wins {\n  background: linear-gradient(135deg, #fef3e8, #fde8cc);\n  border: 2px solid #e67e22;\n}\n#rvb-app .rvb-result-card.tie {\n  background: linear-gradient(135deg, #f3f0ff, #e8e3ff);\n  border: 2px solid #6c5ce7;\n}\n#rvb-app .rvb-result-title {\n  font-size: 1.25rem;\n  font-weight: 800;\n  margin-bottom: 8px;\n}\n#rvb-app .rvb-result-subtitle {\n  font-size: 0.9rem;\n  opacity: 0.8;\n  margin-bottom: 16px;\n}\n#rvb-app .rvb-stats-row {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 12px;\n  margin-top: 8px;\n}\n@media (max-width: 540px) {\n  #rvb-app .rvb-stats-row { grid-template-columns: 1fr; }\n}\n#rvb-app .rvb-stat-box {\n  background: #fff;\n  border-radius: 10px;\n  padding: 14px 10px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.07);\n}\n#rvb-app .rvb-stat-label {\n  font-size: 0.72rem;\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  color: #777;\n  margin-bottom: 4px;\n}\n#rvb-app .rvb-stat-value {\n  font-size: 1.05rem;\n  font-weight: 800;\n  color: #1a1a2e;\n}\n#rvb-app .rvb-breakeven {\n  background: #fff;\n  border-radius: 12px;\n  padding: 18px 20px;\n  margin-bottom: 20px;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  display: flex;\n  align-items: center;\n  gap: 14px;\n}\n#rvb-app .rvb-breakeven-icon {\n  font-size: 1.8rem;\n  flex-shrink: 0;\n}\n#rvb-app .rvb-breakeven-text strong {\n  display: block;\n  font-size: 0.97rem;\n  font-weight: 700;\n  margin-bottom: 2px;\n}\n#rvb-app .rvb-breakeven-text span {\n  font-size: 0.85rem;\n  color: #555;\n}\n#rvb-app .rvb-cta {\n  background: linear-gradient(135deg, #1a3a5c 0%, #0f5c46 100%);\n  border-radius: 12px;\n  padding: 22px 24px;\n  margin-bottom: 20px;\n  color: #fff;\n}\n#rvb-app .rvb-cta p {\n  margin: 0 0 10px;\n  font-size: 0.92rem;\n  opacity: 0.92;\n  line-height: 1.6;\n}\n#rvb-app .rvb-cta a {\n  display: inline-block;\n  background: #fff;\n  color: #0f3460;\n  padding: 10px 20px;\n  border-radius: 8px;\n  font-weight: 700;\n  text-decoration: none;\n  font-size: 0.9rem;\n  transition: opacity 0.15s;\n}\n#rvb-app .rvb-cta a:hover { opacity: 0.85; }\n\u003c/style\u003e\n\u003cdiv class=\"rvb-header\"\u003e\n  \u003ch1\u003e賃貸 vs 購入シミュレーター\u003c/h1\u003e\n  \u003cp\u003e賃貸と持ち家の長期コストを比較して、あなたに最適な選択を見つけよう\u003c/p\u003e","title":"賃貸vs購入シミュレーター - 賃貸と持ち家どちらがお得？"},{"content":" Cron式ジェネレーター よく使うプリセット 毎分 毎時0分 毎日0時 毎日9時 毎週月曜0時 毎週月曜9時 毎月1日0時 毎年1月1日 5分ごと 15分ごと 30分ごと 平日9〜17時（毎時） 式を直接入力・解析 解析 ビジュアルビルダー 分 (Minute) 毎分 (*) N分ごと 特定の分 範囲指定 時 (Hour) 毎時 (*) N時間ごと 特定の時間 範囲指定 日 (Day) 毎日 (*) 特定の日 範囲指定 月 (Month) 毎月 (*) 特定の月 範囲指定 曜日 (Weekday) 毎曜日 (*) 特定の曜日 範囲指定 * * * * * コピーしました！ コピー 毎分実行されます。 次の5回の実行時刻 連携ツール紹介 freee会計で業務を自動化しませんか？ Cron定期実行と freee API を組み合わせることで、売上集計・請求書作成・経費仕訳を完全自動化できます。スモールビジネスから上場企業まで対応のクラウド会計ソフトです。 freeeを無料で試す \u0026rarr; ","permalink":"https://productivity-works.com/ja/tools/cron-generator/","summary":"\u003cstyle\u003e\n#cron-app *,\n#cron-app *::before,\n#cron-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#cron-app {\n  font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace;\n  background: #0f172a;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 28px;\n  max-width: 860px;\n  margin: 0 auto;\n}\n\n#cron-app h2 {\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  font-size: 1.4rem;\n  font-weight: 700;\n  color: #84cc16;\n  margin-bottom: 20px;\n  letter-spacing: -0.01em;\n}\n\n#cron-app .ca-section-label {\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  font-size: 0.7rem;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #64748b;\n  margin-bottom: 10px;\n}\n\n/* Presets */\n#cron-app .ca-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 24px;\n}\n\n#cron-app .ca-preset-btn {\n  background: #1e293b;\n  border: 1px solid #334155;\n  color: #94a3b8;\n  font-size: 0.75rem;\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  padding: 6px 12px;\n  border-radius: 6px;\n  cursor: pointer;\n  transition: all 0.15s;\n  white-space: nowrap;\n}\n\n#cron-app .ca-preset-btn:hover {\n  background: #253347;\n  border-color: #84cc16;\n  color: #84cc16;\n}\n\n/* Manual input */\n#cron-app .ca-manual-row {\n  display: flex;\n  gap: 10px;\n  margin-bottom: 24px;\n  align-items: center;\n}\n\n#cron-app .ca-manual-input {\n  flex: 1;\n  background: #1e293b;\n  border: 1px solid #334155;\n  color: #f1f5f9;\n  font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, monospace;\n  font-size: 1rem;\n  padding: 10px 14px;\n  border-radius: 8px;\n  outline: none;\n  transition: border-color 0.15s;\n}\n\n#cron-app .ca-manual-input:focus {\n  border-color: #84cc16;\n}\n\n#cron-app .ca-parse-btn,\n#cron-app .ca-copy-btn {\n  background: #84cc16;\n  border: none;\n  color: #0f172a;\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  font-weight: 700;\n  font-size: 0.8rem;\n  padding: 10px 16px;\n  border-radius: 8px;\n  cursor: pointer;\n  transition: background 0.15s;\n  white-space: nowrap;\n}\n\n#cron-app .ca-parse-btn:hover,\n#cron-app .ca-copy-btn:hover {\n  background: #a3e635;\n}\n\n/* Builder grid */\n#cron-app .ca-builder {\n  display: grid;\n  grid-template-columns: repeat(5, 1fr);\n  gap: 12px;\n  margin-bottom: 24px;\n}\n\n@media (max-width: 600px) {\n  #cron-app .ca-builder {\n    grid-template-columns: repeat(2, 1fr);\n  }\n}\n\n#cron-app .ca-field {\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 10px;\n  padding: 14px 12px;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n#cron-app .ca-field-label {\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #84cc16;\n}\n\n#cron-app .ca-field select,\n#cron-app .ca-field input[type=\"text\"] {\n  background: #0f172a;\n  border: 1px solid #334155;\n  color: #f1f5f9;\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  font-size: 0.78rem;\n  padding: 6px 8px;\n  border-radius: 6px;\n  outline: none;\n  width: 100%;\n  transition: border-color 0.15s;\n  cursor: pointer;\n}\n\n#cron-app .ca-field input[type=\"text\"] {\n  font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, monospace;\n  cursor: text;\n}\n\n#cron-app .ca-field select:focus,\n#cron-app .ca-field input[type=\"text\"]:focus {\n  border-color: #84cc16;\n}\n\n#cron-app .ca-field .ca-field-hint {\n  font-size: 0.63rem;\n  color: #475569;\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n}\n\n/* Result */\n#cron-app .ca-result-box {\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 10px;\n  padding: 18px 20px;\n  margin-bottom: 16px;\n}\n\n#cron-app .ca-expr-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 12px;\n  margin-bottom: 12px;\n}\n\n#cron-app .ca-expr-display {\n  font-size: 1.35rem;\n  font-weight: 700;\n  color: #84cc16;\n  letter-spacing: 0.08em;\n  word-break: break-all;\n  font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, monospace;\n}\n\n#cron-app .ca-description {\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  font-size: 0.9rem;\n  color: #cbd5e1;\n  line-height: 1.6;\n  padding-top: 10px;\n  border-top: 1px solid #334155;\n}\n\n#cron-app .ca-error {\n  color: #f87171;\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  font-size: 0.85rem;\n  padding-top: 10px;\n  border-top: 1px solid #334155;\n}\n\n/* Next runs */\n#cron-app .ca-next-box {\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 10px;\n  padding: 16px 20px;\n  margin-bottom: 20px;\n}\n\n#cron-app .ca-next-list {\n  list-style: none;\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  margin-top: 10px;\n}\n\n#cron-app .ca-next-list li {\n  font-size: 0.82rem;\n  color: #94a3b8;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, monospace;\n}\n\n#cron-app .ca-next-list li::before {\n  content: '';\n  display: inline-block;\n  width: 6px;\n  height: 6px;\n  border-radius: 50%;\n  background: #84cc16;\n  flex-shrink: 0;\n}\n\n#cron-app .ca-copy-feedback {\n  font-size: 0.72rem;\n  color: #84cc16;\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  opacity: 0;\n  transition: opacity 0.3s;\n  white-space: nowrap;\n}\n\n#cron-app .ca-copy-feedback.visible {\n  opacity: 1;\n}\n\n/* freee CTA */\n#cron-app .ca-freee-cta {\n  background: linear-gradient(135deg, #1e293b 0%, #162032 100%);\n  border: 1px solid #334155;\n  border-left: 3px solid #84cc16;\n  border-radius: 10px;\n  padding: 18px 20px;\n  margin-top: 8px;\n  display: flex;\n  align-items: flex-start;\n  gap: 16px;\n}\n\n#cron-app .ca-freee-cta-body {\n  flex: 1;\n}\n\n#cron-app .ca-freee-cta-label {\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #84cc16;\n  margin-bottom: 6px;\n}\n\n#cron-app .ca-freee-cta-title {\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  font-size: 0.92rem;\n  font-weight: 700;\n  color: #f1f5f9;\n  margin-bottom: 4px;\n  line-height: 1.4;\n}\n\n#cron-app .ca-freee-cta-desc {\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  font-size: 0.78rem;\n  color: #94a3b8;\n  line-height: 1.5;\n}\n\n#cron-app .ca-freee-btn {\n  display: inline-block;\n  margin-top: 12px;\n  background: #84cc16;\n  color: #0f172a;\n  font-family: ui-sans-serif, system-ui, \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  font-weight: 700;\n  font-size: 0.78rem;\n  padding: 8px 16px;\n  border-radius: 6px;\n  text-decoration: none;\n  transition: background 0.15s;\n  white-space: nowrap;\n}\n\n#cron-app .ca-freee-btn:hover {\n  background: #a3e635;\n}\n\u003c/style\u003e\n\u003cdiv id=\"cron-app\"\u003e\n\u003ch2\u003eCron式ジェネレーター\u003c/h2\u003e\n\u003cdiv class=\"ca-section-label\"\u003eよく使うプリセット\u003c/div\u003e\n\u003cdiv class=\"ca-presets\"\u003e\n  \u003cbutton class=\"ca-preset-btn\" data-expr=\"* * * * *\"\u003e毎分\u003c/button\u003e\n  \u003cbutton class=\"ca-preset-btn\" data-expr=\"0 * * * *\"\u003e毎時0分\u003c/button\u003e\n  \u003cbutton class=\"ca-preset-btn\" data-expr=\"0 0 * * *\"\u003e毎日0時\u003c/button\u003e\n  \u003cbutton class=\"ca-preset-btn\" data-expr=\"0 9 * * *\"\u003e毎日9時\u003c/button\u003e\n  \u003cbutton class=\"ca-preset-btn\" data-expr=\"0 0 * * 1\"\u003e毎週月曜0時\u003c/button\u003e\n  \u003cbutton class=\"ca-preset-btn\" data-expr=\"0 9 * * 1\"\u003e毎週月曜9時\u003c/button\u003e\n  \u003cbutton class=\"ca-preset-btn\" data-expr=\"0 0 1 * *\"\u003e毎月1日0時\u003c/button\u003e\n  \u003cbutton class=\"ca-preset-btn\" data-expr=\"0 0 1 1 *\"\u003e毎年1月1日\u003c/button\u003e\n  \u003cbutton class=\"ca-preset-btn\" data-expr=\"*/5 * * * *\"\u003e5分ごと\u003c/button\u003e\n  \u003cbutton class=\"ca-preset-btn\" data-expr=\"*/15 * * * *\"\u003e15分ごと\u003c/button\u003e\n  \u003cbutton class=\"ca-preset-btn\" data-expr=\"*/30 * * * *\"\u003e30分ごと\u003c/button\u003e\n  \u003cbutton class=\"ca-preset-btn\" data-expr=\"0 9-17 * * 1-5\"\u003e平日9〜17時（毎時）\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ca-section-label\"\u003e式を直接入力・解析\u003c/div\u003e\n\u003cdiv class=\"ca-manual-row\"\u003e\n  \u003cinput class=\"ca-manual-input\" id=\"ca-manual\" type=\"text\" placeholder=\"例: */5 * * * *\" spellcheck=\"false\" /\u003e\n  \u003cbutton class=\"ca-parse-btn\" id=\"ca-parse-btn\"\u003e解析\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ca-section-label\"\u003eビジュアルビルダー\u003c/div\u003e\n\u003cdiv class=\"ca-builder\"\u003e\n  \u003cdiv class=\"ca-field\"\u003e\n    \u003cdiv class=\"ca-field-label\"\u003e分 (Minute)\u003c/div\u003e\n    \u003cselect id=\"ca-min-mode\"\u003e\n      \u003coption value=\"any\"\u003e毎分 (*)\u003c/option\u003e\n      \u003coption value=\"every\"\u003eN分ごと\u003c/option\u003e\n      \u003coption value=\"specific\"\u003e特定の分\u003c/option\u003e\n      \u003coption value=\"range\"\u003e範囲指定\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cinput type=\"text\" id=\"ca-min-val\" placeholder=\"例: 0,30\" style=\"display:none\" /\u003e\n    \u003cdiv class=\"ca-field-hint\" id=\"ca-min-hint\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ca-field\"\u003e\n    \u003cdiv class=\"ca-field-label\"\u003e時 (Hour)\u003c/div\u003e\n    \u003cselect id=\"ca-hr-mode\"\u003e\n      \u003coption value=\"any\"\u003e毎時 (*)\u003c/option\u003e\n      \u003coption value=\"every\"\u003eN時間ごと\u003c/option\u003e\n      \u003coption value=\"specific\"\u003e特定の時間\u003c/option\u003e\n      \u003coption value=\"range\"\u003e範囲指定\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cinput type=\"text\" id=\"ca-hr-val\" placeholder=\"例: 9,17\" style=\"display:none\" /\u003e\n    \u003cdiv class=\"ca-field-hint\" id=\"ca-hr-hint\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ca-field\"\u003e\n    \u003cdiv class=\"ca-field-label\"\u003e日 (Day)\u003c/div\u003e\n    \u003cselect id=\"ca-dom-mode\"\u003e\n      \u003coption value=\"any\"\u003e毎日 (*)\u003c/option\u003e\n      \u003coption value=\"specific\"\u003e特定の日\u003c/option\u003e\n      \u003coption value=\"range\"\u003e範囲指定\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cinput type=\"text\" id=\"ca-dom-val\" placeholder=\"例: 1,15\" style=\"display:none\" /\u003e\n    \u003cdiv class=\"ca-field-hint\" id=\"ca-dom-hint\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ca-field\"\u003e\n    \u003cdiv class=\"ca-field-label\"\u003e月 (Month)\u003c/div\u003e\n    \u003cselect id=\"ca-mon-mode\"\u003e\n      \u003coption value=\"any\"\u003e毎月 (*)\u003c/option\u003e\n      \u003coption value=\"specific\"\u003e特定の月\u003c/option\u003e\n      \u003coption value=\"range\"\u003e範囲指定\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cinput type=\"text\" id=\"ca-mon-val\" placeholder=\"例: 1,6,12\" style=\"display:none\" /\u003e\n    \u003cdiv class=\"ca-field-hint\" id=\"ca-mon-hint\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ca-field\"\u003e\n    \u003cdiv class=\"ca-field-label\"\u003e曜日 (Weekday)\u003c/div\u003e\n    \u003cselect id=\"ca-dow-mode\"\u003e\n      \u003coption value=\"any\"\u003e毎曜日 (*)\u003c/option\u003e\n      \u003coption value=\"specific\"\u003e特定の曜日\u003c/option\u003e\n      \u003coption value=\"range\"\u003e範囲指定\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cinput type=\"text\" id=\"ca-dow-val\" placeholder=\"0=日〜6=土\" style=\"display:none\" /\u003e\n    \u003cdiv class=\"ca-field-hint\" id=\"ca-dow-hint\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ca-result-box\"\u003e\n  \u003cdiv class=\"ca-expr-row\"\u003e\n    \u003cdiv class=\"ca-expr-display\" id=\"ca-expr-display\"\u003e* * * * *\u003c/div\u003e\n    \u003cdiv style=\"display:flex;align-items:center;gap:10px\"\u003e\n      \u003cspan class=\"ca-copy-feedback\" id=\"ca-copy-feedback\"\u003eコピーしました！\u003c/span\u003e\n      \u003cbutton class=\"ca-copy-btn\" id=\"ca-copy-btn\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ca-description\" id=\"ca-description\"\u003e毎分実行されます。\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ca-next-box\"\u003e\n  \u003cdiv class=\"ca-section-label\"\u003e次の5回の実行時刻\u003c/div\u003e\n  \u003cul class=\"ca-next-list\" id=\"ca-next-list\"\u003e\u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ca-freee-cta\"\u003e\n  \u003cdiv class=\"ca-freee-cta-body\"\u003e\n    \u003cdiv class=\"ca-freee-cta-label\"\u003e連携ツール紹介\u003c/div\u003e\n    \u003cdiv class=\"ca-freee-cta-title\"\u003efreee会計で業務を自動化しませんか？\u003c/div\u003e\n    \u003cdiv class=\"ca-freee-cta-desc\"\u003e\n      Cron定期実行と freee API を組み合わせることで、売上集計・請求書作成・経費仕訳を完全自動化できます。スモールビジネスから上場企業まで対応のクラウド会計ソフトです。\n    \u003c/div\u003e\n    \u003ca class=\"ca-freee-btn\" href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreeeを無料で試す \u0026rarr;\u003c/a\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  // ── DOM refs ─────────────────────────────────────────────────────────────\n  const manual      = document.getElementById('ca-manual');\n  const parseBtn    = document.getElementById('ca-parse-btn');\n  const exprDisplay = document.getElementById('ca-expr-display');\n  const descEl      = document.getElementById('ca-description');\n  const nextList    = document.getElementById('ca-next-list');\n  const copyBtn     = document.getElementById('ca-copy-btn');\n  const copyFb      = document.getElementById('ca-copy-feedback');\n\n  const fields = ['min', 'hr', 'dom', 'mon', 'dow'];\n  const modes  = {};\n  const vals   = {};\n  const hints  = {};\n\n  fields.forEach(f =\u003e {\n    modes[f] = document.getElementById('ca-' + f + '-mode');\n    vals[f]  = document.getElementById('ca-' + f + '-val');\n    hints[f] = document.getElementById('ca-' + f + '-hint');\n  });\n\n  // ── Mode → show/hide value input ────────────────────────────────────────\n  function updateFieldUI(f) {\n    const m = modes[f].value;\n    const needVal = m !== 'any';\n    vals[f].style.display = needVal ? 'block' : 'none';\n\n    const hintMap = {\n      every:    { min: 'N (1〜59)', hr: 'N (1〜23)', dom: '', mon: '', dow: '' },\n      specific: { min: '例: 0,15,30,45', hr: '例: 9,12,18', dom: '例: 1,15', mon: '例: 1,6,12', dow: '0=日 1=月 … 6=土' },\n      range:    { min: '例: 0-29', hr: '例: 9-17', dom: '例: 1-15', mon: '例: 1-6', dow: '例: 1-5' },\n    };\n    hints[f].textContent = (m === 'any') ? '' : (hintMap[m] ? hintMap[m][f] || '' : '');\n\n    if (m !== 'any' \u0026\u0026 !vals[f].value) {\n      const defaults = {\n        every:    { min: '5', hr: '2', dom: '', mon: '', dow: '' },\n        specific: { min: '0', hr: '9', dom: '1', mon: '1', dow: '1' },\n        range:    { min: '0-29', hr: '9-17', dom: '1-15', mon: '1-6', dow: '1-5' },\n      };\n      vals[f].value = defaults[m] ? (defaults[m][f] || '') : '';\n    }\n    rebuild();\n  }\n\n  fields.forEach(f =\u003e {\n    modes[f].addEventListener('change', () =\u003e updateFieldUI(f));\n    vals[f].addEventListener('input', rebuild);\n  });\n\n  // ── Build expression from UI ─────────────────────────────────────────────\n  function fieldExpr(f) {\n    const m = modes[f].value;\n    const v = vals[f].value.trim();\n    if (m === 'any') return '*';\n    if (m === 'every') {\n      const n = parseInt(v, 10);\n      if (!v || isNaN(n) || n \u003c 1) return '*';\n      return '*/' + n;\n    }\n    return v || '*';\n  }\n\n  function rebuild() {\n    const expr = fields.map(f =\u003e fieldExpr(f)).join(' ');\n    setExpression(expr);\n  }\n\n  // ── Parse \u0026 describe ─────────────────────────────────────────────────────\n  function setExpression(expr) {\n    expr = expr.trim();\n    exprDisplay.textContent = expr;\n    manual.value = expr;\n\n    const result = parseExpr(expr);\n    if (result.error) {\n      descEl.className = 'ca-error';\n      descEl.textContent = result.error;\n      nextList.innerHTML = '';\n    } else {\n      descEl.className = 'ca-description';\n      descEl.textContent = result.description;\n      renderNext(expr);\n    }\n  }\n\n  function parseExpr(expr) {\n    const parts = expr.trim().split(/\\s+/);\n    if (parts.length !== 5)\n      return { error: 'Cron式は「分 時 日 月 曜日」の5フィールドで記述してください。' };\n\n    const [min, hr, dom, mon, dow] = parts;\n    const ranges = [\n      [min, 0, 59, '分'],\n      [hr,  0, 23, '時'],\n      [dom, 1, 31, '日'],\n      [mon, 1, 12, '月'],\n      [dow, 0,  7, '曜日'],\n    ];\n    for (const [f, lo, hi, name] of ranges) {\n      const err = validateField(f, lo, hi);\n      if (err) return { error: name + 'の値が不正です: ' + err };\n    }\n\n    return { description: describe(min, hr, dom, mon, dow) };\n  }\n\n  function validateField(f, lo, hi) {\n    if (f === '*') return null;\n    if (/^\\*\\/\\d+$/.test(f)) {\n      const n = parseInt(f.slice(2), 10);\n      if (n \u003c 1) return 'ステップは1以上にしてください';\n      return null;\n    }\n    const parts = f.split(',');\n    for (const p of parts) {\n      if (p.includes('-')) {\n        const [a, b] = p.split('-').map(Number);\n        if (isNaN(a) || isNaN(b) || a \u003c lo || b \u003e hi || a \u003e b)\n          return '\"' + p + '\" は有効な範囲ではありません（' + lo + '〜' + hi + '）';\n      } else {\n        const n = Number(p);\n        if (isNaN(n) || n \u003c lo || n \u003e hi)\n          return '\"' + p + '\" は範囲外です（' + lo + '〜' + hi + '）';\n      }\n    }\n    return null;\n  }\n\n  // ── Human-readable description (Japanese) ───────────────────────────────\n  const MONTHS_JA = ['','1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'];\n  const DAYS_JA   = ['日曜','月曜','火曜','水曜','木曜','金曜','土曜','日曜'];\n\n  function fmtField(f, type) {\n    if (f === '*') return null;\n    if (f.startsWith('*/')) {\n      const n = f.slice(2);\n      const label = { min: '分', hr: '時間', dom: '日', mon: 'ヶ月', dow: '曜日' }[type];\n      return n + label + 'ごと';\n    }\n    const parts = f.split(',');\n    const fmted = parts.map(p =\u003e {\n      if (p.includes('-')) {\n        const [a, b] = p.split('-');\n        if (type === 'mon') return MONTHS_JA[+a] + '〜' + MONTHS_JA[+b];\n        if (type === 'dow') return DAYS_JA[+a] + '〜' + DAYS_JA[+b];\n        return p;\n      }\n      if (type === 'mon') return MONTHS_JA[+p] || p;\n      if (type === 'dow') return DAYS_JA[+p] || p;\n      return p;\n    });\n    return fmted.join('、');\n  }\n\n  function describe(min, hr, dom, mon, dow) {\n    let time = '';\n    const pad = n =\u003e String(n).padStart(2, '0');\n\n    if (min === '*' \u0026\u0026 hr === '*') {\n      time = '毎分';\n    } else if (min.startsWith('*/') \u0026\u0026 hr === '*') {\n      time = min.slice(2) + '分ごと';\n    } else if (hr.startsWith('*/') \u0026\u0026 min === '0') {\n      time = hr.slice(2) + '時間ごと（0分に実行）';\n    } else if (hr.startsWith('*/')) {\n      time = hr.slice(2) + '時間ごと（' + min + '分に実行）';\n    } else {\n      const hrParts = hr.split(',');\n      const minStr = min === '*' ? 'xx分' : (min.includes(',') ? '[' + min + ']分' : pad(+min) + '分');\n      const times = hrParts.map(h =\u003e {\n        if (h.includes('-')) return h + '時台の' + minStr;\n        return h + '時' + minStr;\n      });\n      time = times.join('、') + 'に';\n    }\n\n    const dowStr = fmtField(dow, 'dow');\n    const domStr = fmtField(dom, 'dom');\n    const monStr = fmtField(mon, 'mon');\n\n    let schedule = '';\n\n    if (monStr) schedule += monStr + 'の';\n\n    if (dowStr) {\n      schedule += dowStr + 'の';\n    } else if (domStr) {\n      if (dom.startsWith('*/')) {\n        schedule += domStr + 'の';\n      } else {\n        const domParts = dom.split(',');\n        const domFmt = domParts.map(p =\u003e {\n          if (p.includes('-')) return p + '日';\n          return p + '日';\n        });\n        schedule += domFmt.join('・') + 'の';\n      }\n    }\n\n    const isTime = time.endsWith('に');\n    schedule += time + (isTime ? '実行されます。' : 'に実行されます。');\n\n    return schedule;\n  }\n\n  // ── Next 5 execution times ────────────────────────────────────────────────\n  function renderNext(expr) {\n    const parts = expr.trim().split(/\\s+/);\n    if (parts.length !== 5) { nextList.innerHTML = ''; return; }\n    const [min, hr, dom, mon, dow] = parts;\n\n    const times = nextRuns(min, hr, dom, mon, dow, 5);\n    nextList.innerHTML = times.map(d =\u003e '\u003cli\u003e' + formatDate(d) + '\u003c/li\u003e').join('');\n  }\n\n  function expandField(f, lo, hi) {\n    if (f === '*') {\n      const r = [];\n      for (let i = lo; i \u003c= hi; i++) r.push(i);\n      return r;\n    }\n    if (f.startsWith('*/')) {\n      const step = parseInt(f.slice(2), 10);\n      const r = [];\n      for (let i = lo; i \u003c= hi; i += step) r.push(i);\n      return r;\n    }\n    const result = new Set();\n    f.split(',').forEach(p =\u003e {\n      if (p.includes('-')) {\n        const [a, b] = p.split('-').map(Number);\n        for (let i = a; i \u003c= b; i++) result.add(i);\n      } else {\n        result.add(Number(p));\n      }\n    });\n    return [...result].sort((a,b) =\u003e a-b);\n  }\n\n  function nextRuns(minF, hrF, domF, monF, dowF, count) {\n    const mins = expandField(minF, 0, 59);\n    const hrs  = expandField(hrF,  0, 23);\n    const doms = expandField(domF, 1, 31);\n    const mons = expandField(monF, 1, 12);\n    const dows = dowF === '*' ? null : expandField(dowF.replace('7','0'), 0, 6);\n\n    const results = [];\n    const now = new Date();\n    const start = new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes() + 1, 0, 0);\n\n    let d = new Date(start);\n    const limit = new Date(start.getTime() + 366 * 24 * 60 * 60 * 1000);\n\n    while (results.length \u003c count \u0026\u0026 d \u003c limit) {\n      const m  = d.getMonth() + 1;\n      const dy = d.getDate();\n      const h  = d.getHours();\n      const mn = d.getMinutes();\n      const wd = d.getDay();\n\n      if (!mons.includes(m)) {\n        const nextMon = mons.find(x =\u003e x \u003e m);\n        if (nextMon) {\n          d = new Date(d.getFullYear(), nextMon - 1, 1, 0, 0, 0, 0);\n        } else {\n          d = new Date(d.getFullYear() + 1, mons[0] - 1, 1, 0, 0, 0, 0);\n        }\n        continue;\n      }\n\n      const domOk = doms.includes(dy);\n      const dowOk = dows === null || dows.includes(wd);\n      if (!domOk \u0026\u0026 !dowOk) {\n        d = new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0, 0);\n        continue;\n      }\n\n      if (!hrs.includes(h)) {\n        const nextHr = hrs.find(x =\u003e x \u003e h);\n        if (nextHr !== undefined) {\n          d = new Date(d.getFullYear(), d.getMonth(), d.getDate(), nextHr, 0, 0, 0);\n        } else {\n          d = new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0, 0);\n        }\n        continue;\n      }\n\n      if (!mins.includes(mn)) {\n        const nextMin = mins.find(x =\u003e x \u003e mn);\n        if (nextMin !== undefined) {\n          d = new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), nextMin, 0, 0);\n        } else {\n          const nextHr = hrs.find(x =\u003e x \u003e h);\n          if (nextHr !== undefined) {\n            d = new Date(d.getFullYear(), d.getMonth(), d.getDate(), nextHr, 0, 0, 0);\n          } else {\n            d = new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1, 0, 0, 0, 0);\n          }\n        }\n        continue;\n      }\n\n      results.push(new Date(d));\n      d = new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes() + 1, 0, 0);\n    }\n\n    return results;\n  }\n\n  function formatDate(d) {\n    const days = ['日','月','火','水','木','金','土'];\n    const pad = n =\u003e String(n).padStart(2, '0');\n    return d.getFullYear() + '年' + pad(d.getMonth()+1) + '月' + pad(d.getDate()) + '日（' +\n      days[d.getDay()] + '）  ' + pad(d.getHours()) + ':' + pad(d.getMinutes());\n  }\n\n  // ── Presets ──────────────────────────────────────────────────────────────\n  document.querySelectorAll('#cron-app .ca-preset-btn').forEach(btn =\u003e {\n    btn.addEventListener('click', () =\u003e {\n      const expr = btn.dataset.expr;\n      loadExprIntoBuilder(expr);\n      setExpression(expr);\n    });\n  });\n\n  function loadExprIntoBuilder(expr) {\n    const parts = expr.trim().split(/\\s+/);\n    if (parts.length !== 5) return;\n    const [minV, hrV, domV, monV, dowV] = parts;\n\n    function detectMode(f) {\n      if (f === '*') return 'any';\n      if (f.startsWith('*/')) return 'every';\n      if (f.includes('-')) return 'range';\n      return 'specific';\n    }\n\n    [['min', minV],['hr', hrV],['dom', domV],['mon', monV],['dow', dowV]].forEach(([f, v]) =\u003e {\n      const m = detectMode(v);\n      modes[f].value = m;\n      if (m === 'any') {\n        vals[f].value = '';\n        vals[f].style.display = 'none';\n      } else if (m === 'every') {\n        vals[f].value = v.slice(2);\n        vals[f].style.display = 'block';\n      } else {\n        vals[f].value = v;\n        vals[f].style.display = 'block';\n      }\n      hints[f].textContent = '';\n    });\n  }\n\n  // ── Manual parse ─────────────────────────────────────────────────────────\n  parseBtn.addEventListener('click', () =\u003e {\n    const expr = manual.value.trim();\n    if (!expr) return;\n    loadExprIntoBuilder(expr);\n    setExpression(expr);\n  });\n\n  manual.addEventListener('keydown', e =\u003e {\n    if (e.key === 'Enter') parseBtn.click();\n  });\n\n  // ── Copy ─────────────────────────────────────────────────────────────────\n  copyBtn.addEventListener('click', () =\u003e {\n    const expr = exprDisplay.textContent;\n    navigator.clipboard.writeText(expr).then(() =\u003e {\n      copyFb.classList.add('visible');\n      setTimeout(() =\u003e copyFb.classList.remove('visible'), 1800);\n    }).catch(() =\u003e {\n      const ta = document.createElement('textarea');\n      ta.value = expr;\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      copyFb.classList.add('visible');\n      setTimeout(() =\u003e copyFb.classList.remove('visible'), 1800);\n    });\n  });\n\n  // ── Init ─────────────────────────────────────────────────────────────────\n  setExpression('* * * * *');\n\n})();\n\u003c/script\u003e","title":"Cron式ジェネレーター"},{"content":" 入力テキスト 変換したいテキストを入力してください 文字数: 0 \u0026nbsp;|\u0026nbsp; 単語数: 0 大文字 (UPPER CASE)HELLO WORLD 小文字 (lower case)hello world タイトルケースHello World 文頭大文字Hello world camelCasehelloWorld PascalCaseHelloWorld snake_casehello_world SCREAMING_SNAKEHELLO_WORLD kebab-casehello-world Train-CaseHello-World dot.casehello.world 交互大文字hElLo WoRlD 変換結果 — コピー 文字数: 0 \u0026nbsp;|\u0026nbsp; 単語数: 0 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 単語の出現頻度を分析 → 単語頻度カウンター テキストの差分を確認 → テキスト差分比較ツール 文字列をエンコード → 万能エンコーダー・デコーダー 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/text-case-converter/","summary":"\u003cdiv id=\"tc-app\"\u003e\n\u003cstyle\u003e\n#tc-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  max-width: 780px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#tc-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #334155;\n  margin: 0 0 10px 0;\n}\n#tc-app label {\n  display: block;\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 5px;\n}\n#tc-app textarea {\n  width: 100%;\n  box-sizing: border-box;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  padding: 12px 14px;\n  font-size: 14px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  color: #1e293b;\n  background: #f8fafc;\n  resize: vertical;\n  transition: border-color 0.2s;\n  line-height: 1.6;\n}\n#tc-app textarea:focus {\n  outline: none;\n  border-color: #64748b;\n  background: #fff;\n}\n#tc-app .tc-stats {\n  font-size: 12px;\n  color: #94a3b8;\n  margin-top: 5px;\n  text-align: right;\n}\n#tc-app .tc-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n  gap: 8px;\n  margin: 16px 0;\n}\n#tc-app .tc-btn {\n  background: #f1f5f9;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 7px;\n  padding: 9px 12px;\n  font-size: 13px;\n  font-weight: 600;\n  color: #334155;\n  cursor: pointer;\n  text-align: left;\n  transition: background 0.15s, border-color 0.15s, color 0.15s;\n  line-height: 1.4;\n}\n#tc-app .tc-btn:hover {\n  background: #475569;\n  border-color: #475569;\n  color: #fff;\n}\n#tc-app .tc-btn .tc-btn-sub {\n  display: block;\n  font-size: 11px;\n  font-weight: 400;\n  opacity: 0.7;\n  margin-top: 2px;\n}\n#tc-app .tc-output-section {\n  margin-top: 20px;\n}\n#tc-app .tc-output-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 6px;\n}\n#tc-app .tc-copy-btn {\n  background: #475569;\n  color: #fff;\n  border: none;\n  border-radius: 6px;\n  padding: 6px 14px;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#tc-app .tc-copy-btn:hover {\n  background: #334155;\n}\n#tc-app .tc-copy-btn.copied {\n  background: #16a34a;\n}\n#tc-app .tc-label-tag {\n  display: inline-block;\n  background: #e2e8f0;\n  color: #475569;\n  border-radius: 5px;\n  padding: 2px 9px;\n  font-size: 11px;\n  font-weight: 700;\n  margin-left: 8px;\n  vertical-align: middle;\n}\n#tc-app .tc-divider {\n  border: none;\n  border-top: 1.5px solid #e2e8f0;\n  margin: 22px 0;\n}\n@media (max-width: 520px) {\n  #tc-app .tc-grid {\n    grid-template-columns: 1fr 1fr;\n  }\n}\n\u003c/style\u003e\n\u003ch2\u003e入力テキスト\u003c/h2\u003e\n\u003clabel for=\"tc-input\"\u003e変換したいテキストを入力してください\u003c/label\u003e\n\u003ctextarea id=\"tc-input\" rows=\"6\" placeholder=\"ここにテキストを入力または貼り付けてください...\"\u003e\u003c/textarea\u003e\n\u003cdiv class=\"tc-stats\" id=\"tc-input-stats\"\u003e文字数: 0 \u0026nbsp;|\u0026nbsp; 単語数: 0\u003c/div\u003e\n\u003cdiv class=\"tc-grid\" id=\"tc-buttons\"\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcConvert('upper')\"\u003e大文字 (UPPER CASE)\u003cspan class=\"tc-btn-sub\"\u003eHELLO WORLD\u003c/span\u003e\u003c/button\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcConvert('lower')\"\u003e小文字 (lower case)\u003cspan class=\"tc-btn-sub\"\u003ehello world\u003c/span\u003e\u003c/button\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcConvert('title')\"\u003eタイトルケース\u003cspan class=\"tc-btn-sub\"\u003eHello World\u003c/span\u003e\u003c/button\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcConvert('sentence')\"\u003e文頭大文字\u003cspan class=\"tc-btn-sub\"\u003eHello world\u003c/span\u003e\u003c/button\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcConvert('camel')\"\u003ecamelCase\u003cspan class=\"tc-btn-sub\"\u003ehelloWorld\u003c/span\u003e\u003c/button\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcConvert('pascal')\"\u003ePascalCase\u003cspan class=\"tc-btn-sub\"\u003eHelloWorld\u003c/span\u003e\u003c/button\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcConvert('snake')\"\u003esnake_case\u003cspan class=\"tc-btn-sub\"\u003ehello_world\u003c/span\u003e\u003c/button\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcConvert('screaming')\"\u003eSCREAMING_SNAKE\u003cspan class=\"tc-btn-sub\"\u003eHELLO_WORLD\u003c/span\u003e\u003c/button\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcConvert('kebab')\"\u003ekebab-case\u003cspan class=\"tc-btn-sub\"\u003ehello-world\u003c/span\u003e\u003c/button\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcConvert('train')\"\u003eTrain-Case\u003cspan class=\"tc-btn-sub\"\u003eHello-World\u003c/span\u003e\u003c/button\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcConvert('dot')\"\u003edot.case\u003cspan class=\"tc-btn-sub\"\u003ehello.world\u003c/span\u003e\u003c/button\u003e\n  \u003cbutton class=\"tc-btn\" onclick=\"tcConvert('alternate')\"\u003e交互大文字\u003cspan class=\"tc-btn-sub\"\u003ehElLo WoRlD\u003c/span\u003e\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"tc-output-section\"\u003e\n  \u003cdiv class=\"tc-output-header\"\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"tc-output\" style=\"margin:0;display:inline;\"\u003e変換結果\u003c/label\u003e\n      \u003cspan class=\"tc-label-tag\" id=\"tc-mode-tag\"\u003e—\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cbutton class=\"tc-copy-btn\" id=\"tc-copy-btn\" onclick=\"tcCopy()\"\u003eコピー\u003c/button\u003e\n  \u003c/div\u003e\n  \u003ctextarea id=\"tc-output\" rows=\"6\" readonly placeholder=\"変換後のテキストがここに表示されます...\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"tc-stats\" id=\"tc-output-stats\"\u003e文字数: 0 \u0026nbsp;|\u0026nbsp; 単語数: 0\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var inputEl = document.getElementById('tc-input');\n  var outputEl = document.getElementById('tc-output');\n  var inputStats = document.getElementById('tc-input-stats');\n  var outputStats = document.getElementById('tc-output-stats');\n  var modeTag = document.getElementById('tc-mode-tag');\n  var copyBtn = document.getElementById('tc-copy-btn');\n\n  var modeNames = {\n    upper: '大文字 (UPPER CASE)',\n    lower: '小文字 (lower case)',\n    title: 'タイトルケース',\n    sentence: '文頭大文字',\n    camel: 'camelCase',\n    pascal: 'PascalCase',\n    snake: 'snake_case',\n    screaming: 'SCREAMING_SNAKE_CASE',\n    kebab: 'kebab-case',\n    train: 'Train-Case',\n    dot: 'dot.case',\n    alternate: '交互大文字'\n  };\n\n  function countStats(text) {\n    var chars = text.length;\n    var words = text.trim() === '' ? 0 : text.trim().split(/\\s+/).length;\n    return '文字数: ' + chars + ' \u0026nbsp;|\u0026nbsp; 単語数: ' + words;\n  }\n\n  function tokenize(text) {\n    return text\n      .replace(/([a-z])([A-Z])/g, '$1 $2')\n      .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n      .replace(/[-_\\.]+/g, ' ')\n      .toLowerCase()\n      .trim()\n      .split(/\\s+/)\n      .filter(function(w) { return w.length \u003e 0; });\n  }\n\n  function convertText(text, mode) {\n    if (!text) return '';\n    switch (mode) {\n      case 'upper':\n        return text.toUpperCase();\n      case 'lower':\n        return text.toLowerCase();\n      case 'title':\n        return text.replace(/\\S+/g, function(w) {\n          return w.charAt(0).toUpperCase() + w.slice(1).toLowerCase();\n        });\n      case 'sentence':\n        return text.toLowerCase().replace(/(^\\s*\\w|[.!?]\\s+\\w)/g, function(c) {\n          return c.toUpperCase();\n        });\n      case 'camel': {\n        var words = tokenize(text);\n        if (words.length === 0) return '';\n        return words[0] + words.slice(1).map(function(w) {\n          return w.charAt(0).toUpperCase() + w.slice(1);\n        }).join('');\n      }\n      case 'pascal': {\n        var words = tokenize(text);\n        return words.map(function(w) {\n          return w.charAt(0).toUpperCase() + w.slice(1);\n        }).join('');\n      }\n      case 'snake': {\n        return tokenize(text).join('_');\n      }\n      case 'screaming': {\n        return tokenize(text).join('_').toUpperCase();\n      }\n      case 'kebab': {\n        return tokenize(text).join('-');\n      }\n      case 'train': {\n        var words = tokenize(text);\n        return words.map(function(w) {\n          return w.charAt(0).toUpperCase() + w.slice(1);\n        }).join('-');\n      }\n      case 'dot': {\n        return tokenize(text).join('.');\n      }\n      case 'alternate': {\n        var chars = text.split('');\n        var upper = true;\n        return chars.map(function(c) {\n          if (c.trim() === '') { return c; }\n          var result = upper ? c.toUpperCase() : c.toLowerCase();\n          upper = !upper;\n          return result;\n        }).join('');\n      }\n      default:\n        return text;\n    }\n  }\n\n  inputEl.addEventListener('input', function() {\n    inputStats.innerHTML = countStats(inputEl.value);\n  });\n\n  window.tcConvert = function(mode) {\n    var input = inputEl.value;\n    var result = convertText(input, mode);\n    outputEl.value = result;\n    modeTag.textContent = modeNames[mode] || mode;\n    outputStats.innerHTML = countStats(result);\n    copyBtn.textContent = 'コピー';\n    copyBtn.classList.remove('copied');\n  };\n\n  window.tcCopy = function() {\n    var text = outputEl.value;\n    if (!text) return;\n    if (navigator.clipboard \u0026\u0026 navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).then(function() {\n        copyBtn.textContent = 'コピー済み!';\n        copyBtn.classList.add('copied');\n        setTimeout(function() {\n          copyBtn.textContent = 'コピー';\n          copyBtn.classList.remove('copied');\n        }, 2000);\n      });\n    } else {\n      outputEl.select();\n      document.execCommand('copy');\n      copyBtn.textContent = 'コピー済み!';\n      copyBtn.classList.add('copied');\n      setTimeout(function() {\n        copyBtn.textContent = 'コピー';\n        copyBtn.classList.remove('copied');\n      }, 2000);\n    }\n  };\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr style=\"border:none;border-top:1.5px solid #e2e8f0;margin:28px 0;\"\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"テキスト変換ツール"},{"content":" 設定 \u0026lt;div class=\u0026quot;pg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;サイズ（px）\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;pg-size-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;pg-width\u0026quot; value=\u0026quot;300\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;4000\u0026quot; /\u0026gt; \u0026lt;span class=\u0026quot;pg-size-sep\u0026quot;\u0026gt;×\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;pg-height\u0026quot; value=\u0026quot;250\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;4000\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pg-field\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;pg-presets-label\u0026quot;\u0026gt;プリセット\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pg-presets-group\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;pg-presets-group-title\u0026quot;\u0026gt;よく使うサイズ\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pg-preset-btns\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;150\u0026quot; data-h=\u0026quot;150\u0026quot;\u0026gt;150×150\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;300\u0026quot; data-h=\u0026quot;250\u0026quot;\u0026gt;300×250\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;400\u0026quot; data-h=\u0026quot;300\u0026quot;\u0026gt;400×300\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;800\u0026quot; data-h=\u0026quot;600\u0026quot;\u0026gt;800×600\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1200\u0026quot; data-h=\u0026quot;630\u0026quot;\u0026gt;1200×630\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1920\u0026quot; data-h=\u0026quot;1080\u0026quot;\u0026gt;1920×1080\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pg-presets-group\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;pg-presets-group-title\u0026quot;\u0026gt;SNS\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pg-preset-btns\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;820\u0026quot; data-h=\u0026quot;312\u0026quot;\u0026gt;FBカバー\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1500\u0026quot; data-h=\u0026quot;500\u0026quot;\u0026gt;Xヘッダー\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1080\u0026quot; data-h=\u0026quot;1080\u0026quot;\u0026gt;Instagram投稿\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1080\u0026quot; data-h=\u0026quot;1920\u0026quot;\u0026gt;Instagramストーリー\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1200\u0026quot; data-h=\u0026quot;627\u0026quot;\u0026gt;LinkedIn投稿\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1280\u0026quot; data-h=\u0026quot;720\u0026quot;\u0026gt;YouTubeサムネイル\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pg-presets-group\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;pg-presets-group-title\u0026quot;\u0026gt;広告バナー\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pg-preset-btns\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;728\u0026quot; data-h=\u0026quot;90\u0026quot;\u0026gt;リーダーボード\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;300\u0026quot; data-h=\u0026quot;600\u0026quot;\u0026gt;ハーフページ\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;160\u0026quot; data-h=\u0026quot;600\u0026quot;\u0026gt;スカイスクレイパー\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;320\u0026quot; data-h=\u0026quot;50\u0026quot;\u0026gt;モバイルバナー\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;468\u0026quot; data-h=\u0026quot;60\u0026quot;\u0026gt;フルバナー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;背景色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;pg-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;pg-bg-picker\u0026quot; value=\u0026quot;#cccccc\u0026quot; /\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;pg-bg-hex\u0026quot; value=\u0026quot;#cccccc\u0026quot; maxlength=\u0026quot;7\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;テキスト色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;pg-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;pg-text-picker\u0026quot; value=\u0026quot;#666666\u0026quot; /\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;pg-text-hex\u0026quot; value=\u0026quot;#666666\u0026quot; maxlength=\u0026quot;7\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;カスタムテキスト（空白で自動表示）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;pg-custom-text\u0026quot; placeholder=\u0026quot;例: ロゴここ\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;pg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;フォントサイズ（px）\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;pg-font-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;pg-font-size\u0026quot; value=\u0026quot;0\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;500\u0026quot; /\u0026gt; \u0026lt;span\u0026gt;0 = 自動\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; プレビュー 300 × 250 px PNG ダウンロード データURLをコピー コピーしました！ Web制作を効率化 フリーランスのWeb制作者・デザイナーには、経理の自動化も大切です。\nfreee会計でフリーランスの経理を自動化 して、制作に集中しましょう。 ","permalink":"https://productivity-works.com/ja/tools/placeholder-generator/","summary":"\u003cdiv id=\"pg-app\"\u003e\n\u003cstyle\u003e\n#pg-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#pg-app h2 {\n  font-size: 1.3rem;\n  font-weight: 700;\n  margin: 0 0 1rem 0;\n  color: #1a1a2e;\n}\n#pg-app .pg-layout {\n  display: grid;\n  grid-template-columns: 340px 1fr;\n  gap: 1.5rem;\n  align-items: start;\n}\n@media (max-width: 680px) {\n  #pg-app .pg-layout {\n    grid-template-columns: 1fr;\n  }\n}\n#pg-app .pg-panel {\n  background: #f8f9fc;\n  border: 1px solid #e2e5f0;\n  border-radius: 10px;\n  padding: 1.25rem;\n}\n#pg-app .pg-field {\n  margin-bottom: 1rem;\n}\n#pg-app .pg-field label {\n  display: block;\n  font-size: 0.78rem;\n  font-weight: 600;\n  color: #555;\n  margin-bottom: 0.35rem;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#pg-app .pg-field input[type=\"number\"],\n#pg-app .pg-field input[type=\"text\"] {\n  width: 100%;\n  padding: 0.5rem 0.7rem;\n  border: 1px solid #d0d5e8;\n  border-radius: 6px;\n  font-size: 0.95rem;\n  background: #fff;\n  box-sizing: border-box;\n  transition: border-color 0.2s;\n}\n#pg-app .pg-field input[type=\"number\"]:focus,\n#pg-app .pg-field input[type=\"text\"]:focus {\n  outline: none;\n  border-color: #4f6ef7;\n}\n#pg-app .pg-size-row {\n  display: flex;\n  gap: 0.5rem;\n  align-items: center;\n}\n#pg-app .pg-size-row input {\n  flex: 1;\n}\n#pg-app .pg-size-sep {\n  font-weight: 700;\n  color: #888;\n  font-size: 1.1rem;\n}\n#pg-app .pg-color-row {\n  display: flex;\n  gap: 0.6rem;\n  align-items: center;\n}\n#pg-app .pg-color-row input[type=\"color\"] {\n  width: 42px;\n  height: 38px;\n  border: 1px solid #d0d5e8;\n  border-radius: 6px;\n  padding: 2px;\n  cursor: pointer;\n  background: #fff;\n  flex-shrink: 0;\n}\n#pg-app .pg-color-row input[type=\"text\"] {\n  flex: 1;\n  font-family: monospace;\n}\n#pg-app .pg-presets-label {\n  font-size: 0.78rem;\n  font-weight: 600;\n  color: #555;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  margin-bottom: 0.4rem;\n}\n#pg-app .pg-presets-group {\n  margin-bottom: 0.9rem;\n}\n#pg-app .pg-presets-group-title {\n  font-size: 0.72rem;\n  font-weight: 700;\n  color: #888;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 0.3rem;\n}\n#pg-app .pg-preset-btns {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.35rem;\n}\n#pg-app .pg-preset-btn {\n  background: #fff;\n  border: 1px solid #d0d5e8;\n  border-radius: 5px;\n  padding: 0.28rem 0.6rem;\n  font-size: 0.78rem;\n  cursor: pointer;\n  color: #333;\n  transition: background 0.15s, border-color 0.15s;\n  white-space: nowrap;\n}\n#pg-app .pg-preset-btn:hover {\n  background: #4f6ef7;\n  border-color: #4f6ef7;\n  color: #fff;\n}\n#pg-app .pg-font-row {\n  display: flex;\n  gap: 0.5rem;\n  align-items: center;\n}\n#pg-app .pg-font-row input[type=\"number\"] {\n  width: 80px;\n}\n#pg-app .pg-font-row span {\n  font-size: 0.85rem;\n  color: #666;\n}\n#pg-app .pg-preview-area {\n  background: #fff;\n  border: 1px solid #e2e5f0;\n  border-radius: 10px;\n  padding: 1.25rem;\n}\n#pg-app .pg-canvas-wrap {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  min-height: 200px;\n  background: repeating-conic-gradient(#e8eaf0 0% 25%, #f5f6fa 0% 50%) 0 0 / 20px 20px;\n  border-radius: 6px;\n  margin-bottom: 1rem;\n  overflow: hidden;\n}\n#pg-app #pg-canvas {\n  display: block;\n  max-width: 100%;\n  max-height: 400px;\n  border-radius: 3px;\n  box-shadow: 0 2px 12px rgba(0,0,0,0.12);\n  object-fit: contain;\n}\n#pg-app .pg-info {\n  font-size: 0.82rem;\n  color: #666;\n  margin-bottom: 1rem;\n  text-align: center;\n}\n#pg-app .pg-btn-row {\n  display: flex;\n  gap: 0.7rem;\n  flex-wrap: wrap;\n}\n#pg-app .pg-btn {\n  flex: 1;\n  min-width: 120px;\n  padding: 0.65rem 1rem;\n  border: none;\n  border-radius: 7px;\n  font-size: 0.92rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: opacity 0.15s, transform 0.1s;\n}\n#pg-app .pg-btn:hover {\n  opacity: 0.88;\n  transform: translateY(-1px);\n}\n#pg-app .pg-btn:active {\n  transform: translateY(0);\n}\n#pg-app .pg-btn-primary {\n  background: #4f6ef7;\n  color: #fff;\n}\n#pg-app .pg-btn-secondary {\n  background: #1a1a2e;\n  color: #fff;\n}\n#pg-app .pg-url-box {\n  margin-top: 1rem;\n  background: #f0f2fa;\n  border: 1px solid #d0d5e8;\n  border-radius: 6px;\n  padding: 0.6rem 0.8rem;\n  font-size: 0.72rem;\n  font-family: monospace;\n  word-break: break-all;\n  color: #333;\n  max-height: 80px;\n  overflow-y: auto;\n  display: none;\n}\n#pg-app .pg-toast {\n  position: fixed;\n  bottom: 2rem;\n  left: 50%;\n  transform: translateX(-50%) translateY(20px);\n  background: #1a1a2e;\n  color: #fff;\n  padding: 0.6rem 1.4rem;\n  border-radius: 30px;\n  font-size: 0.88rem;\n  font-weight: 600;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 0.25s, transform 0.25s;\n  z-index: 9999;\n}\n#pg-app .pg-toast.show {\n  opacity: 1;\n  transform: translateX(-50%) translateY(0);\n}\n#pg-app .pg-cta {\n  margin-top: 2rem;\n  background: linear-gradient(135deg, #f0f4ff 0%, #e8f0fe 100%);\n  border: 1px solid #c7d5f8;\n  border-radius: 10px;\n  padding: 1.2rem 1.4rem;\n  font-size: 0.9rem;\n  color: #1a1a2e;\n  line-height: 1.6;\n}\n#pg-app .pg-cta strong {\n  display: block;\n  font-size: 0.95rem;\n  margin-bottom: 0.4rem;\n  color: #2d3e9e;\n}\n#pg-app .pg-cta a {\n  color: #4f6ef7;\n  font-weight: 600;\n}\n\u003c/style\u003e\n\u003cdiv class=\"pg-layout\"\u003e\n  \u003cdiv class=\"pg-panel\"\u003e\n    \u003ch2\u003e設定\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div class=\u0026quot;pg-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;サイズ（px）\u0026lt;/label\u0026gt;\n  \u0026lt;div class=\u0026quot;pg-size-row\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;pg-width\u0026quot; value=\u0026quot;300\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;4000\u0026quot; /\u0026gt;\n    \u0026lt;span class=\u0026quot;pg-size-sep\u0026quot;\u0026gt;×\u0026lt;/span\u0026gt;\n    \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;pg-height\u0026quot; value=\u0026quot;250\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;4000\u0026quot; /\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;pg-field\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;pg-presets-label\u0026quot;\u0026gt;プリセット\u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;pg-presets-group\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;pg-presets-group-title\u0026quot;\u0026gt;よく使うサイズ\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;pg-preset-btns\u0026quot;\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;150\u0026quot; data-h=\u0026quot;150\u0026quot;\u0026gt;150×150\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;300\u0026quot; data-h=\u0026quot;250\u0026quot;\u0026gt;300×250\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;400\u0026quot; data-h=\u0026quot;300\u0026quot;\u0026gt;400×300\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;800\u0026quot; data-h=\u0026quot;600\u0026quot;\u0026gt;800×600\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1200\u0026quot; data-h=\u0026quot;630\u0026quot;\u0026gt;1200×630\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1920\u0026quot; data-h=\u0026quot;1080\u0026quot;\u0026gt;1920×1080\u0026lt;/button\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;pg-presets-group\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;pg-presets-group-title\u0026quot;\u0026gt;SNS\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;pg-preset-btns\u0026quot;\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;820\u0026quot; data-h=\u0026quot;312\u0026quot;\u0026gt;FBカバー\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1500\u0026quot; data-h=\u0026quot;500\u0026quot;\u0026gt;Xヘッダー\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1080\u0026quot; data-h=\u0026quot;1080\u0026quot;\u0026gt;Instagram投稿\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1080\u0026quot; data-h=\u0026quot;1920\u0026quot;\u0026gt;Instagramストーリー\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1200\u0026quot; data-h=\u0026quot;627\u0026quot;\u0026gt;LinkedIn投稿\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;1280\u0026quot; data-h=\u0026quot;720\u0026quot;\u0026gt;YouTubeサムネイル\u0026lt;/button\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;div class=\u0026quot;pg-presets-group\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;pg-presets-group-title\u0026quot;\u0026gt;広告バナー\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;pg-preset-btns\u0026quot;\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;728\u0026quot; data-h=\u0026quot;90\u0026quot;\u0026gt;リーダーボード\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;300\u0026quot; data-h=\u0026quot;600\u0026quot;\u0026gt;ハーフページ\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;160\u0026quot; data-h=\u0026quot;600\u0026quot;\u0026gt;スカイスクレイパー\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;320\u0026quot; data-h=\u0026quot;50\u0026quot;\u0026gt;モバイルバナー\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;pg-preset-btn\u0026quot; data-w=\u0026quot;468\u0026quot; data-h=\u0026quot;60\u0026quot;\u0026gt;フルバナー\u0026lt;/button\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;pg-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;背景色\u0026lt;/label\u0026gt;\n  \u0026lt;div class=\u0026quot;pg-color-row\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;pg-bg-picker\u0026quot; value=\u0026quot;#cccccc\u0026quot; /\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;pg-bg-hex\u0026quot; value=\u0026quot;#cccccc\u0026quot; maxlength=\u0026quot;7\u0026quot; /\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;pg-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;テキスト色\u0026lt;/label\u0026gt;\n  \u0026lt;div class=\u0026quot;pg-color-row\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;pg-text-picker\u0026quot; value=\u0026quot;#666666\u0026quot; /\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;pg-text-hex\u0026quot; value=\u0026quot;#666666\u0026quot; maxlength=\u0026quot;7\u0026quot; /\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;pg-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;カスタムテキスト（空白で自動表示）\u0026lt;/label\u0026gt;\n  \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;pg-custom-text\u0026quot; placeholder=\u0026quot;例: ロゴここ\u0026quot; /\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;pg-field\u0026quot;\u0026gt;\n  \u0026lt;label\u0026gt;フォントサイズ（px）\u0026lt;/label\u0026gt;\n  \u0026lt;div class=\u0026quot;pg-font-row\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;pg-font-size\u0026quot; value=\u0026quot;0\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;500\u0026quot; /\u0026gt;\n    \u0026lt;span\u0026gt;0 = 自動\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"pg-preview-area\"\u003e\n    \u003ch2\u003eプレビュー\u003c/h2\u003e\n    \u003cdiv class=\"pg-canvas-wrap\"\u003e\n      \u003ccanvas id=\"pg-canvas\"\u003e\u003c/canvas\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pg-info\" id=\"pg-info\"\u003e300 × 250 px\u003c/div\u003e\n    \u003cdiv class=\"pg-btn-row\"\u003e\n      \u003cbutton class=\"pg-btn pg-btn-primary\" id=\"pg-download\"\u003ePNG ダウンロード\u003c/button\u003e\n      \u003cbutton class=\"pg-btn pg-btn-secondary\" id=\"pg-copy-url\"\u003eデータURLをコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pg-url-box\" id=\"pg-url-box\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"pg-toast\" id=\"pg-toast\"\u003eコピーしました！\u003c/div\u003e\n\u003cdiv class=\"pg-cta\"\u003e\n  \u003cstrong\u003eWeb制作を効率化\u003c/strong\u003e\n  フリーランスのWeb制作者・デザイナーには、経理の自動化も大切です。\u003cbr\u003e\n  \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" rel=\"nofollow\"\u003efreee会計でフリーランスの経理を自動化\u003c/a\u003e して、制作に集中しましょう。\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var canvas = document.getElementById('pg-canvas');\n  var ctx = canvas.getContext('2d');\n  var wInput = document.getElementById('pg-width');\n  var hInput = document.getElementById('pg-height');\n  var bgPicker = document.getElementById('pg-bg-picker');\n  var bgHex = document.getElementById('pg-bg-hex');\n  var textPicker = document.getElementById('pg-text-picker');\n  var textHex = document.getElementById('pg-text-hex');\n  var customText = document.getElementById('pg-custom-text');\n  var fontSizeInput = document.getElementById('pg-font-size');\n  var info = document.getElementById('pg-info');\n  var urlBox = document.getElementById('pg-url-box');\n  var toast = document.getElementById('pg-toast');\n\n  function isValidHex(v) {\n    return /^#[0-9a-fA-F]{6}$/.test(v);\n  }\n\n  function render() {\n    var w = Math.max(1, Math.min(4000, parseInt(wInput.value) || 300));\n    var h = Math.max(1, Math.min(4000, parseInt(hInput.value) || 250));\n    var bg = isValidHex(bgHex.value) ? bgHex.value : '#cccccc';\n    var tc = isValidHex(textHex.value) ? textHex.value : '#666666';\n    var label = customText.value.trim() || (w + '\\u00d7' + h);\n    var fsRaw = parseInt(fontSizeInput.value) || 0;\n    var fs = fsRaw \u003e 0 ? fsRaw : Math.max(12, Math.min(Math.floor(Math.min(w, h) / 6), 72));\n\n    canvas.width = w;\n    canvas.height = h;\n\n    ctx.fillStyle = bg;\n    ctx.fillRect(0, 0, w, h);\n\n    // Subtle diagonal lines\n    ctx.strokeStyle = tc;\n    ctx.globalAlpha = 0.08;\n    ctx.lineWidth = 1;\n    ctx.beginPath();\n    ctx.moveTo(0, 0); ctx.lineTo(w, h);\n    ctx.moveTo(w, 0); ctx.lineTo(0, h);\n    ctx.stroke();\n    ctx.globalAlpha = 1;\n\n    // Border\n    ctx.strokeStyle = tc;\n    ctx.globalAlpha = 0.3;\n    ctx.lineWidth = Math.max(1, Math.round(Math.min(w, h) / 100));\n    ctx.strokeRect(ctx.lineWidth / 2, ctx.lineWidth / 2, w - ctx.lineWidth, h - ctx.lineWidth);\n    ctx.globalAlpha = 1;\n\n    // Text\n    ctx.fillStyle = tc;\n    ctx.font = 'bold ' + fs + 'px -apple-system, BlinkMacSystemFont, Arial, sans-serif';\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    ctx.fillText(label, w / 2, h / 2);\n\n    info.textContent = w + ' \\u00d7 ' + h + ' px';\n  }\n\n  function showToast(msg) {\n    toast.textContent = msg;\n    toast.classList.add('show');\n    setTimeout(function() { toast.classList.remove('show'); }, 2000);\n  }\n\n  bgPicker.addEventListener('input', function() {\n    bgHex.value = bgPicker.value;\n    render();\n  });\n  bgHex.addEventListener('input', function() {\n    if (isValidHex(bgHex.value)) bgPicker.value = bgHex.value;\n    render();\n  });\n  textPicker.addEventListener('input', function() {\n    textHex.value = textPicker.value;\n    render();\n  });\n  textHex.addEventListener('input', function() {\n    if (isValidHex(textHex.value)) textPicker.value = textHex.value;\n    render();\n  });\n\n  [wInput, hInput, customText, fontSizeInput].forEach(function(el) {\n    el.addEventListener('input', render);\n  });\n\n  document.querySelectorAll('#pg-app .pg-preset-btn').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      wInput.value = btn.dataset.w;\n      hInput.value = btn.dataset.h;\n      render();\n    });\n  });\n\n  document.getElementById('pg-download').addEventListener('click', function() {\n    render();\n    var link = document.createElement('a');\n    link.download = 'placeholder-' + canvas.width + 'x' + canvas.height + '.png';\n    link.href = canvas.toDataURL('image/png');\n    link.click();\n  });\n\n  document.getElementById('pg-copy-url').addEventListener('click', function() {\n    render();\n    var dataUrl = canvas.toDataURL('image/png');\n    urlBox.textContent = dataUrl;\n    urlBox.style.display = 'block';\n    if (navigator.clipboard \u0026\u0026 navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(dataUrl).then(function() {\n        showToast('データURLをコピーしました！');\n      });\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = dataUrl;\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      showToast('データURLをコピーしました！');\n    }\n  });\n\n  render();\n})();\n\u003c/script\u003e\n\u003c/div\u003e","title":"プレースホルダー画像生成ツール - カスタムサイズ＆カラー"},{"content":" \u0026#9998; ペン \u0026#8212; 直線 \u0026#9645; 四角 \u0026#9711; 円 \u0026#65332; テキスト \u0026#9003; 消しゴム 色 太さ 3px \u0026#8592; 戻す やり直し \u0026#8594; \u0026#128465; クリア \u0026#11015; PNG保存 X: 0 \u0026nbsp; Y: 0 ツール: ペン 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → ドット絵を作成 → ドット絵エディター SVGパスを編集 → SVGパスエディター ダミー画像を作成 → プレースホルダー画像生成ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/whiteboard-drawing/","summary":"\u003cdiv id=\"wb-app\"\u003e\n\u003cstyle\u003e\n#wb-app *,\n#wb-app *::before,\n#wb-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#wb-app {\n  font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif;\n  color: #1e293b;\n  background: #f8fafc;\n  border-radius: 12px;\n  overflow: hidden;\n  box-shadow: 0 4px 24px rgba(0,0,0,0.10);\n}\n#wb-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 8px;\n  padding: 10px 14px;\n  background: #1e293b;\n  border-bottom: 2px solid #334155;\n}\n#wb-toolbar .wb-group {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  flex-wrap: wrap;\n}\n#wb-toolbar .wb-separator {\n  width: 1px;\n  height: 28px;\n  background: #475569;\n  margin: 0 2px;\n}\n#wb-app button.wb-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 4px;\n  padding: 6px 11px;\n  border: 1.5px solid #475569;\n  border-radius: 6px;\n  background: #334155;\n  color: #cbd5e1;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, border-color 0.15s, color 0.15s;\n  white-space: nowrap;\n  line-height: 1.2;\n}\n#wb-app button.wb-btn:hover {\n  background: #475569;\n  color: #f1f5f9;\n  border-color: #64748b;\n}\n#wb-app button.wb-btn.active {\n  background: #0284c7;\n  border-color: #0ea5e9;\n  color: #fff;\n}\n#wb-app button.wb-btn:disabled {\n  opacity: 0.35;\n  cursor: not-allowed;\n}\n#wb-color-input {\n  width: 34px;\n  height: 30px;\n  border: 1.5px solid #475569;\n  border-radius: 6px;\n  padding: 2px;\n  background: #1e293b;\n  cursor: pointer;\n}\n#wb-app label.wb-label {\n  font-size: 12px;\n  color: #94a3b8;\n  white-space: nowrap;\n}\n#wb-size-slider {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 90px;\n  height: 4px;\n  border-radius: 2px;\n  background: #475569;\n  outline: none;\n  cursor: pointer;\n}\n#wb-size-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #0ea5e9;\n  cursor: pointer;\n  border: 2px solid #fff;\n}\n#wb-size-slider::-moz-range-thumb {\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #0ea5e9;\n  cursor: pointer;\n  border: 2px solid #fff;\n}\n#wb-size-val {\n  font-size: 12px;\n  color: #94a3b8;\n  min-width: 26px;\n  text-align: right;\n}\n#wb-canvas-wrap {\n  width: 100%;\n  overflow: hidden;\n  background: #fff;\n  cursor: crosshair;\n  position: relative;\n}\n#wb-canvas {\n  display: block;\n  width: 100%;\n  height: 100%;\n  touch-action: none;\n}\n#wb-text-input-overlay {\n  display: none;\n  position: absolute;\n  z-index: 10;\n  border: 2px dashed #0284c7;\n  background: rgba(255,255,255,0.92);\n  padding: 2px 4px;\n  font-size: 16px;\n  outline: none;\n  min-width: 80px;\n  min-height: 28px;\n  color: #1e293b;\n  border-radius: 3px;\n  resize: none;\n  overflow: hidden;\n  line-height: 1.4;\n}\n#wb-status-bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 5px 14px;\n  background: #0f172a;\n  font-size: 11px;\n  color: #64748b;\n  min-height: 26px;\n}\n#wb-status-bar span {\n  user-select: none;\n}\n@media (max-width: 600px) {\n  #wb-toolbar {\n    padding: 8px 8px;\n    gap: 5px;\n  }\n  #wb-app button.wb-btn {\n    font-size: 12px;\n    padding: 5px 8px;\n  }\n  #wb-size-slider {\n    width: 64px;\n  }\n}\n\u003c/style\u003e\n\u003cdiv id=\"wb-toolbar\"\u003e\n  \u003c!-- ツール選択 --\u003e\n  \u003cdiv class=\"wb-group\"\u003e\n    \u003cbutton class=\"wb-btn active\" id=\"wb-tool-pen\" title=\"ペン\"\u003e\u0026#9998; ペン\u003c/button\u003e\n    \u003cbutton class=\"wb-btn\" id=\"wb-tool-line\" title=\"直線\"\u003e\u0026#8212; 直線\u003c/button\u003e\n    \u003cbutton class=\"wb-btn\" id=\"wb-tool-rect\" title=\"四角\"\u003e\u0026#9645; 四角\u003c/button\u003e\n    \u003cbutton class=\"wb-btn\" id=\"wb-tool-circle\" title=\"円\"\u003e\u0026#9711; 円\u003c/button\u003e\n    \u003cbutton class=\"wb-btn\" id=\"wb-tool-text\" title=\"テキスト\"\u003e\u0026#65332; テキスト\u003c/button\u003e\n    \u003cbutton class=\"wb-btn\" id=\"wb-tool-eraser\" title=\"消しゴム\"\u003e\u0026#9003; 消しゴム\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wb-separator\"\u003e\u003c/div\u003e\n  \u003c!-- 色・太さ --\u003e\n  \u003cdiv class=\"wb-group\"\u003e\n    \u003clabel class=\"wb-label\" for=\"wb-color-input\"\u003e色\u003c/label\u003e\n    \u003cinput type=\"color\" id=\"wb-color-input\" value=\"#1e293b\" title=\"描画色\"\u003e\n    \u003clabel class=\"wb-label\" for=\"wb-size-slider\"\u003e太さ\u003c/label\u003e\n    \u003cinput type=\"range\" id=\"wb-size-slider\" min=\"1\" max=\"20\" value=\"3\"\u003e\n    \u003cspan id=\"wb-size-val\"\u003e3px\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wb-separator\"\u003e\u003c/div\u003e\n  \u003c!-- 操作 --\u003e\n  \u003cdiv class=\"wb-group\"\u003e\n    \u003cbutton class=\"wb-btn\" id=\"wb-undo-btn\" title=\"元に戻す (Ctrl+Z)\"\u003e\u0026#8592; 戻す\u003c/button\u003e\n    \u003cbutton class=\"wb-btn\" id=\"wb-redo-btn\" title=\"やり直し (Ctrl+Y)\"\u003eやり直し \u0026#8594;\u003c/button\u003e\n    \u003cbutton class=\"wb-btn\" id=\"wb-clear-btn\" title=\"クリア\"\u003e\u0026#128465; クリア\u003c/button\u003e\n    \u003cbutton class=\"wb-btn\" id=\"wb-download-btn\" title=\"PNGとして保存\"\u003e\u0026#11015; PNG保存\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"wb-canvas-wrap\"\u003e\n  \u003ccanvas id=\"wb-canvas\"\u003e\u003c/canvas\u003e\n  \u003ctextarea id=\"wb-text-input-overlay\" rows=\"1\" placeholder=\"テキストを入力...\"\u003e\u003c/textarea\u003e\n\u003c/div\u003e\n\u003cdiv id=\"wb-status-bar\"\u003e\n  \u003cspan id=\"wb-coords\"\u003eX: 0 \u0026nbsp; Y: 0\u003c/span\u003e\n  \u003cspan id=\"wb-tool-name\"\u003eツール: ペン\u003c/span\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var canvas = document.getElementById('wb-canvas');\n  var ctx = canvas.getContext('2d');\n  var wrap = document.getElementById('wb-canvas-wrap');\n  var textOverlay = document.getElementById('wb-text-input-overlay');\n  var coordsEl = document.getElementById('wb-coords');\n  var toolNameEl = document.getElementById('wb-tool-name');\n  var colorInput = document.getElementById('wb-color-input');\n  var sizeSlider = document.getElementById('wb-size-slider');\n  var sizeVal = document.getElementById('wb-size-val');\n\n  var CANVAS_H = 620;\n  var currentTool = 'pen';\n  var isDrawing = false;\n  var startX = 0, startY = 0;\n  var lastX = 0, lastY = 0;\n  var undoStack = [];\n  var redoStack = [];\n  var MAX_HISTORY = 40;\n  var snapshot = null; // for shape preview\n  var textPos = {x: 0, y: 0};\n\n  var toolNames = {\n    pen: 'ペン',\n    line: '直線',\n    rect: '四角',\n    circle: '円',\n    text: 'テキスト',\n    eraser: '消しゴム'\n  };\n\n  // ---- Canvas sizing ----\n  function resizeCanvas() {\n    var w = wrap.clientWidth;\n    var imageData = null;\n    if (canvas.width \u003e 0 \u0026\u0026 canvas.height \u003e 0) {\n      imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n    }\n    canvas.width = w;\n    canvas.height = CANVAS_H;\n    fillWhite();\n    if (imageData) {\n      ctx.putImageData(imageData, 0, 0);\n    }\n  }\n\n  function fillWhite() {\n    ctx.fillStyle = '#ffffff';\n    ctx.fillRect(0, 0, canvas.width, canvas.height);\n  }\n\n  resizeCanvas();\n  window.addEventListener('resize', function() { resizeCanvas(); });\n\n  // ---- Tool buttons ----\n  var toolBtns = {\n    pen: document.getElementById('wb-tool-pen'),\n    line: document.getElementById('wb-tool-line'),\n    rect: document.getElementById('wb-tool-rect'),\n    circle: document.getElementById('wb-tool-circle'),\n    text: document.getElementById('wb-tool-text'),\n    eraser: document.getElementById('wb-tool-eraser')\n  };\n\n  Object.keys(toolBtns).forEach(function(t) {\n    toolBtns[t].addEventListener('click', function() {\n      commitTextInput();\n      setTool(t);\n    });\n  });\n\n  function setTool(t) {\n    currentTool = t;\n    Object.keys(toolBtns).forEach(function(k) {\n      toolBtns[k].classList.toggle('active', k === t);\n    });\n    toolNameEl.textContent = 'ツール: ' + (toolNames[t] || t);\n    wrap.style.cursor = (t === 'text') ? 'text' : 'crosshair';\n  }\n\n  // ---- Color \u0026 size ----\n  colorInput.addEventListener('input', function() { commitTextInput(); });\n  sizeSlider.addEventListener('input', function() {\n    sizeVal.textContent = sizeSlider.value + 'px';\n  });\n\n  function getColor() { return colorInput.value; }\n  function getSize() { return parseInt(sizeSlider.value, 10); }\n\n  // ---- Undo / Redo ----\n  function saveState() {\n    var data = canvas.toDataURL();\n    undoStack.push(data);\n    if (undoStack.length \u003e MAX_HISTORY) undoStack.shift();\n    redoStack = [];\n    updateUndoRedoBtns();\n  }\n\n  function updateUndoRedoBtns() {\n    document.getElementById('wb-undo-btn').disabled = undoStack.length === 0;\n    document.getElementById('wb-redo-btn').disabled = redoStack.length === 0;\n  }\n\n  function restoreState(dataUrl) {\n    var img = new Image();\n    img.onload = function() {\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n      ctx.drawImage(img, 0, 0);\n    };\n    img.src = dataUrl;\n  }\n\n  document.getElementById('wb-undo-btn').addEventListener('click', function() {\n    if (undoStack.length === 0) return;\n    redoStack.push(canvas.toDataURL());\n    restoreState(undoStack.pop());\n    updateUndoRedoBtns();\n  });\n\n  document.getElementById('wb-redo-btn').addEventListener('click', function() {\n    if (redoStack.length === 0) return;\n    undoStack.push(canvas.toDataURL());\n    restoreState(redoStack.pop());\n    updateUndoRedoBtns();\n  });\n\n  updateUndoRedoBtns();\n\n  // Keyboard shortcuts\n  document.addEventListener('keydown', function(e) {\n    if (e.target === textOverlay) return;\n    if ((e.ctrlKey || e.metaKey) \u0026\u0026 e.key === 'z') {\n      e.preventDefault();\n      document.getElementById('wb-undo-btn').click();\n    }\n    if ((e.ctrlKey || e.metaKey) \u0026\u0026 (e.key === 'y' || (e.shiftKey \u0026\u0026 e.key === 'z'))) {\n      e.preventDefault();\n      document.getElementById('wb-redo-btn').click();\n    }\n  });\n\n  // ---- Clear ----\n  document.getElementById('wb-clear-btn').addEventListener('click', function() {\n    commitTextInput();\n    saveState();\n    fillWhite();\n  });\n\n  // ---- Download ----\n  document.getElementById('wb-download-btn').addEventListener('click', function() {\n    commitTextInput();\n    var a = document.createElement('a');\n    a.download = 'whiteboard-' + Date.now() + '.png';\n    a.href = canvas.toDataURL('image/png');\n    a.click();\n  });\n\n  // ---- Pointer helpers ----\n  function getPos(e) {\n    var rect = canvas.getBoundingClientRect();\n    var scaleX = canvas.width / rect.width;\n    var scaleY = canvas.height / rect.height;\n    var clientX, clientY;\n    if (e.touches \u0026\u0026 e.touches.length \u003e 0) {\n      clientX = e.touches[0].clientX;\n      clientY = e.touches[0].clientY;\n    } else if (e.changedTouches \u0026\u0026 e.changedTouches.length \u003e 0) {\n      clientX = e.changedTouches[0].clientX;\n      clientY = e.changedTouches[0].clientY;\n    } else {\n      clientX = e.clientX;\n      clientY = e.clientY;\n    }\n    return {\n      x: Math.round((clientX - rect.left) * scaleX),\n      y: Math.round((clientY - rect.top) * scaleY)\n    };\n  }\n\n  // ---- Drawing context setup ----\n  function setupCtx(erase) {\n    ctx.lineCap = 'round';\n    ctx.lineJoin = 'round';\n    if (erase) {\n      ctx.globalCompositeOperation = 'destination-out';\n      ctx.strokeStyle = 'rgba(0,0,0,1)';\n      ctx.lineWidth = getSize() * 4;\n    } else {\n      ctx.globalCompositeOperation = 'source-over';\n      ctx.strokeStyle = getColor();\n      ctx.fillStyle = getColor();\n      ctx.lineWidth = getSize();\n    }\n  }\n\n  // ---- Text input overlay ----\n  function showTextInput(x, y) {\n    var rect = canvas.getBoundingClientRect();\n    var scaleX = rect.width / canvas.width;\n    var scaleY = rect.height / canvas.height;\n    textPos = {x: x, y: y};\n    textOverlay.style.left = Math.round(x * scaleX) + 'px';\n    textOverlay.style.top = Math.round(y * scaleY - 4) + 'px';\n    textOverlay.style.display = 'block';\n    textOverlay.style.fontSize = Math.max(12, getSize() * 3) + 'px';\n    textOverlay.style.color = getColor();\n    textOverlay.value = '';\n    textOverlay.focus();\n  }\n\n  function commitTextInput() {\n    if (textOverlay.style.display === 'none') return;\n    var text = textOverlay.value.trim();\n    if (text) {\n      saveState();\n      ctx.globalCompositeOperation = 'source-over';\n      ctx.fillStyle = getColor();\n      ctx.font = Math.max(14, getSize() * 3) + 'px sans-serif';\n      ctx.textBaseline = 'top';\n      var lines = text.split('\\n');\n      var lineH = Math.max(14, getSize() * 3) * 1.4;\n      lines.forEach(function(line, i) {\n        ctx.fillText(line, textPos.x, textPos.y + i * lineH);\n      });\n    }\n    textOverlay.style.display = 'none';\n    textOverlay.value = '';\n  }\n\n  textOverlay.addEventListener('keydown', function(e) {\n    if (e.key === 'Escape') {\n      textOverlay.style.display = 'none';\n      textOverlay.value = '';\n    }\n    if (e.key === 'Enter' \u0026\u0026 !e.shiftKey) {\n      e.preventDefault();\n      commitTextInput();\n    }\n  });\n\n  // ---- Draw shapes ----\n  function drawShape(x0, y0, x1, y1) {\n    if (snapshot) ctx.putImageData(snapshot, 0, 0);\n    setupCtx(false);\n    ctx.beginPath();\n    if (currentTool === 'line') {\n      ctx.moveTo(x0, y0);\n      ctx.lineTo(x1, y1);\n      ctx.stroke();\n    } else if (currentTool === 'rect') {\n      ctx.strokeRect(x0, y0, x1 - x0, y1 - y0);\n    } else if (currentTool === 'circle') {\n      var rx = (x1 - x0) / 2;\n      var ry = (y1 - y0) / 2;\n      var cx = x0 + rx;\n      var cy = y0 + ry;\n      ctx.ellipse(cx, cy, Math.abs(rx), Math.abs(ry), 0, 0, 2 * Math.PI);\n      ctx.stroke();\n    }\n  }\n\n  // ---- Mouse events ----\n  function onStart(e) {\n    e.preventDefault();\n    commitTextInput();\n    var pos = getPos(e);\n    if (currentTool === 'text') {\n      showTextInput(pos.x, pos.y);\n      return;\n    }\n    isDrawing = true;\n    startX = pos.x;\n    startY = pos.y;\n    lastX = pos.x;\n    lastY = pos.y;\n    saveState();\n    if (currentTool === 'line' || currentTool === 'rect' || currentTool === 'circle') {\n      snapshot = ctx.getImageData(0, 0, canvas.width, canvas.height);\n    }\n    if (currentTool === 'pen' || currentTool === 'eraser') {\n      setupCtx(currentTool === 'eraser');\n      ctx.beginPath();\n      ctx.moveTo(pos.x, pos.y);\n    }\n  }\n\n  function onMove(e) {\n    e.preventDefault();\n    var pos = getPos(e);\n    coordsEl.textContent = 'X: ' + pos.x + ' \\u00a0 Y: ' + pos.y;\n    if (!isDrawing) return;\n    if (currentTool === 'pen' || currentTool === 'eraser') {\n      setupCtx(currentTool === 'eraser');\n      ctx.lineTo(pos.x, pos.y);\n      ctx.stroke();\n      ctx.beginPath();\n      ctx.moveTo(pos.x, pos.y);\n    } else if (currentTool === 'line' || currentTool === 'rect' || currentTool === 'circle') {\n      drawShape(startX, startY, pos.x, pos.y);\n    }\n    lastX = pos.x;\n    lastY = pos.y;\n  }\n\n  function onEnd(e) {\n    if (!isDrawing) return;\n    e.preventDefault();\n    if (currentTool === 'line' || currentTool === 'rect' || currentTool === 'circle') {\n      var pos = getPos(e);\n      drawShape(startX, startY, pos.x, pos.y);\n      snapshot = null;\n    }\n    isDrawing = false;\n    ctx.beginPath();\n    ctx.globalCompositeOperation = 'source-over';\n  }\n\n  // Mouse\n  canvas.addEventListener('mousedown', onStart);\n  canvas.addEventListener('mousemove', onMove);\n  canvas.addEventListener('mouseup', onEnd);\n  canvas.addEventListener('mouseleave', onEnd);\n\n  // Touch\n  canvas.addEventListener('touchstart', onStart, {passive: false});\n  canvas.addEventListener('touchmove', onMove, {passive: false});\n  canvas.addEventListener('touchend', onEnd, {passive: false});\n  canvas.addEventListener('touchcancel', onEnd, {passive: false});\n\n  // Wrap height\n  wrap.style.height = CANVAS_H + 'px';\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"ホワイトボードお絵かきツール"},{"content":" Chmod パーミッション計算ツール クイックプリセット 644 — ファイル 755 — ディレクトリ 600 — プライベート 777 — 全員アクセス 444 — 読み取り専用 700 — オーナーのみ 664 — グループ書込 640 — グループ読取 8進数の値 8進数（000〜777）を直接入力\nまたはグリッドで選択 パーミッション グリッド 対象 読取 (r) 書込 (w) 実行 (x) 8進数 オーナー (u) ✓ ✓ ✓ 7 グループ (g) ✓ ✓ ✓ 5 その他 (o) ✓ ✓ ✓ 5 特殊パーミッション ✓ setuid — オーナー権限で実行 ✓ setgid — グループ権限で実行 ✓ スティッキービット — 削除制限 結果 8進数（数値表記） 755 シンボリック表記 rwxr-xr-x rwxr-xr-x chmod 755 filename コピー パーミッションの意味 読取 (r) = 4 ファイル：内容を閲覧できる。\nディレクトリ：一覧表示（ls）できる。 書込 (w) = 2 ファイル：変更・削除できる。\nディレクトリ：ファイルの作成・削除ができる。 実行 (x) = 1 ファイル：プログラムとして実行できる。\nディレクトリ：移動（cd）できる。 オーナー (u) ファイルを所有するユーザー。通常は作成者。 グループ (g) ファイルに関連付けられたグループのメンバー。 その他 (o) オーナー・グループ以外の全ユーザー。 setuid (4000) オーナーの権限で実行される。実行ビットに「s」が表示される。 setgid (2000) グループ権限で実行。ディレクトリ内の新ファイルがグループを継承。 スティッキービット (1000) ファイルのオーナーのみ削除可能。/tmp ディレクトリ等で使用。 関連ツール Cron式を生成 → Cron式ジェネレーター .htaccessを生成 → .htaccessジェネレーター SQLを整形 → SQLフォーマッター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/chmod-calculator/","summary":"\u003cstyle\u003e\n#chmod-app-ja *,\n#chmod-app-ja *::before,\n#chmod-app-ja *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#chmod-app-ja {\n  font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace;\n  background: #0f172a;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 28px;\n  max-width: 860px;\n  margin: 0 auto;\n}\n\n#chmod-app-ja h2 {\n  font-family: \"Noto Sans JP\", ui-sans-serif, system-ui, sans-serif;\n  font-size: 1.4rem;\n  font-weight: 700;\n  color: #84cc16;\n  margin-bottom: 20px;\n  letter-spacing: -0.02em;\n}\n\n#chmod-app-ja .chj-section-label {\n  font-family: \"Noto Sans JP\", ui-sans-serif, system-ui, sans-serif;\n  font-size: 0.7rem;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #64748b;\n  margin-bottom: 10px;\n}\n\n/* Presets */\n#chmod-app-ja .chj-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 24px;\n}\n\n#chmod-app-ja .chj-preset-btn {\n  background: #1e293b;\n  border: 1px solid #334155;\n  color: #94a3b8;\n  border-radius: 6px;\n  padding: 6px 14px;\n  font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n  font-size: 0.85rem;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n\n#chmod-app-ja .chj-preset-btn:hover {\n  background: #334155;\n  color: #e2e8f0;\n  border-color: #84cc16;\n}\n\n#chmod-app-ja .chj-preset-btn span {\n  font-weight: 700;\n  color: #84cc16;\n}\n\n/* Numeric input */\n#chmod-app-ja .chj-numeric-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 24px;\n}\n\n#chmod-app-ja .chj-numeric-input {\n  background: #1e293b;\n  border: 1px solid #334155;\n  color: #84cc16;\n  border-radius: 8px;\n  padding: 10px 16px;\n  font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n  font-size: 1.8rem;\n  font-weight: 700;\n  width: 120px;\n  text-align: center;\n  outline: none;\n  transition: border-color 0.15s;\n  letter-spacing: 0.1em;\n}\n\n#chmod-app-ja .chj-numeric-input:focus {\n  border-color: #84cc16;\n}\n\n#chmod-app-ja .chj-numeric-hint {\n  font-family: \"Noto Sans JP\", ui-sans-serif, system-ui, sans-serif;\n  font-size: 0.78rem;\n  color: #64748b;\n}\n\n/* Permission grid */\n#chmod-app-ja .chj-grid-wrapper {\n  overflow-x: auto;\n  margin-bottom: 24px;\n}\n\n#chmod-app-ja .chj-grid {\n  width: 100%;\n  border-collapse: collapse;\n  min-width: 380px;\n}\n\n#chmod-app-ja .chj-grid th {\n  font-family: \"Noto Sans JP\", ui-sans-serif, system-ui, sans-serif;\n  font-size: 0.72rem;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #64748b;\n  padding: 8px 12px;\n  text-align: center;\n  border-bottom: 1px solid #1e293b;\n}\n\n#chmod-app-ja .chj-grid th.chj-th-owner {\n  text-align: left;\n  color: #94a3b8;\n}\n\n#chmod-app-ja .chj-grid td {\n  padding: 10px 12px;\n  text-align: center;\n  border-bottom: 1px solid #1e293b;\n}\n\n#chmod-app-ja .chj-grid td.chj-td-label {\n  text-align: left;\n  font-family: \"Noto Sans JP\", ui-sans-serif, system-ui, sans-serif;\n  font-size: 0.88rem;\n  font-weight: 600;\n  color: #e2e8f0;\n  padding-left: 4px;\n}\n\n#chmod-app-ja .chj-grid tr:last-child td {\n  border-bottom: none;\n}\n\n#chmod-app-ja .chj-grid tr:hover td {\n  background: #1e293b22;\n}\n\n/* Checkbox custom */\n#chmod-app-ja .chj-cb-wrap {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n}\n\n#chmod-app-ja .chj-cb-wrap input[type=\"checkbox\"] {\n  display: none;\n}\n\n#chmod-app-ja .chj-cb-box {\n  width: 28px;\n  height: 28px;\n  border-radius: 6px;\n  border: 2px solid #334155;\n  background: #1e293b;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: all 0.15s;\n  font-size: 0.9rem;\n  color: transparent;\n  user-select: none;\n}\n\n#chmod-app-ja .chj-cb-wrap input:checked + .chj-cb-box {\n  background: #84cc16;\n  border-color: #84cc16;\n  color: #0f172a;\n}\n\n#chmod-app-ja .chj-cb-wrap:hover .chj-cb-box {\n  border-color: #84cc16;\n}\n\n/* Row color accents */\n#chmod-app-ja .chj-row-owner td.chj-td-label { color: #38bdf8; }\n#chmod-app-ja .chj-row-group  td.chj-td-label { color: #a78bfa; }\n#chmod-app-ja .chj-row-others td.chj-td-label { color: #f97316; }\n\n/* Special permissions */\n#chmod-app-ja .chj-special-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  margin-bottom: 24px;\n}\n\n#chmod-app-ja .chj-special-item {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  cursor: pointer;\n}\n\n#chmod-app-ja .chj-special-item input[type=\"checkbox\"] {\n  display: none;\n}\n\n#chmod-app-ja .chj-special-box {\n  width: 26px;\n  height: 26px;\n  border-radius: 5px;\n  border: 2px solid #334155;\n  background: #1e293b;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: all 0.15s;\n  font-size: 0.8rem;\n  color: transparent;\n}\n\n#chmod-app-ja .chj-special-item input:checked + .chj-special-box {\n  background: #f59e0b;\n  border-color: #f59e0b;\n  color: #0f172a;\n}\n\n#chmod-app-ja .chj-special-item:hover .chj-special-box {\n  border-color: #f59e0b;\n}\n\n#chmod-app-ja .chj-special-name {\n  font-family: \"Noto Sans JP\", ui-sans-serif, system-ui, sans-serif;\n  font-size: 0.83rem;\n  color: #94a3b8;\n}\n\n/* Output cards */\n#chmod-app-ja .chj-outputs {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n  gap: 12px;\n  margin-bottom: 24px;\n}\n\n#chmod-app-ja .chj-output-card {\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 10px;\n  padding: 14px 16px;\n}\n\n#chmod-app-ja .chj-output-card .chj-output-label {\n  font-family: \"Noto Sans JP\", ui-sans-serif, system-ui, sans-serif;\n  font-size: 0.68rem;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #64748b;\n  margin-bottom: 6px;\n}\n\n#chmod-app-ja .chj-output-card .chj-output-value {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #84cc16;\n  word-break: break-all;\n}\n\n/* Copy button */\n#chmod-app-ja .chj-copy-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 10px;\n  padding: 12px 16px;\n  margin-bottom: 28px;\n}\n\n#chmod-app-ja .chj-copy-cmd {\n  flex: 1;\n  font-size: 1rem;\n  color: #e2e8f0;\n  font-weight: 600;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n#chmod-app-ja .chj-copy-btn {\n  background: #84cc16;\n  border: none;\n  border-radius: 6px;\n  color: #0f172a;\n  font-family: \"Noto Sans JP\", ui-sans-serif, system-ui, sans-serif;\n  font-size: 0.8rem;\n  font-weight: 700;\n  padding: 7px 16px;\n  cursor: pointer;\n  transition: background 0.15s;\n  white-space: nowrap;\n  flex-shrink: 0;\n}\n\n#chmod-app-ja .chj-copy-btn:hover {\n  background: #a3e635;\n}\n\n#chmod-app-ja .chj-copy-btn.copied {\n  background: #22c55e;\n}\n\n/* Explanation */\n#chmod-app-ja .chj-explain {\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 10px;\n  padding: 20px;\n  margin-bottom: 20px;\n}\n\n#chmod-app-ja .chj-explain h3 {\n  font-family: \"Noto Sans JP\", ui-sans-serif, system-ui, sans-serif;\n  font-size: 0.95rem;\n  font-weight: 700;\n  color: #e2e8f0;\n  margin-bottom: 14px;\n}\n\n#chmod-app-ja .chj-explain-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  gap: 10px;\n}\n\n#chmod-app-ja .chj-explain-item {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n}\n\n#chmod-app-ja .chj-explain-item .chj-ei-title {\n  font-family: \"Noto Sans JP\", ui-sans-serif, system-ui, sans-serif;\n  font-size: 0.78rem;\n  font-weight: 700;\n  color: #84cc16;\n}\n\n#chmod-app-ja .chj-explain-item .chj-ei-desc {\n  font-family: \"Noto Sans JP\", ui-sans-serif, system-ui, sans-serif;\n  font-size: 0.78rem;\n  color: #94a3b8;\n  line-height: 1.55;\n}\n\n/* Symbolic breakdown */\n#chmod-app-ja .chj-sym-breakdown {\n  display: flex;\n  gap: 0;\n  font-size: 1.3rem;\n  font-weight: 700;\n  letter-spacing: 0.05em;\n  margin-bottom: 6px;\n  flex-wrap: wrap;\n}\n\n#chmod-app-ja .chj-sym-part {\n  padding: 4px 8px;\n  border-radius: 4px;\n}\n\n#chmod-app-ja .chj-sym-owner  { color: #38bdf8; background: #0c2340; }\n#chmod-app-ja .chj-sym-group  { color: #a78bfa; background: #1a0c40; }\n#chmod-app-ja .chj-sym-others { color: #f97316; background: #3d1500; }\n\n/* Responsive */\n@media (max-width: 600px) {\n  #chmod-app-ja {\n    padding: 18px 14px;\n  }\n  #chmod-app-ja .chj-numeric-input {\n    font-size: 1.4rem;\n    width: 100px;\n  }\n  #chmod-app-ja .chj-sym-breakdown {\n    font-size: 1rem;\n  }\n}\n\u003c/style\u003e\n\u003cdiv id=\"chmod-app-ja\"\u003e\n\u003ch2\u003eChmod パーミッション計算ツール\u003c/h2\u003e\n\u003cdiv class=\"chj-section-label\"\u003eクイックプリセット\u003c/div\u003e\n\u003cdiv class=\"chj-presets\"\u003e\n  \u003cbutton class=\"chj-preset-btn\" onclick=\"chjApplyPreset(644)\"\u003e\u003cspan\u003e644\u003c/span\u003e — ファイル\u003c/button\u003e\n  \u003cbutton class=\"chj-preset-btn\" onclick=\"chjApplyPreset(755)\"\u003e\u003cspan\u003e755\u003c/span\u003e — ディレクトリ\u003c/button\u003e\n  \u003cbutton class=\"chj-preset-btn\" onclick=\"chjApplyPreset(600)\"\u003e\u003cspan\u003e600\u003c/span\u003e — プライベート\u003c/button\u003e\n  \u003cbutton class=\"chj-preset-btn\" onclick=\"chjApplyPreset(777)\"\u003e\u003cspan\u003e777\u003c/span\u003e — 全員アクセス\u003c/button\u003e\n  \u003cbutton class=\"chj-preset-btn\" onclick=\"chjApplyPreset(444)\"\u003e\u003cspan\u003e444\u003c/span\u003e — 読み取り専用\u003c/button\u003e\n  \u003cbutton class=\"chj-preset-btn\" onclick=\"chjApplyPreset(700)\"\u003e\u003cspan\u003e700\u003c/span\u003e — オーナーのみ\u003c/button\u003e\n  \u003cbutton class=\"chj-preset-btn\" onclick=\"chjApplyPreset(664)\"\u003e\u003cspan\u003e664\u003c/span\u003e — グループ書込\u003c/button\u003e\n  \u003cbutton class=\"chj-preset-btn\" onclick=\"chjApplyPreset(640)\"\u003e\u003cspan\u003e640\u003c/span\u003e — グループ読取\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"chj-section-label\"\u003e8進数の値\u003c/div\u003e\n\u003cdiv class=\"chj-numeric-row\"\u003e\n  \u003cinput class=\"chj-numeric-input\" id=\"chj-octal-input\" type=\"text\" maxlength=\"4\" value=\"755\"\n    oninput=\"chjFromOctal(this.value)\" placeholder=\"755\" /\u003e\n  \u003cspan class=\"chj-numeric-hint\"\u003e8進数（000〜777）を直接入力\u003cbr\u003eまたはグリッドで選択\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv class=\"chj-section-label\"\u003eパーミッション グリッド\u003c/div\u003e\n\u003cdiv class=\"chj-grid-wrapper\"\u003e\n  \u003ctable class=\"chj-grid\"\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n        \u003cth class=\"chj-th-owner\"\u003e対象\u003c/th\u003e\n        \u003cth\u003e読取 (r)\u003c/th\u003e\n        \u003cth\u003e書込 (w)\u003c/th\u003e\n        \u003cth\u003e実行 (x)\u003c/th\u003e\n        \u003cth\u003e8進数\u003c/th\u003e\n      \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr class=\"chj-row-owner\"\u003e\n        \u003ctd class=\"chj-td-label\"\u003eオーナー (u)\u003c/td\u003e\n        \u003ctd\u003e\u003clabel class=\"chj-cb-wrap\"\u003e\u003cinput type=\"checkbox\" id=\"chj-ur\" onchange=\"chjUpdate()\"\u003e\u003cspan class=\"chj-cb-box\"\u003e✓\u003c/span\u003e\u003c/label\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003clabel class=\"chj-cb-wrap\"\u003e\u003cinput type=\"checkbox\" id=\"chj-uw\" onchange=\"chjUpdate()\"\u003e\u003cspan class=\"chj-cb-box\"\u003e✓\u003c/span\u003e\u003c/label\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003clabel class=\"chj-cb-wrap\"\u003e\u003cinput type=\"checkbox\" id=\"chj-ux\" onchange=\"chjUpdate()\"\u003e\u003cspan class=\"chj-cb-box\"\u003e✓\u003c/span\u003e\u003c/label\u003e\u003c/td\u003e\n        \u003ctd id=\"chj-uval\" style=\"color:#38bdf8;font-weight:700;\"\u003e7\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr class=\"chj-row-group\"\u003e\n        \u003ctd class=\"chj-td-label\"\u003eグループ (g)\u003c/td\u003e\n        \u003ctd\u003e\u003clabel class=\"chj-cb-wrap\"\u003e\u003cinput type=\"checkbox\" id=\"chj-gr\" onchange=\"chjUpdate()\"\u003e\u003cspan class=\"chj-cb-box\"\u003e✓\u003c/span\u003e\u003c/label\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003clabel class=\"chj-cb-wrap\"\u003e\u003cinput type=\"checkbox\" id=\"chj-gw\" onchange=\"chjUpdate()\"\u003e\u003cspan class=\"chj-cb-box\"\u003e✓\u003c/span\u003e\u003c/label\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003clabel class=\"chj-cb-wrap\"\u003e\u003cinput type=\"checkbox\" id=\"chj-gx\" onchange=\"chjUpdate()\"\u003e\u003cspan class=\"chj-cb-box\"\u003e✓\u003c/span\u003e\u003c/label\u003e\u003c/td\u003e\n        \u003ctd id=\"chj-gval\" style=\"color:#a78bfa;font-weight:700;\"\u003e5\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr class=\"chj-row-others\"\u003e\n        \u003ctd class=\"chj-td-label\"\u003eその他 (o)\u003c/td\u003e\n        \u003ctd\u003e\u003clabel class=\"chj-cb-wrap\"\u003e\u003cinput type=\"checkbox\" id=\"chj-or\" onchange=\"chjUpdate()\"\u003e\u003cspan class=\"chj-cb-box\"\u003e✓\u003c/span\u003e\u003c/label\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003clabel class=\"chj-cb-wrap\"\u003e\u003cinput type=\"checkbox\" id=\"chj-ow\" onchange=\"chjUpdate()\"\u003e\u003cspan class=\"chj-cb-box\"\u003e✓\u003c/span\u003e\u003c/label\u003e\u003c/td\u003e\n        \u003ctd\u003e\u003clabel class=\"chj-cb-wrap\"\u003e\u003cinput type=\"checkbox\" id=\"chj-ox\" onchange=\"chjUpdate()\"\u003e\u003cspan class=\"chj-cb-box\"\u003e✓\u003c/span\u003e\u003c/label\u003e\u003c/td\u003e\n        \u003ctd id=\"chj-oval\" style=\"color:#f97316;font-weight:700;\"\u003e5\u003c/td\u003e\n      \u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\u003cdiv class=\"chj-section-label\"\u003e特殊パーミッション\u003c/div\u003e\n\u003cdiv class=\"chj-special-row\"\u003e\n  \u003clabel class=\"chj-special-item\"\u003e\n    \u003cinput type=\"checkbox\" id=\"chj-setuid\" onchange=\"chjUpdate()\"\u003e\n    \u003cspan class=\"chj-special-box\"\u003e✓\u003c/span\u003e\n    \u003cspan class=\"chj-special-name\"\u003esetuid — オーナー権限で実行\u003c/span\u003e\n  \u003c/label\u003e\n  \u003clabel class=\"chj-special-item\"\u003e\n    \u003cinput type=\"checkbox\" id=\"chj-setgid\" onchange=\"chjUpdate()\"\u003e\n    \u003cspan class=\"chj-special-box\"\u003e✓\u003c/span\u003e\n    \u003cspan class=\"chj-special-name\"\u003esetgid — グループ権限で実行\u003c/span\u003e\n  \u003c/label\u003e\n  \u003clabel class=\"chj-special-item\"\u003e\n    \u003cinput type=\"checkbox\" id=\"chj-sticky\" onchange=\"chjUpdate()\"\u003e\n    \u003cspan class=\"chj-special-box\"\u003e✓\u003c/span\u003e\n    \u003cspan class=\"chj-special-name\"\u003eスティッキービット — 削除制限\u003c/span\u003e\n  \u003c/label\u003e\n\u003c/div\u003e\n\u003cdiv class=\"chj-section-label\"\u003e結果\u003c/div\u003e\n\u003cdiv class=\"chj-outputs\"\u003e\n  \u003cdiv class=\"chj-output-card\"\u003e\n    \u003cdiv class=\"chj-output-label\"\u003e8進数（数値表記）\u003c/div\u003e\n    \u003cdiv class=\"chj-output-value\" id=\"chj-out-octal\"\u003e755\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"chj-output-card\"\u003e\n    \u003cdiv class=\"chj-output-label\"\u003eシンボリック表記\u003c/div\u003e\n    \u003cdiv class=\"chj-sym-breakdown\" id=\"chj-out-sym-parts\"\u003e\n      \u003cspan class=\"chj-sym-part chj-sym-owner\"\u003erwx\u003c/span\u003e\u003cspan class=\"chj-sym-part chj-sym-group\"\u003er-x\u003c/span\u003e\u003cspan class=\"chj-sym-part chj-sym-others\"\u003er-x\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"chj-output-value\" style=\"font-size:0.85rem;color:#64748b;\" id=\"chj-out-sym-full\"\u003erwxr-xr-x\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"chj-copy-row\"\u003e\n  \u003cspan class=\"chj-copy-cmd\" id=\"chj-cmd-text\"\u003echmod 755 filename\u003c/span\u003e\n  \u003cbutton class=\"chj-copy-btn\" id=\"chj-copy-btn\" onclick=\"chjCopyCmd()\"\u003eコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"chj-explain\"\u003e\n  \u003ch3\u003eパーミッションの意味\u003c/h3\u003e\n  \u003cdiv class=\"chj-explain-grid\"\u003e\n    \u003cdiv class=\"chj-explain-item\"\u003e\n      \u003cspan class=\"chj-ei-title\"\u003e読取 (r) = 4\u003c/span\u003e\n      \u003cspan class=\"chj-ei-desc\"\u003eファイル：内容を閲覧できる。\u003cbr\u003eディレクトリ：一覧表示（ls）できる。\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"chj-explain-item\"\u003e\n      \u003cspan class=\"chj-ei-title\"\u003e書込 (w) = 2\u003c/span\u003e\n      \u003cspan class=\"chj-ei-desc\"\u003eファイル：変更・削除できる。\u003cbr\u003eディレクトリ：ファイルの作成・削除ができる。\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"chj-explain-item\"\u003e\n      \u003cspan class=\"chj-ei-title\"\u003e実行 (x) = 1\u003c/span\u003e\n      \u003cspan class=\"chj-ei-desc\"\u003eファイル：プログラムとして実行できる。\u003cbr\u003eディレクトリ：移動（cd）できる。\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"chj-explain-item\"\u003e\n      \u003cspan class=\"chj-ei-title\"\u003eオーナー (u)\u003c/span\u003e\n      \u003cspan class=\"chj-ei-desc\"\u003eファイルを所有するユーザー。通常は作成者。\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"chj-explain-item\"\u003e\n      \u003cspan class=\"chj-ei-title\"\u003eグループ (g)\u003c/span\u003e\n      \u003cspan class=\"chj-ei-desc\"\u003eファイルに関連付けられたグループのメンバー。\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"chj-explain-item\"\u003e\n      \u003cspan class=\"chj-ei-title\"\u003eその他 (o)\u003c/span\u003e\n      \u003cspan class=\"chj-ei-desc\"\u003eオーナー・グループ以外の全ユーザー。\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"chj-explain-item\"\u003e\n      \u003cspan class=\"chj-ei-title\"\u003esetuid (4000)\u003c/span\u003e\n      \u003cspan class=\"chj-ei-desc\"\u003eオーナーの権限で実行される。実行ビットに「s」が表示される。\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"chj-explain-item\"\u003e\n      \u003cspan class=\"chj-ei-title\"\u003esetgid (2000)\u003c/span\u003e\n      \u003cspan class=\"chj-ei-desc\"\u003eグループ権限で実行。ディレクトリ内の新ファイルがグループを継承。\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"chj-explain-item\"\u003e\n      \u003cspan class=\"chj-ei-title\"\u003eスティッキービット (1000)\u003c/span\u003e\n      \u003cspan class=\"chj-ei-desc\"\u003eファイルのオーナーのみ削除可能。/tmp ディレクトリ等で使用。\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  function chjGetBits() {\n    return {\n      ur: document.getElementById('chj-ur').checked,\n      uw: document.getElementById('chj-uw').checked,\n      ux: document.getElementById('chj-ux').checked,\n      gr: document.getElementById('chj-gr').checked,\n      gw: document.getElementById('chj-gw').checked,\n      gx: document.getElementById('chj-gx').checked,\n      or: document.getElementById('chj-or').checked,\n      ow: document.getElementById('chj-ow').checked,\n      ox: document.getElementById('chj-ox').checked,\n      setuid: document.getElementById('chj-setuid').checked,\n      setgid: document.getElementById('chj-setgid').checked,\n      sticky: document.getElementById('chj-sticky').checked\n    };\n  }\n\n  function chjBitsToOctal(b) {\n    var u = (b.ur ? 4 : 0) + (b.uw ? 2 : 0) + (b.ux ? 1 : 0);\n    var g = (b.gr ? 4 : 0) + (b.gw ? 2 : 0) + (b.gx ? 1 : 0);\n    var o = (b.or ? 4 : 0) + (b.ow ? 2 : 0) + (b.ox ? 1 : 0);\n    var s = (b.setuid ? 4 : 0) + (b.setgid ? 2 : 0) + (b.sticky ? 1 : 0);\n    return { u: u, g: g, o: o, s: s };\n  }\n\n  function chjBitsToSymbol(b) {\n    function bit(r, w, x, special, sChar) {\n      return (r ? 'r' : '-') + (w ? 'w' : '-') + (special ? (x ? sChar : sChar.toUpperCase()) : (x ? 'x' : '-'));\n    }\n    var uSym = bit(b.ur, b.uw, b.ux, b.setuid, 's');\n    var gSym = bit(b.gr, b.gw, b.gx, b.setgid, 's');\n    var oSym = bit(b.or, b.ow, b.ox, b.sticky, 't');\n    return { u: uSym, g: gSym, o: oSym };\n  }\n\n  window.chjUpdate = function() {\n    var b = chjGetBits();\n    var oct = chjBitsToOctal(b);\n    var sym = chjBitsToSymbol(b);\n\n    document.getElementById('chj-uval').textContent = oct.u;\n    document.getElementById('chj-gval').textContent = oct.g;\n    document.getElementById('chj-oval').textContent = oct.o;\n\n    var octalStr;\n    if (oct.s \u003e 0) {\n      octalStr = oct.s + '' + oct.u + '' + oct.g + '' + oct.o;\n    } else {\n      octalStr = oct.u + '' + oct.g + '' + oct.o;\n    }\n\n    document.getElementById('chj-out-octal').textContent = octalStr;\n    document.getElementById('chj-out-sym-parts').innerHTML =\n      '\u003cspan class=\"chj-sym-part chj-sym-owner\"\u003e' + sym.u + '\u003c/span\u003e' +\n      '\u003cspan class=\"chj-sym-part chj-sym-group\"\u003e' + sym.g + '\u003c/span\u003e' +\n      '\u003cspan class=\"chj-sym-part chj-sym-others\"\u003e' + sym.o + '\u003c/span\u003e';\n    document.getElementById('chj-out-sym-full').textContent = sym.u + sym.g + sym.o;\n    document.getElementById('chj-cmd-text').textContent = 'chmod ' + octalStr + ' filename';\n    document.getElementById('chj-octal-input').value = octalStr;\n\n    var btn = document.getElementById('chj-copy-btn');\n    btn.textContent = 'コピー';\n    btn.classList.remove('copied');\n  };\n\n  window.chjFromOctal = function(val) {\n    val = val.replace(/[^0-7]/g, '');\n    if (val.length \u003c 3 || val.length \u003e 4) return;\n\n    var digits;\n    var special = 0;\n    if (val.length === 4) {\n      special = parseInt(val[0], 8);\n      digits = [parseInt(val[1], 8), parseInt(val[2], 8), parseInt(val[3], 8)];\n    } else {\n      digits = [parseInt(val[0], 8), parseInt(val[1], 8), parseInt(val[2], 8)];\n    }\n\n    function setRow(d, prefix) {\n      document.getElementById('chj-' + prefix + 'r').checked = !!(d \u0026 4);\n      document.getElementById('chj-' + prefix + 'w').checked = !!(d \u0026 2);\n      document.getElementById('chj-' + prefix + 'x').checked = !!(d \u0026 1);\n    }\n\n    setRow(digits[0], 'u');\n    setRow(digits[1], 'g');\n    setRow(digits[2], 'o');\n    document.getElementById('chj-setuid').checked = !!(special \u0026 4);\n    document.getElementById('chj-setgid').checked = !!(special \u0026 2);\n    document.getElementById('chj-sticky').checked = !!(special \u0026 1);\n\n    chjUpdate();\n  };\n\n  window.chjApplyPreset = function(val) {\n    chjFromOctal(String(val));\n    document.getElementById('chj-octal-input').value = String(val);\n  };\n\n  window.chjCopyCmd = function() {\n    var cmd = document.getElementById('chj-cmd-text').textContent;\n    navigator.clipboard.writeText(cmd).then(function() {\n      var btn = document.getElementById('chj-copy-btn');\n      btn.textContent = 'コピーしました!';\n      btn.classList.add('copied');\n      setTimeout(function() {\n        btn.textContent = 'コピー';\n        btn.classList.remove('copied');\n      }, 2000);\n    }).catch(function() {\n      var ta = document.createElement('textarea');\n      ta.value = cmd;\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      var btn = document.getElementById('chj-copy-btn');\n      btn.textContent = 'コピーしました!';\n      btn.classList.add('copied');\n      setTimeout(function() {\n        btn.textContent = 'コピー';\n        btn.classList.remove('copied');\n      }, 2000);\n    });\n  };\n\n  // Initialize to 755\n  chjApplyPreset(755);\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch3 id=\"関連ツール\"\u003e関連ツール\u003c/h3\u003e\n\u003cblockquote\u003e\n\u003cp\u003eCron式を生成 → \u003ca href=\"https://productivity-works.com/ja/tools/cron-generator/\"\u003eCron式ジェネレーター\u003c/a\u003e\n\u003c/p\u003e","title":"Chmod計算ツール — Unixパーミッション設定"},{"content":"YAMLとJSONをブラウザ上で即時相互変換できます。入力を貼り付けると形式を自動判定します。\nYAML ↔ JSON 変換ツール 変換する サンプルYAML サンプルJSON クリア インデント: スペース2 スペース4 入力（YAMLまたはJSON） 出力 コピー freee会計 を使えば、請求書・経費・確定申告をまとめて自動化。\n中小企業・フリーランスの経理をラクにしましょう。 freeeを無料で試す ","permalink":"https://productivity-works.com/ja/tools/yaml-json-converter/","summary":"\u003cp\u003eYAMLとJSONをブラウザ上で即時相互変換できます。入力を貼り付けると形式を自動判定します。\u003c/p\u003e\n\u003cdiv id=\"yj-app\"\u003e\n\u003cstyle\u003e\n  #yj-app {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n    background: #1a1a1a;\n    color: #e5e5e5;\n    border-radius: 12px;\n    padding: 24px;\n    margin: 24px 0;\n  }\n  #yj-app * { box-sizing: border-box; }\n  #yj-app h2 {\n    margin: 0 0 16px;\n    font-size: 1.1rem;\n    color: #ea580c;\n    letter-spacing: 0.02em;\n  }\n  #yj-app .yj-controls {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px;\n    margin-bottom: 18px;\n    align-items: center;\n  }\n  #yj-app button {\n    background: #ea580c;\n    color: #fff;\n    border: none;\n    border-radius: 6px;\n    padding: 8px 16px;\n    font-size: 0.9rem;\n    cursor: pointer;\n    font-weight: 600;\n    transition: background 0.15s;\n  }\n  #yj-app button:hover { background: #c2410c; }\n  #yj-app button.yj-secondary {\n    background: #2a2a2a;\n    color: #e5e5e5;\n    border: 1px solid #444;\n    font-weight: 400;\n  }\n  #yj-app button.yj-secondary:hover { background: #333; }\n  #yj-app .yj-indent-label {\n    font-size: 0.85rem;\n    color: #aaa;\n    margin-left: 4px;\n    display: flex;\n    align-items: center;\n    gap: 6px;\n  }\n  #yj-app select {\n    background: #2a2a2a;\n    color: #e5e5e5;\n    border: 1px solid #444;\n    border-radius: 6px;\n    padding: 7px 10px;\n    font-size: 0.9rem;\n    cursor: pointer;\n  }\n  #yj-app .yj-panes {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 16px;\n  }\n  @media (max-width: 600px) {\n    #yj-app .yj-panes { grid-template-columns: 1fr; }\n  }\n  #yj-app .yj-pane-label {\n    font-size: 0.8rem;\n    color: #aaa;\n    margin-bottom: 6px;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n  }\n  #yj-app textarea {\n    width: 100%;\n    height: 280px;\n    background: #111;\n    color: #e5e5e5;\n    border: 1.5px solid #333;\n    border-radius: 8px;\n    padding: 12px;\n    font-family: \"Fira Mono\", \"Consolas\", \"Menlo\", monospace;\n    font-size: 0.85rem;\n    line-height: 1.6;\n    resize: vertical;\n    outline: none;\n    transition: border-color 0.15s;\n  }\n  #yj-app textarea:focus { border-color: #ea580c; }\n  #yj-app .yj-output-wrapper { position: relative; }\n  #yj-app .yj-copy-btn {\n    position: absolute;\n    top: 8px;\n    right: 8px;\n    background: #2a2a2a;\n    color: #aaa;\n    border: 1px solid #444;\n    border-radius: 5px;\n    padding: 4px 10px;\n    font-size: 0.78rem;\n    cursor: pointer;\n    font-weight: 400;\n    transition: background 0.15s, color 0.15s;\n    z-index: 2;\n  }\n  #yj-app .yj-copy-btn:hover { background: #ea580c; color: #fff; border-color: #ea580c; }\n  #yj-app #yj-error {\n    margin-top: 12px;\n    background: #3b0000;\n    border: 1px solid #7f1d1d;\n    color: #fca5a5;\n    border-radius: 6px;\n    padding: 10px 14px;\n    font-size: 0.88rem;\n    display: none;\n  }\n  #yj-app #yj-detect-badge {\n    font-size: 0.8rem;\n    color: #ea580c;\n    background: #2a1200;\n    border: 1px solid #7c2d12;\n    border-radius: 4px;\n    padding: 3px 9px;\n    display: inline-block;\n  }\n  #yj-app .yj-cta {\n    margin-top: 20px;\n    background: #1e2a1e;\n    border: 1px solid #2d5a2d;\n    border-radius: 8px;\n    padding: 14px 18px;\n    display: flex;\n    align-items: center;\n    gap: 14px;\n    flex-wrap: wrap;\n  }\n  #yj-app .yj-cta-text {\n    flex: 1;\n    font-size: 0.88rem;\n    color: #b0d4b0;\n    line-height: 1.5;\n  }\n  #yj-app .yj-cta-text strong { color: #6bcc6b; }\n  #yj-app .yj-cta a {\n    background: #16a34a;\n    color: #fff;\n    text-decoration: none;\n    border-radius: 6px;\n    padding: 8px 16px;\n    font-size: 0.88rem;\n    font-weight: 600;\n    white-space: nowrap;\n    transition: background 0.15s;\n  }\n  #yj-app .yj-cta a:hover { background: #15803d; }\n\u003c/style\u003e\n\u003ch2\u003eYAML ↔ JSON 変換ツール\u003c/h2\u003e\n\u003cdiv class=\"yj-controls\"\u003e\n  \u003cbutton onclick=\"yjConvert()\"\u003e変換する\u003c/button\u003e\n  \u003cbutton class=\"yj-secondary\" onclick=\"yjLoadSampleYAML()\"\u003eサンプルYAML\u003c/button\u003e\n  \u003cbutton class=\"yj-secondary\" onclick=\"yjLoadSampleJSON()\"\u003eサンプルJSON\u003c/button\u003e\n  \u003cbutton class=\"yj-secondary\" onclick=\"yjClear()\"\u003eクリア\u003c/button\u003e\n  \u003cspan class=\"yj-indent-label\"\u003e\n    インデント:\n    \u003cselect id=\"yj-indent\"\u003e\n      \u003coption value=\"2\" selected\u003eスペース2\u003c/option\u003e\n      \u003coption value=\"4\"\u003eスペース4\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/span\u003e\n  \u003cspan id=\"yj-detect-badge\" style=\"display:none\"\u003e\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv class=\"yj-panes\"\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"yj-pane-label\"\u003e入力（YAMLまたはJSON）\u003c/div\u003e\n    \u003ctextarea id=\"yj-input\" placeholder=\"YAMLまたはJSONをここに貼り付け…\" oninput=\"yjAutoDetect()\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"yj-pane-label\"\u003e出力\u003c/div\u003e\n    \u003cdiv class=\"yj-output-wrapper\"\u003e\n      \u003cbutton class=\"yj-copy-btn\" onclick=\"yjCopyOutput()\"\u003eコピー\u003c/button\u003e\n      \u003ctextarea id=\"yj-output\" readonly placeholder=\"変換結果がここに表示されます…\"\u003e\u003c/textarea\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"yj-error\"\u003e\u003c/div\u003e\n\u003cdiv class=\"yj-cta\"\u003e\n  \u003cdiv class=\"yj-cta-text\"\u003e\n    \u003cstrong\u003efreee会計\u003c/strong\u003e を使えば、請求書・経費・確定申告をまとめて自動化。\u003cbr\u003e\n    中小企業・フリーランスの経理をラクにしましょう。\n  \u003c/div\u003e\n  \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\"\u003efreeeを無料で試す\u003c/a\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n\n  // ── YAML Parser ──────────────────────────────────────────────────────────\n  function parseYAML(text) {\n    var lines = text.split('\\n');\n    var result = parseBlock(lines, 0, 0);\n    return result.value;\n  }\n\n  function getIndent(line) {\n    var m = line.match(/^(\\s*)/);\n    return m ? m[1].length : 0;\n  }\n\n  function parseScalar(raw) {\n    var s = raw.trim();\n    if (s === 'null' || s === '~') return null;\n    if (s === 'true') return true;\n    if (s === 'false') return false;\n    if (s === '') return null;\n    if ((s[0] === '\"' \u0026\u0026 s[s.length-1] === '\"') ||\n        (s[0] === \"'\" \u0026\u0026 s[s.length-1] === \"'\")) {\n      return s.slice(1, -1);\n    }\n    if (/^-?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/.test(s)) {\n      var n = Number(s);\n      if (!isNaN(n)) return n;\n    }\n    return s;\n  }\n\n  function parseBlock(lines, startLine, baseIndent) {\n    var i = startLine;\n    while (i \u003c lines.length \u0026\u0026 lines[i].trim() === '') i++;\n    if (i \u003e= lines.length) return {value: null, nextLine: i};\n\n    var firstLine = lines[i];\n    var firstIndent = getIndent(firstLine);\n    var firstTrimmed = firstLine.trim();\n\n    if (firstTrimmed.startsWith('- ') || firstTrimmed === '-') {\n      return parseSequence(lines, i, firstIndent);\n    } else {\n      return parseMapping(lines, i, firstIndent);\n    }\n  }\n\n  function parseSequence(lines, startLine, baseIndent) {\n    var arr = [];\n    var i = startLine;\n    while (i \u003c lines.length) {\n      var line = lines[i];\n      if (line.trim() === '') { i++; continue; }\n      var indent = getIndent(line);\n      if (indent \u003c baseIndent) break;\n      if (indent \u003e baseIndent) { i++; continue; }\n      var trimmed = line.trim();\n      if (!trimmed.startsWith('-')) break;\n      var afterDash = trimmed.slice(1);\n      if (afterDash.startsWith(' ')) afterDash = afterDash.slice(1);\n      if (afterDash.trim() !== '') {\n        if (/^[^:]+:\\s/.test(afterDash) || afterDash.endsWith(':')) {\n          var subIndent = indent + 2;\n          var synLines = [' '.repeat(subIndent) + afterDash.trim()];\n          var j = i + 1;\n          while (j \u003c lines.length) {\n            if (lines[j].trim() === '') { synLines.push(''); j++; continue; }\n            if (getIndent(lines[j]) \u003c= indent) break;\n            synLines.push(lines[j]);\n            j++;\n          }\n          var subResult = parseBlock(synLines, 0, subIndent);\n          arr.push(subResult.value);\n          i = j;\n        } else {\n          arr.push(parseScalar(afterDash));\n          i++;\n        }\n      } else {\n        i++;\n        while (i \u003c lines.length \u0026\u0026 lines[i].trim() === '') i++;\n        if (i \u003c lines.length) {\n          var childIndent = getIndent(lines[i]);\n          if (childIndent \u003e baseIndent) {\n            var res = parseBlock(lines, i, childIndent);\n            arr.push(res.value);\n            i = res.nextLine;\n          } else {\n            arr.push(null);\n          }\n        } else {\n          arr.push(null);\n        }\n      }\n    }\n    return {value: arr, nextLine: i};\n  }\n\n  function parseMapping(lines, startLine, baseIndent) {\n    var obj = {};\n    var i = startLine;\n    while (i \u003c lines.length) {\n      var line = lines[i];\n      if (line.trim() === '') { i++; continue; }\n      var indent = getIndent(line);\n      if (indent \u003c baseIndent) break;\n      if (indent \u003e baseIndent) { i++; continue; }\n      var trimmed = line.trim();\n      if (trimmed.startsWith('-')) break;\n      var colonIdx = trimmed.indexOf(': ');\n      var key, valStr;\n      if (colonIdx !== -1) {\n        key = trimmed.slice(0, colonIdx).trim();\n        valStr = trimmed.slice(colonIdx + 2).trim();\n      } else if (trimmed.endsWith(':')) {\n        key = trimmed.slice(0, -1).trim();\n        valStr = '';\n      } else {\n        return {value: parseScalar(trimmed), nextLine: i + 1};\n      }\n      i++;\n      if (valStr !== '') {\n        obj[key] = parseScalar(valStr);\n      } else {\n        while (i \u003c lines.length \u0026\u0026 lines[i].trim() === '') i++;\n        if (i \u003c lines.length) {\n          var childIndent = getIndent(lines[i]);\n          if (childIndent \u003e baseIndent) {\n            var childTrimmed = lines[i].trim();\n            if (childTrimmed.startsWith('- ') || childTrimmed === '-') {\n              var seqRes = parseSequence(lines, i, childIndent);\n              obj[key] = seqRes.value;\n              i = seqRes.nextLine;\n            } else {\n              var mapRes = parseMapping(lines, i, childIndent);\n              obj[key] = mapRes.value;\n              i = mapRes.nextLine;\n            }\n          } else {\n            obj[key] = null;\n          }\n        } else {\n          obj[key] = null;\n        }\n      }\n    }\n    return {value: obj, nextLine: i};\n  }\n\n  // ── JSON → YAML ──────────────────────────────────────────────────────────\n  function jsonToYAML(obj, indent, level) {\n    indent = indent || 2;\n    level = level || 0;\n    var pad = ' '.repeat(indent * level);\n\n    if (obj === null) return 'null';\n    if (obj === true) return 'true';\n    if (obj === false) return 'false';\n    if (typeof obj === 'number') return String(obj);\n    if (typeof obj === 'string') {\n      if (/[:#\\[\\]{}\u0026*!|\u003e'\"%@`,]/.test(obj) || obj.trim() !== obj ||\n          obj === '' || /^\\s*$/.test(obj) ||\n          ['true','false','null','~'].indexOf(obj.toLowerCase()) !== -1 ||\n          /^-?\\d/.test(obj)) {\n        return '\"' + obj.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"') + '\"';\n      }\n      return obj;\n    }\n    if (Array.isArray(obj)) {\n      if (obj.length === 0) return '[]';\n      var lines = obj.map(function(item) {\n        if (typeof item === 'object' \u0026\u0026 item !== null \u0026\u0026 !Array.isArray(item)) {\n          var keys = Object.keys(item);\n          if (keys.length === 0) return pad + '- {}';\n          var subLines = [];\n          subLines.push(pad + '- ' + keys[0] + ': ' + jsonToYAML(item[keys[0]], indent, 0));\n          for (var k = 1; k \u003c keys.length; k++) {\n            subLines.push(pad + '  ' + keys[k] + ': ' + jsonToYAML(item[keys[k]], indent, 0));\n          }\n          return subLines.join('\\n');\n        }\n        if (Array.isArray(item)) {\n          return pad + '-\\n' + jsonToYAML(item, indent, level + 1);\n        }\n        return pad + '- ' + jsonToYAML(item, indent, 0);\n      });\n      return lines.join('\\n');\n    }\n    if (typeof obj === 'object') {\n      var keys = Object.keys(obj);\n      if (keys.length === 0) return '{}';\n      var lines = keys.map(function(k) {\n        var val = obj[k];\n        if (typeof val === 'object' \u0026\u0026 val !== null) {\n          if (Array.isArray(val)) {\n            if (val.length === 0) return pad + k + ': []';\n            return pad + k + ':\\n' + jsonToYAML(val, indent, level + 1);\n          } else {\n            if (Object.keys(val).length === 0) return pad + k + ': {}';\n            return pad + k + ':\\n' + jsonToYAML(val, indent, level + 1);\n          }\n        }\n        return pad + k + ': ' + jsonToYAML(val, indent, 0);\n      });\n      return lines.join('\\n');\n    }\n    return String(obj);\n  }\n\n  // ── Auto-detect ──────────────────────────────────────────────────────────\n  function detectFormat(text) {\n    var t = text.trim();\n    if (!t) return null;\n    if (t[0] === '{' || t[0] === '[') return 'JSON';\n    return 'YAML';\n  }\n\n  // ── UI Functions ─────────────────────────────────────────────────────────\n  window.yjAutoDetect = function() {\n    var input = document.getElementById('yj-input').value;\n    var badge = document.getElementById('yj-detect-badge');\n    var fmt = detectFormat(input);\n    if (fmt) {\n      badge.textContent = '検出: ' + fmt;\n      badge.style.display = 'inline-block';\n    } else {\n      badge.style.display = 'none';\n    }\n  };\n\n  window.yjConvert = function() {\n    var input = document.getElementById('yj-input').value.trim();\n    var errEl = document.getElementById('yj-error');\n    var outEl = document.getElementById('yj-output');\n    var indent = parseInt(document.getElementById('yj-indent').value, 10);\n\n    errEl.style.display = 'none';\n    outEl.value = '';\n\n    if (!input) {\n      showError('入力が空です。YAMLまたはJSONを貼り付けてください。');\n      return;\n    }\n\n    var fmt = detectFormat(input);\n    try {\n      if (fmt === 'JSON') {\n        var parsed = JSON.parse(input);\n        outEl.value = jsonToYAML(parsed, indent, 0);\n      } else {\n        var parsed = parseYAML(input);\n        outEl.value = JSON.stringify(parsed, null, indent);\n      }\n    } catch(e) {\n      showError('解析エラー: ' + e.message);\n    }\n  };\n\n  window.yjCopyOutput = function() {\n    var outEl = document.getElementById('yj-output');\n    if (!outEl.value) return;\n    navigator.clipboard.writeText(outEl.value).then(function() {\n      var btn = document.querySelector('#yj-app .yj-copy-btn');\n      var orig = btn.textContent;\n      btn.textContent = 'コピー完了!';\n      setTimeout(function() { btn.textContent = orig; }, 1500);\n    }).catch(function() {\n      outEl.select();\n      document.execCommand('copy');\n    });\n  };\n\n  window.yjClear = function() {\n    document.getElementById('yj-input').value = '';\n    document.getElementById('yj-output').value = '';\n    document.getElementById('yj-error').style.display = 'none';\n    document.getElementById('yj-detect-badge').style.display = 'none';\n  };\n\n  window.yjLoadSampleYAML = function() {\n    document.getElementById('yj-input').value =\n'name: Productivity Works\\nversion: 2.1\\nactive: true\\nfeatures:\\n  - name: YAML変換ツール\\n    free: true\\n  - name: JSONフォーマッター\\n    free: true\\nsettings:\\n  theme: dark\\n  indent: 2\\n  maxSize: null\\ntags:\\n  - 生産性\\n  - ツール\\n  - 無料';\n    yjAutoDetect();\n    document.getElementById('yj-error').style.display = 'none';\n    document.getElementById('yj-output').value = '';\n  };\n\n  window.yjLoadSampleJSON = function() {\n    document.getElementById('yj-input').value =\nJSON.stringify({\n  \"name\": \"Productivity Works\",\n  \"version\": 2.1,\n  \"active\": true,\n  \"features\": [\n    {\"name\": \"YAML変換ツール\", \"free\": true},\n    {\"name\": \"JSONフォーマッター\", \"free\": true}\n  ],\n  \"settings\": {\n    \"theme\": \"dark\",\n    \"indent\": 2,\n    \"maxSize\": null\n  },\n  \"tags\": [\"生産性\", \"ツール\", \"無料\"]\n}, null, 2);\n    yjAutoDetect();\n    document.getElementById('yj-error').style.display = 'none';\n    document.getElementById('yj-output').value = '';\n  };\n\n  function showError(msg) {\n    var el = document.getElementById('yj-error');\n    el.textContent = msg;\n    el.style.display = 'block';\n  }\n\n})();\n\u003c/script\u003e\n\u003c/div\u003e","title":"YAML ↔ JSON 変換ツール — 無料オンラインツール"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nBMI計算ツール｜身長と体重から肥満度を自動判定 BMI（Body Mass Index：体格指数）は、身長と体重から算出される体格の目安です。日本肥満学会の基準に基づき、低体重・普通体重・肥満度を自動で判定します。適正体重・美容体重・モデル体重も同時に表示しますので、目標体重の参考にお役立てください。\n入力 身長 170 cm cm 体重 65 kg kg 性別 男性 女性 年齢 （任意） 歳 判定結果 BMI 22.5 普通体重 BMIスケール 1518.52530354050 体重の目安 適正体重（BMI 22） — — 美容体重（BMI 20） — — モデル体重（BMI 18） — — 現在の体重 65.0 kg 入力値 BMI判定基準（日本肥満学会） 判定BMI範囲 低体重 18.5未満 普通体重 18.5〜24.9 肥満（1度） 25.0〜29.9 肥満（2度） 30.0〜34.9 肥満（3度） 35.0〜39.9 肥満（4度） 40.0以上 注意: BMIは体格の目安であり、筋肉量や体脂肪率は考慮されません。健康管理は医療専門家にご相談ください。\n関連ツール 月々の支出バランスを見直す → 家計簿シミュレーター パーセントを計算 → パーセント計算ツール サブスクの年間コストを計算 → サブスク管理計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/bmi-calculator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"bmi計算ツール身長と体重から肥満度を自動判定\"\u003eBMI計算ツール｜身長と体重から肥満度を自動判定\u003c/h1\u003e\n\u003cp\u003eBMI（Body Mass Index：体格指数）は、身長と体重から算出される体格の目安です。日本肥満学会の基準に基づき、低体重・普通体重・肥満度を自動で判定します。適正体重・美容体重・モデル体重も同時に表示しますので、目標体重の参考にお役立てください。\u003c/p\u003e\n\u003cdiv id=\"bmi-tool-wrapper\" style=\"font-family:'Helvetica Neue',Arial,'Hiragino Kaku Gothic ProN','Hiragino Sans',Meiryo,sans-serif;max-width:680px;margin:2rem auto;\"\u003e\n\u003cstyle\u003e\n#bmi-tool-wrapper *{box-sizing:border-box;}\n#bmi-tool-wrapper .bmi-card{background:#fff;border:1px solid #e5e7eb;border-radius:16px;padding:28px 28px 24px;box-shadow:0 2px 12px rgba(0,0,0,.07);}\n#bmi-tool-wrapper .bmi-section-title{font-size:.8rem;font-weight:700;letter-spacing:.08em;color:#6b7280;text-transform:uppercase;margin:0 0 14px;}\n#bmi-tool-wrapper .bmi-field{margin-bottom:20px;}\n#bmi-tool-wrapper .bmi-label{display:flex;justify-content:space-between;align-items:center;font-size:.9rem;font-weight:600;color:#374151;margin-bottom:8px;}\n#bmi-tool-wrapper .bmi-label span.bmi-val{font-size:1.05rem;color:#10b981;font-weight:700;}\n#bmi-tool-wrapper input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:3px;background:#d1fae5;outline:none;cursor:pointer;}\n#bmi-tool-wrapper input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;background:#10b981;cursor:pointer;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.2);}\n#bmi-tool-wrapper input[type=range]::-moz-range-thumb{width:20px;height:20px;border-radius:50%;background:#10b981;cursor:pointer;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.2);}\n#bmi-tool-wrapper .bmi-number-input{display:flex;align-items:center;gap:8px;margin-top:6px;}\n#bmi-tool-wrapper .bmi-number-input input[type=number]{width:90px;padding:6px 10px;border:1.5px solid #d1d5db;border-radius:8px;font-size:1rem;text-align:center;color:#111827;transition:border-color .2s;}\n#bmi-tool-wrapper .bmi-number-input input[type=number]:focus{outline:none;border-color:#10b981;}\n#bmi-tool-wrapper .bmi-number-input .bmi-unit{font-size:.9rem;color:#6b7280;}\n#bmi-tool-wrapper .bmi-radio-group{display:flex;gap:12px;margin-top:4px;}\n#bmi-tool-wrapper .bmi-radio-btn{position:relative;flex:1;}\n#bmi-tool-wrapper .bmi-radio-btn input[type=radio]{position:absolute;opacity:0;width:0;height:0;}\n#bmi-tool-wrapper .bmi-radio-btn label{display:block;text-align:center;padding:9px 0;border:1.5px solid #d1d5db;border-radius:8px;font-size:.9rem;font-weight:600;color:#6b7280;cursor:pointer;transition:all .2s;}\n#bmi-tool-wrapper .bmi-radio-btn input[type=radio]:checked + label{border-color:#10b981;background:#f0fdf4;color:#10b981;}\n#bmi-tool-wrapper .bmi-result-box{border-radius:14px;padding:24px 22px;text-align:center;margin-bottom:20px;transition:background .3s;}\n#bmi-tool-wrapper .bmi-result-label{font-size:.85rem;font-weight:700;letter-spacing:.08em;color:rgba(255,255,255,.85);margin-bottom:4px;}\n#bmi-tool-wrapper .bmi-result-value{font-size:4rem;font-weight:800;color:#fff;line-height:1;margin-bottom:4px;}\n#bmi-tool-wrapper .bmi-result-category{font-size:1.3rem;font-weight:700;color:#fff;}\n#bmi-tool-wrapper .bmi-scale-wrap{margin-bottom:20px;}\n#bmi-tool-wrapper .bmi-scale-bar{position:relative;height:14px;border-radius:7px;background:linear-gradient(to right,#3b82f6 0%,#3b82f6 15.5%,#10b981 15.5%,#10b981 52.5%,#f59e0b 52.5%,#f59e0b 68.5%,#f97316 68.5%,#f97316 79%,#ef4444 79%,#ef4444 91%,#dc2626 91%,#dc2626 100%);margin:8px 0 4px;}\n#bmi-tool-wrapper .bmi-scale-pointer{position:absolute;top:-5px;width:4px;height:24px;background:#1f2937;border-radius:2px;transform:translateX(-50%);transition:left .4s cubic-bezier(.34,1.56,.64,1);}\n#bmi-tool-wrapper .bmi-scale-pointer::after{content:'';position:absolute;bottom:-6px;left:50%;transform:translateX(-50%);width:10px;height:10px;background:#1f2937;border-radius:50%;}\n#bmi-tool-wrapper .bmi-scale-labels{display:flex;justify-content:space-between;font-size:.68rem;color:#9ca3af;margin-top:2px;}\n#bmi-tool-wrapper .bmi-weight-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:20px;}\n#bmi-tool-wrapper .bmi-weight-card{background:#f9fafb;border:1px solid #e5e7eb;border-radius:10px;padding:12px 14px;}\n#bmi-tool-wrapper .bmi-weight-card .wc-title{font-size:.75rem;font-weight:700;color:#6b7280;margin-bottom:2px;}\n#bmi-tool-wrapper .bmi-weight-card .wc-value{font-size:1.25rem;font-weight:800;color:#111827;}\n#bmi-tool-wrapper .bmi-weight-card .wc-diff{font-size:.8rem;font-weight:600;margin-top:1px;}\n#bmi-tool-wrapper .diff-plus{color:#ef4444;}\n#bmi-tool-wrapper .diff-minus{color:#10b981;}\n#bmi-tool-wrapper .diff-zero{color:#6b7280;}\n#bmi-tool-wrapper .bmi-table{width:100%;border-collapse:collapse;font-size:.88rem;}\n#bmi-tool-wrapper .bmi-table th,#bmi-tool-wrapper .bmi-table td{padding:8px 12px;border:1px solid #e5e7eb;text-align:left;}\n#bmi-tool-wrapper .bmi-table th{background:#f3faf7;font-weight:700;color:#374151;}\n#bmi-tool-wrapper .bmi-table tr.highlight-row td{font-weight:700;}\n#bmi-tool-wrapper .bmi-dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;}\n@media(max-width:480px){\n  #bmi-tool-wrapper .bmi-card{padding:18px 14px;}\n  #bmi-tool-wrapper .bmi-result-value{font-size:3rem;}\n  #bmi-tool-wrapper .bmi-weight-grid{grid-template-columns:1fr 1fr;}\n}\n\u003c/style\u003e\n\u003c!-- INPUTS --\u003e\n\u003cdiv class=\"bmi-card\" style=\"margin-bottom:16px;\"\u003e\n  \u003cdiv class=\"bmi-section-title\"\u003e入力\u003c/div\u003e\n  \u003c!-- 身長 --\u003e\n  \u003cdiv class=\"bmi-field\"\u003e\n    \u003cdiv class=\"bmi-label\"\u003e身長 \u003cspan class=\"bmi-val\" id=\"lbl-height\"\u003e170 cm\u003c/span\u003e\u003c/div\u003e\n    \u003cinput type=\"range\" id=\"sl-height\" min=\"140\" max=\"200\" step=\"1\" value=\"170\" oninput=\"syncHeight(this.value,'range')\"\u003e\n    \u003cdiv class=\"bmi-number-input\"\u003e\n      \u003cinput type=\"number\" id=\"in-height\" min=\"140\" max=\"200\" value=\"170\" oninput=\"syncHeight(this.value,'num')\"\u003e\n      \u003cspan class=\"bmi-unit\"\u003ecm\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 体重 --\u003e\n  \u003cdiv class=\"bmi-field\"\u003e\n    \u003cdiv class=\"bmi-label\"\u003e体重 \u003cspan class=\"bmi-val\" id=\"lbl-weight\"\u003e65 kg\u003c/span\u003e\u003c/div\u003e\n    \u003cinput type=\"range\" id=\"sl-weight\" min=\"30\" max=\"150\" step=\"0.5\" value=\"65\" oninput=\"syncWeight(this.value,'range')\"\u003e\n    \u003cdiv class=\"bmi-number-input\"\u003e\n      \u003cinput type=\"number\" id=\"in-weight\" min=\"30\" max=\"150\" step=\"0.1\" value=\"65\" oninput=\"syncWeight(this.value,'num')\"\u003e\n      \u003cspan class=\"bmi-unit\"\u003ekg\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 性別 --\u003e\n  \u003cdiv class=\"bmi-field\" style=\"margin-bottom:12px;\"\u003e\n    \u003cdiv class=\"bmi-label\"\u003e性別\u003c/div\u003e\n    \u003cdiv class=\"bmi-radio-group\"\u003e\n      \u003cdiv class=\"bmi-radio-btn\"\u003e\n        \u003cinput type=\"radio\" id=\"sex-male\" name=\"bmi-sex\" value=\"male\" checked onchange=\"calcBMI()\"\u003e\n        \u003clabel for=\"sex-male\"\u003e男性\u003c/label\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"bmi-radio-btn\"\u003e\n        \u003cinput type=\"radio\" id=\"sex-female\" name=\"bmi-sex\" value=\"female\" onchange=\"calcBMI()\"\u003e\n        \u003clabel for=\"sex-female\"\u003e女性\u003c/label\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 年齢 --\u003e\n  \u003cdiv class=\"bmi-field\" style=\"margin-bottom:0;\"\u003e\n    \u003cdiv class=\"bmi-label\"\u003e年齢 \u003cspan style=\"font-size:.78rem;color:#9ca3af;font-weight:400;\"\u003e（任意）\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"bmi-number-input\"\u003e\n      \u003cinput type=\"number\" id=\"in-age\" min=\"1\" max=\"120\" placeholder=\"例：30\" style=\"width:90px;\" oninput=\"calcBMI()\"\u003e\n      \u003cspan class=\"bmi-unit\"\u003e歳\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- RESULTS --\u003e\n\u003cdiv class=\"bmi-card\"\u003e\n  \u003cdiv class=\"bmi-section-title\"\u003e判定結果\u003c/div\u003e\n  \u003c!-- BMI大表示 --\u003e\n  \u003cdiv class=\"bmi-result-box\" id=\"result-box\" style=\"background:#10b981;\"\u003e\n    \u003cdiv class=\"bmi-result-label\"\u003eBMI\u003c/div\u003e\n    \u003cdiv class=\"bmi-result-value\" id=\"result-value\"\u003e22.5\u003c/div\u003e\n    \u003cdiv class=\"bmi-result-category\" id=\"result-category\"\u003e普通体重\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- スケールバー --\u003e\n  \u003cdiv class=\"bmi-scale-wrap\"\u003e\n    \u003cdiv style=\"font-size:.78rem;color:#6b7280;margin-bottom:2px;\"\u003eBMIスケール\u003c/div\u003e\n    \u003cdiv class=\"bmi-scale-bar\"\u003e\n      \u003cdiv class=\"bmi-scale-pointer\" id=\"scale-pointer\" style=\"left:40%;\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"bmi-scale-labels\"\u003e\n      \u003cspan\u003e15\u003c/span\u003e\u003cspan\u003e18.5\u003c/span\u003e\u003cspan\u003e25\u003c/span\u003e\u003cspan\u003e30\u003c/span\u003e\u003cspan\u003e35\u003c/span\u003e\u003cspan\u003e40\u003c/span\u003e\u003cspan\u003e50\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 体重目安パネル --\u003e\n  \u003cdiv style=\"font-size:.78rem;font-weight:700;color:#6b7280;letter-spacing:.06em;margin-bottom:10px;\"\u003e体重の目安\u003c/div\u003e\n  \u003cdiv class=\"bmi-weight-grid\"\u003e\n    \u003cdiv class=\"bmi-weight-card\"\u003e\n      \u003cdiv class=\"wc-title\"\u003e適正体重（BMI 22）\u003c/div\u003e\n      \u003cdiv class=\"wc-value\" id=\"w-standard\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"wc-diff\" id=\"d-standard\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"bmi-weight-card\"\u003e\n      \u003cdiv class=\"wc-title\"\u003e美容体重（BMI 20）\u003c/div\u003e\n      \u003cdiv class=\"wc-value\" id=\"w-beauty\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"wc-diff\" id=\"d-beauty\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"bmi-weight-card\"\u003e\n      \u003cdiv class=\"wc-title\"\u003eモデル体重（BMI 18）\u003c/div\u003e\n      \u003cdiv class=\"wc-value\" id=\"w-model\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"wc-diff\" id=\"d-model\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"bmi-weight-card\"\u003e\n      \u003cdiv class=\"wc-title\"\u003e現在の体重\u003c/div\u003e\n      \u003cdiv class=\"wc-value\" id=\"w-current\"\u003e65.0 kg\u003c/div\u003e\n      \u003cdiv class=\"wc-diff\" id=\"d-current\" style=\"color:#10b981;\"\u003e入力値\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 判定基準表 --\u003e\n  \u003cdiv style=\"font-size:.78rem;font-weight:700;color:#6b7280;letter-spacing:.06em;margin-bottom:10px;\"\u003eBMI判定基準（日本肥満学会）\u003c/div\u003e\n  \u003ctable class=\"bmi-table\" id=\"bmi-ref-table\"\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\u003cth\u003e判定\u003c/th\u003e\u003cth\u003eBMI範囲\u003c/th\u003e\u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr data-cat=\"low\"\u003e\n        \u003ctd\u003e\u003cspan class=\"bmi-dot\" style=\"background:#3b82f6;\"\u003e\u003c/span\u003e低体重\u003c/td\u003e\n        \u003ctd\u003e18.5未満\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr data-cat=\"normal\"\u003e\n        \u003ctd\u003e\u003cspan class=\"bmi-dot\" style=\"background:#10b981;\"\u003e\u003c/span\u003e普通体重\u003c/td\u003e\n        \u003ctd\u003e18.5〜24.9\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr data-cat=\"ob1\"\u003e\n        \u003ctd\u003e\u003cspan class=\"bmi-dot\" style=\"background:#f59e0b;\"\u003e\u003c/span\u003e肥満（1度）\u003c/td\u003e\n        \u003ctd\u003e25.0〜29.9\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr data-cat=\"ob2\"\u003e\n        \u003ctd\u003e\u003cspan class=\"bmi-dot\" style=\"background:#f97316;\"\u003e\u003c/span\u003e肥満（2度）\u003c/td\u003e\n        \u003ctd\u003e30.0〜34.9\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr data-cat=\"ob3\"\u003e\n        \u003ctd\u003e\u003cspan class=\"bmi-dot\" style=\"background:#ef4444;\"\u003e\u003c/span\u003e肥満（3度）\u003c/td\u003e\n        \u003ctd\u003e35.0〜39.9\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr data-cat=\"ob4\"\u003e\n        \u003ctd\u003e\u003cspan class=\"bmi-dot\" style=\"background:#dc2626;\"\u003e\u003c/span\u003e肥満（4度）\u003c/td\u003e\n        \u003ctd\u003e40.0以上\u003c/td\u003e\n      \u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var CAT_MAP = [\n    {key:'low',  label:'低体重',     color:'#3b82f6', min:0,    max:18.5},\n    {key:'normal',label:'普通体重',  color:'#10b981', min:18.5, max:25},\n    {key:'ob1',  label:'肥満（1度）',color:'#f59e0b', min:25,   max:30},\n    {key:'ob2',  label:'肥満（2度）',color:'#f97316', min:30,   max:35},\n    {key:'ob3',  label:'肥満（3度）',color:'#ef4444', min:35,   max:40},\n    {key:'ob4',  label:'肥満（4度）',color:'#dc2626', min:40,   max:9999}\n  ];\n\n  /* スケールバーのポインター位置計算 (BMI 15〜50 の範囲を 0〜100% にマップ) */\n  function bmiToPercent(bmi){\n    var SCALE_MIN = 15, SCALE_MAX = 50;\n    var pct = (bmi - SCALE_MIN) / (SCALE_MAX - SCALE_MIN) * 100;\n    return Math.min(Math.max(pct, 1), 99);\n  }\n\n  function getCategory(bmi){\n    for(var i=0;i\u003cCAT_MAP.length;i++){\n      if(bmi \u003c CAT_MAP[i].max) return CAT_MAP[i];\n    }\n    return CAT_MAP[CAT_MAP.length-1];\n  }\n\n  function fmtDiff(diff){\n    if(Math.abs(diff) \u003c 0.05) return '\u003cspan class=\"diff-zero\"\u003e± 0.0 kg\u003c/span\u003e';\n    if(diff \u003e 0) return '\u003cspan class=\"diff-plus\"\u003e+ '+diff.toFixed(1)+' kg（現在より多い）\u003c/span\u003e';\n    return '\u003cspan class=\"diff-minus\"\u003e'+ diff.toFixed(1)+' kg（あと '+Math.abs(diff).toFixed(1)+' kg）\u003c/span\u003e';\n  }\n\n  function setWeightCard(valId, diffId, bmiTarget, heightM, currentKg){\n    var target = bmiTarget * heightM * heightM;\n    document.getElementById(valId).textContent = target.toFixed(1)+' kg';\n    var diff = target - currentKg;\n    document.getElementById(diffId).innerHTML = fmtDiff(diff);\n  }\n\n  window.calcBMI = function(){\n    var h = parseFloat(document.getElementById('sl-height').value);\n    var w = parseFloat(document.getElementById('sl-weight').value);\n    if(isNaN(h)||isNaN(w)||h\u003c=0||w\u003c=0) return;\n    var hM = h / 100;\n    var bmi = w / (hM * hM);\n    var cat = getCategory(bmi);\n\n    /* 大表示 */\n    document.getElementById('result-value').textContent = bmi.toFixed(1);\n    document.getElementById('result-category').textContent = cat.label;\n    document.getElementById('result-box').style.background = cat.color;\n\n    /* スケールポインター */\n    document.getElementById('scale-pointer').style.left = bmiToPercent(bmi)+'%';\n\n    /* 体重目安 */\n    setWeightCard('w-standard','d-standard',22,hM,w);\n    setWeightCard('w-beauty','d-beauty',20,hM,w);\n    setWeightCard('w-model','d-model',18,hM,w);\n    document.getElementById('w-current').textContent = w.toFixed(1)+' kg';\n\n    /* テーブルハイライト */\n    var rows = document.querySelectorAll('#bmi-ref-table tbody tr');\n    for(var i=0;i\u003crows.length;i++){\n      if(rows[i].getAttribute('data-cat')===cat.key){\n        rows[i].classList.add('highlight-row');\n        rows[i].style.background = cat.color+'18';\n      } else {\n        rows[i].classList.remove('highlight-row');\n        rows[i].style.background = '';\n      }\n    }\n  };\n\n  window.syncHeight = function(val, source){\n    var v = parseFloat(val);\n    if(isNaN(v)) return;\n    v = Math.min(Math.max(v, 140), 200);\n    document.getElementById('sl-height').value = v;\n    document.getElementById('in-height').value = v;\n    document.getElementById('lbl-height').textContent = v+' cm';\n    calcBMI();\n  };\n\n  window.syncWeight = function(val, source){\n    var v = parseFloat(val);\n    if(isNaN(v)) return;\n    v = Math.min(Math.max(v, 30), 150);\n    document.getElementById('sl-weight').value = v;\n    document.getElementById('in-weight').value = v;\n    document.getElementById('lbl-weight').textContent = v+' kg';\n    calcBMI();\n  };\n\n  /* 初期計算 */\n  calcBMI();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e注意:\u003c/strong\u003e BMIは体格の目安であり、筋肉量や体脂肪率は考慮されません。健康管理は医療専門家にご相談ください。\u003c/p\u003e","title":"BMI計算ツール｜身長と体重から肥満度を自動判定【無料】"},{"content":" ホワイトノイズ生成ツール ブラウザだけで動く環境音ジェネレーター。集中力アップ・睡眠改善・ストレス軽減に。外部ファイル不要・完全無料。\nノイズの種類 🌫ホワイト 🌸ピンク 🌿ブラウン 音量 🔈 70% タイマー 連続再生 15分 30分 60分 ▶ 再生する ノイズを選んで再生ボタンを押してください どのノイズを選べばいい？ ホワイトノイズ — 全周波数が均等なサウンド。オフィスの雑音・冷暖房の音・会話音をマスキングするのに最適。集中作業（コーディング・ライティング・勉強）におすすめ。\nピンクノイズ — 高周波になるほどエネルギーが下がる（1/f特性）。自然な聴こえ方で耳への負担が少ない。睡眠中の記憶定着を助けるという研究報告もあり、就寝時に人気。\nブラウンノイズ — 低音域が豊かで遠雷や波音に似たサウンド。深いリラックス・瞑想・睡眠導入に向いており、ADHD傾向の方にも効果的とされています。\n集中力アップで業務効率化 → freee会計で作業時間を短縮\n","permalink":"https://productivity-works.com/ja/tools/white-noise-generator/","summary":"\u003cdiv id=\"wn-app\"\u003e\n\u003cstyle\u003e\n#wn-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  max-width: 680px;\n  margin: 0 auto;\n  padding: 24px 16px;\n  color: #1a1a2e;\n}\n#wn-app h2 {\n  font-size: 1.4rem;\n  margin: 0 0 6px;\n  color: #1a1a2e;\n}\n#wn-app .wn-subtitle {\n  font-size: 0.9rem;\n  color: #666;\n  margin: 0 0 28px;\n  line-height: 1.7;\n}\n#wn-app .wn-card {\n  background: #f8f9ff;\n  border: 1px solid #e0e4f0;\n  border-radius: 16px;\n  padding: 28px 24px;\n  margin-bottom: 20px;\n}\n#wn-app .wn-noise-types {\n  display: flex;\n  gap: 10px;\n  margin-bottom: 24px;\n  flex-wrap: wrap;\n}\n#wn-app .wn-noise-btn {\n  flex: 1;\n  min-width: 90px;\n  padding: 14px 8px;\n  border: 2px solid #d0d6f0;\n  border-radius: 12px;\n  background: #fff;\n  cursor: pointer;\n  text-align: center;\n  font-size: 0.85rem;\n  font-weight: 700;\n  color: #555;\n  transition: all 0.2s ease;\n  user-select: none;\n}\n#wn-app .wn-noise-btn:hover {\n  border-color: #6c63ff;\n  color: #6c63ff;\n  background: #f0eeff;\n}\n#wn-app .wn-noise-btn.active {\n  border-color: #6c63ff;\n  background: #6c63ff;\n  color: #fff;\n}\n#wn-app .wn-noise-btn .wn-icon {\n  display: block;\n  font-size: 1.6rem;\n  margin-bottom: 4px;\n}\n#wn-app .wn-section-label {\n  font-size: 0.78rem;\n  font-weight: 700;\n  letter-spacing: 0.06em;\n  color: #888;\n  margin-bottom: 10px;\n}\n#wn-app .wn-volume-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 24px;\n}\n#wn-app .wn-volume-icon {\n  font-size: 1.2rem;\n  width: 24px;\n  text-align: center;\n  flex-shrink: 0;\n}\n#wn-app input[type=\"range\"] {\n  flex: 1;\n  -webkit-appearance: none;\n  appearance: none;\n  height: 6px;\n  border-radius: 3px;\n  background: linear-gradient(to right, #6c63ff 0%, #6c63ff var(--vol-pct, 70%), #d0d6f0 var(--vol-pct, 70%), #d0d6f0 100%);\n  outline: none;\n  cursor: pointer;\n}\n#wn-app input[type=\"range\"]::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  background: #6c63ff;\n  box-shadow: 0 2px 6px rgba(108,99,255,0.4);\n  cursor: pointer;\n  transition: transform 0.15s;\n}\n#wn-app input[type=\"range\"]::-webkit-slider-thumb:hover {\n  transform: scale(1.15);\n}\n#wn-app .wn-vol-label {\n  font-size: 0.85rem;\n  font-weight: 700;\n  color: #6c63ff;\n  width: 36px;\n  text-align: right;\n  flex-shrink: 0;\n}\n#wn-app .wn-timer-row {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 28px;\n  flex-wrap: wrap;\n}\n#wn-app .wn-timer-btn {\n  padding: 8px 16px;\n  border: 2px solid #d0d6f0;\n  border-radius: 8px;\n  background: #fff;\n  cursor: pointer;\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #666;\n  transition: all 0.2s;\n}\n#wn-app .wn-timer-btn:hover {\n  border-color: #6c63ff;\n  color: #6c63ff;\n}\n#wn-app .wn-timer-btn.active {\n  border-color: #6c63ff;\n  background: #eeecff;\n  color: #6c63ff;\n}\n#wn-app .wn-play-btn {\n  display: block;\n  width: 100%;\n  padding: 18px;\n  border: none;\n  border-radius: 14px;\n  background: linear-gradient(135deg, #6c63ff, #a78bfa);\n  color: #fff;\n  font-size: 1.1rem;\n  font-weight: 700;\n  cursor: pointer;\n  letter-spacing: 0.04em;\n  box-shadow: 0 4px 16px rgba(108,99,255,0.35);\n  transition: all 0.2s;\n}\n#wn-app .wn-play-btn:hover {\n  transform: translateY(-2px);\n  box-shadow: 0 6px 22px rgba(108,99,255,0.45);\n}\n#wn-app .wn-play-btn:active {\n  transform: translateY(0);\n}\n#wn-app .wn-play-btn.playing {\n  background: linear-gradient(135deg, #e53e3e, #fc8181);\n  box-shadow: 0 4px 16px rgba(229,62,62,0.35);\n}\n#wn-app .wn-canvas-wrap {\n  margin-bottom: 20px;\n  border-radius: 12px;\n  overflow: hidden;\n  background: #1a1a2e;\n}\n#wn-app canvas {\n  display: block;\n  width: 100%;\n  height: 80px;\n}\n#wn-app .wn-status {\n  text-align: center;\n  font-size: 0.88rem;\n  color: #888;\n  min-height: 1.4em;\n  margin-top: 14px;\n}\n#wn-app .wn-status.active {\n  color: #6c63ff;\n  font-weight: 700;\n}\n#wn-app .wn-info {\n  background: #fff;\n  border: 1px solid #e0e4f0;\n  border-radius: 12px;\n  padding: 20px;\n  margin-bottom: 20px;\n}\n#wn-app .wn-info h3 {\n  font-size: 1rem;\n  margin: 0 0 10px;\n  color: #333;\n}\n#wn-app .wn-info p {\n  font-size: 0.85rem;\n  color: #555;\n  margin: 0 0 8px;\n  line-height: 1.7;\n}\n#wn-app .wn-info p:last-child { margin-bottom: 0; }\n#wn-app .wn-cta {\n  background: linear-gradient(135deg, #e8f5e9, #f1f8e9);\n  border: 1px solid #a5d6a7;\n  border-radius: 12px;\n  padding: 18px 20px;\n  margin-bottom: 20px;\n  font-size: 0.88rem;\n  color: #2e7d32;\n  line-height: 1.7;\n}\n#wn-app .wn-cta a {\n  color: #1b5e20;\n  font-weight: 700;\n  text-decoration: underline;\n}\n#wn-app .wn-cta a:hover { opacity: 0.8; }\n\u003c/style\u003e\n\u003ch2\u003eホワイトノイズ生成ツール\u003c/h2\u003e\n\u003cp class=\"wn-subtitle\"\u003eブラウザだけで動く環境音ジェネレーター。集中力アップ・睡眠改善・ストレス軽減に。外部ファイル不要・完全無料。\u003c/p\u003e","title":"ホワイトノイズ生成ツール - 集中・睡眠用サウンド"},{"content":" 会議コスト計算ツール 参加者の役職・時給を入力してリアルタイムに会議コストを計算。コスト意識を高めて生産性の高い会議を実現しましょう。\n参加者を追加 ＋ 参加者を追加 全員削除 会議タイマー 00:00:00 ¥0 累積コスト（リアルタイム） ▶ 開始 ⏸ 一時停止 ↺ リセット 事前コスト見積 予定時間 時間 分 計算 参加者を追加してから予定時間を入力してください。 事業の経費・人件費管理もかんたんに\nfreee会計なら、経費精算・給与計算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → ポモドーロで集中 → ポモドーロタイマー 手取り額を計算 → 手取り計算ツール 投資利益率を計算 → ROI計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 ChatGPTを仕事で使う具体的な活用法10選【2026年最新版】 リモートワーク生産性を上げる方法15選【在宅勤務のコツ・ツール・環境構築】 ","permalink":"https://productivity-works.com/ja/tools/meeting-cost-calculator/","summary":"\u003cdiv id=\"mc-app\"\u003e\n\u003cstyle\u003e\n#mc-app *,#mc-app *::before,#mc-app *::after{box-sizing:border-box;margin:0;padding:0;}\n#mc-app{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Hiragino Sans','Noto Sans JP',sans-serif;color:#1e293b;background:#f8fafc;border-radius:14px;padding:28px 24px;max-width:760px;margin:0 auto;}\n#mc-app h2{font-size:1.35rem;font-weight:700;color:#0f172a;margin-bottom:6px;}\n#mc-app h3{font-size:1.05rem;font-weight:700;color:#0f172a;margin-bottom:10px;}\n#mc-app p.mc-sub{font-size:0.88rem;color:#64748b;margin-bottom:20px;}\n\u003cp\u003e/* Section cards */\n#mc-app .mc-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:20px 18px;margin-bottom:18px;}\u003c/p\u003e\n\u003cp\u003e/* Participant rows */\n#mc-app .mc-participant-row{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap;}\n#mc-app .mc-participant-row input[type=\u0026ldquo;text\u0026rdquo;],\n#mc-app .mc-participant-row input[type=\u0026ldquo;number\u0026rdquo;],\n#mc-app .mc-participant-row select{height:38px;border:1px solid #cbd5e1;border-radius:7px;padding:0 10px;font-size:14px;color:#1e293b;background:#f8fafc;outline:none;transition:border-color .15s;}\n#mc-app .mc-participant-row input[type=\u0026ldquo;text\u0026rdquo;]{width:130px;}\n#mc-app .mc-participant-row input[type=\u0026ldquo;number\u0026rdquo;]{width:110px;}\n#mc-app .mc-participant-row select{width:160px;}\n#mc-app .mc-participant-row input:focus,\n#mc-app .mc-participant-row select:focus{border-color:#3b82f6;background:#fff;}\n#mc-app .mc-participant-row label{font-size:12px;color:#64748b;white-space:nowrap;}\n#mc-app .mc-participant-row .mc-rate-label{font-size:13px;color:#475569;min-width:70px;white-space:nowrap;}\n#mc-app .mc-btn-del{background:none;border:none;cursor:pointer;color:#94a3b8;font-size:18px;line-height:1;padding:4px 6px;border-radius:5px;transition:color .15s;}\n#mc-app .mc-btn-del:hover{color:#ef4444;}\u003c/p\u003e","title":"会議コスト計算ツール"},{"content":" ポイントをドラッグして形を変える シェイプの頂点をドラッグして変形。右クリックで頂点を削除。ダブルクリックで頂点を追加。 プリセット \u0026lt;!-- プレビュー設定 --\u0026gt; \u0026lt;div class=\u0026quot;cp-card\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;プレビュー設定\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;cp-bg-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;シェイプ色\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; class=\u0026quot;cp-color-input\u0026quot; id=\u0026quot;cp-shape-color\u0026quot; value=\u0026quot;#6366f1\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-bg-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;背景色\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; class=\u0026quot;cp-color-input\u0026quot; id=\u0026quot;cp-bg-color\u0026quot; value=\u0026quot;#e2e8f0\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-bg-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;画像\u0026lt;/label\u0026gt; \u0026lt;button class=\u0026quot;cp-img-btn\u0026quot; id=\u0026quot;cp-upload-btn\u0026quot;\u0026gt;画像をアップロード\u0026lt;/button\u0026gt; \u0026lt;input type=\u0026quot;file\u0026quot; id=\u0026quot;cp-file-input\u0026quot; accept=\u0026quot;image/*\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;cp-reset-btn\u0026quot; id=\u0026quot;cp-clear-img\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt;画像を削除\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- CSS出力 --\u0026gt; \u0026lt;div class=\u0026quot;cp-card\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;CSS出力\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;cp-output-box\u0026quot; id=\u0026quot;cp-output\u0026quot;\u0026gt;clip-path: polygon(...);\u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;cp-copy-btn\u0026quot; id=\u0026quot;cp-copy-btn\u0026quot;\u0026gt;CSSをコピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- シェイプ情報 --\u0026gt; \u0026lt;div class=\u0026quot;cp-shape-info\u0026quot; id=\u0026quot;cp-shape-info\u0026quot;\u0026gt;polygon · 0点\u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;cp-reset-btn\u0026quot; id=\u0026quot;cp-reset-btn\u0026quot;\u0026gt;プリセットに戻す\u0026lt;/button\u0026gt; 使い方 プリセットを選択 — 三角形・星・六角形など9種類から選べます。 白いコントロールポイントをドラッグ してシェイプを自由に変形。 ダブルクリック でキャンバス上に新しいポイントを追加。 右クリック でポイントを削除（最小3点）。 シェイプ色・背景色 を自由にカスタマイズ。 画像をアップロード して実際の写真でclip-pathを確認。 CSSをコピー して、スタイルシートにそのまま貼り付け。 clip-pathとは clip-pathはCSSプロパティで、要素の表示領域を多角形や円などの形に切り抜く機能です。最も柔軟な値はpolygon()で、パーセンテージ座標のリストを指定します。\n/* 三角形 */ clip-path: polygon(50% 0%, 0% 100%, 100% 100%); /* 六角形 */ clip-path: polygon(25% 6%, 75% 6%, 100% 50%, 75% 94%, 25% 94%, 0% 50%); /* 星 */ clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%); 他にもcircle()、ellipse()、inset()などの関数があります。\nブラウザ対応 clip-pathのpolygon値はChrome・Firefox・Safari・Edgeすべての最新ブラウザで対応済みです（2025年時点でベンダープレフィックス不要）。\n関連ツール\nグラデーション → グラデーションギャラリー CSS詳細度 → CSS詳細度計算 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; ","permalink":"https://productivity-works.com/ja/tools/css-clip-path/","summary":"\u003cdiv id=\"cp-app\"\u003e\n\u003cstyle\u003e\n#cp-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', Roboto, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 0 48px 0;\n  color: #374151;\n}\n#cp-app * { box-sizing: border-box; }\n\n.cp-layout {\n  display: grid;\n  grid-template-columns: 1fr 320px;\n  gap: 20px;\n  align-items: start;\n}\n@media (max-width: 720px) {\n  .cp-layout { grid-template-columns: 1fr; }\n}\n\n/* キャンバスエリア */\n.cp-canvas-wrap {\n  position: relative;\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 14px;\n  overflow: hidden;\n}\n.cp-canvas-inner {\n  position: relative;\n  width: 100%;\n  aspect-ratio: 1 / 1;\n  max-height: 480px;\n  overflow: hidden;\n}\n#cp-canvas {\n  display: block;\n  width: 100%;\n  height: 100%;\n  touch-action: none;\n  cursor: crosshair;\n}\n.cp-canvas-label {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  transform: translateX(-50%);\n  background: rgba(0,0,0,0.5);\n  color: #fff;\n  font-size: 11px;\n  padding: 3px 10px;\n  border-radius: 20px;\n  pointer-events: none;\n  white-space: nowrap;\n}\n\n/* コントロールパネル */\n.cp-panel {\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n}\n\n.cp-card {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 16px;\n}\n.cp-card h3 {\n  margin: 0 0 10px 0;\n  font-size: 13px;\n  font-weight: 700;\n  color: #1e293b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n\n/* プリセット */\n.cp-presets {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 7px;\n}\n.cp-preset-btn {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 5px;\n  padding: 8px 4px;\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  cursor: pointer;\n  font-size: 11px;\n  color: #475569;\n  font-weight: 600;\n  transition: all 0.15s;\n}\n.cp-preset-btn:hover {\n  border-color: #6366f1;\n  color: #4f46e5;\n  background: #eef2ff;\n}\n.cp-preset-btn.active {\n  border-color: #6366f1;\n  background: #eef2ff;\n  color: #4f46e5;\n}\n\n/* 背景コントロール */\n.cp-bg-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 8px;\n}\n.cp-bg-row label {\n  font-size: 13px;\n  color: #374151;\n  font-weight: 500;\n  min-width: 80px;\n}\n.cp-color-input {\n  width: 40px;\n  height: 32px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 6px;\n  padding: 2px;\n  cursor: pointer;\n  background: none;\n}\n.cp-img-btn {\n  flex: 1;\n  padding: 6px 10px;\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 7px;\n  font-size: 12px;\n  cursor: pointer;\n  color: #475569;\n  font-weight: 600;\n  transition: all 0.15s;\n}\n.cp-img-btn:hover {\n  border-color: #6366f1;\n  color: #4f46e5;\n}\n\n/* CSS出力 */\n.cp-output-box {\n  background: #1e293b;\n  border-radius: 10px;\n  padding: 14px 16px;\n  font-family: 'SFMono-Regular', Consolas, monospace;\n  font-size: 12.5px;\n  color: #a5f3fc;\n  line-height: 1.6;\n  word-break: break-all;\n  min-height: 56px;\n}\n.cp-copy-btn {\n  width: 100%;\n  margin-top: 10px;\n  padding: 11px;\n  background: linear-gradient(135deg, #6366f1, #8b5cf6);\n  color: #fff;\n  border: none;\n  border-radius: 9px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.15s;\n}\n.cp-copy-btn:hover { opacity: 0.9; }\n.cp-copy-btn.copied {\n  background: linear-gradient(135deg, #10b981, #059669);\n}\n\n/* ポイント情報 */\n.cp-point-info {\n  font-size: 12px;\n  color: #64748b;\n  margin-top: 6px;\n  text-align: center;\n}\n\n/* シェイプ情報 */\n.cp-shape-info {\n  font-size: 12px;\n  color: #6366f1;\n  font-weight: 600;\n  background: #eef2ff;\n  border-radius: 6px;\n  padding: 6px 10px;\n  text-align: center;\n}\n\n/* リセットボタン */\n.cp-reset-btn {\n  width: 100%;\n  padding: 9px;\n  background: #f1f5f9;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n.cp-reset-btn:hover {\n  border-color: #cbd5e1;\n  background: #e2e8f0;\n}\n\u003c/style\u003e\n\u003cdiv class=\"cp-layout\"\u003e\n  \u003c!-- 左: キャンバス --\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"cp-canvas-wrap\"\u003e\n      \u003cdiv class=\"cp-canvas-inner\"\u003e\n        \u003ccanvas id=\"cp-canvas\"\u003e\u003c/canvas\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"cp-canvas-label\"\u003eポイントをドラッグして形を変える\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cp-point-info\" id=\"cp-point-info\"\u003eシェイプの頂点をドラッグして変形。右クリックで頂点を削除。ダブルクリックで頂点を追加。\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 右: パネル --\u003e\n  \u003cdiv class=\"cp-panel\"\u003e\n    \u003c!-- プリセット --\u003e\n    \u003cdiv class=\"cp-card\"\u003e\n      \u003ch3\u003eプリセット\u003c/h3\u003e\n      \u003cdiv class=\"cp-presets\" id=\"cp-presets\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;!-- プレビュー設定 --\u0026gt;\n\u0026lt;div class=\u0026quot;cp-card\u0026quot;\u0026gt;\n  \u0026lt;h3\u0026gt;プレビュー設定\u0026lt;/h3\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-bg-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;シェイプ色\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; class=\u0026quot;cp-color-input\u0026quot; id=\u0026quot;cp-shape-color\u0026quot; value=\u0026quot;#6366f1\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-bg-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;背景色\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; class=\u0026quot;cp-color-input\u0026quot; id=\u0026quot;cp-bg-color\u0026quot; value=\u0026quot;#e2e8f0\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-bg-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;画像\u0026lt;/label\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-img-btn\u0026quot; id=\u0026quot;cp-upload-btn\u0026quot;\u0026gt;画像をアップロード\u0026lt;/button\u0026gt;\n    \u0026lt;input type=\u0026quot;file\u0026quot; id=\u0026quot;cp-file-input\u0026quot; accept=\u0026quot;image/*\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;button class=\u0026quot;cp-reset-btn\u0026quot; id=\u0026quot;cp-clear-img\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt;画像を削除\u0026lt;/button\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- CSS出力 --\u0026gt;\n\u0026lt;div class=\u0026quot;cp-card\u0026quot;\u0026gt;\n  \u0026lt;h3\u0026gt;CSS出力\u0026lt;/h3\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-output-box\u0026quot; id=\u0026quot;cp-output\u0026quot;\u0026gt;clip-path: polygon(...);\u0026lt;/div\u0026gt;\n  \u0026lt;button class=\u0026quot;cp-copy-btn\u0026quot; id=\u0026quot;cp-copy-btn\u0026quot;\u0026gt;CSSをコピー\u0026lt;/button\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- シェイプ情報 --\u0026gt;\n\u0026lt;div class=\u0026quot;cp-shape-info\u0026quot; id=\u0026quot;cp-shape-info\u0026quot;\u0026gt;polygon · 0点\u0026lt;/div\u0026gt;\n\u0026lt;button class=\u0026quot;cp-reset-btn\u0026quot; id=\u0026quot;cp-reset-btn\u0026quot;\u0026gt;プリセットに戻す\u0026lt;/button\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var PRESETS = {\n    circle: {\n      label: '円',\n      type: 'circle'\n    },\n    ellipse: {\n      label: '楕円',\n      type: 'ellipse'\n    },\n    triangle: {\n      label: '三角形',\n      points: [[50,5],[95,95],[5,95]]\n    },\n    diamond: {\n      label: 'ダイヤ',\n      points: [[50,5],[95,50],[50,95],[5,50]]\n    },\n    pentagon: {\n      label: '五角形',\n      points: (function() {\n        var pts = [];\n        for (var i = 0; i \u003c 5; i++) {\n          var a = (i * 72 - 90) * Math.PI / 180;\n          pts.push([50 + 45 * Math.cos(a), 50 + 45 * Math.sin(a)]);\n        }\n        return pts;\n      })()\n    },\n    hexagon: {\n      label: '六角形',\n      points: (function() {\n        var pts = [];\n        for (var i = 0; i \u003c 6; i++) {\n          var a = (i * 60 - 30) * Math.PI / 180;\n          pts.push([50 + 47 * Math.cos(a), 50 + 47 * Math.sin(a)]);\n        }\n        return pts;\n      })()\n    },\n    star: {\n      label: '星',\n      points: (function() {\n        var pts = [];\n        for (var i = 0; i \u003c 10; i++) {\n          var a = (i * 36 - 90) * Math.PI / 180;\n          var r = i % 2 === 0 ? 47 : 20;\n          pts.push([50 + r * Math.cos(a), 50 + r * Math.sin(a)]);\n        }\n        return pts;\n      })()\n    },\n    arrow: {\n      label: '矢印',\n      points: [[0,35],[60,35],[60,15],[100,50],[60,85],[60,65],[0,65]]\n    },\n    cross: {\n      label: '十字',\n      points: [[33,0],[67,0],[67,33],[100,33],[100,67],[67,67],[67,100],[33,100],[33,67],[0,67],[0,33],[33,33]]\n    }\n  };\n\n  var canvas = document.getElementById('cp-canvas');\n  var ctx = canvas.getContext('2d');\n  var outputEl = document.getElementById('cp-output');\n  var copyBtn = document.getElementById('cp-copy-btn');\n  var resetBtn = document.getElementById('cp-reset-btn');\n  var shapeInfoEl = document.getElementById('cp-shape-info');\n  var pointInfoEl = document.getElementById('cp-point-info');\n  var shapeColorInput = document.getElementById('cp-shape-color');\n  var bgColorInput = document.getElementById('cp-bg-color');\n  var uploadBtn = document.getElementById('cp-upload-btn');\n  var fileInput = document.getElementById('cp-file-input');\n  var clearImgBtn = document.getElementById('cp-clear-img');\n\n  var points = [];\n  var activePreset = 'triangle';\n  var dragIndex = -1;\n  var shapeColor = '#6366f1';\n  var bgColor = '#e2e8f0';\n  var uploadedImage = null;\n  var currentType = 'polygon';\n\n  function resizeCanvas() {\n    var rect = canvas.parentElement.getBoundingClientRect();\n    var size = Math.min(rect.width, 480);\n    canvas.width = size;\n    canvas.height = size;\n    draw();\n  }\n\n  function toCanvasPx(px, py) {\n    return [px / 100 * canvas.width, py / 100 * canvas.height];\n  }\n\n  function fmt(n) { return Math.round(n * 10) / 10; }\n\n  function buildCSS() {\n    if (currentType === 'circle') return 'clip-path: circle(50% at 50% 50%);';\n    if (currentType === 'ellipse') return 'clip-path: ellipse(55% 35% at 50% 50%);';\n    if (points.length \u003c 3) return 'clip-path: polygon(/* ポイントを追加 */);';\n    var pts = points.map(function(p) { return fmt(p[0]) + '% ' + fmt(p[1]) + '%'; }).join(', ');\n    return 'clip-path: polygon(' + pts + ');';\n  }\n\n  function updateOutput() {\n    var css = buildCSS();\n    outputEl.textContent = css;\n    var count = currentType === 'polygon' ? points.length + '点' : '';\n    shapeInfoEl.textContent = currentType + (count ? ' · ' + count : '');\n  }\n\n  function draw() {\n    var w = canvas.width, h = canvas.height;\n    ctx.clearRect(0, 0, w, h);\n\n    ctx.fillStyle = bgColor;\n    ctx.fillRect(0, 0, w, h);\n\n    var cs = 20;\n    for (var r = 0; r \u003c h / cs; r++) {\n      for (var c = 0; c \u003c w / cs; c++) {\n        if ((r + c) % 2 === 0) {\n          ctx.fillStyle = 'rgba(0,0,0,0.04)';\n          ctx.fillRect(c * cs, r * cs, cs, cs);\n        }\n      }\n    }\n\n    ctx.save();\n    if (currentType === 'circle') {\n      ctx.beginPath();\n      ctx.arc(w / 2, h / 2, Math.min(w, h) * 0.47, 0, Math.PI * 2);\n      ctx.clip();\n    } else if (currentType === 'ellipse') {\n      ctx.beginPath();\n      ctx.ellipse(w / 2, h / 2, w * 0.52, h * 0.34, 0, 0, Math.PI * 2);\n      ctx.clip();\n    } else if (points.length \u003e= 3) {\n      ctx.beginPath();\n      var p0 = toCanvasPx(points[0][0], points[0][1]);\n      ctx.moveTo(p0[0], p0[1]);\n      for (var i = 1; i \u003c points.length; i++) {\n        var pi = toCanvasPx(points[i][0], points[i][1]);\n        ctx.lineTo(pi[0], pi[1]);\n      }\n      ctx.closePath();\n      ctx.clip();\n    }\n\n    if (uploadedImage) {\n      var ar = uploadedImage.width / uploadedImage.height;\n      var dw = w, dh = h;\n      if (ar \u003e 1) { dh = w / ar; } else { dw = h * ar; }\n      var dx = (w - dw) / 2, dy = (h - dh) / 2;\n      ctx.drawImage(uploadedImage, dx, dy, dw, dh);\n    } else {\n      ctx.fillStyle = shapeColor;\n      ctx.fillRect(0, 0, w, h);\n    }\n    ctx.restore();\n\n    if (currentType === 'polygon' \u0026\u0026 points.length \u003e= 2) {\n      ctx.beginPath();\n      var q0 = toCanvasPx(points[0][0], points[0][1]);\n      ctx.moveTo(q0[0], q0[1]);\n      for (var j = 1; j \u003c points.length; j++) {\n        var qj = toCanvasPx(points[j][0], points[j][1]);\n        ctx.lineTo(qj[0], qj[1]);\n      }\n      ctx.closePath();\n      ctx.strokeStyle = 'rgba(255,255,255,0.9)';\n      ctx.lineWidth = 1.5;\n      ctx.setLineDash([5, 4]);\n      ctx.stroke();\n      ctx.setLineDash([]);\n\n      for (var k = 0; k \u003c points.length; k++) {\n        var cp = toCanvasPx(points[k][0], points[k][1]);\n        ctx.beginPath();\n        ctx.arc(cp[0], cp[1], dragIndex === k ? 10 : 7, 0, Math.PI * 2);\n        ctx.fillStyle = dragIndex === k ? '#f59e0b' : '#fff';\n        ctx.fill();\n        ctx.strokeStyle = dragIndex === k ? '#d97706' : '#6366f1';\n        ctx.lineWidth = 2;\n        ctx.stroke();\n      }\n    }\n\n    updateOutput();\n  }\n\n  function loadPreset(name) {\n    var preset = PRESETS[name];\n    if (!preset) return;\n    activePreset = name;\n    if (preset.type === 'circle' || preset.type === 'ellipse') {\n      currentType = preset.type;\n      points = [];\n    } else {\n      currentType = 'polygon';\n      points = preset.points.map(function(p) { return [p[0], p[1]]; });\n    }\n    document.querySelectorAll('.cp-preset-btn').forEach(function(b) {\n      b.classList.toggle('active', b.dataset.preset === name);\n    });\n    pointInfoEl.textContent = currentType === 'polygon'\n      ? 'ポイントをドラッグして変形。右クリックで削除。ダブルクリックで追加。'\n      : 'この形は固定CSS関数を使用します。ポリゴン系プリセットを選ぶと頂点を編集できます。';\n    draw();\n  }\n\n  var presetsEl = document.getElementById('cp-presets');\n  Object.keys(PRESETS).forEach(function(name) {\n    var btn = document.createElement('button');\n    btn.className = 'cp-preset-btn';\n    btn.dataset.preset = name;\n    var svg = buildPresetSVG(name);\n    btn.innerHTML = svg + '\u003cspan\u003e' + PRESETS[name].label + '\u003c/span\u003e';\n    btn.addEventListener('click', function() { loadPreset(name); });\n    presetsEl.appendChild(btn);\n  });\n\n  function buildPresetSVG(name) {\n    var size = 36;\n    var preset = PRESETS[name];\n    if (name === 'circle') {\n      return '\u003csvg width=\"' + size + '\" height=\"' + size + '\" viewBox=\"0 0 100 100\"\u003e\u003ccircle cx=\"50\" cy=\"50\" r=\"45\" fill=\"#6366f1\"/\u003e\u003c/svg\u003e';\n    }\n    if (name === 'ellipse') {\n      return '\u003csvg width=\"' + size + '\" height=\"' + size + '\" viewBox=\"0 0 100 100\"\u003e\u003cellipse cx=\"50\" cy=\"50\" rx=\"48\" ry=\"30\" fill=\"#6366f1\"/\u003e\u003c/svg\u003e';\n    }\n    var pts = preset.points;\n    if (pts) {\n      var path = pts.map(function(p, i) { return (i === 0 ? 'M' : 'L') + p[0] + ',' + p[1]; }).join(' ') + 'Z';\n      return '\u003csvg width=\"' + size + '\" height=\"' + size + '\" viewBox=\"0 0 100 100\"\u003e\u003cpath d=\"' + path + '\" fill=\"#6366f1\"/\u003e\u003c/svg\u003e';\n    }\n    return '\u003csvg width=\"' + size + '\" height=\"' + size + '\" viewBox=\"0 0 100 100\"\u003e\u003crect width=\"100\" height=\"100\" fill=\"#6366f1\"/\u003e\u003c/svg\u003e';\n  }\n\n  function getCanvasPos(e) {\n    var rect = canvas.getBoundingClientRect();\n    var scaleX = canvas.width / rect.width;\n    var scaleY = canvas.height / rect.height;\n    var clientX = e.touches ? e.touches[0].clientX : e.clientX;\n    var clientY = e.touches ? e.touches[0].clientY : e.clientY;\n    return [(clientX - rect.left) * scaleX, (clientY - rect.top) * scaleY];\n  }\n\n  function hitTest(cx, cy) {\n    var radius = 14;\n    for (var i = points.length - 1; i \u003e= 0; i--) {\n      var cp = toCanvasPx(points[i][0], points[i][1]);\n      if (Math.hypot(cx - cp[0], cy - cp[1]) \u003c radius) return i;\n    }\n    return -1;\n  }\n\n  canvas.addEventListener('mousedown', function(e) {\n    if (currentType !== 'polygon') return;\n    e.preventDefault();\n    var pos = getCanvasPos(e);\n    var hit = hitTest(pos[0], pos[1]);\n    if (hit \u003e= 0) dragIndex = hit;\n    draw();\n  });\n  canvas.addEventListener('touchstart', function(e) {\n    if (currentType !== 'polygon') return;\n    e.preventDefault();\n    var pos = getCanvasPos(e);\n    var hit = hitTest(pos[0], pos[1]);\n    if (hit \u003e= 0) dragIndex = hit;\n    draw();\n  }, {passive: false});\n\n  canvas.addEventListener('mousemove', function(e) {\n    if (currentType !== 'polygon' || dragIndex \u003c 0) return;\n    e.preventDefault();\n    var pos = getCanvasPos(e);\n    var px = Math.max(0, Math.min(100, pos[0] / canvas.width * 100));\n    var py = Math.max(0, Math.min(100, pos[1] / canvas.height * 100));\n    points[dragIndex] = [px, py];\n    draw();\n  });\n  canvas.addEventListener('touchmove', function(e) {\n    if (currentType !== 'polygon' || dragIndex \u003c 0) return;\n    e.preventDefault();\n    var pos = getCanvasPos(e);\n    var px = Math.max(0, Math.min(100, pos[0] / canvas.width * 100));\n    var py = Math.max(0, Math.min(100, pos[1] / canvas.height * 100));\n    points[dragIndex] = [px, py];\n    draw();\n  }, {passive: false});\n\n  canvas.addEventListener('mouseup', function() { dragIndex = -1; draw(); });\n  canvas.addEventListener('touchend', function() { dragIndex = -1; draw(); });\n\n  canvas.addEventListener('contextmenu', function(e) {\n    if (currentType !== 'polygon') return;\n    e.preventDefault();\n    var pos = getCanvasPos(e);\n    var hit = hitTest(pos[0], pos[1]);\n    if (hit \u003e= 0 \u0026\u0026 points.length \u003e 3) {\n      points.splice(hit, 1);\n      draw();\n    }\n  });\n\n  canvas.addEventListener('dblclick', function(e) {\n    if (currentType !== 'polygon') return;\n    var pos = getCanvasPos(e);\n    var hit = hitTest(pos[0], pos[1]);\n    if (hit \u003e= 0) return;\n    var px = pos[0] / canvas.width * 100;\n    var py = pos[1] / canvas.height * 100;\n    var bestEdge = 0, bestDist = Infinity;\n    for (var i = 0; i \u003c points.length; i++) {\n      var j = (i + 1) % points.length;\n      var mx = (points[i][0] + points[j][0]) / 2;\n      var my = (points[i][1] + points[j][1]) / 2;\n      var d = Math.hypot(px - mx, py - my);\n      if (d \u003c bestDist) { bestDist = d; bestEdge = j; }\n    }\n    points.splice(bestEdge, 0, [px, py]);\n    draw();\n  });\n\n  shapeColorInput.addEventListener('input', function(e) { shapeColor = e.target.value; draw(); });\n  bgColorInput.addEventListener('input', function(e) { bgColor = e.target.value; draw(); });\n\n  uploadBtn.addEventListener('click', function() { fileInput.click(); });\n  fileInput.addEventListener('change', function(e) {\n    var file = e.target.files[0];\n    if (!file) return;\n    var reader = new FileReader();\n    reader.onload = function(ev) {\n      var img = new Image();\n      img.onload = function() {\n        uploadedImage = img;\n        clearImgBtn.style.display = 'block';\n        draw();\n      };\n      img.src = ev.target.result;\n    };\n    reader.readAsDataURL(file);\n  });\n  clearImgBtn.addEventListener('click', function() {\n    uploadedImage = null;\n    fileInput.value = '';\n    clearImgBtn.style.display = 'none';\n    draw();\n  });\n\n  copyBtn.addEventListener('click', function() {\n    var css = buildCSS();\n    navigator.clipboard.writeText(css).then(function() {\n      copyBtn.textContent = 'コピーしました！';\n      copyBtn.classList.add('copied');\n      setTimeout(function() {\n        copyBtn.textContent = 'CSSをコピー';\n        copyBtn.classList.remove('copied');\n      }, 2000);\n    });\n  });\n\n  resetBtn.addEventListener('click', function() { loadPreset(activePreset); });\n\n  window.addEventListener('resize', resizeCanvas);\n  resizeCanvas();\n  loadPreset('triangle');\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eプリセットを選択\u003c/strong\u003e — 三角形・星・六角形など9種類から選べます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e白いコントロールポイントをドラッグ\u003c/strong\u003e してシェイプを自由に変形。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eダブルクリック\u003c/strong\u003e でキャンバス上に新しいポイントを追加。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e右クリック\u003c/strong\u003e でポイントを削除（最小3点）。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eシェイプ色・背景色\u003c/strong\u003e を自由にカスタマイズ。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e画像をアップロード\u003c/strong\u003e して実際の写真でclip-pathを確認。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCSSをコピー\u003c/strong\u003e して、スタイルシートにそのまま貼り付け。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"clip-pathとは\"\u003eclip-pathとは\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eclip-path\u003c/code\u003eはCSSプロパティで、要素の表示領域を多角形や円などの形に切り抜く機能です。最も柔軟な値は\u003ccode\u003epolygon()\u003c/code\u003eで、パーセンテージ座標のリストを指定します。\u003c/p\u003e","title":"CSS clip-pathメーカー"},{"content":" 先頭・末尾のスペースを削除 連続スペースを1つに 空白行を削除 各行の前後スペースを削除 タブを削除 改行を削除 全空白を削除 入力テキスト 整形後テキスト 0 整形前の文字数 0 整形後の文字数 0 削除文字数 0% 削減率 差分プレビュー（取り消し線＝削除された文字） 出力をコピー 出力を入力に使用 クリア コピーしました！ テキスト処理の効率化にはfreee freeeを無料で試す 関連ツール テキストのケースを一括変換（大文字・小文字・camelCase等） → ケースコンバーター HTMLの特殊文字をエンティティに変換 → HTMLエンティティエンコーダー 文字数・単語数・行数をカウント → 文字数カウンター ","permalink":"https://productivity-works.com/ja/tools/whitespace-remover/","summary":"\u003cdiv id=\"ws-app\"\u003e\n\u003cstyle\u003e\n#ws-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 880px;\n  margin: 0 auto;\n  color: #134e4a;\n}\n\n#ws-app * {\n  box-sizing: border-box;\n}\n\n/* オプションパネル */\n#ws-options {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-bottom: 16px;\n  padding: 14px 16px;\n  background: #f0fdfa;\n  border: 1.5px solid #99f6e4;\n  border-radius: 12px;\n}\n\n.ws-opt-label {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: #134e4a;\n  cursor: pointer;\n  user-select: none;\n  padding: 4px 10px;\n  border-radius: 8px;\n  transition: background 0.15s;\n}\n\n.ws-opt-label:hover {\n  background: #ccfbf1;\n}\n\n.ws-opt-label input[type=\"checkbox\"] {\n  accent-color: #0d9488;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n}\n\n/* テキストエリア行 */\n#ws-io-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 12px;\n}\n\n@media (max-width: 640px) {\n  #ws-io-row {\n    grid-template-columns: 1fr;\n  }\n}\n\n.ws-panel-label {\n  font-size: 0.8rem;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  color: #0f766e;\n  margin-bottom: 6px;\n}\n\n#ws-input, #ws-output {\n  width: 100%;\n  min-height: 220px;\n  padding: 14px 16px;\n  font-size: 0.95rem;\n  line-height: 1.7;\n  border: 2px solid #99f6e4;\n  border-radius: 10px;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.2s;\n  background: #f0fdfa;\n  color: #134e4a;\n  font-family: inherit;\n}\n\n#ws-input:focus {\n  border-color: #0d9488;\n  background: #fff;\n  box-shadow: 0 0 0 3px rgba(13,148,136,0.12);\n}\n\n#ws-output {\n  background: #fafffe;\n  color: #134e4a;\n}\n\n/* 差分プレビュー */\n#ws-diff-wrap {\n  margin-bottom: 16px;\n}\n\n#ws-diff-title {\n  font-size: 0.8rem;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  color: #0f766e;\n  margin-bottom: 6px;\n}\n\n#ws-diff {\n  width: 100%;\n  min-height: 100px;\n  max-height: 260px;\n  overflow-y: auto;\n  padding: 14px 16px;\n  font-size: 0.9rem;\n  line-height: 1.75;\n  border: 2px solid #99f6e4;\n  border-radius: 10px;\n  background: #f0fdfa;\n  white-space: pre-wrap;\n  word-break: break-word;\n  font-family: inherit;\n}\n\n#ws-diff .ws-removed {\n  background: #fecaca;\n  color: #991b1b;\n  text-decoration: line-through;\n  border-radius: 2px;\n  padding: 0 1px;\n}\n\n/* 統計ボックス */\n#ws-stats {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  margin-bottom: 14px;\n}\n\n.ws-stat-box {\n  flex: 1 1 140px;\n  padding: 12px 16px;\n  border-radius: 10px;\n  border: 1.5px solid #99f6e4;\n  background: #f0fdfa;\n  text-align: center;\n}\n\n.ws-stat-box .ws-stat-val {\n  font-size: 1.6rem;\n  font-weight: 700;\n  color: #0d9488;\n  line-height: 1.1;\n}\n\n.ws-stat-box .ws-stat-lbl {\n  font-size: 0.78rem;\n  color: #5eead4;\n  margin-top: 3px;\n}\n\n/* ボタン */\n#ws-actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-bottom: 18px;\n}\n\n.ws-btn {\n  padding: 9px 20px;\n  border: none;\n  border-radius: 8px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n  font-family: inherit;\n}\n\n.ws-btn:active {\n  transform: scale(0.97);\n}\n\n.ws-btn-primary {\n  background: #0d9488;\n  color: #fff;\n}\n\n.ws-btn-primary:hover {\n  background: #0f766e;\n}\n\n.ws-btn-secondary {\n  background: #ccfbf1;\n  color: #0f766e;\n}\n\n.ws-btn-secondary:hover {\n  background: #99f6e4;\n}\n\n.ws-btn-danger {\n  background: #fee2e2;\n  color: #b91c1c;\n}\n\n.ws-btn-danger:hover {\n  background: #fecaca;\n}\n\n/* コピートースト */\n#ws-toast {\n  display: none;\n  padding: 8px 16px;\n  background: #0d9488;\n  color: #fff;\n  border-radius: 8px;\n  font-size: 0.85rem;\n  font-weight: 600;\n  align-items: center;\n}\n\n#ws-toast.ws-show {\n  display: inline-flex;\n}\n\n/* freee CTA */\n#ws-freee-cta {\n  margin-top: 28px;\n  padding: 14px 18px;\n  background: #f0fdfa;\n  border-left: 4px solid #0d9488;\n  border-radius: 0 8px 8px 0;\n  font-size: 0.9rem;\n  color: #134e4a;\n  line-height: 1.7;\n}\n\n#ws-freee-cta strong {\n  display: block;\n  margin-bottom: 4px;\n  color: #0f766e;\n  font-size: 0.95rem;\n}\n\n#ws-freee-cta a {\n  color: #0d9488;\n  font-weight: 600;\n  text-decoration: none;\n  border-bottom: 1.5px solid #5eead4;\n  transition: color 0.15s;\n}\n\n#ws-freee-cta a:hover {\n  color: #0f766e;\n}\n\u003c/style\u003e\n\u003c!-- オプション --\u003e\n\u003cdiv id=\"ws-options\"\u003e\n  \u003clabel class=\"ws-opt-label\"\u003e\u003cinput type=\"checkbox\" id=\"opt-trim\" checked\u003e 先頭・末尾のスペースを削除\u003c/label\u003e\n  \u003clabel class=\"ws-opt-label\"\u003e\u003cinput type=\"checkbox\" id=\"opt-double-spaces\" checked\u003e 連続スペースを1つに\u003c/label\u003e\n  \u003clabel class=\"ws-opt-label\"\u003e\u003cinput type=\"checkbox\" id=\"opt-blank-lines\" checked\u003e 空白行を削除\u003c/label\u003e\n  \u003clabel class=\"ws-opt-label\"\u003e\u003cinput type=\"checkbox\" id=\"opt-trim-lines\"\u003e 各行の前後スペースを削除\u003c/label\u003e\n  \u003clabel class=\"ws-opt-label\"\u003e\u003cinput type=\"checkbox\" id=\"opt-tabs\"\u003e タブを削除\u003c/label\u003e\n  \u003clabel class=\"ws-opt-label\"\u003e\u003cinput type=\"checkbox\" id=\"opt-linebreaks\"\u003e 改行を削除\u003c/label\u003e\n  \u003clabel class=\"ws-opt-label\"\u003e\u003cinput type=\"checkbox\" id=\"opt-all-ws\"\u003e 全空白を削除\u003c/label\u003e\n\u003c/div\u003e\n\u003c!-- 入力 / 出力 --\u003e\n\u003cdiv id=\"ws-io-row\"\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"ws-panel-label\"\u003e入力テキスト\u003c/div\u003e\n    \u003ctextarea id=\"ws-input\" placeholder=\"ここにテキストを貼り付けまたは入力...\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"ws-panel-label\"\u003e整形後テキスト\u003c/div\u003e\n    \u003ctextarea id=\"ws-output\" readonly placeholder=\"整形されたテキストがここに表示されます...\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 統計 --\u003e\n\u003cdiv id=\"ws-stats\"\u003e\n  \u003cdiv class=\"ws-stat-box\"\u003e\n    \u003cdiv class=\"ws-stat-val\" id=\"stat-before\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"ws-stat-lbl\"\u003e整形前の文字数\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ws-stat-box\"\u003e\n    \u003cdiv class=\"ws-stat-val\" id=\"stat-after\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"ws-stat-lbl\"\u003e整形後の文字数\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ws-stat-box\"\u003e\n    \u003cdiv class=\"ws-stat-val\" id=\"stat-removed\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"ws-stat-lbl\"\u003e削除文字数\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ws-stat-box\"\u003e\n    \u003cdiv class=\"ws-stat-val\" id=\"stat-pct\"\u003e0%\u003c/div\u003e\n    \u003cdiv class=\"ws-stat-lbl\"\u003e削減率\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 差分プレビュー --\u003e\n\u003cdiv id=\"ws-diff-wrap\"\u003e\n  \u003cdiv id=\"ws-diff-title\"\u003e差分プレビュー（取り消し線＝削除された文字）\u003c/div\u003e\n  \u003cdiv id=\"ws-diff\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- アクション --\u003e\n\u003cdiv id=\"ws-actions\"\u003e\n  \u003cbutton class=\"ws-btn ws-btn-primary\" id=\"btn-copy\"\u003e出力をコピー\u003c/button\u003e\n  \u003cbutton class=\"ws-btn ws-btn-secondary\" id=\"btn-swap\"\u003e出力を入力に使用\u003c/button\u003e\n  \u003cbutton class=\"ws-btn ws-btn-danger\" id=\"btn-clear\"\u003eクリア\u003c/button\u003e\n  \u003cspan id=\"ws-toast\"\u003eコピーしました！\u003c/span\u003e\n\u003c/div\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv id=\"ws-freee-cta\"\u003e\n  \u003cstrong\u003eテキスト処理の効率化にはfreee\u003c/strong\u003e\n  \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" rel=\"nofollow\"\u003efreeeを無料で試す\u003c/a\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  const input    = document.getElementById('ws-input');\n  const output   = document.getElementById('ws-output');\n  const diffEl   = document.getElementById('ws-diff');\n  const statBefore  = document.getElementById('stat-before');\n  const statAfter   = document.getElementById('stat-after');\n  const statRemoved = document.getElementById('stat-removed');\n  const statPct     = document.getElementById('stat-pct');\n  const toast    = document.getElementById('ws-toast');\n\n  const opts = {\n    trim:        document.getElementById('opt-trim'),\n    doubleSpaces:document.getElementById('opt-double-spaces'),\n    blankLines:  document.getElementById('opt-blank-lines'),\n    trimLines:   document.getElementById('opt-trim-lines'),\n    tabs:        document.getElementById('opt-tabs'),\n    linebreaks:  document.getElementById('opt-linebreaks'),\n    allWs:       document.getElementById('opt-all-ws'),\n  };\n\n  opts.allWs.addEventListener('change', function() {\n    const state = this.checked;\n    [opts.trim, opts.doubleSpaces, opts.blankLines, opts.trimLines, opts.tabs, opts.linebreaks].forEach(o =\u003e {\n      o.disabled = state;\n    });\n    process();\n  });\n\n  function clean(text) {\n    if (opts.allWs.checked) {\n      return text.replace(/\\s/g, '');\n    }\n    let t = text;\n    if (opts.tabs.checked)         t = t.replace(/\\t/g, '');\n    if (opts.trimLines.checked)    t = t.split('\\n').map(l =\u003e l.trim()).join('\\n');\n    if (opts.linebreaks.checked)   t = t.replace(/\\r?\\n/g, ' ');\n    if (opts.blankLines.checked)   t = t.replace(/(\\r?\\n){2,}/g, '\\n');\n    if (opts.doubleSpaces.checked) t = t.replace(/ {2,}/g, ' ');\n    if (opts.trim.checked)         t = t.trim();\n    return t;\n  }\n\n  function buildDiff(original, cleaned) {\n    const a = original.slice(0, 5000);\n    const b = cleaned.slice(0, 5000);\n\n    const dp = [];\n    for (let i = 0; i \u003c= a.length; i++) {\n      dp[i] = new Array(b.length + 1).fill(0);\n    }\n    for (let i = 1; i \u003c= a.length; i++) {\n      for (let j = 1; j \u003c= b.length; j++) {\n        dp[i][j] = a[i-1] === b[j-1] ? dp[i-1][j-1] + 1 : Math.max(dp[i-1][j], dp[i][j-1]);\n      }\n    }\n\n    let i = a.length, j = b.length;\n    const ops = [];\n    while (i \u003e 0 || j \u003e 0) {\n      if (i \u003e 0 \u0026\u0026 j \u003e 0 \u0026\u0026 a[i-1] === b[j-1]) {\n        ops.push({ type: 'keep', ch: a[i-1] }); i--; j--;\n      } else if (j \u003e 0 \u0026\u0026 (i === 0 || dp[i][j-1] \u003e= dp[i-1][j])) {\n        j--;\n      } else {\n        ops.push({ type: 'del', ch: a[i-1] }); i--;\n      }\n    }\n    ops.reverse();\n\n    let html = '';\n    let run = null;\n    for (const op of ops) {\n      const safe = op.ch === '\u003c' ? '\u0026lt;' : op.ch === '\u003e' ? '\u0026gt;' : op.ch === '\u0026' ? '\u0026amp;' : op.ch === '\\n' ? '↵\\n' : op.ch === '\\t' ? '→' : op.ch === ' ' ? '·' : op.ch;\n      if (op.type === 'del') {\n        if (run !== 'del') { if (run === 'del') html += '\u003c/span\u003e'; html += '\u003cspan class=\"ws-removed\"\u003e'; run = 'del'; }\n        html += safe;\n      } else {\n        if (run === 'del') { html += '\u003c/span\u003e'; }\n        run = 'keep';\n        html += op.ch === '\\n' ? '\\n' : op.ch === '\\t' ? '\\t' : op.ch === '\u003c' ? '\u0026lt;' : op.ch === '\u003e' ? '\u0026gt;' : op.ch === '\u0026' ? '\u0026amp;' : op.ch;\n      }\n    }\n    if (run === 'del') html += '\u003c/span\u003e';\n    if (original.length \u003e 5000) html += '\\n...（プレビューは5000文字までに制限）';\n    return html;\n  }\n\n  function process() {\n    const raw = input.value;\n    const result = clean(raw);\n    output.value = result;\n\n    const before  = raw.length;\n    const after   = result.length;\n    const removed = before - after;\n    const pct     = before \u003e 0 ? Math.round((removed / before) * 100) : 0;\n\n    statBefore.textContent  = before.toLocaleString('ja-JP');\n    statAfter.textContent   = after.toLocaleString('ja-JP');\n    statRemoved.textContent = removed.toLocaleString('ja-JP');\n    statPct.textContent     = pct + '%';\n\n    diffEl.innerHTML = raw.length \u003e 0\n      ? buildDiff(raw, result)\n      : '\u003cspan style=\"color:#9ca3af;font-style:italic;\"\u003e上にテキストを貼り付けると差分が表示されます...\u003c/span\u003e';\n  }\n\n  input.addEventListener('input', process);\n  Object.values(opts).forEach(o =\u003e o.addEventListener('change', process));\n\n  document.getElementById('btn-copy').addEventListener('click', function() {\n    const text = output.value;\n    if (!text) return;\n    navigator.clipboard.writeText(text).then(() =\u003e {\n      toast.classList.add('ws-show');\n      setTimeout(() =\u003e toast.classList.remove('ws-show'), 1800);\n    });\n  });\n\n  document.getElementById('btn-swap').addEventListener('click', function() {\n    input.value = output.value;\n    process();\n  });\n\n  document.getElementById('btn-clear').addEventListener('click', function() {\n    input.value = '';\n    process();\n  });\n\n  process();\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003eテキストのケースを一括変換（大文字・小文字・camelCase等） → \u003ca href=\"https://productivity-works.com/ja/tools/case-converter/\"\u003eケースコンバーター\u003c/a\u003e\n\u003c/p\u003e","title":"空白削除ツール - 無料オンラインで余分なスペース・空行を除去"},{"content":" テキストを入力 Web Speech APIを使うと、ブラウザが内蔵の音声合成でテキストを読み上げます。音声データはサーバーに送信されず、すべてデバイス上で処理されます。下の設定で声・速度・ピッチを自由にカスタマイズできます。 0 文字 約0分で読める 声・言語の選択 言語フィルター すべての言語 音声 音声を読み込み中… 再生設定 速度 1.00x ピッチ 1.00 音量 100% \u0026#9654; 再生 \u0026#9646;\u0026#9646; 一時停止 \u0026#9632; 停止 待機中 読み上げ中の単語 再生中、読み上げられている部分がここにハイライト表示されます。 お使いのブラウザはWeb Speech APIに対応していません。Chrome、Edge、Safariなどの最新ブラウザをご利用ください。 使い方 テキストエリアに読み上げたいテキストを貼り付けるか入力します。 言語フィルターで絞り込んだあと、使用する音声を選択します。 速度・ピッチ・音量のスライダーで好みに合わせて調整します。 「再生」ボタンを押すと、読み上げが開始されます。読み上げ中の部分がリアルタイムでハイライトされます。 **「一時停止」で途中停止、「停止」**で完全にリセットできます。 このツールについて このツールはブラウザ内蔵の Web Speech API（SpeechSynthesis） を使用しています。音声データはサーバーには一切送信されず、すべてお使いのデバイス上で処理されます。利用できる音声はOSとブラウザによって異なります。\n対応ブラウザ： Chrome、Edge、Safari、およびほとんどの最新ブラウザ。Firefoxは環境によって音声の選択肢が限られる場合があります。\n個人事業主・フリーランスの方へ：会計をもっとかんたんに freee会計なら、確定申告・請求書・経費管理をまとめて自動化。面倒な帳簿作業から解放されます。\nfreeeを無料で試す 関連ツール 読書時間計算ツール — テキストを読むのにかかる時間を計算 文字数カウンター — 文字数・単語数・文の数をカウント 本ページはアフィリエイト広告（A8.net）を含む場合があります。掲載している商品・サービスの選定は編集部の判断によるものです。 ","permalink":"https://productivity-works.com/ja/tools/text-to-speech/","summary":"\u003cdiv id=\"sp-app-ja\"\u003e\n\u003cstyle\u003e\n#sp-app-ja {\n  font-family: \"Hiragino Sans\", \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  max-width: 780px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#sp-app-ja h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin: 0 0 0.5rem 0;\n  color: #1a1a2e;\n}\n#sp-app-ja .sp-card {\n  background: #ffffff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 1.25rem 1.5rem;\n  margin-bottom: 1rem;\n  box-shadow: 0 1px 3px rgba(0,0,0,0.06);\n}\n#sp-app-ja textarea#sp-text-ja {\n  width: 100%;\n  min-height: 160px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  padding: 0.75rem 1rem;\n  font-size: 1rem;\n  font-family: inherit;\n  resize: vertical;\n  box-sizing: border-box;\n  transition: border-color 0.2s;\n  line-height: 1.8;\n  color: #1a1a2e;\n  background: #f8fafc;\n}\n#sp-app-ja textarea#sp-text-ja:focus {\n  outline: none;\n  border-color: #6366f1;\n  background: #fff;\n}\n#sp-app-ja .sp-meta-row {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-top: 0.45rem;\n  font-size: 0.82rem;\n  color: #64748b;\n}\n#sp-app-ja .sp-controls-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n}\n@media (max-width: 560px) {\n  #sp-app-ja .sp-controls-grid { grid-template-columns: 1fr; }\n}\n#sp-app-ja label.sp-label {\n  display: block;\n  font-size: 0.78rem;\n  font-weight: 700;\n  color: #475569;\n  margin-bottom: 0.3rem;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#sp-app-ja select.sp-select {\n  width: 100%;\n  padding: 0.5rem 0.75rem;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 0.92rem;\n  font-family: inherit;\n  background: #f8fafc;\n  color: #1a1a2e;\n  cursor: pointer;\n  appearance: none;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  padding-right: 2rem;\n}\n#sp-app-ja select.sp-select:focus { outline: none; border-color: #6366f1; }\n#sp-app-ja .sp-slider-wrap { display: flex; flex-direction: column; gap: 0.25rem; }\n#sp-app-ja .sp-slider-row { display: flex; align-items: center; gap: 0.6rem; }\n#sp-app-ja input[type=\"range\"].sp-slider {\n  flex: 1;\n  -webkit-appearance: none;\n  height: 4px;\n  border-radius: 2px;\n  background: #e2e8f0;\n  cursor: pointer;\n}\n#sp-app-ja input[type=\"range\"].sp-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #6366f1;\n  cursor: pointer;\n  box-shadow: 0 1px 3px rgba(99,102,241,0.4);\n}\n#sp-app-ja input[type=\"range\"].sp-slider::-moz-range-thumb {\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #6366f1;\n  border: none;\n  cursor: pointer;\n}\n#sp-app-ja .sp-slider-val {\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #6366f1;\n  min-width: 2.5rem;\n  text-align: right;\n}\n#sp-app-ja .sp-btn-row { display: flex; gap: 0.75rem; flex-wrap: wrap; }\n#sp-app-ja button.sp-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.4rem;\n  padding: 0.6rem 1.4rem;\n  border: none;\n  border-radius: 8px;\n  font-size: 0.95rem;\n  font-weight: 700;\n  font-family: inherit;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s, opacity 0.15s;\n}\n#sp-app-ja button.sp-btn:active { transform: scale(0.97); }\n#sp-app-ja button.sp-btn:disabled { opacity: 0.45; cursor: not-allowed; }\n#sp-app-ja button#sp-play-ja  { background: #6366f1; color: #fff; }\n#sp-app-ja button#sp-play-ja:hover:not(:disabled)  { background: #4f46e5; }\n#sp-app-ja button#sp-pause-ja { background: #f59e0b; color: #fff; }\n#sp-app-ja button#sp-pause-ja:hover:not(:disabled) { background: #d97706; }\n#sp-app-ja button#sp-stop-ja  { background: #ef4444; color: #fff; }\n#sp-app-ja button#sp-stop-ja:hover:not(:disabled)  { background: #dc2626; }\n#sp-app-ja .sp-status-bar {\n  display: flex;\n  align-items: center;\n  gap: 0.6rem;\n  font-size: 0.88rem;\n  color: #64748b;\n  padding: 0.5rem 0 0;\n}\n#sp-app-ja .sp-dot {\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background: #cbd5e1;\n  flex-shrink: 0;\n  transition: background 0.2s;\n}\n#sp-app-ja .sp-dot.playing { background: #22c55e; animation: sp-pulse-ja 1s infinite; }\n#sp-app-ja .sp-dot.paused  { background: #f59e0b; }\n#sp-app-ja .sp-dot.stopped { background: #ef4444; }\n@keyframes sp-pulse-ja {\n  0%, 100% { opacity: 1; }\n  50% { opacity: 0.4; }\n}\n#sp-app-ja .sp-highlight-box {\n  background: #f0f4ff;\n  border-left: 3px solid #6366f1;\n  border-radius: 0 8px 8px 0;\n  padding: 0.65rem 1rem;\n  font-size: 0.9rem;\n  color: #3730a3;\n  min-height: 2.4rem;\n  line-height: 1.8;\n  word-break: break-all;\n}\n#sp-app-ja .sp-highlight-box .sp-word-current {\n  background: #6366f1;\n  color: #fff;\n  border-radius: 3px;\n  padding: 0 3px;\n}\n#sp-app-ja .sp-no-support {\n  background: #fef9c3;\n  border: 1px solid #fde047;\n  border-radius: 8px;\n  padding: 1rem 1.25rem;\n  font-size: 0.9rem;\n  color: #713f12;\n}\n/* freee CTA */\n#sp-app-ja .sp-freee-cta {\n  background: linear-gradient(135deg, #e8f5e9 0%, #f1f8e9 100%);\n  border: 1.5px solid #a5d6a7;\n  border-radius: 12px;\n  padding: 1.25rem 1.5rem;\n  margin-bottom: 1rem;\n  display: flex;\n  align-items: center;\n  gap: 1.25rem;\n  flex-wrap: wrap;\n}\n#sp-app-ja .sp-freee-cta-text h3 {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #1b5e20;\n  margin: 0 0 0.3rem 0;\n}\n#sp-app-ja .sp-freee-cta-text p {\n  font-size: 0.88rem;\n  color: #2e7d32;\n  margin: 0;\n  line-height: 1.5;\n}\n#sp-app-ja .sp-freee-cta-btn {\n  display: inline-block;\n  background: #00c853;\n  color: #fff;\n  font-weight: 700;\n  font-size: 0.9rem;\n  padding: 0.6rem 1.4rem;\n  border-radius: 8px;\n  text-decoration: none;\n  white-space: nowrap;\n  flex-shrink: 0;\n  transition: background 0.15s;\n}\n#sp-app-ja .sp-freee-cta-btn:hover { background: #00b248; }\n/* A8 footer */\n#sp-app-ja .sp-a8-footer {\n  font-size: 0.75rem;\n  color: #94a3b8;\n  border-top: 1px solid #e2e8f0;\n  padding-top: 0.75rem;\n  margin-top: 0.5rem;\n  line-height: 1.5;\n}\n\u003c/style\u003e\n\u003cdiv class=\"sp-card\"\u003e\n  \u003ch2\u003eテキストを入力\u003c/h2\u003e\n  \u003ctextarea id=\"sp-text-ja\" placeholder=\"読み上げたいテキストをここに貼り付けるか入力して、「再生」を押してください…\"\u003eWeb Speech APIを使うと、ブラウザが内蔵の音声合成でテキストを読み上げます。音声データはサーバーに送信されず、すべてデバイス上で処理されます。下の設定で声・速度・ピッチを自由にカスタマイズできます。\u003c/textarea\u003e\n  \u003cdiv class=\"sp-meta-row\"\u003e\n    \u003cspan id=\"sp-char-count-ja\"\u003e0 文字\u003c/span\u003e\n    \u003cspan id=\"sp-read-time-ja\"\u003e約0分で読める\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sp-card\"\u003e\n  \u003ch2\u003e声・言語の選択\u003c/h2\u003e\n  \u003cdiv class=\"sp-controls-grid\"\u003e\n    \u003cdiv\u003e\n      \u003clabel class=\"sp-label\" for=\"sp-lang-filter-ja\"\u003e言語フィルター\u003c/label\u003e\n      \u003cselect class=\"sp-select\" id=\"sp-lang-filter-ja\"\u003e\n        \u003coption value=\"\"\u003eすべての言語\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel class=\"sp-label\" for=\"sp-voice-ja\"\u003e音声\u003c/label\u003e\n      \u003cselect class=\"sp-select\" id=\"sp-voice-ja\"\u003e\n        \u003coption value=\"\"\u003e音声を読み込み中…\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sp-card\"\u003e\n  \u003ch2\u003e再生設定\u003c/h2\u003e\n  \u003cdiv class=\"sp-controls-grid\"\u003e\n    \u003cdiv class=\"sp-slider-wrap\"\u003e\n      \u003clabel class=\"sp-label\" for=\"sp-rate-ja\"\u003e速度\u003c/label\u003e\n      \u003cdiv class=\"sp-slider-row\"\u003e\n        \u003cinput type=\"range\" class=\"sp-slider\" id=\"sp-rate-ja\" min=\"0.5\" max=\"2\" step=\"0.05\" value=\"1\"\u003e\n        \u003cspan class=\"sp-slider-val\" id=\"sp-rate-val-ja\"\u003e1.00x\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"sp-slider-wrap\"\u003e\n      \u003clabel class=\"sp-label\" for=\"sp-pitch-ja\"\u003eピッチ\u003c/label\u003e\n      \u003cdiv class=\"sp-slider-row\"\u003e\n        \u003cinput type=\"range\" class=\"sp-slider\" id=\"sp-pitch-ja\" min=\"0.5\" max=\"2\" step=\"0.05\" value=\"1\"\u003e\n        \u003cspan class=\"sp-slider-val\" id=\"sp-pitch-val-ja\"\u003e1.00\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"sp-slider-wrap\"\u003e\n      \u003clabel class=\"sp-label\" for=\"sp-volume-ja\"\u003e音量\u003c/label\u003e\n      \u003cdiv class=\"sp-slider-row\"\u003e\n        \u003cinput type=\"range\" class=\"sp-slider\" id=\"sp-volume-ja\" min=\"0\" max=\"1\" step=\"0.01\" value=\"1\"\u003e\n        \u003cspan class=\"sp-slider-val\" id=\"sp-volume-val-ja\"\u003e100%\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sp-card\"\u003e\n  \u003cdiv class=\"sp-btn-row\"\u003e\n    \u003cbutton class=\"sp-btn\" id=\"sp-play-ja\"\u003e\u0026#9654; 再生\u003c/button\u003e\n    \u003cbutton class=\"sp-btn\" id=\"sp-pause-ja\" disabled\u003e\u0026#9646;\u0026#9646; 一時停止\u003c/button\u003e\n    \u003cbutton class=\"sp-btn\" id=\"sp-stop-ja\" disabled\u003e\u0026#9632; 停止\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"sp-status-bar\"\u003e\n    \u003cdiv class=\"sp-dot\" id=\"sp-dot-ja\"\u003e\u003c/div\u003e\n    \u003cspan id=\"sp-status-text-ja\"\u003e待機中\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sp-card\"\u003e\n  \u003ch2\u003e読み上げ中の単語\u003c/h2\u003e\n  \u003cdiv class=\"sp-highlight-box\" id=\"sp-highlight-box-ja\"\u003e\n    \u003cspan style=\"color:#94a3b8;\"\u003e再生中、読み上げられている部分がここにハイライト表示されます。\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"sp-no-support-ja\" class=\"sp-no-support\" style=\"display:none;\"\u003e\n  お使いのブラウザはWeb Speech APIに対応していません。Chrome、Edge、Safariなどの最新ブラウザをご利用ください。\n\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  if (!('speechSynthesis' in window)) {\n    document.getElementById('sp-no-support-ja').style.display = 'block';\n    ['sp-play-ja','sp-pause-ja','sp-stop-ja'].forEach(function(id){ document.getElementById(id).disabled = true; });\n    return;\n  }\n\n  var synth = window.speechSynthesis;\n  var allVoices = [];\n  var currentUtterance = null;\n  var spState = 'stopped';\n\n  var elText     = document.getElementById('sp-text-ja');\n  var elLangFilter = document.getElementById('sp-lang-filter-ja');\n  var elVoice    = document.getElementById('sp-voice-ja');\n  var elRate     = document.getElementById('sp-rate-ja');\n  var elPitch    = document.getElementById('sp-pitch-ja');\n  var elVolume   = document.getElementById('sp-volume-ja');\n  var elRateVal  = document.getElementById('sp-rate-val-ja');\n  var elPitchVal = document.getElementById('sp-pitch-val-ja');\n  var elVolVal   = document.getElementById('sp-volume-val-ja');\n  var elPlay     = document.getElementById('sp-play-ja');\n  var elPause    = document.getElementById('sp-pause-ja');\n  var elStop     = document.getElementById('sp-stop-ja');\n  var elDot      = document.getElementById('sp-dot-ja');\n  var elStatus   = document.getElementById('sp-status-text-ja');\n  var elHighlight= document.getElementById('sp-highlight-box-ja');\n  var elCharCount= document.getElementById('sp-char-count-ja');\n  var elReadTime = document.getElementById('sp-read-time-ja');\n\n  function updateMeta() {\n    var txt = elText.value;\n    var chars = txt.length;\n    elCharCount.textContent = chars.toLocaleString() + ' 文字';\n    var words = txt.trim() === '' ? 0 : txt.trim().split(/\\s+/).length;\n    var mins = Math.max(1, Math.ceil(chars / 400));\n    elReadTime.textContent = '約' + mins + '分で読める';\n  }\n  elText.addEventListener('input', updateMeta);\n  updateMeta();\n\n  elRate.addEventListener('input', function() { elRateVal.textContent = parseFloat(elRate.value).toFixed(2) + 'x'; });\n  elPitch.addEventListener('input', function() { elPitchVal.textContent = parseFloat(elPitch.value).toFixed(2); });\n  elVolume.addEventListener('input', function() { elVolVal.textContent = Math.round(parseFloat(elVolume.value) * 100) + '%'; });\n\n  function populateLangFilter(voices) {\n    var langs = [];\n    voices.forEach(function(v) {\n      if (langs.indexOf(v.lang) === -1) langs.push(v.lang);\n    });\n    langs.sort();\n    elLangFilter.innerHTML = '\u003coption value=\"\"\u003eすべての言語\u003c/option\u003e';\n    langs.forEach(function(l) {\n      var opt = document.createElement('option');\n      opt.value = l;\n      opt.textContent = l;\n      if (l === 'ja-JP' || l === 'ja') opt.selected = true;\n      elLangFilter.appendChild(opt);\n    });\n  }\n\n  function populateVoices(filterLang) {\n    var voices = filterLang\n      ? allVoices.filter(function(v){ return v.lang === filterLang; })\n      : allVoices;\n    elVoice.innerHTML = '';\n    if (voices.length === 0) {\n      elVoice.innerHTML = '\u003coption value=\"\"\u003eこの言語の音声はありません\u003c/option\u003e';\n      return;\n    }\n    voices.forEach(function(v) {\n      var opt = document.createElement('option');\n      opt.value = v.name;\n      opt.textContent = v.name + ' (' + v.lang + ')' + (v.default ? ' ★' : '');\n      elVoice.appendChild(opt);\n    });\n  }\n\n  function loadVoices() {\n    var voices = synth.getVoices();\n    if (voices.length === 0) return;\n    allVoices = voices;\n    populateLangFilter(voices);\n    var jaLang = elLangFilter.value;\n    populateVoices(jaLang);\n  }\n\n  synth.onvoiceschanged = loadVoices;\n  loadVoices();\n  setTimeout(loadVoices, 500);\n\n  elLangFilter.addEventListener('change', function() {\n    populateVoices(elLangFilter.value);\n  });\n\n  function setUIState(state) {\n    spState = state;\n    elDot.className = 'sp-dot ' + state;\n    if (state === 'playing') {\n      elStatus.textContent = '再生中…';\n      elPlay.disabled  = true;\n      elPause.disabled = false;\n      elStop.disabled  = false;\n      elPause.innerHTML = '\\u23ae\\u23ae 一時停止';\n    } else if (state === 'paused') {\n      elStatus.textContent = '一時停止中';\n      elPlay.disabled  = true;\n      elPause.disabled = false;\n      elStop.disabled  = false;\n      elPause.innerHTML = '\\u25b6 再開';\n    } else {\n      elStatus.textContent = '待機中';\n      elPlay.disabled  = false;\n      elPause.disabled = true;\n      elStop.disabled  = true;\n      elPause.innerHTML = '\\u23ae\\u23ae 一時停止';\n      elHighlight.innerHTML = '\u003cspan style=\"color:#94a3b8;\"\u003e再生中、読み上げられている部分がここにハイライト表示されます。\u003c/span\u003e';\n    }\n  }\n\n  function highlightWord(charIndex, charLength) {\n    var fullText = elText.value;\n    var before = fullText.substring(0, charIndex);\n    var word   = fullText.substring(charIndex, charIndex + charLength);\n    var after  = fullText.substring(charIndex + charLength);\n    elHighlight.innerHTML =\n      escHtml(before) +\n      '\u003cspan class=\"sp-word-current\"\u003e' + escHtml(word) + '\u003c/span\u003e' +\n      escHtml(after);\n    var span = elHighlight.querySelector('.sp-word-current');\n    if (span) span.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n  }\n\n  function escHtml(str) {\n    return str.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  elPlay.addEventListener('click', function() {\n    var text = elText.value.trim();\n    if (!text) { elStatus.textContent = 'テキストを入力してください。'; return; }\n\n    synth.cancel();\n    currentUtterance = new SpeechSynthesisUtterance(text);\n\n    var selectedVoiceName = elVoice.value;\n    var voice = allVoices.find(function(v){ return v.name === selectedVoiceName; });\n    if (voice) currentUtterance.voice = voice;\n\n    currentUtterance.rate   = parseFloat(elRate.value);\n    currentUtterance.pitch  = parseFloat(elPitch.value);\n    currentUtterance.volume = parseFloat(elVolume.value);\n\n    currentUtterance.onstart = function() { setUIState('playing'); };\n    currentUtterance.onend   = function() { setUIState('stopped'); };\n    currentUtterance.onerror = function(e) {\n      if (e.error !== 'interrupted') {\n        elStatus.textContent = 'エラー: ' + e.error;\n        setUIState('stopped');\n      }\n    };\n    currentUtterance.onboundary = function(e) {\n      if (e.name === 'word') {\n        highlightWord(e.charIndex, e.charLength || 1);\n      }\n    };\n\n    synth.speak(currentUtterance);\n    setUIState('playing');\n  });\n\n  elPause.addEventListener('click', function() {\n    if (spState === 'playing') {\n      synth.pause();\n      setUIState('paused');\n    } else if (spState === 'paused') {\n      synth.resume();\n      setUIState('playing');\n    }\n  });\n\n  elStop.addEventListener('click', function() {\n    synth.cancel();\n    setUIState('stopped');\n  });\n\n  setUIState('stopped');\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eテキストエリアに読み上げたいテキストを貼り付けるか入力します。\u003c/li\u003e\n\u003cli\u003e言語フィルターで絞り込んだあと、使用する音声を選択します。\u003c/li\u003e\n\u003cli\u003e速度・ピッチ・音量のスライダーで好みに合わせて調整します。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e「再生」ボタン\u003c/strong\u003eを押すと、読み上げが開始されます。読み上げ中の部分がリアルタイムでハイライトされます。\u003c/li\u003e\n\u003cli\u003e**「一時停止」\u003cstrong\u003eで途中停止、\u003c/strong\u003e「停止」**で完全にリセットできます。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"このツールについて\"\u003eこのツールについて\u003c/h2\u003e\n\u003cp\u003eこのツールはブラウザ内蔵の \u003cstrong\u003eWeb Speech API（SpeechSynthesis）\u003c/strong\u003e を使用しています。音声データはサーバーには一切送信されず、すべてお使いのデバイス上で処理されます。利用できる音声はOSとブラウザによって異なります。\u003c/p\u003e","title":"テキスト読み上げツール"},{"content":" グラデーション文字 プリセット \u0026lt;!-- テキスト入力 --\u0026gt; \u0026lt;div class=\u0026quot;tg-field tg-full\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;tg-label\u0026quot;\u0026gt;プレビューテキスト\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;tg-text-input\u0026quot; value=\u0026quot;グラデーション文字\u0026quot; placeholder=\u0026quot;テキストを入力...\u0026quot; maxlength=\u0026quot;120\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- グラデーション種別 --\u0026gt; \u0026lt;div class=\u0026quot;tg-field\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;tg-label\u0026quot;\u0026gt;グラデーション種別\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;tg-type-group\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;tg-type-btn active\u0026quot; data-type=\u0026quot;linear\u0026quot;\u0026gt;線形\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;tg-type-btn\u0026quot; data-type=\u0026quot;radial\u0026quot;\u0026gt;放射状\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- 角度（線形用） --\u0026gt; \u0026lt;div class=\u0026quot;tg-field\u0026quot; id=\u0026quot;tg-angle-field\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;tg-label\u0026quot;\u0026gt;角度\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;tg-range-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;tg-angle\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;360\u0026quot; value=\u0026quot;135\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;tg-range-val\u0026quot; id=\u0026quot;tg-angle-val\u0026quot;\u0026gt;135deg\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- カラーストップ --\u0026gt; \u0026lt;div class=\u0026quot;tg-field tg-full\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;tg-label\u0026quot;\u0026gt;カラーストップ（2〜4個）\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;tg-stops-wrap\u0026quot; id=\u0026quot;tg-stops-wrap\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;tg-add-stop-btn\u0026quot; id=\u0026quot;tg-add-stop\u0026quot;\u0026gt;+ カラーストップを追加\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- フォントサイズ --\u0026gt; \u0026lt;div class=\u0026quot;tg-field\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;tg-label\u0026quot;\u0026gt;フォントサイズ\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;tg-range-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;tg-font-size\u0026quot; min=\u0026quot;24\u0026quot; max=\u0026quot;120\u0026quot; value=\u0026quot;64\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;tg-range-val\u0026quot; id=\u0026quot;tg-font-size-val\u0026quot;\u0026gt;64px\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- フォントウェイト --\u0026gt; \u0026lt;div class=\u0026quot;tg-field\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;tg-label\u0026quot;\u0026gt;フォントウェイト\u0026lt;/span\u0026gt; \u0026lt;select id=\u0026quot;tg-font-weight\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;300\u0026quot;\u0026gt;300 — ライト\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;400\u0026quot;\u0026gt;400 — レギュラー\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;600\u0026quot;\u0026gt;600 — セミボールド\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;700\u0026quot;\u0026gt;700 — ボールド\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;800\u0026quot; selected\u0026gt;800 — エクストラボールド\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;900\u0026quot;\u0026gt;900 — ブラック\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- テキスト揃え --\u0026gt; \u0026lt;div class=\u0026quot;tg-field tg-full\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;tg-label\u0026quot;\u0026gt;テキスト揃え\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;tg-align-group\u0026quot; id=\u0026quot;tg-align-group\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;tg-align-btn active\u0026quot; data-align=\u0026quot;left\u0026quot; title=\u0026quot;左揃え\u0026quot;\u0026gt;\u0026amp;#9664;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;tg-align-btn\u0026quot; data-align=\u0026quot;center\u0026quot; title=\u0026quot;中央揃え\u0026quot;\u0026gt;\u0026amp;#9644;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;tg-align-btn\u0026quot; data-align=\u0026quot;right\u0026quot; title=\u0026quot;右揃え\u0026quot;\u0026gt;\u0026amp;#9654;\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 生成されたCSS CSSをコピー 仕組み CSSテキストグラデーションは background-clip: text を使ったテクニックです。\n要素の background プロパティにグラデーションを適用する。 -webkit-background-clip: text と background-clip: text で背景をテキスト形状に切り抜く。 -webkit-text-fill-color: transparent でテキスト自体を透明にする。 SVGや画像は不要で、純粋なCSSだけでグラデーション文字を実現できます。\nブラウザ対応状況 ブラウザ 対応状況 Chrome / Edge 完全対応 Firefox 完全対応（Firefox 122以降） Safari 完全対応（-webkit- プレフィックスが必要） iOS Safari 完全対応 活用のコツ コントラストの高いプリセット（サンセット、ファイア、ネオン）はダーク背景で映えます。 パステル系グラデーションは大きな見出しテキストのライトモードに最適です。 クロスブラウザ対応のため -webkit-background-clip: text と background-clip: text の両方を必ず記述してください。 グラデーションが正しくクリップされるよう display: inline-block を付与してください。block 要素は横幅いっぱいに広がり、グラデーションの見え方が変わります。 関連ツール 背景グラデーションを作成 → CSSグラデーションジェネレーター カラーパレットを生成 → カラーパレットジェネレーター ボックスシャドウを作成 → CSSボックスシャドウジェネレーター freeeで会計・請求書を自動化しませんか？ 個人事業主・フリーランスの方に人気のクラウド会計サービス freee なら、領収書の自動読み取りから確定申告まで一括管理。ツール開発で忙しいあなたの経理を大幅に効率化できます。\nfreeeを無料で試す ","permalink":"https://productivity-works.com/ja/tools/text-gradient-generator/","summary":"\u003cdiv id=\"tg-app\"\u003e\n\u003cstyle\u003e\n/* ── スコープ済みスタイル: すべてのセレクターに #tg-app プレフィックス ── */\n#tg-app *,\n#tg-app *::before,\n#tg-app *::after {\n  box-sizing: border-box;\n}\n#tg-app {\n  font-family: \"Hiragino Sans\", \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\",\n               -apple-system, BlinkMacSystemFont, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n\u003cp\u003e/* プレビュー */\n#tg-app .tg-preview-wrap {\nbackground: #f0f2f8;\nborder-radius: 14px;\npadding: 40px 24px;\nmargin-bottom: 28px;\nmin-height: 180px;\ndisplay: flex;\nalign-items: center;\njustify-content: center;\noverflow: hidden;\n}\n#tg-app #tg-preview-text {\ndisplay: inline-block;\nbackground: linear-gradient(135deg, #f5af19, #f12711);\n-webkit-background-clip: text;\nbackground-clip: text;\n-webkit-text-fill-color: transparent;\ncolor: transparent;\nfont-size: 64px;\nfont-weight: 800;\nline-height: 1.3;\nword-break: break-all;\ntransition: all 0.2s ease;\n}\u003c/p\u003e","title":"CSSテキストグラデーション ジェネレーター — 無料ツール"},{"content":" テキストを入力 分析単位 単語（1-gram） フレーズ（2-gram） 3-gram 最小出現回数 表示件数上限 オプション 大文字・小文字を区別しない 記号・句読点を除外 数字を除外 ストップワードを除外 ストップワードを編集 の は が を に で も と や から まで より て で し た だ な の に は が を も と や か 分析する クリア CSVで書き出す 総文字数0 総単語数0 ユニーク語0 最頻出語— 表 ワードクラウド 順位 単語 / フレーズ 出現回数 割合 頻度バー 一致する単語が見つかりませんでした。テキストを入力して再度お試しください。 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → テキストを変換 → テキスト変換ツール コード行数をカウント → 行数カウンター テキストの差分を確認 → テキスト差分比較ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/word-frequency-counter/","summary":"\u003cdiv id=\"wf-app\"\u003e\n\u003cstyle\u003e\n#wf-app {\n  font-family: \"Helvetica Neue\", Arial, \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, sans-serif;\n  max-width: 820px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#wf-app h2 {\n  font-size: 1.15rem;\n  font-weight: 700;\n  color: #334155;\n  margin: 1.5rem 0 0.5rem;\n}\n#wf-app textarea {\n  width: 100%;\n  height: 180px;\n  padding: 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 14px;\n  line-height: 1.6;\n  resize: vertical;\n  background: #f8fafc;\n  box-sizing: border-box;\n  outline: none;\n  transition: border-color 0.2s;\n  color: #1e293b;\n}\n#wf-app textarea:focus {\n  border-color: #64748b;\n  background: #fff;\n}\n#wf-app .wf-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  align-items: flex-end;\n  margin: 14px 0;\n}\n#wf-app .wf-ctrl-group {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  font-size: 13px;\n  color: #475569;\n}\n#wf-app .wf-ctrl-group label {\n  font-weight: 600;\n  font-size: 12px;\n  color: #64748b;\n}\n#wf-app select,\n#wf-app input[type=\"number\"] {\n  padding: 7px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 13px;\n  background: #f8fafc;\n  color: #1e293b;\n  outline: none;\n  cursor: pointer;\n}\n#wf-app select:focus,\n#wf-app input[type=\"number\"]:focus {\n  border-color: #64748b;\n}\n#wf-app input[type=\"number\"] {\n  width: 72px;\n}\n#wf-app .wf-checkbox-group {\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n}\n#wf-app .wf-checkbox-group label {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 13px;\n  color: #475569;\n  cursor: pointer;\n  font-weight: normal;\n}\n#wf-app .wf-checkbox-group input[type=\"checkbox\"] {\n  width: 15px;\n  height: 15px;\n  cursor: pointer;\n  accent-color: #475569;\n}\n#wf-app .wf-btn-row {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  margin-top: 6px;\n}\n#wf-app button {\n  padding: 9px 20px;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.15s;\n}\n#wf-app button:hover {\n  opacity: 0.85;\n}\n#wf-app .btn-primary {\n  background: #475569;\n  color: #fff;\n}\n#wf-app .btn-secondary {\n  background: #e2e8f0;\n  color: #334155;\n}\n#wf-app .btn-export {\n  background: #0f766e;\n  color: #fff;\n}\n#wf-app .wf-stats-bar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 16px;\n  padding: 12px 16px;\n  background: #f1f5f9;\n  border-radius: 8px;\n  margin: 14px 0 10px;\n  font-size: 13px;\n  color: #475569;\n}\n#wf-app .wf-stat {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 2px;\n}\n#wf-app .wf-stat span:first-child {\n  font-size: 11px;\n  color: #94a3b8;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#wf-app .wf-stat span:last-child {\n  font-size: 18px;\n  font-weight: 700;\n  color: #334155;\n}\n#wf-app .wf-tabs {\n  display: flex;\n  gap: 0;\n  margin: 18px 0 0;\n  border-bottom: 2px solid #e2e8f0;\n}\n#wf-app .wf-tab {\n  padding: 8px 18px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  color: #94a3b8;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  transition: color 0.15s, border-color 0.15s;\n  background: none;\n  border-radius: 0;\n}\n#wf-app .wf-tab.active {\n  color: #334155;\n  border-bottom-color: #475569;\n}\n#wf-app .wf-tab-panel {\n  display: none;\n  margin-top: 14px;\n}\n#wf-app .wf-tab-panel.active {\n  display: block;\n}\n#wf-app .wf-table-wrap {\n  overflow-x: auto;\n  border-radius: 8px;\n  border: 1px solid #e2e8f0;\n}\n#wf-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n#wf-app thead th {\n  background: #f1f5f9;\n  padding: 9px 14px;\n  text-align: left;\n  font-weight: 700;\n  color: #64748b;\n  border-bottom: 1px solid #e2e8f0;\n  cursor: pointer;\n  user-select: none;\n  white-space: nowrap;\n}\n#wf-app thead th:hover {\n  background: #e2e8f0;\n}\n#wf-app thead th.sort-asc::after { content: \" ▲\"; font-size: 10px; }\n#wf-app thead th.sort-desc::after { content: \" ▼\"; font-size: 10px; }\n#wf-app tbody tr:nth-child(even) { background: #f8fafc; }\n#wf-app tbody td {\n  padding: 8px 14px;\n  border-bottom: 1px solid #f1f5f9;\n  color: #334155;\n}\n#wf-app .wf-bar-cell {\n  min-width: 100px;\n}\n#wf-app .wf-bar-bg {\n  background: #e2e8f0;\n  border-radius: 4px;\n  height: 8px;\n  overflow: hidden;\n}\n#wf-app .wf-bar-fill {\n  background: #475569;\n  height: 8px;\n  border-radius: 4px;\n  transition: width 0.3s;\n}\n#wf-app canvas#wf-cloud {\n  display: block;\n  margin: 0 auto;\n  border-radius: 10px;\n  border: 1px solid #e2e8f0;\n  background: #f8fafc;\n  max-width: 100%;\n}\n#wf-app .wf-empty {\n  text-align: center;\n  color: #94a3b8;\n  font-size: 14px;\n  padding: 40px 0;\n}\n#wf-app .wf-stopwords-toggle {\n  font-size: 12px;\n  color: #94a3b8;\n  cursor: pointer;\n  text-decoration: underline;\n  background: none;\n  border: none;\n  padding: 0;\n  font-weight: normal;\n}\n#wf-app .wf-stopwords-area {\n  display: none;\n  margin-top: 8px;\n}\n#wf-app .wf-stopwords-area textarea {\n  height: 70px;\n  font-size: 12px;\n}\n@media (max-width: 600px) {\n  #wf-app .wf-controls { flex-direction: column; }\n  #wf-app .wf-stat span:last-child { font-size: 15px; }\n  #wf-app .wf-tab { padding: 8px 10px; font-size: 12px; }\n}\n\u003c/style\u003e\n\u003ch2\u003eテキストを入力\u003c/h2\u003e\n\u003ctextarea id=\"wf-input\" placeholder=\"ここにテキストを貼り付けてください…\"\u003e\u003c/textarea\u003e\n\u003cdiv class=\"wf-controls\"\u003e\n  \u003cdiv class=\"wf-ctrl-group\"\u003e\n    \u003clabel\u003e分析単位\u003c/label\u003e\n    \u003cselect id=\"wf-ngram\"\u003e\n      \u003coption value=\"1\"\u003e単語（1-gram）\u003c/option\u003e\n      \u003coption value=\"2\"\u003eフレーズ（2-gram）\u003c/option\u003e\n      \u003coption value=\"3\"\u003e3-gram\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wf-ctrl-group\"\u003e\n    \u003clabel\u003e最小出現回数\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"wf-mincount\" value=\"1\" min=\"1\" max=\"999\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wf-ctrl-group\"\u003e\n    \u003clabel\u003e表示件数上限\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"wf-topn\" value=\"100\" min=\"5\" max=\"1000\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wf-ctrl-group\"\u003e\n    \u003clabel\u003eオプション\u003c/label\u003e\n    \u003cdiv class=\"wf-checkbox-group\"\u003e\n      \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"wf-ignore-case\" checked\u003e 大文字・小文字を区別しない\u003c/label\u003e\n      \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"wf-ignore-punct\" checked\u003e 記号・句読点を除外\u003c/label\u003e\n      \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"wf-ignore-nums\"\u003e 数字を除外\u003c/label\u003e\n      \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"wf-use-stopwords\"\u003e ストップワードを除外\u003c/label\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"wf-stopwords-section\" style=\"display:none;margin-bottom:10px;\"\u003e\n  \u003cbutton class=\"wf-stopwords-toggle\" id=\"wf-sw-toggle\" onclick=\"wfToggleStopwords()\"\u003eストップワードを編集\u003c/button\u003e\n  \u003cdiv class=\"wf-stopwords-area\" id=\"wf-sw-area\"\u003e\n    \u003ctextarea id=\"wf-stopwords-input\" placeholder=\"除外する単語をスペースまたは改行で区切って入力…\"\u003eの は が を に で も と や から まで より て で し た だ な の に は が を も と や か\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wf-btn-row\"\u003e\n  \u003cbutton class=\"btn-primary\" onclick=\"wfAnalyze()\"\u003e分析する\u003c/button\u003e\n  \u003cbutton class=\"btn-secondary\" onclick=\"wfClear()\"\u003eクリア\u003c/button\u003e\n  \u003cbutton class=\"btn-export\" onclick=\"wfExportCSV()\" id=\"wf-export-btn\" style=\"display:none;\"\u003eCSVで書き出す\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"wf-stats\" class=\"wf-stats-bar\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"wf-stat\"\u003e\u003cspan\u003e総文字数\u003c/span\u003e\u003cspan id=\"wf-s-chars\"\u003e0\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"wf-stat\"\u003e\u003cspan\u003e総単語数\u003c/span\u003e\u003cspan id=\"wf-s-words\"\u003e0\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"wf-stat\"\u003e\u003cspan\u003eユニーク語\u003c/span\u003e\u003cspan id=\"wf-s-unique\"\u003e0\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"wf-stat\"\u003e\u003cspan\u003e最頻出語\u003c/span\u003e\u003cspan id=\"wf-s-top\"\u003e—\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"wf-result\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"wf-tabs\"\u003e\n    \u003cbutton class=\"wf-tab active\" onclick=\"wfShowTab('table', this)\"\u003e表\u003c/button\u003e\n    \u003cbutton class=\"wf-tab\" onclick=\"wfShowTab('cloud', this)\"\u003eワードクラウド\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wf-tab-panel active\" id=\"wf-panel-table\"\u003e\n    \u003cdiv class=\"wf-table-wrap\"\u003e\n      \u003ctable id=\"wf-table\"\u003e\n        \u003cthead\u003e\n          \u003ctr\u003e\n            \u003cth onclick=\"wfSort('rank')\" id=\"wf-th-rank\"\u003e順位\u003c/th\u003e\n            \u003cth onclick=\"wfSort('word')\" id=\"wf-th-word\"\u003e単語 / フレーズ\u003c/th\u003e\n            \u003cth onclick=\"wfSort('count')\" id=\"wf-th-count\" class=\"sort-desc\"\u003e出現回数\u003c/th\u003e\n            \u003cth onclick=\"wfSort('pct')\" id=\"wf-th-pct\"\u003e割合\u003c/th\u003e\n            \u003cth\u003e頻度バー\u003c/th\u003e\n          \u003c/tr\u003e\n        \u003c/thead\u003e\n        \u003ctbody id=\"wf-tbody\"\u003e\u003c/tbody\u003e\n      \u003c/table\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wf-tab-panel\" id=\"wf-panel-cloud\"\u003e\n    \u003ccanvas id=\"wf-cloud\" width=\"780\" height=\"420\"\u003e\u003c/canvas\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"wf-empty\" class=\"wf-empty\" style=\"display:none;\"\u003e\n  一致する単語が見つかりませんでした。テキストを入力して再度お試しください。\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var _data = [];\n  var _sortKey = 'count';\n  var _sortDir = -1;\n  var _totalTokens = 0;\n\n  // ストップワード表示切替\n  window.wfToggleStopwords = function() {\n    var area = document.getElementById('wf-sw-area');\n    area.style.display = (area.style.display === 'block') ? 'none' : 'block';\n  };\n\n  // ストップワードチェックボックス連動\n  document.getElementById('wf-use-stopwords').addEventListener('change', function(){\n    document.getElementById('wf-stopwords-section').style.display = this.checked ? 'block' : 'none';\n  });\n\n  function tokenize(text, n, ignorePunct, ignoreNums, ignoreCase) {\n    var t = text;\n    if (ignoreCase) t = t.toLowerCase();\n    if (ignorePunct) t = t.replace(/[!\"#$%\u0026'()*+,\\-./:;\u003c=\u003e?@[\\\\\\]^_`{|}~。、「」『』【】〔〕・…―〜！？（）［］｛｝\"\"'']/g, ' ');\n    if (ignoreNums) t = t.replace(/[0-9０-９]+/g, ' ');\n    // split on whitespace\n    var tokens = t.split(/\\s+/).filter(function(w){ return w.length \u003e 0; });\n    if (n === 1) return tokens;\n    var ngrams = [];\n    for (var i = 0; i \u003c= tokens.length - n; i++) {\n      ngrams.push(tokens.slice(i, i + n).join(' '));\n    }\n    return ngrams;\n  }\n\n  function getStopwords() {\n    var raw = document.getElementById('wf-stopwords-input').value;\n    return raw.split(/[\\s\\n]+/).filter(function(w){ return w.length \u003e 0; }).map(function(w){ return w.toLowerCase(); });\n  }\n\n  window.wfAnalyze = function() {\n    var text = document.getElementById('wf-input').value;\n    if (!text.trim()) {\n      document.getElementById('wf-result').style.display = 'none';\n      document.getElementById('wf-stats').style.display = 'none';\n      document.getElementById('wf-export-btn').style.display = 'none';\n      document.getElementById('wf-empty').style.display = 'block';\n      return;\n    }\n\n    var n = parseInt(document.getElementById('wf-ngram').value);\n    var minCount = parseInt(document.getElementById('wf-mincount').value) || 1;\n    var topN = parseInt(document.getElementById('wf-topn').value) || 100;\n    var ignoreCase = document.getElementById('wf-ignore-case').checked;\n    var ignorePunct = document.getElementById('wf-ignore-punct').checked;\n    var ignoreNums = document.getElementById('wf-ignore-nums').checked;\n    var useStopwords = document.getElementById('wf-use-stopwords').checked;\n    var stopwords = useStopwords ? getStopwords() : [];\n\n    var tokens = tokenize(text, n, ignorePunct, ignoreNums, ignoreCase);\n    _totalTokens = tokens.length;\n\n    // filter stopwords\n    if (stopwords.length \u003e 0) {\n      tokens = tokens.filter(function(t){\n        return stopwords.indexOf(t.toLowerCase()) === -1;\n      });\n    }\n\n    // count\n    var freq = {};\n    tokens.forEach(function(t){\n      freq[t] = (freq[t] || 0) + 1;\n    });\n\n    // build data array\n    var arr = Object.keys(freq).map(function(w, i){\n      return { word: w, count: freq[w] };\n    });\n\n    // filter mincount\n    arr = arr.filter(function(d){ return d.count \u003e= minCount; });\n\n    // sort by count desc\n    arr.sort(function(a,b){ return b.count - a.count; });\n\n    // top N\n    arr = arr.slice(0, topN);\n\n    // add rank \u0026 pct\n    var maxCount = arr.length \u003e 0 ? arr[0].count : 1;\n    arr.forEach(function(d, i){\n      d.rank = i + 1;\n      d.pct = _totalTokens \u003e 0 ? ((d.count / _totalTokens) * 100).toFixed(2) : '0.00';\n      d.barPct = maxCount \u003e 0 ? ((d.count / maxCount) * 100).toFixed(1) : 0;\n    });\n\n    _data = arr;\n    _sortKey = 'count';\n    _sortDir = -1;\n\n    // update stats\n    var charCount = text.length;\n    var rawTokens = tokenize(text, 1, false, false, false);\n    var uniqueCount = Object.keys(freq).length;\n    var topWord = arr.length \u003e 0 ? arr[0].word : '—';\n\n    document.getElementById('wf-s-chars').textContent = charCount.toLocaleString();\n    document.getElementById('wf-s-words').textContent = rawTokens.length.toLocaleString();\n    document.getElementById('wf-s-unique').textContent = uniqueCount.toLocaleString();\n    document.getElementById('wf-s-top').textContent = topWord;\n    document.getElementById('wf-stats').style.display = 'flex';\n\n    // reset sort headers\n    ['rank','word','count','pct'].forEach(function(k){\n      var el = document.getElementById('wf-th-'+k);\n      if (el) { el.className = (k === 'count') ? 'sort-desc' : ''; }\n    });\n\n    if (arr.length === 0) {\n      document.getElementById('wf-result').style.display = 'none';\n      document.getElementById('wf-export-btn').style.display = 'none';\n      document.getElementById('wf-empty').style.display = 'block';\n    } else {\n      document.getElementById('wf-empty').style.display = 'none';\n      document.getElementById('wf-result').style.display = 'block';\n      document.getElementById('wf-export-btn').style.display = 'inline-block';\n      renderTable();\n      renderCloud();\n    }\n  };\n\n  function renderTable() {\n    var tbody = document.getElementById('wf-tbody');\n    var rows = _data.map(function(d){\n      return '\u003ctr\u003e' +\n        '\u003ctd\u003e' + d.rank + '\u003c/td\u003e' +\n        '\u003ctd\u003e\u003cstrong\u003e' + escHtml(d.word) + '\u003c/strong\u003e\u003c/td\u003e' +\n        '\u003ctd\u003e' + d.count.toLocaleString() + '\u003c/td\u003e' +\n        '\u003ctd\u003e' + d.pct + '%\u003c/td\u003e' +\n        '\u003ctd class=\"wf-bar-cell\"\u003e\u003cdiv class=\"wf-bar-bg\"\u003e\u003cdiv class=\"wf-bar-fill\" style=\"width:' + d.barPct + '%\"\u003e\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e' +\n        '\u003c/tr\u003e';\n    });\n    tbody.innerHTML = rows.join('');\n  }\n\n  window.wfSort = function(key) {\n    if (_sortKey === key) {\n      _sortDir *= -1;\n    } else {\n      _sortKey = key;\n      _sortDir = (key === 'word') ? 1 : -1;\n    }\n    _data.sort(function(a, b){\n      if (key === 'word') {\n        return _sortDir * a.word.localeCompare(b.word);\n      }\n      return _sortDir * (a[key] - b[key]);\n    });\n    // re-rank\n    _data.forEach(function(d, i){ d.rank = i + 1; });\n\n    ['rank','word','count','pct'].forEach(function(k){\n      var el = document.getElementById('wf-th-'+k);\n      if (!el) return;\n      el.className = '';\n      if (k === _sortKey) {\n        el.className = _sortDir \u003e 0 ? 'sort-asc' : 'sort-desc';\n      }\n    });\n    renderTable();\n  };\n\n  window.wfShowTab = function(tab, btn) {\n    document.querySelectorAll('#wf-app .wf-tab').forEach(function(b){ b.classList.remove('active'); });\n    document.querySelectorAll('#wf-app .wf-tab-panel').forEach(function(p){ p.classList.remove('active'); });\n    btn.classList.add('active');\n    document.getElementById('wf-panel-' + tab).classList.add('active');\n    if (tab === 'cloud') renderCloud();\n  };\n\n  function renderCloud() {\n    var canvas = document.getElementById('wf-cloud');\n    var ctx = canvas.getContext('2d');\n    var W = canvas.width;\n    var H = canvas.height;\n    ctx.clearRect(0, 0, W, H);\n    ctx.fillStyle = '#f8fafc';\n    ctx.fillRect(0, 0, W, H);\n\n    if (_data.length === 0) return;\n\n    var maxCount = _data[0].count;\n    var slice = _data.slice(0, 80);\n    var colors = ['#334155','#475569','#64748b','#7c3aed','#0f766e','#b45309','#be185d','#1d4ed8','#065f46','#92400e'];\n\n    // Simple placement: try random, skip on collision\n    var placed = [];\n    var minFont = 11, maxFont = 64;\n\n    function getFontSize(count) {\n      return Math.round(minFont + (maxFont - minFont) * Math.pow(count / maxCount, 0.5));\n    }\n\n    function overlaps(x, y, w, h) {\n      for (var i = 0; i \u003c placed.length; i++) {\n        var p = placed[i];\n        if (x \u003c p.x + p.w + 4 \u0026\u0026 x + w + 4 \u003e p.x \u0026\u0026\n            y \u003c p.y + p.h + 4 \u0026\u0026 y + h + 4 \u003e p.y) return true;\n      }\n      return false;\n    }\n\n    var cx = W / 2, cy = H / 2;\n    var attempts = 120;\n\n    slice.forEach(function(d, idx) {\n      var fs = getFontSize(d.count);\n      ctx.font = 'bold ' + fs + 'px \"Helvetica Neue\", Arial, sans-serif';\n      var tw = ctx.measureText(d.word).width;\n      var th = fs;\n      var color = colors[idx % colors.length];\n      var placed_flag = false;\n\n      for (var a = 0; a \u003c attempts; a++) {\n        var angle = a * 2.399963; // golden angle\n        var r = 6 * Math.sqrt(a);\n        var px = cx + r * Math.cos(angle) - tw / 2;\n        var py = cy + r * Math.sin(angle) - th / 2;\n\n        if (px \u003c 4 || py \u003c 4 || px + tw \u003e W - 4 || py + th \u003e H - 4) continue;\n        if (!overlaps(px, py, tw, th)) {\n          ctx.fillStyle = color;\n          ctx.fillText(d.word, px, py + th);\n          placed.push({ x: px, y: py, w: tw, h: th });\n          placed_flag = true;\n          break;\n        }\n      }\n    });\n  }\n\n  window.wfClear = function() {\n    document.getElementById('wf-input').value = '';\n    document.getElementById('wf-result').style.display = 'none';\n    document.getElementById('wf-stats').style.display = 'none';\n    document.getElementById('wf-export-btn').style.display = 'none';\n    document.getElementById('wf-empty').style.display = 'none';\n    _data = [];\n  };\n\n  window.wfExportCSV = function() {\n    if (_data.length === 0) return;\n    var rows = [['順位', '単語/フレーズ', '出現回数', '割合(%)']];\n    _data.forEach(function(d){\n      rows.push([d.rank, d.word, d.count, d.pct]);\n    });\n    var csv = rows.map(function(r){\n      return r.map(function(cell){\n        var s = String(cell);\n        if (s.indexOf(',') \u003e -1 || s.indexOf('\"') \u003e -1 || s.indexOf('\\n') \u003e -1) {\n          s = '\"' + s.replace(/\"/g, '\"\"') + '\"';\n        }\n        return s;\n      }).join(',');\n    }).join('\\n');\n\n    var bom = '\\uFEFF';\n    var blob = new Blob([bom + csv], { type: 'text/csv;charset=utf-8;' });\n    var url = URL.createObjectURL(blob);\n    var a = document.createElement('a');\n    a.href = url;\n    a.download = 'word-frequency.csv';\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n    URL.revokeObjectURL(url);\n  };\n\n  function escHtml(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;').replace(/\"/g,'\u0026quot;');\n  }\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"単語頻度カウンター"},{"content":" 任意の単位に値を入力すると、Bit・Byte・KB・MB・GB・TB・PBすべてに即時変換します。2進数（KiB/MiB/GiB）と10進数（KB/MB/GB）の両方に対応。下部の帯域幅計算機でダウンロード時間も算出できます。 データサイズ変換 値 ビット (b) バイト (B) キロバイト — KB (10³) メガバイト — MB (10⁶) ギガバイト — GB (10⁹) テラバイト — TB (10¹²) ペタバイト — PB (10¹⁵) キビバイト — KiB (2¹⁰) メビバイト — MiB (2²⁰) ギビバイト — GiB (2³⁰) テビバイト — TiB (2⁴⁰) ペビバイト — PiB (2⁵⁰) 変換 クリア 有効な0以上の数値を入力してください。\n単位 変換後の値 バイト数 帯域幅 / ダウンロード時間計算 ファイルサイズ サイズ単位 バイト (B) キロバイト (KB) メガバイト (MB) ギガバイト (GB) テラバイト (TB) キビバイト (KiB) メビバイト (MiB) ギビバイト (GiB) 回線速度 速度単位 bps (ビット/秒) Kbps (10³ビット/秒) Mbps (10⁶ビット/秒) Gbps (10⁹ビット/秒) KB/s (10³バイト/秒) MB/s (10⁶バイト/秒) GB/s (10⁹バイト/秒) ダウンロード時間を計算 クリア ファイルサイズと回線速度に正の数値を入力してください。\n※ 実際のダウンロード速度はネットワーク状況・サーバー負荷・プロトコルオーバーヘッドにより異なります。\n単位早見表 単位名 記号 方式 正確なバイト数 ビットb—1/8 バイト バイトB—8 ビット キロバイト 10進数KBSI (基数10)1,000 バイト キビバイト 2進数KiBIEC (基数2)1,024 バイト メガバイト 10進数MBSI (基数10)1,000,000 バイト メビバイト 2進数MiBIEC (基数2)1,048,576 バイト ギガバイト 10進数GBSI (基数10)1,000,000,000 バイト ギビバイト 2進数GiBIEC (基数2)1,073,741,824 バイト テラバイト 10進数TBSI (基数10)10¹² バイト テビバイト 2進数TiBIEC (基数2)2⁴⁰ バイト ペタバイト 10進数PBSI (基数10)10¹⁵ バイト ペビバイト 2進数PiBIEC (基数2)2⁵⁰ バイト 2進数と10進数の違いとは？ ハードディスクメーカーは「1 GB = 10億バイト」という10進数表記を採用しています（数字が大きく見えるため）。一方、OSは伝統的に「1 GiB = 約10億7374万バイト」という2進数表記を使います。そのため「500GB」と表示されたHDDがWindowsやmacOSでは「約465 GiB」と表示されます。IEC（国際電気標準会議）は1998年にKiB/MiB/GiBという表記を標準化し、この混乱を解消しました。\n関連ツール:\n単位変換ツール 2進数変換ツール IPアドレス情報 freee会計で経理をもっとスマートに クラウド会計ソフト「freee」なら、請求書・経費精算・確定申告をひとつのツールで完結。データのバックアップもクラウドで安心管理。\nfreeeを無料で試す ","permalink":"https://productivity-works.com/ja/tools/byte-converter/","summary":"\u003cdiv id=\"byte-app\"\u003e\n\u003cstyle\u003e\n  #byte-app {\n    font-family: \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    max-width: 860px;\n    margin: 0 auto;\n    color: #1a1a2e;\n  }\n  #byte-app h2.ba-section-title {\n    font-size: 1.05rem;\n    font-weight: 700;\n    color: #0f3460;\n    border-left: 4px solid #e94560;\n    padding-left: 0.6rem;\n    margin: 1.8rem 0 1rem;\n  }\n  #byte-app .ba-intro {\n    background: #f0f4ff;\n    border-radius: 8px;\n    padding: 1rem 1.2rem;\n    font-size: 0.92rem;\n    color: #444;\n    margin-bottom: 1.5rem;\n    line-height: 1.75;\n  }\n  #byte-app .ba-input-row {\n    display: flex;\n    gap: 0.5rem;\n    align-items: center;\n    margin-bottom: 1rem;\n    flex-wrap: wrap;\n  }\n  #byte-app .ba-input-row label {\n    font-size: 0.88rem;\n    font-weight: 600;\n    color: #333;\n    min-width: 44px;\n  }\n  #byte-app .ba-input-row input[type=\"number\"] {\n    flex: 1;\n    min-width: 150px;\n    padding: 0.55rem 0.75rem;\n    border: 1.5px solid #c8d0e0;\n    border-radius: 6px;\n    font-size: 1rem;\n    outline: none;\n    transition: border-color 0.2s;\n    background: #fff;\n    color: #1a1a2e;\n  }\n  #byte-app .ba-input-row input[type=\"number\"]:focus {\n    border-color: #4a90e2;\n  }\n  #byte-app .ba-input-row select {\n    padding: 0.55rem 0.65rem;\n    border: 1.5px solid #c8d0e0;\n    border-radius: 6px;\n    font-size: 0.9rem;\n    background: #fff;\n    color: #1a1a2e;\n    cursor: pointer;\n    outline: none;\n  }\n  #byte-app .ba-btn {\n    padding: 0.55rem 1.1rem;\n    background: #e94560;\n    color: #fff;\n    border: none;\n    border-radius: 6px;\n    font-size: 0.92rem;\n    font-weight: 700;\n    cursor: pointer;\n    transition: background 0.2s;\n    white-space: nowrap;\n  }\n  #byte-app .ba-btn:hover {\n    background: #c73652;\n  }\n  #byte-app .ba-btn-secondary {\n    background: #6c757d;\n  }\n  #byte-app .ba-btn-secondary:hover {\n    background: #545b62;\n  }\n  #byte-app .ba-table-wrap {\n    overflow-x: auto;\n    border-radius: 8px;\n    box-shadow: 0 1px 6px rgba(0,0,0,0.08);\n    margin-bottom: 1.5rem;\n  }\n  #byte-app table.ba-table {\n    width: 100%;\n    border-collapse: collapse;\n    font-size: 0.91rem;\n  }\n  #byte-app table.ba-table thead tr {\n    background: #0f3460;\n    color: #fff;\n  }\n  #byte-app table.ba-table thead th {\n    padding: 0.65rem 0.9rem;\n    text-align: left;\n    font-weight: 700;\n    white-space: nowrap;\n  }\n  #byte-app table.ba-table tbody tr:nth-child(even) {\n    background: #f5f7fb;\n  }\n  #byte-app table.ba-table tbody tr:hover {\n    background: #eef2ff;\n  }\n  #byte-app table.ba-table tbody td {\n    padding: 0.6rem 0.9rem;\n    border-bottom: 1px solid #e5e9f2;\n    white-space: nowrap;\n  }\n  #byte-app table.ba-table tbody td:nth-child(2),\n  #byte-app table.ba-table tbody td:nth-child(3) {\n    font-family: \"Courier New\", Courier, monospace;\n    color: #0f3460;\n    font-weight: 700;\n  }\n  #byte-app .ba-badge {\n    display: inline-block;\n    font-size: 0.72rem;\n    border-radius: 4px;\n    padding: 0.1rem 0.35rem;\n    font-weight: 700;\n    margin-left: 0.3rem;\n    vertical-align: middle;\n  }\n  #byte-app .ba-badge-bin {\n    background: #d4edda;\n    color: #155724;\n  }\n  #byte-app .ba-badge-dec {\n    background: #cce5ff;\n    color: #004085;\n  }\n  #byte-app .ba-bw-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 1rem;\n    margin-bottom: 1rem;\n  }\n  @media (max-width: 600px) {\n    #byte-app .ba-bw-grid {\n      grid-template-columns: 1fr;\n    }\n    #byte-app .ba-input-row {\n      flex-direction: column;\n      align-items: flex-start;\n    }\n    #byte-app .ba-input-row input[type=\"number\"] {\n      width: 100%;\n    }\n  }\n  #byte-app .ba-field-group {\n    display: flex;\n    flex-direction: column;\n    gap: 0.35rem;\n  }\n  #byte-app .ba-field-group label {\n    font-size: 0.85rem;\n    font-weight: 600;\n    color: #444;\n  }\n  #byte-app .ba-field-group input,\n  #byte-app .ba-field-group select {\n    padding: 0.55rem 0.75rem;\n    border: 1.5px solid #c8d0e0;\n    border-radius: 6px;\n    font-size: 0.95rem;\n    outline: none;\n    transition: border-color 0.2s;\n    background: #fff;\n    color: #1a1a2e;\n  }\n  #byte-app .ba-field-group input:focus,\n  #byte-app .ba-field-group select:focus {\n    border-color: #4a90e2;\n  }\n  #byte-app .ba-result-box {\n    background: #eef6ff;\n    border: 1.5px solid #b3d4f5;\n    border-radius: 8px;\n    padding: 1rem 1.2rem;\n    font-size: 1rem;\n    color: #0f3460;\n    font-weight: 600;\n    margin-top: 0.8rem;\n    min-height: 2.5rem;\n    line-height: 1.7;\n  }\n  #byte-app .ba-result-box span.ba-highlight {\n    font-size: 1.3rem;\n    color: #e94560;\n    font-weight: 700;\n  }\n  #byte-app .ba-note {\n    font-size: 0.82rem;\n    color: #666;\n    margin-top: 0.4rem;\n    line-height: 1.6;\n  }\n  #byte-app .ba-error {\n    color: #c0392b;\n    font-size: 0.88rem;\n    margin-top: 0.3rem;\n    display: none;\n  }\n  #byte-app .ba-crosslinks {\n    margin-top: 2rem;\n    padding-top: 1.2rem;\n    border-top: 1px solid #e5e9f2;\n    font-size: 0.9rem;\n    color: #555;\n    line-height: 1.9;\n  }\n  #byte-app .ba-crosslinks a {\n    color: #4a90e2;\n    text-decoration: none;\n    margin-right: 1rem;\n    font-weight: 600;\n  }\n  #byte-app .ba-crosslinks a:hover {\n    text-decoration: underline;\n  }\n  #byte-app .ba-cta-freee {\n    margin-top: 2rem;\n    background: linear-gradient(135deg, #0f3460 0%, #16213e 100%);\n    border-radius: 10px;\n    padding: 1.4rem 1.6rem;\n    color: #fff;\n    display: flex;\n    align-items: center;\n    gap: 1.2rem;\n    flex-wrap: wrap;\n  }\n  #byte-app .ba-cta-freee .ba-cta-text {\n    flex: 1;\n    min-width: 200px;\n  }\n  #byte-app .ba-cta-freee .ba-cta-text strong {\n    display: block;\n    font-size: 1rem;\n    margin-bottom: 0.3rem;\n    color: #ffd700;\n  }\n  #byte-app .ba-cta-freee .ba-cta-text p {\n    font-size: 0.87rem;\n    margin: 0;\n    color: #cdd9f0;\n    line-height: 1.6;\n  }\n  #byte-app .ba-cta-freee a.ba-cta-btn {\n    display: inline-block;\n    background: #e94560;\n    color: #fff;\n    text-decoration: none;\n    padding: 0.65rem 1.4rem;\n    border-radius: 6px;\n    font-weight: 700;\n    font-size: 0.92rem;\n    white-space: nowrap;\n    transition: background 0.2s;\n  }\n  #byte-app .ba-cta-freee a.ba-cta-btn:hover {\n    background: #c73652;\n  }\n\u003c/style\u003e\n\u003cdiv class=\"ba-intro\"\u003e\n  任意の単位に値を入力すると、Bit・Byte・KB・MB・GB・TB・PBすべてに即時変換します。2進数（KiB/MiB/GiB）と10進数（KB/MB/GB）の両方に対応。下部の帯域幅計算機でダウンロード時間も算出できます。\n\u003c/div\u003e\n\u003c!-- ===== 変換ツール ===== --\u003e\n\u003ch2 class=\"ba-section-title\"\u003eデータサイズ変換\u003c/h2\u003e\n\u003cdiv class=\"ba-input-row\"\u003e\n  \u003clabel for=\"ba-val\"\u003e値\u003c/label\u003e\n  \u003cinput type=\"number\" id=\"ba-val\" placeholder=\"例: 1024\" min=\"0\" step=\"any\" /\u003e\n  \u003cselect id=\"ba-unit\"\u003e\n    \u003coption value=\"bit\"\u003eビット (b)\u003c/option\u003e\n    \u003coption value=\"byte\" selected\u003eバイト (B)\u003c/option\u003e\n    \u003coption value=\"kb_dec\"\u003eキロバイト — KB (10³)\u003c/option\u003e\n    \u003coption value=\"mb_dec\"\u003eメガバイト — MB (10⁶)\u003c/option\u003e\n    \u003coption value=\"gb_dec\"\u003eギガバイト — GB (10⁹)\u003c/option\u003e\n    \u003coption value=\"tb_dec\"\u003eテラバイト — TB (10¹²)\u003c/option\u003e\n    \u003coption value=\"pb_dec\"\u003eペタバイト — PB (10¹⁵)\u003c/option\u003e\n    \u003coption value=\"kib\"\u003eキビバイト — KiB (2¹⁰)\u003c/option\u003e\n    \u003coption value=\"mib\"\u003eメビバイト — MiB (2²⁰)\u003c/option\u003e\n    \u003coption value=\"gib\"\u003eギビバイト — GiB (2³⁰)\u003c/option\u003e\n    \u003coption value=\"tib\"\u003eテビバイト — TiB (2⁴⁰)\u003c/option\u003e\n    \u003coption value=\"pib\"\u003eペビバイト — PiB (2⁵⁰)\u003c/option\u003e\n  \u003c/select\u003e\n  \u003cbutton class=\"ba-btn\" onclick=\"baConvert()\"\u003e変換\u003c/button\u003e\n  \u003cbutton class=\"ba-btn ba-btn-secondary\" onclick=\"baClear()\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cp class=\"ba-error\" id=\"ba-error\"\u003e有効な0以上の数値を入力してください。\u003c/p\u003e","title":"バイト変換ツール — データサイズ計算"},{"content":" 変換オプション URLセーフ Base64 自動検出モード AUTO データURI出力 入力 テキストまたは Base64 文字列を入力 0 文字 エンコード デコード クリア \u0026#8645; 出力 変換結果 0 文字 コピー ファイル → Base64 変換 \u0026#128190; ファイルをドラッグ\u0026ドロップ、またはクリックして選択 テキスト・画像・その他あらゆるファイルに対応 Base64エンコードとは Base64は、バイナリデータを印字可能なASCII文字列に変換するエンコード方式です。英数字と一部の記号（+、/、=）の64種類の文字のみを使用するため、メール本文・HTMLのデータURI・JSONペイロードなど、テキストしか扱えない場面でも安全にバイナリを埋め込めます。3バイトのデータを4文字に変換するため、データ量は約33%増加しますが、あらゆる環境で文字化けなく転送できる信頼性が最大のメリットです。\nURLセーフBase64は標準版の + と / をそれぞれ - と _ に置き換えたバリアントで、JWTトークンやクエリパラメータなど、URLに直接埋め込む用途で広く使われています。パディング文字 = も省略される場合が多く、本ツールの「URLセーフ」モードではこの形式に対応しています。\nよくある使用例 JWT（JSON Web Token）: ヘッダーとペイロードをBase64URLエンコードして署名と連結し、認証情報を安全に伝送する 画像・フォントの埋め込み: CSSやHTMLに data:image/png;base64,... 形式で画像を直接埋め込み、HTTP リクエスト数を削減する メール添付ファイル: MIME形式のメールでバイナリの添付ファイルをBase64に変換して本文に含める APIのバイナリ転送: REST APIのJSONボディにファイルやバイナリデータを含める際、Base64文字列として送信する 設定ファイル・シークレット管理: KubernetesのSecretリソースなど、設定ファイル内にパスワードや証明書をBase64で格納する 関連ツール JSONデータを即座に整形・検証 → JSONフォーマッター 安全なパスワードを即座に生成 → パスワード生成ツール 文字数・単語数をリアルタイムでカウント → 文字数カウンター エンジニアの確定申告をもっと簡単に\nコーディングは得意でも、経理は苦手…。クラウド会計ソフト「freee」なら、銀行口座と自動連携して経費を自動分類。確定申告書の作成もガイドに沿うだけ。\nfreee会計を無料で試す 関連記事 ChatGPT API初心者向け完全ガイド【2026年版・サンプルコード付き】 ","permalink":"https://productivity-works.com/ja/tools/base64-encoder/","summary":"\u003cdiv id=\"base64-app\"\u003e\n\u003cstyle\u003e\n#base64-app {\n  font-family: 'Segoe UI', 'Hiragino Sans', 'Yu Gothic UI', sans-serif;\n  max-width: 820px;\n  margin: 0 auto;\n  padding: 16px;\n  color: #e2e8f0;\n}\n\n#base64-app * {\n  box-sizing: border-box;\n}\n\n.b64-card {\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 12px;\n  padding: 20px;\n  margin-bottom: 16px;\n}\n\n.b64-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #94a3b8;\n  margin-bottom: 6px;\n  letter-spacing: 0.04em;\n}\n\n.b64-textarea {\n  width: 100%;\n  min-height: 140px;\n  background: #0f172a;\n  border: 1.5px solid #334155;\n  border-radius: 8px;\n  padding: 12px;\n  color: #e2e8f0;\n  font-size: 14px;\n  font-family: 'Courier New', 'Consolas', monospace;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.2s;\n  line-height: 1.6;\n}\n\n.b64-textarea:focus {\n  border-color: #06b6d4;\n}\n\n.b64-textarea.error {\n  border-color: #f87171;\n}\n\n.b64-char-count {\n  font-size: 12px;\n  color: #64748b;\n  text-align: right;\n  margin-top: 4px;\n  min-height: 18px;\n}\n\n.b64-error-msg {\n  font-size: 12px;\n  color: #f87171;\n  margin-top: 4px;\n  min-height: 18px;\n}\n\n.b64-options-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  align-items: center;\n  margin-bottom: 14px;\n  padding: 12px 16px;\n  background: #0f172a;\n  border-radius: 8px;\n  border: 1px solid #334155;\n}\n\n.b64-toggle-label {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  cursor: pointer;\n  font-size: 13px;\n  color: #94a3b8;\n  user-select: none;\n}\n\n.b64-toggle-label input[type=\"checkbox\"] {\n  appearance: none;\n  width: 36px;\n  height: 20px;\n  background: #334155;\n  border-radius: 10px;\n  position: relative;\n  cursor: pointer;\n  transition: background 0.2s;\n  flex-shrink: 0;\n}\n\n.b64-toggle-label input[type=\"checkbox\"]:checked {\n  background: #06b6d4;\n}\n\n.b64-toggle-label input[type=\"checkbox\"]::after {\n  content: '';\n  position: absolute;\n  width: 14px;\n  height: 14px;\n  background: #fff;\n  border-radius: 50%;\n  top: 3px;\n  left: 3px;\n  transition: left 0.2s;\n}\n\n.b64-toggle-label input[type=\"checkbox\"]:checked::after {\n  left: 19px;\n}\n\n.b64-btn-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 14px;\n}\n\n.b64-btn {\n  padding: 9px 18px;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n}\n\n.b64-btn:active {\n  transform: scale(0.97);\n}\n\n.b64-btn-primary {\n  background: #06b6d4;\n  color: #0f172a;\n}\n\n.b64-btn-primary:hover {\n  background: #22d3ee;\n}\n\n.b64-btn-secondary {\n  background: #334155;\n  color: #e2e8f0;\n}\n\n.b64-btn-secondary:hover {\n  background: #475569;\n}\n\n.b64-btn-danger {\n  background: #1e293b;\n  color: #94a3b8;\n  border: 1px solid #334155;\n}\n\n.b64-btn-danger:hover {\n  background: #334155;\n  color: #f87171;\n}\n\n.b64-btn-success {\n  background: #059669;\n  color: #fff;\n}\n\n.b64-swap-row {\n  display: flex;\n  justify-content: center;\n  margin: 8px 0;\n}\n\n.b64-swap-btn {\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  color: #06b6d4;\n  border-radius: 50%;\n  width: 40px;\n  height: 40px;\n  font-size: 18px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: all 0.15s;\n}\n\n.b64-swap-btn:hover {\n  background: #334155;\n  transform: rotate(180deg);\n}\n\n.b64-copy-row {\n  display: flex;\n  justify-content: flex-end;\n  gap: 8px;\n  margin-top: 8px;\n}\n\n.b64-dropzone {\n  border: 2px dashed #334155;\n  border-radius: 10px;\n  padding: 24px;\n  text-align: center;\n  color: #64748b;\n  font-size: 13px;\n  cursor: pointer;\n  transition: all 0.2s;\n  background: #0f172a;\n  margin-top: 12px;\n}\n\n.b64-dropzone.dragover {\n  border-color: #06b6d4;\n  background: #0c1a2e;\n  color: #06b6d4;\n}\n\n.b64-dropzone input[type=\"file\"] {\n  display: none;\n}\n\n.b64-dropzone-icon {\n  font-size: 28px;\n  margin-bottom: 6px;\n}\n\n.b64-section-title {\n  font-size: 14px;\n  font-weight: 700;\n  color: #06b6d4;\n  margin-bottom: 10px;\n  padding-bottom: 6px;\n  border-bottom: 1px solid #334155;\n}\n\n.b64-file-info {\n  font-size: 12px;\n  color: #22d3ee;\n  margin-top: 8px;\n  text-align: center;\n}\n\n.b64-uri-toggle {\n  margin-top: 10px;\n}\n\n.b64-auto-badge {\n  font-size: 11px;\n  background: #06b6d4;\n  color: #0f172a;\n  padding: 2px 7px;\n  border-radius: 4px;\n  font-weight: 700;\n  margin-left: 6px;\n}\n\n@media (max-width: 600px) {\n  .b64-btn {\n    padding: 8px 12px;\n    font-size: 13px;\n  }\n\n  .b64-options-row {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: 10px;\n  }\n}\n\u003c/style\u003e\n\u003c!-- オプション行 --\u003e\n\u003cdiv class=\"b64-card\"\u003e\n  \u003cdiv class=\"b64-section-title\"\u003e変換オプション\u003c/div\u003e\n  \u003cdiv class=\"b64-options-row\"\u003e\n    \u003clabel class=\"b64-toggle-label\"\u003e\n      \u003cinput type=\"checkbox\" id=\"b64-url-safe\"\u003e\n      URLセーフ Base64\n    \u003c/label\u003e\n    \u003clabel class=\"b64-toggle-label\"\u003e\n      \u003cinput type=\"checkbox\" id=\"b64-auto-detect\" checked\u003e\n      自動検出モード\n      \u003cspan class=\"b64-auto-badge\"\u003eAUTO\u003c/span\u003e\n    \u003c/label\u003e\n    \u003clabel class=\"b64-toggle-label\"\u003e\n      \u003cinput type=\"checkbox\" id=\"b64-data-uri\"\u003e\n      データURI出力\n    \u003c/label\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 入力エリア --\u003e\n\u003cdiv class=\"b64-card\"\u003e\n  \u003cdiv class=\"b64-section-title\"\u003e入力\u003c/div\u003e\n  \u003cdiv class=\"b64-label\" id=\"b64-input-label\"\u003eテキストまたは Base64 文字列を入力\u003c/div\u003e\n  \u003ctextarea class=\"b64-textarea\" id=\"b64-input\" placeholder=\"ここにテキストまたは Base64 文字列を入力してください...\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"b64-char-count\" id=\"b64-input-count\"\u003e0 文字\u003c/div\u003e\n  \u003c!-- ボタン行 --\u003e\n  \u003cdiv class=\"b64-btn-row\"\u003e\n    \u003cbutton class=\"b64-btn b64-btn-primary\" id=\"b64-encode-btn\"\u003eエンコード\u003c/button\u003e\n    \u003cbutton class=\"b64-btn b64-btn-secondary\" id=\"b64-decode-btn\"\u003eデコード\u003c/button\u003e\n    \u003cbutton class=\"b64-btn b64-btn-danger\" id=\"b64-clear-btn\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- スワップ --\u003e\n\u003cdiv class=\"b64-swap-row\"\u003e\n  \u003cbutton class=\"b64-swap-btn\" id=\"b64-swap-btn\" title=\"入力と出力を入れ替え\"\u003e\u0026#8645;\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- 出力エリア --\u003e\n\u003cdiv class=\"b64-card\"\u003e\n  \u003cdiv class=\"b64-section-title\"\u003e出力\u003c/div\u003e\n  \u003cdiv class=\"b64-label\"\u003e変換結果\u003c/div\u003e\n  \u003ctextarea class=\"b64-textarea\" id=\"b64-output\" placeholder=\"変換結果がここに表示されます...\" readonly\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"b64-char-count\" id=\"b64-output-count\"\u003e0 文字\u003c/div\u003e\n  \u003cdiv class=\"b64-error-msg\" id=\"b64-error\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"b64-copy-row\"\u003e\n    \u003cbutton class=\"b64-btn b64-btn-secondary\" id=\"b64-copy-btn\"\u003eコピー\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ファイル→Base64 --\u003e\n\u003cdiv class=\"b64-card\"\u003e\n  \u003cdiv class=\"b64-section-title\"\u003eファイル → Base64 変換\u003c/div\u003e\n  \u003clabel class=\"b64-dropzone\" id=\"b64-dropzone\"\u003e\n    \u003cinput type=\"file\" id=\"b64-file-input\"\u003e\n    \u003cdiv class=\"b64-dropzone-icon\"\u003e\u0026#128190;\u003c/div\u003e\n    \u003cdiv\u003eファイルをドラッグ\u0026ドロップ、またはクリックして選択\u003c/div\u003e\n    \u003cdiv style=\"font-size:11px;margin-top:4px;color:#475569;\"\u003eテキスト・画像・その他あらゆるファイルに対応\u003c/div\u003e\n  \u003c/label\u003e\n  \u003cdiv class=\"b64-file-info\" id=\"b64-file-info\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  const inputEl   = document.getElementById('b64-input');\n  const outputEl  = document.getElementById('b64-output');\n  const inputCnt  = document.getElementById('b64-input-count');\n  const outputCnt = document.getElementById('b64-output-count');\n  const errorEl   = document.getElementById('b64-error');\n  const encodeBtn = document.getElementById('b64-encode-btn');\n  const decodeBtn = document.getElementById('b64-decode-btn');\n  const clearBtn  = document.getElementById('b64-clear-btn');\n  const swapBtn   = document.getElementById('b64-swap-btn');\n  const copyBtn   = document.getElementById('b64-copy-btn');\n  const urlSafe   = document.getElementById('b64-url-safe');\n  const autoDetect= document.getElementById('b64-auto-detect');\n  const dataUri   = document.getElementById('b64-data-uri');\n  const fileInput = document.getElementById('b64-file-input');\n  const dropzone  = document.getElementById('b64-dropzone');\n  const fileInfo  = document.getElementById('b64-file-info');\n\n  function countChars(str) {\n    return [...str].length;\n  }\n\n  function updateCounts() {\n    const ic = countChars(inputEl.value);\n    const oc = countChars(outputEl.value);\n    inputCnt.textContent  = ic.toLocaleString('ja-JP') + ' 文字';\n    outputCnt.textContent = oc.toLocaleString('ja-JP') + ' 文字';\n  }\n\n  function clearError() {\n    errorEl.textContent = '';\n    outputEl.classList.remove('error');\n  }\n\n  function showError(msg) {\n    errorEl.textContent = msg;\n    outputEl.classList.add('error');\n  }\n\n  function toBase64(str) {\n    try {\n      const encoded = btoa(unescape(encodeURIComponent(str)));\n      if (urlSafe.checked) {\n        return encoded.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n      }\n      return encoded;\n    } catch (e) {\n      throw new Error('エンコードに失敗しました: ' + e.message);\n    }\n  }\n\n  function fromBase64(str) {\n    try {\n      let s = str.trim();\n      if (urlSafe.checked || /[-_]/.test(s)) {\n        s = s.replace(/-/g, '+').replace(/_/g, '/');\n        while (s.length % 4 !== 0) s += '=';\n      }\n      return decodeURIComponent(escape(atob(s)));\n    } catch (e) {\n      throw new Error('デコードに失敗しました。正しい Base64 文字列を入力してください。');\n    }\n  }\n\n  function isLikelyBase64(str) {\n    const s = str.trim().replace(/\\s/g, '');\n    if (s.length \u003c 4) return false;\n    const b64Regex = /^[A-Za-z0-9+/\\-_]+=*$/;\n    return b64Regex.test(s) \u0026\u0026 s.length % 4 === 0 || /^[A-Za-z0-9\\-_]+$/.test(s);\n  }\n\n  function encode() {\n    clearError();\n    const input = inputEl.value;\n    if (!input) {\n      outputEl.value = '';\n      updateCounts();\n      return;\n    }\n    try {\n      let result = toBase64(input);\n      if (dataUri.checked) {\n        result = 'data:text/plain;base64,' + result;\n      }\n      outputEl.value = result;\n    } catch (e) {\n      showError(e.message);\n      outputEl.value = '';\n    }\n    updateCounts();\n  }\n\n  function decode() {\n    clearError();\n    const input = inputEl.value.trim();\n    if (!input) {\n      outputEl.value = '';\n      updateCounts();\n      return;\n    }\n    try {\n      let src = input;\n      if (/^data:[^;]+;base64,/i.test(src)) {\n        src = src.replace(/^data:[^;]+;base64,/i, '');\n      }\n      const result = fromBase64(src);\n      outputEl.value = result;\n    } catch (e) {\n      showError(e.message);\n      outputEl.value = '';\n    }\n    updateCounts();\n  }\n\n  encodeBtn.addEventListener('click', encode);\n  decodeBtn.addEventListener('click', decode);\n\n  clearBtn.addEventListener('click', function () {\n    inputEl.value  = '';\n    outputEl.value = '';\n    fileInfo.textContent = '';\n    clearError();\n    updateCounts();\n  });\n\n  swapBtn.addEventListener('click', function () {\n    const tmp = inputEl.value;\n    inputEl.value  = outputEl.value;\n    outputEl.value = tmp;\n    clearError();\n    updateCounts();\n  });\n\n  copyBtn.addEventListener('click', function () {\n    if (!outputEl.value) return;\n    navigator.clipboard.writeText(outputEl.value).then(function () {\n      const orig = copyBtn.textContent;\n      copyBtn.textContent = 'コピーしました!';\n      copyBtn.classList.add('b64-btn-success');\n      copyBtn.classList.remove('b64-btn-secondary');\n      setTimeout(function () {\n        copyBtn.textContent = orig;\n        copyBtn.classList.remove('b64-btn-success');\n        copyBtn.classList.add('b64-btn-secondary');\n      }, 1800);\n    }).catch(function () {\n      outputEl.select();\n      document.execCommand('copy');\n    });\n  });\n\n  inputEl.addEventListener('input', function () {\n    updateCounts();\n    if (autoDetect.checked \u0026\u0026 inputEl.value.trim()) {\n      const val = inputEl.value.trim();\n      const dataUriPattern = /^data:[^;]+;base64,/i;\n      if (dataUriPattern.test(val) || isLikelyBase64(val)) {\n        decode();\n      } else {\n        encode();\n      }\n    }\n  });\n\n  // ファイル読み込み共通処理\n  function handleFile(file) {\n    if (!file) return;\n    const maxSize = 5 * 1024 * 1024; // 5MB\n    if (file.size \u003e maxSize) {\n      fileInfo.textContent = 'エラー: ファイルサイズは 5MB 以下にしてください。';\n      fileInfo.style.color = '#f87171';\n      return;\n    }\n    const reader = new FileReader();\n    reader.onload = function (e) {\n      let b64 = e.target.result.split(',')[1];\n      if (urlSafe.checked) {\n        b64 = b64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n      }\n      let result = b64;\n      if (dataUri.checked) {\n        result = e.target.result;\n      }\n      outputEl.value = result;\n      inputEl.value  = '';\n      fileInfo.textContent = 'ファイル: ' + file.name + ' (' + (file.size / 1024).toFixed(1) + ' KB) を変換しました。';\n      fileInfo.style.color = '#22d3ee';\n      clearError();\n      updateCounts();\n    };\n    reader.readAsDataURL(file);\n  }\n\n  fileInput.addEventListener('change', function () {\n    handleFile(fileInput.files[0]);\n  });\n\n  dropzone.addEventListener('dragover', function (e) {\n    e.preventDefault();\n    dropzone.classList.add('dragover');\n  });\n\n  dropzone.addEventListener('dragleave', function () {\n    dropzone.classList.remove('dragover');\n  });\n\n  dropzone.addEventListener('drop', function (e) {\n    e.preventDefault();\n    dropzone.classList.remove('dragover');\n    const file = e.dataTransfer.files[0];\n    handleFile(file);\n  });\n\n  updateCounts();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"base64エンコードとは\"\u003eBase64エンコードとは\u003c/h2\u003e\n\u003cp\u003eBase64は、バイナリデータを印字可能なASCII文字列に変換するエンコード方式です。英数字と一部の記号（\u003ccode\u003e+\u003c/code\u003e、\u003ccode\u003e/\u003c/code\u003e、\u003ccode\u003e=\u003c/code\u003e）の64種類の文字のみを使用するため、メール本文・HTMLのデータURI・JSONペイロードなど、テキストしか扱えない場面でも安全にバイナリを埋め込めます。3バイトのデータを4文字に変換するため、データ量は約33%増加しますが、あらゆる環境で文字化けなく転送できる信頼性が最大のメリットです。\u003c/p\u003e","title":"Base64エンコーダー \u0026 デコーダー - 無料オンライン変換ツール"},{"content":"FX損益計算ツール 取引の詳細を入力すると、損益額・必要証拠金・ROI を瞬時に計算します。\n通貨ペア EUR/USD GBP/USD USD/JPY AUD/USD USD/CAD ポジション 買い（ロング） 売り（ショート） ロット数（1標準ロット = 100,000通貨単位） 0.011.00 ロット10.00 エントリー価格 決済価格 スプレッド（pips） 01.0 pips5.0 損益 +$900.00 正味pips: +90.0 必要証拠金 $2,168 レバレッジ 50:1 ROI +41.5% 注意： 計算はレバレッジ50:1（米国標準）を使用。Pip値は概算です。実際の結果はブローカーによって異なります。スワップ・ロールオーバー費用は含みません。 FX損益の計算方法 FX損益の基本計算式：\n損益 = （価格変動pips数）×（Pip値）×（ロット数）－ スプレッドコスト\n通貨ペア Pipサイズ Pip値（1標準ロット） EUR/USD 0.0001 $10 GBP/USD 0.0001 $10 USD/JPY 0.01 約$6.45 AUD/USD 0.0001 $10 リスク管理のポイント 1回の取引でリスクにさらすのは口座残高の1〜2%以内 必ずストップロスを設定して最大損失を限定する 初心者はマイクロロット（0.01）から始める レバレッジが高いほどリスクも高い — 経験を積むまでは低レバレッジで トレード日誌をつけてパフォーマンスを記録・改善する よくある質問 Q: Pipとは何ですか？ Pipとは通貨ペアの最小価格変動単位です。EUR/USDでは0.0001（小数点第4位）、USD/JPYでは0.01（小数点第2位）です。\nQ: FX取引を始めるにはどれくらいの資金が必要ですか？ マイクロ口座（0.01ロット）なら$50〜100程度から始められます。ただし、適切なリスク管理のためには$500〜1,000が推奨されます。\nQ: 標準ロットとミニロットの違いは？ 標準ロットは100,000通貨単位、ミニロットは10,000通貨単位、マイクロロットは1,000通貨単位です。\n関連ツール 複利計算ツール — 長期投資の成長シミュレーション ローン返済計算ツール — 借入返済計画 予算プランナー — 月次予算の最適化 資産管理を効率化 → freee会計で家計を自動管理 関連記事 DMM FXの口座開設のやり方｜初心者でも10分で完了する全手順【2026年版】 FX口座の開設審査に落ちる原因と通過率を上げる4つの対策 FX口座 おすすめ2026年版！初心者向けに比較【少額から始められる】 ","permalink":"https://productivity-works.com/ja/tools/forex-profit-calculator/","summary":"\u003ch1 id=\"fx損益計算ツール\"\u003eFX損益計算ツール\u003c/h1\u003e\n\u003cp\u003e取引の詳細を入力すると、\u003cstrong\u003e損益額\u003c/strong\u003e・\u003cstrong\u003e必要証拠金\u003c/strong\u003e・\u003cstrong\u003eROI\u003c/strong\u003e を瞬時に計算します。\u003c/p\u003e\n\u003cdiv id=\"fx-calc-en\" style=\"max-width:640px;margin:0 auto;padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e通貨ペア\u003c/label\u003e\n\u003cselect id=\"pairEn\" onchange=\"fxCalcEn()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:6px;font-size:16px;\"\u003e\n\u003coption value=\"EURUSD\" data-pip=\"0.0001\" data-pipval=\"10\"\u003eEUR/USD\u003c/option\u003e\n\u003coption value=\"GBPUSD\" data-pip=\"0.0001\" data-pipval=\"10\"\u003eGBP/USD\u003c/option\u003e\n\u003coption value=\"USDJPY\" data-pip=\"0.01\" data-pipval=\"6.45\"\u003eUSD/JPY\u003c/option\u003e\n\u003coption value=\"AUDUSD\" data-pip=\"0.0001\" data-pipval=\"10\"\u003eAUD/USD\u003c/option\u003e\n\u003coption value=\"USDCAD\" data-pip=\"0.0001\" data-pipval=\"7.35\"\u003eUSD/CAD\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003eポジション\u003c/label\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:8px;\"\u003e\n\u003cbutton id=\"btnBuyEn\" onclick=\"setDirEn('buy')\" style=\"padding:12px;border:2px solid #2563eb;border-radius:8px;background:#2563eb;color:white;font-weight:bold;font-size:16px;cursor:pointer;\"\u003e買い（ロング）\u003c/button\u003e\n\u003cbutton id=\"btnSellEn\" onclick=\"setDirEn('sell')\" style=\"padding:12px;border:2px solid #cbd5e1;border-radius:8px;background:white;color:#475569;font-weight:bold;font-size:16px;cursor:pointer;\"\u003e売り（ショート）\u003c/button\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003eロット数（1標準ロット = 100,000通貨単位）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"lotsEn\" min=\"0.01\" max=\"10\" step=\"0.01\" value=\"1\" oninput=\"fxCalcEn()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0.01\u003c/span\u003e\u003cspan id=\"lotsValEn\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e1.00 ロット\u003c/span\u003e\u003cspan\u003e10.00\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:20px;\"\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003eエントリー価格\u003c/label\u003e\n\u003cinput type=\"number\" id=\"entryPriceEn\" value=\"1.0840\" step=\"0.0001\" oninput=\"fxCalcEn()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:6px;font-size:16px;box-sizing:border-box;\"\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e決済価格\u003c/label\u003e\n\u003cinput type=\"number\" id=\"exitPriceEn\" value=\"1.0940\" step=\"0.0001\" oninput=\"fxCalcEn()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:6px;font-size:16px;box-sizing:border-box;\"\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:24px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003eスプレッド（pips）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"spreadEn\" min=\"0\" max=\"5\" step=\"0.1\" value=\"1.0\" oninput=\"fxCalcEn()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0\u003c/span\u003e\u003cspan id=\"spreadValEn\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e1.0 pips\u003c/span\u003e\u003cspan\u003e5.0\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"plBoxEn\" style=\"background:#16a34a;color:white;border-radius:8px;padding:20px;text-align:center;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:14px;margin-bottom:4px;\"\u003e損益\u003c/div\u003e\n\u003cdiv id=\"plAmountEn\" style=\"font-size:36px;font-weight:bold;\"\u003e+$900.00\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;margin-top:4px;\"\u003e正味pips: \u003cspan id=\"plPipsEn\" style=\"font-weight:bold;\"\u003e+90.0\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"background:#e0f2fe;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e必要証拠金\u003c/div\u003e\n\u003cdiv id=\"marginEn\" style=\"font-size:14px;font-weight:bold;color:#0369a1;\"\u003e$2,168\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#fef9c3;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003eレバレッジ\u003c/div\u003e\n\u003cdiv id=\"leverageEn\" style=\"font-size:14px;font-weight:bold;color:#a16207;\"\u003e50:1\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#dcfce7;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003eROI\u003c/div\u003e\n\u003cdiv id=\"roiEn\" style=\"font-size:14px;font-weight:bold;color:#15803d;\"\u003e+41.5%\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f1f5f9;border-radius:8px;padding:12px;font-size:13px;color:#475569;\"\u003e\n\u003cstrong\u003e注意：\u003c/strong\u003e 計算はレバレッジ50:1（米国標準）を使用。Pip値は概算です。実際の結果はブローカーによって異なります。スワップ・ロールオーバー費用は含みません。\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nvar fxDirEn='buy';\nfunction setDirEn(d){\n  fxDirEn=d;\n  document.getElementById('btnBuyEn').style.background=d==='buy'?'#2563eb':'white';\n  document.getElementById('btnBuyEn').style.color=d==='buy'?'white':'#475569';\n  document.getElementById('btnBuyEn').style.borderColor=d==='buy'?'#2563eb':'#cbd5e1';\n  document.getElementById('btnSellEn').style.background=d==='sell'?'#dc2626':'white';\n  document.getElementById('btnSellEn').style.color=d==='sell'?'white':'#475569';\n  document.getElementById('btnSellEn').style.borderColor=d==='sell'?'#dc2626':'#cbd5e1';\n  fxCalcEn();\n}\nfunction fxCalcEn(){\n  var sel=document.getElementById('pairEn');\n  var opt=sel.options[sel.selectedIndex];\n  var pipSize=parseFloat(opt.getAttribute('data-pip'));\n  var pipValPer=parseFloat(opt.getAttribute('data-pipval'));\n  var lots=parseFloat(document.getElementById('lotsEn').value);\n  var entry=parseFloat(document.getElementById('entryPriceEn').value);\n  var exit=parseFloat(document.getElementById('exitPriceEn').value);\n  var spreadPips=parseFloat(document.getElementById('spreadEn').value);\n  if(isNaN(entry)||isNaN(exit)||entry\u003c=0||exit\u003c=0){return;}\n  var priceDiff=fxDirEn==='buy'?(exit-entry):(entry-exit);\n  var pips=priceDiff/pipSize;\n  var netPips=pips-spreadPips;\n  var pl=netPips*pipValPer*lots;\n  var plRound=Math.round(pl*100)/100;\n  var notional=entry*100000*lots;\n  var marginReq=Math.ceil(notional/50);\n  var lev=notional/marginReq;\n  var roiPct=marginReq\u003e0?((plRound/marginReq)*100):0;\n  var plBox=document.getElementById('plBoxEn');\n  plBox.style.background=plRound\u003e=0?'#16a34a':'#dc2626';\n  document.getElementById('lotsValEn').textContent=lots.toFixed(2)+' ロット';\n  document.getElementById('spreadValEn').textContent=spreadPips.toFixed(1)+' pips';\n  document.getElementById('plAmountEn').textContent=(plRound\u003e=0?'+':'')+plRound.toLocaleString('en-US',{style:'currency',currency:'USD'});\n  document.getElementById('plPipsEn').textContent=(netPips\u003e=0?'+':'')+netPips.toFixed(1);\n  document.getElementById('marginEn').textContent='$'+marginReq.toLocaleString();\n  document.getElementById('leverageEn').textContent=Math.round(lev)+':1';\n  document.getElementById('roiEn').textContent=(roiPct\u003e=0?'+':'')+roiPct.toFixed(1)+'%';\n}\nfxCalcEn();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"fx損益の計算方法\"\u003eFX損益の計算方法\u003c/h2\u003e\n\u003cp\u003eFX損益の基本計算式：\u003c/p\u003e","title":"FX損益計算ツール | 無料FXトレードシミュレーター"},{"content":" エンコード形式の選択 形式： Base64 URLエンコード HTMLエンティティ 16進数（Hex） 2進数（Binary） 8進数（Octal） ASCIIコード Unicodeエスケープ（\\uXXXX） JWTデコード（ヘッダー＋ペイロード） チェーン： — ステップ1 — Base64 URLエンコード HTMLエンティティ 16進数 2進数 Unicodeエスケープ \u0026#8594; — ステップ2 — Base64 URLエンコード HTMLエンティティ 16進数 2進数 Unicodeエスケープ チェーン実行 形式を自動検出 AUTO 入力 0 文字 エンコード デコード クリア \u0026#8645; 入力と出力を入れ替え 出力 0 文字 出力をコピー 最近の変換履歴（最大5件） まだ変換履歴がありません。 エンコーダー/デコーダーとは エンコードとは、テキストやバイナリデータを別の表現形式に変換することで、安全に転送・保存・埋め込みができるようにする処理です。デコードはその逆で、元のデータを復元します。暗号化とは異なり、エンコードはセキュリティ機構ではなく、変換手順は公開されており完全に可逆です。テキストベースのプロトコルでバイナリデータを送信する、HTMLやURLに特殊文字を安全に埋め込む、認証トークンを検査するといった場面で広く使われます。\n対応形式一覧 形式 エンコード例 主な用途 Base64 Hello → SGVsbG8= メール添付・データURI・JWT URLエンコード a b → a%20b クエリ文字列・フォームデータ HTMLエンティティ \u0026lt;b\u0026gt; → \u0026amp;lt;b\u0026amp;gt; HTML安全出力 16進数（Hex） A → 41 デバッグ・バイナリ解析 2進数（Binary） A → 01000001 低レベル解析 8進数（Octal） A → \\101 Unixパーミッション・Cエスケープ ASCIIコード Hi → 72 105 プロトコルデバッグ Unicodeエスケープ © → \\u00A9 JavaScriptソース・JSON JWTデコード eyJ… → header＋payload JSON ライブラリ不要のトークン検査 チェーンエンコードの使い方 チェーン機能を使うと、2段階のエンコードを連続して適用できます。たとえば「16進数 → Base64」を選ぶと、各文字を16進数コードに変換してからBase64エンコードします。難読化されたペイロードの解析やCTF（セキュリティコンテスト）などで役立ちます。\n関連ツール Base64エンコード → Base64エンコーダー URLエンコード → URLエンコーダー HTMLエンティティ変換 → HTMLエンティティエンコーダー エンジニアの確定申告を、もっとラクに\nコードは書けても、帳簿はちょっと…というエンジニアの方へ。クラウド会計ソフト「freee」なら、銀行口座・クレジットカードと自動連携して経費を自動分類。確定申告書の作成もガイドに沿うだけで完結します。副業・フリーランス収入がある方にも対応。\nfreee会計を無料で試す（30日間） ","permalink":"https://productivity-works.com/ja/tools/encoder-decoder/","summary":"\u003cdiv id=\"enc-app\"\u003e\n\u003cstyle\u003e\n#enc-app {\n  font-family: 'Hiragino Sans', 'Yu Gothic UI', 'Meiryo', ui-sans-serif, system-ui, sans-serif;\n  color: #e2e8f0;\n  max-width: 880px;\n  margin: 0 auto;\n  padding: 0;\n}\n\n#enc-app * {\n  box-sizing: border-box;\n}\n\n.enc-card {\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 12px;\n  padding: 22px 24px;\n  margin-bottom: 14px;\n}\n\n.enc-section-title {\n  font-size: 15px;\n  font-weight: 700;\n  color: #cbd5e1;\n  margin-bottom: 14px;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.enc-section-title::before {\n  content: '';\n  display: block;\n  width: 3px;\n  height: 16px;\n  background: #06b6d4;\n  border-radius: 2px;\n  flex-shrink: 0;\n}\n\n/* モード選択行 */\n.enc-mode-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  align-items: center;\n  margin-bottom: 16px;\n}\n\n.enc-mode-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #94a3b8;\n  white-space: nowrap;\n}\n\n.enc-select {\n  background: #0f172a;\n  border: 1px solid #334155;\n  border-radius: 8px;\n  color: #e2e8f0;\n  font-size: 14px;\n  padding: 8px 12px;\n  cursor: pointer;\n  outline: none;\n  transition: border-color 0.2s;\n  min-width: 240px;\n}\n\n.enc-select:focus {\n  border-color: #06b6d4;\n}\n\n.enc-auto-badge {\n  display: inline-block;\n  background: #164e63;\n  color: #67e8f9;\n  font-size: 11px;\n  font-weight: 700;\n  padding: 2px 9px;\n  border-radius: 10px;\n  letter-spacing: 0.03em;\n  margin-left: 4px;\n  vertical-align: middle;\n}\n\n/* チェーン行 */\n.enc-chain-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n  margin-bottom: 14px;\n  padding: 10px 14px;\n  background: #0f172a;\n  border: 1px solid #334155;\n  border-radius: 8px;\n}\n\n.enc-chain-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #94a3b8;\n  white-space: nowrap;\n}\n\n.enc-chain-select {\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 6px;\n  color: #e2e8f0;\n  font-size: 13px;\n  padding: 6px 10px;\n  cursor: pointer;\n  outline: none;\n  transition: border-color 0.2s;\n}\n\n.enc-chain-select:focus {\n  border-color: #06b6d4;\n}\n\n.enc-chain-arrow {\n  color: #475569;\n  font-size: 16px;\n  font-weight: 700;\n}\n\n/* テキストエリア */\n.enc-textarea-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #94a3b8;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 7px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n.enc-char-count {\n  font-size: 12px;\n  font-weight: 400;\n  color: #64748b;\n  text-transform: none;\n  letter-spacing: 0;\n}\n\n.enc-textarea {\n  width: 100%;\n  min-height: 140px;\n  background: #0f172a;\n  border: 1px solid #334155;\n  border-radius: 8px;\n  color: #e2e8f0;\n  font-family: ui-monospace, 'Courier New', Consolas, monospace;\n  font-size: 14px;\n  line-height: 1.6;\n  padding: 12px;\n  resize: vertical;\n  transition: border-color 0.2s;\n  outline: none;\n}\n\n.enc-textarea:focus {\n  border-color: #06b6d4;\n}\n\n.enc-textarea.enc-error-border {\n  border-color: #f87171;\n}\n\n.enc-textarea::placeholder {\n  color: #475569;\n}\n\n/* ボタン */\n.enc-btn-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin: 14px 0 0;\n  align-items: center;\n}\n\n.enc-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 9px 20px;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  border: none;\n  transition: background 0.15s, transform 0.1s;\n  white-space: nowrap;\n  outline: none;\n}\n\n.enc-btn:active {\n  transform: scale(0.97);\n}\n\n.enc-btn-primary {\n  background: #06b6d4;\n  color: #0f172a;\n}\n\n.enc-btn-primary:hover {\n  background: #22d3ee;\n}\n\n.enc-btn-violet {\n  background: #7c3aed;\n  color: #fff;\n}\n\n.enc-btn-violet:hover {\n  background: #8b5cf6;\n}\n\n.enc-btn-secondary {\n  background: #475569;\n  color: #e2e8f0;\n}\n\n.enc-btn-secondary:hover {\n  background: #64748b;\n}\n\n.enc-btn-ghost {\n  background: transparent;\n  color: #94a3b8;\n  border: 1px solid #334155;\n}\n\n.enc-btn-ghost:hover {\n  background: #1e293b;\n  color: #e2e8f0;\n  border-color: #475569;\n}\n\n.enc-btn-success {\n  background: #10b981 !important;\n  color: #fff !important;\n}\n\n/* スワップ */\n.enc-swap-row {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin: 4px 0;\n}\n\n.enc-swap-btn {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 7px 16px;\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 20px;\n  color: #94a3b8;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n\n.enc-swap-btn:hover {\n  background: #334155;\n  color: #e2e8f0;\n  border-color: #475569;\n}\n\n/* エラー */\n.enc-error {\n  background: #450a0a;\n  border: 1px solid #f87171;\n  border-radius: 8px;\n  color: #fca5a5;\n  font-size: 13px;\n  padding: 10px 14px;\n  margin-top: 10px;\n  display: none;\n}\n\n.enc-error.visible {\n  display: block;\n}\n\n/* 履歴 */\n.enc-history-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n.enc-history-item {\n  background: #0f172a;\n  border: 1px solid #1e293b;\n  border-radius: 8px;\n  padding: 10px 14px;\n  font-size: 13px;\n  cursor: pointer;\n  transition: border-color 0.15s, background 0.15s;\n  display: flex;\n  flex-direction: column;\n  gap: 3px;\n}\n\n.enc-history-item:hover {\n  border-color: #334155;\n  background: #1e293b;\n}\n\n.enc-history-meta {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n\n.enc-history-mode-badge {\n  display: inline-block;\n  background: #1e3a5f;\n  color: #7dd3fc;\n  font-size: 11px;\n  font-weight: 700;\n  padding: 2px 8px;\n  border-radius: 6px;\n}\n\n.enc-history-dir-badge {\n  display: inline-block;\n  font-size: 11px;\n  font-weight: 700;\n  padding: 2px 7px;\n  border-radius: 6px;\n}\n\n.enc-history-dir-badge.enc {\n  background: #14532d;\n  color: #86efac;\n}\n\n.enc-history-dir-badge.dec {\n  background: #3b1f6e;\n  color: #c4b5fd;\n}\n\n.enc-history-text {\n  color: #94a3b8;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  font-family: ui-monospace, Menlo, monospace;\n  font-size: 12px;\n}\n\n.enc-history-empty {\n  color: #475569;\n  font-size: 13px;\n  font-style: italic;\n}\n\n/* トグル */\n.enc-toggle-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 14px;\n  align-items: center;\n  padding-top: 12px;\n  border-top: 1px solid #1e293b;\n  margin-top: 14px;\n}\n\n.enc-toggle-item {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  cursor: pointer;\n  user-select: none;\n}\n\n.enc-toggle-item input[type=\"checkbox\"] {\n  appearance: none;\n  -webkit-appearance: none;\n  width: 36px;\n  height: 20px;\n  background: #334155;\n  border-radius: 10px;\n  position: relative;\n  cursor: pointer;\n  transition: background 0.2s;\n  flex-shrink: 0;\n}\n\n.enc-toggle-item input[type=\"checkbox\"]:checked {\n  background: #06b6d4;\n}\n\n.enc-toggle-item input[type=\"checkbox\"]::after {\n  content: '';\n  position: absolute;\n  width: 14px;\n  height: 14px;\n  background: #fff;\n  border-radius: 50%;\n  top: 3px;\n  left: 3px;\n  transition: left 0.2s;\n}\n\n.enc-toggle-item input[type=\"checkbox\"]:checked::after {\n  left: 19px;\n}\n\n.enc-toggle-label-text {\n  font-size: 13px;\n  color: #94a3b8;\n}\n\n@media (max-width: 600px) {\n  .enc-card {\n    padding: 16px;\n  }\n  .enc-btn {\n    padding: 8px 14px;\n    font-size: 13px;\n  }\n  .enc-textarea {\n    min-height: 110px;\n    font-size: 13px;\n  }\n  .enc-btn-row {\n    gap: 8px;\n  }\n  .enc-select {\n    min-width: 0;\n    width: 100%;\n  }\n  .enc-mode-row {\n    flex-direction: column;\n    align-items: flex-start;\n  }\n  .enc-chain-row {\n    flex-direction: column;\n    align-items: flex-start;\n  }\n}\n\u003c/style\u003e\n\u003c!-- フォーマット選択 --\u003e\n\u003cdiv class=\"enc-card\"\u003e\n  \u003cdiv class=\"enc-section-title\"\u003eエンコード形式の選択\u003c/div\u003e\n  \u003cdiv class=\"enc-mode-row\"\u003e\n    \u003cspan class=\"enc-mode-label\"\u003e形式：\u003c/span\u003e\n    \u003cselect class=\"enc-select\" id=\"enc-mode\"\u003e\n      \u003coption value=\"base64\"\u003eBase64\u003c/option\u003e\n      \u003coption value=\"url\"\u003eURLエンコード\u003c/option\u003e\n      \u003coption value=\"html\"\u003eHTMLエンティティ\u003c/option\u003e\n      \u003coption value=\"hex\"\u003e16進数（Hex）\u003c/option\u003e\n      \u003coption value=\"binary\"\u003e2進数（Binary）\u003c/option\u003e\n      \u003coption value=\"octal\"\u003e8進数（Octal）\u003c/option\u003e\n      \u003coption value=\"ascii\"\u003eASCIIコード\u003c/option\u003e\n      \u003coption value=\"unicode\"\u003eUnicodeエスケープ（\\uXXXX）\u003c/option\u003e\n      \u003coption value=\"jwt\"\u003eJWTデコード（ヘッダー＋ペイロード）\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003c!-- チェーンエンコード --\u003e\n  \u003cdiv class=\"enc-chain-row\"\u003e\n    \u003cspan class=\"enc-chain-label\"\u003eチェーン：\u003c/span\u003e\n    \u003cselect class=\"enc-chain-select\" id=\"enc-chain-1\"\u003e\n      \u003coption value=\"none\"\u003e— ステップ1 —\u003c/option\u003e\n      \u003coption value=\"base64\"\u003eBase64\u003c/option\u003e\n      \u003coption value=\"url\"\u003eURLエンコード\u003c/option\u003e\n      \u003coption value=\"html\"\u003eHTMLエンティティ\u003c/option\u003e\n      \u003coption value=\"hex\"\u003e16進数\u003c/option\u003e\n      \u003coption value=\"binary\"\u003e2進数\u003c/option\u003e\n      \u003coption value=\"unicode\"\u003eUnicodeエスケープ\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cspan class=\"enc-chain-arrow\"\u003e\u0026#8594;\u003c/span\u003e\n    \u003cselect class=\"enc-chain-select\" id=\"enc-chain-2\"\u003e\n      \u003coption value=\"none\"\u003e— ステップ2 —\u003c/option\u003e\n      \u003coption value=\"base64\"\u003eBase64\u003c/option\u003e\n      \u003coption value=\"url\"\u003eURLエンコード\u003c/option\u003e\n      \u003coption value=\"html\"\u003eHTMLエンティティ\u003c/option\u003e\n      \u003coption value=\"hex\"\u003e16進数\u003c/option\u003e\n      \u003coption value=\"binary\"\u003e2進数\u003c/option\u003e\n      \u003coption value=\"unicode\"\u003eUnicodeエスケープ\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cbutton class=\"enc-btn enc-btn-violet\" id=\"enc-chain-run-btn\"\u003eチェーン実行\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"enc-toggle-row\"\u003e\n    \u003clabel class=\"enc-toggle-item\"\u003e\n      \u003cinput type=\"checkbox\" id=\"enc-auto-detect\"\u003e\n      \u003cspan class=\"enc-toggle-label-text\"\u003e形式を自動検出 \u003cspan class=\"enc-auto-badge\" id=\"enc-auto-indicator\" style=\"display:none;\"\u003eAUTO\u003c/span\u003e\u003c/span\u003e\n    \u003c/label\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 入力エリア --\u003e\n\u003cdiv class=\"enc-card\"\u003e\n  \u003cdiv class=\"enc-textarea-label\"\u003e\n    \u003cspan\u003e入力\u003c/span\u003e\n    \u003cspan class=\"enc-char-count\" id=\"enc-input-count\"\u003e0 文字\u003c/span\u003e\n  \u003c/div\u003e\n  \u003ctextarea\n    class=\"enc-textarea\"\n    id=\"enc-input\"\n    placeholder=\"ここにテキストを入力または貼り付けてください...\"\n    spellcheck=\"false\"\n  \u003e\u003c/textarea\u003e\n  \u003cdiv class=\"enc-btn-row\"\u003e\n    \u003cbutton class=\"enc-btn enc-btn-primary\" id=\"enc-encode-btn\"\u003eエンコード\u003c/button\u003e\n    \u003cbutton class=\"enc-btn enc-btn-primary\" id=\"enc-decode-btn\"\u003eデコード\u003c/button\u003e\n    \u003cbutton class=\"enc-btn enc-btn-ghost\" id=\"enc-clear-btn\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- スワップ --\u003e\n\u003cdiv class=\"enc-swap-row\"\u003e\n  \u003cbutton class=\"enc-swap-btn\" id=\"enc-swap-btn\"\u003e\u0026#8645; 入力と出力を入れ替え\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- 出力エリア --\u003e\n\u003cdiv class=\"enc-card\"\u003e\n  \u003cdiv class=\"enc-textarea-label\"\u003e\n    \u003cspan\u003e出力\u003c/span\u003e\n    \u003cspan class=\"enc-char-count\" id=\"enc-output-count\"\u003e0 文字\u003c/span\u003e\n  \u003c/div\u003e\n  \u003ctextarea\n    class=\"enc-textarea\"\n    id=\"enc-output\"\n    placeholder=\"変換結果がここに表示されます...\"\n    spellcheck=\"false\"\n    readonly\n  \u003e\u003c/textarea\u003e\n  \u003cdiv class=\"enc-error\" id=\"enc-error-msg\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"enc-btn-row\"\u003e\n    \u003cbutton class=\"enc-btn enc-btn-secondary\" id=\"enc-copy-btn\"\u003e出力をコピー\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 変換履歴 --\u003e\n\u003cdiv class=\"enc-card\"\u003e\n  \u003cdiv class=\"enc-section-title\"\u003e最近の変換履歴（最大5件）\u003c/div\u003e\n  \u003cul class=\"enc-history-list\" id=\"enc-history-list\"\u003e\n    \u003cli class=\"enc-history-empty\"\u003eまだ変換履歴がありません。\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  /* ── DOM参照 ── */\n  var inputEl     = document.getElementById('enc-input');\n  var outputEl    = document.getElementById('enc-output');\n  var inputCnt    = document.getElementById('enc-input-count');\n  var outputCnt   = document.getElementById('enc-output-count');\n  var errorEl     = document.getElementById('enc-error-msg');\n  var modeSelect  = document.getElementById('enc-mode');\n  var encodeBtn   = document.getElementById('enc-encode-btn');\n  var decodeBtn   = document.getElementById('enc-decode-btn');\n  var clearBtn    = document.getElementById('enc-clear-btn');\n  var swapBtn     = document.getElementById('enc-swap-btn');\n  var copyBtn     = document.getElementById('enc-copy-btn');\n  var autoDetect  = document.getElementById('enc-auto-detect');\n  var autoInd     = document.getElementById('enc-auto-indicator');\n  var chain1      = document.getElementById('enc-chain-1');\n  var chain2      = document.getElementById('enc-chain-2');\n  var chainRunBtn = document.getElementById('enc-chain-run-btn');\n  var historyList = document.getElementById('enc-history-list');\n\n  /* ── 履歴管理 ── */\n  var history = [];\n\n  function addHistory(mode, direction, input, output) {\n    history.unshift({ mode: mode, dir: direction, input: input, output: output });\n    if (history.length \u003e 5) history = history.slice(0, 5);\n    renderHistory();\n  }\n\n  function renderHistory() {\n    if (history.length === 0) {\n      historyList.innerHTML = '\u003cli class=\"enc-history-empty\"\u003eまだ変換履歴がありません。\u003c/li\u003e';\n      return;\n    }\n    historyList.innerHTML = history.map(function (h, i) {\n      var dirCls  = h.dir === 'encode' ? 'enc' : 'dec';\n      var dirText = h.dir === 'encode' ? 'ENC' : 'DEC';\n      var preview = (h.input || '').substring(0, 60) + (h.input.length \u003e 60 ? '…' : '');\n      return '\u003cli class=\"enc-history-item\" data-idx=\"' + i + '\"\u003e' +\n        '\u003cdiv class=\"enc-history-meta\"\u003e' +\n          '\u003cspan class=\"enc-history-mode-badge\"\u003e' + h.mode.toUpperCase() + '\u003c/span\u003e' +\n          '\u003cspan class=\"enc-history-dir-badge ' + dirCls + '\"\u003e' + dirText + '\u003c/span\u003e' +\n        '\u003c/div\u003e' +\n        '\u003cdiv class=\"enc-history-text\"\u003e' + escapeHtml(preview) + '\u003c/div\u003e' +\n      '\u003c/li\u003e';\n    }).join('');\n\n    historyList.querySelectorAll('.enc-history-item').forEach(function (el) {\n      el.addEventListener('click', function () {\n        var idx = parseInt(this.getAttribute('data-idx'), 10);\n        var h = history[idx];\n        if (h) {\n          inputEl.value  = h.input;\n          outputEl.value = h.output;\n          modeSelect.value = h.mode;\n          updateCounts();\n          clearError();\n        }\n      });\n    });\n  }\n\n  function escapeHtml(str) {\n    return str.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  /* ── 文字数カウント ── */\n  function updateCounts() {\n    inputCnt.textContent  = inputEl.value.length.toLocaleString('ja-JP') + ' 文字';\n    outputCnt.textContent = outputEl.value.length.toLocaleString('ja-JP') + ' 文字';\n  }\n\n  /* ── エラー表示 ── */\n  function showError(msg) {\n    errorEl.textContent = msg;\n    errorEl.classList.add('visible');\n    outputEl.classList.add('enc-error-border');\n  }\n\n  function clearError() {\n    errorEl.textContent = '';\n    errorEl.classList.remove('visible');\n    outputEl.classList.remove('enc-error-border');\n  }\n\n  function setOutput(val) {\n    outputEl.value = val;\n    updateCounts();\n  }\n\n  /* ══════════════════════════════════════════\n     各形式のエンコード/デコード関数\n  ══════════════════════════════════════════ */\n\n  function encodeBase64(str) {\n    return btoa(unescape(encodeURIComponent(str)));\n  }\n\n  function decodeBase64(str) {\n    var raw = str.trim().replace(/^data:[^;]+;base64,/, '');\n    raw = raw.replace(/-/g, '+').replace(/_/g, '/');\n    while (raw.length % 4 !== 0) raw += '=';\n    return decodeURIComponent(escape(atob(raw)));\n  }\n\n  function encodeUrl(str) {\n    return encodeURIComponent(str);\n  }\n\n  function decodeUrl(str) {\n    return decodeURIComponent(str.replace(/\\+/g, ' '));\n  }\n\n  function encodeHtml(str) {\n    return str\n      .replace(/\u0026/g, '\u0026amp;')\n      .replace(/\u003c/g, '\u0026lt;')\n      .replace(/\u003e/g, '\u0026gt;')\n      .replace(/\"/g, '\u0026quot;')\n      .replace(/'/g, '\u0026#39;')\n      .replace(/\\//g, '\u0026#47;');\n  }\n\n  function decodeHtml(str) {\n    var txt = document.createElement('textarea');\n    txt.innerHTML = str;\n    return txt.value;\n  }\n\n  function encodeHex(str) {\n    var result = '';\n    for (var i = 0; i \u003c str.length; i++) {\n      var code = str.charCodeAt(i);\n      result += (code \u003c 256 ? '' : '\\\\u') + code.toString(16).padStart(code \u003c 256 ? 2 : 4, '0') + ' ';\n    }\n    return result.trim();\n  }\n\n  function decodeHex(str) {\n    return str.trim().split(/\\s+/).map(function (token) {\n      var code = parseInt(token.replace(/^\\\\u/, ''), 16);\n      if (isNaN(code)) throw new Error('無効な16進数トークン: ' + token);\n      return String.fromCharCode(code);\n    }).join('');\n  }\n\n  function encodeBinary(str) {\n    var result = [];\n    for (var i = 0; i \u003c str.length; i++) {\n      result.push(str.charCodeAt(i).toString(2).padStart(8, '0'));\n    }\n    return result.join(' ');\n  }\n\n  function decodeBinary(str) {\n    return str.trim().split(/\\s+/).map(function (b) {\n      var code = parseInt(b, 2);\n      if (isNaN(code)) throw new Error('無効な2進数: ' + b);\n      return String.fromCharCode(code);\n    }).join('');\n  }\n\n  function encodeOctal(str) {\n    var result = [];\n    for (var i = 0; i \u003c str.length; i++) {\n      result.push('\\\\' + str.charCodeAt(i).toString(8).padStart(3, '0'));\n    }\n    return result.join(' ');\n  }\n\n  function decodeOctal(str) {\n    return str.trim().split(/\\s+/).map(function (o) {\n      var clean = o.replace(/^\\\\/, '');\n      var code = parseInt(clean, 8);\n      if (isNaN(code)) throw new Error('無効な8進数トークン: ' + o);\n      return String.fromCharCode(code);\n    }).join('');\n  }\n\n  function encodeAscii(str) {\n    var result = [];\n    for (var i = 0; i \u003c str.length; i++) {\n      result.push(str.charCodeAt(i));\n    }\n    return result.join(' ');\n  }\n\n  function decodeAscii(str) {\n    return str.trim().split(/\\s+/).map(function (n) {\n      var code = parseInt(n, 10);\n      if (isNaN(code)) throw new Error('無効なASCIIコード: ' + n);\n      return String.fromCharCode(code);\n    }).join('');\n  }\n\n  function encodeUnicode(str) {\n    var result = '';\n    for (var i = 0; i \u003c str.length; i++) {\n      var code = str.charCodeAt(i);\n      if (code \u003e 127) {\n        result += '\\\\u' + code.toString(16).toUpperCase().padStart(4, '0');\n      } else {\n        result += str[i];\n      }\n    }\n    return result;\n  }\n\n  function decodeUnicode(str) {\n    return str.replace(/\\\\u([0-9a-fA-F]{4})/g, function (_, hex) {\n      return String.fromCharCode(parseInt(hex, 16));\n    });\n  }\n\n  function decodeJwt(str) {\n    var parts = str.trim().split('.');\n    if (parts.length \u003c 2) throw new Error('有効なJWTではありません。ドット区切りの形式（header.payload.signature）を入力してください。');\n    function decodeSegment(seg) {\n      seg = seg.replace(/-/g, '+').replace(/_/g, '/');\n      while (seg.length % 4 !== 0) seg += '=';\n      return JSON.parse(decodeURIComponent(escape(atob(seg))));\n    }\n    var header  = decodeSegment(parts[0]);\n    var payload = decodeSegment(parts[1]);\n    return JSON.stringify({ header: header, payload: payload }, null, 2);\n  }\n\n  /* ── モード別ディスパッチ ── */\n  function runEncode(text, mode) {\n    switch (mode) {\n      case 'base64':  return encodeBase64(text);\n      case 'url':     return encodeUrl(text);\n      case 'html':    return encodeHtml(text);\n      case 'hex':     return encodeHex(text);\n      case 'binary':  return encodeBinary(text);\n      case 'octal':   return encodeOctal(text);\n      case 'ascii':   return encodeAscii(text);\n      case 'unicode': return encodeUnicode(text);\n      case 'jwt':     throw new Error('JWTはデコード専用です。エンコードには別の形式を選択してください。');\n      default: throw new Error('不明な形式: ' + mode);\n    }\n  }\n\n  function runDecode(text, mode) {\n    switch (mode) {\n      case 'base64':  return decodeBase64(text);\n      case 'url':     return decodeUrl(text);\n      case 'html':    return decodeHtml(text);\n      case 'hex':     return decodeHex(text);\n      case 'binary':  return decodeBinary(text);\n      case 'octal':   return decodeOctal(text);\n      case 'ascii':   return decodeAscii(text);\n      case 'unicode': return decodeUnicode(text);\n      case 'jwt':     return decodeJwt(text);\n      default: throw new Error('不明な形式: ' + mode);\n    }\n  }\n\n  /* ── 自動検出 ── */\n  function detectMode(str) {\n    var s = str.trim();\n    if (/^[A-Za-z0-9\\-_]+\\.[A-Za-z0-9\\-_]+\\.[A-Za-z0-9\\-_]*$/.test(s)) return 'jwt';\n    if (/^[A-Za-z0-9+/\\-_]+=*$/.test(s) \u0026\u0026 s.length % 4 === 0 \u0026\u0026 s.length \u003e 3) return 'base64';\n    if (/%[0-9A-Fa-f]{2}/.test(s)) return 'url';\n    if (/\u0026(amp|lt|gt|quot|#\\d+|#x[0-9a-fA-F]+);/.test(s)) return 'html';\n    if (/^([01]{8}\\s*)+$/.test(s)) return 'binary';\n    if (/^(\\\\[0-7]{3}\\s*)+$/.test(s)) return 'octal';\n    if (/^([0-9a-fA-F]{2}\\s*)+$/.test(s)) return 'hex';\n    if (/^(\\d{1,3}\\s*)+$/.test(s) \u0026\u0026 s.trim().split(/\\s+/).every(function(n){var v=parseInt(n,10);return !isNaN(v)\u0026\u0026v\u003e=0\u0026\u0026v\u003c=127;})) return 'ascii';\n    if (/\\\\u[0-9a-fA-F]{4}/.test(s)) return 'unicode';\n    return null;\n  }\n\n  /* ── メイン処理 ── */\n  function doEncode() {\n    clearError();\n    var text = inputEl.value;\n    var mode = modeSelect.value;\n    if (!text) { setOutput(''); return; }\n    try {\n      var result = runEncode(text, mode);\n      setOutput(result);\n      addHistory(mode, 'encode', text, result);\n    } catch (e) {\n      showError('エンコードエラー: ' + e.message);\n      setOutput('');\n    }\n  }\n\n  function doDecode() {\n    clearError();\n    var text = inputEl.value;\n    var mode = modeSelect.value;\n    if (!text) { setOutput(''); return; }\n    try {\n      var result = runDecode(text, mode);\n      setOutput(result);\n      addHistory(mode, 'decode', text, result);\n    } catch (e) {\n      showError('デコードエラー: ' + e.message);\n      setOutput('');\n    }\n  }\n\n  /* ── チェーンエンコード ── */\n  function doChain() {\n    clearError();\n    var text = inputEl.value;\n    if (!text) { setOutput(''); return; }\n    var steps = [chain1.value, chain2.value].filter(function(v){ return v !== 'none'; });\n    if (steps.length === 0) {\n      showError('チェーンのステップを少なくとも1つ選択してください。');\n      return;\n    }\n    try {\n      var current = text;\n      steps.forEach(function (step) {\n        current = runEncode(current, step);\n      });\n      setOutput(current);\n      addHistory(steps.join('+'), 'encode', text, current);\n    } catch (e) {\n      showError('チェーンエラー: ' + e.message);\n      setOutput('');\n    }\n  }\n\n  /* ── 自動検出実行 ── */\n  function runAutoDetect() {\n    var text = inputEl.value.trim();\n    if (!text) return;\n    var detected = detectMode(text);\n    if (detected) {\n      modeSelect.value = detected;\n      doDecode();\n    }\n  }\n\n  /* ── コピー ── */\n  function doCopy() {\n    var val = outputEl.value;\n    if (!val) return;\n    navigator.clipboard.writeText(val).then(function () {\n      flashCopy();\n    }).catch(function () {\n      var ta = document.createElement('textarea');\n      ta.value = val;\n      ta.style.position = 'fixed';\n      ta.style.opacity  = '0';\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      flashCopy();\n    });\n  }\n\n  function flashCopy() {\n    var orig = copyBtn.textContent;\n    copyBtn.textContent = 'コピーしました!';\n    copyBtn.classList.add('enc-btn-success');\n    setTimeout(function () {\n      copyBtn.textContent = orig;\n      copyBtn.classList.remove('enc-btn-success');\n    }, 1800);\n  }\n\n  /* ── イベント登録 ── */\n  encodeBtn.addEventListener('click', doEncode);\n  decodeBtn.addEventListener('click', doDecode);\n  chainRunBtn.addEventListener('click', doChain);\n\n  clearBtn.addEventListener('click', function () {\n    inputEl.value  = '';\n    setOutput('');\n    clearError();\n  });\n\n  swapBtn.addEventListener('click', function () {\n    var tmp = inputEl.value;\n    inputEl.value  = outputEl.value;\n    outputEl.value = tmp;\n    clearError();\n    updateCounts();\n  });\n\n  copyBtn.addEventListener('click', doCopy);\n\n  autoDetect.addEventListener('change', function () {\n    autoInd.style.display = this.checked ? 'inline-block' : 'none';\n    if (this.checked) runAutoDetect();\n  });\n\n  inputEl.addEventListener('input', function () {\n    updateCounts();\n    clearError();\n    if (autoDetect.checked) runAutoDetect();\n  });\n\n  renderHistory();\n  updateCounts();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"エンコーダーデコーダーとは\"\u003eエンコーダー/デコーダーとは\u003c/h2\u003e\n\u003cp\u003eエンコードとは、テキストやバイナリデータを別の表現形式に変換することで、安全に転送・保存・埋め込みができるようにする処理です。デコードはその逆で、元のデータを復元します。暗号化とは異なり、エンコードはセキュリティ機構ではなく、変換手順は公開されており完全に可逆です。テキストベースのプロトコルでバイナリデータを送信する、HTMLやURLに特殊文字を安全に埋め込む、認証トークンを検査するといった場面で広く使われます。\u003c/p\u003e","title":"万能エンコーダー/デコーダー — マルチフォーマット変換"},{"content":" 元のテキスト 変更後のテキスト 比較する \u0026#8646; 入れ替え クリア 差分結果 コピー 追加 削除 関連ツール:\nJSON比較 → JSON差分比較 Markdown編集 → Markdownエディター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。 freeeを無料で試す \u0026rarr; ","permalink":"https://productivity-works.com/ja/tools/diff-checker/","summary":"\u003cdiv id=\"dc-app\"\u003e\n\u003cstyle\u003e\n#dc-app *,#dc-app *::before,#dc-app *::after{box-sizing:border-box;margin:0;padding:0}\n#dc-app{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Noto Sans JP',sans-serif;color:#1e293b;max-width:900px;margin:0 auto;padding:16px}\n#dc-app h2{font-size:1.1rem;font-weight:600;color:#334155;margin-bottom:10px}\n#dc-app .dc-inputs{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n@media(max-width:600px){#dc-app .dc-inputs{grid-template-columns:1fr}}\n#dc-app .dc-col label{display:block;font-size:13px;font-weight:600;color:#475569;margin-bottom:6px}\n#dc-app textarea{width:100%;height:200px;padding:10px 12px;font-size:13px;font-family:monospace;border:1.5px solid #cbd5e1;border-radius:8px;resize:vertical;outline:none;line-height:1.6;background:#f8fafc;transition:border-color .2s}\n#dc-app textarea:focus{border-color:#3b82f6;background:#fff}\n#dc-app .dc-actions{display:flex;align-items:center;gap:10px;margin:14px 0;flex-wrap:wrap}\n#dc-app button{cursor:pointer;border:none;border-radius:7px;font-size:13px;font-weight:600;padding:9px 20px;transition:opacity .15s}\n#dc-app button:hover{opacity:.85}\n#dc-app .btn-primary{background:#3b82f6;color:#fff}\n#dc-app .btn-secondary{background:#e2e8f0;color:#334155}\n#dc-app .btn-copy{background:#10b981;color:#fff}\n#dc-app .dc-stats{font-size:12px;color:#64748b;margin-left:auto;display:flex;gap:12px;flex-wrap:wrap}\n#dc-app .dc-stats span{background:#f1f5f9;border-radius:5px;padding:4px 10px}\n#dc-app .dc-result-wrap{border:1.5px solid #e2e8f0;border-radius:10px;overflow:hidden}\n#dc-app .dc-result-header{background:#f8fafc;padding:10px 14px;font-size:12px;font-weight:600;color:#64748b;display:flex;gap:16px;border-bottom:1px solid #e2e8f0;align-items:center}\n#dc-app .dc-result{padding:12px 14px;font-size:13px;font-family:monospace;line-height:1.8;white-space:pre-wrap;word-break:break-all;min-height:80px;max-height:420px;overflow-y:auto;background:#fff}\n#dc-app .dc-added{background:#dcfce7;color:#166534;border-radius:3px;padding:0 2px}\n#dc-app .dc-removed{background:#fee2e2;color:#991b1b;border-radius:3px;padding:0 2px;text-decoration:line-through}\n#dc-app .dc-empty{color:#94a3b8;font-style:italic;font-family:sans-serif}\n#dc-app .dc-legend{display:flex;gap:14px;font-size:12px;margin-top:10px}\n#dc-app .dc-legend span{display:flex;align-items:center;gap:5px}\n#dc-app .dc-legend .dot{width:12px;height:12px;border-radius:3px;display:inline-block}\n#dc-app .dot-add{background:#dcfce7;border:1px solid #86efac}\n#dc-app .dot-rem{background:#fee2e2;border:1px solid #fca5a5}\n\u003c/style\u003e\n\u003cdiv class=\"dc-inputs\"\u003e\n  \u003cdiv class=\"dc-col\"\u003e\n    \u003clabel for=\"dc-text-a\"\u003e元のテキスト\u003c/label\u003e\n    \u003ctextarea id=\"dc-text-a\" placeholder=\"比較元のテキストを貼り付けてください...\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"dc-col\"\u003e\n    \u003clabel for=\"dc-text-b\"\u003e変更後のテキスト\u003c/label\u003e\n    \u003ctextarea id=\"dc-text-b\" placeholder=\"変更後のテキストを貼り付けてください...\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"dc-actions\"\u003e\n  \u003cbutton class=\"btn-primary\" onclick=\"dcRun()\"\u003e比較する\u003c/button\u003e\n  \u003cbutton class=\"btn-secondary\" onclick=\"dcSwap()\"\u003e\u0026#8646; 入れ替え\u003c/button\u003e\n  \u003cbutton class=\"btn-secondary\" onclick=\"dcClear()\"\u003eクリア\u003c/button\u003e\n  \u003cdiv class=\"dc-stats\" id=\"dc-stats\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"dc-result-wrap\" id=\"dc-result-wrap\" style=\"display:none\"\u003e\n  \u003cdiv class=\"dc-result-header\"\u003e\n    \u003cspan\u003e差分結果\u003c/span\u003e\n    \u003cspan id=\"dc-result-meta\"\u003e\u003c/span\u003e\n    \u003cbutton class=\"btn-copy\" style=\"margin-left:auto;padding:4px 14px;font-size:12px\" onclick=\"dcCopy()\"\u003eコピー\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"dc-result\" id=\"dc-result\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"dc-legend\"\u003e\n  \u003cspan\u003e\u003cspan class=\"dot dot-add\"\u003e\u003c/span\u003e 追加\u003c/span\u003e\n  \u003cspan\u003e\u003cspan class=\"dot dot-rem\"\u003e\u003c/span\u003e 削除\u003c/span\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  function lcsTokens(a, b) {\n    var m = a.length, n = b.length;\n    var dp = new Uint16Array((m+1)*(n+1));\n    for (var i = m-1; i \u003e= 0; i--) {\n      for (var j = n-1; j \u003e= 0; j--) {\n        if (a[i] === b[j]) {\n          dp[i*(n+1)+j] = 1 + dp[(i+1)*(n+1)+(j+1)];\n        } else {\n          var x = dp[(i+1)*(n+1)+j], y = dp[i*(n+1)+(j+1)];\n          dp[i*(n+1)+j] = x \u003e y ? x : y;\n        }\n      }\n    }\n    var ops = [], i = 0, j = 0;\n    while (i \u003c m \u0026\u0026 j \u003c n) {\n      if (a[i] === b[j]) { ops.push({t:'=',v:a[i]}); i++; j++; }\n      else if (dp[(i+1)*(n+1)+j] \u003e= dp[i*(n+1)+(j+1)]) { ops.push({t:'-',v:a[i]}); i++; }\n      else { ops.push({t:'+',v:b[j]}); j++; }\n    }\n    while (i \u003c m) { ops.push({t:'-',v:a[i]}); i++; }\n    while (j \u003c n) { ops.push({t:'+',v:b[j]}); j++; }\n    return ops;\n  }\n\n  function tokenize(text) {\n    return text.match(/\\S+|\\s+/g) || [];\n  }\n\n  window.dcRun = function() {\n    var a = document.getElementById('dc-text-a').value;\n    var b = document.getElementById('dc-text-b').value;\n    var wrap = document.getElementById('dc-result-wrap');\n    var out = document.getElementById('dc-result');\n    var meta = document.getElementById('dc-result-meta');\n    var statsEl = document.getElementById('dc-stats');\n\n    if (!a \u0026\u0026 !b) {\n      wrap.style.display = 'none';\n      statsEl.innerHTML = '';\n      return;\n    }\n\n    var tokA = tokenize(a);\n    var tokB = tokenize(b);\n    var ops = lcsTokens(tokA, tokB);\n\n    var added = 0, removed = 0;\n    var html = '';\n    for (var i = 0; i \u003c ops.length; i++) {\n      var o = ops[i];\n      var esc = o.v.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n      if (o.t === '=') { html += esc; }\n      else if (o.t === '+') { html += '\u003cspan class=\"dc-added\"\u003e'+esc+'\u003c/span\u003e'; added++; }\n      else { html += '\u003cspan class=\"dc-removed\"\u003e'+esc+'\u003c/span\u003e'; removed++; }\n    }\n\n    var linesA = a ? a.split('\\n').length : 0;\n    var linesB = b ? b.split('\\n').length : 0;\n\n    out.innerHTML = html || '\u003cspan class=\"dc-empty\"\u003e差分はありません。\u003c/span\u003e';\n    wrap.style.display = '';\n    meta.textContent = '追加 ' + added + ' · 削除 ' + removed;\n    statsEl.innerHTML =\n      '\u003cspan\u003e元: ' + linesA + ' 行\u003c/span\u003e' +\n      '\u003cspan\u003e変更後: ' + linesB + ' 行\u003c/span\u003e' +\n      '\u003cspan\u003e+' + added + ' / -' + removed + '\u003c/span\u003e';\n  };\n\n  window.dcSwap = function() {\n    var a = document.getElementById('dc-text-a');\n    var b = document.getElementById('dc-text-b');\n    var tmp = a.value; a.value = b.value; b.value = tmp;\n  };\n\n  window.dcClear = function() {\n    document.getElementById('dc-text-a').value = '';\n    document.getElementById('dc-text-b').value = '';\n    document.getElementById('dc-result-wrap').style.display = 'none';\n    document.getElementById('dc-stats').innerHTML = '';\n  };\n\n  window.dcCopy = function() {\n    var el = document.getElementById('dc-result');\n    var text = el.innerText || el.textContent;\n    navigator.clipboard.writeText(text).then(function(){\n      var btn = event.target;\n      var orig = btn.textContent;\n      btn.textContent = 'コピー完了!';\n      setTimeout(function(){ btn.textContent = orig; }, 1500);\n    });\n  };\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e関連ツール:\u003c/strong\u003e\u003c/p\u003e","title":"テキスト差分比較ツール"},{"content":" 移動費計算 車両比較 年間コスト試算 ガソリン代計算 \u0026lt;div class=\u0026quot;fc-toggles\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;fc-toggle-label\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;fc-roundtrip\u0026quot; onchange=\u0026quot;fcCalcTrip()\u0026quot;\u0026gt; 往復で計算する \u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-grid\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;走行距離 (km)\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fc-distance\u0026quot; value=\u0026quot;100\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;1\u0026quot; oninput=\u0026quot;fcCalcTrip()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;燃費の表示方法\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;fc-eff-mode\u0026quot; onchange=\u0026quot;fcCalcTrip()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;kml\u0026quot;\u0026gt;km/L（日本標準）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;l100km\u0026quot;\u0026gt;L/100km\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;mpg\u0026quot;\u0026gt;MPG（米国）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label id=\u0026quot;fc-eff-val-lbl\u0026quot;\u0026gt;燃費の値 (km/L)\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fc-efficiency\u0026quot; value=\u0026quot;15\u0026quot; min=\u0026quot;0.1\u0026quot; step=\u0026quot;0.1\u0026quot; oninput=\u0026quot;fcCalcTrip()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ガソリン価格 (円/L)\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fc-price\u0026quot; value=\u0026quot;170\u0026quot; min=\u0026quot;1\u0026quot; step=\u0026quot;1\u0026quot; oninput=\u0026quot;fcCalcTrip()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;fc-btn\u0026quot; onclick=\u0026quot;fcCalcTrip()\u0026quot;\u0026gt;計算する\u0026lt;/button\u0026gt; \u0026lt;div class=\u0026quot;fc-result-bar\u0026quot; id=\u0026quot;fc-trip-results\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fc-result-item\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fc-result-val\u0026quot; id=\u0026quot;fc-r-fuel\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-result-lbl\u0026quot;\u0026gt;必要燃料\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-result-item\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fc-result-val\u0026quot; id=\u0026quot;fc-r-cost\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-result-lbl\u0026quot;\u0026gt;合計費用\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-result-item\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fc-result-val\u0026quot; id=\u0026quot;fc-r-dist\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-result-lbl\u0026quot;\u0026gt;走行距離\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-result-item\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fc-result-val\u0026quot; id=\u0026quot;fc-r-perkm\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-result-lbl\u0026quot;\u0026gt;1kmあたり費用\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-tip\u0026quot; id=\u0026quot;fc-trip-tip\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; 2台の車を比較する \u0026lt;div class=\u0026quot;fc-grid\u0026quot; style=\u0026quot;margin-bottom:1rem;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;走行距離 (km)\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fc-cmp-dist\u0026quot; value=\u0026quot;200\u0026quot; min=\u0026quot;1\u0026quot; step=\u0026quot;1\u0026quot; oninput=\u0026quot;fcCalcCompare()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ガソリン価格 (円/L)\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fc-cmp-price\u0026quot; value=\u0026quot;170\u0026quot; min=\u0026quot;1\u0026quot; step=\u0026quot;1\u0026quot; oninput=\u0026quot;fcCalcCompare()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-compare-grid\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fc-vehicle-card\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;車両 A\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;車名\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fc-va-name\u0026quot; value=\u0026quot;現在の車\u0026quot; oninput=\u0026quot;fcCalcCompare()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;燃費の表示方法\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;fc-va-mode\u0026quot; onchange=\u0026quot;fcCalcCompare()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;kml\u0026quot;\u0026gt;km/L\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;l100km\u0026quot;\u0026gt;L/100km\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;mpg\u0026quot;\u0026gt;MPG\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;燃費の値\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fc-va-eff\u0026quot; value=\u0026quot;12\u0026quot; min=\u0026quot;0.1\u0026quot; step=\u0026quot;0.1\u0026quot; oninput=\u0026quot;fcCalcCompare()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-vehicle-card\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;車両 B\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;車名\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;fc-vb-name\u0026quot; value=\u0026quot;新しい車\u0026quot; oninput=\u0026quot;fcCalcCompare()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;燃費の表示方法\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;fc-vb-mode\u0026quot; onchange=\u0026quot;fcCalcCompare()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;kml\u0026quot;\u0026gt;km/L\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;l100km\u0026quot;\u0026gt;L/100km\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;mpg\u0026quot;\u0026gt;MPG\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;燃費の値\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fc-vb-eff\u0026quot; value=\u0026quot;20\u0026quot; min=\u0026quot;0.1\u0026quot; step=\u0026quot;0.1\u0026quot; oninput=\u0026quot;fcCalcCompare()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;table class=\u0026quot;fc-cmp-table\u0026quot;\u0026gt; \u0026lt;thead\u0026gt; \u0026lt;tr\u0026gt; \u0026lt;th\u0026gt;項目\u0026lt;/th\u0026gt; \u0026lt;th id=\u0026quot;fc-cmp-th-a\u0026quot;\u0026gt;車両 A\u0026lt;/th\u0026gt; \u0026lt;th id=\u0026quot;fc-cmp-th-b\u0026quot;\u0026gt;車両 B\u0026lt;/th\u0026gt; \u0026lt;/tr\u0026gt; \u0026lt;/thead\u0026gt; \u0026lt;tbody id=\u0026quot;fc-cmp-tbody\u0026quot;\u0026gt;\u0026lt;/tbody\u0026gt; \u0026lt;/table\u0026gt; \u0026lt;div class=\u0026quot;fc-chart-wrap\u0026quot;\u0026gt; \u0026lt;canvas id=\u0026quot;fc-cmp-chart\u0026quot; height=\u0026quot;240\u0026quot;\u0026gt;\u0026lt;/canvas\u0026gt; \u0026lt;/div\u0026gt; 年間ガソリン代試算 \u0026lt;div class=\u0026quot;fc-grid\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;片道通勤距離 (km)\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fc-ann-commute\u0026quot; value=\u0026quot;20\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;1\u0026quot; oninput=\u0026quot;fcCalcAnnual()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;週の出勤日数\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fc-ann-workdays\u0026quot; value=\u0026quot;5\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;7\u0026quot; step=\u0026quot;1\u0026quot; oninput=\u0026quot;fcCalcAnnual()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;燃費の表示方法\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;fc-ann-mode\u0026quot; onchange=\u0026quot;fcCalcAnnual()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;kml\u0026quot;\u0026gt;km/L\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;l100km\u0026quot;\u0026gt;L/100km\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;mpg\u0026quot;\u0026gt;MPG\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;燃費の値\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fc-ann-eff\u0026quot; value=\u0026quot;15\u0026quot; min=\u0026quot;0.1\u0026quot; step=\u0026quot;0.1\u0026quot; oninput=\u0026quot;fcCalcAnnual()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ガソリン価格 (円/L)\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fc-ann-price\u0026quot; value=\u0026quot;170\u0026quot; min=\u0026quot;1\u0026quot; step=\u0026quot;1\u0026quot; oninput=\u0026quot;fcCalcAnnual()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;週の追加走行 (km)\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;fc-ann-extra\u0026quot; value=\u0026quot;50\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;10\u0026quot; oninput=\u0026quot;fcCalcAnnual()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-annual-grid\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;fc-annual-stat\u0026quot;\u0026gt;\u0026lt;div class=\u0026quot;val\u0026quot; id=\u0026quot;fc-an-weekly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\u0026lt;div class=\u0026quot;lbl\u0026quot;\u0026gt;週あたり\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-annual-stat\u0026quot;\u0026gt;\u0026lt;div class=\u0026quot;val\u0026quot; id=\u0026quot;fc-an-monthly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\u0026lt;div class=\u0026quot;lbl\u0026quot;\u0026gt;月あたり\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-annual-stat\u0026quot;\u0026gt;\u0026lt;div class=\u0026quot;val\u0026quot; id=\u0026quot;fc-an-yearly\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\u0026lt;div class=\u0026quot;lbl\u0026quot;\u0026gt;年間合計\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-annual-stat\u0026quot;\u0026gt;\u0026lt;div class=\u0026quot;val\u0026quot; id=\u0026quot;fc-an-liters\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\u0026lt;div class=\u0026quot;lbl\u0026quot;\u0026gt;年間給油量\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-annual-stat\u0026quot;\u0026gt;\u0026lt;div class=\u0026quot;val\u0026quot; id=\u0026quot;fc-an-km\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\u0026lt;div class=\u0026quot;lbl\u0026quot;\u0026gt;年間走行距離\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-annual-stat\u0026quot;\u0026gt;\u0026lt;div class=\u0026quot;val\u0026quot; id=\u0026quot;fc-an-perday\u0026quot;\u0026gt;—\u0026lt;/div\u0026gt;\u0026lt;div class=\u0026quot;lbl\u0026quot;\u0026gt;1日あたり\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fc-chart-wrap\u0026quot;\u0026gt; \u0026lt;canvas id=\u0026quot;fc-ann-chart\u0026quot; height=\u0026quot;240\u0026quot;\u0026gt;\u0026lt;/canvas\u0026gt; \u0026lt;/div\u0026gt; \u0026#8594;毎月の家計を管理する → 電気代計算ツール \u0026#8594;収支を一元管理する → 家計簿・予算管理ツール ガソリン代の節約に役立つ豆知識 エコドライブで燃費を改善\n急加速・急ブレーキを避けてなめらかな運転を心がけることで、燃費を10〜15%程度改善できます。また、タイヤの空気圧を適正値に保つだけで燃費が約2〜3%向上することが知られています。\nガソリン価格をチェックする習慣\nガソリンスタンドによって価格が数円異なることは珍しくありません。通勤経路にある安いスタンドを把握しておくだけで、年間で数千円の節約につながります。\n通勤費の経費申告を忘れずに\n会社員の方は通勤費として申告できる場合があります。自営業・フリーランスの方は、業務で利用した走行分を経費として計上できます。領収書やガソリン代の記録を整理しておきましょう。\n関連ツール 毎月の電気代を把握する → 電気代計算ツール 収支を管理して節約を見える化 → 家計簿・予算管理ツール 車の維持費・家計管理を一元化しよう\nガソリン代・保険・車検・ローン返済など、クルマにかかるコストをまとめて管理したいなら、クラウド会計ソフト「freee」が便利です。レシートの自動取り込みや確定申告サポートで、家計・事業の両方に対応しています。\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/fuel-cost-calculator/","summary":"\u003cdiv id=\"fc-app\"\u003e\n\u003cstyle\u003e\n#fc-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#fc-app * { box-sizing: border-box; }\n\u003cp\u003e#fc-app h2 {\nfont-size: 1.15rem;\nfont-weight: 700;\ncolor: #0f172a;\nmargin: 0 0 1rem 0;\npadding-bottom: 0.5rem;\nborder-bottom: 2px solid #e2e8f0;\n}\n#fc-app h3 {\nfont-size: 0.9rem;\nfont-weight: 700;\ncolor: #334155;\nmargin: 0 0 0.6rem 0;\n}\u003c/p\u003e\n\u003cp\u003e/* Tabs */\n#fc-app .fc-tabs {\ndisplay: flex;\ngap: 0.5rem;\nmargin-bottom: 1.5rem;\nflex-wrap: wrap;\n}\n#fc-app .fc-tab {\npadding: 0.5rem 1.1rem;\nborder-radius: 6px;\nborder: 1.5px solid #cbd5e1;\nbackground: #f8fafc;\ncolor: #475569;\ncursor: pointer;\nfont-size: 0.85rem;\nfont-weight: 600;\ntransition: all 0.15s ease;\n}\n#fc-app .fc-tab:hover { border-color: #059669; color: #059669; }\n#fc-app .fc-tab.active { background: #059669; border-color: #059669; color: #fff; }\u003c/p\u003e","title":"ガソリン代計算ツール"},{"content":"本ページにはアフィリエイトリンクが含まれます。\n老後資産計算機 現在の年齢・毎月の積立額・期待利回りを入力して、退職時の老後資産を見積もりましょう。\n現在の年齢 18歳3060歳 毎月の積立額（円） 5,000円30,000円100,000円 雇用主マッチング率（%） 0%0%100% 企業型DCなどで会社が上乗せしてくれる割合 年間期待利回り（%） 1%5.0%10% 退職年齢 55歳6570歳 退職時の想定資産額 ¥0 退職まであと 35 年 自分の積立額 ¥0 会社マッチング ¥0 運用益 ¥0 退職後の月間引出額（4%ルール）： ¥0/月 資産の4%を毎年取り崩す場合の目安 前提条件： 毎月積立・複利計算（月次）。4%ルールは持続可能な年間取崩率の目安。実際の運用成績は異なります。インフレや税金は考慮していません。 老後資産を最大化するには 会社マッチングをフル活用 — 企業型DCがある場合、マッチング上限まで積み立てないと「もらえるお金を捨てている」のと同じです 非課税枠を使い切る — 2026年のNISA年間投資枠：つみたて投資枠120万円、成長投資枠240万円 低コストインデックスファンドを選ぶ — 信託報酬の差は複利で何百万円もの違いになります 毎年積立額を増やす — 昇給のたびに積立額を1〜2%引き上げると、苦痛なく資産を積み上げられます iDeCo・NISA・企業型DCの比較 項目 iDeCo つみたてNISA枠 成長投資枠 年間上限 〜81.6万円（属性による） 120万円 240万円 掛金の税優遇 全額所得控除 なし（税引後） なし（税引後） 運用益・引出 引出時課税 非課税 非課税 受取開始 60〜75歳 いつでも いつでも 向いている人 節税重視・長期 積立投資初心者 個別株・ETF投資 よくある質問 Q: 4%ルールとは何ですか？ 退職1年目に資産の4%を引き出し、以降はインフレに合わせて調整する戦略です。研究では30年間の退職生活を支えられるとされています。\nQ: 期待利回りはどのくらいに設定すればよいですか？ 全世界株式インデックスは過去30年で年平均7〜10%程度のリターンを上げています。インフレや手数料を差し引いた実質ベースでは5%が保守的な目安です。\nQ: いつから始めるべきですか？ できるだけ早く。25歳と35歳から同額を積み立てた場合、退職時の資産額は約2倍近く変わります（複利の力）。\n関連ツール 複利計算機 — 投資の成長をシミュレーション 予算プランナー — 毎月の積立余力を確認 純資産計算機 — 資産と負債の全体像を把握 資産管理を効率化 → freee会計で家計を自動管理 ","permalink":"https://productivity-works.com/ja/tools/retirement-calculator/","summary":"\u003cp\u003e\u003cem\u003e本ページにはアフィリエイトリンクが含まれます。\u003c/em\u003e\u003c/p\u003e\n\u003ch1 id=\"老後資産計算機\"\u003e老後資産計算機\u003c/h1\u003e\n\u003cp\u003e現在の年齢・毎月の積立額・期待利回りを入力して、退職時の\u003cstrong\u003e老後資産\u003c/strong\u003eを見積もりましょう。\u003c/p\u003e\n\u003cdiv id=\"retire-calc\" style=\"max-width:640px;margin:0 auto;padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e現在の年齢\u003c/label\u003e\n\u003cinput type=\"range\" id=\"age\" min=\"18\" max=\"60\" step=\"1\" value=\"30\" oninput=\"calcRetire()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e18歳\u003c/span\u003e\u003cspan id=\"ageVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e30\u003c/span\u003e\u003cspan\u003e60歳\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e毎月の積立額（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"contrib\" min=\"5000\" max=\"100000\" step=\"1000\" value=\"30000\" oninput=\"calcRetire()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e5,000円\u003c/span\u003e\u003cspan id=\"contribVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e30,000円\u003c/span\u003e\u003cspan\u003e100,000円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e雇用主マッチング率（%）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"match\" min=\"0\" max=\"100\" step=\"10\" value=\"0\" oninput=\"calcRetire()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0%\u003c/span\u003e\u003cspan id=\"matchVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e0%\u003c/span\u003e\u003cspan\u003e100%\u003c/span\u003e\u003c/div\u003e\n\u003cdiv style=\"font-size:12px;color:#94a3b8;margin-top:2px;\"\u003e企業型DCなどで会社が上乗せしてくれる割合\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e年間期待利回り（%）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"rate\" min=\"1\" max=\"10\" step=\"0.5\" value=\"5\" oninput=\"calcRetire()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1%\u003c/span\u003e\u003cspan id=\"rateVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e5.0%\u003c/span\u003e\u003cspan\u003e10%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:24px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e退職年齢\u003c/label\u003e\n\u003cinput type=\"range\" id=\"retireAge\" min=\"55\" max=\"70\" step=\"1\" value=\"65\" oninput=\"calcRetire()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e55歳\u003c/span\u003e\u003cspan id=\"retireAgeVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e65\u003c/span\u003e\u003cspan\u003e70歳\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#1e40af;color:white;border-radius:8px;padding:20px;text-align:center;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:14px;margin-bottom:4px;\"\u003e退職時の想定資産額\u003c/div\u003e\n\u003cdiv id=\"totalSavings\" style=\"font-size:36px;font-weight:bold;\"\u003e¥0\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;margin-top:4px;\"\u003e退職まであと \u003cspan id=\"yearsLeft\" style=\"font-weight:bold;\"\u003e35\u003c/span\u003e 年\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:12px;\"\u003e\n\u003cdiv style=\"background:#e0f2fe;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e自分の積立額\u003c/div\u003e\n\u003cdiv id=\"yourContrib\" style=\"font-size:16px;font-weight:bold;color:#0369a1;\"\u003e¥0\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f3e8ff;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e会社マッチング\u003c/div\u003e\n\u003cdiv id=\"employerContrib\" style=\"font-size:16px;font-weight:bold;color:#7c3aed;\"\u003e¥0\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#dcfce7;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e運用益\u003c/div\u003e\n\u003cdiv id=\"growthAmt\" style=\"font-size:16px;font-weight:bold;color:#15803d;\"\u003e¥0\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#fef9c3;border-radius:8px;padding:16px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:13px;color:#a16207;margin-bottom:4px;\"\u003e\u003cstrong\u003e退職後の月間引出額（4%ルール）：\u003c/strong\u003e\u003c/div\u003e\n\u003cdiv id=\"monthlyIncome\" style=\"font-size:22px;font-weight:bold;color:#a16207;text-align:center;\"\u003e¥0/月\u003c/div\u003e\n\u003cdiv style=\"font-size:12px;color:#a16207;text-align:center;margin-top:4px;\"\u003e資産の4%を毎年取り崩す場合の目安\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f1f5f9;border-radius:8px;padding:12px;font-size:13px;color:#475569;\"\u003e\n\u003cstrong\u003e前提条件：\u003c/strong\u003e 毎月積立・複利計算（月次）。4%ルールは持続可能な年間取崩率の目安。実際の運用成績は異なります。インフレや税金は考慮していません。\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction calcRetire(){\n  var age=parseInt(document.getElementById('age').value);\n  var contrib=parseInt(document.getElementById('contrib').value);\n  var matchPct=parseInt(document.getElementById('match').value)/100;\n  var r=parseFloat(document.getElementById('rate').value)/100;\n  var retireAge=parseInt(document.getElementById('retireAge').value);\n\n  if(retireAge\u003c=age) retireAge=age+1;\n\n  var years=retireAge-age;\n  var mr=r/12;\n  var n=years*12;\n  var totalMonthly=contrib+contrib*matchPct;\n  var fv=totalMonthly*((Math.pow(1+mr,n)-1)/mr);\n  var yourTotal=contrib*n;\n  var employerTotal=Math.floor(contrib*matchPct)*n;\n  var growth=fv-yourTotal-employerTotal;\n  var monthlyIncome=Math.floor(fv*0.04/12);\n\n  document.getElementById('ageVal').textContent=age;\n  document.getElementById('contribVal').textContent=contrib.toLocaleString('ja-JP')+'\\u5186';\n  document.getElementById('matchVal').textContent=Math.round(matchPct*100)+'%';\n  document.getElementById('rateVal').textContent=(r*100).toFixed(1)+'%';\n  document.getElementById('retireAgeVal').textContent=retireAge;\n  document.getElementById('totalSavings').textContent='\\u00a5'+Math.floor(fv).toLocaleString('ja-JP');\n  document.getElementById('yearsLeft').textContent=years;\n  document.getElementById('yourContrib').textContent='\\u00a5'+yourTotal.toLocaleString('ja-JP');\n  document.getElementById('employerContrib').textContent='\\u00a5'+employerTotal.toLocaleString('ja-JP');\n  document.getElementById('growthAmt').textContent='\\u00a5'+Math.floor(growth).toLocaleString('ja-JP');\n  document.getElementById('monthlyIncome').textContent='\\u00a5'+monthlyIncome.toLocaleString('ja-JP')+'/\\u6708';\n}\ncalcRetire();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"老後資産を最大化するには\"\u003e老後資産を最大化するには\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e会社マッチングをフル活用\u003c/strong\u003e — 企業型DCがある場合、マッチング上限まで積み立てないと「もらえるお金を捨てている」のと同じです\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e非課税枠を使い切る\u003c/strong\u003e — 2026年のNISA年間投資枠：つみたて投資枠120万円、成長投資枠240万円\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e低コストインデックスファンドを選ぶ\u003c/strong\u003e — 信託報酬の差は複利で何百万円もの違いになります\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e毎年積立額を増やす\u003c/strong\u003e — 昇給のたびに積立額を1〜2%引き上げると、苦痛なく資産を積み上げられます\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"ideconisa企業型dcの比較\"\u003eiDeCo・NISA・企業型DCの比較\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e項目\u003c/th\u003e\n          \u003cth\u003eiDeCo\u003c/th\u003e\n          \u003cth\u003eつみたてNISA枠\u003c/th\u003e\n          \u003cth\u003e成長投資枠\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e年間上限\u003c/td\u003e\n          \u003ctd\u003e〜81.6万円（属性による）\u003c/td\u003e\n          \u003ctd\u003e120万円\u003c/td\u003e\n          \u003ctd\u003e240万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e掛金の税優遇\u003c/td\u003e\n          \u003ctd\u003e全額所得控除\u003c/td\u003e\n          \u003ctd\u003eなし（税引後）\u003c/td\u003e\n          \u003ctd\u003eなし（税引後）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e運用益・引出\u003c/td\u003e\n          \u003ctd\u003e引出時課税\u003c/td\u003e\n          \u003ctd\u003e非課税\u003c/td\u003e\n          \u003ctd\u003e非課税\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e受取開始\u003c/td\u003e\n          \u003ctd\u003e60〜75歳\u003c/td\u003e\n          \u003ctd\u003eいつでも\u003c/td\u003e\n          \u003ctd\u003eいつでも\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e向いている人\u003c/td\u003e\n          \u003ctd\u003e節税重視・長期\u003c/td\u003e\n          \u003ctd\u003e積立投資初心者\u003c/td\u003e\n          \u003ctd\u003e個別株・ETF投資\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"よくある質問\"\u003eよくある質問\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eQ: 4%ルールとは何ですか？\u003c/strong\u003e\n退職1年目に資産の4%を引き出し、以降はインフレに合わせて調整する戦略です。研究では30年間の退職生活を支えられるとされています。\u003c/p\u003e","title":"老後資産計算機 | iDeCo・NISA積立シミュレーター（無料）"},{"content":" CSSボックスシャドウ ジェネレーター リアルタイム プレビュー \u0026lt;!-- プリセット --\u0026gt; \u0026lt;div class=\u0026quot;sa-presets\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sa-preview-label\u0026quot;\u0026gt;プリセット\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sa-preset-grid\u0026quot; id=\u0026quot;sa-preset-grid\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; + シャドウ レイヤーを追加 生成された CSS CSSをコピー Tailwind の対応クラス: — 関連ツール CSSグラデーションも作成 → CSSグラデーション ジェネレーター カラーパレットを生成 → カラーパレット ジェネレーター メタタグを作成 → メタタグ ジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/box-shadow-generator/","summary":"\u003cdiv id=\"shadow-app\"\u003e\n\u003cstyle\u003e\n#shadow-app *,\n#shadow-app *::before,\n#shadow-app *::after {\n  box-sizing: border-box;\n}\n\n#shadow-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n  color: #f3f4f6;\n  background: #374151;\n  border-radius: 12px;\n  padding: 24px;\n  max-width: 900px;\n  margin: 0 auto;\n}\n\n#shadow-app h2 {\n  margin: 0 0 20px;\n  font-size: 1.25rem;\n  font-weight: 600;\n  color: #f9fafb;\n  border-bottom: 1px solid #4b5563;\n  padding-bottom: 10px;\n}\n\n#shadow-app .sa-layout {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 24px;\n}\n\n@media (max-width: 680px) {\n  #shadow-app .sa-layout {\n    grid-template-columns: 1fr;\n  }\n}\n\n/* Preview */\n#shadow-app .sa-preview-area {\n  background: #4b5563;\n  border-radius: 10px;\n  padding: 20px;\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n}\n\n#shadow-app .sa-preview-label {\n  font-size: 0.75rem;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #9ca3af;\n}\n\n#shadow-app .sa-preview-box-wrap {\n  flex: 1;\n  min-height: 180px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: #374151;\n  border-radius: 8px;\n  padding: 24px;\n}\n\n#shadow-app .sa-preview-box {\n  width: 120px;\n  height: 120px;\n  background: #ffffff;\n  border-radius: 8px;\n  transition: box-shadow 0.2s ease;\n}\n\n/* Controls panel */\n#shadow-app .sa-controls {\n  display: flex;\n  flex-direction: column;\n  gap: 0;\n}\n\n/* Presets */\n#shadow-app .sa-presets {\n  background: #4b5563;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 16px;\n}\n\n#shadow-app .sa-preset-grid {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n  margin-top: 8px;\n}\n\n#shadow-app .sa-preset-btn {\n  background: #374151;\n  border: 1px solid #6b7280;\n  color: #d1d5db;\n  padding: 5px 10px;\n  border-radius: 6px;\n  font-size: 0.75rem;\n  cursor: pointer;\n  transition: background 0.15s, border-color 0.15s, color 0.15s;\n}\n\n#shadow-app .sa-preset-btn:hover,\n#shadow-app .sa-preset-btn.sa-active {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n\n/* Shadow list */\n#shadow-app .sa-shadow-list {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  margin-bottom: 12px;\n}\n\n#shadow-app .sa-shadow-item {\n  background: #4b5563;\n  border-radius: 10px;\n  padding: 14px;\n  position: relative;\n}\n\n#shadow-app .sa-shadow-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 12px;\n}\n\n#shadow-app .sa-shadow-title {\n  font-size: 0.8rem;\n  font-weight: 600;\n  color: #e5e7eb;\n}\n\n#shadow-app .sa-shadow-actions {\n  display: flex;\n  gap: 6px;\n  align-items: center;\n}\n\n#shadow-app .sa-toggle-btn {\n  background: none;\n  border: 1px solid #6b7280;\n  color: #9ca3af;\n  padding: 3px 8px;\n  border-radius: 5px;\n  font-size: 0.7rem;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n\n#shadow-app .sa-toggle-btn.sa-active {\n  background: #818cf8;\n  border-color: #818cf8;\n  color: #fff;\n}\n\n#shadow-app .sa-remove-btn {\n  background: none;\n  border: 1px solid #6b7280;\n  color: #9ca3af;\n  width: 22px;\n  height: 22px;\n  border-radius: 5px;\n  font-size: 0.85rem;\n  line-height: 1;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: all 0.15s;\n}\n\n#shadow-app .sa-remove-btn:hover {\n  background: #ef4444;\n  border-color: #ef4444;\n  color: #fff;\n}\n\n/* Sliders */\n#shadow-app .sa-field {\n  display: grid;\n  grid-template-columns: 90px 1fr 44px;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 8px;\n}\n\n#shadow-app .sa-field:last-child {\n  margin-bottom: 0;\n}\n\n#shadow-app .sa-field label {\n  font-size: 0.72rem;\n  color: #9ca3af;\n  white-space: nowrap;\n}\n\n#shadow-app .sa-field input[type=\"range\"] {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 100%;\n  height: 4px;\n  border-radius: 2px;\n  background: #6b7280;\n  outline: none;\n  cursor: pointer;\n}\n\n#shadow-app .sa-field input[type=\"range\"]::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 14px;\n  height: 14px;\n  border-radius: 50%;\n  background: #6366f1;\n  cursor: pointer;\n}\n\n#shadow-app .sa-field input[type=\"range\"]::-moz-range-thumb {\n  width: 14px;\n  height: 14px;\n  border-radius: 50%;\n  background: #6366f1;\n  cursor: pointer;\n  border: none;\n}\n\n#shadow-app .sa-field .sa-val {\n  font-size: 0.72rem;\n  color: #d1d5db;\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n  min-width: 40px;\n}\n\n/* Color row */\n#shadow-app .sa-color-row {\n  display: grid;\n  grid-template-columns: 90px 28px 1fr 44px;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 8px;\n}\n\n#shadow-app .sa-color-row label {\n  font-size: 0.72rem;\n  color: #9ca3af;\n}\n\n#shadow-app .sa-color-row input[type=\"color\"] {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 28px;\n  height: 22px;\n  border: none;\n  background: none;\n  padding: 0;\n  cursor: pointer;\n  border-radius: 4px;\n}\n\n#shadow-app .sa-color-row input[type=\"range\"] {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 100%;\n  height: 4px;\n  border-radius: 2px;\n  background: #6b7280;\n  outline: none;\n  cursor: pointer;\n}\n\n#shadow-app .sa-color-row input[type=\"range\"]::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 14px;\n  height: 14px;\n  border-radius: 50%;\n  background: #6366f1;\n  cursor: pointer;\n}\n\n#shadow-app .sa-color-row input[type=\"range\"]::-moz-range-thumb {\n  width: 14px;\n  height: 14px;\n  border-radius: 50%;\n  background: #6366f1;\n  cursor: pointer;\n  border: none;\n}\n\n#shadow-app .sa-color-row .sa-val {\n  font-size: 0.72rem;\n  color: #d1d5db;\n  text-align: right;\n  font-variant-numeric: tabular-nums;\n}\n\n/* Add shadow button */\n#shadow-app .sa-add-btn {\n  width: 100%;\n  background: #374151;\n  border: 1px dashed #6b7280;\n  color: #9ca3af;\n  padding: 8px;\n  border-radius: 8px;\n  font-size: 0.8rem;\n  cursor: pointer;\n  transition: all 0.15s;\n  margin-bottom: 16px;\n}\n\n#shadow-app .sa-add-btn:hover {\n  border-color: #6366f1;\n  color: #a5b4fc;\n}\n\n#shadow-app .sa-add-btn:disabled {\n  opacity: 0.4;\n  cursor: not-allowed;\n}\n\n/* Output */\n#shadow-app .sa-output {\n  background: #4b5563;\n  border-radius: 10px;\n  padding: 16px;\n  grid-column: 1 / -1;\n}\n\n#shadow-app .sa-output-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 10px;\n}\n\n#shadow-app .sa-copy-btn {\n  background: #6366f1;\n  border: none;\n  color: #fff;\n  padding: 5px 14px;\n  border-radius: 6px;\n  font-size: 0.78rem;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n\n#shadow-app .sa-copy-btn:hover {\n  background: #4f46e5;\n}\n\n#shadow-app .sa-copy-btn.sa-copied {\n  background: #10b981;\n}\n\n#shadow-app code.sa-code-block {\n  display: block;\n  background: #1f2937;\n  border-radius: 6px;\n  padding: 12px 14px;\n  font-family: \"Fira Code\", \"Cascadia Code\", Consolas, monospace;\n  font-size: 0.82rem;\n  color: #86efac;\n  white-space: pre-wrap;\n  word-break: break-all;\n  margin-bottom: 10px;\n  border: 1px solid #374151;\n}\n\n#shadow-app .sa-tailwind-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex-wrap: wrap;\n  margin-top: 6px;\n}\n\n#shadow-app .sa-tw-label {\n  font-size: 0.72rem;\n  color: #9ca3af;\n  white-space: nowrap;\n}\n\n#shadow-app code.sa-tw-code {\n  background: #1f2937;\n  border: 1px solid #374151;\n  border-radius: 5px;\n  padding: 3px 8px;\n  font-family: \"Fira Code\", Consolas, monospace;\n  font-size: 0.78rem;\n  color: #7dd3fc;\n}\n\u003c/style\u003e\n\u003ch2\u003eCSSボックスシャドウ ジェネレーター\u003c/h2\u003e\n\u003cdiv class=\"sa-layout\"\u003e\n  \u003c!-- 左: プレビュー + プリセット --\u003e\n  \u003cdiv\u003e\n    \u003c!-- プレビュー --\u003e\n    \u003cdiv class=\"sa-preview-area\" style=\"margin-bottom:16px;\"\u003e\n      \u003cdiv class=\"sa-preview-label\"\u003eリアルタイム プレビュー\u003c/div\u003e\n      \u003cdiv class=\"sa-preview-box-wrap\"\u003e\n        \u003cdiv class=\"sa-preview-box\" id=\"sa-preview-box\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;!-- プリセット --\u0026gt;\n\u0026lt;div class=\u0026quot;sa-presets\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;sa-preview-label\u0026quot;\u0026gt;プリセット\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;sa-preset-grid\u0026quot; id=\u0026quot;sa-preset-grid\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- 右: シャドウ コントロール --\u003e\n  \u003cdiv class=\"sa-controls\"\u003e\n    \u003cdiv class=\"sa-shadow-list\" id=\"sa-shadow-list\"\u003e\u003c/div\u003e\n    \u003cbutton class=\"sa-add-btn\" id=\"sa-add-btn\"\u003e+ シャドウ レイヤーを追加\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- 出力 --\u003e\n  \u003cdiv class=\"sa-output\"\u003e\n    \u003cdiv class=\"sa-output-header\"\u003e\n      \u003cdiv class=\"sa-preview-label\"\u003e生成された CSS\u003c/div\u003e\n      \u003cbutton class=\"sa-copy-btn\" id=\"sa-copy-btn\"\u003eCSSをコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003ccode class=\"sa-code-block\" id=\"sa-css-output\"\u003e\u003c/code\u003e\n    \u003cdiv class=\"sa-tailwind-row\"\u003e\n      \u003cspan class=\"sa-tw-label\"\u003eTailwind の対応クラス:\u003c/span\u003e\n      \u003ccode class=\"sa-tw-code\" id=\"sa-tw-output\"\u003e—\u003c/code\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  \"use strict\";\n\n  /* ── プリセット ───────────────────────────────────────────── */\n  const PRESETS = [\n    {\n      name: \"控えめ\",\n      shadows: [{ x: 0, y: 1, blur: 3, spread: 0, color: \"#000000\", opacity: 0.12, inset: false }],\n    },\n    {\n      name: \"標準\",\n      shadows: [{ x: 0, y: 4, blur: 12, spread: 0, color: \"#000000\", opacity: 0.18, inset: false }],\n    },\n    {\n      name: \"大きめ\",\n      shadows: [{ x: 0, y: 10, blur: 30, spread: -5, color: \"#000000\", opacity: 0.25, inset: false }],\n    },\n    {\n      name: \"シャープ\",\n      shadows: [{ x: 4, y: 4, blur: 0, spread: 0, color: \"#000000\", opacity: 0.35, inset: false }],\n    },\n    {\n      name: \"ソフト\",\n      shadows: [\n        { x: 0, y: 2, blur: 8, spread: 0, color: \"#000000\", opacity: 0.08, inset: false },\n        { x: 0, y: 8, blur: 24, spread: 0, color: \"#000000\", opacity: 0.12, inset: false },\n      ],\n    },\n    {\n      name: \"ネオン\",\n      shadows: [{ x: 0, y: 0, blur: 20, spread: 4, color: \"#6366f1\", opacity: 0.85, inset: false }],\n    },\n    {\n      name: \"内側\",\n      shadows: [{ x: 0, y: 2, blur: 8, spread: 0, color: \"#000000\", opacity: 0.25, inset: true }],\n    },\n    {\n      name: \"浮遊\",\n      shadows: [\n        { x: 0, y: 1, blur: 2, spread: 0, color: \"#000000\", opacity: 0.06, inset: false },\n        { x: 0, y: 4, blur: 6, spread: -1, color: \"#000000\", opacity: 0.1, inset: false },\n        { x: 0, y: 20, blur: 40, spread: -8, color: \"#000000\", opacity: 0.18, inset: false },\n      ],\n    },\n    {\n      name: \"ブルータル\",\n      shadows: [{ x: 6, y: 6, blur: 0, spread: 0, color: \"#111827\", opacity: 1, inset: false }],\n    },\n  ];\n\n  /* ── Tailwind マップ ───────────────────────────────────────── */\n  const TW_MAP = [\n    { cls: \"shadow-sm\",  css: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\" },\n    { cls: \"shadow\",     css: \"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)\" },\n    { cls: \"shadow-md\",  css: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\" },\n    { cls: \"shadow-lg\",  css: \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\" },\n    { cls: \"shadow-xl\",  css: \"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\" },\n    { cls: \"shadow-2xl\", css: \"0 25px 50px -12px rgb(0 0 0 / 0.25)\" },\n    { cls: \"shadow-inner\", css: \"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)\" },\n    { cls: \"shadow-none\", css: \"0 0 #0000\" },\n  ];\n\n  /* ── 状態 ─────────────────────────────────────────────────── */\n  let shadows = [\n    { x: 0, y: 4, blur: 12, spread: 0, color: \"#000000\", opacity: 0.18, inset: false },\n  ];\n\n  /* ── ヘルパー ─────────────────────────────────────────────── */\n  function hexToRgb(hex) {\n    const r = parseInt(hex.slice(1, 3), 16);\n    const g = parseInt(hex.slice(3, 5), 16);\n    const b = parseInt(hex.slice(5, 7), 16);\n    return { r, g, b };\n  }\n\n  function shadowToCSS(s) {\n    const { r, g, b } = hexToRgb(s.color);\n    const alpha = Math.round(s.opacity * 100) / 100;\n    return `${s.inset ? \"inset \" : \"\"}${s.x}px ${s.y}px ${s.blur}px ${s.spread}px rgba(${r}, ${g}, ${b}, ${alpha})`;\n  }\n\n  function buildFullCSS() {\n    const val = shadows.map(shadowToCSS).join(\",\\n             \");\n    return `box-shadow: ${val};`;\n  }\n\n  function guessTailwind() {\n    if (shadows.length !== 1) return null;\n    const s = shadows[0];\n    if (s.inset \u0026\u0026 Math.abs(s.x) \u003c= 1 \u0026\u0026 Math.abs(s.y) \u003c= 3 \u0026\u0026 s.blur \u003c= 6) return \"shadow-inner\";\n    if (!s.inset) {\n      if (s.blur === 0 \u0026\u0026 s.spread === 0 \u0026\u0026 s.opacity === 0) return \"shadow-none\";\n      if (s.blur \u003c= 3 \u0026\u0026 Math.abs(s.y) \u003c= 2) return \"shadow-sm\";\n      if (s.blur \u003c= 6 \u0026\u0026 Math.abs(s.y) \u003c= 4) return \"shadow\";\n      if (s.blur \u003c= 10 \u0026\u0026 Math.abs(s.y) \u003c= 6) return \"shadow-md\";\n      if (s.blur \u003c= 18 \u0026\u0026 Math.abs(s.y) \u003c= 12) return \"shadow-lg\";\n      if (s.blur \u003c= 28 \u0026\u0026 Math.abs(s.y) \u003c= 22) return \"shadow-xl\";\n      if (s.blur \u003c= 55 \u0026\u0026 Math.abs(s.y) \u003c= 28) return \"shadow-2xl\";\n    }\n    return null;\n  }\n\n  /* ── レンダリング ─────────────────────────────────────────── */\n  function render() {\n    const preview = document.getElementById(\"sa-preview-box\");\n    const cssOut = document.getElementById(\"sa-css-output\");\n    const twOut = document.getElementById(\"sa-tw-output\");\n\n    const shadowCSS = shadows.map(shadowToCSS).join(\", \");\n    preview.style.boxShadow = shadowCSS;\n\n    cssOut.textContent = buildFullCSS();\n\n    const tw = guessTailwind();\n    twOut.textContent = tw ? tw : \"直接対応するTailwindクラスなし（任意値を使用してください）\";\n\n    renderShadowList();\n    updateAddBtn();\n  }\n\n  function updateAddBtn() {\n    const btn = document.getElementById(\"sa-add-btn\");\n    btn.disabled = shadows.length \u003e= 4;\n  }\n\n  function renderShadowList() {\n    const list = document.getElementById(\"sa-shadow-list\");\n    list.innerHTML = \"\";\n\n    shadows.forEach((s, i) =\u003e {\n      const item = document.createElement(\"div\");\n      item.className = \"sa-shadow-item\";\n\n      item.innerHTML = `\n        \u003cdiv class=\"sa-shadow-header\"\u003e\n          \u003cspan class=\"sa-shadow-title\"\u003eシャドウ ${i + 1}\u003c/span\u003e\n          \u003cdiv class=\"sa-shadow-actions\"\u003e\n            \u003cbutton class=\"sa-toggle-btn${s.inset ? \" sa-active\" : \"\"}\" data-i=\"${i}\" data-action=\"inset\"\u003e内側\u003c/button\u003e\n            ${shadows.length \u003e 1 ? `\u003cbutton class=\"sa-remove-btn\" data-i=\"${i}\" data-action=\"remove\" title=\"削除\"\u003e×\u003c/button\u003e` : \"\"}\n          \u003c/div\u003e\n        \u003c/div\u003e\n\n        \u003cdiv class=\"sa-field\"\u003e\n          \u003clabel\u003e水平方向\u003c/label\u003e\n          \u003cinput type=\"range\" min=\"-60\" max=\"60\" value=\"${s.x}\" data-i=\"${i}\" data-prop=\"x\"\u003e\n          \u003cspan class=\"sa-val\"\u003e${s.x}px\u003c/span\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"sa-field\"\u003e\n          \u003clabel\u003e垂直方向\u003c/label\u003e\n          \u003cinput type=\"range\" min=\"-60\" max=\"60\" value=\"${s.y}\" data-i=\"${i}\" data-prop=\"y\"\u003e\n          \u003cspan class=\"sa-val\"\u003e${s.y}px\u003c/span\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"sa-field\"\u003e\n          \u003clabel\u003eぼかし\u003c/label\u003e\n          \u003cinput type=\"range\" min=\"0\" max=\"100\" value=\"${s.blur}\" data-i=\"${i}\" data-prop=\"blur\"\u003e\n          \u003cspan class=\"sa-val\"\u003e${s.blur}px\u003c/span\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"sa-field\"\u003e\n          \u003clabel\u003e広がり\u003c/label\u003e\n          \u003cinput type=\"range\" min=\"-30\" max=\"30\" value=\"${s.spread}\" data-i=\"${i}\" data-prop=\"spread\"\u003e\n          \u003cspan class=\"sa-val\"\u003e${s.spread}px\u003c/span\u003e\n        \u003c/div\u003e\n\n        \u003cdiv class=\"sa-color-row\"\u003e\n          \u003clabel\u003e色 / 透明度\u003c/label\u003e\n          \u003cinput type=\"color\" value=\"${s.color}\" data-i=\"${i}\" data-prop=\"color\"\u003e\n          \u003cinput type=\"range\" min=\"0\" max=\"1\" step=\"0.01\" value=\"${s.opacity}\" data-i=\"${i}\" data-prop=\"opacity\"\u003e\n          \u003cspan class=\"sa-val\"\u003e${Math.round(s.opacity * 100)}%\u003c/span\u003e\n        \u003c/div\u003e\n      `;\n\n      /* イベント */\n      item.querySelectorAll(\"input[type='range'][data-prop]\").forEach((el) =\u003e {\n        el.addEventListener(\"input\", (e) =\u003e {\n          const idx = +e.target.dataset.i;\n          const prop = e.target.dataset.prop;\n          shadows[idx][prop] = parseFloat(e.target.value);\n          render();\n        });\n      });\n\n      item.querySelectorAll(\"input[type='color']\").forEach((el) =\u003e {\n        el.addEventListener(\"input\", (e) =\u003e {\n          shadows[+e.target.dataset.i].color = e.target.value;\n          render();\n        });\n      });\n\n      item.querySelectorAll(\"button[data-action]\").forEach((el) =\u003e {\n        el.addEventListener(\"click\", (e) =\u003e {\n          const idx = +e.target.dataset.i;\n          const action = e.target.dataset.action;\n          if (action === \"inset\") {\n            shadows[idx].inset = !shadows[idx].inset;\n            render();\n          } else if (action === \"remove\") {\n            shadows.splice(idx, 1);\n            render();\n          }\n        });\n      });\n\n      list.appendChild(item);\n    });\n  }\n\n  /* ── プリセット ───────────────────────────────────────────── */\n  function renderPresets() {\n    const grid = document.getElementById(\"sa-preset-grid\");\n    PRESETS.forEach((p) =\u003e {\n      const btn = document.createElement(\"button\");\n      btn.className = \"sa-preset-btn\";\n      btn.textContent = p.name;\n      btn.addEventListener(\"click\", () =\u003e {\n        shadows = p.shadows.map((s) =\u003e ({ ...s }));\n        document.querySelectorAll(\"#sa-preset-grid .sa-preset-btn\").forEach((b) =\u003e\n          b.classList.remove(\"sa-active\")\n        );\n        btn.classList.add(\"sa-active\");\n        render();\n      });\n      grid.appendChild(btn);\n    });\n  }\n\n  /* ── シャドウ追加 ─────────────────────────────────────────── */\n  document.getElementById(\"sa-add-btn\").addEventListener(\"click\", () =\u003e {\n    if (shadows.length \u003c 4) {\n      shadows.push({ x: 0, y: 4, blur: 12, spread: 0, color: \"#000000\", opacity: 0.15, inset: false });\n      render();\n    }\n  });\n\n  /* ── CSSコピー ────────────────────────────────────────────── */\n  document.getElementById(\"sa-copy-btn\").addEventListener(\"click\", () =\u003e {\n    const css = buildFullCSS();\n    navigator.clipboard.writeText(css).then(() =\u003e {\n      const btn = document.getElementById(\"sa-copy-btn\");\n      btn.textContent = \"コピーしました！\";\n      btn.classList.add(\"sa-copied\");\n      setTimeout(() =\u003e {\n        btn.textContent = \"CSSをコピー\";\n        btn.classList.remove(\"sa-copied\");\n      }, 1800);\n    });\n  });\n\n  /* ── 初期化 ───────────────────────────────────────────────── */\n  renderPresets();\n  render();\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch3 id=\"関連ツール\"\u003e関連ツール\u003c/h3\u003e\n\u003cblockquote\u003e\n\u003cp\u003eCSSグラデーションも作成 → \u003ca href=\"https://productivity-works.com/ja/tools/css-gradient-generator/\"\u003eCSSグラデーション ジェネレーター\u003c/a\u003e\n\u003c/p\u003e","title":"CSSボックスシャドウ ジェネレーター — 無料オンラインツール"},{"content":" テキストを入力 文字数: 0 単語数: 0 行数: 0 英数字ケース変換 日本語変換 関連ツール 余分なスペースや空白行を除去 → ホワイトスペース除去ツール HTMLの特殊文字をエンティティに変換 → HTMLエンティティエンコーダー JSONを整形・バリデーション → JSONフォーマッター 文書管理の効率化にはfreee freeeを無料で試す\n","permalink":"https://productivity-works.com/ja/tools/case-converter/","summary":"\u003cdiv id=\"case-app\"\u003e\n\u003cstyle\u003e\n#case-app {\n  font-family: 'Segoe UI', 'Noto Sans JP', system-ui, -apple-system, sans-serif;\n  background: #0f0f13;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin: 0 auto;\n  max-width: 900px;\n  box-sizing: border-box;\n}\n\n#case-app * {\n  box-sizing: border-box;\n}\n\n#case-app h2 {\n  font-size: 1.05rem;\n  font-weight: 600;\n  color: #f1f5f9;\n  margin: 0 0 12px 0;\n  letter-spacing: 0.02em;\n}\n\n.case-section-title {\n  font-size: 0.72rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.1em;\n  color: #64748b;\n  margin: 20px 0 8px 0;\n  padding-bottom: 4px;\n  border-bottom: 1px solid #1e1e2e;\n}\n\n.case-input-section {\n  margin-bottom: 20px;\n}\n\n#case-input {\n  width: 100%;\n  min-height: 110px;\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  color: #e2e8f0;\n  font-size: 0.97rem;\n  padding: 12px 14px;\n  resize: vertical;\n  font-family: inherit;\n  transition: border-color 0.2s;\n  outline: none;\n}\n\n#case-input:focus {\n  border-color: #e11d48;\n}\n\n.case-stats {\n  display: flex;\n  gap: 20px;\n  margin-top: 8px;\n  font-size: 0.82rem;\n  color: #94a3b8;\n  flex-wrap: wrap;\n}\n\n.case-stats span {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n}\n\n.case-stats .stat-val {\n  color: #e11d48;\n  font-weight: 600;\n}\n\n.case-results {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 10px;\n}\n\n@media (max-width: 600px) {\n  .case-results {\n    grid-template-columns: 1fr;\n  }\n}\n\n.case-card {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 12px 14px;\n  transition: border-color 0.2s;\n}\n\n.case-card:hover {\n  border-color: #e11d48;\n}\n\n.case-card-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 8px;\n}\n\n.case-label {\n  font-size: 0.75rem;\n  font-weight: 700;\n  letter-spacing: 0.05em;\n  color: #e11d48;\n}\n\n.case-copy-btn {\n  background: none;\n  border: 1px solid #2d2d3d;\n  border-radius: 5px;\n  color: #94a3b8;\n  font-size: 0.75rem;\n  padding: 2px 10px;\n  cursor: pointer;\n  transition: all 0.18s;\n  font-family: inherit;\n}\n\n.case-copy-btn:hover {\n  background: #e11d48;\n  border-color: #e11d48;\n  color: #fff;\n}\n\n.case-copy-btn.copied {\n  background: #16a34a;\n  border-color: #16a34a;\n  color: #fff;\n}\n\n.case-output {\n  font-size: 0.9rem;\n  color: #cbd5e1;\n  word-break: break-all;\n  min-height: 1.4em;\n  font-family: 'Fira Mono', 'Consolas', monospace;\n  line-height: 1.5;\n}\n\n.case-placeholder {\n  color: #4a5568;\n  font-style: italic;\n  font-family: inherit;\n}\n\u003c/style\u003e\n\u003cdiv class=\"case-input-section\"\u003e\n  \u003ch2\u003eテキストを入力\u003c/h2\u003e\n  \u003ctextarea id=\"case-input\" placeholder=\"ここにテキストを入力または貼り付けてください...\" oninput=\"caseConvertAll()\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"case-stats\"\u003e\n    \u003cspan\u003e文字数: \u003cspan class=\"stat-val\" id=\"char-count\"\u003e0\u003c/span\u003e\u003c/span\u003e\n    \u003cspan\u003e単語数: \u003cspan class=\"stat-val\" id=\"word-count\"\u003e0\u003c/span\u003e\u003c/span\u003e\n    \u003cspan\u003e行数: \u003cspan class=\"stat-val\" id=\"line-count\"\u003e0\u003c/span\u003e\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"case-section-title\"\u003e英数字ケース変換\u003c/div\u003e\n\u003cdiv class=\"case-results\" id=\"case-results-en\"\u003e\u003c/div\u003e\n\u003cdiv class=\"case-section-title\"\u003e日本語変換\u003c/div\u003e\n\u003cdiv class=\"case-results\" id=\"case-results-ja\"\u003e\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  const CASES_EN = [\n    { id: 'upper',    label: 'UPPERCASE（大文字）',     fn: s =\u003e s.toUpperCase() },\n    { id: 'lower',    label: 'lowercase（小文字）',     fn: s =\u003e s.toLowerCase() },\n    { id: 'title',    label: 'Title Case',              fn: titleCase },\n    { id: 'sentence', label: 'Sentence case',           fn: sentenceCase },\n    { id: 'camel',    label: 'camelCase',               fn: camelCase },\n    { id: 'pascal',   label: 'PascalCase',              fn: pascalCase },\n    { id: 'snake',    label: 'snake_case',              fn: snakeCase },\n    { id: 'kebab',    label: 'kebab-case',              fn: kebabCase },\n    { id: 'constant', label: 'CONSTANT_CASE',           fn: constantCase },\n    { id: 'dot',      label: 'dot.case',                fn: dotCase },\n    { id: 'alt',      label: 'aLtErNaTiNg（交互）',    fn: alternatingCase },\n    { id: 'inverse',  label: 'iNVERSE cASE（逆転）',   fn: inverseCase },\n  ];\n\n  const CASES_JA = [\n    { id: 'zen2han',  label: '全角 → 半角',             fn: zen2han },\n    { id: 'han2zen',  label: '半角 → 全角',             fn: han2zen },\n    { id: 'kata2hira',label: 'カタカナ → ひらがな',     fn: kata2hira },\n    { id: 'hira2kata',label: 'ひらがな → カタカナ',     fn: hira2kata },\n  ];\n\n  /* ── English case helpers ── */\n  function words(s) {\n    return s.trim().split(/[\\s\\-_\\.]+/).filter(Boolean);\n  }\n\n  function titleCase(s) {\n    return s.replace(/\\w\\S*/g, w =\u003e w.charAt(0).toUpperCase() + w.slice(1).toLowerCase());\n  }\n\n  function sentenceCase(s) {\n    return s.toLowerCase().replace(/(^\\s*\\w|[.!?]\\s+\\w)/g, c =\u003e c.toUpperCase());\n  }\n\n  function camelCase(s) {\n    const w = words(s);\n    if (!w.length) return '';\n    return w[0].toLowerCase() + w.slice(1).map(w =\u003e w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join('');\n  }\n\n  function pascalCase(s) {\n    return words(s).map(w =\u003e w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join('');\n  }\n\n  function snakeCase(s) {\n    return words(s).join('_').toLowerCase();\n  }\n\n  function kebabCase(s) {\n    return words(s).join('-').toLowerCase();\n  }\n\n  function constantCase(s) {\n    return words(s).join('_').toUpperCase();\n  }\n\n  function dotCase(s) {\n    return words(s).join('.').toLowerCase();\n  }\n\n  function alternatingCase(s) {\n    return s.split('').map((c, i) =\u003e i % 2 === 0 ? c.toLowerCase() : c.toUpperCase()).join('');\n  }\n\n  function inverseCase(s) {\n    return s.split('').map(c =\u003e c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase()).join('');\n  }\n\n  /* ── Japanese conversion helpers ── */\n  function zen2han(s) {\n    // Full-width alphanumeric + space → half-width\n    return s\n      .replace(/[\\uff01-\\uff5e]/g, c =\u003e String.fromCharCode(c.charCodeAt(0) - 0xfee0))\n      .replace(/\\u3000/g, ' ');\n  }\n\n  function han2zen(s) {\n    // Half-width alphanumeric + space → full-width\n    return s\n      .replace(/[\\x21-\\x7e]/g, c =\u003e String.fromCharCode(c.charCodeAt(0) + 0xfee0))\n      .replace(/ /g, '\\u3000');\n  }\n\n  function kata2hira(s) {\n    return s.replace(/[\\u30a1-\\u30f6]/g, c =\u003e String.fromCharCode(c.charCodeAt(0) - 0x60));\n  }\n\n  function hira2kata(s) {\n    return s.replace(/[\\u3041-\\u3096]/g, c =\u003e String.fromCharCode(c.charCodeAt(0) + 0x60));\n  }\n\n  /* ── Card builder ── */\n  function buildCards(container, cases) {\n    container.innerHTML = cases.map(c =\u003e `\n      \u003cdiv class=\"case-card\"\u003e\n        \u003cdiv class=\"case-card-header\"\u003e\n          \u003cspan class=\"case-label\"\u003e${c.label}\u003c/span\u003e\n          \u003cbutton class=\"case-copy-btn\" onclick=\"caseCopy('${c.id}', this)\"\u003eコピー\u003c/button\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"case-output case-placeholder\" id=\"out-${c.id}\"\u003e変換結果がここに表示されます\u003c/div\u003e\n      \u003c/div\u003e\n    `).join('');\n  }\n\n  window.caseConvertAll = function() {\n    const input = document.getElementById('case-input').value;\n\n    // Stats\n    document.getElementById('char-count').textContent = input.length;\n    document.getElementById('word-count').textContent = input.trim() ? input.trim().split(/\\s+/).length : 0;\n    document.getElementById('line-count').textContent = input ? input.split('\\n').length : 0;\n\n    const PLACEHOLDER = '変換結果がここに表示されます';\n\n    [...CASES_EN, ...CASES_JA].forEach(c =\u003e {\n      const el = document.getElementById('out-' + c.id);\n      if (!input.trim()) {\n        el.textContent = PLACEHOLDER;\n        el.classList.add('case-placeholder');\n      } else {\n        el.textContent = c.fn(input);\n        el.classList.remove('case-placeholder');\n      }\n    });\n  };\n\n  window.caseCopy = function(id, btn) {\n    const text = document.getElementById('out-' + id).textContent;\n    if (!text || text === '変換結果がここに表示されます') return;\n    const success = () =\u003e {\n      btn.textContent = 'コピー済み!';\n      btn.classList.add('copied');\n      setTimeout(() =\u003e { btn.textContent = 'コピー'; btn.classList.remove('copied'); }, 1800);\n    };\n    navigator.clipboard.writeText(text).then(success).catch(() =\u003e {\n      const ta = document.createElement('textarea');\n      ta.value = text;\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      success();\n    });\n  };\n\n  buildCards(document.getElementById('case-results-en'), CASES_EN);\n  buildCards(document.getElementById('case-results-ja'), CASES_JA);\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e余分なスペースや空白行を除去 → \u003ca href=\"https://productivity-works.com/ja/tools/whitespace-remover/\"\u003eホワイトスペース除去ツール\u003c/a\u003e\n\u003c/p\u003e","title":"文字変換ツール - 大文字・小文字・キャメルケース他 無料オンライン"},{"content":" 設定 ベースフォントサイズ (px) ビューポート幅 (px) ビューポート高さ (px) 親要素サイズ / コンテキスト (px) em・% の計算に使用されます 値 単位 px rem em vw vh % pt cm mm in カードをクリックするとCSS値がクリップボードにコピーされます。\n確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連ツール Box Shadow Generator → Box Shadow Generatorツール Css Animation Generator → Css Animation Generatorツール Css Button Generator → Css Button Generatorツール ","permalink":"https://productivity-works.com/ja/tools/css-unit-converter/","summary":"\u003cstyle\u003e\n#cuc-app *,#cuc-app *::before,#cuc-app *::after{box-sizing:border-box;margin:0;padding:0}\n#cuc-app{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;max-width:780px;margin:0 auto;padding:16px;color:#1a1a2e}\n#cuc-app .cuc-settings{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;background:#f8f9ff;border:1.5px solid #d0d5e8;border-radius:10px;padding:14px;margin-bottom:18px}\n#cuc-app .cuc-settings label{display:block;font-size:.78rem;font-weight:600;color:#555;margin-bottom:4px}\n#cuc-app .cuc-settings input[type=number]{width:100%;padding:7px 10px;border:1.5px solid #d0d5e8;border-radius:7px;font-size:.9rem;background:#fff;transition:border-color .2s}\n#cuc-app .cuc-settings input[type=number]:focus{outline:none;border-color:#4f6bed}\n#cuc-app .cuc-input-row{display:flex;gap:10px;margin-bottom:18px;align-items:flex-end}\n#cuc-app .cuc-input-row\u003ediv{flex:1}\n#cuc-app .cuc-input-row label{display:block;font-size:.82rem;font-weight:600;color:#555;margin-bottom:5px}\n#cuc-app .cuc-input-row input[type=number]{width:100%;padding:10px 12px;border:1.5px solid #d0d5e8;border-radius:8px;font-size:1.05rem;background:#fafbff;transition:border-color .2s}\n#cuc-app .cuc-input-row input[type=number]:focus{outline:none;border-color:#4f6bed}\n#cuc-app .cuc-input-row select{width:100%;padding:10px 10px;border:1.5px solid #d0d5e8;border-radius:8px;font-size:1rem;background:#fafbff;cursor:pointer;transition:border-color .2s}\n#cuc-app .cuc-input-row select:focus{outline:none;border-color:#4f6bed}\n#cuc-app .cuc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;margin-bottom:8px}\n#cuc-app .cuc-card{background:#fff;border:1.5px solid #e2e6f8;border-radius:10px;padding:14px 16px;cursor:pointer;transition:border-color .2s,box-shadow .2s;position:relative}\n#cuc-app .cuc-card:hover{border-color:#4f6bed;box-shadow:0 2px 10px rgba(79,107,237,.12)}\n#cuc-app .cuc-card.cuc-active{border-color:#4f6bed;background:#f0f2ff}\n#cuc-app .cuc-card-unit{font-size:.75rem;font-weight:700;color:#4f6bed;text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px}\n#cuc-app .cuc-card-value{font-size:1.25rem;font-weight:700;color:#1a1a2e;word-break:break-all}\n#cuc-app .cuc-card-full{font-size:.72rem;color:#888;margin-top:2px}\n#cuc-app .cuc-toast{position:fixed;bottom:24px;right:24px;background:#333;color:#fff;padding:9px 18px;border-radius:8px;font-size:.85rem;opacity:0;pointer-events:none;transition:opacity .3s;z-index:9999}\n#cuc-app .cuc-toast.show{opacity:1}\n#cuc-app .cuc-settings-title{font-size:.8rem;font-weight:700;color:#4f6bed;margin-bottom:2px;grid-column:1/-1}\n#cuc-app .cuc-note{font-size:.78rem;color:#888;margin-top:4px}\n\u003c/style\u003e\n\u003cdiv id=\"cuc-app\"\u003e\n\u003cdiv class=\"cuc-settings\"\u003e\n  \u003cdiv class=\"cuc-settings-title\"\u003e設定\u003c/div\u003e\n  \u003cdiv\u003e\n    \u003clabel for=\"cuc-base-font\"\u003eベースフォントサイズ (px)\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"cuc-base-font\" value=\"16\" min=\"1\" max=\"100\" step=\"0.5\" oninput=\"cucUpdate()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003clabel for=\"cuc-vw\"\u003eビューポート幅 (px)\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"cuc-vw\" value=\"1440\" min=\"1\" max=\"10000\" step=\"1\" oninput=\"cucUpdate()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003clabel for=\"cuc-vh\"\u003eビューポート高さ (px)\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"cuc-vh\" value=\"900\" min=\"1\" max=\"10000\" step=\"1\" oninput=\"cucUpdate()\"\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003clabel for=\"cuc-parent\"\u003e親要素サイズ / コンテキスト (px)\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"cuc-parent\" value=\"1440\" min=\"1\" max=\"10000\" step=\"0.5\" oninput=\"cucUpdate()\"\u003e\n    \u003cdiv class=\"cuc-note\"\u003eem・% の計算に使用されます\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"cuc-input-row\"\u003e\n  \u003cdiv\u003e\n    \u003clabel for=\"cuc-val\"\u003e値\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"cuc-val\" value=\"16\" step=\"any\" oninput=\"cucUpdate()\" placeholder=\"値を入力\"\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"max-width:120px\"\u003e\n    \u003clabel for=\"cuc-unit\"\u003e単位\u003c/label\u003e\n    \u003cselect id=\"cuc-unit\" onchange=\"cucUpdate()\"\u003e\n      \u003coption value=\"px\"\u003epx\u003c/option\u003e\n      \u003coption value=\"rem\"\u003erem\u003c/option\u003e\n      \u003coption value=\"em\"\u003eem\u003c/option\u003e\n      \u003coption value=\"vw\"\u003evw\u003c/option\u003e\n      \u003coption value=\"vh\"\u003evh\u003c/option\u003e\n      \u003coption value=\"pct\"\u003e%\u003c/option\u003e\n      \u003coption value=\"pt\"\u003ept\u003c/option\u003e\n      \u003coption value=\"cm\"\u003ecm\u003c/option\u003e\n      \u003coption value=\"mm\"\u003emm\u003c/option\u003e\n      \u003coption value=\"in\"\u003ein\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"cuc-grid\" id=\"cuc-grid\"\u003e\u003c/div\u003e\n\u003cp class=\"cuc-note\" style=\"margin-bottom:12px\"\u003eカードをクリックするとCSS値がクリップボードにコピーされます。\u003c/p\u003e","title":"CSS単位変換ツール - px rem em vw vh変換"},{"content":" 1件チェック 一括チェック チェック クリア 一括チェック クリア 1行に1アドレス入力 有効なアドレスをコピー コピーしました！ メール管理を効率化 freee会計でビジネスメールを一元管理 \u0026mdash; 請求書・領収書のメール管理から帳簿作成まで、freeeなら面倒な経理業務をまとめて効率化できます。 関連ツール Email Signature Generator → Email Signature Generatorツール Email Template Builder → Email Template Builderツール ","permalink":"https://productivity-works.com/ja/tools/email-validator/","summary":"\u003cdiv id=\"ev-app\"\u003e\n\u003cstyle\u003e\n#ev-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic UI\", Meiryo, sans-serif;\n  max-width: 780px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#ev-app h2 {\n  font-size: 1.4rem;\n  font-weight: 700;\n  margin: 1.6rem 0 0.8rem;\n  color: #1a1a2e;\n}\n#ev-app .ev-tabs {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #e2e8f0;\n  margin-bottom: 1.4rem;\n}\n#ev-app .ev-tab {\n  padding: 0.6rem 1.4rem;\n  cursor: pointer;\n  font-size: 0.95rem;\n  font-weight: 600;\n  color: #64748b;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  background: none;\n  border-top: none;\n  border-left: none;\n  border-right: none;\n  transition: color 0.2s, border-color 0.2s;\n}\n#ev-app .ev-tab.active {\n  color: #2563eb;\n  border-bottom-color: #2563eb;\n}\n#ev-app .ev-tab:hover:not(.active) {\n  color: #334155;\n}\n#ev-app .ev-panel {\n  display: none;\n}\n#ev-app .ev-panel.active {\n  display: block;\n}\n#ev-app .ev-input-row {\n  display: flex;\n  gap: 0.6rem;\n  margin-bottom: 1rem;\n}\n#ev-app input[type=\"text\"] {\n  flex: 1;\n  padding: 0.65rem 1rem;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 1rem;\n  outline: none;\n  transition: border-color 0.2s;\n  background: #f8fafc;\n}\n#ev-app input[type=\"text\"]:focus {\n  border-color: #2563eb;\n  background: #fff;\n}\n#ev-app textarea {\n  width: 100%;\n  min-height: 140px;\n  padding: 0.7rem 1rem;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 0.95rem;\n  font-family: \"Courier New\", monospace;\n  outline: none;\n  resize: vertical;\n  background: #f8fafc;\n  box-sizing: border-box;\n  transition: border-color 0.2s;\n}\n#ev-app textarea:focus {\n  border-color: #2563eb;\n  background: #fff;\n}\n#ev-app .ev-btn {\n  padding: 0.65rem 1.4rem;\n  background: #2563eb;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 0.97rem;\n  font-weight: 600;\n  cursor: pointer;\n  white-space: nowrap;\n  transition: background 0.2s;\n}\n#ev-app .ev-btn:hover {\n  background: #1d4ed8;\n}\n#ev-app .ev-btn.secondary {\n  background: #f1f5f9;\n  color: #334155;\n  border: 1.5px solid #cbd5e1;\n}\n#ev-app .ev-btn.secondary:hover {\n  background: #e2e8f0;\n}\n#ev-app .ev-btn.success {\n  background: #16a34a;\n}\n#ev-app .ev-btn.success:hover {\n  background: #15803d;\n}\n#ev-app .ev-result-single {\n  margin-top: 1rem;\n  padding: 1rem 1.2rem;\n  border-radius: 10px;\n  display: none;\n}\n#ev-app .ev-result-single.valid {\n  background: #f0fdf4;\n  border: 1.5px solid #86efac;\n  display: block;\n}\n#ev-app .ev-result-single.invalid {\n  background: #fff1f2;\n  border: 1.5px solid #fca5a5;\n  display: block;\n}\n#ev-app .ev-result-single .ev-status {\n  font-size: 1.05rem;\n  font-weight: 700;\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  margin-bottom: 0.5rem;\n}\n#ev-app .ev-result-single.valid .ev-status { color: #16a34a; }\n#ev-app .ev-result-single.invalid .ev-status { color: #dc2626; }\n#ev-app .ev-result-single .ev-detail {\n  font-size: 0.9rem;\n  color: #475569;\n  margin: 0.2rem 0;\n}\n#ev-app .ev-suggestion {\n  margin-top: 0.5rem;\n  padding: 0.5rem 0.8rem;\n  background: #fefce8;\n  border: 1px solid #fde68a;\n  border-radius: 6px;\n  font-size: 0.88rem;\n  color: #92400e;\n}\n#ev-app .ev-suggestion a {\n  color: #d97706;\n  font-weight: 600;\n  cursor: pointer;\n  text-decoration: underline;\n}\n#ev-app .ev-provider-badge {\n  display: inline-block;\n  padding: 0.2rem 0.6rem;\n  border-radius: 20px;\n  font-size: 0.8rem;\n  font-weight: 600;\n  margin-top: 0.4rem;\n}\n#ev-app .ev-provider-gmail { background: #fce8e6; color: #c5221f; }\n#ev-app .ev-provider-yahoo { background: #e8f0fe; color: #1a73e8; }\n#ev-app .ev-provider-outlook { background: #e3f2fd; color: #0077d7; }\n#ev-app .ev-provider-icloud { background: #f3e8ff; color: #7c3aed; }\n#ev-app .ev-provider-proton { background: #ecfdf5; color: #059669; }\n#ev-app .ev-provider-other { background: #f1f5f9; color: #475569; }\n#ev-app .ev-bulk-controls {\n  display: flex;\n  gap: 0.6rem;\n  margin-bottom: 0.8rem;\n  flex-wrap: wrap;\n  align-items: center;\n}\n#ev-app .ev-bulk-results {\n  margin-top: 1rem;\n}\n#ev-app .ev-bulk-summary {\n  display: flex;\n  gap: 1rem;\n  margin-bottom: 1rem;\n  flex-wrap: wrap;\n}\n#ev-app .ev-summary-card {\n  flex: 1;\n  min-width: 120px;\n  padding: 0.7rem 1rem;\n  border-radius: 8px;\n  text-align: center;\n}\n#ev-app .ev-summary-card .ev-num {\n  font-size: 1.8rem;\n  font-weight: 800;\n  line-height: 1;\n}\n#ev-app .ev-summary-card .ev-label {\n  font-size: 0.8rem;\n  margin-top: 0.2rem;\n  font-weight: 500;\n}\n#ev-app .ev-summary-card.total { background: #f1f5f9; color: #334155; }\n#ev-app .ev-summary-card.valid { background: #f0fdf4; color: #16a34a; }\n#ev-app .ev-summary-card.invalid { background: #fff1f2; color: #dc2626; }\n#ev-app .ev-bulk-list {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n  max-height: 320px;\n  overflow-y: auto;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n}\n#ev-app .ev-bulk-list li {\n  display: flex;\n  align-items: center;\n  gap: 0.7rem;\n  padding: 0.55rem 0.9rem;\n  border-bottom: 1px solid #f1f5f9;\n  font-size: 0.9rem;\n}\n#ev-app .ev-bulk-list li:last-child { border-bottom: none; }\n#ev-app .ev-bulk-list li.valid { background: #fafffe; }\n#ev-app .ev-bulk-list li.invalid { background: #fffafa; }\n#ev-app .ev-icon { font-size: 1rem; flex-shrink: 0; }\n#ev-app .ev-email-text { font-family: \"Courier New\", monospace; flex: 1; word-break: break-all; }\n#ev-app .ev-reason { font-size: 0.78rem; color: #94a3b8; margin-left: auto; text-align: right; }\n#ev-app .ev-copy-area { margin-top: 0.8rem; display: flex; gap: 0.6rem; align-items: center; flex-wrap: wrap; }\n#ev-app .ev-copy-feedback { font-size: 0.85rem; color: #16a34a; font-weight: 600; display: none; }\n#ev-app .ev-freee-cta {\n  margin-top: 2.5rem;\n  padding: 1.2rem 1.4rem;\n  background: linear-gradient(135deg, #eff6ff 0%, #f0fdf4 100%);\n  border: 1.5px solid #bfdbfe;\n  border-radius: 12px;\n  font-size: 0.95rem;\n  color: #1e40af;\n  line-height: 1.7;\n}\n#ev-app .ev-freee-cta strong {\n  display: block;\n  font-size: 1rem;\n  margin-bottom: 0.4rem;\n  color: #1a1a2e;\n}\n#ev-app .ev-freee-cta a {\n  color: #2563eb;\n  font-weight: 700;\n  text-decoration: none;\n}\n#ev-app .ev-freee-cta a:hover { text-decoration: underline; }\n@media (max-width: 520px) {\n  #ev-app .ev-input-row { flex-direction: column; }\n  #ev-app .ev-btn { width: 100%; }\n  #ev-app .ev-bulk-controls { flex-direction: column; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"ev-tabs\"\u003e\n  \u003cbutton class=\"ev-tab active\" onclick=\"evSwitchTab('single', this)\"\u003e1件チェック\u003c/button\u003e\n  \u003cbutton class=\"ev-tab\" onclick=\"evSwitchTab('bulk', this)\"\u003e一括チェック\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- Single Panel --\u003e\n\u003cdiv id=\"ev-panel-single\" class=\"ev-panel active\"\u003e\n  \u003cdiv class=\"ev-input-row\"\u003e\n    \u003cinput type=\"text\" id=\"ev-single-input\" placeholder=\"メールアドレスを入力（例: user@example.com）\" onkeydown=\"if(event.key==='Enter')evValidateSingle()\"\u003e\n    \u003cbutton class=\"ev-btn\" onclick=\"evValidateSingle()\"\u003eチェック\u003c/button\u003e\n    \u003cbutton class=\"ev-btn secondary\" onclick=\"evClearSingle()\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"ev-single-result\" class=\"ev-result-single\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Bulk Panel --\u003e\n\u003cdiv id=\"ev-panel-bulk\" class=\"ev-panel\"\u003e\n  \u003cdiv class=\"ev-bulk-controls\"\u003e\n    \u003cbutton class=\"ev-btn\" onclick=\"evValidateBulk()\"\u003e一括チェック\u003c/button\u003e\n    \u003cbutton class=\"ev-btn secondary\" onclick=\"evClearBulk()\"\u003eクリア\u003c/button\u003e\n    \u003cspan style=\"font-size:0.85rem;color:#64748b;\"\u003e1行に1アドレス入力\u003c/span\u003e\n  \u003c/div\u003e\n  \u003ctextarea id=\"ev-bulk-input\" placeholder=\"user@gmail.com\u0026#10;contact@company.com\u0026#10;invalid-email\u0026#10;test@yahoo.co.jp\u0026#10;...\"\u003e\u003c/textarea\u003e\n  \u003cdiv id=\"ev-bulk-results\" class=\"ev-bulk-results\" style=\"display:none;\"\u003e\n    \u003cdiv id=\"ev-bulk-summary\" class=\"ev-bulk-summary\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"ev-copy-area\"\u003e\n      \u003cbutton class=\"ev-btn success\" onclick=\"evCopyValid()\"\u003e有効なアドレスをコピー\u003c/button\u003e\n      \u003cspan id=\"ev-copy-feedback\" class=\"ev-copy-feedback\"\u003eコピーしました！\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cul id=\"ev-bulk-list\" class=\"ev-bulk-list\"\u003e\u003c/ul\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ev-freee-cta\"\u003e\n  \u003cstrong\u003eメール管理を効率化\u003c/strong\u003e\n  \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"nofollow noopener\"\u003efreee会計でビジネスメールを一元管理\u003c/a\u003e \u0026mdash; 請求書・領収書のメール管理から帳簿作成まで、freeeなら面倒な経理業務をまとめて効率化できます。\n\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  \"use strict\";\n\n  // --- タイプミスマップ: 誤ったドメイン → 正しいドメイン ---\n  var TYPO_MAP = {\n    \"gmial.com\": \"gmail.com\",\n    \"gmai.com\": \"gmail.com\",\n    \"gmail.con\": \"gmail.com\",\n    \"gmail.cmo\": \"gmail.com\",\n    \"gmaill.com\": \"gmail.com\",\n    \"gmailcom\": \"gmail.com\",\n    \"gnail.com\": \"gmail.com\",\n    \"gamil.com\": \"gmail.com\",\n    \"yahooo.com\": \"yahoo.com\",\n    \"yaho.com\": \"yahoo.com\",\n    \"yahoo.con\": \"yahoo.com\",\n    \"yahoo.cmo\": \"yahoo.com\",\n    \"yahooo.co.jp\": \"yahoo.co.jp\",\n    \"yaho.co.jp\": \"yahoo.co.jp\",\n    \"hotmial.com\": \"hotmail.com\",\n    \"hotmail.con\": \"hotmail.com\",\n    \"hotmal.com\": \"hotmail.com\",\n    \"outllook.com\": \"outlook.com\",\n    \"outlok.com\": \"outlook.com\",\n    \"outlook.con\": \"outlook.com\",\n    \"outlookcom\": \"outlook.com\",\n    \"icoud.com\": \"icloud.com\",\n    \"iclod.com\": \"icloud.com\",\n    \"protonmal.com\": \"protonmail.com\",\n    \"protonmial.com\": \"protonmail.com\"\n  };\n\n  // --- プロバイダ検出 ---\n  var PROVIDERS = {\n    \"gmail.com\":        { name: \"Gmail\",               cls: \"ev-provider-gmail\" },\n    \"googlemail.com\":   { name: \"Gmail\",               cls: \"ev-provider-gmail\" },\n    \"yahoo.com\":        { name: \"Yahoo Mail\",          cls: \"ev-provider-yahoo\" },\n    \"yahoo.co.jp\":      { name: \"Yahoo Mail JP\",       cls: \"ev-provider-yahoo\" },\n    \"yahoo.co.uk\":      { name: \"Yahoo Mail UK\",       cls: \"ev-provider-yahoo\" },\n    \"ymail.com\":        { name: \"Yahoo Mail\",          cls: \"ev-provider-yahoo\" },\n    \"outlook.com\":      { name: \"Outlook\",             cls: \"ev-provider-outlook\" },\n    \"hotmail.com\":      { name: \"Hotmail / Outlook\",  cls: \"ev-provider-outlook\" },\n    \"live.com\":         { name: \"Outlook / Live\",      cls: \"ev-provider-outlook\" },\n    \"msn.com\":          { name: \"MSN / Outlook\",       cls: \"ev-provider-outlook\" },\n    \"icloud.com\":       { name: \"iCloud Mail\",         cls: \"ev-provider-icloud\" },\n    \"me.com\":           { name: \"iCloud Mail\",         cls: \"ev-provider-icloud\" },\n    \"mac.com\":          { name: \"iCloud Mail\",         cls: \"ev-provider-icloud\" },\n    \"protonmail.com\":   { name: \"Proton Mail\",         cls: \"ev-provider-proton\" },\n    \"pm.me\":            { name: \"Proton Mail\",         cls: \"ev-provider-proton\" }\n  };\n\n  // --- メッセージ日本語化 ---\n  var MESSAGES = {\n    empty:         \"メールアドレスが空です。\",\n    no_at:         \"「@」記号がありません。\",\n    multi_at:      \"「@」記号が複数あります。\",\n    no_local:      \"「@」の前に文字がありません。\",\n    local_long:    \"「@」前の部分が64文字を超えています。\",\n    local_dot:     \"「@」前の部分をドットで始めたり終わらせることはできません。\",\n    local_dotdot:  \"「@」前の部分に連続したドットがあります。\",\n    local_chars:   \"「@」前の部分に使用できない文字が含まれています。\",\n    no_domain:     \"「@」の後に文字がありません。\",\n    domain_long:   \"ドメインが最大長を超えています。\",\n    no_dot:        \"ドメインにドットがありません（例: .com が必要）。\",\n    domain_hyphen: \"ドメインラベルをハイフンで始めたり終わらせることはできません。\",\n    domain_dotdot: \"ドメインに連続したドットがあります。\",\n    domain_dot:    \"ドメインをドットで始めたり終わらせることはできません。\",\n    tld_short:     \"TLD（.com など）が短すぎるか、ありません。\",\n    tld_chars:     \"TLDに無効な文字が含まれています。\",\n    domain_chars:  \"ドメインに無効な文字が含まれています。\",\n    invalid:       \"メール形式が正しくありません。\",\n    valid:         \"構文・ドメイン形式ともに正常です。\",\n    provider_other:\"カスタムドメイン\"\n  };\n\n  // --- バリデーター ---\n  function validateEmail(raw) {\n    var email = raw.trim();\n    var result = { email: email, valid: false, reason: \"\", suggestion: null, provider: null, providerCls: null };\n\n    if (!email) { result.reason = MESSAGES.empty; return result; }\n\n    var atCount = (email.match(/@/g) || []).length;\n    if (atCount === 0) { result.reason = MESSAGES.no_at; return result; }\n    if (atCount \u003e 1)   { result.reason = MESSAGES.multi_at; return result; }\n\n    var parts  = email.split(\"@\");\n    var local  = parts[0];\n    var domain = parts[1];\n\n    if (!local || local.length === 0) { result.reason = MESSAGES.no_local; return result; }\n    if (local.length \u003e 64)            { result.reason = MESSAGES.local_long; return result; }\n    if (/^\\./.test(local) || /\\.$/.test(local)) { result.reason = MESSAGES.local_dot; return result; }\n    if (/\\.{2,}/.test(local))         { result.reason = MESSAGES.local_dotdot; return result; }\n    if (!/^[a-zA-Z0-9!#$%\u0026'*+/=?^_`{|}~.-]+$/.test(local)) { result.reason = MESSAGES.local_chars; return result; }\n\n    if (!domain || domain.length === 0) { result.reason = MESSAGES.no_domain; return result; }\n    if (domain.length \u003e 255)            { result.reason = MESSAGES.domain_long; return result; }\n    if (!domain.includes(\".\")) {\n      result.reason = MESSAGES.no_dot;\n      Object.keys(TYPO_MAP).forEach(function (t) {\n        if (domain.toLowerCase() === t.replace(\".\", \"\")) {\n          result.suggestion = local + \"@\" + TYPO_MAP[t];\n        }\n      });\n      return result;\n    }\n    if (/^-|-$/.test(domain.split(\".\")[0])) { result.reason = MESSAGES.domain_hyphen; return result; }\n    if (/\\.{2,}/.test(domain))              { result.reason = MESSAGES.domain_dotdot; return result; }\n    if (/^\\.|\\.$/.test(domain))             { result.reason = MESSAGES.domain_dot; return result; }\n\n    var tld = domain.split(\".\").pop();\n    if (!tld || tld.length \u003c 2)           { result.reason = MESSAGES.tld_short; return result; }\n    if (!/^[a-zA-Z]{2,}$/.test(tld))     { result.reason = MESSAGES.tld_chars; return result; }\n    if (!/^[a-zA-Z0-9.-]+$/.test(domain)){ result.reason = MESSAGES.domain_chars; return result; }\n\n    var re = /^[a-zA-Z0-9!#$%\u0026'*+/=?^_`{|}~.-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n    if (!re.test(email)) { result.reason = MESSAGES.invalid; return result; }\n\n    var domainLower = domain.toLowerCase();\n    if (TYPO_MAP[domainLower]) {\n      result.suggestion = local + \"@\" + TYPO_MAP[domainLower];\n    }\n\n    if (PROVIDERS[domainLower]) {\n      result.provider    = PROVIDERS[domainLower].name;\n      result.providerCls = PROVIDERS[domainLower].cls;\n    } else {\n      result.provider    = MESSAGES.provider_other;\n      result.providerCls = \"ev-provider-other\";\n    }\n\n    result.valid  = true;\n    result.reason = MESSAGES.valid;\n    return result;\n  }\n\n  // --- タブ切り替え ---\n  window.evSwitchTab = function (tab, btn) {\n    document.querySelectorAll(\"#ev-app .ev-panel\").forEach(function (p) { p.classList.remove(\"active\"); });\n    document.querySelectorAll(\"#ev-app .ev-tab\").forEach(function (b) { b.classList.remove(\"active\"); });\n    document.getElementById(\"ev-panel-\" + tab).classList.add(\"active\");\n    btn.classList.add(\"active\");\n  };\n\n  // --- 1件チェック ---\n  window.evValidateSingle = function () {\n    var input = document.getElementById(\"ev-single-input\").value;\n    var r = validateEmail(input);\n    var el = document.getElementById(\"ev-single-result\");\n    el.className = \"ev-result-single \" + (r.valid ? \"valid\" : \"invalid\");\n\n    var html = '\u003cdiv class=\"ev-status\"\u003e' +\n      (r.valid ? \"\u0026#10003;\" : \"\u0026#10007;\") +\n      \" \u003cspan\u003e\" + (r.valid ? \"有効なメールアドレスです\" : \"無効なメールアドレスです\") + \"\u003c/span\u003e\u003c/div\u003e\";\n    html += '\u003cdiv class=\"ev-detail\"\u003e\u003cstrong\u003e入力値:\u003c/strong\u003e ' + escHtml(r.email) + \"\u003c/div\u003e\";\n    html += '\u003cdiv class=\"ev-detail\"\u003e\u003cstrong\u003e結果:\u003c/strong\u003e ' + escHtml(r.reason) + \"\u003c/div\u003e\";\n\n    if (r.valid \u0026\u0026 r.provider) {\n      html += '\u003cspan class=\"ev-provider-badge ' + r.providerCls + '\"\u003e' + escHtml(r.provider) + \"\u003c/span\u003e\";\n    }\n    if (r.suggestion) {\n      html += '\u003cdiv class=\"ev-suggestion\"\u003eもしかして: \u003ca onclick=\"evUseSuggestion(\\'' + escAttr(r.suggestion) + '\\')\"\u003e' + escHtml(r.suggestion) + \"\u003c/a\u003e ではありませんか？\u003c/div\u003e\";\n    }\n\n    el.innerHTML = html;\n  };\n\n  window.evUseSuggestion = function (suggested) {\n    document.getElementById(\"ev-single-input\").value = suggested;\n    evValidateSingle();\n  };\n\n  window.evClearSingle = function () {\n    document.getElementById(\"ev-single-input\").value = \"\";\n    var el = document.getElementById(\"ev-single-result\");\n    el.className = \"ev-result-single\";\n    el.innerHTML = \"\";\n  };\n\n  // --- 一括チェック ---\n  var bulkResults = [];\n\n  window.evValidateBulk = function () {\n    var raw   = document.getElementById(\"ev-bulk-input\").value;\n    var lines = raw.split(\"\\n\").map(function (l) { return l.trim(); }).filter(function (l) { return l.length \u003e 0; });\n    if (lines.length === 0) return;\n\n    bulkResults = lines.map(validateEmail);\n\n    var valid   = bulkResults.filter(function (r) { return r.valid; });\n    var invalid = bulkResults.filter(function (r) { return !r.valid; });\n\n    var summary = document.getElementById(\"ev-bulk-summary\");\n    summary.innerHTML =\n      '\u003cdiv class=\"ev-summary-card total\"\u003e\u003cdiv class=\"ev-num\"\u003e' + bulkResults.length + '\u003c/div\u003e\u003cdiv class=\"ev-label\"\u003e合計\u003c/div\u003e\u003c/div\u003e' +\n      '\u003cdiv class=\"ev-summary-card valid\"\u003e\u003cdiv class=\"ev-num\"\u003e' + valid.length + '\u003c/div\u003e\u003cdiv class=\"ev-label\"\u003e有効\u003c/div\u003e\u003c/div\u003e' +\n      '\u003cdiv class=\"ev-summary-card invalid\"\u003e\u003cdiv class=\"ev-num\"\u003e' + invalid.length + '\u003c/div\u003e\u003cdiv class=\"ev-label\"\u003e無効\u003c/div\u003e\u003c/div\u003e';\n\n    var list = document.getElementById(\"ev-bulk-list\");\n    list.innerHTML = bulkResults.map(function (r) {\n      return '\u003cli class=\"' + (r.valid ? \"valid\" : \"invalid\") + '\"\u003e' +\n        '\u003cspan class=\"ev-icon\"\u003e' + (r.valid ? \"\u0026#10003;\" : \"\u0026#10007;\") + \"\u003c/span\u003e\" +\n        '\u003cspan class=\"ev-email-text\"\u003e' + escHtml(r.email) + \"\u003c/span\u003e\" +\n        (r.provider ? '\u003cspan class=\"ev-provider-badge ' + r.providerCls + '\" style=\"font-size:0.72rem;padding:0.1rem 0.4rem;\"\u003e' + escHtml(r.provider) + \"\u003c/span\u003e\" : \"\") +\n        '\u003cspan class=\"ev-reason\"\u003e' + escHtml(r.reason) + \"\u003c/span\u003e\" +\n        \"\u003c/li\u003e\";\n    }).join(\"\");\n\n    document.getElementById(\"ev-bulk-results\").style.display = \"block\";\n  };\n\n  window.evClearBulk = function () {\n    document.getElementById(\"ev-bulk-input\").value = \"\";\n    document.getElementById(\"ev-bulk-results\").style.display = \"none\";\n    bulkResults = [];\n  };\n\n  window.evCopyValid = function () {\n    var validEmails = bulkResults.filter(function (r) { return r.valid; }).map(function (r) { return r.email; });\n    if (validEmails.length === 0) return;\n    var text = validEmails.join(\"\\n\");\n    if (navigator.clipboard \u0026\u0026 navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).then(showCopied);\n    } else {\n      var ta = document.createElement(\"textarea\");\n      ta.value = text;\n      ta.style.position = \"fixed\";\n      ta.style.opacity  = \"0\";\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand(\"copy\");\n      document.body.removeChild(ta);\n      showCopied();\n    }\n  };\n\n  function showCopied() {\n    var fb = document.getElementById(\"ev-copy-feedback\");\n    fb.style.display = \"inline\";\n    setTimeout(function () { fb.style.display = \"none\"; }, 2000);\n  }\n\n  function escHtml(s) {\n    return String(s).replace(/\u0026/g, \"\u0026amp;\").replace(/\u003c/g, \"\u0026lt;\").replace(/\u003e/g, \"\u0026gt;\").replace(/\"/g, \"\u0026quot;\");\n  }\n  function escAttr(s) {\n    return String(s).replace(/'/g, \"\\\\'\");\n  }\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003eEmail Signature Generator → \u003ca href=\"https://productivity-works.com/ja/tools/email-signature-generator/\"\u003eEmail Signature Generatorツール\u003c/a\u003e\n\nEmail Template Builder → \u003ca href=\"https://productivity-works.com/ja/tools/email-template-builder/\"\u003eEmail Template Builderツール\u003c/a\u003e\n\u003c/p\u003e","title":"メールアドレス検証ツール - メール形式チェッカー"},{"content":" すべて ピンク レッド オレンジ イエロー グリーン ティール ブルー パープル ダーク パステル ウォーム マルチ グラデーションが見つかりません。別のキーワードをお試しください。 カスタマイズ \u0026#x2715; 種類 リニア 放射状 コニック 角度 135° 色1 % 色2 % CSSをコピー クリックして閉じる クリップボードにコピーしました！ 100種類以上のCSSグラデーションプリセットを一覧で閲覧できます。カードをクリックするとカスタマイザーが開き、色・角度・種類を自由に調整できます。スウォッチをダブルクリックするとフルスクリーンプレビューが表示されます。\n関連ツール グラデーションを自由に作成 → CSSグラデーションジェネレーター 配色インスピレーション → カラーパレットジェネレーター Webデザインの収支管理も効率化しませんか？\nフリーランスのデザイナー・エンジニアの請求書発行・経費管理・確定申告はクラウド会計ソフト「freee」で効率化しませんか？\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/gradient-gallery/","summary":"\u003cdiv id=\"gg-app\"\u003e\n\u003cstyle\u003e\n#gg-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', Roboto, sans-serif;\n  max-width: 1100px;\n  margin: 0 auto;\n  padding: 0 0 56px;\n  color: #1e293b;\n}\n#gg-app * { box-sizing: border-box; }\n\n/* Controls */\n#gg-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-bottom: 20px;\n  align-items: center;\n}\n#gg-search {\n  flex: 1;\n  min-width: 200px;\n  padding: 10px 16px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 10px;\n  font-size: 14px;\n  outline: none;\n  transition: border-color .2s;\n  background: #fff;\n}\n#gg-search:focus { border-color: #6366f1; }\n#gg-filters {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n}\n.gg-filter {\n  padding: 7px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 20px;\n  background: #fff;\n  font-size: 13px;\n  cursor: pointer;\n  transition: all .15s;\n  white-space: nowrap;\n}\n.gg-filter:hover { border-color: #6366f1; color: #6366f1; }\n.gg-filter.active { background: #6366f1; border-color: #6366f1; color: #fff; }\n\n/* Count */\n#gg-count {\n  font-size: 13px;\n  color: #64748b;\n  margin-bottom: 16px;\n}\n\n/* Grid */\n#gg-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\n  gap: 16px;\n}\n.gg-card {\n  border-radius: 14px;\n  overflow: hidden;\n  box-shadow: 0 2px 10px rgba(0,0,0,0.10);\n  cursor: pointer;\n  transition: transform .18s, box-shadow .18s;\n  background: #fff;\n}\n.gg-card:hover {\n  transform: translateY(-4px);\n  box-shadow: 0 8px 28px rgba(0,0,0,0.18);\n}\n.gg-swatch {\n  width: 100%;\n  height: 130px;\n  transition: background .3s;\n}\n.gg-info {\n  padding: 10px 12px 12px;\n}\n.gg-name {\n  font-size: 13px;\n  font-weight: 600;\n  color: #1e293b;\n  margin-bottom: 4px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.gg-css-preview {\n  font-size: 10px;\n  color: #64748b;\n  font-family: 'SFMono-Regular', Consolas, monospace;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  margin-bottom: 8px;\n}\n.gg-copy-btn {\n  width: 100%;\n  padding: 7px;\n  border: none;\n  border-radius: 8px;\n  background: #f1f5f9;\n  color: #374151;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background .15s, color .15s;\n}\n.gg-copy-btn:hover { background: #6366f1; color: #fff; }\n.gg-copy-btn.copied { background: #22c55e; color: #fff; }\n\n/* No results */\n#gg-empty {\n  grid-column: 1/-1;\n  text-align: center;\n  padding: 60px 20px;\n  color: #94a3b8;\n  font-size: 15px;\n  display: none;\n}\n\n/* Customizer panel */\n#gg-customizer {\n  position: fixed;\n  bottom: 0; right: 0;\n  width: 340px;\n  background: #fff;\n  border-top-left-radius: 18px;\n  border-top: 2px solid #e2e8f0;\n  border-left: 2px solid #e2e8f0;\n  box-shadow: -4px -4px 24px rgba(0,0,0,0.12);\n  padding: 20px;\n  z-index: 999;\n  display: none;\n}\n#gg-customizer.open { display: block; }\n#gg-cust-title {\n  font-size: 14px;\n  font-weight: 700;\n  color: #1e293b;\n  margin-bottom: 14px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n#gg-cust-close {\n  background: none;\n  border: none;\n  font-size: 20px;\n  cursor: pointer;\n  color: #64748b;\n  line-height: 1;\n}\n#gg-cust-preview {\n  width: 100%;\n  height: 80px;\n  border-radius: 10px;\n  margin-bottom: 14px;\n  transition: background .2s;\n}\n.gg-cust-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 10px;\n  font-size: 13px;\n  color: #374151;\n}\n.gg-cust-row label { min-width: 60px; font-weight: 600; }\n.gg-cust-row input[type=\"color\"] {\n  width: 40px; height: 32px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  cursor: pointer;\n  padding: 2px;\n  background: none;\n}\n.gg-cust-row input[type=\"range\"] {\n  flex: 1;\n  accent-color: #6366f1;\n}\n.gg-cust-row select {\n  flex: 1;\n  padding: 6px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 13px;\n  outline: none;\n}\n#gg-cust-code {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 10px;\n  font-size: 11px;\n  font-family: 'SFMono-Regular', Consolas, monospace;\n  color: #374151;\n  word-break: break-all;\n  margin-bottom: 10px;\n  min-height: 52px;\n}\n#gg-cust-copy {\n  width: 100%;\n  padding: 9px;\n  border: none;\n  border-radius: 9px;\n  background: #6366f1;\n  color: #fff;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background .15s;\n}\n#gg-cust-copy:hover { background: #4f46e5; }\n#gg-cust-copy.copied { background: #22c55e; }\n\n/* Fullscreen */\n#gg-fullscreen {\n  display: none;\n  position: fixed;\n  inset: 0;\n  z-index: 9999;\n  align-items: center;\n  justify-content: center;\n  flex-direction: column;\n  cursor: pointer;\n}\n#gg-fullscreen.open { display: flex; }\n#gg-fs-label {\n  position: absolute;\n  bottom: 30px;\n  background: rgba(0,0,0,0.5);\n  color: #fff;\n  padding: 8px 20px;\n  border-radius: 20px;\n  font-size: 13px;\n  pointer-events: none;\n}\n\n/* Toast */\n#gg-toast {\n  position: fixed;\n  bottom: 32px;\n  left: 50%;\n  transform: translateX(-50%) translateY(60px);\n  background: #1e293b;\n  color: #fff;\n  padding: 10px 22px;\n  border-radius: 24px;\n  font-size: 13px;\n  font-weight: 600;\n  z-index: 10000;\n  opacity: 0;\n  transition: opacity .25s, transform .25s;\n  pointer-events: none;\n}\n#gg-toast.show {\n  opacity: 1;\n  transform: translateX(-50%) translateY(0);\n}\n\n@media (max-width: 600px) {\n  #gg-customizer { width: 100%; border-radius: 18px 18px 0 0; border-left: none; }\n  #gg-grid { grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); }\n  .gg-swatch { height: 100px; }\n}\n\u003c/style\u003e\n\u003c!-- コントロール --\u003e\n\u003cdiv id=\"gg-controls\"\u003e\n  \u003cinput type=\"text\" id=\"gg-search\" placeholder=\"グラデーションを検索...\" aria-label=\"グラデーション検索\"\u003e\n  \u003cdiv id=\"gg-filters\"\u003e\n    \u003cbutton class=\"gg-filter active\" data-family=\"all\"\u003eすべて\u003c/button\u003e\n    \u003cbutton class=\"gg-filter\" data-family=\"pink\"\u003eピンク\u003c/button\u003e\n    \u003cbutton class=\"gg-filter\" data-family=\"red\"\u003eレッド\u003c/button\u003e\n    \u003cbutton class=\"gg-filter\" data-family=\"orange\"\u003eオレンジ\u003c/button\u003e\n    \u003cbutton class=\"gg-filter\" data-family=\"yellow\"\u003eイエロー\u003c/button\u003e\n    \u003cbutton class=\"gg-filter\" data-family=\"green\"\u003eグリーン\u003c/button\u003e\n    \u003cbutton class=\"gg-filter\" data-family=\"teal\"\u003eティール\u003c/button\u003e\n    \u003cbutton class=\"gg-filter\" data-family=\"blue\"\u003eブルー\u003c/button\u003e\n    \u003cbutton class=\"gg-filter\" data-family=\"purple\"\u003eパープル\u003c/button\u003e\n    \u003cbutton class=\"gg-filter\" data-family=\"dark\"\u003eダーク\u003c/button\u003e\n    \u003cbutton class=\"gg-filter\" data-family=\"pastel\"\u003eパステル\u003c/button\u003e\n    \u003cbutton class=\"gg-filter\" data-family=\"warm\"\u003eウォーム\u003c/button\u003e\n    \u003cbutton class=\"gg-filter\" data-family=\"multi\"\u003eマルチ\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"gg-count\"\u003e\u003c/div\u003e\n\u003c!-- グリッド --\u003e\n\u003cdiv id=\"gg-grid\"\u003e\n  \u003cdiv id=\"gg-empty\"\u003eグラデーションが見つかりません。別のキーワードをお試しください。\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- カスタマイザー --\u003e\n\u003cdiv id=\"gg-customizer\"\u003e\n  \u003cdiv id=\"gg-cust-title\"\u003e\n    \u003cspan\u003eカスタマイズ\u003c/span\u003e\n    \u003cbutton id=\"gg-cust-close\" title=\"閉じる\"\u003e\u0026#x2715;\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"gg-cust-preview\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"gg-cust-row\"\u003e\n    \u003clabel\u003e種類\u003c/label\u003e\n    \u003cselect id=\"gg-cust-type\"\u003e\n      \u003coption value=\"linear\"\u003eリニア\u003c/option\u003e\n      \u003coption value=\"radial\"\u003e放射状\u003c/option\u003e\n      \u003coption value=\"conic\"\u003eコニック\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"gg-cust-row\" id=\"gg-angle-row\"\u003e\n    \u003clabel\u003e角度\u003c/label\u003e\n    \u003cinput type=\"range\" id=\"gg-cust-angle\" min=\"0\" max=\"360\" value=\"135\"\u003e\n    \u003cspan id=\"gg-angle-val\"\u003e135°\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"gg-cust-row\"\u003e\n    \u003clabel\u003e色1\u003c/label\u003e\n    \u003cinput type=\"color\" id=\"gg-cust-c1\" value=\"#667eea\"\u003e\n    \u003cspan id=\"gg-c1-pct-wrap\"\u003e\u003cinput type=\"number\" id=\"gg-c1-pct\" value=\"0\" min=\"0\" max=\"100\" style=\"width:48px;border:1.5px solid #cbd5e1;border-radius:6px;padding:4px;font-size:12px;outline:none\"\u003e%\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"gg-cust-row\"\u003e\n    \u003clabel\u003e色2\u003c/label\u003e\n    \u003cinput type=\"color\" id=\"gg-cust-c2\" value=\"#764ba2\"\u003e\n    \u003cspan id=\"gg-c2-pct-wrap\"\u003e\u003cinput type=\"number\" id=\"gg-c2-pct\" value=\"100\" min=\"0\" max=\"100\" style=\"width:48px;border:1.5px solid #cbd5e1;border-radius:6px;padding:4px;font-size:12px;outline:none\"\u003e%\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"gg-cust-code\"\u003e\u003c/div\u003e\n  \u003cbutton id=\"gg-cust-copy\"\u003eCSSをコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- フルスクリーンオーバーレイ --\u003e\n\u003cdiv id=\"gg-fullscreen\" title=\"クリックして閉じる\"\u003e\n  \u003cdiv id=\"gg-fs-label\"\u003eクリックして閉じる\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- トースト --\u003e\n\u003cdiv id=\"gg-toast\"\u003eクリップボードにコピーしました！\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  const GRADIENTS = [\n    // ピンク\n    { name: 'キャンディブリス', css: 'linear-gradient(135deg, #f093fb 0%, #f5576c 100%)', family: ['pink', 'red'] },\n    { name: 'ローズクォーツ', css: 'linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%)', family: ['pink', 'pastel', 'warm'] },\n    { name: 'ピンクレモネード', css: 'linear-gradient(135deg, #f8acff 0%, #696eff 100%)', family: ['pink', 'purple'] },\n    { name: 'フラミンゴ', css: 'linear-gradient(135deg, #f7797d 0%, #FBD786 50%, #C6FFDD 100%)', family: ['pink', 'multi'] },\n    { name: '桜', css: 'linear-gradient(135deg, #FFB7B2 0%, #FFDAC1 100%)', family: ['pink', 'pastel'] },\n    { name: 'ホットコーラル', css: 'linear-gradient(135deg, #FF6CAB 0%, #7366FF 100%)', family: ['pink', 'purple'] },\n    { name: 'ブラッシュピーチ', css: 'linear-gradient(135deg, #fbc2eb 0%, #a6c1ee 100%)', family: ['pink', 'blue', 'pastel'] },\n    { name: 'ローズゴールド', css: 'linear-gradient(135deg, #f3c4cc 0%, #d4a5a5 50%, #b07d7d 100%)', family: ['pink', 'warm'] },\n    { name: 'コットンキャンディ', css: 'linear-gradient(135deg, #FDCBF1 0%, #E6DEE9 100%)', family: ['pink', 'pastel'] },\n\n    // レッド\n    { name: 'クリムゾンタイド', css: 'linear-gradient(135deg, #C33764 0%, #1D2671 100%)', family: ['red', 'dark', 'blue'] },\n    { name: 'スカーレット', css: 'linear-gradient(135deg, #ff416c 0%, #ff4b2b 100%)', family: ['red', 'orange'] },\n    { name: 'ブラッドムーン', css: 'linear-gradient(135deg, #8B0000 0%, #FF4500 100%)', family: ['red', 'dark'] },\n    { name: 'レッドベルベット', css: 'linear-gradient(135deg, #c0392b 0%, #8e44ad 100%)', family: ['red', 'purple'] },\n    { name: '溶岩', css: 'linear-gradient(135deg, #ff0000 0%, #ff7300 50%, #ffcc00 100%)', family: ['red', 'orange', 'yellow', 'multi'] },\n    { name: 'ベリージャム', css: 'linear-gradient(135deg, #9b2335 0%, #c0392b 50%, #e74c3c 100%)', family: ['red'] },\n    { name: '花火', css: 'linear-gradient(135deg, #f12711 0%, #f5af19 100%)', family: ['red', 'orange'] },\n    { name: 'チェリーポップ', css: 'linear-gradient(135deg, #eb3349 0%, #f45c43 100%)', family: ['red', 'orange'] },\n\n    // オレンジ\n    { name: '日の出', css: 'linear-gradient(135deg, #f83600 0%, #f9d423 100%)', family: ['orange', 'yellow', 'warm'] },\n    { name: '砂漠の太陽', css: 'linear-gradient(135deg, #FFD200 0%, #F7971E 100%)', family: ['orange', 'yellow', 'warm'] },\n    { name: '紅葉', css: 'linear-gradient(135deg, #d4531a 0%, #f0a500 100%)', family: ['orange', 'warm'] },\n    { name: 'マンゴータンゴ', css: 'linear-gradient(135deg, #FF8008 0%, #FFC837 100%)', family: ['orange', 'yellow'] },\n    { name: 'エンバーグロウ', css: 'linear-gradient(135deg, #e14fad 0%, #f9d423 100%)', family: ['orange', 'pink', 'warm'] },\n    { name: 'クリームシクル', css: 'linear-gradient(135deg, #FFB347 0%, #FFCC33 100%)', family: ['orange', 'yellow', 'pastel'] },\n    { name: 'タンジェリンドリーム', css: 'linear-gradient(135deg, #FF6B35 0%, #F7C59F 100%)', family: ['orange', 'pastel'] },\n    { name: 'ブロンズ', css: 'linear-gradient(135deg, #a0522d 0%, #d2691e 50%, #f4a460 100%)', family: ['orange', 'warm'] },\n\n    // イエロー\n    { name: 'ゴールデンアワー', css: 'linear-gradient(135deg, #f6d365 0%, #fda085 100%)', family: ['yellow', 'orange', 'warm'] },\n    { name: 'レモン', css: 'linear-gradient(135deg, #FFE000 0%, #799F0C 100%)', family: ['yellow', 'green'] },\n    { name: 'ハニーコム', css: 'linear-gradient(135deg, #f7971e 0%, #ffd200 100%)', family: ['yellow', 'orange'] },\n    { name: 'ひまわり', css: 'linear-gradient(135deg, #DAA520 0%, #FFD700 50%, #FFFACD 100%)', family: ['yellow', 'pastel'] },\n    { name: 'カナリア', css: 'linear-gradient(135deg, #FDFC47 0%, #24FE41 100%)', family: ['yellow', 'green'] },\n    { name: 'バタースコッチ', css: 'linear-gradient(135deg, #f7e98e 0%, #e8b86d 100%)', family: ['yellow', 'pastel', 'warm'] },\n    { name: 'ネオンイエロー', css: 'linear-gradient(135deg, #ccff00 0%, #ffef00 100%)', family: ['yellow', 'green'] },\n\n    // グリーン\n    { name: 'エメラルド', css: 'linear-gradient(135deg, #0f9b58 0%, #00bf8f 100%)', family: ['green', 'teal'] },\n    { name: '森林', css: 'linear-gradient(135deg, #134e5e 0%, #71b280 100%)', family: ['green', 'teal', 'dark'] },\n    { name: '草原', css: 'linear-gradient(135deg, #a8e063 0%, #56ab2f 100%)', family: ['green'] },\n    { name: 'ライムソーダ', css: 'linear-gradient(135deg, #96fbc4 0%, #f9f586 100%)', family: ['green', 'yellow', 'pastel'] },\n    { name: 'ミントチップ', css: 'linear-gradient(135deg, #b2fefa 0%, #0ed2f7 100%)', family: ['green', 'teal', 'pastel'] },\n    { name: 'ジャングル', css: 'linear-gradient(135deg, #4ca1af 0%, #c4e0e5 100%)', family: ['green', 'teal', 'pastel'] },\n    { name: '抹茶ラテ', css: 'linear-gradient(135deg, #C6D68F 0%, #F0E68C 100%)', family: ['green', 'yellow', 'pastel'] },\n    { name: 'ネオンライム', css: 'linear-gradient(135deg, #39FF14 0%, #00bfff 100%)', family: ['green', 'blue'] },\n    { name: '熱帯雨林', css: 'linear-gradient(135deg, #1a3c34 0%, #2d7a5f 50%, #4caf7d 100%)', family: ['green', 'dark'] },\n    { name: 'キウイ', css: 'linear-gradient(135deg, #93f9b9 0%, #1d976c 100%)', family: ['green', 'teal'] },\n\n    // ティール\n    { name: '海風', css: 'linear-gradient(135deg, #00b4db 0%, #0083b0 100%)', family: ['teal', 'blue'] },\n    { name: 'アクアマリン', css: 'linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)', family: ['teal', 'green'] },\n    { name: 'ラグーン', css: 'linear-gradient(135deg, #43CBFF 0%, #9708CC 100%)', family: ['teal', 'purple'] },\n    { name: 'シーフォーム', css: 'linear-gradient(135deg, #E0F7FA 0%, #80DEEA 50%, #00ACC1 100%)', family: ['teal', 'pastel'] },\n    { name: '深海', css: 'linear-gradient(135deg, #001B2E 0%, #004E7C 50%, #0099AA 100%)', family: ['teal', 'dark', 'blue'] },\n    { name: 'ターコイズ', css: 'linear-gradient(135deg, #11998e 0%, #38ef7d 100%)', family: ['teal', 'green'] },\n    { name: 'アクアスプラッシュ', css: 'linear-gradient(135deg, #13547a 0%, #80d0c7 100%)', family: ['teal', 'blue'] },\n    { name: '北極の霧', css: 'linear-gradient(135deg, #DFFFCD 0%, #90F9C4 50%, #39F3BB 100%)', family: ['teal', 'green', 'pastel'] },\n\n    // ブルー\n    { name: 'ロイヤルブルー', css: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)', family: ['blue', 'purple'] },\n    { name: 'ブルーベリー', css: 'linear-gradient(135deg, #1e3c72 0%, #2a5298 100%)', family: ['blue', 'dark'] },\n    { name: 'スカイドリーム', css: 'linear-gradient(135deg, #89f7fe 0%, #66a6ff 100%)', family: ['blue', 'pastel'] },\n    { name: 'サファイア', css: 'linear-gradient(135deg, #0F2027 0%, #203A43 50%, #2C5364 100%)', family: ['blue', 'dark'] },\n    { name: '真夜中', css: 'linear-gradient(135deg, #2c3e50 0%, #4ca1af 100%)', family: ['blue', 'dark', 'teal'] },\n    { name: 'コバルト', css: 'linear-gradient(135deg, #004bff 0%, #007cff 100%)', family: ['blue'] },\n    { name: 'エレクトリックブルー', css: 'linear-gradient(135deg, #0072ff 0%, #00c6ff 100%)', family: ['blue', 'teal'] },\n    { name: 'デニム', css: 'linear-gradient(135deg, #1e3a5f 0%, #2980b9 100%)', family: ['blue', 'dark'] },\n    { name: '北極オーロラ', css: 'linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%)', family: ['blue', 'dark'] },\n    { name: 'ベビーブルー', css: 'linear-gradient(135deg, #c2e9fb 0%, #a1c4fd 100%)', family: ['blue', 'pastel'] },\n    { name: '氷河', css: 'linear-gradient(135deg, #E8F4FD 0%, #AED6F1 100%)', family: ['blue', 'pastel'] },\n    { name: 'ネプチューン', css: 'linear-gradient(135deg, #24C6DC 0%, #514A9D 100%)', family: ['blue', 'purple'] },\n\n    // パープル\n    { name: 'アメジスト', css: 'linear-gradient(135deg, #9D50BB 0%, #6E48AA 100%)', family: ['purple'] },\n    { name: 'グレープ', css: 'linear-gradient(135deg, #4776E6 0%, #8E54E9 100%)', family: ['purple', 'blue'] },\n    { name: '黄昏', css: 'linear-gradient(135deg, #a18cd1 0%, #fbc2eb 100%)', family: ['purple', 'pink', 'pastel'] },\n    { name: 'コズミック', css: 'linear-gradient(135deg, #020024 0%, #090979 50%, #00d4ff 100%)', family: ['purple', 'blue', 'dark'] },\n    { name: 'ラベンダー', css: 'linear-gradient(135deg, #e9d5ff 0%, #a855f7 100%)', family: ['purple', 'pastel'] },\n    { name: '銀河', css: 'linear-gradient(135deg, #2c1654 0%, #6a0572 50%, #d63031 100%)', family: ['purple', 'dark', 'red'] },\n    { name: 'プラム', css: 'linear-gradient(135deg, #4B0082 0%, #8B00FF 100%)', family: ['purple', 'dark'] },\n    { name: 'ライラック', css: 'linear-gradient(135deg, #c3cfe2 0%, #f5f7fa 100%)', family: ['purple', 'pastel'] },\n    { name: 'ウルトラバイオレット', css: 'linear-gradient(135deg, #5f0a87 0%, #a4508b 100%)', family: ['purple'] },\n    { name: 'トワイライト', css: 'linear-gradient(135deg, #0F0C29 0%, #302B63 50%, #24243e 100%)', family: ['purple', 'dark'] },\n\n    // ダーク\n    { name: 'オブシディアン', css: 'linear-gradient(135deg, #1a1a2e 0%, #16213e 100%)', family: ['dark'] },\n    { name: 'カーボン', css: 'linear-gradient(135deg, #1c1c1c 0%, #3d3d3d 100%)', family: ['dark'] },\n    { name: 'ガンメタル', css: 'linear-gradient(135deg, #29323c 0%, #485563 100%)', family: ['dark'] },\n    { name: 'シャドウ', css: 'linear-gradient(135deg, #000000 0%, #434343 100%)', family: ['dark'] },\n    { name: 'スレート', css: 'linear-gradient(135deg, #0f2027 0%, #203a43 100%)', family: ['dark', 'blue'] },\n    { name: 'ノワール', css: 'linear-gradient(135deg, #000000 0%, #7b7b7b 100%)', family: ['dark'] },\n    { name: 'アッシュ', css: 'linear-gradient(135deg, #606c88 0%, #3f4c6b 100%)', family: ['dark', 'blue'] },\n    { name: 'チャコール', css: 'linear-gradient(135deg, #333333 0%, #dd1818 100%)', family: ['dark', 'red'] },\n    { name: 'ストーム', css: 'linear-gradient(135deg, #373B44 0%, #4286f4 100%)', family: ['dark', 'blue'] },\n\n    // パステル\n    { name: 'パステルレインボー', css: 'linear-gradient(135deg, #FFDEE9 0%, #B5FFFC 100%)', family: ['pastel', 'multi'] },\n    { name: 'ソフトピーチ', css: 'linear-gradient(135deg, #FFE0B2 0%, #FFCCBC 100%)', family: ['pastel', 'orange', 'warm'] },\n    { name: '夢見る', css: 'linear-gradient(135deg, #e0c3fc 0%, #8ec5fc 100%)', family: ['pastel', 'purple', 'blue'] },\n    { name: '雲の上', css: 'linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%)', family: ['pastel', 'blue'] },\n    { name: 'ソルベ', css: 'linear-gradient(135deg, #fccb90 0%, #d57eeb 100%)', family: ['pastel', 'pink', 'orange'] },\n    { name: 'メロン', css: 'linear-gradient(135deg, #fddb92 0%, #d1fdff 100%)', family: ['pastel', 'yellow'] },\n    { name: 'パウダーブルー', css: 'linear-gradient(135deg, #dfe9f3 0%, #ffffff 100%)', family: ['pastel', 'blue'] },\n    { name: 'バブルガム', css: 'linear-gradient(135deg, #FFC8DD 0%, #BDE0FE 100%)', family: ['pastel', 'pink', 'blue'] },\n    { name: 'アイスクリーム', css: 'linear-gradient(135deg, #ffc3a0 0%, #FFAFBD 100%)', family: ['pastel', 'pink', 'orange'] },\n    { name: 'ソフトミント', css: 'linear-gradient(135deg, #B5EAD7 0%, #C7CEEA 100%)', family: ['pastel', 'green', 'purple'] },\n\n    // ウォーム\n    { name: 'モハベ', css: 'linear-gradient(135deg, #f9a825 0%, #e65100 100%)', family: ['warm', 'orange'] },\n    { name: 'キャラメル', css: 'linear-gradient(135deg, #C6A35D 0%, #8B5E3C 100%)', family: ['warm', 'orange'] },\n    { name: 'テラコッタ', css: 'linear-gradient(135deg, #C46A39 0%, #7C3C21 100%)', family: ['warm', 'red', 'orange'] },\n    { name: 'シナモン', css: 'linear-gradient(135deg, #D2691E 0%, #F4A460 100%)', family: ['warm', 'orange'] },\n    { name: 'ピーチファズ', css: 'linear-gradient(135deg, #FFBE98 0%, #FFD3BA 100%)', family: ['warm', 'orange', 'pastel'] },\n\n    // マルチ\n    { name: 'プリズム', css: 'linear-gradient(135deg, #ff0000, #ff7700, #ffff00, #00ff00, #0000ff, #8b00ff)', family: ['multi'] },\n    { name: 'オーロラ', css: 'linear-gradient(135deg, #43e97b 0%, #38f9d7 33%, #4facfe 66%, #a18cd1 100%)', family: ['multi', 'green', 'blue', 'purple'] },\n    { name: 'カーニバル', css: 'linear-gradient(135deg, #FF3CAC 0%, #784BA0 50%, #2B86C5 100%)', family: ['multi', 'pink', 'purple', 'blue'] },\n    { name: 'ホログラフィック', css: 'linear-gradient(135deg, #a8edea 0%, #fed6e3 33%, #ffecd2 66%, #a8edea 100%)', family: ['multi', 'pastel'] },\n    { name: '夕焼け', css: 'linear-gradient(135deg, #FDBB2D 0%, #3A1C71 100%)', family: ['multi', 'yellow', 'purple'] },\n    { name: 'オパール', css: 'linear-gradient(135deg, #c3cfe2 0%, #f5f7fa 25%, #e0c3fc 75%, #8ec5fc 100%)', family: ['multi', 'pastel'] },\n    { name: 'ヴェイパーウェーブ', css: 'linear-gradient(135deg, #ff71ce 0%, #01cdfe 50%, #05ffa1 100%)', family: ['multi', 'pink', 'teal', 'green'] },\n    { name: 'ネオンオーロラ', css: 'linear-gradient(135deg, #00c6ff 0%, #0072ff 33%, #a100ff 66%, #ff00ff 100%)', family: ['multi', 'blue', 'purple'] },\n    { name: 'タイダイ', css: 'linear-gradient(135deg, #FF61D2 0%, #FE9090 25%, #FFED86 50%, #83FF85 75%, #92FFFC 100%)', family: ['multi', 'pastel'] },\n    { name: 'オイルスリック', css: 'linear-gradient(135deg, #202020 0%, #1e3a5f 25%, #4a0e8f 50%, #8b0000 75%, #202020 100%)', family: ['multi', 'dark'] },\n\n    // 特殊\n    { name: '星雲', css: 'radial-gradient(ellipse at top, #1a1a3e 0%, #6b21a8 50%, #1a1a3e 100%)', family: ['purple', 'dark'] },\n    { name: '太陽', css: 'radial-gradient(circle at center, #FFD700 0%, #FF8C00 50%, #FF4500 100%)', family: ['yellow', 'orange', 'warm'] },\n    { name: '月の出', css: 'radial-gradient(ellipse at bottom, #1b2735 0%, #090a0f 100%)', family: ['dark', 'blue'] },\n    { name: 'ハロー', css: 'radial-gradient(circle at center, #ffffff 0%, #e8f4fd 40%, #aed6f1 100%)', family: ['blue', 'pastel'] },\n    { name: 'ネオングロウ', css: 'radial-gradient(circle at center, #39ff14 0%, #001a00 100%)', family: ['green', 'dark'] },\n    { name: 'コニックホイール', css: 'conic-gradient(from 0deg, #ff0000, #ffff00, #00ff00, #00ffff, #0000ff, #ff00ff, #ff0000)', family: ['multi'] },\n    { name: 'コニックパステル', css: 'conic-gradient(from 45deg, #fbc2eb, #a6c1ee, #ffecd2, #d4fc79, #fbc2eb)', family: ['multi', 'pastel'] },\n    { name: 'パイスライス', css: 'conic-gradient(#e74c3c 0deg 90deg, #3498db 90deg 180deg, #2ecc71 180deg 270deg, #f39c12 270deg 360deg)', family: ['multi'] },\n  ];\n\n  let currentFamily = 'all';\n  let currentSearch = '';\n  let custGradient = null;\n\n  const grid = document.getElementById('gg-grid');\n  const empty = document.getElementById('gg-empty');\n  const countEl = document.getElementById('gg-count');\n  const searchEl = document.getElementById('gg-search');\n  const customizer = document.getElementById('gg-customizer');\n  const custPreview = document.getElementById('gg-cust-preview');\n  const custType = document.getElementById('gg-cust-type');\n  const custAngle = document.getElementById('gg-cust-angle');\n  const angleVal = document.getElementById('gg-angle-val');\n  const angleRow = document.getElementById('gg-angle-row');\n  const custC1 = document.getElementById('gg-cust-c1');\n  const custC2 = document.getElementById('gg-cust-c2');\n  const c1Pct = document.getElementById('gg-c1-pct');\n  const c2Pct = document.getElementById('gg-c2-pct');\n  const custCode = document.getElementById('gg-cust-code');\n  const custCopy = document.getElementById('gg-cust-copy');\n  const fullscreen = document.getElementById('gg-fullscreen');\n  const toast = document.getElementById('gg-toast');\n\n  function showToast(msg) {\n    toast.textContent = msg;\n    toast.classList.add('show');\n    setTimeout(() =\u003e toast.classList.remove('show'), 2000);\n  }\n\n  function copyText(text) {\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(text).catch(() =\u003e fallbackCopy(text));\n    } else {\n      fallbackCopy(text);\n    }\n  }\n\n  function fallbackCopy(text) {\n    const ta = document.createElement('textarea');\n    ta.value = text;\n    ta.style.position = 'fixed';\n    ta.style.opacity = '0';\n    document.body.appendChild(ta);\n    ta.select();\n    document.execCommand('copy');\n    document.body.removeChild(ta);\n  }\n\n  function matchesFilter(g) {\n    if (currentFamily !== 'all' \u0026\u0026 !g.family.includes(currentFamily)) return false;\n    if (currentSearch) {\n      const q = currentSearch.toLowerCase();\n      if (!g.name.toLowerCase().includes(q) \u0026\u0026 !g.css.toLowerCase().includes(q) \u0026\u0026 !g.family.join(' ').includes(q)) return false;\n    }\n    return true;\n  }\n\n  function buildGrid() {\n    const cards = grid.querySelectorAll('.gg-card');\n    cards.forEach(c =\u003e c.remove());\n\n    const filtered = GRADIENTS.filter(matchesFilter);\n    countEl.textContent = filtered.length + '件のグラデーション';\n\n    if (filtered.length === 0) {\n      empty.style.display = 'block';\n      return;\n    }\n    empty.style.display = 'none';\n\n    filtered.forEach((g) =\u003e {\n      const card = document.createElement('div');\n      card.className = 'gg-card';\n      card.innerHTML =\n        '\u003cdiv class=\"gg-swatch\" style=\"background:' + g.css + '\"\u003e\u003c/div\u003e' +\n        '\u003cdiv class=\"gg-info\"\u003e' +\n          '\u003cdiv class=\"gg-name\"\u003e' + escHtml(g.name) + '\u003c/div\u003e' +\n          '\u003cdiv class=\"gg-css-preview\"\u003e' + escHtml(g.css) + '\u003c/div\u003e' +\n          '\u003cbutton class=\"gg-copy-btn\"\u003eCSSをコピー\u003c/button\u003e' +\n        '\u003c/div\u003e';\n\n      const swatch = card.querySelector('.gg-swatch');\n      const btn = card.querySelector('.gg-copy-btn');\n\n      swatch.addEventListener('click', () =\u003e openCustomizer(g));\n      card.querySelector('.gg-name').addEventListener('click', () =\u003e openCustomizer(g));\n\n      btn.addEventListener('click', (e) =\u003e {\n        e.stopPropagation();\n        const css = 'background: ' + g.css + ';';\n        copyText(css);\n        btn.textContent = 'コピー完了！';\n        btn.classList.add('copied');\n        showToast('クリップボードにコピーしました！');\n        setTimeout(() =\u003e {\n          btn.textContent = 'CSSをコピー';\n          btn.classList.remove('copied');\n        }, 1800);\n      });\n\n      swatch.addEventListener('dblclick', (e) =\u003e {\n        e.stopPropagation();\n        openFullscreen(g.css);\n      });\n\n      grid.appendChild(card);\n    });\n  }\n\n  function escHtml(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  function openCustomizer(g) {\n    custGradient = g;\n    if (g.css.startsWith('radial')) {\n      custType.value = 'radial';\n    } else if (g.css.startsWith('conic')) {\n      custType.value = 'conic';\n    } else {\n      custType.value = 'linear';\n    }\n    const colorMatch = g.css.match(/#[0-9a-fA-F]{3,6}/g);\n    if (colorMatch \u0026\u0026 colorMatch.length \u003e= 2) {\n      custC1.value = normalizeHex(colorMatch[0]);\n      custC2.value = normalizeHex(colorMatch[colorMatch.length - 1]);\n    }\n    c1Pct.value = 0;\n    c2Pct.value = 100;\n    const angleMatch = g.css.match(/(\\d+)deg/);\n    if (angleMatch) {\n      custAngle.value = parseInt(angleMatch[1]);\n      angleVal.textContent = custAngle.value + '°';\n    }\n    updateAngleRow();\n    updateCustPreview();\n    customizer.classList.add('open');\n  }\n\n  function normalizeHex(hex) {\n    if (hex.length === 4) {\n      return '#' + hex[1]+hex[1]+hex[2]+hex[2]+hex[3]+hex[3];\n    }\n    return hex;\n  }\n\n  function updateAngleRow() {\n    angleRow.style.display = custType.value === 'linear' ? 'flex' : 'none';\n  }\n\n  function buildCustCSS() {\n    const c1 = custC1.value, c2 = custC2.value;\n    const p1 = c1Pct.value, p2 = c2Pct.value;\n    const angle = custAngle.value;\n    const type = custType.value;\n    if (type === 'radial') {\n      return 'radial-gradient(ellipse at center, ' + c1 + ' ' + p1 + '%, ' + c2 + ' ' + p2 + '%)';\n    } else if (type === 'conic') {\n      return 'conic-gradient(from ' + angle + 'deg, ' + c1 + ' 0%, ' + c2 + ' 100%)';\n    } else {\n      return 'linear-gradient(' + angle + 'deg, ' + c1 + ' ' + p1 + '%, ' + c2 + ' ' + p2 + '%)';\n    }\n  }\n\n  function updateCustPreview() {\n    const css = buildCustCSS();\n    custPreview.style.background = css;\n    custCode.textContent = 'background: ' + css + ';';\n  }\n\n  custType.addEventListener('change', () =\u003e { updateAngleRow(); updateCustPreview(); });\n  custAngle.addEventListener('input', () =\u003e { angleVal.textContent = custAngle.value + '°'; updateCustPreview(); });\n  custC1.addEventListener('input', updateCustPreview);\n  custC2.addEventListener('input', updateCustPreview);\n  c1Pct.addEventListener('input', updateCustPreview);\n  c2Pct.addEventListener('input', updateCustPreview);\n\n  custCopy.addEventListener('click', () =\u003e {\n    const css = custCode.textContent;\n    copyText(css);\n    custCopy.textContent = 'コピー完了！';\n    custCopy.classList.add('copied');\n    showToast('クリップボードにコピーしました！');\n    setTimeout(() =\u003e {\n      custCopy.textContent = 'CSSをコピー';\n      custCopy.classList.remove('copied');\n    }, 1800);\n  });\n\n  document.getElementById('gg-cust-close').addEventListener('click', () =\u003e {\n    customizer.classList.remove('open');\n  });\n\n  function openFullscreen(css) {\n    fullscreen.style.background = css;\n    fullscreen.classList.add('open');\n  }\n\n  fullscreen.addEventListener('click', () =\u003e {\n    fullscreen.classList.remove('open');\n  });\n\n  searchEl.addEventListener('input', () =\u003e {\n    currentSearch = searchEl.value.trim();\n    buildGrid();\n  });\n\n  document.querySelectorAll('.gg-filter').forEach(btn =\u003e {\n    btn.addEventListener('click', () =\u003e {\n      document.querySelectorAll('.gg-filter').forEach(b =\u003e b.classList.remove('active'));\n      btn.classList.add('active');\n      currentFamily = btn.dataset.family;\n      buildGrid();\n    });\n  });\n\n  buildGrid();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003cp\u003e100種類以上のCSSグラデーションプリセットを一覧で閲覧できます。カードをクリックするとカスタマイザーが開き、色・角度・種類を自由に調整できます。スウォッチをダブルクリックするとフルスクリーンプレビューが表示されます。\u003c/p\u003e","title":"グラデーションギャラリー"},{"content":"本記事にはアフィリエイトリンクが含まれています。紹介料が発生する場合がありますが、読者の追加費用はありません。\n配当収入計算ツール 投資金額と配当利回りを入力して、年間・月間の配当収入を試算しましょう。**配当再投資（DRIP）**の複利効果も確認できます。\n投資金額（円） 10万円500万円1億円 配当利回り（%） 0.5%3.0%10% 配当再投資（DRIP） あり（複利で増やす） なし（現金で受け取る） 配当課税率 0%（非課税口座・NISA等） 20.315%（国内源泉徴収） 15%（外国税額控除適用後） 30%（総合課税・高所得者） 投資期間（年） 1年10年30年 人気の高配当ETF（参考） 配当投資の仕組み 配当とは？ 配当とは、企業が利益の一部を株主に現金で還元するものです。配当株・配当ETFを保有することで、株を持っているだけで定期的（通常は年2〜4回）に収入を得られます。\n配当利回りの計算式 配 当 利 回 り （ % ） = 1 株 あ た り 年 間 配 当 金 ÷ 株 価 × 1 0 0 株価1,000円の株が年間35円の配当を出す場合、配当利回りは3.5%です。\nDRIP（配当再投資）の威力 配当を再投資して株数を増やすことで複利効果が生まれます。配当がさらに配当を生む仕組みです。長期間継続すると、現金受取に比べて総リターンが大幅に向上します。\n税金の考慮 国内株の配当：通常20.315%が源泉徴収（申告分離課税） NISA口座：配当・売却益が非課税（積立NISAは年間120万円まで） 外国株の配当：現地課税＋国内課税の二重課税（外国税額控除で一部還付可能） 投資ポートフォリオ全体の成長を確認したい方は → 複利計算ツール 配当を活用した早期退職計画は → FIREシミュレーター 関連ツール\n予算プランナー 緊急資金計算ツール FIREシミュレーター 資産管理を効率化 → freee会計で家計を自動管理 ","permalink":"https://productivity-works.com/ja/tools/dividend-income-calculator/","summary":"\u003cp\u003e\u003cem\u003e本記事にはアフィリエイトリンクが含まれています。紹介料が発生する場合がありますが、読者の追加費用はありません。\u003c/em\u003e\u003c/p\u003e\n\u003ch1 id=\"配当収入計算ツール\"\u003e配当収入計算ツール\u003c/h1\u003e\n\u003cp\u003e投資金額と配当利回りを入力して、\u003cstrong\u003e年間・月間の配当収入\u003c/strong\u003eを試算しましょう。**配当再投資（DRIP）**の複利効果も確認できます。\u003c/p\u003e\n\u003cdiv id=\"dc-calc\" style=\"max-width:700px;margin:0 auto;font-family:Inter,sans-serif;\"\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:20px;\"\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e投資金額（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"dcAmount\" min=\"100000\" max=\"100000000\" step=\"100000\" value=\"5000000\" oninput=\"calcDC()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:12px;color:#64748b;\"\u003e\u003cspan\u003e10万円\u003c/span\u003e\u003cspan id=\"dcAmtVal\" style=\"font-weight:bold;font-size:20px;color:#2563eb;\"\u003e500万円\u003c/span\u003e\u003cspan\u003e1億円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e配当利回り（%）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"dcYield\" min=\"0.5\" max=\"10\" step=\"0.1\" value=\"3.0\" oninput=\"calcDC()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:12px;color:#64748b;\"\u003e\u003cspan\u003e0.5%\u003c/span\u003e\u003cspan id=\"dcYldVal\" style=\"font-weight:bold;font-size:20px;color:#10b981;\"\u003e3.0%\u003c/span\u003e\u003cspan\u003e10%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:16px;\"\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e配当再投資（DRIP）\u003c/label\u003e\n\u003cselect id=\"dcDRIP\" onchange=\"calcDC()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#fff;\"\u003e\n\u003coption value=\"yes\"\u003eあり（複利で増やす）\u003c/option\u003e\n\u003coption value=\"no\"\u003eなし（現金で受け取る）\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e配当課税率\u003c/label\u003e\n\u003cselect id=\"dcTax\" onchange=\"calcDC()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#fff;\"\u003e\n\u003coption value=\"0\"\u003e0%（非課税口座・NISA等）\u003c/option\u003e\n\u003coption value=\"20\" selected\u003e20.315%（国内源泉徴収）\u003c/option\u003e\n\u003coption value=\"15\"\u003e15%（外国税額控除適用後）\u003c/option\u003e\n\u003coption value=\"30\"\u003e30%（総合課税・高所得者）\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e投資期間（年）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"dcYears\" min=\"1\" max=\"30\" step=\"1\" value=\"10\" oninput=\"calcDC()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:12px;color:#64748b;\"\u003e\u003cspan\u003e1年\u003c/span\u003e\u003cspan id=\"dcYrsVal\" style=\"font-weight:bold;font-size:18px;color:#f59e0b;\"\u003e10年\u003c/span\u003e\u003cspan\u003e30年\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"dcResult\" style=\"margin-top:24px;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"dcTimeline\" style=\"margin-top:24px;padding:24px;border:2px solid #10b981;border-radius:12px;background:#f0fdf4;\"\u003e\u003c/div\u003e\n\u003cdiv style=\"margin-top:24px;padding:24px;border:2px solid #f59e0b;border-radius:12px;background:#fffbeb;\"\u003e\n\u003ch3 style=\"margin:0 0 12px;color:#92400e;font-size:16px;\"\u003e人気の高配当ETF（参考）\u003c/h3\u003e\n\u003cdiv id=\"dcETF\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction fmtJP(n){\n  if(n\u003e=100000000) return (n/100000000).toFixed(2)+'億円';\n  if(n\u003e=10000) return Math.round(n/10000).toLocaleString('ja-JP')+'万円';\n  return Math.round(n).toLocaleString('ja-JP')+'円';\n}\nfunction fmtD(n){return Math.round(n).toLocaleString('ja-JP');}\n\nfunction calcDC(){\n  var amount=+document.getElementById('dcAmount').value;\n  var yieldRate=+document.getElementById('dcYield').value;\n  var drip=document.getElementById('dcDRIP').value;\n  var taxPct=+document.getElementById('dcTax').value;\n  var years=+document.getElementById('dcYears').value;\n\n  document.getElementById('dcAmtVal').textContent=fmtJP(amount);\n  document.getElementById('dcYldVal').textContent=yieldRate.toFixed(1)+'%';\n  document.getElementById('dcYrsVal').textContent=years+'年';\n\n  var rate=yieldRate/100;\n  var taxRate=taxPct/100;\n\n  var annualDiv=amount*rate;\n  var annualNet=annualDiv*(1-taxRate);\n  var monthlyNet=annualNet/12;\n\n  // Result summary\n  var html='\u003cdiv style=\"text-align:center;padding:20px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e';\n  html+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003e年間配当収入（税引後）\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:40px;font-weight:bold;color:#10b981;\"\u003e'+fmtJP(annualNet)+'\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:14px;color:#64748b;margin-top:4px;\"\u003e月額: \u003cstrong style=\"color:#2563eb;\"\u003e'+fmtJP(monthlyNet)+'\u003c/strong\u003e\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n\n  html+='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-top:16px;text-align:center;\"\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e配当総額（税前）\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;color:#1e293b;\"\u003e'+fmtJP(annualDiv)+'\u003cspan style=\"font-size:11px;\"\u003e/年\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  var taxAmt=annualDiv*taxRate;\n  html+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e源泉徴収税額\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;color:'+(taxRate\u003e0?'#ef4444':'#10b981')+';\"\u003e'+fmtJP(taxAmt)+'\u003cspan style=\"font-size:11px;\"\u003e/年\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e実質利回り\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;color:#f59e0b;\"\u003e'+(yieldRate*(1-taxRate)).toFixed(2)+'\u003cspan style=\"font-size:11px;\"\u003e%\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n\n  document.getElementById('dcResult').innerHTML=html;\n\n  // Timeline\n  var thtml='\u003ch3 style=\"margin:0 0 12px;color:#166534;font-size:16px;\"\u003e'+years+'年間の配当収入推移\u003c/h3\u003e';\n  thtml+='\u003ctable style=\"width:100%;border-collapse:collapse;font-size:13px;\"\u003e';\n  thtml+='\u003ctr style=\"border-bottom:2px solid #10b981;\"\u003e\u003cth style=\"text-align:left;padding:6px;\"\u003e年\u003c/th\u003e\u003cth style=\"text-align:right;padding:6px;\"\u003eポートフォリオ\u003c/th\u003e\u003cth style=\"text-align:right;padding:6px;\"\u003e年間配当\u003c/th\u003e\u003cth style=\"text-align:right;padding:6px;\"\u003e累計配当\u003c/th\u003e\u003c/tr\u003e';\n\n  var balance=amount;\n  var totalDiv=0;\n  var showYears=[];\n  if(years\u003c=10){for(var i=1;i\u003c=years;i++) showYears.push(i);}\n  else{showYears=[1,2,3,5];for(var i=10;i\u003c=years;i+=5) showYears.push(i);if(showYears[showYears.length-1]!==years) showYears.push(years);}\n\n  var yearData=[];\n  for(var y=1;y\u003c=years;y++){\n    var div=balance*rate;\n    var divNet=div*(1-taxRate);\n    totalDiv+=divNet;\n    if(drip==='yes') balance+=divNet;\n    yearData.push({year:y,balance:balance,div:divNet,total:totalDiv});\n  }\n\n  for(var i=0;i\u003cshowYears.length;i++){\n    var d=yearData[showYears[i]-1];\n    var bg=i%2===0?'#fff':'#f0fdf4';\n    var bold=showYears[i]===years?'font-weight:bold;':'';\n    thtml+='\u003ctr style=\"background:'+bg+';'+bold+'\"\u003e';\n    thtml+='\u003ctd style=\"padding:6px;\"\u003e'+d.year+'年目\u003c/td\u003e';\n    thtml+='\u003ctd style=\"padding:6px;text-align:right;\"\u003e'+fmtJP(d.balance)+'\u003c/td\u003e';\n    thtml+='\u003ctd style=\"padding:6px;text-align:right;\"\u003e'+fmtJP(d.div)+'\u003c/td\u003e';\n    thtml+='\u003ctd style=\"padding:6px;text-align:right;color:#10b981;\"\u003e'+fmtJP(d.total)+'\u003c/td\u003e';\n    thtml+='\u003c/tr\u003e';\n  }\n  thtml+='\u003c/table\u003e';\n\n  var finalData=yearData[years-1];\n  thtml+='\u003cdiv style=\"margin-top:12px;padding:12px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;text-align:center;\"\u003e';\n  thtml+='\u003cspan style=\"font-size:13px;color:#64748b;\"\u003e'+years+'年後のポートフォリオ: \u003c/span\u003e';\n  thtml+='\u003cspan style=\"font-size:20px;font-weight:bold;color:#166534;\"\u003e'+fmtJP(drip==='yes'?finalData.balance:amount)+'\u003c/span\u003e';\n  if(drip==='no'){\n    thtml+='\u003cspan style=\"font-size:13px;color:#64748b;\"\u003e + 累計配当: \u003c/span\u003e';\n    thtml+='\u003cspan style=\"font-size:20px;font-weight:bold;color:#10b981;\"\u003e'+fmtJP(finalData.total)+'\u003c/span\u003e';\n  }\n  thtml+='\u003c/div\u003e';\n\n  if(drip==='yes'){\n    var noReinvest=amount*rate*(1-taxRate)*years;\n    var diff=finalData.total-noReinvest;\n    thtml+='\u003cdiv style=\"margin-top:8px;font-size:12px;color:#166534;text-align:center;\"\u003eDRIP複利ボーナス: \u003cstrong\u003e+'+fmtJP(diff)+'\u003c/strong\u003e（現金受取との比較）\u003c/div\u003e';\n  }\n\n  document.getElementById('dcTimeline').innerHTML=thtml;\n\n  // ETF comparison (Japan-focused)\n  var etfs=[\n    {name:'VYM',desc:'バンガード高配当利回りETF',yield:2.8,expense:0.06},\n    {name:'HDV',desc:'iShares コア高配当ETF',yield:3.5,expense:0.08},\n    {name:'SPYD',desc:'SPDR S\u0026P500高配当ETF',yield:4.5,expense:0.07},\n    {name:'SCHD',desc:'シュワブ米国配当株式ETF',yield:3.4,expense:0.06},\n    {name:'VIG',desc:'バンガード増配株式ETF',yield:1.8,expense:0.06},\n    {name:'JEPI',desc:'JPモルガン・プレミアム・インカムETF',yield:7.5,expense:0.35}\n  ];\n\n  var ehtml='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:10px;\"\u003e';\n  for(var i=0;i\u003cetfs.length;i++){\n    var annDivE=amount*etfs[i].yield/100*(1-taxRate);\n    ehtml+='\u003cdiv style=\"padding:10px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e';\n    ehtml+='\u003cdiv style=\"display:flex;justify-content:space-between;align-items:center;\"\u003e';\n    ehtml+='\u003cspan style=\"font-weight:bold;font-size:14px;color:#1e293b;\"\u003e'+etfs[i].name+'\u003c/span\u003e';\n    ehtml+='\u003cspan style=\"font-size:14px;font-weight:bold;color:#10b981;\"\u003e'+etfs[i].yield+'%\u003c/span\u003e';\n    ehtml+='\u003c/div\u003e';\n    ehtml+='\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e'+etfs[i].desc+'（経費率: '+etfs[i].expense+'%）\u003c/div\u003e';\n    ehtml+='\u003cdiv style=\"font-size:12px;margin-top:4px;color:#2563eb;\"\u003e年間収入: \u003cstrong\u003e'+fmtJP(annDivE)+'\u003c/strong\u003e（税引後）\u003c/div\u003e';\n    ehtml+='\u003c/div\u003e';\n  }\n  ehtml+='\u003c/div\u003e';\n  ehtml+='\u003cdiv style=\"margin-top:8px;font-size:11px;color:#92400e;text-align:center;\"\u003e利回りは2026年5月時点の概算値。実際の配当は変動します。過去の実績は将来の成果を保証しません。\u003c/div\u003e';\n  document.getElementById('dcETF').innerHTML=ehtml;\n}\n\ndocument.addEventListener('DOMContentLoaded',function(){calcDC();});\ncalcDC();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"配当投資の仕組み\"\u003e配当投資の仕組み\u003c/h2\u003e\n\u003ch3 id=\"配当とは\"\u003e配当とは？\u003c/h3\u003e\n\u003cp\u003e配当とは、企業が利益の一部を株主に現金で還元するものです。配当株・配当ETFを保有することで、株を持っているだけで定期的（通常は年2〜4回）に収入を得られます。\u003c/p\u003e","title":"配当収入計算ツール | 年間・月間の配当収入を試算"},{"content":"JSONを貼り付けるだけで、インタラクティブなツリービューで構造を即座に探索できます。ノードをクリックするとドット記法・ブラケット記法の JSONPath式 が表示されます。プラグイン不要、ブラウザ完結、無料です。\nサンプルプリセット ユーザー情報 ECオーダー GitHub API 深いネスト JSONを貼り付け \u0026#128269; 探索する すべて展開 すべて折りたたむ クリア ノード数: 0 キー数: 0 配列数: 0 最大深度: 0 一致数: 0 ドット記法 コピー ブラケット コピー 値をコピー 上にJSONを貼り付けて 探索する をクリックしてください。 ドットパスをコピー ブラケットパスをコピー 値をコピー 使い方 上のテキストエリアに JSONを貼り付け（またはサンプルプリセットを選択） 探索する をクリック（Ctrl+Enter / Cmd+Enter でも可） ツリーの ノードをクリック してドット記法・ブラケット記法のJSONPathを確認 コピーボタン でパスや値をクリップボードへ 検索 でキー名・値に一致するノードをハイライト JSONPathとは？ JSONPathはJSON向けのクエリ言語で、XPathのJSON版です。複雑なJSON構造の中から特定の値を $.user.address.city や $[\u0026quot;items\u0026quot;][0][\u0026quot;price\u0026quot;] のような式で指定できます。主な用途：\nREST APIテスト（Postman・Insomniaのアサーション） AWS Step Functions（InputPath / OutputPath / ResultPath） Kubernetes マニフェスト・JSONパッチ ログ解析（Elasticsearch・Grafana） データ変換パイプライン 記法の比較 記法 例 特徴 ドット（シンプル） $.user.name 読みやすい・英数字キー向け ドット（インデックス） $.items[0].price 配列インデックスはブラケット ブラケット $[\u0026quot;user\u0026quot;][\u0026quot;name\u0026quot;] 日本語キーも含め常に安全 ブラケット（インデックス） $[\u0026quot;items\u0026quot;][0][\u0026quot;price\u0026quot;] 完全明示的 ヒント: 日本語や記号を含むキーはブラケット記法 $[\u0026quot;キー名\u0026quot;] を使用してください。ドット記法は英数字・アンダースコアのみのキーで有効です。\n関連ツール JSONフォーマッター — JSONの整形・バリデーション JSONスキーマジェネレーター — サンプルJSONからJSON Schemaを自動生成 JSON to CSV変換ツール — JSON配列をスプレッドシート形式に変換 freeeと連携してAPIデータを探索しよう freee APIのレスポンスJSONを解析する際にも、このツールが役立ちます。freee APIから取得した取引データや勘定科目データのJSONをそのまま貼り付けて、必要なフィールドのパスを即座に特定できます。\nfreeeユーザーの方へ: freee APIを使った自動化・データ連携にお困りですか？freee公認のAPI連携サービス で、会計データの活用をさらに効率化しましょう。開発者向けのドキュメントとサンドボックス環境が無料で利用可能です。\n確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/json-path-finder/","summary":"\u003cp\u003eJSONを貼り付けるだけで、インタラクティブなツリービューで構造を即座に探索できます。ノードをクリックするとドット記法・ブラケット記法の \u003cstrong\u003eJSONPath式\u003c/strong\u003e が表示されます。プラグイン不要、ブラウザ完結、無料です。\u003c/p\u003e\n\u003cdiv id=\"jpf-app\"\u003e\n\u003cstyle\u003e\n  #jpf-app *,\n  #jpf-app *::before,\n  #jpf-app *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n  #jpf-app {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Kaku Gothic ProN\", \"Yu Gothic\", Meiryo, sans-serif;\n    font-size: 15px;\n    color: #1a1a2e;\n    background: #f7f9fc;\n    border-radius: 12px;\n    padding: 20px;\n    margin: 24px 0;\n    border: 1px solid #dde3ef;\n  }\n  #jpf-app *,\n  #jpf-app *::before,\n  #jpf-app *::after {\n    box-sizing: border-box;\n  }\n  #jpf-app .jpf-toolbar {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin-bottom: 14px;\n    align-items: center;\n  }\n  #jpf-app .jpf-search-wrap {\n    flex: 1;\n    min-width: 180px;\n    position: relative;\n  }\n  #jpf-app .jpf-search {\n    width: 100%;\n    padding: 8px 12px 8px 34px;\n    border: 1px solid #c8d0e0;\n    border-radius: 7px;\n    font-size: 14px;\n    background: #fff;\n    outline: none;\n    transition: border-color .2s;\n  }\n  #jpf-app .jpf-search:focus { border-color: #4f8ef7; }\n  #jpf-app .jpf-search-icon {\n    position: absolute;\n    left: 10px;\n    top: 50%;\n    transform: translateY(-50%);\n    color: #8896b3;\n    font-size: 14px;\n    pointer-events: none;\n  }\n  #jpf-app .jpf-btn {\n    padding: 8px 14px;\n    border: 1px solid #c8d0e0;\n    border-radius: 7px;\n    background: #fff;\n    font-size: 13px;\n    cursor: pointer;\n    color: #3a4a6b;\n    transition: background .15s, border-color .15s;\n    white-space: nowrap;\n  }\n  #jpf-app .jpf-btn:hover { background: #eef2fb; border-color: #4f8ef7; }\n  #jpf-app .jpf-btn.jpf-btn-primary {\n    background: #4f8ef7;\n    color: #fff;\n    border-color: #4f8ef7;\n  }\n  #jpf-app .jpf-btn.jpf-btn-primary:hover { background: #3a7de0; }\n  #jpf-app .jpf-btn.jpf-btn-danger {\n    border-color: #e05a5a;\n    color: #c0392b;\n  }\n  #jpf-app .jpf-btn.jpf-btn-danger:hover { background: #fdecea; }\n  #jpf-app .jpf-presets {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    margin-bottom: 12px;\n  }\n  #jpf-app .jpf-preset-btn {\n    padding: 5px 11px;\n    border: 1px solid #c8d0e0;\n    border-radius: 20px;\n    background: #fff;\n    font-size: 12px;\n    cursor: pointer;\n    color: #4f6394;\n    transition: background .15s, border-color .15s;\n  }\n  #jpf-app .jpf-preset-btn:hover { background: #eef2fb; border-color: #4f8ef7; }\n  #jpf-app .jpf-label {\n    font-size: 11px;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: .05em;\n    color: #7a88a8;\n    margin-bottom: 5px;\n  }\n  #jpf-app .jpf-input-area {\n    width: 100%;\n    min-height: 130px;\n    padding: 12px;\n    border: 1px solid #c8d0e0;\n    border-radius: 8px;\n    font-family: \"SF Mono\", \"Fira Code\", \"Cascadia Code\", monospace;\n    font-size: 13px;\n    background: #fff;\n    resize: vertical;\n    outline: none;\n    transition: border-color .2s;\n    line-height: 1.55;\n    color: #1a1a2e;\n  }\n  #jpf-app .jpf-input-area:focus { border-color: #4f8ef7; }\n  #jpf-app .jpf-input-area.jpf-error { border-color: #e05a5a; }\n  #jpf-app .jpf-error-msg {\n    display: none;\n    color: #c0392b;\n    font-size: 13px;\n    margin-top: 6px;\n    padding: 7px 10px;\n    background: #fdecea;\n    border-radius: 6px;\n    border-left: 3px solid #e05a5a;\n  }\n  #jpf-app .jpf-stats-bar {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 14px;\n    padding: 9px 14px;\n    background: #eef2fb;\n    border-radius: 8px;\n    margin: 12px 0;\n    font-size: 13px;\n    color: #4a5a80;\n  }\n  #jpf-app .jpf-stat { display: flex; align-items: center; gap: 5px; }\n  #jpf-app .jpf-stat-val { font-weight: 700; color: #2d3f6e; }\n  #jpf-app .jpf-path-box {\n    background: #fff;\n    border: 1px solid #c8d0e0;\n    border-radius: 8px;\n    padding: 12px 14px;\n    margin-bottom: 12px;\n    min-height: 56px;\n    display: none;\n  }\n  #jpf-app .jpf-path-box.jpf-active { display: block; }\n  #jpf-app .jpf-path-row {\n    display: flex;\n    align-items: flex-start;\n    gap: 10px;\n    margin-bottom: 6px;\n    flex-wrap: wrap;\n  }\n  #jpf-app .jpf-path-row:last-child { margin-bottom: 0; }\n  #jpf-app .jpf-path-label {\n    font-size: 11px;\n    font-weight: 700;\n    text-transform: uppercase;\n    color: #7a88a8;\n    min-width: 72px;\n    padding-top: 2px;\n    letter-spacing: .04em;\n  }\n  #jpf-app .jpf-path-val {\n    flex: 1;\n    font-family: \"SF Mono\", \"Fira Code\", monospace;\n    font-size: 13px;\n    color: #1a5fc8;\n    word-break: break-all;\n    background: #f0f5ff;\n    padding: 3px 8px;\n    border-radius: 5px;\n    min-width: 0;\n  }\n  #jpf-app .jpf-copy-inline {\n    flex-shrink: 0;\n    padding: 3px 9px;\n    border: 1px solid #c8d0e0;\n    border-radius: 5px;\n    background: #fff;\n    font-size: 12px;\n    cursor: pointer;\n    color: #4f6394;\n    transition: background .15s;\n  }\n  #jpf-app .jpf-copy-inline:hover { background: #eef2fb; }\n  #jpf-app .jpf-copy-inline.jpf-copied {\n    background: #e6f9ef;\n    border-color: #2ecc71;\n    color: #27ae60;\n  }\n  #jpf-app .jpf-value-preview {\n    margin-top: 8px;\n    padding: 8px 12px;\n    background: #fafbff;\n    border: 1px solid #e0e7f5;\n    border-radius: 6px;\n    font-family: \"SF Mono\", \"Fira Code\", monospace;\n    font-size: 13px;\n    word-break: break-all;\n    color: #2d3f6e;\n    display: flex;\n    gap: 10px;\n    align-items: flex-start;\n    flex-wrap: wrap;\n  }\n  #jpf-app .jpf-value-text { flex: 1; min-width: 0; }\n  #jpf-app .jpf-type-badge {\n    display: inline-flex;\n    align-items: center;\n    padding: 2px 8px;\n    border-radius: 4px;\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: .03em;\n    text-transform: uppercase;\n    flex-shrink: 0;\n  }\n  #jpf-app .jpf-type-string  { background: #e8f5e9; color: #2e7d32; }\n  #jpf-app .jpf-type-number  { background: #e3f2fd; color: #1565c0; }\n  #jpf-app .jpf-type-boolean { background: #fff3e0; color: #e65100; }\n  #jpf-app .jpf-type-null    { background: #f3e5f5; color: #6a1b9a; }\n  #jpf-app .jpf-type-object  { background: #e8eaf6; color: #283593; }\n  #jpf-app .jpf-type-array   { background: #fce4ec; color: #880e4f; }\n  #jpf-app .jpf-main-layout {\n    display: grid;\n    grid-template-columns: 1fr;\n    gap: 12px;\n  }\n  #jpf-app .jpf-tree-wrap {\n    background: #fff;\n    border: 1px solid #dde3ef;\n    border-radius: 8px;\n    padding: 12px;\n    min-height: 200px;\n    overflow-x: auto;\n  }\n  #jpf-app .jpf-tree-empty {\n    color: #9aa5be;\n    text-align: center;\n    padding: 40px 20px;\n    font-size: 14px;\n  }\n  #jpf-app .jpf-node {\n    user-select: none;\n    line-height: 1.6;\n  }\n  #jpf-app .jpf-node-row {\n    display: flex;\n    align-items: baseline;\n    gap: 4px;\n    padding: 2px 4px;\n    border-radius: 5px;\n    cursor: pointer;\n    transition: background .1s;\n    flex-wrap: nowrap;\n  }\n  #jpf-app .jpf-node-row:hover { background: #eef2fb; }\n  #jpf-app .jpf-node-row.jpf-selected { background: #dce8ff; }\n  #jpf-app .jpf-node-row.jpf-search-match { background: #fff8dc; }\n  #jpf-app .jpf-node-row.jpf-selected.jpf-search-match { background: #c8dfff; }\n  #jpf-app .jpf-toggle {\n    display: inline-block;\n    width: 16px;\n    font-size: 11px;\n    color: #7a88a8;\n    text-align: center;\n    cursor: pointer;\n    flex-shrink: 0;\n    transition: transform .15s;\n  }\n  #jpf-app .jpf-key {\n    color: #8b2252;\n    font-family: \"SF Mono\", \"Fira Code\", monospace;\n    font-size: 13px;\n    font-weight: 600;\n    flex-shrink: 0;\n  }\n  #jpf-app .jpf-colon { color: #888; font-size: 13px; flex-shrink: 0; }\n  #jpf-app .jpf-val-inline {\n    font-family: \"SF Mono\", \"Fira Code\", monospace;\n    font-size: 13px;\n    min-width: 0;\n    word-break: break-word;\n  }\n  #jpf-app .jpf-val-string  { color: #1e7c1e; }\n  #jpf-app .jpf-val-number  { color: #1565c0; }\n  #jpf-app .jpf-val-boolean { color: #e65100; }\n  #jpf-app .jpf-val-null    { color: #6a1b9a; font-style: italic; }\n  #jpf-app .jpf-val-collapsed { color: #7a88a8; font-size: 12px; }\n  #jpf-app .jpf-children {\n    margin-left: 20px;\n    border-left: 1px dashed #d0d8ec;\n    padding-left: 8px;\n  }\n  #jpf-app .jpf-node-count {\n    font-size: 11px;\n    color: #9aa5be;\n    margin-left: 4px;\n    flex-shrink: 0;\n  }\n  #jpf-app .jpf-actions-row {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    margin-top: 14px;\n  }\n  #jpf-app .jpf-toast {\n    position: fixed;\n    bottom: 24px;\n    right: 24px;\n    background: #2d3f6e;\n    color: #fff;\n    padding: 10px 18px;\n    border-radius: 8px;\n    font-size: 14px;\n    z-index: 9999;\n    opacity: 0;\n    pointer-events: none;\n    transition: opacity .3s;\n    box-shadow: 0 4px 16px rgba(0,0,0,.18);\n  }\n  #jpf-app .jpf-toast.jpf-show { opacity: 1; }\n  @media (max-width: 600px) {\n    #jpf-app { padding: 14px; }\n    #jpf-app .jpf-path-label { min-width: 56px; font-size: 10px; }\n    #jpf-app .jpf-path-val { font-size: 12px; }\n    #jpf-app .jpf-stats-bar { gap: 8px; font-size: 12px; }\n    #jpf-app .jpf-btn { padding: 7px 10px; font-size: 12px; }\n  }\n\u003c/style\u003e\n\u003cdiv class=\"jpf-label\"\u003eサンプルプリセット\u003c/div\u003e\n\u003cdiv class=\"jpf-presets\"\u003e\n  \u003cbutton class=\"jpf-preset-btn\" data-preset=\"user\"\u003eユーザー情報\u003c/button\u003e\n  \u003cbutton class=\"jpf-preset-btn\" data-preset=\"ecommerce\"\u003eECオーダー\u003c/button\u003e\n  \u003cbutton class=\"jpf-preset-btn\" data-preset=\"github\"\u003eGitHub API\u003c/button\u003e\n  \u003cbutton class=\"jpf-preset-btn\" data-preset=\"nested\"\u003e深いネスト\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"jpf-label\"\u003eJSONを貼り付け\u003c/div\u003e\n\u003ctextarea class=\"jpf-input-area\" id=\"jpfInput\" placeholder='JSONをここに貼り付け、例: {\"name\": \"山田太郎\", \"age\": 30}'\u003e\u003c/textarea\u003e\n\u003cdiv class=\"jpf-error-msg\" id=\"jpfError\"\u003e\u003c/div\u003e\n\u003cdiv class=\"jpf-toolbar\" style=\"margin-top:10px;\"\u003e\n  \u003cdiv class=\"jpf-search-wrap\"\u003e\n    \u003cspan class=\"jpf-search-icon\"\u003e\u0026#128269;\u003c/span\u003e\n    \u003cinput type=\"text\" class=\"jpf-search\" id=\"jpfSearch\" placeholder=\"キーまたは値を検索...\" /\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"jpf-btn jpf-btn-primary\" id=\"jpfParse\"\u003e探索する\u003c/button\u003e\n  \u003cbutton class=\"jpf-btn\" id=\"jpfExpandAll\"\u003eすべて展開\u003c/button\u003e\n  \u003cbutton class=\"jpf-btn\" id=\"jpfCollapseAll\"\u003eすべて折りたたむ\u003c/button\u003e\n  \u003cbutton class=\"jpf-btn jpf-btn-danger\" id=\"jpfClear\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"jpf-stats-bar\" id=\"jpfStats\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"jpf-stat\"\u003eノード数: \u003cspan class=\"jpf-stat-val\" id=\"jpfStatNodes\"\u003e0\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"jpf-stat\"\u003eキー数: \u003cspan class=\"jpf-stat-val\" id=\"jpfStatKeys\"\u003e0\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"jpf-stat\"\u003e配列数: \u003cspan class=\"jpf-stat-val\" id=\"jpfStatArrays\"\u003e0\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"jpf-stat\"\u003e最大深度: \u003cspan class=\"jpf-stat-val\" id=\"jpfStatDepth\"\u003e0\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"jpf-stat\"\u003e一致数: \u003cspan class=\"jpf-stat-val\" id=\"jpfStatMatches\" style=\"display:none\"\u003e0\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"jpf-path-box\" id=\"jpfPathBox\"\u003e\n  \u003cdiv class=\"jpf-path-row\"\u003e\n    \u003cspan class=\"jpf-path-label\"\u003eドット記法\u003c/span\u003e\n    \u003cspan class=\"jpf-path-val\" id=\"jpfDotPath\"\u003e\u003c/span\u003e\n    \u003cbutton class=\"jpf-copy-inline\" data-target=\"dot\"\u003eコピー\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"jpf-path-row\"\u003e\n    \u003cspan class=\"jpf-path-label\"\u003eブラケット\u003c/span\u003e\n    \u003cspan class=\"jpf-path-val\" id=\"jpfBracketPath\"\u003e\u003c/span\u003e\n    \u003cbutton class=\"jpf-copy-inline\" data-target=\"bracket\"\u003eコピー\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"jpf-value-preview\" id=\"jpfValuePreview\"\u003e\n    \u003cspan class=\"jpf-value-text\" id=\"jpfValueText\"\u003e\u003c/span\u003e\n    \u003cbutton class=\"jpf-copy-inline\" data-target=\"value\"\u003e値をコピー\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"jpf-tree-wrap\"\u003e\n  \u003cdiv class=\"jpf-tree-empty\" id=\"jpfEmpty\"\u003e上にJSONを貼り付けて \u003cstrong\u003e探索する\u003c/strong\u003e をクリックしてください。\u003c/div\u003e\n  \u003cdiv id=\"jpfTree\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"jpf-actions-row\"\u003e\n  \u003cbutton class=\"jpf-btn\" id=\"jpfCopyDotAll\"\u003eドットパスをコピー\u003c/button\u003e\n  \u003cbutton class=\"jpf-btn\" id=\"jpfCopyBracketAll\"\u003eブラケットパスをコピー\u003c/button\u003e\n  \u003cbutton class=\"jpf-btn\" id=\"jpfCopyVal\"\u003e値をコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"jpf-toast\" id=\"jpfToast\"\u003e\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var el = function(id) { return document.getElementById(id); };\n\n  var presets = {\n    user: {\n      \"id\": 1,\n      \"名前\": \"山田太郎\",\n      \"メール\": \"yamada@example.com\",\n      \"年齢\": 30,\n      \"有効\": true,\n      \"住所\": {\n        \"都道府県\": \"東京都\",\n        \"市区町村\": \"渋谷区\",\n        \"番地\": \"1-2-3\"\n      },\n      \"ロール\": [\"管理者\", \"編集者\"],\n      \"設定\": {\n        \"テーマ\": \"ダーク\",\n        \"通知\": { \"メール\": true, \"SMS\": false }\n      },\n      \"作成日時\": \"2024-01-15T09:30:00Z\"\n    },\n    ecommerce: {\n      \"注文ID\": \"ORD-2024-88821\",\n      \"ステータス\": \"発送済み\",\n      \"顧客\": { \"id\": 42, \"氏名\": \"鈴木花子\", \"ランク\": \"ゴールド\" },\n      \"商品\": [\n        { \"SKU\": \"WIDGET-A\", \"数量\": 2, \"単価\": 1980 },\n        { \"SKU\": \"GADGET-B\", \"数量\": 1, \"単価\": 4980 }\n      ],\n      \"合計\": { \"小計\": 8940, \"税\": 894, \"送料\": 500, \"合計\": 10334 },\n      \"発送日時\": \"2024-05-10T14:22:00Z\",\n      \"追跡番号\": \"1234-5678-90AB\"\n    },\n    github: {\n      \"id\": 583231,\n      \"login\": \"octocat\",\n      \"name\": \"The Octocat\",\n      \"public_repos\": 8,\n      \"followers\": 14987,\n      \"following\": 9,\n      \"created_at\": \"2011-01-25T18:44:36Z\",\n      \"plan\": { \"name\": \"pro\", \"space\": 976562499, \"private_repos\": 9999 },\n      \"repos\": [\n        { \"name\": \"Hello-World\", \"stars\": 2341, \"language\": \"Ruby\" },\n        { \"name\": \"linguist\", \"stars\": 11239, \"language\": \"Ruby\" }\n      ]\n    },\n    nested: {\n      \"レベル1\": {\n        \"レベル2\": {\n          \"レベル3\": {\n            \"レベル4\": {\n              \"レベル5\": {\n                \"値\": \"深いネストの値\",\n                \"フラグ\": [true, false, null, 42]\n              }\n            }\n          }\n        },\n        \"兄弟ノード\": [1, 2, { \"x\": \"配列内のオブジェクト\" }]\n      },\n      \"メタ\": { \"バージョン\": \"1.0\", \"タグ\": [\"アルファ\", \"ベータ\"] }\n    }\n  };\n\n  var state = {\n    parsed: null,\n    selectedPath: null,\n    selectedDot: '',\n    selectedBracket: '',\n    selectedValue: null,\n    searchTerm: '',\n    nodeCount: 0,\n    keyCount: 0,\n    arrayCount: 0,\n    maxDepth: 0\n  };\n\n  function showToast(msg) {\n    var t = el('jpfToast');\n    t.textContent = msg;\n    t.classList.add('jpf-show');\n    setTimeout(function() { t.classList.remove('jpf-show'); }, 1800);\n  }\n\n  function copyText(text) {\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(text).catch(function() { fallbackCopy(text); });\n    } else { fallbackCopy(text); }\n  }\n\n  function fallbackCopy(text) {\n    var ta = document.createElement('textarea');\n    ta.value = text;\n    ta.style.position = 'fixed';\n    ta.style.opacity = '0';\n    document.body.appendChild(ta);\n    ta.select();\n    document.execCommand('copy');\n    document.body.removeChild(ta);\n  }\n\n  function typeOf(val) {\n    if (val === null) return 'null';\n    if (Array.isArray(val)) return 'array';\n    return typeof val;\n  }\n\n  function typeBadgeJa(t) {\n    var labels = {\n      string: '文字列', number: '数値', boolean: '真偽値',\n      null: 'NULL', object: 'オブジェクト', array: '配列'\n    };\n    return '\u003cspan class=\"jpf-type-badge jpf-type-' + t + '\"\u003e' + (labels[t] || t) + '\u003c/span\u003e';\n  }\n\n  function dotPath(segments) {\n    var out = '$';\n    for (var i = 0; i \u003c segments.length; i++) {\n      var s = segments[i];\n      if (typeof s === 'number') {\n        out += '[' + s + ']';\n      } else {\n        out += /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(s) ? '.' + s : '[\"' + s + '\"]';\n      }\n    }\n    return out;\n  }\n\n  function bracketPath(segments) {\n    var out = '$';\n    for (var i = 0; i \u003c segments.length; i++) {\n      var s = segments[i];\n      if (typeof s === 'number') {\n        out += '[' + s + ']';\n      } else {\n        out += '[\"' + s + '\"]';\n      }\n    }\n    return out;\n  }\n\n  function gatherStats(obj, depth) {\n    depth = depth || 0;\n    if (depth \u003e state.maxDepth) state.maxDepth = depth;\n    state.nodeCount++;\n    var t = typeOf(obj);\n    if (t === 'object' \u0026\u0026 obj !== null) {\n      state.keyCount += Object.keys(obj).length;\n      Object.keys(obj).forEach(function(k) { gatherStats(obj[k], depth + 1); });\n    } else if (t === 'array') {\n      state.arrayCount++;\n      obj.forEach(function(v) { gatherStats(v, depth + 1); });\n    }\n  }\n\n  function buildNode(key, val, segments, isRoot) {\n    var t = typeOf(val);\n    var isExpandable = t === 'object' || t === 'array';\n    var segs = segments.slice();\n    if (!isRoot) segs.push(key);\n\n    var node = document.createElement('div');\n    node.className = 'jpf-node';\n\n    var row = document.createElement('div');\n    row.className = 'jpf-node-row';\n\n    var q = state.searchTerm.toLowerCase();\n    if (q) {\n      var keyStr = String(key).toLowerCase();\n      var valStr2 = (t !== 'object' \u0026\u0026 t !== 'array') ? String(val).toLowerCase() : '';\n      if (keyStr.indexOf(q) !== -1 || valStr2.indexOf(q) !== -1) {\n        row.classList.add('jpf-search-match');\n      }\n    }\n\n    var toggle = document.createElement('span');\n    toggle.className = 'jpf-toggle';\n    if (isExpandable) {\n      toggle.textContent = '▶';\n    } else {\n      toggle.innerHTML = '\u0026nbsp;';\n    }\n\n    var keyEl = document.createElement('span');\n    keyEl.className = 'jpf-key';\n    if (isRoot) {\n      keyEl.textContent = t === 'array' ? 'ルート []' : 'ルート {}';\n    } else {\n      keyEl.textContent = typeof key === 'number' ? '[' + key + ']' : key;\n    }\n\n    var colon = document.createElement('span');\n    colon.className = 'jpf-colon';\n    colon.textContent = ':';\n\n    var valEl = document.createElement('span');\n    valEl.className = 'jpf-val-inline';\n\n    var children;\n\n    if (isExpandable) {\n      var count = t === 'array' ? val.length : Object.keys(val).length;\n      valEl.className += ' jpf-val-collapsed';\n      valEl.textContent = t === 'array' ? '[' + count + ' 件]' : '{' + count + ' キー}';\n\n      children = document.createElement('div');\n      children.className = 'jpf-children';\n\n      if (t === 'object') {\n        Object.keys(val).forEach(function(k) {\n          children.appendChild(buildNode(k, val[k], segs, false));\n        });\n      } else {\n        val.forEach(function(v, i) {\n          children.appendChild(buildNode(i, v, segs, false));\n        });\n      }\n\n      row.appendChild(toggle);\n      if (!isRoot) {\n        row.appendChild(keyEl);\n        row.appendChild(colon);\n      } else {\n        row.appendChild(keyEl);\n      }\n      row.appendChild(valEl);\n\n      var expanded = true;\n      toggle.style.transform = 'rotate(90deg)';\n\n      toggle.addEventListener('click', function(e) {\n        e.stopPropagation();\n        expanded = !expanded;\n        children.style.display = expanded ? '' : 'none';\n        toggle.style.transform = expanded ? 'rotate(90deg)' : 'rotate(0deg)';\n      });\n\n      row.addEventListener('click', function() {\n        selectNode(row, segs, key, val, t, isRoot);\n      });\n\n      node.appendChild(row);\n      node.appendChild(children);\n    } else {\n      valEl.className += ' jpf-val-' + t;\n      valEl.textContent = t === 'string' ? '\"' + val + '\"' : (val === null ? 'null' : String(val));\n\n      row.appendChild(toggle);\n      row.appendChild(keyEl);\n      row.appendChild(colon);\n      row.appendChild(valEl);\n      row.appendChild(document.createTextNode(' '));\n      var badge = document.createElement('span');\n      badge.innerHTML = typeBadgeJa(t);\n      row.appendChild(badge);\n\n      row.addEventListener('click', function() {\n        selectNode(row, segs, key, val, t, isRoot);\n      });\n\n      node.appendChild(row);\n    }\n\n    node._expand = function() {\n      if (isExpandable \u0026\u0026 !expanded) {\n        expanded = true;\n        children.style.display = '';\n        toggle.style.transform = 'rotate(90deg)';\n      }\n      if (isExpandable) {\n        Array.from(children.children).forEach(function(c) {\n          if (c._expand) c._expand();\n        });\n      }\n    };\n    node._collapse = function() {\n      if (isExpandable \u0026\u0026 expanded) {\n        expanded = false;\n        children.style.display = 'none';\n        toggle.style.transform = 'rotate(0deg)';\n      }\n    };\n\n    return node;\n  }\n\n  var lastSelectedRow = null;\n\n  function selectNode(row, segs, key, val, t, isRoot) {\n    if (lastSelectedRow) lastSelectedRow.classList.remove('jpf-selected');\n    row.classList.add('jpf-selected');\n    lastSelectedRow = row;\n\n    var dp = isRoot ? '$' : dotPath(segs);\n    var bp = isRoot ? '$' : bracketPath(segs);\n    state.selectedDot = dp;\n    state.selectedBracket = bp;\n    state.selectedValue = val;\n\n    el('jpfDotPath').textContent = dp;\n    el('jpfBracketPath').textContent = bp;\n\n    var valStr = t === 'object' || t === 'array' ? JSON.stringify(val, null, 2) : String(val);\n    el('jpfValuePreview').innerHTML = '';\n    var vt = document.createElement('span');\n    vt.className = 'jpf-value-text';\n    vt.textContent = valStr.length \u003e 200 ? valStr.slice(0, 200) + '...' : valStr;\n    var copyValBtn = document.createElement('button');\n    copyValBtn.className = 'jpf-copy-inline';\n    copyValBtn.textContent = '値をコピー';\n    copyValBtn.addEventListener('click', function() {\n      copyText(t === 'object' || t === 'array' ? JSON.stringify(val, null, 2) : String(val));\n      showToast('値をコピーしました');\n      copyValBtn.classList.add('jpf-copied');\n      setTimeout(function() { copyValBtn.classList.remove('jpf-copied'); copyValBtn.textContent = '値をコピー'; }, 1500);\n    });\n    var badgeEl = document.createElement('span');\n    badgeEl.innerHTML = typeBadgeJa(t);\n    el('jpfValuePreview').appendChild(vt);\n    el('jpfValuePreview').appendChild(badgeEl);\n    el('jpfValuePreview').appendChild(copyValBtn);\n\n    el('jpfPathBox').classList.add('jpf-active');\n  }\n\n  function parseAndRender() {\n    var raw = el('jpfInput').value.trim();\n    el('jpfInput').classList.remove('jpf-error');\n    el('jpfError').style.display = 'none';\n    el('jpfTree').innerHTML = '';\n    el('jpfEmpty').style.display = 'none';\n    el('jpfStats').style.display = 'none';\n    el('jpfPathBox').classList.remove('jpf-active');\n    lastSelectedRow = null;\n\n    if (!raw) {\n      el('jpfEmpty').style.display = '';\n      el('jpfEmpty').textContent = '探索するJSONがありません。上に貼り付けてください。';\n      return;\n    }\n\n    var parsed;\n    try { parsed = JSON.parse(raw); }\n    catch(e) {\n      el('jpfInput').classList.add('jpf-error');\n      el('jpfError').style.display = '';\n      el('jpfError').textContent = 'JSON解析エラー: ' + e.message;\n      el('jpfEmpty').style.display = '';\n      el('jpfEmpty').textContent = '上のエラーを修正するとツリーが表示されます。';\n      return;\n    }\n\n    state.parsed = parsed;\n    state.nodeCount = 0;\n    state.keyCount = 0;\n    state.arrayCount = 0;\n    state.maxDepth = 0;\n    gatherStats(parsed, 0);\n\n    el('jpfStatNodes').textContent = state.nodeCount;\n    el('jpfStatKeys').textContent = state.keyCount;\n    el('jpfStatArrays').textContent = state.arrayCount;\n    el('jpfStatDepth').textContent = state.maxDepth;\n    el('jpfStats').style.display = '';\n\n    var root = buildNode('root', parsed, [], true);\n    el('jpfTree').appendChild(root);\n    if (root._expand) root._expand();\n\n    if (state.searchTerm) applySearch();\n  }\n\n  function applySearch() {\n    var q = state.searchTerm.toLowerCase();\n    var rows = el('jpfTree').querySelectorAll('.jpf-node-row');\n    var matchCount = 0;\n    rows.forEach(function(r) { r.classList.remove('jpf-search-match'); });\n    if (!q) { el('jpfStatMatches').style.display = 'none'; return; }\n    rows.forEach(function(r) {\n      var keyEl = r.querySelector('.jpf-key');\n      var valEl = r.querySelector('.jpf-val-inline');\n      var keyTxt = keyEl ? keyEl.textContent.toLowerCase() : '';\n      var valTxt = valEl ? valEl.textContent.toLowerCase() : '';\n      if (keyTxt.indexOf(q) !== -1 || valTxt.indexOf(q) !== -1) {\n        r.classList.add('jpf-search-match');\n        matchCount++;\n      }\n    });\n    el('jpfStatMatches').textContent = matchCount + ' 件一致';\n    el('jpfStatMatches').style.display = '';\n  }\n\n  el('jpfParse').addEventListener('click', parseAndRender);\n  el('jpfInput').addEventListener('keydown', function(e) {\n    if ((e.ctrlKey || e.metaKey) \u0026\u0026 e.key === 'Enter') parseAndRender();\n  });\n  el('jpfClear').addEventListener('click', function() {\n    el('jpfInput').value = '';\n    el('jpfInput').classList.remove('jpf-error');\n    el('jpfError').style.display = 'none';\n    el('jpfTree').innerHTML = '';\n    el('jpfEmpty').style.display = '';\n    el('jpfEmpty').textContent = '上にJSONを貼り付けて探索するをクリックしてください。';\n    el('jpfStats').style.display = 'none';\n    el('jpfPathBox').classList.remove('jpf-active');\n    el('jpfSearch').value = '';\n    state.searchTerm = '';\n    lastSelectedRow = null;\n  });\n\n  el('jpfExpandAll').addEventListener('click', function() {\n    el('jpfTree').querySelectorAll('.jpf-node').forEach(function(n) {\n      if (n._expand) n._expand();\n    });\n  });\n  el('jpfCollapseAll').addEventListener('click', function() {\n    Array.from(el('jpfTree').children).forEach(function(r) { if (r._collapse) r._collapse(); });\n  });\n\n  el('jpfSearch').addEventListener('input', function() {\n    state.searchTerm = this.value.trim();\n    applySearch();\n  });\n\n  document.querySelectorAll('#jpf-app .jpf-copy-inline[data-target]').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      var target = btn.getAttribute('data-target');\n      var txt = target === 'dot' ? state.selectedDot : target === 'bracket' ? state.selectedBracket : '';\n      if (!txt) return;\n      copyText(txt);\n      showToast('コピーしました');\n      btn.classList.add('jpf-copied');\n      var orig = btn.textContent;\n      btn.textContent = 'コピー済み';\n      setTimeout(function() { btn.classList.remove('jpf-copied'); btn.textContent = orig; }, 1500);\n    });\n  });\n\n  el('jpfCopyDotAll').addEventListener('click', function() {\n    if (!state.selectedDot) { showToast('ノードを選択してください'); return; }\n    copyText(state.selectedDot);\n    showToast('ドットパスをコピーしました');\n  });\n  el('jpfCopyBracketAll').addEventListener('click', function() {\n    if (!state.selectedBracket) { showToast('ノードを選択してください'); return; }\n    copyText(state.selectedBracket);\n    showToast('ブラケットパスをコピーしました');\n  });\n  el('jpfCopyVal').addEventListener('click', function() {\n    if (state.selectedValue === null \u0026\u0026 state.selectedDot === '') { showToast('ノードを選択してください'); return; }\n    var v = state.selectedValue;\n    var txt = (typeof v === 'object') ? JSON.stringify(v, null, 2) : String(v);\n    copyText(txt);\n    showToast('値をコピーしました');\n  });\n\n  document.querySelectorAll('#jpf-app .jpf-preset-btn').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      var key = btn.getAttribute('data-preset');\n      if (presets[key]) {\n        el('jpfInput').value = JSON.stringify(presets[key], null, 2);\n        parseAndRender();\n      }\n    });\n  });\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e上のテキストエリアに \u003cstrong\u003eJSONを貼り付け\u003c/strong\u003e（またはサンプルプリセットを選択）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e探索する\u003c/strong\u003e をクリック（Ctrl+Enter / Cmd+Enter でも可）\u003c/li\u003e\n\u003cli\u003eツリーの \u003cstrong\u003eノードをクリック\u003c/strong\u003e してドット記法・ブラケット記法のJSONPathを確認\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eコピーボタン\u003c/strong\u003e でパスや値をクリップボードへ\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e検索\u003c/strong\u003e でキー名・値に一致するノードをハイライト\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"jsonpathとは\"\u003eJSONPathとは？\u003c/h2\u003e\n\u003cp\u003eJSONPathはJSON向けのクエリ言語で、XPathのJSON版です。複雑なJSON構造の中から特定の値を \u003ccode\u003e$.user.address.city\u003c/code\u003e や \u003ccode\u003e$[\u0026quot;items\u0026quot;][0][\u0026quot;price\u0026quot;]\u003c/code\u003e のような式で指定できます。主な用途：\u003c/p\u003e","title":"JSONパスファインダー — ツリーエクスプローラー"},{"content":"JSONをCSVに、CSVをJSONに変換します。サーバー送信なし・外部ライブラリなし、すべてブラウザ内で完結します。\nJSON → CSV CSV → JSON 区切り文字 カンマ（,） セミコロン（;） タブ（⇥） パイプ（|） ヘッダー行を含む ネストJSONをフラット化 JSON入力 サンプルを読み込む クリア CSV出力 コピー ダウンロード 変換する ↓ プレビュー freee会計 — CSVインポートで仕訳を自動化 変換したCSVをfreeeに取り込めば、売上・経費の入力を大幅に削減。小規模事業者・フリーランスに最適。\nfreeeを無料で試す 使い方 タブで変換の方向（JSON → CSV または CSV → JSON）を選択します。 左パネルにデータを貼り付けるか、サンプルを読み込む をクリックして試します。 区切り文字、ヘッダー行の有無、フラット化の設定を調整します。 変換する をクリックします。 コピー または ダウンロード で結果を取得します。 ネストされたJSONについて ネストJSONをフラット化 を有効にすると、ネストされたオブジェクトがドット記法で展開されます。例:\n{ \u0026#34;住所\u0026#34;: { \u0026#34;都市\u0026#34;: \u0026#34;東京\u0026#34;, \u0026#34;郵便番号\u0026#34;: \u0026#34;100\u0026#34; } } 上記は 住所.都市 と 住所.郵便番号 の列に変換されます。オブジェクト内の配列はJSON文字列としてシリアライズされます。\n区切り文字の選び方 名前 文字 主な用途 カンマ , 標準CSV（Excel・Googleスプレッドシート） セミコロン ; 小数点にカンマを使う欧州ロケール タブ ⇥ TSVファイル、スプレッドシートへの貼り付け パイプ | ログファイル、マークダウン形式の表 関連ツール Csv Editor → Csv Editorツール Csv To Json → Csv To Jsonツール Json Diff → Json Diffツール ","permalink":"https://productivity-works.com/ja/tools/json-to-csv/","summary":"\u003cp\u003eJSONをCSVに、CSVをJSONに変換します。サーバー送信なし・外部ライブラリなし、すべてブラウザ内で完結します。\u003c/p\u003e\n\u003cstyle\u003e\n#j2c-app *,\n#j2c-app *::before,\n#j2c-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#j2c-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", \"Yu Gothic\", Meiryo, sans-serif;\n  font-size: 15px;\n  color: #1f2937;\n  line-height: 1.6;\n  max-width: 900px;\n  margin: 2rem auto;\n}\n\n#j2c-app h2 {\n  font-size: 1.05rem;\n  font-weight: 600;\n  color: #374151;\n  margin-bottom: 0.5rem;\n}\n\n#j2c-app .j2c-tabs {\n  display: flex;\n  gap: 0.5rem;\n  margin-bottom: 1.5rem;\n}\n\n#j2c-app .j2c-tab {\n  padding: 0.55rem 1.2rem;\n  border: 2px solid #d1fae5;\n  border-radius: 6px;\n  background: #fff;\n  color: #059669;\n  font-weight: 700;\n  font-size: 0.95rem;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n\n#j2c-app .j2c-tab.active {\n  background: #059669;\n  color: #fff;\n  border-color: #059669;\n}\n\n#j2c-app .j2c-tab:hover:not(.active) {\n  background: #d1fae5;\n}\n\n#j2c-app .j2c-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 1rem;\n  align-items: center;\n  background: #f9fafb;\n  border: 1px solid #e5e7eb;\n  border-radius: 8px;\n  padding: 0.85rem 1rem;\n  margin-bottom: 1.25rem;\n}\n\n#j2c-app .j2c-control-group {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n\n#j2c-app label {\n  font-size: 0.88rem;\n  font-weight: 500;\n  color: #6b7280;\n}\n\n#j2c-app select {\n  padding: 0.3rem 0.6rem;\n  border: 1px solid #d1d5db;\n  border-radius: 5px;\n  font-size: 0.88rem;\n  background: #fff;\n  color: #374151;\n  cursor: pointer;\n}\n\n#j2c-app .j2c-toggle {\n  display: flex;\n  align-items: center;\n  gap: 0.45rem;\n  cursor: pointer;\n  user-select: none;\n}\n\n#j2c-app .j2c-toggle input[type=\"checkbox\"] {\n  width: 16px;\n  height: 16px;\n  accent-color: #059669;\n  cursor: pointer;\n}\n\n#j2c-app .j2c-io-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n  margin-bottom: 1.25rem;\n}\n\n@media (max-width: 640px) {\n  #j2c-app .j2c-io-grid {\n    grid-template-columns: 1fr;\n  }\n}\n\n#j2c-app .j2c-pane {\n  display: flex;\n  flex-direction: column;\n  gap: 0.4rem;\n}\n\n#j2c-app textarea {\n  width: 100%;\n  height: 220px;\n  padding: 0.65rem 0.8rem;\n  border: 1px solid #d1d5db;\n  border-radius: 8px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.82rem;\n  line-height: 1.5;\n  color: #1f2937;\n  background: #fff;\n  resize: vertical;\n  transition: border-color 0.15s;\n}\n\n#j2c-app textarea:focus {\n  outline: none;\n  border-color: #059669;\n  box-shadow: 0 0 0 3px rgba(5,150,105,0.12);\n}\n\n#j2c-app textarea.j2c-error {\n  border-color: #ef4444;\n  box-shadow: 0 0 0 3px rgba(239,68,68,0.1);\n}\n\n#j2c-app .j2c-pane-actions {\n  display: flex;\n  gap: 0.5rem;\n}\n\n#j2c-app .j2c-btn {\n  padding: 0.4rem 0.9rem;\n  border: none;\n  border-radius: 6px;\n  font-size: 0.82rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, opacity 0.15s;\n}\n\n#j2c-app .j2c-btn-primary {\n  background: #059669;\n  color: #fff;\n}\n\n#j2c-app .j2c-btn-primary:hover {\n  background: #047857;\n}\n\n#j2c-app .j2c-btn-secondary {\n  background: #e5e7eb;\n  color: #374151;\n}\n\n#j2c-app .j2c-btn-secondary:hover {\n  background: #d1d5db;\n}\n\n#j2c-app .j2c-btn:disabled {\n  opacity: 0.45;\n  cursor: not-allowed;\n}\n\n#j2c-app .j2c-convert-row {\n  display: flex;\n  justify-content: center;\n  margin-bottom: 1.25rem;\n}\n\n#j2c-app .j2c-btn-convert {\n  padding: 0.6rem 2rem;\n  background: #059669;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 1rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n  letter-spacing: 0.01em;\n}\n\n#j2c-app .j2c-btn-convert:hover {\n  background: #047857;\n}\n\n#j2c-app .j2c-msg {\n  font-size: 0.82rem;\n  padding: 0.35rem 0.7rem;\n  border-radius: 5px;\n  margin-top: 0.25rem;\n  display: none;\n}\n\n#j2c-app .j2c-msg.error {\n  background: #fef2f2;\n  color: #dc2626;\n  border: 1px solid #fca5a5;\n  display: block;\n}\n\n#j2c-app .j2c-msg.success {\n  background: #ecfdf5;\n  color: #059669;\n  border: 1px solid #6ee7b7;\n  display: block;\n}\n\n#j2c-app .j2c-preview-section {\n  margin-top: 0.5rem;\n}\n\n#j2c-app .j2c-preview-section h2 {\n  margin-bottom: 0.6rem;\n}\n\n#j2c-app .j2c-table-wrap {\n  overflow-x: auto;\n  border: 1px solid #e5e7eb;\n  border-radius: 8px;\n  max-height: 320px;\n  overflow-y: auto;\n}\n\n#j2c-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.82rem;\n}\n\n#j2c-app th {\n  background: #ecfdf5;\n  color: #065f46;\n  font-weight: 600;\n  padding: 0.5rem 0.75rem;\n  text-align: left;\n  border-bottom: 2px solid #6ee7b7;\n  white-space: nowrap;\n  position: sticky;\n  top: 0;\n}\n\n#j2c-app td {\n  padding: 0.4rem 0.75rem;\n  border-bottom: 1px solid #f3f4f6;\n  color: #374151;\n  max-width: 220px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n#j2c-app tr:last-child td {\n  border-bottom: none;\n}\n\n#j2c-app tr:nth-child(even) td {\n  background: #f9fafb;\n}\n\n#j2c-app .j2c-preview-meta {\n  font-size: 0.78rem;\n  color: #9ca3af;\n  margin-top: 0.4rem;\n}\n\n#j2c-app .j2c-freee-cta {\n  margin-top: 2rem;\n  padding: 1.1rem 1.3rem;\n  background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);\n  border: 1px solid #6ee7b7;\n  border-radius: 10px;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 1rem;\n  justify-content: space-between;\n}\n\n#j2c-app .j2c-freee-cta-text {\n  flex: 1;\n  min-width: 200px;\n}\n\n#j2c-app .j2c-freee-cta-text strong {\n  display: block;\n  font-size: 0.95rem;\n  color: #065f46;\n  margin-bottom: 0.2rem;\n}\n\n#j2c-app .j2c-freee-cta-text p {\n  font-size: 0.82rem;\n  color: #374151;\n  margin: 0;\n}\n\n#j2c-app .j2c-freee-cta-btn {\n  display: inline-block;\n  padding: 0.55rem 1.3rem;\n  background: #059669;\n  color: #fff;\n  font-weight: 700;\n  font-size: 0.88rem;\n  border-radius: 7px;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: background 0.15s;\n}\n\n#j2c-app .j2c-freee-cta-btn:hover {\n  background: #047857;\n}\n\u003c/style\u003e\n\u003cdiv id=\"j2c-app\"\u003e\n  \u003cdiv class=\"j2c-tabs\"\u003e\n    \u003cbutton class=\"j2c-tab active\" id=\"j2c-tab-j2c\" onclick=\"j2cSetMode('j2c')\"\u003eJSON → CSV\u003c/button\u003e\n    \u003cbutton class=\"j2c-tab\" id=\"j2c-tab-c2j\" onclick=\"j2cSetMode('c2j')\"\u003eCSV → JSON\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"j2c-controls\"\u003e\n    \u003cdiv class=\"j2c-control-group\"\u003e\n      \u003clabel for=\"j2c-delim\"\u003e区切り文字\u003c/label\u003e\n      \u003cselect id=\"j2c-delim\"\u003e\n        \u003coption value=\",\"\u003eカンマ（,）\u003c/option\u003e\n        \u003coption value=\";\"\u003eセミコロン（;）\u003c/option\u003e\n        \u003coption value=\"\u0026#9;\"\u003eタブ（⇥）\u003c/option\u003e\n        \u003coption value=\"|\"\u003eパイプ（|）\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"j2c-control-group\"\u003e\n      \u003clabel class=\"j2c-toggle\"\u003e\n        \u003cinput type=\"checkbox\" id=\"j2c-header\" checked\u003e\n        ヘッダー行を含む\n      \u003c/label\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"j2c-control-group\"\u003e\n      \u003clabel class=\"j2c-toggle\"\u003e\n        \u003cinput type=\"checkbox\" id=\"j2c-flatten\" checked\u003e\n        ネストJSONをフラット化\n      \u003c/label\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"j2c-io-grid\"\u003e\n    \u003cdiv class=\"j2c-pane\"\u003e\n      \u003ch2 id=\"j2c-input-label\"\u003eJSON入力\u003c/h2\u003e\n      \u003ctextarea id=\"j2c-input\" placeholder='JSONをここに貼り付け（例）\u0026#10;[\u0026#10;  {\"名前\":\"田中\",\"年齢\":30},\u0026#10;  {\"名前\":\"鈴木\",\"年齢\":25}\u0026#10;]'\u003e\u003c/textarea\u003e\n      \u003cdiv class=\"j2c-pane-actions\"\u003e\n        \u003cbutton class=\"j2c-btn j2c-btn-secondary\" onclick=\"j2cLoadSample()\"\u003eサンプルを読み込む\u003c/button\u003e\n        \u003cbutton class=\"j2c-btn j2c-btn-secondary\" onclick=\"j2cClear()\"\u003eクリア\u003c/button\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"j2c-msg\" id=\"j2c-input-msg\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"j2c-pane\"\u003e\n      \u003ch2 id=\"j2c-output-label\"\u003eCSV出力\u003c/h2\u003e\n      \u003ctextarea id=\"j2c-output\" readonly placeholder=\"変換後の結果がここに表示されます…\"\u003e\u003c/textarea\u003e\n      \u003cdiv class=\"j2c-pane-actions\"\u003e\n        \u003cbutton class=\"j2c-btn j2c-btn-primary\" id=\"j2c-copy-btn\" onclick=\"j2cCopy()\" disabled\u003eコピー\u003c/button\u003e\n        \u003cbutton class=\"j2c-btn j2c-btn-primary\" id=\"j2c-download-btn\" onclick=\"j2cDownload()\" disabled\u003eダウンロード\u003c/button\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"j2c-msg\" id=\"j2c-output-msg\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"j2c-convert-row\"\u003e\n    \u003cbutton class=\"j2c-btn-convert\" onclick=\"j2cConvert()\"\u003e変換する ↓\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"j2c-preview-section\" id=\"j2c-preview-section\" style=\"display:none;\"\u003e\n    \u003ch2\u003eプレビュー\u003c/h2\u003e\n    \u003cdiv class=\"j2c-table-wrap\"\u003e\n      \u003ctable id=\"j2c-preview-table\"\u003e\u003c/table\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"j2c-preview-meta\" id=\"j2c-preview-meta\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"j2c-freee-cta\"\u003e\n    \u003cdiv class=\"j2c-freee-cta-text\"\u003e\n      \u003cstrong\u003efreee会計 — CSVインポートで仕訳を自動化\u003c/strong\u003e\n      \u003cp\u003e変換したCSVをfreeeに取り込めば、売上・経費の入力を大幅に削減。小規模事業者・フリーランスに最適。\u003c/p\u003e","title":"JSON⇄CSV 変換ツール — 無料・インストール不要"},{"content":" 作成 学習 統計 カードを作成 表面（質問・単語） 裏面（答え・訳） ＋ 追加 クリア CSV一括取込： CSVを選択 形式: 表面,裏面（1行1枚） カードがまだありません。上のフォームから追加してください。 カードがありません。\n「作成」タブでカードを追加してください。\n学習統計 0 合計カード 0 マスター済 0 学習中 0 連続正解数 JSONで書き出し JSONを取込 全データ削除 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 読書速度を測定 → 読書速度テスト ポモドーロで集中 → ポモドーロタイマー タイピング速度を測定 → タイピング速度テスト 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/flashcard-maker/","summary":"\u003cdiv id=\"fc-app\"\u003e\n\u003cstyle\u003e\n#fc-app {\n  font-family: 'Helvetica Neue', Arial, 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', Meiryo, sans-serif;\n  max-width: 720px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#fc-app * {\n  box-sizing: border-box;\n}\n#fc-app h2 {\n  font-size: 1.25rem;\n  font-weight: 700;\n  margin: 0 0 16px 0;\n  color: #0f172a;\n}\n#fc-app .fc-tabs {\n  display: flex;\n  gap: 4px;\n  margin-bottom: 20px;\n  background: #f1f5f9;\n  border-radius: 10px;\n  padding: 4px;\n}\n#fc-app .fc-tab {\n  flex: 1;\n  padding: 10px 8px;\n  border: none;\n  background: transparent;\n  border-radius: 7px;\n  font-size: 14px;\n  font-weight: 600;\n  color: #64748b;\n  cursor: pointer;\n  transition: all 0.18s;\n}\n#fc-app .fc-tab.active {\n  background: #fff;\n  color: #0f172a;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.10);\n}\n#fc-app .fc-tab:hover:not(.active) {\n  color: #334155;\n  background: rgba(255,255,255,0.5);\n}\n#fc-app .fc-panel {\n  display: none;\n}\n#fc-app .fc-panel.active {\n  display: block;\n}\n\u003cp\u003e/* \u0026mdash; 作成モード \u0026mdash; */\n#fc-app .fc-form {\nbackground: #f8fafc;\nborder: 1.5px solid #e2e8f0;\nborder-radius: 12px;\npadding: 18px;\nmargin-bottom: 18px;\n}\n#fc-app .fc-form-row {\ndisplay: flex;\ngap: 10px;\nmargin-bottom: 10px;\n}\n#fc-app .fc-form-row label {\ndisplay: block;\nfont-size: 12px;\nfont-weight: 700;\ncolor: #475569;\nmargin-bottom: 4px;\nletter-spacing: 0.03em;\n}\n#fc-app .fc-form-row .fc-field {\nflex: 1;\n}\n#fc-app .fc-input {\nwidth: 100%;\npadding: 10px 12px;\nborder: 1.5px solid #cbd5e1;\nborder-radius: 8px;\nfont-size: 15px;\ncolor: #0f172a;\nbackground: #fff;\ntransition: border-color 0.15s;\nresize: vertical;\nmin-height: 42px;\n}\n#fc-app .fc-input:focus {\noutline: none;\nborder-color: #3b82f6;\nbox-shadow: 0 0 0 3px rgba(59,130,246,0.12);\n}\n#fc-app .fc-btn {\ndisplay: inline-flex;\nalign-items: center;\ngap: 5px;\npadding: 10px 18px;\nborder: none;\nborder-radius: 8px;\nfont-size: 14px;\nfont-weight: 700;\ncursor: pointer;\ntransition: all 0.15s;\nwhite-space: nowrap;\n}\n#fc-app .fc-btn-primary {\nbackground: #3b82f6;\ncolor: #fff;\n}\n#fc-app .fc-btn-primary:hover {\nbackground: #2563eb;\n}\n#fc-app .fc-btn-secondary {\nbackground: #e2e8f0;\ncolor: #334155;\n}\n#fc-app .fc-btn-secondary:hover {\nbackground: #cbd5e1;\n}\n#fc-app .fc-btn-danger {\nbackground: #fee2e2;\ncolor: #dc2626;\n}\n#fc-app .fc-btn-danger:hover {\nbackground: #fecaca;\n}\n#fc-app .fc-btn-success {\nbackground: #dcfce7;\ncolor: #16a34a;\n}\n#fc-app .fc-btn-success:hover {\nbackground: #bbf7d0;\n}\n#fc-app .fc-btn-sm {\npadding: 5px 11px;\nfont-size: 12px;\nborder-radius: 6px;\n}\n#fc-app .fc-form-actions {\ndisplay: flex;\ngap: 8px;\nflex-wrap: wrap;\n}\n#fc-app .fc-csv-row {\nmargin-top: 10px;\npadding-top: 10px;\nborder-top: 1px solid #e2e8f0;\ndisplay: flex;\ngap: 8px;\nalign-items: center;\nflex-wrap: wrap;\n}\n#fc-app .fc-csv-label {\nfont-size: 12px;\ncolor: #64748b;\nfont-weight: 600;\n}\n#fc-app .fc-file-input {\ndisplay: none;\n}\n#fc-app .fc-card-list {\ndisplay: flex;\nflex-direction: column;\ngap: 8px;\n}\n#fc-app .fc-card-item {\nbackground: #fff;\nborder: 1.5px solid #e2e8f0;\nborder-radius: 10px;\npadding: 12px 14px;\ndisplay: flex;\ngap: 12px;\nalign-items: flex-start;\n}\n#fc-app .fc-card-item.editing {\nborder-color: #3b82f6;\nbackground: #eff6ff;\n}\n#fc-app .fc-card-idx {\nfont-size: 12px;\nfont-weight: 700;\ncolor: #94a3b8;\nmin-width: 22px;\npadding-top: 2px;\n}\n#fc-app .fc-card-content {\nflex: 1;\n}\n#fc-app .fc-card-front {\nfont-size: 14px;\nfont-weight: 700;\ncolor: #1e293b;\n}\n#fc-app .fc-card-back {\nfont-size: 13px;\ncolor: #475569;\nmargin-top: 3px;\n}\n#fc-app .fc-card-actions {\ndisplay: flex;\ngap: 5px;\nflex-shrink: 0;\n}\n#fc-app .fc-empty {\ntext-align: center;\ncolor: #94a3b8;\nfont-size: 14px;\npadding: 32px 0;\n}\u003c/p\u003e","title":"フラッシュカードメーカー"},{"content":"ブラウザ上でプレースホルダー（ダミー）画像をすぐに作成できます。幅・高さ・背景色・テキスト色・ラベルを設定してPNGまたはJPEGでダウンロード。アップロード不要・会員登録不要・完全クライアントサイド処理。\nプリセットサイズ\nWebバナー（728×90） OGP / SNSシェア（1200×630） Instagram正方形（1080×1080） スマートフォン（375×667） 設定\n幅（px） 高さ（px） 背景色 テキスト色 ラベルテキスト （空欄でサイズを自動表示） フォントサイズ： 自動 px PNG JPEG プレビュー ダウンロード 「プレビュー」をクリックして画像を生成してください。\n事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; 関連ツール ファビコンを作成 → ファビコン ジェネレーター 画像をリサイズ → 画像リサイズツール カラーパレットを生成 → カラーパレット ジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/placeholder-image/","summary":"\u003cp\u003eブラウザ上でプレースホルダー（ダミー）画像をすぐに作成できます。幅・高さ・背景色・テキスト色・ラベルを設定してPNGまたはJPEGでダウンロード。アップロード不要・会員登録不要・完全クライアントサイド処理。\u003c/p\u003e\n\u003cdiv id=\"ph-app\"\u003e\n\u003cstyle\u003e\n#ph-app {\n  font-family: system-ui, -apple-system, sans-serif;\n  color: #1e293b;\n  max-width: 780px;\n  margin: 0 auto;\n}\n#ph-app .ph-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n  margin-bottom: 16px;\n}\n#ph-app .ph-field {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n#ph-app .ph-field label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n}\n#ph-app .ph-field input[type=\"number\"],\n#ph-app .ph-field input[type=\"text\"],\n#ph-app .ph-field select {\n  padding: 8px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 14px;\n  color: #1e293b;\n  background: #f8fafc;\n  outline: none;\n  transition: border-color 0.15s;\n  width: 100%;\n  box-sizing: border-box;\n}\n#ph-app .ph-field input:focus,\n#ph-app .ph-field select:focus {\n  border-color: #64748b;\n  background: #fff;\n}\n#ph-app .ph-color-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n#ph-app .ph-color-row input[type=\"color\"] {\n  width: 42px;\n  height: 36px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  padding: 2px 3px;\n  background: #f8fafc;\n  cursor: pointer;\n}\n#ph-app .ph-color-row input[type=\"text\"] {\n  flex: 1;\n}\n#ph-app .ph-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 16px;\n}\n#ph-app .ph-presets button {\n  padding: 6px 13px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 20px;\n  background: #f1f5f9;\n  font-size: 12px;\n  font-weight: 600;\n  color: #475569;\n  cursor: pointer;\n  transition: background 0.15s, border-color 0.15s, color 0.15s;\n}\n#ph-app .ph-presets button:hover {\n  background: #64748b;\n  color: #fff;\n  border-color: #64748b;\n}\n#ph-app .ph-font-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 16px;\n}\n#ph-app .ph-font-row label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  white-space: nowrap;\n}\n#ph-app .ph-font-row input[type=\"checkbox\"] {\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n}\n#ph-app .ph-font-row input[type=\"number\"] {\n  width: 80px;\n  padding: 7px 9px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 14px;\n  color: #1e293b;\n  background: #f8fafc;\n  outline: none;\n}\n#ph-app .ph-actions {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 20px;\n  flex-wrap: wrap;\n}\n#ph-app .ph-actions select {\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 14px;\n  font-weight: 600;\n  color: #1e293b;\n  background: #f8fafc;\n  outline: none;\n  cursor: pointer;\n}\n#ph-app .ph-btn-generate {\n  padding: 9px 22px;\n  background: #64748b;\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#ph-app .ph-btn-generate:hover {\n  background: #475569;\n}\n#ph-app .ph-btn-download {\n  padding: 9px 22px;\n  background: #0f172a;\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#ph-app .ph-btn-download:hover {\n  background: #1e293b;\n}\n#ph-app .ph-preview-wrap {\n  border: 2px dashed #cbd5e1;\n  border-radius: 10px;\n  padding: 16px;\n  background: #f8fafc;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 10px;\n  min-height: 160px;\n  justify-content: center;\n}\n#ph-app canvas#ph-canvas {\n  max-width: 100%;\n  height: auto;\n  border-radius: 6px;\n  display: block;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.10);\n}\n#ph-app .ph-info {\n  font-size: 12px;\n  color: #94a3b8;\n}\n#ph-app .ph-section-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin: 0 0 8px;\n}\n#ph-app .ph-divider {\n  border: none;\n  border-top: 1.5px solid #e2e8f0;\n  margin: 16px 0;\n}\n#ph-app .ph-freee-cta {\n  margin-top: 28px;\n  padding: 18px 20px;\n  background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);\n  border: 1.5px solid #bae6fd;\n  border-radius: 10px;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n#ph-app .ph-freee-cta p {\n  margin: 0;\n  font-size: 14px;\n  color: #0369a1;\n  font-weight: 600;\n}\n#ph-app .ph-freee-cta span {\n  font-size: 13px;\n  color: #0c4a6e;\n  font-weight: 400;\n}\n#ph-app .ph-freee-cta a {\n  display: inline-block;\n  margin-top: 4px;\n  padding: 9px 20px;\n  background: #0284c7;\n  color: #fff;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 700;\n  text-decoration: none;\n  width: fit-content;\n  transition: background 0.15s;\n}\n#ph-app .ph-freee-cta a:hover {\n  background: #0369a1;\n}\n@media (max-width: 520px) {\n  #ph-app .ph-grid {\n    grid-template-columns: 1fr;\n  }\n}\n\u003c/style\u003e\n\u003cp class=\"ph-section-title\"\u003eプリセットサイズ\u003c/p\u003e","title":"プレースホルダー画像生成ツール"},{"content":"2つのテキストを貼り付けるだけで、追加・削除・変更箇所を一目で確認。サーバー送信なし、登録不要。すべてブラウザ内で完結します。\n比較する ⇄ 入れ替え クリア 空白を無視 大文字/小文字を区別しない 左右表示 統合表示 結果をコピー 変更前（元のテキスト） 変更後（新しいテキスト） 0 追加 0 削除 0 変更 0 変化なし 差分結果 上のテキストを入力して「比較する」をクリックしてください。 クリップボードにコピーしました！ コードレビューの経費管理もかんたんに\nfreee会計なら、開発ツール・サーバー費用の経費精算もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 使い方 変更前のテキストを左のテキストエリアに貼り付けます 変更後のテキストを右のテキストエリアに貼り付けます 「比較する」ボタンをクリック（または入力後600ms後に自動比較） 色分けされた差分結果を確認します 色 意味 緑（+） 追加された行 赤（−） 削除された行 黄（~） 変更された行（文字レベルでハイライト） 白（　） 変化なしの行 オプション機能 空白を無視 — インデントや末尾スペースの違いを無視して比較します。コードのフォーマット変更後の比較に便利です。 大文字/小文字を区別しない — Hello と hello を同一として扱います。 入れ替え — 変更前・変更後を一発で入れ替えます。 左右表示 / 統合表示 — git diffユーザーには統合表示が馴染みやすいでしょう。 結果をコピー — +/− 記号付きのプレーンテキスト形式でクリップボードにコピーします。 こんな場面で活躍 コードレビュー前の差分確認 文書の改訂チェック（契約書・仕様書・マニュアルなど） 設定ファイルの環境差異の確認 翻訳テキストの構造比較 ログファイルの差分チェック Markdownをプレビュー → マークダウンプレビュー 文字列をエスケープ → 文字列エスケープツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/text-diff-checker/","summary":"\u003cp\u003e2つのテキストを貼り付けるだけで、追加・削除・変更箇所を一目で確認。サーバー送信なし、登録不要。すべてブラウザ内で完結します。\u003c/p\u003e\n\u003cdiv id=\"df-app\"\u003e\n\u003cstyle\u003e\n#df-app *,\n#df-app *::before,\n#df-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#df-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", Roboto, sans-serif;\n  font-size: 14px;\n  color: #1e293b;\n  line-height: 1.6;\n}\n#df-app .df-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n  margin-bottom: 14px;\n}\n#df-app .df-toolbar-group {\n  display: flex;\n  gap: 6px;\n  align-items: center;\n}\n#df-app .df-toolbar-sep {\n  width: 1px;\n  height: 26px;\n  background: #cbd5e1;\n  margin: 0 2px;\n}\n#df-app label.df-check {\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  font-size: 13px;\n  color: #475569;\n  cursor: pointer;\n  user-select: none;\n}\n#df-app label.df-check input[type=\"checkbox\"] {\n  width: 15px;\n  height: 15px;\n  accent-color: #6366f1;\n  cursor: pointer;\n}\n#df-app .df-btn {\n  padding: 6px 14px;\n  border-radius: 6px;\n  border: 1.5px solid #cbd5e1;\n  background: #f8fafc;\n  color: #334155;\n  font-size: 13px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: background 0.15s, border-color 0.15s, color 0.15s;\n  white-space: nowrap;\n}\n#df-app .df-btn:hover {\n  background: #f1f5f9;\n  border-color: #94a3b8;\n}\n#df-app .df-btn-primary {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n  font-weight: 600;\n}\n#df-app .df-btn-primary:hover {\n  background: #4f46e5;\n  border-color: #4f46e5;\n}\n#df-app .df-btn-danger {\n  background: #fff;\n  border-color: #fca5a5;\n  color: #dc2626;\n}\n#df-app .df-btn-danger:hover {\n  background: #fef2f2;\n  border-color: #f87171;\n}\n#df-app .df-view-toggle {\n  display: flex;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  overflow: hidden;\n}\n#df-app .df-view-toggle button {\n  padding: 5px 12px;\n  border: none;\n  background: #f8fafc;\n  color: #64748b;\n  font-size: 12px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n  border-right: 1px solid #cbd5e1;\n}\n#df-app .df-view-toggle button:last-child {\n  border-right: none;\n}\n#df-app .df-view-toggle button.active {\n  background: #6366f1;\n  color: #fff;\n}\n#df-app .df-inputs {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n  margin-bottom: 14px;\n}\n@media (max-width: 640px) {\n  #df-app .df-inputs {\n    grid-template-columns: 1fr;\n  }\n}\n#df-app .df-input-block {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n#df-app .df-input-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n}\n#df-app textarea.df-ta {\n  width: 100%;\n  height: 200px;\n  padding: 10px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 13px;\n  line-height: 1.6;\n  color: #1e293b;\n  background: #f8fafc;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#df-app textarea.df-ta:focus {\n  border-color: #6366f1;\n  background: #fff;\n}\n#df-app .df-stats {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-bottom: 14px;\n  padding: 12px 16px;\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n}\n#df-app .df-stat {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 13px;\n  color: #475569;\n}\n#df-app .df-stat-badge {\n  display: inline-block;\n  padding: 2px 8px;\n  border-radius: 999px;\n  font-size: 12px;\n  font-weight: 700;\n  min-width: 28px;\n  text-align: center;\n}\n#df-app .df-stat-added .df-stat-badge   { background: #dcfce7; color: #15803d; }\n#df-app .df-stat-removed .df-stat-badge { background: #fee2e2; color: #b91c1c; }\n#df-app .df-stat-changed .df-stat-badge { background: #fef9c3; color: #a16207; }\n#df-app .df-stat-unchanged .df-stat-badge { background: #f1f5f9; color: #475569; }\n#df-app .df-result-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 8px;\n}\n#df-app .df-result-title {\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n}\n#df-app .df-result-wrap {\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  overflow: hidden;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 13px;\n  line-height: 1.6;\n}\n/* Side-by-side */\n#df-app .df-side {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  min-height: 60px;\n}\n#df-app .df-side-col {\n  overflow-x: auto;\n}\n#df-app .df-side-col:first-child {\n  border-right: 1.5px solid #e2e8f0;\n}\n#df-app .df-side-col-header {\n  padding: 6px 10px;\n  font-size: 11px;\n  font-weight: 600;\n  color: #94a3b8;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  background: #f1f5f9;\n  border-bottom: 1px solid #e2e8f0;\n}\n#df-app .df-line {\n  display: flex;\n  align-items: stretch;\n  min-height: 22px;\n}\n#df-app .df-line-num {\n  min-width: 38px;\n  padding: 1px 8px;\n  text-align: right;\n  color: #94a3b8;\n  user-select: none;\n  border-right: 1px solid #e2e8f0;\n  background: #f8fafc;\n  font-size: 12px;\n  flex-shrink: 0;\n}\n#df-app .df-line-content {\n  padding: 1px 10px;\n  white-space: pre;\n  flex: 1;\n  min-width: 0;\n}\n#df-app .df-line.added   { background: #f0fdf4; }\n#df-app .df-line.removed { background: #fef2f2; }\n#df-app .df-line.changed { background: #fefce8; }\n#df-app .df-line.empty   { background: #fafafa; }\n#df-app .df-line-num.added   { background: #dcfce7; color: #15803d; }\n#df-app .df-line-num.removed { background: #fee2e2; color: #b91c1c; }\n#df-app .df-line-num.changed { background: #fef9c3; color: #a16207; }\n#df-app .df-line-mark {\n  min-width: 18px;\n  text-align: center;\n  flex-shrink: 0;\n  font-weight: 700;\n  padding: 1px 2px;\n  font-size: 13px;\n}\n#df-app .added   .df-line-mark { color: #16a34a; }\n#df-app .removed .df-line-mark { color: #dc2626; }\n#df-app .changed .df-line-mark { color: #ca8a04; }\n/* Unified */\n#df-app .df-unified {\n  min-height: 60px;\n}\n#df-app .df-unified .df-line-num {\n  min-width: 60px;\n}\n#df-app .df-empty-state {\n  padding: 40px 20px;\n  text-align: center;\n  color: #94a3b8;\n  font-size: 14px;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", Roboto, sans-serif;\n}\n#df-app .df-copy-toast {\n  display: none;\n  position: fixed;\n  bottom: 24px;\n  right: 24px;\n  background: #1e293b;\n  color: #fff;\n  padding: 10px 18px;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 500;\n  z-index: 9999;\n  box-shadow: 0 4px 16px rgba(0,0,0,0.18);\n  pointer-events: none;\n}\n#df-app .df-copy-toast.show { display: block; }\n#df-app .df-char-add { background: #bbf7d0; border-radius: 2px; }\n#df-app .df-char-del { background: #fecaca; border-radius: 2px; text-decoration: line-through; }\n\u003c/style\u003e\n\u003c!-- ツールバー --\u003e\n\u003cdiv class=\"df-toolbar\"\u003e\n  \u003cdiv class=\"df-toolbar-group\"\u003e\n    \u003cbutton class=\"df-btn df-btn-primary\" id=\"df-run\"\u003e比較する\u003c/button\u003e\n    \u003cbutton class=\"df-btn\" id=\"df-swap\"\u003e⇄ 入れ替え\u003c/button\u003e\n    \u003cbutton class=\"df-btn df-btn-danger\" id=\"df-clear\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"df-toolbar-sep\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"df-toolbar-group\"\u003e\n    \u003clabel class=\"df-check\"\u003e\u003cinput type=\"checkbox\" id=\"df-ignore-ws\"\u003e 空白を無視\u003c/label\u003e\n    \u003clabel class=\"df-check\"\u003e\u003cinput type=\"checkbox\" id=\"df-ignore-case\"\u003e 大文字/小文字を区別しない\u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"df-toolbar-sep\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"df-view-toggle\"\u003e\n    \u003cbutton id=\"df-view-side\" class=\"active\"\u003e左右表示\u003c/button\u003e\n    \u003cbutton id=\"df-view-unified\"\u003e統合表示\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"df-toolbar-sep\"\u003e\u003c/div\u003e\n  \u003cbutton class=\"df-btn\" id=\"df-copy\"\u003e結果をコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- 入力欄 --\u003e\n\u003cdiv class=\"df-inputs\"\u003e\n  \u003cdiv class=\"df-input-block\"\u003e\n    \u003cdiv class=\"df-input-label\"\u003e変更前（元のテキスト）\u003c/div\u003e\n    \u003ctextarea class=\"df-ta\" id=\"df-orig\" placeholder=\"元のテキストをここに貼り付けてください...\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"df-input-block\"\u003e\n    \u003cdiv class=\"df-input-label\"\u003e変更後（新しいテキスト）\u003c/div\u003e\n    \u003ctextarea class=\"df-ta\" id=\"df-mod\" placeholder=\"新しいテキストをここに貼り付けてください...\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 統計 --\u003e\n\u003cdiv class=\"df-stats\" id=\"df-stats\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"df-stat df-stat-added\"\u003e\u003cspan class=\"df-stat-badge\" id=\"df-s-add\"\u003e0\u003c/span\u003e 追加\u003c/div\u003e\n  \u003cdiv class=\"df-stat df-stat-removed\"\u003e\u003cspan class=\"df-stat-badge\" id=\"df-s-rem\"\u003e0\u003c/span\u003e 削除\u003c/div\u003e\n  \u003cdiv class=\"df-stat df-stat-changed\"\u003e\u003cspan class=\"df-stat-badge\" id=\"df-s-chg\"\u003e0\u003c/span\u003e 変更\u003c/div\u003e\n  \u003cdiv class=\"df-stat df-stat-unchanged\"\u003e\u003cspan class=\"df-stat-badge\" id=\"df-s-unc\"\u003e0\u003c/span\u003e 変化なし\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 差分結果 --\u003e\n\u003cdiv class=\"df-result-header\"\u003e\n  \u003cdiv class=\"df-result-title\"\u003e差分結果\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"df-result-wrap\" id=\"df-result\"\u003e\n  \u003cdiv class=\"df-empty-state\"\u003e上のテキストを入力して「\u003cstrong\u003e比較する\u003c/strong\u003e」をクリックしてください。\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"df-copy-toast\" id=\"df-toast\"\u003eクリップボードにコピーしました！\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  function lcs(a, b) {\n    const m = a.length, n = b.length;\n    if (m === 0 || n === 0) return [];\n    if (m * n \u003c= 160000) {\n      const table = Array.from({length: m + 1}, () =\u003e new Uint16Array(n + 1));\n      for (let i = 1; i \u003c= m; i++) {\n        for (let j = 1; j \u003c= n; j++) {\n          if (a[i-1] === b[j-1]) table[i][j] = table[i-1][j-1] + 1;\n          else table[i][j] = Math.max(table[i-1][j], table[i][j-1]);\n        }\n      }\n      let i = m, j = n;\n      const seq = [];\n      while (i \u003e 0 \u0026\u0026 j \u003e 0) {\n        if (a[i-1] === b[j-1]) { seq.push([i-1, j-1]); i--; j--; }\n        else if (table[i-1][j] \u003e= table[i][j-1]) i--;\n        else j--;\n      }\n      return seq.reverse();\n    } else {\n      const result = [];\n      let ai = 0, bi = 0;\n      while (ai \u003c m \u0026\u0026 bi \u003c n) {\n        if (a[ai] === b[bi]) { result.push([ai, bi]); ai++; bi++; }\n        else { ai++; }\n      }\n      return result;\n    }\n  }\n\n  function computeDiff(origLines, modLines) {\n    const matches = lcs(origLines, modLines);\n    const result = [];\n    let oi = 0, mi = 0, matchIdx = 0;\n\n    while (oi \u003c origLines.length || mi \u003c modLines.length) {\n      const nextMatch = matches[matchIdx];\n      if (nextMatch \u0026\u0026 oi === nextMatch[0] \u0026\u0026 mi === nextMatch[1]) {\n        result.push({ type: 'unchanged', orig: origLines[oi], mod: modLines[mi], oi, mi });\n        oi++; mi++; matchIdx++;\n      } else {\n        const remStart = oi, addStart = mi;\n        while (oi \u003c origLines.length \u0026\u0026 (!nextMatch || oi \u003c nextMatch[0])) oi++;\n        const curMatch = matches[matchIdx];\n        while (mi \u003c modLines.length \u0026\u0026 (!curMatch || mi \u003c curMatch[1])) mi++;\n\n        const remLines = origLines.slice(remStart, oi);\n        const addLines = modLines.slice(addStart, mi);\n        const pairLen = Math.min(remLines.length, addLines.length);\n        for (let k = 0; k \u003c pairLen; k++) {\n          result.push({ type: 'changed', orig: remLines[k], mod: addLines[k], oi: remStart+k, mi: addStart+k });\n        }\n        for (let k = pairLen; k \u003c remLines.length; k++) {\n          result.push({ type: 'removed', orig: remLines[k], mod: null, oi: remStart+k, mi: null });\n        }\n        for (let k = pairLen; k \u003c addLines.length; k++) {\n          result.push({ type: 'added', orig: null, mod: addLines[k], oi: null, mi: addStart+k });\n        }\n      }\n    }\n    return result;\n  }\n\n  function charDiff(a, b) {\n    const la = Array.from(a), lb = Array.from(b);\n    if (la.length * lb.length \u003e 4000) return [esc(a), esc(b)];\n    const m = la.length, n = lb.length;\n    const table = Array.from({length: m+1}, () =\u003e new Uint16Array(n+1));\n    for (let i = 1; i \u003c= m; i++)\n      for (let j = 1; j \u003c= n; j++)\n        table[i][j] = la[i-1]===lb[j-1] ? table[i-1][j-1]+1 : Math.max(table[i-1][j],table[i][j-1]);\n    let i = m, j = n;\n    const ops = [];\n    while (i \u003e 0 || j \u003e 0) {\n      if (i \u003e 0 \u0026\u0026 j \u003e 0 \u0026\u0026 la[i-1]===lb[j-1]) { ops.push(['eq',la[i-1]]); i--; j--; }\n      else if (j \u003e 0 \u0026\u0026 (i===0 || table[i][j-1] \u003e= table[i-1][j])) { ops.push(['ins',lb[j-1]]); j--; }\n      else { ops.push(['del',la[i-1]]); i--; }\n    }\n    ops.reverse();\n    let oh='', mh='';\n    for (const [t,c] of ops) {\n      const ec = esc(c);\n      if      (t==='eq')  { oh += ec; mh += ec; }\n      else if (t==='del') { oh += `\u003cspan class=\"df-char-del\"\u003e${ec}\u003c/span\u003e`; }\n      else                { mh += `\u003cspan class=\"df-char-add\"\u003e${ec}\u003c/span\u003e`; }\n    }\n    return [oh, mh];\n  }\n\n  function esc(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  function prepareLines(text, ignoreWs, ignoreCase) {\n    let lines = text.split('\\n');\n    if (lines.length \u003e 0 \u0026\u0026 lines[lines.length-1] === '') lines.pop();\n    return lines.map(l =\u003e {\n      let r = l;\n      if (ignoreWs) r = r.trim().replace(/\\s+/g, ' ');\n      if (ignoreCase) r = r.toLowerCase();\n      return r;\n    });\n  }\n\n  function renderSide(diffs) {\n    let leftHTML = '', rightHTML = '';\n    let ln = 0, rn = 0;\n\n    for (const d of diffs) {\n      if (d.type === 'unchanged') {\n        ln++; rn++;\n        const content = esc(d.orig);\n        leftHTML  += `\u003cdiv class=\"df-line\"\u003e\u003cdiv class=\"df-line-num\"\u003e${ln}\u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e \u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e${content}\u003c/div\u003e\u003c/div\u003e`;\n        rightHTML += `\u003cdiv class=\"df-line\"\u003e\u003cdiv class=\"df-line-num\"\u003e${rn}\u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e \u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e${content}\u003c/div\u003e\u003c/div\u003e`;\n      } else if (d.type === 'removed') {\n        ln++;\n        leftHTML  += `\u003cdiv class=\"df-line removed\"\u003e\u003cdiv class=\"df-line-num removed\"\u003e${ln}\u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e−\u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e${esc(d.orig)}\u003c/div\u003e\u003c/div\u003e`;\n        rightHTML += `\u003cdiv class=\"df-line empty\"\u003e\u003cdiv class=\"df-line-num\"\u003e \u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e \u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e \u003c/div\u003e\u003c/div\u003e`;\n      } else if (d.type === 'added') {\n        rn++;\n        leftHTML  += `\u003cdiv class=\"df-line empty\"\u003e\u003cdiv class=\"df-line-num\"\u003e \u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e \u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e \u003c/div\u003e\u003c/div\u003e`;\n        rightHTML += `\u003cdiv class=\"df-line added\"\u003e\u003cdiv class=\"df-line-num added\"\u003e${rn}\u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e+\u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e${esc(d.mod)}\u003c/div\u003e\u003c/div\u003e`;\n      } else {\n        ln++; rn++;\n        const [oh, mh] = charDiff(d.orig, d.mod);\n        leftHTML  += `\u003cdiv class=\"df-line changed\"\u003e\u003cdiv class=\"df-line-num changed\"\u003e${ln}\u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e~\u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e${oh}\u003c/div\u003e\u003c/div\u003e`;\n        rightHTML += `\u003cdiv class=\"df-line changed\"\u003e\u003cdiv class=\"df-line-num changed\"\u003e${rn}\u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e~\u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e${mh}\u003c/div\u003e\u003c/div\u003e`;\n      }\n    }\n\n    if (!leftHTML \u0026\u0026 !rightHTML) {\n      return '\u003cdiv class=\"df-empty-state\"\u003e差分が見つかりません — 2つのテキストは同一です。\u003c/div\u003e';\n    }\n\n    return `\u003cdiv class=\"df-side\"\u003e\n      \u003cdiv class=\"df-side-col\"\u003e\n        \u003cdiv class=\"df-side-col-header\"\u003e変更前\u003c/div\u003e\n        ${leftHTML}\n      \u003c/div\u003e\n      \u003cdiv class=\"df-side-col\"\u003e\n        \u003cdiv class=\"df-side-col-header\"\u003e変更後\u003c/div\u003e\n        ${rightHTML}\n      \u003c/div\u003e\n    \u003c/div\u003e`;\n  }\n\n  function renderUnified(diffs) {\n    let html = '';\n    let ln = 0, rn = 0;\n\n    for (const d of diffs) {\n      if (d.type === 'unchanged') {\n        ln++; rn++;\n        html += `\u003cdiv class=\"df-line\"\u003e\u003cdiv class=\"df-line-num\"\u003e${ln} / ${rn}\u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e \u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e${esc(d.orig)}\u003c/div\u003e\u003c/div\u003e`;\n      } else if (d.type === 'removed') {\n        ln++;\n        html += `\u003cdiv class=\"df-line removed\"\u003e\u003cdiv class=\"df-line-num removed\"\u003e${ln} /\u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e−\u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e${esc(d.orig)}\u003c/div\u003e\u003c/div\u003e`;\n      } else if (d.type === 'added') {\n        rn++;\n        html += `\u003cdiv class=\"df-line added\"\u003e\u003cdiv class=\"df-line-num added\"\u003e/ ${rn}\u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e+\u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e${esc(d.mod)}\u003c/div\u003e\u003c/div\u003e`;\n      } else {\n        ln++; rn++;\n        const [oh, mh] = charDiff(d.orig, d.mod);\n        html += `\u003cdiv class=\"df-line removed\"\u003e\u003cdiv class=\"df-line-num removed\"\u003e${ln} /\u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e−\u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e${oh}\u003c/div\u003e\u003c/div\u003e`;\n        html += `\u003cdiv class=\"df-line added\"\u003e\u003cdiv class=\"df-line-num added\"\u003e/ ${rn}\u003c/div\u003e\u003cdiv class=\"df-line-mark\"\u003e+\u003c/div\u003e\u003cdiv class=\"df-line-content\"\u003e${mh}\u003c/div\u003e\u003c/div\u003e`;\n      }\n    }\n\n    if (!html) {\n      return '\u003cdiv class=\"df-empty-state\"\u003e差分が見つかりません — 2つのテキストは同一です。\u003c/div\u003e';\n    }\n    return `\u003cdiv class=\"df-unified\"\u003e${html}\u003c/div\u003e`;\n  }\n\n  function buildPlainText(diffs) {\n    let out = '';\n    for (const d of diffs) {\n      if      (d.type === 'unchanged') out += `  ${d.orig}\\n`;\n      else if (d.type === 'removed')   out += `- ${d.orig}\\n`;\n      else if (d.type === 'added')     out += `+ ${d.mod}\\n`;\n      else { out += `- ${d.orig}\\n+ ${d.mod}\\n`; }\n    }\n    return out;\n  }\n\n  let currentDiffs = null;\n  let currentView = 'side';\n\n  function runDiff() {\n    const origText = document.getElementById('df-orig').value;\n    const modText  = document.getElementById('df-mod').value;\n    const ignoreWs   = document.getElementById('df-ignore-ws').checked;\n    const ignoreCase = document.getElementById('df-ignore-case').checked;\n\n    const origLines = prepareLines(origText, ignoreWs, ignoreCase);\n    const modLines  = prepareLines(modText,  ignoreWs, ignoreCase);\n\n    const rawOrig = origText.split('\\n');\n    const rawMod  = modText.split('\\n');\n    if (rawOrig.length \u003e 0 \u0026\u0026 rawOrig[rawOrig.length-1]==='') rawOrig.pop();\n    if (rawMod.length  \u003e 0 \u0026\u0026 rawMod[rawMod.length-1]==='')   rawMod.pop();\n\n    const diffs = computeDiff(origLines, modLines);\n\n    const displayDiffs = diffs.map(d =\u003e {\n      const nd = { type: d.type };\n      if (d.oi !== null \u0026\u0026 d.oi !== undefined) nd.orig = rawOrig[d.oi] ?? '';\n      else nd.orig = null;\n      if (d.mi !== null \u0026\u0026 d.mi !== undefined) nd.mod  = rawMod[d.mi]  ?? '';\n      else nd.mod  = null;\n      return nd;\n    });\n\n    currentDiffs = displayDiffs;\n\n    let added=0, removed=0, changed=0, unchanged=0;\n    for (const d of displayDiffs) {\n      if      (d.type==='added')     added++;\n      else if (d.type==='removed')   removed++;\n      else if (d.type==='changed')   changed++;\n      else                           unchanged++;\n    }\n    document.getElementById('df-s-add').textContent = added;\n    document.getElementById('df-s-rem').textContent = removed;\n    document.getElementById('df-s-chg').textContent = changed;\n    document.getElementById('df-s-unc').textContent = unchanged;\n    document.getElementById('df-stats').style.display = 'flex';\n\n    renderResult();\n  }\n\n  function renderResult() {\n    if (!currentDiffs) return;\n    const el = document.getElementById('df-result');\n    el.innerHTML = currentView === 'side'\n      ? renderSide(currentDiffs)\n      : renderUnified(currentDiffs);\n  }\n\n  function showToast(msg) {\n    const t = document.getElementById('df-toast');\n    t.textContent = msg;\n    t.classList.add('show');\n    setTimeout(() =\u003e t.classList.remove('show'), 2000);\n  }\n\n  document.getElementById('df-run').addEventListener('click', runDiff);\n\n  document.getElementById('df-swap').addEventListener('click', function() {\n    const a = document.getElementById('df-orig');\n    const b = document.getElementById('df-mod');\n    const tmp = a.value;\n    a.value = b.value;\n    b.value = tmp;\n    if (currentDiffs) runDiff();\n  });\n\n  document.getElementById('df-clear').addEventListener('click', function() {\n    document.getElementById('df-orig').value = '';\n    document.getElementById('df-mod').value  = '';\n    currentDiffs = null;\n    document.getElementById('df-stats').style.display = 'none';\n    document.getElementById('df-result').innerHTML = '\u003cdiv class=\"df-empty-state\"\u003e上のテキストを入力して「\u003cstrong\u003e比較する\u003c/strong\u003e」をクリックしてください。\u003c/div\u003e';\n  });\n\n  document.getElementById('df-copy').addEventListener('click', function() {\n    if (!currentDiffs) { showToast('コピーする内容がありません。'); return; }\n    const text = buildPlainText(currentDiffs);\n    navigator.clipboard.writeText(text).then(() =\u003e showToast('クリップボードにコピーしました！')).catch(() =\u003e {\n      const ta = document.createElement('textarea');\n      ta.value = text; ta.style.position='fixed'; ta.style.opacity='0';\n      document.body.appendChild(ta); ta.select();\n      document.execCommand('copy'); document.body.removeChild(ta);\n      showToast('クリップボードにコピーしました！');\n    });\n  });\n\n  document.getElementById('df-view-side').addEventListener('click', function() {\n    currentView = 'side';\n    this.classList.add('active');\n    document.getElementById('df-view-unified').classList.remove('active');\n    renderResult();\n  });\n\n  document.getElementById('df-view-unified').addEventListener('click', function() {\n    currentView = 'unified';\n    this.classList.add('active');\n    document.getElementById('df-view-side').classList.remove('active');\n    renderResult();\n  });\n\n  let debTimer;\n  function maybeAutoRun() {\n    clearTimeout(debTimer);\n    debTimer = setTimeout(function() {\n      if (document.getElementById('df-orig').value \u0026\u0026 document.getElementById('df-mod').value) {\n        runDiff();\n      }\n    }, 600);\n  }\n  document.getElementById('df-orig').addEventListener('input', maybeAutoRun);\n  document.getElementById('df-mod').addEventListener('input',  maybeAutoRun);\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv class=\"df-freee-cta\" style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003eコードレビューの経費管理もかんたんに\u003c/p\u003e","title":"テキスト差分比較ツール"},{"content":" 絵文字検索＆コピー 1500以上の絵文字をキーワードで検索 — クリックでコピー\n肌色: \u0026#x270B; \u0026#x270B;\u0026#x1F3FB; \u0026#x270B;\u0026#x1F3FC; \u0026#x270B;\u0026#x1F3FD; \u0026#x270B;\u0026#x1F3FE; \u0026#x270B;\u0026#x1F3FF; 最近使った絵文字 \u0026#x1F600; Grinning Face Unicode U+1F600 コピー HTMLエンティティ \u0026#amp;#128512; コピー CSS値 \\1F600 コピー 絵文字をコピー 絵文字が見つかりません。別のキーワードで試してください。 ビジネスの会計・確定申告を効率化しませんか？\nfreee会計を無料で試す 関連ツール: Unicode記号を探すなら Unicode文字マップ / ポップアップ形式なら 絵文字ピッカー ","permalink":"https://productivity-works.com/ja/tools/emoji-search/","summary":"\u003cdiv id=\"es-app\"\u003e\n\u003cstyle\u003e\n#es-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', Roboto, sans-serif;\n  max-width: 960px;\n  margin: 0 auto;\n  padding: 0 0 40px 0;\n  color: #f1f5f9;\n}\n#es-app * { box-sizing: border-box; }\n\n.es-hero {\n  background: linear-gradient(135deg, #1e3a5f 0%, #1e40af 50%, #1d4ed8 100%);\n  border-radius: 16px;\n  padding: 36px 32px;\n  margin-bottom: 24px;\n  text-align: center;\n}\n.es-hero h1 { font-size: 1.9rem; font-weight: 800; color: #bfdbfe; margin: 0 0 8px 0; }\n.es-hero p  { color: #93c5fd; margin: 0; font-size: 1rem; }\n\n.es-search-row {\n  display: flex;\n  gap: 10px;\n  align-items: center;\n  flex-wrap: wrap;\n  margin-bottom: 14px;\n}\n.es-search {\n  flex: 1;\n  min-width: 220px;\n  padding: 11px 16px;\n  border-radius: 10px;\n  border: 2px solid #3b82f6;\n  background: #1e293b;\n  color: #f1f5f9;\n  font-size: 1rem;\n  outline: none;\n  transition: border-color 0.2s;\n}\n.es-search::placeholder { color: #64748b; }\n.es-search:focus { border-color: #60a5fa; }\n\n.es-tone-wrap {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  flex-shrink: 0;\n}\n.es-tone-label { color: #93c5fd; font-size: 0.82rem; font-weight: 600; white-space: nowrap; }\n.es-tone-buttons { display: flex; gap: 5px; }\n.es-tone-btn {\n  width: 28px; height: 28px;\n  border-radius: 50%;\n  border: 2px solid transparent;\n  cursor: pointer;\n  font-size: 1rem;\n  display: flex; align-items: center; justify-content: center;\n  background: #1e293b;\n  transition: border-color 0.2s, transform 0.1s;\n}\n.es-tone-btn:hover { transform: scale(1.2); }\n.es-tone-btn.active { border-color: #3b82f6; }\n\n.es-tabs {\n  display: flex;\n  gap: 6px;\n  flex-wrap: wrap;\n  margin-bottom: 14px;\n}\n.es-tab {\n  padding: 6px 13px;\n  border-radius: 20px;\n  border: 2px solid #334155;\n  background: #1e293b;\n  color: #94a3b8;\n  cursor: pointer;\n  font-size: 0.82rem;\n  font-weight: 600;\n  transition: all 0.2s;\n  white-space: nowrap;\n}\n.es-tab:hover { border-color: #3b82f6; color: #93c5fd; }\n.es-tab.active { background: #3b82f6; border-color: #3b82f6; color: #fff; }\n\n.es-section-label {\n  font-size: 0.75rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #3b82f6;\n  margin: 0 0 8px 0;\n}\n\n.es-recent-box {\n  background: #1e293b;\n  border-radius: 12px;\n  padding: 12px 14px;\n  margin-bottom: 14px;\n  border: 1px solid #334155;\n}\n.es-recent-row { display: flex; flex-wrap: wrap; gap: 3px; }\n\n.es-grid-box {\n  background: #1e293b;\n  border-radius: 12px;\n  padding: 12px 14px;\n  border: 1px solid #334155;\n  margin-bottom: 14px;\n}\n.es-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(44px, 1fr));\n  gap: 3px;\n}\n.es-cell {\n  width: 44px; height: 44px;\n  display: flex; align-items: center; justify-content: center;\n  font-size: 1.5rem;\n  border-radius: 8px;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n  position: relative;\n  border: 2px solid transparent;\n}\n.es-cell:hover { background: #334155; transform: scale(1.18); z-index: 2; }\n.es-cell.selected { border-color: #3b82f6; background: #1e3a5f; }\n\n.es-detail {\n  background: #1e293b;\n  border-radius: 12px;\n  padding: 18px 20px;\n  border: 1px solid #3b82f6;\n  margin-bottom: 14px;\n  display: none;\n}\n.es-detail.visible { display: block; }\n.es-detail-inner { display: flex; align-items: flex-start; gap: 20px; flex-wrap: wrap; }\n.es-preview { font-size: 4rem; line-height: 1; flex-shrink: 0; }\n.es-info { flex: 1; min-width: 200px; }\n.es-info-name { font-size: 1.1rem; font-weight: 700; color: #bfdbfe; margin-bottom: 10px; }\n.es-info-row {\n  display: flex; align-items: center; gap: 8px;\n  margin-bottom: 7px; flex-wrap: wrap;\n}\n.es-info-label { color: #64748b; font-size: 0.8rem; width: 90px; flex-shrink: 0; }\n.es-info-val {\n  font-family: 'Courier New', monospace;\n  font-size: 0.88rem;\n  color: #93c5fd;\n  background: #0f172a;\n  padding: 3px 8px;\n  border-radius: 5px;\n}\n.es-copy-btn {\n  padding: 3px 10px;\n  border-radius: 6px;\n  border: 1px solid #3b82f6;\n  background: transparent;\n  color: #60a5fa;\n  font-size: 0.78rem;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n.es-copy-btn:hover { background: #1e3a5f; }\n.es-copy-emoji-btn {\n  margin-top: 10px;\n  padding: 8px 20px;\n  border-radius: 8px;\n  border: none;\n  background: #3b82f6;\n  color: #fff;\n  font-size: 0.95rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n.es-copy-emoji-btn:hover { background: #2563eb; }\n\n.es-empty { color: #64748b; font-size: 0.95rem; text-align: center; padding: 20px 0; }\n\n.es-toast {\n  position: fixed;\n  bottom: 24px; left: 50%;\n  transform: translateX(-50%) translateY(20px);\n  background: #1d4ed8;\n  color: #fff;\n  padding: 10px 22px;\n  border-radius: 10px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  opacity: 0;\n  transition: opacity 0.25s, transform 0.25s;\n  pointer-events: none;\n  z-index: 9999;\n  white-space: nowrap;\n}\n.es-toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }\n\n.es-count { color: #64748b; font-size: 0.8rem; margin-bottom: 8px; }\n\n@media (max-width: 600px) {\n  .es-hero { padding: 24px 16px; }\n  .es-hero h1 { font-size: 1.4rem; }\n  .es-cell { width: 38px; height: 38px; font-size: 1.3rem; }\n  .es-preview { font-size: 3rem; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"es-hero\"\u003e\n  \u003ch1\u003e絵文字検索＆コピー\u003c/h1\u003e\n  \u003cp\u003e1500以上の絵文字をキーワードで検索 — クリックでコピー\u003c/p\u003e","title":"絵文字検索＆コピーツール"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nサブスク管理計算ツール｜月額サブスクの年間コストを見える化 毎月当たり前のように引き落とされているサブスクリプション費用、合計いくらか把握できていますか？使っているサービスにチェックを入れて金額を確認するだけで、年間コスト・1日あたりの費用・もし投資に回した場合の将来額を自動で計算します。見えにくい固定費を「見える化」して、賢く節約しましょう。\nサブスクリストを確認・編集 チェックを入れたサービスが集計対象になります。金額・名前は直接編集できます。\n動画・音楽 仕事・生産性 健康・フィットネス ニュース・学習 その他 ＋ サブスクを追加\n月額合計 0円 年間: 0円 1日あたり: 0円 この金額を投資したら？ （年利5%・年間コストを一括投資した場合） 5年後 - 10年後 - 20年後 - カテゴリ別内訳 サブスク節約のコツ 1. まず「全部リストアップ」する クレジットカードの明細を3ヶ月分さかのぼり、定期引き落としをすべてリスト化しましょう。「使っていたのに気づかなかった」サブスクが1〜2件は見つかります。\n2. 「使用頻度」で仕分けする 月1回以下しか使わないサービスは「解約候補」です。年額換算で考えると決断しやすくなります。Netflix（年間17,880円）を解約するだけで、スターバックスラテ約59杯分の節約になります。\n3. 複数サービスの重複を見つける 動画サービスをNetflix・Disney+・Amazon Primeと3つ契約していませんか？「今月はNetflixだけ」と決めてローテーションするだけで固定費が下がります。\n4. 家族プラン・年払いを活用する Spotifyのファミリープランは最大6人で月額1,980円（1人あたり330円）。SpotifyやYouTube Premiumは年払いにすると約2ヶ月分お得になります。\n5. 無料トライアル終了日をカレンダーに入れる 無料期間が終わった直後に課金が始まるパターンが最も多い落とし穴です。登録時に必ずカレンダーへ「解約確認日」を入力する習慣をつけましょう。\n固定費を自動管理するならfreee会計 サブスクの引き落とし管理は、銀行口座・クレジットカードと自動連携できる会計ソフトを使うと格段に楽になります。\nfreee会計で固定費を自動管理する → 口座明細を自動取得して支出を分類・グラフ化してくれるため、「いつのまにか増えたサブスク」を月次で把握できます。確定申告にも対応しているため、フリーランス・副業をしている方にも最適です。\n関連ツール 月々の支出バランスを見直す → 家計簿シミュレーター 貯蓄目標を計算 → 貯蓄目標シミュレーター 年収から手取りを計算 → 手取り計算シミュレーター 純資産を把握する → 資産管理シミュレーター 関連記事 節約の始め方｜固定費を削るだけで月1万円浮かせる方法 クレジットカードおすすめ2026年版 NISAとiDeCo、どっちを先に始めるべきか？ 副業の始め方ガイド2026 ","permalink":"https://productivity-works.com/ja/tools/subscription-cost-calculator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"サブスク管理計算ツール月額サブスクの年間コストを見える化\"\u003eサブスク管理計算ツール｜月額サブスクの年間コストを見える化\u003c/h1\u003e\n\u003cp\u003e毎月当たり前のように引き落とされているサブスクリプション費用、合計いくらか把握できていますか？\u003cstrong\u003e使っているサービスにチェックを入れて金額を確認\u003c/strong\u003eするだけで、年間コスト・1日あたりの費用・もし投資に回した場合の将来額を自動で計算します。見えにくい固定費を「見える化」して、賢く節約しましょう。\u003c/p\u003e\n\u003cdiv id=\"sub-calc\" style=\"max-width:720px;margin:0 auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Hiragino Sans',sans-serif;color:#1e293b;\"\u003e\n\u003c!-- サブスクリスト --\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #e11d48;border-radius:12px;background:#fff1f2;margin-bottom:20px;\"\u003e\n\u003ch2 style=\"margin:0 0 4px 0;font-size:18px;color:#e11d48;\"\u003eサブスクリストを確認・編集\u003c/h2\u003e\n\u003cp style=\"margin:0 0 20px 0;font-size:13px;color:#64748b;\"\u003eチェックを入れたサービスが集計対象になります。金額・名前は直接編集できます。\u003c/p\u003e\n\u003c!-- 動画・音楽 --\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#e11d48;background:#ffe4e6;padding:4px 10px;border-radius:4px;margin-bottom:10px;display:inline-block;\"\u003e動画・音楽\u003c/div\u003e\n\u003cdiv id=\"rows-video\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 仕事・生産性 --\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#7c3aed;background:#ede9fe;padding:4px 10px;border-radius:4px;margin-bottom:10px;display:inline-block;\"\u003e仕事・生産性\u003c/div\u003e\n\u003cdiv id=\"rows-work\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 健康・フィットネス --\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#059669;background:#d1fae5;padding:4px 10px;border-radius:4px;margin-bottom:10px;display:inline-block;\"\u003e健康・フィットネス\u003c/div\u003e\n\u003cdiv id=\"rows-health\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ニュース・学習 --\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#d97706;background:#fef3c7;padding:4px 10px;border-radius:4px;margin-bottom:10px;display:inline-block;\"\u003eニュース・学習\u003c/div\u003e\n\u003cdiv id=\"rows-news\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- その他 --\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#0284c7;background:#e0f2fe;padding:4px 10px;border-radius:4px;margin-bottom:10px;display:inline-block;\"\u003eその他\u003c/div\u003e\n\u003cdiv id=\"rows-other\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 追加ボタン --\u003e\n\u003cp\u003e\u003cbutton onclick=\"addCustomRow()\" style=\"display:block;width:100%;padding:10px;background:white;border:2px dashed #e11d48;border-radius:8px;color:#e11d48;font-size:14px;font-weight:bold;cursor:pointer;\"\u003e＋ サブスクを追加\u003c/button\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003c!-- 結果パネル --\u003e\n\u003cdiv id=\"sub-results\" style=\"padding:24px;border:2px solid #e11d48;border-radius:12px;background:white;margin-bottom:20px;\"\u003e\n\u003cdiv style=\"background:#e11d48;color:white;border-radius:10px;padding:20px;text-align:center;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:13px;margin-bottom:4px;opacity:0.9;\"\u003e月額合計\u003c/div\u003e\n\u003cdiv id=\"res-monthly\" style=\"font-size:42px;font-weight:bold;line-height:1.1;\"\u003e0円\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;margin-top:6px;opacity:0.85;display:flex;justify-content:center;gap:24px;\"\u003e\n\u003cspan\u003e年間: \u003cstrong id=\"res-yearly\"\u003e0円\u003c/strong\u003e\u003c/span\u003e\n\u003cspan\u003e1日あたり: \u003cstrong id=\"res-daily\"\u003e0円\u003c/strong\u003e\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 投資シミュレーション --\u003e\n\u003cdiv style=\"background:#fdf2f8;border:1px solid #fbcfe8;border-radius:10px;padding:18px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:15px;font-weight:bold;color:#9d174d;margin-bottom:12px;\"\u003eこの金額を投資したら？ \u003cspan style=\"font-size:12px;font-weight:normal;color:#64748b;\"\u003e（年利5%・年間コストを一括投資した場合）\u003c/span\u003e\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;text-align:center;\"\u003e\n\u003cdiv style=\"background:white;border-radius:8px;padding:12px;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;margin-bottom:4px;\"\u003e5年後\u003c/div\u003e\n\u003cdiv id=\"res-inv5\" style=\"font-size:20px;font-weight:bold;color:#e11d48;\"\u003e-\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:white;border-radius:8px;padding:12px;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;margin-bottom:4px;\"\u003e10年後\u003c/div\u003e\n\u003cdiv id=\"res-inv10\" style=\"font-size:20px;font-weight:bold;color:#e11d48;\"\u003e-\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:white;border-radius:8px;padding:12px;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;margin-bottom:4px;\"\u003e20年後\u003c/div\u003e\n\u003cdiv id=\"res-inv20\" style=\"font-size:20px;font-weight:bold;color:#e11d48;\"\u003e-\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- カテゴリ別内訳 --\u003e\n\u003cdiv\u003e\n\u003cdiv style=\"font-size:15px;font-weight:bold;color:#1e293b;margin-bottom:12px;\"\u003eカテゴリ別内訳\u003c/div\u003e\n\u003cdiv id=\"res-breakdown\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n\nvar categories = [\n  {\n    id: 'video',\n    label: '動画・音楽',\n    color: '#e11d48',\n    items: [\n      {name:'Netflix', cost:1490, checked:true},\n      {name:'Spotify', cost:980, checked:true},\n      {name:'YouTube Premium', cost:1280, checked:false},\n      {name:'Disney+', cost:990, checked:false},\n      {name:'Amazon Prime', cost:600, checked:true}\n    ]\n  },\n  {\n    id: 'work',\n    label: '仕事・生産性',\n    color: '#7c3aed',\n    items: [\n      {name:'Microsoft 365', cost:1490, checked:false},\n      {name:'Google One', cost:250, checked:false},\n      {name:'Notion', cost:0, checked:false},\n      {name:'Dropbox', cost:1500, checked:false}\n    ]\n  },\n  {\n    id: 'health',\n    label: '健康・フィットネス',\n    color: '#059669',\n    items: [\n      {name:'ジム会費', cost:8000, checked:false},\n      {name:'フィットネスアプリ', cost:980, checked:false}\n    ]\n  },\n  {\n    id: 'news',\n    label: 'ニュース・学習',\n    color: '#d97706',\n    items: [\n      {name:'新聞電子版', cost:1000, checked:false},\n      {name:'オンライン講座', cost:2000, checked:false}\n    ]\n  },\n  {\n    id: 'other',\n    label: 'その他',\n    color: '#0284c7',\n    items: []\n  }\n];\n\nvar customCount = 0;\n\nfunction rowStyle(){\n  return 'display:flex;align-items:center;padding:8px 0;border-bottom:1px solid #fecdd3;gap:8px;';\n}\n\nfunction renderRows(cat){\n  var container = document.getElementById('rows-' + cat.id);\n  if(!container) return;\n  var html = '';\n  for(var i=0;i\u003ccat.items.length;i++){\n    var item = cat.items[i];\n    var ck = item.checked ? 'checked' : '';\n    html += '\u003cdiv style=\"'+rowStyle()+'\"\u003e';\n    html += '\u003cinput type=\"checkbox\" '+ck+' data-cat=\"'+cat.id+'\" data-idx=\"'+i+'\" onchange=\"onCheck(this)\" style=\"width:18px;height:18px;accent-color:#e11d48;flex-shrink:0;cursor:pointer;\"\u003e';\n    html += '\u003cinput type=\"text\" value=\"'+escHtml(item.name)+'\" data-cat=\"'+cat.id+'\" data-idx=\"'+i+'\" onchange=\"onNameChange(this)\" style=\"flex:1;border:none;background:transparent;font-size:14px;color:#1e293b;min-width:0;padding:2px 4px;border-radius:4px;\" onfocus=\"this.style.background=\\'#fff\\';this.style.border=\\'1px solid #fda4af\\';\" onblur=\"this.style.background=\\'transparent\\';this.style.border=\\'none\\';\"\u003e';\n    html += '\u003cinput type=\"number\" value=\"'+item.cost+'\" min=\"0\" data-cat=\"'+cat.id+'\" data-idx=\"'+i+'\" onchange=\"onCostChange(this)\" style=\"width:90px;padding:4px 6px;border:1px solid #cbd5e1;border-radius:6px;font-size:14px;text-align:right;\"\u003e';\n    html += '\u003cspan style=\"font-size:13px;color:#64748b;flex-shrink:0;\"\u003e円/月\u003c/span\u003e';\n    html += '\u003cbutton onclick=\"removeRow(\\''+cat.id+'\\','+i+')\" style=\"background:none;border:none;color:#94a3b8;font-size:18px;cursor:pointer;padding:0 4px;line-height:1;flex-shrink:0;\" title=\"削除\"\u003e×\u003c/button\u003e';\n    html += '\u003c/div\u003e';\n  }\n  container.innerHTML = html;\n}\n\nfunction escHtml(s){\n  return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;').replace(/\"/g,'\u0026quot;');\n}\n\nfunction renderAll(){\n  for(var i=0;i\u003ccategories.length;i++){\n    renderRows(categories[i]);\n  }\n  calcResults();\n}\n\nfunction getCatById(id){\n  for(var i=0;i\u003ccategories.length;i++){\n    if(categories[i].id===id) return categories[i];\n  }\n  return null;\n}\n\nwindow.onCheck = function(el){\n  var cat = getCatById(el.getAttribute('data-cat'));\n  var idx = parseInt(el.getAttribute('data-idx'));\n  cat.items[idx].checked = el.checked;\n  calcResults();\n};\n\nwindow.onNameChange = function(el){\n  var cat = getCatById(el.getAttribute('data-cat'));\n  var idx = parseInt(el.getAttribute('data-idx'));\n  cat.items[idx].name = el.value;\n};\n\nwindow.onCostChange = function(el){\n  var cat = getCatById(el.getAttribute('data-cat'));\n  var idx = parseInt(el.getAttribute('data-idx'));\n  var v = parseInt(el.value);\n  cat.items[idx].cost = isNaN(v)||v\u003c0 ? 0 : v;\n  calcResults();\n};\n\nwindow.removeRow = function(catId, idx){\n  var cat = getCatById(catId);\n  cat.items.splice(idx,1);\n  renderRows(cat);\n  calcResults();\n};\n\nwindow.addCustomRow = function(){\n  customCount++;\n  var cat = getCatById('other');\n  cat.items.push({name:'カスタム'+customCount, cost:0, checked:true});\n  renderRows(cat);\n  calcResults();\n};\n\nfunction fmt(n){\n  return Math.round(n).toLocaleString()+'円';\n}\n\nfunction calcResults(){\n  var totalMonthly = 0;\n  var catTotals = [];\n\n  for(var i=0;i\u003ccategories.length;i++){\n    var cat = categories[i];\n    var catSum = 0;\n    for(var j=0;j\u003ccat.items.length;j++){\n      if(cat.items[j].checked){\n        catSum += cat.items[j].cost;\n      }\n    }\n    catTotals.push({label:cat.label, color:cat.color, sum:catSum});\n    totalMonthly += catSum;\n  }\n\n  var totalYearly = totalMonthly * 12;\n  var totalDaily = totalMonthly / 30;\n\n  document.getElementById('res-monthly').textContent = fmt(totalMonthly);\n  document.getElementById('res-yearly').textContent = fmt(totalYearly);\n  document.getElementById('res-daily').textContent = Math.round(totalDaily).toLocaleString()+'円';\n\n  var rate = 0.05;\n  document.getElementById('res-inv5').textContent  = totalYearly\u003e0 ? fmt(totalYearly * Math.pow(1+rate, 5))  : '-';\n  document.getElementById('res-inv10').textContent = totalYearly\u003e0 ? fmt(totalYearly * Math.pow(1+rate,10)) : '-';\n  document.getElementById('res-inv20').textContent = totalYearly\u003e0 ? fmt(totalYearly * Math.pow(1+rate,20)) : '-';\n\n  var bHtml = '';\n  if(totalMonthly === 0){\n    bHtml = '\u003cdiv style=\"color:#94a3b8;font-size:14px;text-align:center;padding:12px 0;\"\u003eチェックを入れたサービスがありません\u003c/div\u003e';\n  } else {\n    for(var k=0;k\u003ccatTotals.length;k++){\n      if(catTotals[k].sum===0) continue;\n      var pct = Math.round(catTotals[k].sum / totalMonthly * 100);\n      bHtml += '\u003cdiv style=\"margin-bottom:10px;\"\u003e';\n      bHtml += '\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;margin-bottom:4px;\"\u003e';\n      bHtml += '\u003cspan style=\"font-weight:bold;color:'+catTotals[k].color+';\"\u003e'+catTotals[k].label+'\u003c/span\u003e';\n      bHtml += '\u003cspan style=\"color:#1e293b;\"\u003e'+catTotals[k].sum.toLocaleString()+'円/月 \u003cspan style=\"color:#94a3b8;\"\u003e('+pct+'%)\u003c/span\u003e\u003c/span\u003e';\n      bHtml += '\u003c/div\u003e';\n      bHtml += '\u003cdiv style=\"background:#f1f5f9;border-radius:4px;height:10px;overflow:hidden;\"\u003e';\n      bHtml += '\u003cdiv style=\"background:'+catTotals[k].color+';height:100%;width:'+pct+'%;border-radius:4px;transition:width 0.4s;\"\u003e\u003c/div\u003e';\n      bHtml += '\u003c/div\u003e';\n      bHtml += '\u003c/div\u003e';\n    }\n  }\n  document.getElementById('res-breakdown').innerHTML = bHtml;\n}\n\nrenderAll();\n\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"サブスク節約のコツ\"\u003eサブスク節約のコツ\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e1. まず「全部リストアップ」する\u003c/strong\u003e\nクレジットカードの明細を3ヶ月分さかのぼり、定期引き落としをすべてリスト化しましょう。「使っていたのに気づかなかった」サブスクが1〜2件は見つかります。\u003c/p\u003e","title":"サブスク管理計算ツール｜月額サブスクの年間コストを見える化【無料】"},{"content":" CSS Gridジェネレーター グリッドレイアウトをビジュアルで構築。トラック設定・セル結合・エリア名指定後、CSSをコピーするだけ。\nダッシュボード フォトギャラリー マガジンレイアウト Holy Grail レスポンシブカード リセット 列数（Columns） 行数（Rows） 列の間隔（Column Gap） 行の間隔（Row Gap） 横位置（Justify Items） stretch（引き伸ばし） start（左寄せ） end（右寄せ） center（中央） 縦位置（Align Items） stretch（引き伸ばし） start（上寄せ） end（下寄せ） center（中央） 列サイズ（grid-template-columns） 行サイズ（grid-template-rows） 名前付きグリッドエリア（任意） 1行に1行分のエリア名をスペース区切りで入力してください。空セルには . を使用。\nライブプレビュー — セルをクリックして選択 グリッドアイテム + アイテムを追加 生成されたCSS CSSをコピー ショートハンド値 コピー 関連ツール Flexboxレイアウトを構築 → CSS Flexboxジェネレーター ボックスシャドウを生成 → CSSボックスシャドウジェネレーター グラデーションを作成 → CSSグラデーションジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/css-grid-generator/","summary":"\u003cdiv id=\"grid-app\"\u003e\n\u003cstyle\u003e\n  #grid-app *,\n  #grid-app *::before,\n  #grid-app *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n\u003cp\u003e#grid-app {\nfont-family: -apple-system, BlinkMacSystemFont, \u0026ldquo;Hiragino Sans\u0026rdquo;, \u0026ldquo;Yu Gothic UI\u0026rdquo;, \u0026ldquo;Meiryo\u0026rdquo;, \u0026ldquo;Segoe UI\u0026rdquo;, sans-serif;\nfont-size: 14px;\ncolor: #1a1a2e;\nbackground: #f8f9ff;\nborder-radius: 12px;\npadding: 24px;\nmax-width: 100%;\noverflow: hidden;\n}\u003c/p\u003e\n\u003cp\u003e#grid-app h2.ga-title {\nfont-size: 1.4rem;\nfont-weight: 700;\nmargin-bottom: 4px;\ncolor: #1a1a2e;\n}\u003c/p\u003e\n\u003cp\u003e#grid-app p.ga-subtitle {\ncolor: #666;\nmargin-bottom: 20px;\nfont-size: 0.9rem;\n}\u003c/p\u003e\n\u003cp\u003e/* Presets */\n#grid-app .ga-presets {\ndisplay: flex;\nflex-wrap: wrap;\ngap: 8px;\nmargin-bottom: 20px;\n}\u003c/p\u003e","title":"CSS Gridジェネレーター — ビジュアルレイアウトビルダー"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n借金返済シミュレーター 借入先ごとの残高・金利・月々の返済額を入力して、最短で完済する返済プランを見つけましょう。\n借入一覧 ＋ 借入を追加\n追加返済額（月額） 0円10,000円100,000円 ※最低返済額に上乗せして返済する金額 返済推移グラフ 雪だるま式 vs 高金利優先：どちらを選ぶ？ 方法 仕組み おすすめの人 雪だるま式 残高が少ない借入から優先返済 小さな成功体験でモチベーションを保ちたい人 高金利優先 金利が高い借入から優先返済 利息を最小化して合理的に返済したい人 高金利優先が数学的には最適（支払利息が最小）。ただし雪だるま式は借入件数が早く減るため、心理的な達成感を得やすいメリットがあります。\n追加返済の仕組み どちらの方法でも、すべての借入に最低返済額を支払った上で、余剰資金を優先度の高い借入に集中投入します。1件完済すると、その分の返済額が次の借入に「雪だるま」のように加算されていきます。\n早く完済するコツ 追加返済額を増やす — 月5,000円の上乗せでも返済期間と利息に大きな差が出ます 臨時収入を活用 — ボーナス・還付金・副業収入を返済に回す 金利交渉をする — カードローンは金利引き下げの交渉が可能な場合があります 新規借入を止める — リボ払いの新規利用を停止し、残高を減らすことに集中 よくある質問 Q: リボ払いの金利は何%ですか？ 一般的なリボ払いの金利は年15〜18%です。カードローンは年3〜15%、消費者金融は年15〜18%が目安です。\nQ: 過払い金は計算に含まれますか？ このシミュレーターは将来の返済計画のみを計算します。過払い金（2010年以前の年20%超の借入）については専門家に相談してください。\nQ: 繰上返済の手数料は？ カードローンや消費者金融は繰上返済手数料が無料の場合がほとんどです。住宅ローンは別途手数料がかかる場合があるため、契約書を確認してください。\n借金返済と並行して家計管理を始めましょう。**freee会計 **なら収支の可視化から確定申告まで一元管理。副業で返済を加速したいフリーランスの方にもおすすめです。\n関連ツール 家計簿シミュレーター — 月収から理想の支出配分を計算 手取り計算シミュレーター — 年収から手取りを計算 副業税金計算ツール — 副業収入の税金を計算 複利計算シミュレーター — 完済後の積立投資をシミュレーション 住宅ローンシミュレーター — 住宅ローンの返済計画を計算 ","permalink":"https://productivity-works.com/ja/tools/shakkin-hensai-simulator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"借金返済シミュレーター\"\u003e借金返済シミュレーター\u003c/h1\u003e\n\u003cp\u003e借入先ごとの残高・金利・月々の返済額を入力して、\u003cstrong\u003e最短で完済する返済プラン\u003c/strong\u003eを見つけましょう。\u003c/p\u003e\n\u003cdiv id=\"dp-calc\" style=\"max-width:720px;margin:0 auto;\"\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #dc2626;border-radius:12px;background:#fef2f2;\"\u003e\n\u003ch3 style=\"margin:0 0 16px;color:#991b1b;font-size:16px;\"\u003e借入一覧\u003c/h3\u003e\n\u003cdiv id=\"debtList\"\u003e\u003c/div\u003e\n\u003cp\u003e\u003cbutton onclick=\"addDebt()\" style=\"margin-top:12px;padding:8px 20px;background:#dc2626;color:#fff;border:none;border-radius:8px;font-size:14px;cursor:pointer;\"\u003e＋ 借入を追加\u003c/button\u003e\u003c/p\u003e\n\u003cdiv style=\"margin-top:20px;padding-top:16px;border-top:1px solid #fca5a5;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e追加返済額（月額）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"extraPay\" min=\"0\" max=\"100000\" step=\"1000\" value=\"10000\" oninput=\"calcDP()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0円\u003c/span\u003e\u003cspan id=\"extraVal\" style=\"font-weight:bold;font-size:18px;color:#059669;\"\u003e10,000円\u003c/span\u003e\u003cspan\u003e100,000円\u003c/span\u003e\u003c/div\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;margin-top:4px;\"\u003e※最低返済額に上乗せして返済する金額\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"dpResult\" style=\"margin-top:24px;\"\u003e\u003c/div\u003e\n\u003cdiv style=\"margin-top:24px;padding:24px;border:2px solid #7c3aed;border-radius:12px;background:#faf5ff;\"\u003e\n\u003ch3 style=\"margin:0 0 16px;color:#6d28d9;font-size:16px;\"\u003e返済推移グラフ\u003c/h3\u003e\n\u003ccanvas id=\"dpChart\" width=\"680\" height=\"280\" style=\"width:100%;height:auto;\"\u003e\u003c/canvas\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nvar debts=[];\nvar debtId=0;\n\nfunction addDebt(name,bal,rate,minPay){\n  debts.push({id:debtId++,name:name||'借入'+(debts.length+1),balance:bal||500000,rate:rate||15,minPay:minPay||15000});\n  renderDebts();\n  calcDP();\n}\n\nfunction removeDebt(id){\n  debts=debts.filter(function(d){return d.id!==id;});\n  renderDebts();\n  calcDP();\n}\n\nfunction updateDebt(id,field,val){\n  for(var i=0;i\u003cdebts.length;i++){\n    if(debts[i].id===id){debts[i][field]=field==='name'?val:+val;break;}\n  }\n  calcDP();\n}\n\nfunction renderDebts(){\n  var html='';\n  for(var i=0;i\u003cdebts.length;i++){\n    var d=debts[i];\n    html+='\u003cdiv style=\"padding:12px;margin-bottom:8px;background:#fff;border-radius:8px;border:1px solid #fca5a5;\"\u003e';\n    html+='\u003cdiv style=\"display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;\"\u003e';\n    html+='\u003cinput type=\"text\" value=\"'+d.name+'\" onchange=\"updateDebt('+d.id+',\\'name\\',this.value)\" style=\"border:none;font-weight:bold;font-size:14px;color:#991b1b;width:60%;outline:none;\"\u003e';\n    html+='\u003cbutton onclick=\"removeDebt('+d.id+')\" style=\"background:none;border:none;color:#ef4444;cursor:pointer;font-size:18px;\"\u003e×\u003c/button\u003e';\n    html+='\u003c/div\u003e';\n    html+='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;\"\u003e';\n    html+='\u003cdiv\u003e\u003clabel style=\"display:block;font-size:11px;color:#64748b;\"\u003e残高（円）\u003c/label\u003e\u003cinput type=\"number\" value=\"'+d.balance+'\" onchange=\"updateDebt('+d.id+',\\'balance\\',this.value)\" style=\"width:100%;padding:6px;border:1px solid #cbd5e1;border-radius:4px;font-size:13px;\"\u003e\u003c/div\u003e';\n    html+='\u003cdiv\u003e\u003clabel style=\"display:block;font-size:11px;color:#64748b;\"\u003e年利（%）\u003c/label\u003e\u003cinput type=\"number\" value=\"'+d.rate+'\" step=\"0.1\" onchange=\"updateDebt('+d.id+',\\'rate\\',this.value)\" style=\"width:100%;padding:6px;border:1px solid #cbd5e1;border-radius:4px;font-size:13px;\"\u003e\u003c/div\u003e';\n    html+='\u003cdiv\u003e\u003clabel style=\"display:block;font-size:11px;color:#64748b;\"\u003e月々返済額（円）\u003c/label\u003e\u003cinput type=\"number\" value=\"'+d.minPay+'\" onchange=\"updateDebt('+d.id+',\\'minPay\\',this.value)\" style=\"width:100%;padding:6px;border:1px solid #cbd5e1;border-radius:4px;font-size:13px;\"\u003e\u003c/div\u003e';\n    html+='\u003c/div\u003e\u003c/div\u003e';\n  }\n  document.getElementById('debtList').innerHTML=html;\n}\n\nfunction fmt(n){return Math.round(n).toLocaleString();}\n\nfunction simulate(sortFn,extra){\n  var ds=debts.map(function(d){return{name:d.name,balance:d.balance,rate:d.rate,minPay:d.minPay};});\n  var totalPaid=0,months=0,history=[getTotalBal(ds)];\n  var maxMonths=600;\n  while(getTotalBal(ds)\u003e0\u0026\u0026months\u003cmaxMonths){\n    months++;\n    ds.sort(sortFn);\n    var leftover=extra;\n    for(var i=0;i\u003cds.length;i++){\n      if(ds[i].balance\u003c=0)continue;\n      var interest=ds[i].balance*(ds[i].rate/100/12);\n      ds[i].balance+=interest;\n      var pay=Math.min(ds[i].balance,ds[i].minPay);\n      ds[i].balance-=pay;\n      totalPaid+=pay;\n    }\n    for(var i=0;i\u003cds.length;i++){\n      if(ds[i].balance\u003c=0||leftover\u003c=0)continue;\n      var ep=Math.min(ds[i].balance,leftover);\n      ds[i].balance-=ep;\n      leftover-=ep;\n      totalPaid+=ep;\n    }\n    history.push(getTotalBal(ds));\n  }\n  return{months:months,totalPaid:totalPaid,history:history};\n}\n\nfunction getTotalBal(ds){\n  var t=0;for(var i=0;i\u003cds.length;i++)t+=Math.max(0,ds[i].balance);return t;\n}\n\nfunction calcDP(){\n  if(debts.length===0)return;\n  var extra=+document.getElementById('extraPay').value;\n  document.getElementById('extraVal').textContent=fmt(extra)+'円';\n\n  var totalBal=0,totalMin=0;\n  for(var i=0;i\u003cdebts.length;i++){totalBal+=debts[i].balance;totalMin+=debts[i].minPay;}\n\n  var snowball=simulate(function(a,b){return a.balance-b.balance;},extra);\n  var avalanche=simulate(function(a,b){return b.rate-a.rate;},extra);\n  var noExtra=simulate(function(a,b){return b.rate-a.rate;},0);\n\n  var snowInt=snowball.totalPaid-totalBal;\n  var avaInt=avalanche.totalPaid-totalBal;\n  var noExInt=noExtra.totalPaid-totalBal;\n  var best=avaInt\u003c=snowInt?'avalanche':'snowball';\n  var saved=Math.max(0,noExInt-Math.min(snowInt,avaInt));\n\n  var html='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:16px;\"\u003e';\n\n  var sBorder=best==='snowball'?'2px solid #059669':'1px solid #e2e8f0';\n  var sBadge=best==='snowball'?'\u003cspan style=\"background:#dcfce7;color:#166534;font-size:11px;font-weight:700;padding:2px 8px;border-radius:4px;margin-left:8px;\"\u003e最適\u003c/span\u003e':'';\n  html+='\u003cdiv style=\"padding:20px;border-radius:12px;border:'+sBorder+';background:#fff;\"\u003e';\n  html+='\u003cdiv style=\"font-size:14px;font-weight:bold;color:#dc2626;margin-bottom:12px;\"\u003e雪だるま式'+sBadge+'\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e少額の借入から優先返済\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:28px;font-weight:bold;margin:8px 0;\"\u003e'+snowball.months+'\u003cspan style=\"font-size:14px;\"\u003eヶ月\u003c/span\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003e支払利息合計: \u003cstrong\u003e'+fmt(snowInt)+'円\u003c/strong\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003e総返済額: '+fmt(snowball.totalPaid)+'円\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n\n  var aBorder=best==='avalanche'?'2px solid #059669':'1px solid #e2e8f0';\n  var aBadge=best==='avalanche'?'\u003cspan style=\"background:#dcfce7;color:#166534;font-size:11px;font-weight:700;padding:2px 8px;border-radius:4px;margin-left:8px;\"\u003e最適\u003c/span\u003e':'';\n  html+='\u003cdiv style=\"padding:20px;border-radius:12px;border:'+aBorder+';background:#fff;\"\u003e';\n  html+='\u003cdiv style=\"font-size:14px;font-weight:bold;color:#7c3aed;margin-bottom:12px;\"\u003e高金利優先'+aBadge+'\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e金利が高い借入から優先返済\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:28px;font-weight:bold;margin:8px 0;\"\u003e'+avalanche.months+'\u003cspan style=\"font-size:14px;\"\u003eヶ月\u003c/span\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003e支払利息合計: \u003cstrong\u003e'+fmt(avaInt)+'円\u003c/strong\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003e総返済額: '+fmt(avalanche.totalPaid)+'円\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n\n  if(saved\u003e0){\n    html+='\u003cdiv style=\"margin-top:16px;padding:16px;background:#f0fdf4;border-radius:8px;text-align:center;\"\u003e';\n    html+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003e毎月'+fmt(extra)+'円の追加返済で\u003c/div\u003e';\n    html+='\u003cdiv style=\"font-size:24px;font-weight:bold;color:#059669;\"\u003e'+fmt(saved)+'円の利息を節約\u003c/div\u003e';\n    html+='\u003cdiv style=\"font-size:13px;color:#64748b;\"\u003e完済が'+(noExtra.months-Math.min(snowball.months,avalanche.months))+'ヶ月早くなります\u003c/div\u003e';\n    html+='\u003c/div\u003e';\n  }\n\n  document.getElementById('dpResult').innerHTML=html;\n  drawDPChart(snowball,avalanche,noExtra);\n}\n\nfunction drawDPChart(snow,ava,noEx){\n  var c=document.getElementById('dpChart');\n  var ctx=c.getContext('2d');\n  var W=c.width,H=c.height;\n  ctx.clearRect(0,0,W,H);\n\n  var maxM=Math.max(snow.months,ava.months,noEx.months,12);\n  maxM=Math.ceil(maxM*1.1);\n  var maxVal=Math.max(snow.history[0],1);\n  var pad={t:20,r:20,b:45,l:80};\n  var cw=W-pad.l-pad.r,ch=H-pad.t-pad.b;\n\n  ctx.strokeStyle='#e2e8f0';ctx.lineWidth=1;\n  for(var i=0;i\u003c=4;i++){\n    var y=pad.t+ch*(1-i/4);\n    ctx.beginPath();ctx.moveTo(pad.l,y);ctx.lineTo(W-pad.r,y);ctx.stroke();\n    ctx.fillStyle='#94a3b8';ctx.font='11px sans-serif';ctx.textAlign='right';\n    ctx.fillText(fmt(maxVal*i/4)+'円',pad.l-6,y+4);\n  }\n\n  function drawLine(hist,color,dash){\n    ctx.beginPath();ctx.strokeStyle=color;ctx.lineWidth=2;ctx.setLineDash(dash||[]);\n    for(var m=0;m\u003chist.length\u0026\u0026m\u003c=maxM;m++){\n      var x=pad.l+cw*m/maxM,y=pad.t+ch*(1-hist[m]/maxVal);\n      if(m===0)ctx.moveTo(x,y);else ctx.lineTo(x,y);\n    }\n    ctx.stroke();ctx.setLineDash([]);\n  }\n\n  drawLine(noEx.history,'#94a3b8',[4,4]);\n  drawLine(snow.history,'#dc2626',[]);\n  drawLine(ava.history,'#7c3aed',[]);\n\n  var lx=pad.l+10,ly=pad.t+12;\n  [[' 雪だるま式','#dc2626'],[' 高金利優先','#7c3aed'],[' 最低返済のみ','#94a3b8']].forEach(function(item,i){\n    ctx.fillStyle=item[1];ctx.fillRect(lx,ly+i*16,12,3);\n    ctx.fillStyle='#334155';ctx.font='11px sans-serif';ctx.textAlign='left';\n    ctx.fillText(item[0],lx+16,ly+i*16+5);\n  });\n\n  ctx.fillStyle='#64748b';ctx.font='11px sans-serif';ctx.textAlign='center';\n  var step=maxM\u003c=12?1:maxM\u003c=24?3:maxM\u003c=48?6:12;\n  for(var m=0;m\u003c=maxM;m+=step){\n    ctx.fillText(m+'月',pad.l+cw*m/maxM,H-pad.b+20);\n  }\n}\n\naddDebt('リボ払い',500000,15,15000);\naddDebt('カードローン',800000,8,20000);\naddDebt('消費者金融',200000,18,10000);\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"雪だるま式-vs-高金利優先どちらを選ぶ\"\u003e雪だるま式 vs 高金利優先：どちらを選ぶ？\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e方法\u003c/th\u003e\n          \u003cth\u003e仕組み\u003c/th\u003e\n          \u003cth\u003eおすすめの人\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e雪だるま式\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e残高が少ない借入から優先返済\u003c/td\u003e\n          \u003ctd\u003e小さな成功体験でモチベーションを保ちたい人\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e高金利優先\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e金利が高い借入から優先返済\u003c/td\u003e\n          \u003ctd\u003e利息を最小化して合理的に返済したい人\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003e高金利優先\u003c/strong\u003eが数学的には最適（支払利息が最小）。ただし\u003cstrong\u003e雪だるま式\u003c/strong\u003eは借入件数が早く減るため、心理的な達成感を得やすいメリットがあります。\u003c/p\u003e","title":"借金返済シミュレーター｜雪だるま式vs高金利優先を比較【無料】"},{"content":" Webサイト情報 Webサイト名 * WebサイトURL * お問い合わせメールアドレス * 会社名・運営者名 （任意） 最終更新日 本日の日付が自動入力されます。必要に応じて変更してください。 収集するデータの種類 個人情報 Cookie・トラッキング アクセス解析 第三者サービス 決済情報 位置情報 法令対応オプション 個人情報保護法（日本） GDPR（EU） CCPA（カリフォルニア州） COPPA（子どものプライバシー） 利用している第三者サービス Google Analytics Google AdSense Stripe PayPal Mailchimp SNSプラグイン プライバシーポリシーを生成する\n免責事項 このツールで生成されるプライバシーポリシーはテンプレートであり、法律上のアドバイスを構成するものではありません。Webサイトへの掲載前に、必ず弁護士などの法律の専門家にご確認いただくことを強くお勧めします。お客様の具体的な状況や適用される法律によって、必要な内容が異なる場合があります。 HTMLとしてコピー テキストとしてコピー .txtでダウンロード 関連ツール メタタグを作成 → メタタグジェネレーター robots.txtを生成 → Robots.txtジェネレーター マークダウン表を作成 → マークダウン表作成ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/privacy-policy-generator/","summary":"\u003cstyle\u003e\n#pp-app-ja *,\n#pp-app-ja *::before,\n#pp-app-ja *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#pp-app-ja {\n  font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", \"Noto Sans JP\", \"Yu Gothic\", -apple-system, BlinkMacSystemFont, sans-serif;\n  color: #1e293b;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 0 2rem;\n}\n#pp-app-ja h2 {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 1.75rem 0 1rem;\n  padding-bottom: 0.4rem;\n  border-bottom: 2px solid #e2e8f0;\n}\n#pp-app-ja .field {\n  margin-bottom: 1.1rem;\n}\n#pp-app-ja label {\n  display: block;\n  font-size: 0.875rem;\n  font-weight: 600;\n  color: #374151;\n  margin-bottom: 0.35rem;\n}\n#pp-app-ja input[type=\"text\"],\n#pp-app-ja input[type=\"url\"],\n#pp-app-ja input[type=\"email\"],\n#pp-app-ja input[type=\"date\"] {\n  width: 100%;\n  padding: 0.55rem 0.75rem;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 0.9rem;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.15s;\n}\n#pp-app-ja input[type=\"text\"]:focus,\n#pp-app-ja input[type=\"url\"]:focus,\n#pp-app-ja input[type=\"email\"]:focus,\n#pp-app-ja input[type=\"date\"]:focus {\n  outline: none;\n  border-color: #3b82f6;\n  box-shadow: 0 0 0 3px rgba(59,130,246,0.12);\n}\n#pp-app-ja .hint {\n  font-size: 0.78rem;\n  color: #64748b;\n  margin-top: 0.3rem;\n}\n#pp-app-ja .checkbox-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n  gap: 0.55rem;\n}\n#pp-app-ja .checkbox-item {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  font-size: 0.875rem;\n  color: #374151;\n  cursor: pointer;\n  padding: 0.45rem 0.6rem;\n  border: 1px solid #e2e8f0;\n  border-radius: 6px;\n  transition: background 0.12s, border-color 0.12s;\n}\n#pp-app-ja .checkbox-item:hover {\n  background: #f8fafc;\n  border-color: #93c5fd;\n}\n#pp-app-ja .checkbox-item input[type=\"checkbox\"] {\n  accent-color: #3b82f6;\n  width: 15px;\n  height: 15px;\n  flex-shrink: 0;\n}\n#pp-app-ja .toggle-grid {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.75rem;\n}\n#pp-app-ja .toggle-item {\n  display: flex;\n  align-items: center;\n  gap: 0.6rem;\n  font-size: 0.875rem;\n  font-weight: 500;\n  color: #374151;\n  cursor: pointer;\n  padding: 0.5rem 0.9rem;\n  border: 1px solid #e2e8f0;\n  border-radius: 20px;\n  transition: all 0.15s;\n  user-select: none;\n}\n#pp-app-ja .toggle-item input[type=\"checkbox\"] {\n  accent-color: #3b82f6;\n  width: 15px;\n  height: 15px;\n}\n#pp-app-ja .toggle-item.active {\n  background: #eff6ff;\n  border-color: #3b82f6;\n  color: #1d4ed8;\n}\n#pp-app-ja .btn-generate {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.5rem;\n  margin-top: 1.5rem;\n  padding: 0.7rem 1.8rem;\n  background: #2563eb;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 1rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n}\n#pp-app-ja .btn-generate:hover {\n  background: #1d4ed8;\n  transform: translateY(-1px);\n}\n#pp-app-ja .btn-generate:active {\n  transform: translateY(0);\n}\n#pp-app-ja .output-section {\n  display: none;\n  margin-top: 2rem;\n}\n#pp-app-ja .output-section.visible {\n  display: block;\n}\n#pp-app-ja .disclaimer-box {\n  background: #fef9c3;\n  border: 1px solid #fde047;\n  border-radius: 8px;\n  padding: 0.85rem 1rem;\n  font-size: 0.83rem;\n  color: #713f12;\n  margin-bottom: 1.25rem;\n  line-height: 1.7;\n}\n#pp-app-ja .disclaimer-box strong {\n  display: block;\n  margin-bottom: 0.2rem;\n  font-size: 0.875rem;\n}\n#pp-app-ja .action-bar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.6rem;\n  margin-bottom: 1rem;\n}\n#pp-app-ja .btn-action {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.4rem;\n  padding: 0.5rem 1rem;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 0.85rem;\n  font-weight: 500;\n  cursor: pointer;\n  background: #fff;\n  color: #374151;\n  transition: all 0.12s;\n}\n#pp-app-ja .btn-action:hover {\n  background: #f1f5f9;\n  border-color: #94a3b8;\n}\n#pp-app-ja .btn-action.copied {\n  background: #dcfce7;\n  border-color: #86efac;\n  color: #166534;\n}\n#pp-app-ja .policy-preview {\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 2rem 2.5rem;\n  background: #fff;\n  font-size: 0.9rem;\n  line-height: 1.85;\n  color: #1e293b;\n  max-height: 600px;\n  overflow-y: auto;\n}\n#pp-app-ja .policy-preview h1 {\n  font-size: 1.4rem;\n  font-weight: 700;\n  margin-bottom: 0.5rem;\n  color: #0f172a;\n}\n#pp-app-ja .policy-preview h2 {\n  font-size: 1rem;\n  font-weight: 700;\n  margin: 1.5rem 0 0.6rem;\n  padding-bottom: 0.3rem;\n  border-bottom: 1px solid #e2e8f0;\n  color: #0f172a;\n}\n#pp-app-ja .policy-preview p {\n  margin-bottom: 0.8rem;\n}\n#pp-app-ja .policy-preview ul {\n  margin: 0.5rem 0 0.8rem 1.4rem;\n}\n#pp-app-ja .policy-preview ul li {\n  margin-bottom: 0.35rem;\n}\n#pp-app-ja .policy-preview .last-updated {\n  font-size: 0.82rem;\n  color: #64748b;\n  margin-bottom: 1.2rem;\n}\n#pp-app-ja .section-cols {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n}\n@media (max-width: 600px) {\n  #pp-app-ja .checkbox-grid {\n    grid-template-columns: 1fr 1fr;\n  }\n  #pp-app-ja .section-cols {\n    grid-template-columns: 1fr;\n  }\n  #pp-app-ja .policy-preview {\n    padding: 1rem 1.2rem;\n  }\n}\n@media (max-width: 420px) {\n  #pp-app-ja .checkbox-grid {\n    grid-template-columns: 1fr;\n  }\n}\n\u003c/style\u003e\n\u003cdiv id=\"pp-app-ja\"\u003e\n\u003ch2\u003eWebサイト情報\u003c/h2\u003e\n\u003cdiv class=\"section-cols\"\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"ppja-site-name\"\u003eWebサイト名 \u003cspan style=\"color:#ef4444\"\u003e*\u003c/span\u003e\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"ppja-site-name\" placeholder=\"例：私のブログ\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"ppja-site-url\"\u003eWebサイトURL \u003cspan style=\"color:#ef4444\"\u003e*\u003c/span\u003e\u003c/label\u003e\n    \u003cinput type=\"url\" id=\"ppja-site-url\" placeholder=\"https://example.com\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section-cols\"\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"ppja-contact-email\"\u003eお問い合わせメールアドレス \u003cspan style=\"color:#ef4444\"\u003e*\u003c/span\u003e\u003c/label\u003e\n    \u003cinput type=\"email\" id=\"ppja-contact-email\" placeholder=\"privacy@example.com\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"ppja-company-name\"\u003e会社名・運営者名 \u003cspan style=\"color:#94a3b8\"\u003e（任意）\u003c/span\u003e\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"ppja-company-name\" placeholder=\"例：株式会社〇〇\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"field\"\u003e\n  \u003clabel for=\"ppja-last-updated\"\u003e最終更新日\u003c/label\u003e\n  \u003cinput type=\"date\" id=\"ppja-last-updated\"\u003e\n  \u003cdiv class=\"hint\"\u003e本日の日付が自動入力されます。必要に応じて変更してください。\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003e収集するデータの種類\u003c/h2\u003e\n\u003cdiv class=\"checkbox-grid\"\u003e\n  \u003clabel class=\"checkbox-item\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-personal\" checked\u003e 個人情報\u003c/label\u003e\n  \u003clabel class=\"checkbox-item\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-cookies\" checked\u003e Cookie・トラッキング\u003c/label\u003e\n  \u003clabel class=\"checkbox-item\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-analytics\" checked\u003e アクセス解析\u003c/label\u003e\n  \u003clabel class=\"checkbox-item\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-third-party\"\u003e 第三者サービス\u003c/label\u003e\n  \u003clabel class=\"checkbox-item\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-payment\"\u003e 決済情報\u003c/label\u003e\n  \u003clabel class=\"checkbox-item\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-location\"\u003e 位置情報\u003c/label\u003e\n\u003c/div\u003e\n\u003ch2\u003e法令対応オプション\u003c/h2\u003e\n\u003cdiv class=\"toggle-grid\" id=\"ppja-compliance-toggles\"\u003e\n  \u003clabel class=\"toggle-item\" id=\"ppja-lbl-pipa\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-pipa\"\u003e 個人情報保護法（日本）\u003c/label\u003e\n  \u003clabel class=\"toggle-item\" id=\"ppja-lbl-gdpr\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-gdpr\"\u003e GDPR（EU）\u003c/label\u003e\n  \u003clabel class=\"toggle-item\" id=\"ppja-lbl-ccpa\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-ccpa\"\u003e CCPA（カリフォルニア州）\u003c/label\u003e\n  \u003clabel class=\"toggle-item\" id=\"ppja-lbl-coppa\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-coppa\"\u003e COPPA（子どものプライバシー）\u003c/label\u003e\n\u003c/div\u003e\n\u003ch2\u003e利用している第三者サービス\u003c/h2\u003e\n\u003cdiv class=\"checkbox-grid\"\u003e\n  \u003clabel class=\"checkbox-item\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-ga\"\u003e Google Analytics\u003c/label\u003e\n  \u003clabel class=\"checkbox-item\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-adsense\"\u003e Google AdSense\u003c/label\u003e\n  \u003clabel class=\"checkbox-item\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-stripe\"\u003e Stripe\u003c/label\u003e\n  \u003clabel class=\"checkbox-item\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-paypal\"\u003e PayPal\u003c/label\u003e\n  \u003clabel class=\"checkbox-item\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-mailchimp\"\u003e Mailchimp\u003c/label\u003e\n  \u003clabel class=\"checkbox-item\"\u003e\u003cinput type=\"checkbox\" id=\"ppja-social\"\u003e SNSプラグイン\u003c/label\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003cbutton class=\"btn-generate\" onclick=\"ppjaGenerate()\"\u003eプライバシーポリシーを生成する\u003c/button\u003e\u003c/p\u003e","title":"プライバシーポリシー ジェネレーター — 無料テンプレートツール"},{"content":"コーディング不要のビジュアルエディタで robots.txt を作成できます。ユーザーエージェントブロックの追加、許可・拒否パスの設定、クロール遅延の指定、サイトマップの登録が可能。AIクローラーのブロックやWordPressデフォルト設定などのプリセットも利用できます。\n全許可 全拒否 AIクローラーをブロック WordPressデフォルト 標準SEO設定 クリア グローバル設定 サイトマップ URL \u0026lt;!-- ユーザーエージェントブロック --\u0026gt; \u0026lt;div id=\u0026quot;robots-ua-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;btn-add-ua\u0026quot; onclick=\u0026quot;robotsAddUA()\u0026quot;\u0026gt;+ ユーザーエージェントブロックを追加\u0026lt;/button\u0026gt; リアルタイムプレビュー robots.txt コピー .txt ダウンロード 関連ツール メタタグを作成 → メタタグジェネレーター SQLを整形 → SQLフォーマッター Cron式を生成 → Cron式ジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 副業ブログの始め方｜お名前.comでドメイン取得→freeeで経費管理まで レンタルサーバー おすすめ2026年版！ブログ・サイト制作向け比較 ","permalink":"https://productivity-works.com/ja/tools/robots-txt-generator/","summary":"\u003cp\u003eコーディング不要のビジュアルエディタで \u003ccode\u003erobots.txt\u003c/code\u003e を作成できます。ユーザーエージェントブロックの追加、許可・拒否パスの設定、クロール遅延の指定、サイトマップの登録が可能。AIクローラーのブロックやWordPressデフォルト設定などのプリセットも利用できます。\u003c/p\u003e\n\u003cdiv id=\"robots-app\"\u003e\n\u003cstyle\u003e\n#robots-app *,\n#robots-app *::before,\n#robots-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#robots-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic UI\", \"Segoe UI\", sans-serif;\n  font-size: 15px;\n  color: #1a1a2e;\n  line-height: 1.6;\n  max-width: 900px;\n  margin: 0 auto;\n}\n\n#robots-app h2 {\n  font-size: 1.05rem;\n  font-weight: 700;\n  margin-bottom: 12px;\n  color: #1a1a2e;\n}\n\n#robots-app h3 {\n  font-size: 0.93rem;\n  font-weight: 700;\n  margin-bottom: 8px;\n  color: #333;\n}\n\n#robots-app .robots-layout {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n}\n\n@media (max-width: 680px) {\n  #robots-app .robots-layout {\n    grid-template-columns: 1fr;\n  }\n}\n\n#robots-app .panel {\n  background: #f8f9fc;\n  border: 1px solid #e0e4ef;\n  border-radius: 10px;\n  padding: 18px;\n}\n\n#robots-app .panel-full {\n  background: #f8f9fc;\n  border: 1px solid #e0e4ef;\n  border-radius: 10px;\n  padding: 18px;\n  margin-top: 20px;\n}\n\n/* Presets */\n#robots-app .preset-grid {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 20px;\n}\n\n#robots-app .preset-btn {\n  padding: 7px 14px;\n  border-radius: 20px;\n  border: 1.5px solid #5a6acf;\n  background: #fff;\n  color: #5a6acf;\n  font-size: 0.82rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n  white-space: nowrap;\n}\n\n#robots-app .preset-btn:hover {\n  background: #5a6acf;\n  color: #fff;\n}\n\n/* Global settings */\n#robots-app .global-settings {\n  margin-bottom: 20px;\n}\n\n#robots-app label {\n  display: block;\n  font-size: 0.82rem;\n  font-weight: 600;\n  color: #555;\n  margin-bottom: 4px;\n}\n\n#robots-app input[type=\"text\"],\n#robots-app input[type=\"number\"],\n#robots-app input[type=\"url\"] {\n  width: 100%;\n  padding: 8px 10px;\n  border: 1.5px solid #d0d5e8;\n  border-radius: 6px;\n  font-size: 0.9rem;\n  background: #fff;\n  color: #1a1a2e;\n  outline: none;\n  transition: border-color 0.15s;\n}\n\n#robots-app input:focus {\n  border-color: #5a6acf;\n}\n\n#robots-app .field-row {\n  margin-bottom: 12px;\n}\n\n/* User-agent blocks */\n#robots-app .ua-block {\n  background: #fff;\n  border: 1.5px solid #d0d5e8;\n  border-radius: 8px;\n  padding: 14px;\n  margin-bottom: 12px;\n}\n\n#robots-app .ua-block-header {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 10px;\n}\n\n#robots-app .ua-block-header input {\n  flex: 1;\n}\n\n#robots-app .btn-icon {\n  background: none;\n  border: none;\n  cursor: pointer;\n  font-size: 1.1rem;\n  padding: 2px 6px;\n  border-radius: 4px;\n  line-height: 1;\n  color: #888;\n  transition: color 0.15s, background 0.15s;\n}\n\n#robots-app .btn-icon:hover {\n  color: #e05252;\n  background: #fdecea;\n}\n\n#robots-app .rules-list {\n  margin-bottom: 8px;\n}\n\n#robots-app .rule-row {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  margin-bottom: 6px;\n}\n\n#robots-app .rule-type-select {\n  padding: 6px 8px;\n  border: 1.5px solid #d0d5e8;\n  border-radius: 6px;\n  font-size: 0.85rem;\n  background: #fff;\n  color: #1a1a2e;\n  cursor: pointer;\n  outline: none;\n}\n\n#robots-app .rule-type-select:focus {\n  border-color: #5a6acf;\n}\n\n#robots-app .rule-row input {\n  flex: 1;\n}\n\n#robots-app .btn-add-rule {\n  display: inline-flex;\n  align-items: center;\n  gap: 4px;\n  padding: 5px 12px;\n  border-radius: 6px;\n  border: 1.5px solid #5a6acf;\n  background: #fff;\n  color: #5a6acf;\n  font-size: 0.8rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n\n#robots-app .btn-add-rule:hover {\n  background: #5a6acf;\n  color: #fff;\n}\n\n#robots-app .crawl-delay-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-top: 8px;\n}\n\n#robots-app .crawl-delay-row label {\n  margin-bottom: 0;\n  white-space: nowrap;\n  font-size: 0.82rem;\n}\n\n#robots-app .crawl-delay-row input {\n  width: 80px;\n}\n\n#robots-app .btn-add-ua {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 9px 18px;\n  border-radius: 7px;\n  border: 2px dashed #5a6acf;\n  background: #fff;\n  color: #5a6acf;\n  font-size: 0.88rem;\n  font-weight: 600;\n  cursor: pointer;\n  width: 100%;\n  justify-content: center;\n  transition: background 0.15s;\n  margin-top: 4px;\n}\n\n#robots-app .btn-add-ua:hover {\n  background: #eef0fb;\n}\n\n/* Preview */\n#robots-app .preview-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 10px;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n\n#robots-app .preview-actions {\n  display: flex;\n  gap: 8px;\n}\n\n#robots-app .btn-copy,\n#robots-app .btn-download {\n  padding: 7px 16px;\n  border-radius: 6px;\n  border: none;\n  font-size: 0.85rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, opacity 0.15s;\n}\n\n#robots-app .btn-copy {\n  background: #5a6acf;\n  color: #fff;\n}\n\n#robots-app .btn-copy:hover {\n  background: #4757b8;\n}\n\n#robots-app .btn-download {\n  background: #27ae60;\n  color: #fff;\n}\n\n#robots-app .btn-download:hover {\n  background: #1e9150;\n}\n\n#robots-app .btn-copy.copied {\n  background: #27ae60;\n}\n\n#robots-app pre#robots-preview {\n  background: #0f1117;\n  color: #a8ff78;\n  padding: 16px;\n  border-radius: 8px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.82rem;\n  line-height: 1.7;\n  white-space: pre;\n  overflow-x: auto;\n  min-height: 120px;\n  tab-size: 2;\n}\n\n/* Syntax colors */\n#robots-app .syn-comment  { color: #6b8fa0; }\n#robots-app .syn-key      { color: #79b8ff; }\n#robots-app .syn-colon    { color: #e0e0e0; }\n#robots-app .syn-val-allow    { color: #a8ff78; }\n#robots-app .syn-val-disallow { color: #ff7b7b; }\n#robots-app .syn-val-sitemap  { color: #ffd580; }\n#robots-app .syn-val-neutral  { color: #e0e0e0; }\n\n#robots-app .info-badge {\n  display: inline-block;\n  background: #eef0fb;\n  color: #5a6acf;\n  border-radius: 4px;\n  font-size: 0.75rem;\n  padding: 2px 8px;\n  margin-left: 8px;\n  font-weight: 600;\n}\n\u003c/style\u003e\n\u003c!-- プリセットボタン --\u003e\n\u003cdiv class=\"preset-grid\"\u003e\n  \u003cbutton class=\"preset-btn\" onclick=\"robotsApplyPreset('allow-all')\"\u003e全許可\u003c/button\u003e\n  \u003cbutton class=\"preset-btn\" onclick=\"robotsApplyPreset('block-all')\"\u003e全拒否\u003c/button\u003e\n  \u003cbutton class=\"preset-btn\" onclick=\"robotsApplyPreset('block-ai')\"\u003eAIクローラーをブロック\u003c/button\u003e\n  \u003cbutton class=\"preset-btn\" onclick=\"robotsApplyPreset('wordpress')\"\u003eWordPressデフォルト\u003c/button\u003e\n  \u003cbutton class=\"preset-btn\" onclick=\"robotsApplyPreset('standard-seo')\"\u003e標準SEO設定\u003c/button\u003e\n  \u003cbutton class=\"preset-btn\" onclick=\"robotsApplyPreset('clear')\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"robots-layout\"\u003e\n  \u003c!-- 左：エディタ --\u003e\n  \u003cdiv\u003e\n    \u003c!-- グローバル設定 --\u003e\n    \u003cdiv class=\"panel global-settings\"\u003e\n      \u003ch2\u003eグローバル設定\u003c/h2\u003e\n      \u003cdiv class=\"field-row\"\u003e\n        \u003clabel for=\"robots-sitemap\"\u003eサイトマップ URL\u003c/label\u003e\n        \u003cinput type=\"url\" id=\"robots-sitemap\" placeholder=\"https://example.com/sitemap.xml\" oninput=\"robotsRender()\"\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;!-- ユーザーエージェントブロック --\u0026gt;\n\u0026lt;div id=\u0026quot;robots-ua-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n\u0026lt;button class=\u0026quot;btn-add-ua\u0026quot; onclick=\u0026quot;robotsAddUA()\u0026quot;\u0026gt;+ ユーザーエージェントブロックを追加\u0026lt;/button\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- 右：プレビュー --\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"panel-full\" style=\"margin-top:0; height: 100%;\"\u003e\n      \u003cdiv class=\"preview-header\"\u003e\n        \u003ch2\u003eリアルタイムプレビュー \u003cspan class=\"info-badge\"\u003erobots.txt\u003c/span\u003e\u003c/h2\u003e\n        \u003cdiv class=\"preview-actions\"\u003e\n          \u003cbutton class=\"btn-copy\" id=\"robots-copy-btn\" onclick=\"robotsCopy()\"\u003eコピー\u003c/button\u003e\n          \u003cbutton class=\"btn-download\" onclick=\"robotsDownload()\"\u003e.txt ダウンロード\u003c/button\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003cpre id=\"robots-preview\"\u003e\u003c/pre\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  // 状態管理\n  var state = {\n    sitemap: '',\n    blocks: []\n  };\n\n  var blockCounter = 0;\n\n  function uid() {\n    return 'b' + (++blockCounter);\n  }\n\n  function makeBlock(ua, rules, crawlDelay) {\n    return {\n      id: uid(),\n      ua: ua || '*',\n      rules: rules || [],\n      crawlDelay: crawlDelay || ''\n    };\n  }\n\n  function makeRule(type, path) {\n    return { type: type || 'Disallow', path: path || '' };\n  }\n\n  // プリセット定義\n  var PRESETS = {\n    'allow-all': function() {\n      state.sitemap = '';\n      state.blocks = [makeBlock('*', [makeRule('Allow', '/')], '')];\n    },\n    'block-all': function() {\n      state.sitemap = '';\n      state.blocks = [makeBlock('*', [makeRule('Disallow', '/')], '')];\n    },\n    'block-ai': function() {\n      state.sitemap = '';\n      var aiAgents = [\n        'GPTBot', 'CCBot', 'ChatGPT-User', 'anthropic-ai',\n        'Claude-Web', 'Omgilibot', 'FacebookBot', 'Google-Extended',\n        'Bytespider', 'PerplexityBot', 'YouBot'\n      ];\n      state.blocks = aiAgents.map(function(a) {\n        return makeBlock(a, [makeRule('Disallow', '/')], '');\n      });\n      state.blocks.unshift(makeBlock('*', [makeRule('Allow', '/')], ''));\n    },\n    'wordpress': function() {\n      state.sitemap = 'https://example.com/sitemap.xml';\n      state.blocks = [\n        makeBlock('*', [\n          makeRule('Disallow', '/wp-admin/'),\n          makeRule('Allow', '/wp-admin/admin-ajax.php')\n        ], '')\n      ];\n    },\n    'standard-seo': function() {\n      state.sitemap = 'https://example.com/sitemap.xml';\n      state.blocks = [\n        makeBlock('*', [\n          makeRule('Allow', '/'),\n          makeRule('Disallow', '/admin/'),\n          makeRule('Disallow', '/private/'),\n          makeRule('Disallow', '/*.pdf$')\n        ], '10')\n      ];\n    },\n    'clear': function() {\n      state.sitemap = '';\n      state.blocks = [];\n    }\n  };\n\n  window.robotsApplyPreset = function(name) {\n    if (PRESETS[name]) {\n      PRESETS[name]();\n      syncFormFromState();\n      robotsRender();\n    }\n  };\n\n  // ---- DOM描画 ----\n\n  function syncFormFromState() {\n    document.getElementById('robots-sitemap').value = state.sitemap;\n    var list = document.getElementById('robots-ua-list');\n    list.innerHTML = '';\n    state.blocks.forEach(function(block) {\n      list.appendChild(buildBlockEl(block));\n    });\n  }\n\n  function buildBlockEl(block) {\n    var div = document.createElement('div');\n    div.className = 'panel';\n    div.style.marginBottom = '12px';\n    div.dataset.id = block.id;\n\n    div.innerHTML =\n      '\u003cdiv class=\"ua-block\"\u003e' +\n        '\u003cdiv class=\"ua-block-header\"\u003e' +\n          '\u003cspan style=\"font-size:0.78rem;font-weight:700;color:#888;white-space:nowrap\"\u003eUser-agent\u003c/span\u003e' +\n          '\u003cinput type=\"text\" value=\"' + esc(block.ua) + '\" placeholder=\"例: * または GPTBot\"' +\n            ' oninput=\"robotsUAChange(\\'' + block.id + '\\', this.value)\"\u003e' +\n          '\u003cbutton class=\"btn-icon\" title=\"ブロックを削除\" onclick=\"robotsRemoveBlock(\\'' + block.id + '\\')\"\u003e\u0026times;\u003c/button\u003e' +\n        '\u003c/div\u003e' +\n        '\u003cdiv class=\"rules-list\" id=\"rules-' + block.id + '\"\u003e' +\n        '\u003c/div\u003e' +\n        '\u003cbutton class=\"btn-add-rule\" onclick=\"robotsAddRule(\\'' + block.id + '\\')\"\u003e+ ルールを追加\u003c/button\u003e' +\n        '\u003cdiv class=\"crawl-delay-row\"\u003e' +\n          '\u003clabel\u003eクロール遅延（秒）:\u003c/label\u003e' +\n          '\u003cinput type=\"number\" min=\"0\" value=\"' + esc(block.crawlDelay) + '\" placeholder=\"なし\"' +\n            ' oninput=\"robotsCrawlDelayChange(\\'' + block.id + '\\', this.value)\"\u003e' +\n        '\u003c/div\u003e' +\n      '\u003c/div\u003e';\n\n    var rulesEl = div.querySelector('#rules-' + block.id);\n    block.rules.forEach(function(rule, i) {\n      rulesEl.appendChild(buildRuleEl(block.id, rule, i));\n    });\n\n    return div;\n  }\n\n  function buildRuleEl(blockId, rule, idx) {\n    var row = document.createElement('div');\n    row.className = 'rule-row';\n    row.dataset.idx = idx;\n\n    var sel = document.createElement('select');\n    sel.className = 'rule-type-select';\n    ['Allow', 'Disallow'].forEach(function(t) {\n      var opt = document.createElement('option');\n      opt.value = t;\n      opt.textContent = t;\n      if (rule.type === t) opt.selected = true;\n      sel.appendChild(opt);\n    });\n    sel.addEventListener('change', function() {\n      robotsRuleTypeChange(blockId, idx, this.value);\n    });\n\n    var inp = document.createElement('input');\n    inp.type = 'text';\n    inp.value = rule.path;\n    inp.placeholder = '/パス/';\n    inp.addEventListener('input', function() {\n      robotsRulePathChange(blockId, idx, this.value);\n    });\n\n    var del = document.createElement('button');\n    del.className = 'btn-icon';\n    del.title = 'ルールを削除';\n    del.innerHTML = '\u0026times;';\n    del.addEventListener('click', function() {\n      robotsRemoveRule(blockId, idx);\n    });\n\n    row.appendChild(sel);\n    row.appendChild(inp);\n    row.appendChild(del);\n    return row;\n  }\n\n  function esc(s) {\n    return String(s || '').replace(/\"/g, '\u0026quot;').replace(/\u003c/g, '\u0026lt;').replace(/\u003e/g, '\u0026gt;');\n  }\n\n  // ---- 状態更新 ----\n\n  function findBlock(id) {\n    return state.blocks.find(function(b) { return b.id === id; });\n  }\n\n  window.robotsAddUA = function() {\n    var block = makeBlock('*', [makeRule('Disallow', '/')], '');\n    state.blocks.push(block);\n    var list = document.getElementById('robots-ua-list');\n    list.appendChild(buildBlockEl(block));\n    robotsRender();\n  };\n\n  window.robotsRemoveBlock = function(id) {\n    state.blocks = state.blocks.filter(function(b) { return b.id !== id; });\n    var el = document.querySelector('[data-id=\"' + id + '\"]');\n    if (el) el.remove();\n    robotsRender();\n  };\n\n  window.robotsUAChange = function(id, val) {\n    var b = findBlock(id);\n    if (b) { b.ua = val; robotsRender(); }\n  };\n\n  window.robotsCrawlDelayChange = function(id, val) {\n    var b = findBlock(id);\n    if (b) { b.crawlDelay = val; robotsRender(); }\n  };\n\n  window.robotsAddRule = function(id) {\n    var b = findBlock(id);\n    if (!b) return;\n    var rule = makeRule('Disallow', '');\n    b.rules.push(rule);\n    var rulesEl = document.getElementById('rules-' + id);\n    if (rulesEl) rulesEl.appendChild(buildRuleEl(id, rule, b.rules.length - 1));\n    robotsRender();\n  };\n\n  window.robotsRemoveRule = function(blockId, idx) {\n    var b = findBlock(blockId);\n    if (!b) return;\n    b.rules.splice(idx, 1);\n    // ブロック全体を再描画\n    var blockEl = document.querySelector('[data-id=\"' + blockId + '\"]');\n    if (blockEl) {\n      var newEl = buildBlockEl(b);\n      blockEl.replaceWith(newEl);\n    }\n    robotsRender();\n  };\n\n  window.robotsRuleTypeChange = function(blockId, idx, val) {\n    var b = findBlock(blockId);\n    if (b \u0026\u0026 b.rules[idx]) { b.rules[idx].type = val; robotsRender(); }\n  };\n\n  window.robotsRulePathChange = function(blockId, idx, val) {\n    var b = findBlock(blockId);\n    if (b \u0026\u0026 b.rules[idx]) { b.rules[idx].path = val; robotsRender(); }\n  };\n\n  window.robotsRender = function() {\n    state.sitemap = document.getElementById('robots-sitemap').value.trim();\n    var lines = [];\n\n    if (state.blocks.length === 0 \u0026\u0026 !state.sitemap) {\n      document.getElementById('robots-preview').innerHTML =\n        '\u003cspan class=\"syn-comment\"\u003e# robots.txt の内容がここに表示されます...\u003c/span\u003e';\n      return;\n    }\n\n    state.blocks.forEach(function(block, bi) {\n      if (bi \u003e 0) lines.push('');\n      lines.push({ key: 'User-agent', val: block.ua });\n      block.rules.forEach(function(rule) {\n        lines.push({ key: rule.type, val: rule.path });\n      });\n      if (block.crawlDelay \u0026\u0026 block.crawlDelay !== '') {\n        lines.push({ key: 'Crawl-delay', val: block.crawlDelay });\n      }\n    });\n\n    if (state.sitemap) {\n      lines.push('');\n      lines.push({ key: 'Sitemap', val: state.sitemap });\n    }\n\n    // シンタックスハイライト付きHTML生成\n    var html = lines.map(function(line) {\n      if (line === '') return '';\n      if (typeof line === 'string') {\n        return '\u003cspan class=\"syn-comment\"\u003e' + htmlEsc(line) + '\u003c/span\u003e';\n      }\n      var keyClass = 'syn-key';\n      var valClass = 'syn-val-neutral';\n      if (line.key === 'Allow') valClass = 'syn-val-allow';\n      else if (line.key === 'Disallow') valClass = 'syn-val-disallow';\n      else if (line.key === 'Sitemap') valClass = 'syn-val-sitemap';\n\n      return '\u003cspan class=\"' + keyClass + '\"\u003e' + htmlEsc(line.key) + '\u003c/span\u003e' +\n             '\u003cspan class=\"syn-colon\"\u003e: \u003c/span\u003e' +\n             '\u003cspan class=\"' + valClass + '\"\u003e' + htmlEsc(line.val) + '\u003c/span\u003e';\n    }).join('\\n');\n\n    document.getElementById('robots-preview').innerHTML = html || '\u003cspan class=\"syn-comment\"\u003e# 空のファイル\u003c/span\u003e';\n  };\n\n  function htmlEsc(s) {\n    return String(s || '').replace(/\u0026/g, '\u0026amp;').replace(/\u003c/g, '\u0026lt;').replace(/\u003e/g, '\u0026gt;');\n  }\n\n  function getRawText() {\n    var lines = [];\n    state.sitemap = document.getElementById('robots-sitemap').value.trim();\n\n    state.blocks.forEach(function(block, bi) {\n      if (bi \u003e 0) lines.push('');\n      lines.push('User-agent: ' + block.ua);\n      block.rules.forEach(function(rule) {\n        lines.push(rule.type + ': ' + rule.path);\n      });\n      if (block.crawlDelay \u0026\u0026 block.crawlDelay !== '') {\n        lines.push('Crawl-delay: ' + block.crawlDelay);\n      }\n    });\n\n    if (state.sitemap) {\n      lines.push('');\n      lines.push('Sitemap: ' + state.sitemap);\n    }\n\n    return lines.join('\\n');\n  }\n\n  window.robotsCopy = function() {\n    var text = getRawText();\n    navigator.clipboard.writeText(text).then(function() {\n      var btn = document.getElementById('robots-copy-btn');\n      btn.textContent = 'コピーしました!';\n      btn.classList.add('copied');\n      setTimeout(function() {\n        btn.textContent = 'コピー';\n        btn.classList.remove('copied');\n      }, 2000);\n    }).catch(function() {\n      var ta = document.createElement('textarea');\n      ta.value = text;\n      ta.style.position = 'fixed';\n      ta.style.opacity = '0';\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n    });\n  };\n\n  window.robotsDownload = function() {\n    var text = getRawText();\n    var blob = new Blob([text], { type: 'text/plain' });\n    var url = URL.createObjectURL(blob);\n    var a = document.createElement('a');\n    a.href = url;\n    a.download = 'robots.txt';\n    a.click();\n    URL.revokeObjectURL(url);\n  };\n\n  // 初期表示: 全許可プリセット\n  PRESETS['allow-all']();\n  syncFormFromState();\n  robotsRender();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch3 id=\"関連ツール\"\u003e関連ツール\u003c/h3\u003e\n\u003cblockquote\u003e\n\u003cp\u003eメタタグを作成 → \u003ca href=\"https://productivity-works.com/ja/tools/meta-tag-generator/\"\u003eメタタグジェネレーター\u003c/a\u003e\n\u003c/p\u003e","title":"Robots.txt ジェネレーター — 無料オンラインツール"},{"content":" 日本ではチップの習慣はありませんが、海外旅行や外国のレストランで役立ちます。割り勘（人数割り）にも対応しています。 請求金額 ¥ $ € £ チップ率 10% 15% 18% 20% 25% カスタム: % 割り勘 — 人数 − 1 + 人 計算結果 チップ金額 — 18% 合計金額 — 飲食代＋チップ 1人あたり合計 — 1人 1人あたりチップ — 1人 飲食代: — チップ: — 合計を切り上げ ↑ 合計を切り捨て ↓ リセット 経費精算にはfreee 飲食費の経費精算が多い方、freeeなら領収書をスマホで撮影するだけで記帳完了。 freeeを無料で試す 使い方: 請求金額を入力し、チップ率をボタンで選ぶか自由入力してください。割り勘したい場合は人数を増やすと1人あたりの金額が自動計算されます。端数を切り上げ・切り捨てすると、払いやすいキリの良い金額に調整できます。\nチップの目安（海外レストラン）\nチップ率 評価 10% 普通（最低ライン） 15% 良いサービス 18% 標準（米国の飲食店で一般的） 20% とても良いサービス 25%以上 素晴らしいサービス 関連ツール ローン返済額・利息を計算 → ローン計算ツール QRコードをメニューや支払いリンクに活用 → QRコードジェネレーター 割合・割引計算をかんたんに → パーセント計算ツール ","permalink":"https://productivity-works.com/ja/tools/tip-calculator/","summary":"\u003cdiv id=\"tip-app\"\u003e\n\u003cstyle\u003e\n#tip-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  max-width: 680px;\n  margin: 0 auto;\n  color: #1f2937;\n}\n\n#tip-app * {\n  box-sizing: border-box;\n}\n\n.tip-card {\n  background: #fff;\n  border: 1.5px solid #fde68a;\n  border-radius: 16px;\n  padding: 28px 28px 24px;\n  margin-bottom: 20px;\n  box-shadow: 0 2px 12px rgba(217,119,6,0.08);\n}\n\n.tip-section-title {\n  font-size: 13px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: .04em;\n  color: #92400e;\n  margin: 0 0 12px;\n}\n\n.tip-context-note {\n  background: #fffbeb;\n  border-left: 4px solid #d97706;\n  border-radius: 0 8px 8px 0;\n  padding: 10px 16px;\n  font-size: 13px;\n  color: #78350f;\n  margin-bottom: 20px;\n  line-height: 1.6;\n}\n\n/* Input row */\n.tip-input-row {\n  display: flex;\n  gap: 12px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n\n.tip-currency-select {\n  flex: 0 0 72px;\n  padding: 10px 8px;\n  border: 1.5px solid #fcd34d;\n  border-radius: 10px;\n  font-size: 18px;\n  font-weight: 700;\n  color: #92400e;\n  background: #fffbeb;\n  text-align: center;\n  cursor: pointer;\n  appearance: none;\n}\n\n.tip-amount-input {\n  flex: 1 1 160px;\n  padding: 10px 14px;\n  border: 1.5px solid #fcd34d;\n  border-radius: 10px;\n  font-size: 24px;\n  font-weight: 700;\n  color: #1f2937;\n  background: #fffbeb;\n  width: 100%;\n}\n\n.tip-amount-input:focus,\n.tip-currency-select:focus {\n  outline: none;\n  border-color: #d97706;\n  box-shadow: 0 0 0 3px rgba(217,119,6,0.15);\n}\n\n/* Tip quick buttons */\n.tip-quick-btns {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n  margin-bottom: 12px;\n}\n\n.tip-pct-btn {\n  flex: 1 1 60px;\n  padding: 10px 4px;\n  border: 1.5px solid #fcd34d;\n  border-radius: 10px;\n  background: #fffbeb;\n  color: #92400e;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background .15s, border-color .15s, color .15s;\n  text-align: center;\n}\n\n.tip-pct-btn:hover {\n  background: #fef3c7;\n  border-color: #d97706;\n}\n\n.tip-pct-btn.active {\n  background: #d97706;\n  border-color: #b45309;\n  color: #fff;\n}\n\n/* Custom tip */\n.tip-custom-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 4px;\n}\n\n.tip-custom-label {\n  font-size: 14px;\n  color: #6b7280;\n  white-space: nowrap;\n}\n\n.tip-custom-input {\n  width: 90px;\n  padding: 8px 12px;\n  border: 1.5px solid #fcd34d;\n  border-radius: 8px;\n  font-size: 16px;\n  font-weight: 600;\n  color: #1f2937;\n  background: #fffbeb;\n}\n\n.tip-custom-input:focus {\n  outline: none;\n  border-color: #d97706;\n  box-shadow: 0 0 0 3px rgba(217,119,6,0.15);\n}\n\n/* Quality label */\n.tip-quality-badge {\n  display: inline-block;\n  padding: 3px 12px;\n  border-radius: 20px;\n  font-size: 12px;\n  font-weight: 700;\n  letter-spacing: .04em;\n  margin-left: 8px;\n  vertical-align: middle;\n  transition: background .2s, color .2s;\n}\n\n/* People selector */\n.tip-people-row {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n}\n\n.tip-people-btn {\n  width: 38px;\n  height: 38px;\n  border-radius: 50%;\n  border: 1.5px solid #fcd34d;\n  background: #fffbeb;\n  color: #92400e;\n  font-size: 22px;\n  font-weight: 700;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  line-height: 1;\n  transition: background .15s;\n}\n\n.tip-people-btn:hover {\n  background: #fef3c7;\n  border-color: #d97706;\n}\n\n.tip-people-num {\n  font-size: 26px;\n  font-weight: 800;\n  color: #d97706;\n  min-width: 32px;\n  text-align: center;\n}\n\n.tip-people-label {\n  font-size: 14px;\n  color: #6b7280;\n}\n\n/* Results */\n.tip-results-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 18px;\n}\n\n@media (max-width: 480px) {\n  .tip-results-grid {\n    grid-template-columns: 1fr;\n  }\n  .tip-amount-input {\n    font-size: 20px;\n  }\n}\n\n.tip-result-cell {\n  background: #fffbeb;\n  border: 1.5px solid #fde68a;\n  border-radius: 12px;\n  padding: 16px 18px;\n  text-align: center;\n}\n\n.tip-result-cell.highlight {\n  background: #d97706;\n  border-color: #b45309;\n}\n\n.tip-result-cell .label {\n  font-size: 12px;\n  font-weight: 600;\n  letter-spacing: .04em;\n  color: #92400e;\n  margin-bottom: 6px;\n}\n\n.tip-result-cell.highlight .label {\n  color: #fef3c7;\n}\n\n.tip-result-cell .amount {\n  font-size: 26px;\n  font-weight: 800;\n  color: #1f2937;\n  line-height: 1.1;\n}\n\n.tip-result-cell.highlight .amount {\n  color: #fff;\n}\n\n.tip-result-cell .sub {\n  font-size: 12px;\n  color: #9ca3af;\n  margin-top: 4px;\n}\n\n.tip-result-cell.highlight .sub {\n  color: #fde68a;\n}\n\n/* Visual bar */\n.tip-bar-wrap {\n  margin: 4px 0 16px;\n}\n\n.tip-bar-labels {\n  display: flex;\n  justify-content: space-between;\n  font-size: 12px;\n  color: #6b7280;\n  margin-bottom: 5px;\n}\n\n.tip-bar-track {\n  width: 100%;\n  height: 18px;\n  background: #e5e7eb;\n  border-radius: 9px;\n  overflow: hidden;\n  display: flex;\n}\n\n.tip-bar-bill {\n  background: #6b7280;\n  height: 100%;\n  border-radius: 9px 0 0 9px;\n  transition: width .3s;\n}\n\n.tip-bar-tip {\n  background: #d97706;\n  height: 100%;\n  border-radius: 0 9px 9px 0;\n  transition: width .3s;\n}\n\n/* Round buttons */\n.tip-round-row {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n.tip-round-btn {\n  flex: 1 1 auto;\n  padding: 9px 14px;\n  border: 1.5px solid #fcd34d;\n  border-radius: 9px;\n  background: #fffbeb;\n  color: #92400e;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background .15s, border-color .15s;\n  text-align: center;\n}\n\n.tip-round-btn:hover {\n  background: #fef3c7;\n  border-color: #d97706;\n}\n\n.tip-reset-btn {\n  width: 100%;\n  padding: 12px;\n  border: none;\n  border-radius: 10px;\n  background: #f3f4f6;\n  color: #6b7280;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  margin-top: 4px;\n  transition: background .15s;\n}\n\n.tip-reset-btn:hover {\n  background: #e5e7eb;\n}\n\n.tip-freee-cta {\n  background: #f0fdf4;\n  border: 1.5px solid #6ee7b7;\n  border-radius: 12px;\n  padding: 18px 20px;\n  margin-top: 24px;\n  font-size: 14px;\n  color: #065f46;\n  line-height: 1.7;\n}\n\n.tip-freee-cta strong {\n  display: block;\n  font-size: 15px;\n  font-weight: 700;\n  margin-bottom: 6px;\n  color: #065f46;\n}\n\n.tip-freee-cta a {\n  display: inline-block;\n  margin-top: 10px;\n  background: #059669;\n  color: #fff;\n  padding: 9px 20px;\n  border-radius: 8px;\n  text-decoration: none;\n  font-weight: 700;\n  font-size: 14px;\n  transition: background .15s;\n}\n\n.tip-freee-cta a:hover {\n  background: #047857;\n}\n\u003c/style\u003e\n\u003cdiv class=\"tip-context-note\"\u003e\n  日本ではチップの習慣はありませんが、海外旅行や外国のレストランで役立ちます。割り勘（人数割り）にも対応しています。\n\u003c/div\u003e\n\u003c!-- 請求金額 --\u003e\n\u003cdiv class=\"tip-card\"\u003e\n  \u003cdiv class=\"tip-section-title\"\u003e請求金額\u003c/div\u003e\n  \u003cdiv class=\"tip-input-row\"\u003e\n    \u003cselect class=\"tip-currency-select\" id=\"tip-currency\"\u003e\n      \u003coption value=\"¥\"\u003e¥\u003c/option\u003e\n      \u003coption value=\"$\"\u003e$\u003c/option\u003e\n      \u003coption value=\"€\"\u003e€\u003c/option\u003e\n      \u003coption value=\"£\"\u003e£\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cinput class=\"tip-amount-input\" type=\"number\" id=\"tip-bill\" placeholder=\"0\" min=\"0\" step=\"1\" inputmode=\"decimal\" /\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- チップ率 --\u003e\n\u003cdiv class=\"tip-card\"\u003e\n  \u003cdiv class=\"tip-section-title\"\u003e\n    チップ率\n    \u003cspan class=\"tip-quality-badge\" id=\"tip-quality-badge\"\u003e\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"tip-quick-btns\"\u003e\n    \u003cbutton class=\"tip-pct-btn\" data-pct=\"10\"\u003e10%\u003c/button\u003e\n    \u003cbutton class=\"tip-pct-btn\" data-pct=\"15\"\u003e15%\u003c/button\u003e\n    \u003cbutton class=\"tip-pct-btn active\" data-pct=\"18\"\u003e18%\u003c/button\u003e\n    \u003cbutton class=\"tip-pct-btn\" data-pct=\"20\"\u003e20%\u003c/button\u003e\n    \u003cbutton class=\"tip-pct-btn\" data-pct=\"25\"\u003e25%\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"tip-custom-row\"\u003e\n    \u003cspan class=\"tip-custom-label\"\u003eカスタム:\u003c/span\u003e\n    \u003cinput class=\"tip-custom-input\" type=\"number\" id=\"tip-custom-pct\" placeholder=\"%\" min=\"0\" max=\"100\" step=\"1\" inputmode=\"numeric\" /\u003e\n    \u003cspan style=\"font-size:14px;color:#6b7280;\"\u003e%\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 割り勘（人数） --\u003e\n\u003cdiv class=\"tip-card\"\u003e\n  \u003cdiv class=\"tip-section-title\"\u003e割り勘 — 人数\u003c/div\u003e\n  \u003cdiv class=\"tip-people-row\"\u003e\n    \u003cbutton class=\"tip-people-btn\" id=\"tip-minus\"\u003e−\u003c/button\u003e\n    \u003cdiv class=\"tip-people-num\" id=\"tip-people-num\"\u003e1\u003c/div\u003e\n    \u003cbutton class=\"tip-people-btn\" id=\"tip-plus\"\u003e+\u003c/button\u003e\n    \u003cspan class=\"tip-people-label\" id=\"tip-people-label\"\u003e人\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 計算結果 --\u003e\n\u003cdiv class=\"tip-card\"\u003e\n  \u003cdiv class=\"tip-section-title\"\u003e計算結果\u003c/div\u003e\n  \u003cdiv class=\"tip-results-grid\"\u003e\n    \u003cdiv class=\"tip-result-cell\"\u003e\n      \u003cdiv class=\"label\"\u003eチップ金額\u003c/div\u003e\n      \u003cdiv class=\"amount\" id=\"res-tip\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"sub\" id=\"res-tip-pct\"\u003e18%\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tip-result-cell\"\u003e\n      \u003cdiv class=\"label\"\u003e合計金額\u003c/div\u003e\n      \u003cdiv class=\"amount\" id=\"res-total\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e飲食代＋チップ\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tip-result-cell highlight\" id=\"res-person-cell\"\u003e\n      \u003cdiv class=\"label\"\u003e1人あたり合計\u003c/div\u003e\n      \u003cdiv class=\"amount\" id=\"res-person\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"sub\" id=\"res-person-sub\"\u003e1人\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tip-result-cell\"\u003e\n      \u003cdiv class=\"label\"\u003e1人あたりチップ\u003c/div\u003e\n      \u003cdiv class=\"amount\" id=\"res-tip-person\"\u003e—\u003c/div\u003e\n      \u003cdiv class=\"sub\" id=\"res-tip-person-sub\"\u003e1人\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- ビジュアルバー --\u003e\n  \u003cdiv class=\"tip-bar-wrap\"\u003e\n    \u003cdiv class=\"tip-bar-labels\"\u003e\n      \u003cspan id=\"bar-label-bill\"\u003e飲食代: —\u003c/span\u003e\n      \u003cspan id=\"bar-label-tip\"\u003eチップ: —\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tip-bar-track\"\u003e\n      \u003cdiv class=\"tip-bar-bill\" id=\"bar-bill\" style=\"width:100%\"\u003e\u003c/div\u003e\n      \u003cdiv class=\"tip-bar-tip\" id=\"bar-tip\" style=\"width:0%\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 端数丸めボタン --\u003e\n  \u003cdiv class=\"tip-round-row\"\u003e\n    \u003cbutton class=\"tip-round-btn\" id=\"btn-round-up\"\u003e合計を切り上げ ↑\u003c/button\u003e\n    \u003cbutton class=\"tip-round-btn\" id=\"btn-round-down\"\u003e合計を切り捨て ↓\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"tip-reset-btn\" id=\"btn-reset\"\u003eリセット\u003c/button\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  let bill = 0;\n  let tipPct = 18;\n  let people = 1;\n  let currency = '¥';\n\n  const elBill    = document.getElementById('tip-bill');\n  const elCur     = document.getElementById('tip-currency');\n  const elCustom  = document.getElementById('tip-custom-pct');\n  const elPeople  = document.getElementById('tip-people-num');\n  const elPLabel  = document.getElementById('tip-people-label');\n  const elQuality = document.getElementById('tip-quality-badge');\n\n  const elResTip          = document.getElementById('res-tip');\n  const elResTotal        = document.getElementById('res-total');\n  const elResPerson       = document.getElementById('res-person');\n  const elResTipPct       = document.getElementById('res-tip-pct');\n  const elResPersonSub    = document.getElementById('res-person-sub');\n  const elResTipPerson    = document.getElementById('res-tip-person');\n  const elResTipPersonSub = document.getElementById('res-tip-person-sub');\n\n  const barBill = document.getElementById('bar-bill');\n  const barTip  = document.getElementById('bar-tip');\n  const lblBill = document.getElementById('bar-label-bill');\n  const lblTip  = document.getElementById('bar-label-tip');\n\n  const pctBtns = document.querySelectorAll('#tip-app .tip-pct-btn');\n\n  function fmt(n) {\n    if (currency === '¥') return currency + Math.round(n).toLocaleString('ja-JP');\n    return currency + n.toFixed(2);\n  }\n\n  function qualityLabel(pct) {\n    if (pct \u003c 10)  return { text: '',           bg: 'transparent', color: 'transparent' };\n    if (pct \u003c 15)  return { text: '普通',       bg: '#fef9c3', color: '#854d0e' };\n    if (pct \u003c 20)  return { text: '良い',       bg: '#d1fae5', color: '#065f46' };\n    if (pct \u003c 25)  return { text: 'とても良い', bg: '#bfdbfe', color: '#1e3a8a' };\n    return           { text: '素晴らしい！',   bg: '#ede9fe', color: '#4c1d95' };\n  }\n\n  function calc(overrideBill) {\n    const b = (overrideBill !== undefined) ? overrideBill : bill;\n    const tipAmt       = b * tipPct / 100;\n    const total        = b + tipAmt;\n    const perPerson    = total / people;\n    const tipPerPerson = tipAmt / people;\n\n    elResTip.textContent          = fmt(tipAmt);\n    elResTotal.textContent        = fmt(total);\n    elResPerson.textContent       = fmt(perPerson);\n    elResTipPerson.textContent    = fmt(tipPerPerson);\n    elResTipPct.textContent       = tipPct + '%';\n    elResPersonSub.textContent    = people + '人';\n    elResTipPersonSub.textContent = people + '人';\n\n    const billPct   = total \u003e 0 ? (b / total * 100) : 100;\n    const tipBarPct = total \u003e 0 ? (tipAmt / total * 100) : 0;\n    barBill.style.width = billPct + '%';\n    barTip.style.width  = tipBarPct + '%';\n    lblBill.textContent = '飲食代: ' + fmt(b);\n    lblTip.textContent  = 'チップ: ' + fmt(tipAmt);\n\n    const q = qualityLabel(tipPct);\n    elQuality.textContent         = q.text;\n    elQuality.style.background    = q.bg;\n    elQuality.style.color         = q.color;\n  }\n\n  function setActivePct(pct) {\n    tipPct = pct;\n    pctBtns.forEach(b =\u003e {\n      b.classList.toggle('active', parseInt(b.dataset.pct, 10) === pct);\n    });\n    elCustom.value = '';\n    calc();\n  }\n\n  elBill.addEventListener('input', function() {\n    bill = parseFloat(this.value) || 0;\n    calc();\n  });\n\n  elCur.addEventListener('change', function() {\n    currency = this.value;\n    calc();\n  });\n\n  pctBtns.forEach(btn =\u003e {\n    btn.addEventListener('click', function() {\n      setActivePct(parseInt(this.dataset.pct, 10));\n    });\n  });\n\n  elCustom.addEventListener('input', function() {\n    const v = parseFloat(this.value);\n    if (!isNaN(v) \u0026\u0026 v \u003e= 0) {\n      tipPct = v;\n      pctBtns.forEach(b =\u003e b.classList.remove('active'));\n      calc();\n    }\n  });\n\n  document.getElementById('tip-minus').addEventListener('click', function() {\n    if (people \u003e 1) { people--; updatePeople(); }\n  });\n  document.getElementById('tip-plus').addEventListener('click', function() {\n    if (people \u003c 20) { people++; updatePeople(); }\n  });\n\n  function updatePeople() {\n    elPeople.textContent = people;\n    elPLabel.textContent = '人';\n    calc();\n  }\n\n  document.getElementById('btn-round-up').addEventListener('click', function() {\n    if (bill \u003c= 0) return;\n    const tipAmt  = bill * tipPct / 100;\n    const total   = bill + tipAmt;\n    const unit    = currency === '¥' ? 100 : 1;\n    const rounded = Math.ceil(total / unit) * unit;\n    const newTip  = rounded - bill;\n    const newPct  = bill \u003e 0 ? (newTip / bill * 100) : tipPct;\n    tipPct = Math.round(newPct * 10) / 10;\n    elCustom.value = tipPct;\n    pctBtns.forEach(b =\u003e b.classList.remove('active'));\n    elResTotal.textContent     = fmt(rounded);\n    elResTip.textContent       = fmt(newTip);\n    elResPerson.textContent    = fmt(rounded / people);\n    elResTipPerson.textContent = fmt(newTip / people);\n    barBill.style.width = (bill / rounded * 100) + '%';\n    barTip.style.width  = (newTip / rounded * 100) + '%';\n    lblTip.textContent  = 'チップ: ' + fmt(newTip);\n    const q = qualityLabel(tipPct);\n    elQuality.textContent      = q.text;\n    elQuality.style.background = q.bg;\n    elQuality.style.color      = q.color;\n  });\n\n  document.getElementById('btn-round-down').addEventListener('click', function() {\n    if (bill \u003c= 0) return;\n    const tipAmt  = bill * tipPct / 100;\n    const total   = bill + tipAmt;\n    const unit    = currency === '¥' ? 100 : 1;\n    const rounded = Math.floor(total / unit) * unit;\n    if (rounded \u003c= bill) return;\n    const newTip  = rounded - bill;\n    const newPct  = bill \u003e 0 ? (newTip / bill * 100) : tipPct;\n    tipPct = Math.round(newPct * 10) / 10;\n    elCustom.value = tipPct;\n    pctBtns.forEach(b =\u003e b.classList.remove('active'));\n    elResTotal.textContent     = fmt(rounded);\n    elResTip.textContent       = fmt(newTip);\n    elResPerson.textContent    = fmt(rounded / people);\n    elResTipPerson.textContent = fmt(newTip / people);\n    barBill.style.width = (bill / rounded * 100) + '%';\n    barTip.style.width  = (newTip / rounded * 100) + '%';\n    lblTip.textContent  = 'チップ: ' + fmt(newTip);\n    const q = qualityLabel(tipPct);\n    elQuality.textContent      = q.text;\n    elQuality.style.background = q.bg;\n    elQuality.style.color      = q.color;\n  });\n\n  document.getElementById('btn-reset').addEventListener('click', function() {\n    bill = 0;\n    tipPct = 18;\n    people = 1;\n    currency = '¥';\n    elBill.value = '';\n    elCur.value = '¥';\n    elCustom.value = '';\n    elPeople.textContent = '1';\n    elPLabel.textContent = '人';\n    pctBtns.forEach(b =\u003e b.classList.toggle('active', b.dataset.pct === '18'));\n    elResTip.textContent          = '—';\n    elResTotal.textContent        = '—';\n    elResPerson.textContent       = '—';\n    elResTipPerson.textContent    = '—';\n    elResTipPct.textContent       = '18%';\n    elResPersonSub.textContent    = '1人';\n    elResTipPersonSub.textContent = '1人';\n    barBill.style.width = '100%';\n    barTip.style.width  = '0%';\n    lblBill.textContent = '飲食代: —';\n    lblTip.textContent  = 'チップ: —';\n    elQuality.textContent      = '';\n    elQuality.style.background = 'transparent';\n  });\n\n  calc();\n})();\n\u003c/script\u003e\n\u003cdiv class=\"tip-freee-cta\"\u003e\n  \u003cstrong\u003e経費精算にはfreee\u003c/strong\u003e\n  飲食費の経費精算が多い方、freeeなら領収書をスマホで撮影するだけで記帳完了。\n  \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" rel=\"nofollow\"\u003efreeeを無料で試す\u003c/a\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e使い方:\u003c/strong\u003e 請求金額を入力し、チップ率をボタンで選ぶか自由入力してください。割り勘したい場合は人数を増やすと1人あたりの金額が自動計算されます。端数を切り上げ・切り捨てすると、払いやすいキリの良い金額に調整できます。\u003c/p\u003e","title":"チップ計算ツール・割り勘計算 - 無料チップ電卓"},{"content":"TOML・INI 形式の設定ファイルを JSON に変換、または JSON を TOML に変換できるツールです。ブラウザ上で完結するので、ファイルのアップロード不要。インストール不要でそのまま使えます。\nプリセット: Cargo.toml pyproject.toml config.ini JSONサンプル JSONを整形して出力 JSONを最小化（minify） TOML / INI 入力 クリア コピー JSON 出力 クリア コピー TOML/INI \u0026rarr; JSON に変換 \u0026#8644; JSON \u0026rarr; TOML に変換 freee会計と連携している開発者の方へ freee APIのレスポンスはJSON形式です。このツールでJSONをTOML設定ファイルに変換し、Rustなどの設定管理に活用できます。freee APIの活用方法やAI自動化については下記をご覧ください。 freee API活用ガイドを見る 使い方 TOML/INI → JSON 変換 左のテキストエリアに TOML または INI ファイルの内容を貼り付け、「TOML/INI → JSON に変換」ボタンをクリックします。形式は自動判定されます（; コメントがある場合は INI として処理）。\nJSON → TOML 変換 右のテキストエリアに JSON を貼り付け（またはTOML→JSON変換後の結果をそのまま使い）、「JSON → TOML に変換」ボタンをクリックします。\n対応している TOML の機能 機能 例 文字列（基本・リテラル） name = \u0026quot;hello\u0026quot;, path = 'C:\\tmp' 整数・浮動小数点数 port = 8080, ratio = 3.14 真偽値 debug = true 配列 features = [\u0026quot;a\u0026quot;, \u0026quot;b\u0026quot;] 標準テーブル [database] テーブルの配列 [[dependencies]] ドット区切りキー server.host = \u0026quot;localhost\u0026quot; インラインテーブル opts = { a = 1, b = 2 } INI 形式について [セクション]、key = value の形式、; や # のコメント行に対応しています。値は自動的に型変換されます（true/yes/on は真偽値、数値文字列は数値型に変換）。\n使いこなしのコツ Cargo.toml・pyproject.toml のプリセットで実際の設定ファイル例を確認できます。 JSONを最小化 オプションでコード埋め込みに適したコンパクトなJSONを出力できます。 コピー ボタンでクリップボードにコピーできます。 JSON → TOML 変換は右側（JSON出力欄）にJSONを貼り付けてから変換ボタンを押してください。 関連ツール YAML ↔ JSON 変換ツール — YAMLとJSONを相互変換 JSONフォーマッター・バリデーター — JSONの整形・検証・最小化 JSONスキーマジェネレーター — JSONサンプルからJSONスキーマを自動生成 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/toml-json-converter/","summary":"\u003cp\u003eTOML・INI 形式の設定ファイルを JSON に変換、または JSON を TOML に変換できるツールです。ブラウザ上で完結するので、ファイルのアップロード不要。インストール不要でそのまま使えます。\u003c/p\u003e\n\u003cdiv id=\"toml-app\"\u003e\n\u003cstyle\u003e\n  #toml-app *,\n  #toml-app *::before,\n  #toml-app *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n  #toml-app {\n    font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Noto Sans JP\", \"Segoe UI\", sans-serif;\n    font-size: 14px;\n    color: #1a1a2e;\n    line-height: 1.6;\n  }\n  #toml-app .ta-toolbar {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin-bottom: 14px;\n    align-items: center;\n  }\n  #toml-app .ta-btn {\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n    padding: 7px 14px;\n    border: none;\n    border-radius: 6px;\n    font-size: 13px;\n    font-weight: 600;\n    cursor: pointer;\n    transition: background 0.15s, transform 0.1s;\n    white-space: nowrap;\n  }\n  #toml-app .ta-btn:active { transform: scale(0.97); }\n  #toml-app .ta-btn-primary {\n    background: #4f46e5;\n    color: #fff;\n  }\n  #toml-app .ta-btn-primary:hover { background: #4338ca; }\n  #toml-app .ta-btn-secondary {\n    background: #e0e7ff;\n    color: #3730a3;\n  }\n  #toml-app .ta-btn-secondary:hover { background: #c7d2fe; }\n  #toml-app .ta-btn-ghost {\n    background: #f3f4f6;\n    color: #374151;\n    border: 1px solid #d1d5db;\n  }\n  #toml-app .ta-btn-ghost:hover { background: #e5e7eb; }\n  #toml-app .ta-btn-success {\n    background: #059669;\n    color: #fff;\n  }\n  #toml-app .ta-btn-success:hover { background: #047857; }\n  #toml-app .ta-panels {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 16px;\n  }\n  @media (max-width: 700px) {\n    #toml-app .ta-panels {\n      grid-template-columns: 1fr;\n    }\n  }\n  #toml-app .ta-panel {\n    display: flex;\n    flex-direction: column;\n    gap: 8px;\n  }\n  #toml-app .ta-panel-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    gap: 6px;\n  }\n  #toml-app .ta-panel-label {\n    font-size: 13px;\n    font-weight: 700;\n    color: #374151;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n  }\n  #toml-app .ta-panel-actions {\n    display: flex;\n    gap: 5px;\n    flex-wrap: wrap;\n  }\n  #toml-app textarea {\n    width: 100%;\n    min-height: 340px;\n    padding: 12px;\n    font-family: \"SF Mono\", \"Fira Code\", \"Consolas\", monospace;\n    font-size: 12.5px;\n    line-height: 1.6;\n    border: 2px solid #d1d5db;\n    border-radius: 8px;\n    resize: vertical;\n    background: #f9fafb;\n    color: #111827;\n    transition: border-color 0.15s;\n    outline: none;\n  }\n  #toml-app textarea:focus { border-color: #4f46e5; background: #fff; }\n  #toml-app textarea.ta-error { border-color: #ef4444; background: #fff5f5; }\n  #toml-app .ta-status {\n    min-height: 22px;\n    font-size: 12px;\n    padding: 3px 6px;\n    border-radius: 4px;\n  }\n  #toml-app .ta-status.ok { color: #065f46; background: #d1fae5; }\n  #toml-app .ta-status.err { color: #991b1b; background: #fee2e2; }\n  #toml-app .ta-convert-row {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 10px;\n    margin: 12px 0;\n    flex-wrap: wrap;\n  }\n  #toml-app .ta-arrow {\n    font-size: 20px;\n    color: #6b7280;\n    line-height: 1;\n  }\n  #toml-app .ta-options-row {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 16px;\n    margin-bottom: 14px;\n    align-items: center;\n  }\n  #toml-app .ta-check-label {\n    display: flex;\n    align-items: center;\n    gap: 6px;\n    font-size: 13px;\n    color: #374151;\n    cursor: pointer;\n    user-select: none;\n  }\n  #toml-app .ta-check-label input[type=\"checkbox\"] {\n    width: 15px;\n    height: 15px;\n    accent-color: #4f46e5;\n    cursor: pointer;\n  }\n  #toml-app .ta-presets-row {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 7px;\n    margin-bottom: 14px;\n    align-items: center;\n  }\n  #toml-app .ta-presets-label {\n    font-size: 12px;\n    font-weight: 600;\n    color: #6b7280;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n  }\n  #toml-app .ta-preset-btn {\n    padding: 4px 10px;\n    border: 1px solid #c7d2fe;\n    border-radius: 5px;\n    background: #eef2ff;\n    color: #3730a3;\n    font-size: 12px;\n    font-weight: 500;\n    cursor: pointer;\n    transition: background 0.12s;\n  }\n  #toml-app .ta-preset-btn:hover { background: #c7d2fe; }\n  #toml-app .ta-divider {\n    height: 1px;\n    background: #e5e7eb;\n    margin: 16px 0;\n  }\n  #toml-app .ta-copy-flash {\n    animation: taCopyFlashJa 0.6s ease;\n  }\n  @keyframes taCopyFlashJa {\n    0% { background: #a7f3d0; }\n    100% { background: #f9fafb; }\n  }\n  #toml-app .ta-freee-cta {\n    margin-top: 24px;\n    padding: 18px 20px;\n    background: linear-gradient(135deg, #eef2ff 0%, #f0fdf4 100%);\n    border: 1px solid #c7d2fe;\n    border-radius: 10px;\n    font-size: 13.5px;\n    color: #1e1b4b;\n    line-height: 1.7;\n  }\n  #toml-app .ta-freee-cta strong {\n    display: block;\n    font-size: 15px;\n    margin-bottom: 6px;\n    color: #3730a3;\n  }\n  #toml-app .ta-freee-cta a {\n    display: inline-block;\n    margin-top: 10px;\n    padding: 8px 18px;\n    background: #4f46e5;\n    color: #fff;\n    border-radius: 6px;\n    text-decoration: none;\n    font-weight: 600;\n    font-size: 13px;\n    transition: background 0.15s;\n  }\n  #toml-app .ta-freee-cta a:hover { background: #4338ca; }\n\u003c/style\u003e\n\u003cdiv class=\"ta-presets-row\"\u003e\n  \u003cspan class=\"ta-presets-label\"\u003eプリセット:\u003c/span\u003e\n  \u003cbutton class=\"ta-preset-btn\" onclick=\"taJaLoadPreset('cargo')\"\u003eCargo.toml\u003c/button\u003e\n  \u003cbutton class=\"ta-preset-btn\" onclick=\"taJaLoadPreset('pyproject')\"\u003epyproject.toml\u003c/button\u003e\n  \u003cbutton class=\"ta-preset-btn\" onclick=\"taJaLoadPreset('ini')\"\u003econfig.ini\u003c/button\u003e\n  \u003cbutton class=\"ta-preset-btn\" onclick=\"taJaLoadPreset('json')\"\u003eJSONサンプル\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ta-options-row\"\u003e\n  \u003clabel class=\"ta-check-label\"\u003e\n    \u003cinput type=\"checkbox\" id=\"taja-pretty\" checked\u003e\n    JSONを整形して出力\n  \u003c/label\u003e\n  \u003clabel class=\"ta-check-label\"\u003e\n    \u003cinput type=\"checkbox\" id=\"taja-minify\"\u003e\n    JSONを最小化（minify）\n  \u003c/label\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ta-panels\"\u003e\n  \u003cdiv class=\"ta-panel\"\u003e\n    \u003cdiv class=\"ta-panel-header\"\u003e\n      \u003cspan class=\"ta-panel-label\"\u003eTOML / INI 入力\u003c/span\u003e\n      \u003cdiv class=\"ta-panel-actions\"\u003e\n        \u003cbutton class=\"ta-btn ta-btn-ghost\" onclick=\"taJaClear('taja-input')\" style=\"font-size:12px;padding:4px 9px;\"\u003eクリア\u003c/button\u003e\n        \u003cbutton class=\"ta-btn ta-btn-ghost\" onclick=\"taJaCopyText('taja-input')\" style=\"font-size:12px;padding:4px 9px;\"\u003eコピー\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003ctextarea id=\"taja-input\" placeholder=\"TOMLまたはINIをここに貼り付け...\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n    \u003cdiv id=\"taja-input-status\" class=\"ta-status\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ta-panel\"\u003e\n    \u003cdiv class=\"ta-panel-header\"\u003e\n      \u003cspan class=\"ta-panel-label\"\u003eJSON 出力\u003c/span\u003e\n      \u003cdiv class=\"ta-panel-actions\"\u003e\n        \u003cbutton class=\"ta-btn ta-btn-ghost\" onclick=\"taJaClear('taja-output')\" style=\"font-size:12px;padding:4px 9px;\"\u003eクリア\u003c/button\u003e\n        \u003cbutton class=\"ta-btn ta-btn-ghost\" onclick=\"taJaCopyText('taja-output')\" style=\"font-size:12px;padding:4px 9px;\"\u003eコピー\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003ctextarea id=\"taja-output\" placeholder=\"JSON出力がここに表示されます...\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n    \u003cdiv id=\"taja-output-status\" class=\"ta-status\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ta-convert-row\"\u003e\n  \u003cbutton class=\"ta-btn ta-btn-primary\" onclick=\"taJaConvertToJson()\"\u003eTOML/INI \u0026rarr; JSON に変換\u003c/button\u003e\n  \u003cspan class=\"ta-arrow\"\u003e\u0026#8644;\u003c/span\u003e\n  \u003cbutton class=\"ta-btn ta-btn-success\" onclick=\"taJaConvertToToml()\"\u003eJSON \u0026rarr; TOML に変換\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ta-divider\"\u003e\u003c/div\u003e\n\u003cdiv class=\"ta-freee-cta\"\u003e\n  \u003cstrong\u003efreee会計と連携している開発者の方へ\u003c/strong\u003e\n  freee APIのレスポンスはJSON形式です。このツールでJSONをTOML設定ファイルに変換し、Rustなどの設定管理に活用できます。freee APIの活用方法やAI自動化については下記をご覧ください。\n  \u003ca href=\"/freee-api-automation/\" target=\"_blank\" rel=\"noopener\"\u003efreee API活用ガイドを見る\u003c/a\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  var PRESETS_JA = {\n    cargo: `[package]\nname = \"my-app\"\nversion = \"0.1.0\"\nedition = \"2021\"\nauthors = [\"Taro \u003ctaro@example.com\u003e\"]\ndescription = \"Rustプロジェクトのサンプル\"\nlicense = \"MIT\"\n\n[dependencies]\nserde = { version = \"1.0\", features = [\"derive\"] }\ntokio = { version = \"1\", features = [\"full\"] }\nreqwest = \"0.11\"\n\n[dev-dependencies]\ntokio-test = \"0.4\"\n\n[profile.release]\nopt-level = 3\nlto = true\n`,\n    pyproject: `[build-system]\nrequires = [\"setuptools\u003e=61.0\", \"wheel\"]\nbuild-backend = \"setuptools.backends.legacy:build\"\n\n[project]\nname = \"my-package\"\nversion = \"1.2.3\"\ndescription = \"Pythonパッケージのサンプル\"\nlicense = { text = \"MIT\" }\nrequires-python = \"\u003e=3.9\"\ndependencies = [\n  \"requests\u003e=2.28\",\n  \"pydantic\u003e=2.0\",\n  \"click\u003e=8.0\"\n]\n\n[project.optional-dependencies]\ndev = [\"pytest\", \"black\", \"mypy\"]\n\n[tool.black]\nline-length = 88\ntarget-version = [\"py39\", \"py310\", \"py311\"]\n`,\n    ini: `[general]\napp_name = MyApplication\nversion = 3.2.1\ndebug = false\nmax_retries = 5\n\n[database]\nhost = localhost\nport = 5432\nname = production_db\nuser = admin\npool_size = 10\n\n[logging]\nlevel = INFO\nfile = /var/log/myapp.log\nrotate = true\nmax_size_mb = 100\n\n[cache]\nbackend = redis\nhost = 127.0.0.1\nport = 6379\nttl = 3600\n`,\n    json: `{\n  \"server\": {\n    \"host\": \"0.0.0.0\",\n    \"port\": 8080,\n    \"debug\": false\n  },\n  \"database\": {\n    \"url\": \"postgres://localhost/mydb\",\n    \"pool_size\": 10,\n    \"timeout\": 30\n  },\n  \"features\": [\"auth\", \"api\", \"websocket\"],\n  \"limits\": {\n    \"max_upload_mb\": 50,\n    \"rate_limit_rps\": 100\n  }\n}`\n  };\n\n  window.taJaLoadPreset = function (name) {\n    if (name === 'json') {\n      document.getElementById('taja-output').value = PRESETS_JA.json;\n    } else {\n      document.getElementById('taja-input').value = PRESETS_JA[name] || '';\n    }\n    document.getElementById('taja-input').classList.remove('ta-error');\n    document.getElementById('taja-output').classList.remove('ta-error');\n    setStatusJa('taja-input-status', '', '');\n    setStatusJa('taja-output-status', '', '');\n  };\n\n  window.taJaClear = function (id) {\n    document.getElementById(id).value = '';\n    document.getElementById(id).classList.remove('ta-error');\n    var statusId = id === 'taja-input' ? 'taja-input-status' : 'taja-output-status';\n    setStatusJa(statusId, '', '');\n  };\n\n  window.taJaCopyText = function (id) {\n    var el = document.getElementById(id);\n    var val = el.value;\n    if (!val) return;\n    navigator.clipboard.writeText(val).then(function () {\n      el.classList.add('ta-copy-flash');\n      setTimeout(function () { el.classList.remove('ta-copy-flash'); }, 700);\n    }).catch(function () {\n      el.select();\n      document.execCommand('copy');\n    });\n  };\n\n  function setStatusJa(id, type, msg) {\n    var el = document.getElementById(id);\n    el.className = 'ta-status' + (type ? ' ' + type : '');\n    el.textContent = msg;\n  }\n\n  // ─── TOML Parser ─────────────────────────────────────────────────────────\n  function parseTOMLJa(src) {\n    var lines = src.split('\\n');\n    var root = {};\n    var current = root;\n    var currentPath = [];\n    var i = 0;\n\n    function parseValueJa(s) {\n      s = s.trim();\n      if (s.startsWith('\"\"\"') || s.startsWith(\"'''\")) {\n        var delim = s.slice(0, 3);\n        var end = s.indexOf(delim, 3);\n        if (end === -1) throw new Error('未終端の複数行文字列');\n        return s.slice(3, end);\n      }\n      if (s.startsWith('\"')) {\n        var m = s.match(/^\"((?:[^\"\\\\]|\\\\.)*)\"$/);\n        if (!m) throw new Error('文字列が不正: ' + s);\n        return m[1].replace(/\\\\n/g, '\\n').replace(/\\\\t/g, '\\t').replace(/\\\\r/g, '\\r').replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n      }\n      if (s.startsWith(\"'\")) {\n        var ml = s.match(/^'([^']*)'$/);\n        if (!ml) throw new Error('リテラル文字列が不正: ' + s);\n        return ml[1];\n      }\n      if (s.startsWith('[')) return parseArrayJa(s);\n      if (s.startsWith('{')) return parseInlineTableJa(s);\n      if (s === 'true') return true;\n      if (s === 'false') return false;\n      if (/^-?\\d{4}-\\d{2}-\\d{2}(T[\\d:+Z.-]+)?$/.test(s)) return s;\n      if (/^[+-]?(?:0x[0-9a-fA-F_]+|0o[0-7_]+|0b[01_]+)$/.test(s)) {\n        var clean = s.replace(/_/g, '');\n        return parseInt(clean, clean.startsWith('0x') ? 16 : clean.startsWith('0o') ? 8 : 2);\n      }\n      if (/^[+-]?(inf|nan)$/.test(s)) return s === 'inf' || s === '+inf' ? Infinity : s === '-inf' ? -Infinity : NaN;\n      if (/^[+-]?\\d[\\d_]*$/.test(s)) return parseInt(s.replace(/_/g, ''), 10);\n      if (/^[+-]?\\d[\\d_]*\\.[\\d_]*(e[+-]?\\d+)?$/i.test(s)) return parseFloat(s.replace(/_/g, ''));\n      if (/^[+-]?\\d[\\d_]*e[+-]?\\d+$/i.test(s)) return parseFloat(s.replace(/_/g, ''));\n      throw new Error('値を解析できません: ' + s);\n    }\n\n    function parseArrayJa(s) {\n      s = s.trim();\n      var depth = 0, inStr = false, strChar = '', result = [], buf = '';\n      for (var ci = 0; ci \u003c s.length; ci++) {\n        var ch = s[ci];\n        if (inStr) {\n          if (ch === strChar \u0026\u0026 s[ci-1] !== '\\\\') inStr = false;\n          buf += ch;\n        } else if (ch === '\"' || ch === \"'\") {\n          inStr = true; strChar = ch; buf += ch;\n        } else if (ch === '[' || ch === '{') {\n          depth++; buf += ch;\n        } else if (ch === ']' || ch === '}') {\n          depth--;\n          if (depth === 0) {\n            var t = buf.trim();\n            if (t) result.push(parseValueJa(t));\n            break;\n          }\n          buf += ch;\n        } else if (ch === ',' \u0026\u0026 depth === 1) {\n          var t2 = buf.trim();\n          if (t2) result.push(parseValueJa(t2));\n          buf = '';\n        } else if (ch === '#' \u0026\u0026 depth === 1) {\n          break;\n        } else {\n          if (depth \u003e= 1) buf += ch;\n        }\n      }\n      return result;\n    }\n\n    function parseInlineTableJa(s) {\n      s = s.trim();\n      var inner = s.slice(1, s.lastIndexOf('}'));\n      var obj = {};\n      var depth = 0, inStr = false, strChar2 = '', buf = '', parts = [];\n      for (var ci = 0; ci \u003c inner.length; ci++) {\n        var ch = inner[ci];\n        if (inStr) {\n          if (ch === strChar2 \u0026\u0026 inner[ci-1] !== '\\\\') inStr = false;\n          buf += ch;\n        } else if (ch === '\"' || ch === \"'\") {\n          inStr = true; strChar2 = ch; buf += ch;\n        } else if (ch === '{' || ch === '[') { depth++; buf += ch; }\n        else if (ch === '}' || ch === ']') { depth--; buf += ch; }\n        else if (ch === ',' \u0026\u0026 depth === 0) { parts.push(buf.trim()); buf = ''; }\n        else buf += ch;\n      }\n      if (buf.trim()) parts.push(buf.trim());\n      for (var pi = 0; pi \u003c parts.length; pi++) {\n        var part = parts[pi];\n        var eq = part.indexOf('=');\n        if (eq === -1) throw new Error('インラインテーブルのエントリが不正: ' + part);\n        var k = part.slice(0, eq).trim();\n        var v = part.slice(eq + 1).trim();\n        obj[unquoteKeyJa(k)] = parseValueJa(v);\n      }\n      return obj;\n    }\n\n    function unquoteKeyJa(k) {\n      if ((k.startsWith('\"') \u0026\u0026 k.endsWith('\"')) || (k.startsWith(\"'\") \u0026\u0026 k.endsWith(\"'\")))\n        return k.slice(1, -1);\n      return k;\n    }\n\n    function parseKeyJa(raw) {\n      var parts = [], buf = '', inStr = false, strChar3 = '';\n      for (var ci = 0; ci \u003c raw.length; ci++) {\n        var ch = raw[ci];\n        if (inStr) {\n          if (ch === strChar3) { inStr = false; parts.push(buf); buf = ''; }\n          else buf += ch;\n        } else if (ch === '\"' || ch === \"'\") {\n          inStr = true; strChar3 = ch;\n        } else if (ch === '.') {\n          if (buf.trim()) parts.push(buf.trim());\n          buf = '';\n        } else buf += ch;\n      }\n      if (buf.trim()) parts.push(buf.trim());\n      return parts.map(unquoteKeyJa);\n    }\n\n    while (i \u003c lines.length) {\n      var line = lines[i].replace(/\\s*#[^\"']*$/, '').trim();\n      i++;\n      if (!line) continue;\n\n      if (line.startsWith('[[')) {\n        var key = line.slice(2, line.indexOf(']]')).trim();\n        var keyParts = parseKeyJa(key);\n        var ref = root;\n        for (var ki = 0; ki \u003c keyParts.length - 1; ki++) {\n          var k = keyParts[ki];\n          if (!(k in ref)) ref[k] = {};\n          if (Array.isArray(ref[k])) ref = ref[k][ref[k].length - 1];\n          else ref = ref[k];\n        }\n        var last = keyParts[keyParts.length - 1];\n        if (!Array.isArray(ref[last])) ref[last] = [];\n        var newTable = {};\n        ref[last].push(newTable);\n        current = newTable;\n        currentPath = keyParts;\n        continue;\n      }\n\n      if (line.startsWith('[')) {\n        var key2 = line.slice(1, line.indexOf(']')).trim();\n        currentPath = parseKeyJa(key2);\n        current = root;\n        for (var ki2 = 0; ki2 \u003c currentPath.length; ki2++) {\n          var k2 = currentPath[ki2];\n          if (!(k2 in current)) current[k2] = {};\n          if (Array.isArray(current[k2])) current = current[k2][current[k2].length - 1];\n          else current = current[k2];\n        }\n        continue;\n      }\n\n      var eqIdx = line.indexOf('=');\n      if (eqIdx === -1) throw new Error('等号が見つかりません: ' + line);\n      var rawKey = line.slice(0, eqIdx).trim();\n      var rawVal = line.slice(eqIdx + 1).trim();\n\n      if (rawVal.startsWith('[') \u0026\u0026 !rawVal.includes(']')) {\n        while (i \u003c lines.length \u0026\u0026 !rawVal.includes(']')) {\n          rawVal += ' ' + lines[i].replace(/\\s*#.*$/, '').trim();\n          i++;\n        }\n      }\n\n      var keyPartsKV = parseKeyJa(rawKey);\n      var refKV = current;\n      for (var kki = 0; kki \u003c keyPartsKV.length - 1; kki++) {\n        var kk = keyPartsKV[kki];\n        if (!(kk in refKV)) refKV[kk] = {};\n        refKV = refKV[kk];\n      }\n      refKV[keyPartsKV[keyPartsKV.length - 1]] = parseValueJa(rawVal);\n    }\n    return root;\n  }\n\n  // ─── INI Parser ──────────────────────────────────────────────────────────\n  function parseINIJa(src) {\n    var lines = src.split('\\n');\n    var result = {};\n    var section = null;\n    for (var li = 0; li \u003c lines.length; li++) {\n      var line = lines[li].trim();\n      if (!line || line.startsWith(';') || line.startsWith('#')) continue;\n      if (line.startsWith('[') \u0026\u0026 line.endsWith(']')) {\n        section = line.slice(1, -1).trim();\n        if (!(section in result)) result[section] = {};\n        continue;\n      }\n      var eq = line.indexOf('=');\n      if (eq === -1) continue;\n      var key = line.slice(0, eq).trim();\n      var val = line.slice(eq + 1).trim();\n      var target = section ? result[section] : result;\n      target[key] = coerceINIJa(val);\n    }\n    return result;\n  }\n\n  function coerceINIJa(v) {\n    if (v === 'true' || v === 'yes' || v === 'on') return true;\n    if (v === 'false' || v === 'no' || v === 'off') return false;\n    if (/^-?\\d+$/.test(v)) return parseInt(v, 10);\n    if (/^-?\\d+\\.\\d+$/.test(v)) return parseFloat(v);\n    if ((v.startsWith('\"') \u0026\u0026 v.endsWith('\"')) || (v.startsWith(\"'\") \u0026\u0026 v.endsWith(\"'\")))\n      return v.slice(1, -1);\n    return v;\n  }\n\n  // ─── JSON → TOML ─────────────────────────────────────────────────────────\n  function buildTOMLJa(obj, path) {\n    var scalars = '', tables = '';\n    var entries = Object.entries(obj);\n    for (var ei = 0; ei \u003c entries.length; ei++) {\n      var k = entries[ei][0], v = entries[ei][1];\n      var key = /^[A-Za-z0-9_-]+$/.test(k) ? k : '\"' + k + '\"';\n      if (v === null || v === undefined) {\n        scalars += key + ' = \"\"\\n';\n      } else if (typeof v === 'boolean') {\n        scalars += key + ' = ' + v + '\\n';\n      } else if (typeof v === 'number') {\n        scalars += key + ' = ' + v + '\\n';\n      } else if (typeof v === 'string') {\n        scalars += key + ' = ' + JSON.stringify(v) + '\\n';\n      } else if (Array.isArray(v)) {\n        if (v.length === 0 || typeof v[0] !== 'object' || v[0] === null) {\n          scalars += key + ' = ' + tomlArrayJa(v) + '\\n';\n        } else {\n          for (var ai = 0; ai \u003c v.length; ai++) {\n            tables += '\\n[[' + path.concat(key).join('.') + ']]\\n';\n            tables += buildTOMLScalarsJa(v[ai], path.concat(key));\n          }\n        }\n      } else if (typeof v === 'object') {\n        tables += '\\n[' + path.concat(key).join('.') + ']\\n';\n        tables += buildTOMLJa(v, path.concat(key));\n      }\n    }\n    return scalars + tables;\n  }\n\n  function buildTOMLScalarsJa(obj, path) {\n    var out = '';\n    var entries = Object.entries(obj);\n    for (var ei = 0; ei \u003c entries.length; ei++) {\n      var k = entries[ei][0], v = entries[ei][1];\n      var key = /^[A-Za-z0-9_-]+$/.test(k) ? k : '\"' + k + '\"';\n      if (typeof v === 'object' \u0026\u0026 v !== null \u0026\u0026 !Array.isArray(v)) {\n        out += '\\n[' + path.concat(key).join('.') + ']\\n';\n        out += buildTOMLScalarsJa(v, path.concat(key));\n      } else if (Array.isArray(v) \u0026\u0026 v.length \u003e 0 \u0026\u0026 typeof v[0] === 'object') {\n        for (var ai = 0; ai \u003c v.length; ai++) {\n          out += '\\n[[' + path.concat(key).join('.') + ']]\\n';\n          out += buildTOMLScalarsJa(v[ai], path.concat(key));\n        }\n      } else {\n        if (v === null) out += key + ' = \"\"\\n';\n        else if (typeof v === 'boolean') out += key + ' = ' + v + '\\n';\n        else if (typeof v === 'number') out += key + ' = ' + v + '\\n';\n        else if (typeof v === 'string') out += key + ' = ' + JSON.stringify(v) + '\\n';\n        else out += key + ' = ' + tomlArrayJa(v) + '\\n';\n      }\n    }\n    return out;\n  }\n\n  function tomlArrayJa(arr) {\n    return '[' + arr.map(function(v) {\n      if (typeof v === 'string') return JSON.stringify(v);\n      if (typeof v === 'object' \u0026\u0026 v !== null) {\n        return '{' + Object.entries(v).map(function(e) {\n          return e[0] + ' = ' + (typeof e[1] === 'string' ? JSON.stringify(e[1]) : e[1]);\n        }).join(', ') + '}';\n      }\n      return String(v);\n    }).join(', ') + ']';\n  }\n\n  // ─── Convert ─────────────────────────────────────────────────────────────\n  window.taJaConvertToJson = function () {\n    var input = document.getElementById('taja-input');\n    var output = document.getElementById('taja-output');\n    var pretty = document.getElementById('taja-pretty').checked;\n    var minify = document.getElementById('taja-minify').checked;\n    var src = input.value.trim();\n    if (!src) {\n      setStatusJa('taja-input-status', 'err', '入力が空です。');\n      input.classList.add('ta-error');\n      return;\n    }\n    input.classList.remove('ta-error');\n    try {\n      var parsed;\n      var hasINIComments = src.split('\\n').some(function(l) { return l.trim().startsWith(';'); });\n      parsed = hasINIComments ? parseINIJa(src) : parseTOMLJa(src);\n      var indent = (!minify \u0026\u0026 pretty) ? 2 : undefined;\n      output.value = JSON.stringify(parsed, null, indent);\n      output.classList.remove('ta-error');\n      setStatusJa('taja-input-status', 'ok', '解析成功');\n      setStatusJa('taja-output-status', 'ok', 'JSON出力完了');\n    } catch (e) {\n      input.classList.add('ta-error');\n      output.value = '';\n      setStatusJa('taja-input-status', 'err', 'エラー: ' + e.message);\n      setStatusJa('taja-output-status', '', '');\n    }\n  };\n\n  window.taJaConvertToToml = function () {\n    var input = document.getElementById('taja-input');\n    var output = document.getElementById('taja-output');\n    var jsonSrc = output.value.trim();\n    if (!jsonSrc) {\n      setStatusJa('taja-output-status', 'err', 'JSON出力欄が空です。先にJSONを貼り付けてください。');\n      output.classList.add('ta-error');\n      return;\n    }\n    output.classList.remove('ta-error');\n    try {\n      var parsed = JSON.parse(jsonSrc);\n      if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\n        throw new Error('JSONのトップレベルはオブジェクト（{}）である必要があります。');\n      }\n      var toml = buildTOMLJa(parsed, []).replace(/^\\n/, '');\n      input.value = toml;\n      input.classList.remove('ta-error');\n      setStatusJa('taja-output-status', 'ok', 'TOMLへの変換完了');\n      setStatusJa('taja-input-status', 'ok', 'TOML出力完了');\n    } catch (e) {\n      output.classList.add('ta-error');\n      setStatusJa('taja-output-status', 'err', 'エラー: ' + e.message);\n    }\n  };\n\n  document.getElementById('taja-pretty').addEventListener('change', function () {\n    if (this.checked) document.getElementById('taja-minify').checked = false;\n  });\n  document.getElementById('taja-minify').addEventListener('change', function () {\n    if (this.checked) document.getElementById('taja-pretty').checked = false;\n  });\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eTOML/INI → JSON 変換\u003c/strong\u003e\n左のテキストエリアに TOML または INI ファイルの内容を貼り付け、「TOML/INI → JSON に変換」ボタンをクリックします。形式は自動判定されます（\u003ccode\u003e;\u003c/code\u003e コメントがある場合は INI として処理）。\u003c/p\u003e","title":"TOML/INI ↔ JSON 変換ツール"},{"content":"タブとスペースをワンクリックで相互変換。インデント幅を選んでリアルタイムに空白文字をプレビュー、結果をそのままコピーできます。\nHTMLを整形 → HTML整形ツール 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 変換モード： タブ → スペース スペース → タブ タブ幅： 2スペース 4スペース 8スペース 行末の空白を除去 改行コードを統一（CRLF → LF） 空白文字をプレビューに表示 変換する 入力と出力を入れ替え クリア ファイルを開く 入力 貼り付け 出力 （タブ → スペース） コピー コピーしました！ 行数：0 入力文字数：0 出力文字数：0 タブ使用行（入力）：0 スペースインデント行（入力）：0 行末空白あり行：0 使い方：\nタブ → スペース：各タブを選択したタブ幅（2/4/8）で次のタブストップ位置まで展開します。行中のタブも正確に処理されます。 スペース → タブ：行頭の連続スペースのみを対象に変換します。N個ごとに1つのタブに置き換え、端数スペースはそのまま残します。 空白文字プレビュー：スペースは ·、タブは → で表示されるため、変換結果を一目で確認できます。 行末空白除去：各行末のスペース・タブを削除します。 改行コード統一：WindowsのCRLFと旧MacのCRをUnix形式のLFに変換します。 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/tab-converter/","summary":"\u003cp\u003eタブとスペースをワンクリックで相互変換。インデント幅を選んでリアルタイムに空白文字をプレビュー、結果をそのままコピーできます。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eHTMLを整形 → \u003ca href=\"https://productivity-works.com/ja/tools/html-beautifier/\"\u003eHTML整形ツール\u003c/a\u003e\n\u003c/p\u003e\u003c/blockquote\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e\n  \u003cspan style=\"font-size:13px;color:#0c4a6e;\"\u003efreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。\u003c/span\u003e\n  \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-block;margin-top:4px;padding:9px 20px;background:#0284c7;color:#fff;border-radius:7px;font-size:13px;font-weight:700;text-decoration:none;\"\u003efreeeを無料で試す →\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv id=\"tc-app\"\u003e\n\u003cstyle\u003e\n#tc-app *,#tc-app *::before,#tc-app *::after{box-sizing:border-box;margin:0;padding:0}\n#tc-app{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;font-size:14px;color:#1e293b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:20px;max-width:900px;margin-top:20px}\n#tc-app h2{display:none}\n#tc-app .tc-row{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-bottom:14px}\n#tc-app .tc-label{font-weight:600;font-size:13px;color:#475569;white-space:nowrap}\n#tc-app .tc-btn-group{display:flex;gap:6px;flex-wrap:wrap}\n#tc-app .tc-btn{padding:7px 14px;border-radius:7px;border:1.5px solid #cbd5e1;background:#fff;color:#334155;font-size:13px;font-weight:500;cursor:pointer;transition:all .15s}\n#tc-app .tc-btn:hover{border-color:#6366f1;color:#6366f1}\n#tc-app .tc-btn.active{background:#6366f1;border-color:#6366f1;color:#fff}\n#tc-app .tc-btn.action{background:#6366f1;border-color:#6366f1;color:#fff;font-weight:600}\n#tc-app .tc-btn.action:hover{background:#4f46e5;border-color:#4f46e5}\n#tc-app .tc-btn.secondary{background:#f1f5f9;border-color:#cbd5e1;color:#475569}\n#tc-app .tc-btn.secondary:hover{border-color:#6366f1;color:#6366f1;background:#f1f5f9}\n#tc-app .tc-check-label{display:flex;align-items:center;gap:6px;font-size:13px;color:#475569;cursor:pointer;user-select:none}\n#tc-app .tc-check-label input{accent-color:#6366f1;width:15px;height:15px;cursor:pointer}\n#tc-app .tc-panels{display:grid;grid-template-columns:1fr 1fr;gap:14px}\n@media(max-width:640px){#tc-app .tc-panels{grid-template-columns:1fr}}\n#tc-app .tc-panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}\n#tc-app .tc-panel-title{font-weight:600;font-size:13px;color:#64748b}\n#tc-app .tc-panel-actions{display:flex;gap:6px}\n#tc-app textarea{width:100%;height:280px;padding:10px 12px;border:1.5px solid #e2e8f0;border-radius:8px;font-family:\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,monospace;font-size:13px;line-height:1.6;color:#1e293b;background:#fff;resize:vertical;outline:none;transition:border-color .15s}\n#tc-app textarea:focus{border-color:#6366f1}\n#tc-app .tc-preview{width:100%;height:280px;padding:10px 12px;border:1.5px solid #e2e8f0;border-radius:8px;font-family:\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,monospace;font-size:13px;line-height:1.6;background:#fff;overflow:auto;white-space:pre;word-break:normal}\n#tc-app .tc-preview .ws-space{color:#94a3b8}\n#tc-app .tc-preview .ws-tab{color:#a78bfa}\n#tc-app .tc-stats{display:flex;gap:14px;flex-wrap:wrap;padding:10px 14px;background:#f1f5f9;border-radius:8px;margin-top:12px}\n#tc-app .tc-stat{font-size:12px;color:#64748b}\n#tc-app .tc-stat strong{color:#1e293b;font-weight:600}\n#tc-app .tc-divider{border:none;border-top:1px solid #e2e8f0;margin:14px 0}\n#tc-app .tc-copy-note{font-size:12px;color:#10b981;font-weight:600;display:none}\n#tc-app .tc-upload-wrap{position:relative;display:inline-block}\n#tc-app .tc-upload-wrap input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%}\n#tc-app .tc-mode-desc{font-size:12px;color:#94a3b8;margin-left:4px}\n\u003c/style\u003e\n\u003c!-- 操作パネル --\u003e\n\u003cdiv class=\"tc-row\"\u003e\n  \u003cspan class=\"tc-label\"\u003e変換モード：\u003c/span\u003e\n  \u003cdiv class=\"tc-btn-group\"\u003e\n    \u003cbutton class=\"tc-btn active\" id=\"tc-mode-t2s\" onclick=\"tcSetMode('t2s')\"\u003eタブ → スペース\u003c/button\u003e\n    \u003cbutton class=\"tc-btn\" id=\"tc-mode-s2t\" onclick=\"tcSetMode('s2t')\"\u003eスペース → タブ\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"tc-row\"\u003e\n  \u003cspan class=\"tc-label\"\u003eタブ幅：\u003c/span\u003e\n  \u003cdiv class=\"tc-btn-group\"\u003e\n    \u003cbutton class=\"tc-btn active\" id=\"tc-w-2\" onclick=\"tcSetWidth(2)\"\u003e2スペース\u003c/button\u003e\n    \u003cbutton class=\"tc-btn\" id=\"tc-w-4\" onclick=\"tcSetWidth(4)\"\u003e4スペース\u003c/button\u003e\n    \u003cbutton class=\"tc-btn\" id=\"tc-w-8\" onclick=\"tcSetWidth(8)\"\u003e8スペース\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"tc-row\"\u003e\n  \u003clabel class=\"tc-check-label\"\u003e\u003cinput type=\"checkbox\" id=\"tc-trim\" onchange=\"tcProcess()\"\u003e 行末の空白を除去\u003c/label\u003e\n  \u003clabel class=\"tc-check-label\"\u003e\u003cinput type=\"checkbox\" id=\"tc-normalize\" onchange=\"tcProcess()\"\u003e 改行コードを統一（CRLF → LF）\u003c/label\u003e\n  \u003clabel class=\"tc-check-label\"\u003e\u003cinput type=\"checkbox\" id=\"tc-preview-ws\" onchange=\"tcProcess()\" checked\u003e 空白文字をプレビューに表示\u003c/label\u003e\n\u003c/div\u003e\n\u003cdiv class=\"tc-row\"\u003e\n  \u003cdiv class=\"tc-btn-group\"\u003e\n    \u003cbutton class=\"tc-btn action\" onclick=\"tcProcess()\"\u003e変換する\u003c/button\u003e\n    \u003cbutton class=\"tc-btn secondary\" onclick=\"tcSwap()\"\u003e入力と出力を入れ替え\u003c/button\u003e\n    \u003cbutton class=\"tc-btn secondary\" onclick=\"tcClear()\"\u003eクリア\u003c/button\u003e\n    \u003cdiv class=\"tc-upload-wrap\"\u003e\n      \u003cbutton class=\"tc-btn secondary\"\u003eファイルを開く\u003c/button\u003e\n      \u003cinput type=\"file\" accept=\"text/*\" onchange=\"tcUpload(event)\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003chr class=\"tc-divider\"\u003e\n\u003c!-- エディタパネル --\u003e\n\u003cdiv class=\"tc-panels\"\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"tc-panel-head\"\u003e\n      \u003cspan class=\"tc-panel-title\"\u003e入力\u003c/span\u003e\n      \u003cdiv class=\"tc-panel-actions\"\u003e\n        \u003cbutton class=\"tc-btn secondary\" style=\"padding:4px 10px;font-size:12px\" onclick=\"tcPaste()\"\u003e貼り付け\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003ctextarea id=\"tc-input\" placeholder=\"ここにコードを貼り付け、またはファイルをアップロードしてください...\" oninput=\"tcProcess()\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"tc-panel-head\"\u003e\n      \u003cspan class=\"tc-panel-title\"\u003e出力 \u003cspan class=\"tc-mode-desc\" id=\"tc-mode-label\"\u003e（タブ → スペース）\u003c/span\u003e\u003c/span\u003e\n      \u003cdiv class=\"tc-panel-actions\"\u003e\n        \u003cbutton class=\"tc-btn secondary\" style=\"padding:4px 10px;font-size:12px\" onclick=\"tcCopy()\"\u003eコピー\u003c/button\u003e\n        \u003cspan class=\"tc-copy-note\" id=\"tc-copy-note\"\u003eコピーしました！\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"tc-preview\" id=\"tc-output-preview\" aria-live=\"polite\"\u003e\u003c/div\u003e\n    \u003ctextarea id=\"tc-output-raw\" style=\"display:none\" readonly spellcheck=\"false\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 統計 --\u003e\n\u003cdiv class=\"tc-stats\" id=\"tc-stats\"\u003e\n  \u003cspan class=\"tc-stat\"\u003e行数：\u003cstrong id=\"tc-stat-lines\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n  \u003cspan class=\"tc-stat\"\u003e入力文字数：\u003cstrong id=\"tc-stat-in-chars\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n  \u003cspan class=\"tc-stat\"\u003e出力文字数：\u003cstrong id=\"tc-stat-out-chars\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n  \u003cspan class=\"tc-stat\"\u003eタブ使用行（入力）：\u003cstrong id=\"tc-stat-tabs\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n  \u003cspan class=\"tc-stat\"\u003eスペースインデント行（入力）：\u003cstrong id=\"tc-stat-spaces\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n  \u003cspan class=\"tc-stat\"\u003e行末空白あり行：\u003cstrong id=\"tc-stat-trailing\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var mode = 't2s';\n  var width = 2;\n\n  function setMode(m){\n    mode = m;\n    document.getElementById('tc-mode-t2s').classList.toggle('active', m==='t2s');\n    document.getElementById('tc-mode-s2t').classList.toggle('active', m==='s2t');\n    document.getElementById('tc-mode-label').textContent = m==='t2s' ? '（タブ → スペース）' : '（スペース → タブ）';\n    process();\n  }\n  function setWidth(w){\n    width = w;\n    [2,4,8].forEach(function(n){\n      document.getElementById('tc-w-'+n).classList.toggle('active', n===w);\n    });\n    process();\n  }\n\n  function process(){\n    var input = document.getElementById('tc-input').value;\n    var trim = document.getElementById('tc-trim').checked;\n    var norm = document.getElementById('tc-normalize').checked;\n    var showWs = document.getElementById('tc-preview-ws').checked;\n\n    var text = norm ? input.replace(/\\r\\n/g,'\\n').replace(/\\r/g,'\\n') : input;\n\n    var lines = text.split('\\n');\n    var outLines = lines.map(function(line){\n      var converted;\n      if(mode === 't2s'){\n        var result = '';\n        var col = 0;\n        for(var i=0;i\u003cline.length;i++){\n          var ch = line[i];\n          if(ch==='\\t'){\n            var spaces = width - (col % width);\n            result += ' '.repeat(spaces);\n            col += spaces;\n          } else {\n            result += ch;\n            col++;\n          }\n        }\n        converted = result;\n      } else {\n        var leadMatch = line.match(/^( +)/);\n        if(leadMatch){\n          var spCount = leadMatch[1].length;\n          var tabs = Math.floor(spCount / width);\n          var rem = spCount % width;\n          converted = '\\t'.repeat(tabs) + ' '.repeat(rem) + line.slice(spCount);\n        } else {\n          converted = line;\n        }\n      }\n      if(trim) converted = converted.replace(/[ \\t]+$/, '');\n      return converted;\n    });\n\n    var output = outLines.join('\\n');\n    document.getElementById('tc-output-raw').value = output;\n\n    var tabCount = 0;\n    var spaceIndentCount = 0;\n    var trailingCount = 0;\n    lines.forEach(function(l){\n      if(/\\t/.test(l)) tabCount++;\n      if(/^ +/.test(l)) spaceIndentCount++;\n      if(/[ \\t]+$/.test(l)) trailingCount++;\n    });\n    document.getElementById('tc-stat-lines').textContent = lines.length;\n    document.getElementById('tc-stat-in-chars').textContent = input.length;\n    document.getElementById('tc-stat-out-chars').textContent = output.length;\n    document.getElementById('tc-stat-tabs').textContent = tabCount;\n    document.getElementById('tc-stat-spaces').textContent = spaceIndentCount;\n    document.getElementById('tc-stat-trailing').textContent = trailingCount;\n\n    renderPreview(output, showWs);\n  }\n\n  function renderPreview(text, showWs){\n    var el = document.getElementById('tc-output-preview');\n    if(!showWs){\n      el.textContent = text;\n      return;\n    }\n    var escaped = text\n      .replace(/\u0026/g,'\u0026amp;')\n      .replace(/\u003c/g,'\u0026lt;')\n      .replace(/\u003e/g,'\u0026gt;');\n    var marked = escaped\n      .replace(/ /g,'\u003cspan class=\"ws-space\"\u003e\\u00b7\u003c/span\u003e')\n      .replace(/\\t/g,'\u003cspan class=\"ws-tab\"\u003e\\u2192   \u003c/span\u003e');\n    el.innerHTML = marked;\n  }\n\n  function swap(){\n    var raw = document.getElementById('tc-output-raw').value;\n    document.getElementById('tc-input').value = raw;\n    process();\n  }\n\n  function clear(){\n    document.getElementById('tc-input').value = '';\n    document.getElementById('tc-output-raw').value = '';\n    document.getElementById('tc-output-preview').textContent = '';\n    ['tc-stat-lines','tc-stat-in-chars','tc-stat-out-chars','tc-stat-tabs','tc-stat-spaces','tc-stat-trailing'].forEach(function(id){\n      document.getElementById(id).textContent = '0';\n    });\n  }\n\n  function copy(){\n    var val = document.getElementById('tc-output-raw').value;\n    if(!val) return;\n    if(navigator.clipboard \u0026\u0026 navigator.clipboard.writeText){\n      navigator.clipboard.writeText(val).then(flashCopy);\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = val;\n      ta.style.position='fixed';ta.style.opacity='0';\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      flashCopy();\n    }\n  }\n\n  function flashCopy(){\n    var note = document.getElementById('tc-copy-note');\n    note.style.display='inline';\n    setTimeout(function(){ note.style.display='none'; }, 1800);\n  }\n\n  function paste(){\n    if(navigator.clipboard \u0026\u0026 navigator.clipboard.readText){\n      navigator.clipboard.readText().then(function(t){\n        document.getElementById('tc-input').value = t;\n        process();\n      });\n    }\n  }\n\n  function upload(e){\n    var file = e.target.files[0];\n    if(!file) return;\n    var reader = new FileReader();\n    reader.onload = function(ev){\n      document.getElementById('tc-input').value = ev.target.result;\n      process();\n    };\n    reader.readAsText(file);\n    e.target.value = '';\n  }\n\n  window.tcSetMode = setMode;\n  window.tcSetWidth = setWidth;\n  window.tcProcess = process;\n  window.tcSwap = swap;\n  window.tcClear = clear;\n  window.tcCopy = copy;\n  window.tcPaste = paste;\n  window.tcUpload = upload;\n\n  process();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e使い方：\u003c/strong\u003e\u003c/p\u003e","title":"タブ⇔スペース変換ツール"},{"content":"画像をBase64データURIにブラウザ上で即座に変換。アップロード不要・サーバー送信なし・完全プライベート。\n🖼 ここに画像をドラッグ＆ドロップ、またはクリックしてファイルを選択\n対応形式：PNG・JPG・GIF・SVG・WebP \u0026nbsp;·\u0026nbsp; 推奨上限：2 MB MIMEタイプ 元のサイズ Base64サイズ サイズ増加率 Base64文字列（プレフィックスなし） コピー \u0026lt;div class=\u0026quot;i2b-output-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;i2b-output-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;i2b-output-label\u0026quot;\u0026gt;データURI\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;i2b-copy-btn\u0026quot; data-target=\u0026quot;i2b-out-uri\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;textarea id=\u0026quot;i2b-out-uri\u0026quot; class=\u0026quot;i2b-output-textarea\u0026quot; readonly spellcheck=\u0026quot;false\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;i2b-output-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;i2b-output-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;i2b-output-label\u0026quot;\u0026gt;CSS background-image\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;i2b-copy-btn\u0026quot; data-target=\u0026quot;i2b-out-css\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;textarea id=\u0026quot;i2b-out-css\u0026quot; class=\u0026quot;i2b-output-textarea\u0026quot; readonly spellcheck=\u0026quot;false\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;i2b-output-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;i2b-output-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;i2b-output-label\u0026quot;\u0026gt;HTML \u0026amp;lt;img\u0026amp;gt; タグ\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;i2b-copy-btn\u0026quot; data-target=\u0026quot;i2b-out-html\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;textarea id=\u0026quot;i2b-out-html\u0026quot; class=\u0026quot;i2b-output-textarea\u0026quot; readonly spellcheck=\u0026quot;false\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; 別の画像を変換する\n使い方 上のエリアに画像をドラッグ＆ドロップするか、クリックしてファイルを選択します。 ツールはブラウザの FileReader API でファイルをローカル処理します。画像はどのサーバーにも送信されません。 必要な形式の コピー ボタンをクリックして出力をコピーします。 出力形式の説明 形式 用途 Base64文字列 API・データベース・JSONペイロード データURI src 属性の値としてそのまま使用 CSS background-image スタイルシートにそのまま貼り付け HTML \u0026lt;img\u0026gt; タグ HTMLにそのまま貼り付け Base64エンコードが役立つ場面 画像をBase64データURIとして埋め込むと、外部リクエストなしで完結するHTMLファイルやメールテンプレートを作成できます。CSSの小さなアイコン、APIペイロード、オフライン対応Webアプリにも便利です。ただし、サイズが約 33%増加 し、初期解析がやや遅くなるため、埋め込む画像は小さめ（目安：50 KB以下）に留めることをおすすめします。\nプライバシー すべての変換処理は ブラウザ内 で完結します。画像ファイルがデバイスの外に出ることは一切ありません。\n関連ツール： Base64エンコーダー / デコーダー · 画像リサイザー · プレースホルダー画像ジェネレーター freee で経理・請求書をもっとスムーズに 中小企業・フリーランス向けのクラウド会計ソフト。無料トライアルから始められます。 freee を試してみる ","permalink":"https://productivity-works.com/ja/tools/image-to-base64/","summary":"\u003cp\u003e画像をBase64データURIにブラウザ上で即座に変換。アップロード不要・サーバー送信なし・完全プライベート。\u003c/p\u003e\n\u003cdiv id=\"i2b-app\"\u003e\n\u003cstyle\u003e\n  #i2b-app *,\n  #i2b-app *::before,\n  #i2b-app *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n  #i2b-app {\n    font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    color: #1a1a2e;\n    max-width: 820px;\n    margin: 0 auto;\n    padding: 0 0 40px;\n  }\n  #i2b-drop-zone {\n    border: 2.5px dashed #7c3aed;\n    border-radius: 14px;\n    padding: 48px 24px;\n    text-align: center;\n    cursor: pointer;\n    background: #f5f3ff;\n    transition: background 0.2s, border-color 0.2s;\n    position: relative;\n  }\n  #i2b-drop-zone.i2b-dragover {\n    background: #ede9fe;\n    border-color: #5b21b6;\n  }\n  #i2b-drop-zone-icon {\n    font-size: 48px;\n    line-height: 1;\n    margin-bottom: 12px;\n  }\n  #i2b-drop-zone p {\n    color: #6d28d9;\n    font-size: 1.05rem;\n    font-weight: 500;\n  }\n  #i2b-drop-zone small {\n    display: block;\n    margin-top: 6px;\n    color: #8b5cf6;\n    font-size: 0.82rem;\n  }\n  #i2b-file-input {\n    position: absolute;\n    inset: 0;\n    opacity: 0;\n    cursor: pointer;\n    width: 100%;\n    height: 100%;\n  }\n  #i2b-warning {\n    display: none;\n    margin-top: 14px;\n    padding: 10px 16px;\n    background: #fef3c7;\n    border: 1px solid #f59e0b;\n    border-radius: 8px;\n    color: #92400e;\n    font-size: 0.88rem;\n    font-weight: 500;\n  }\n  #i2b-results {\n    display: none;\n    margin-top: 28px;\n  }\n  #i2b-preview-row {\n    display: flex;\n    align-items: flex-start;\n    gap: 24px;\n    margin-bottom: 22px;\n    flex-wrap: wrap;\n  }\n  #i2b-preview-img {\n    max-width: 200px;\n    max-height: 200px;\n    border-radius: 10px;\n    border: 1px solid #e5e7eb;\n    object-fit: contain;\n    background: repeating-conic-gradient(#e5e7eb 0% 25%, #fff 0% 50%) 0 0 / 16px 16px;\n    flex-shrink: 0;\n  }\n  #i2b-meta {\n    flex: 1;\n    min-width: 180px;\n  }\n  #i2b-meta h3 {\n    font-size: 1rem;\n    font-weight: 700;\n    color: #1a1a2e;\n    margin-bottom: 10px;\n    word-break: break-all;\n  }\n  .i2b-meta-row {\n    display: flex;\n    justify-content: space-between;\n    padding: 5px 0;\n    border-bottom: 1px solid #f3f4f6;\n    font-size: 0.875rem;\n    color: #374151;\n  }\n  .i2b-meta-row:last-child { border-bottom: none; }\n  .i2b-meta-label { color: #6b7280; font-weight: 500; }\n  .i2b-meta-value { font-weight: 600; color: #1a1a2e; }\n  .i2b-size-bigger { color: #dc2626; }\n  #i2b-outputs { display: flex; flex-direction: column; gap: 16px; }\n  .i2b-output-block {\n    background: #f9fafb;\n    border: 1px solid #e5e7eb;\n    border-radius: 10px;\n    overflow: hidden;\n  }\n  .i2b-output-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 10px 16px;\n    background: #f3f4f6;\n    border-bottom: 1px solid #e5e7eb;\n  }\n  .i2b-output-label {\n    font-size: 0.8rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    color: #6b7280;\n  }\n  .i2b-copy-btn {\n    display: inline-flex;\n    align-items: center;\n    gap: 5px;\n    padding: 4px 14px;\n    background: #7c3aed;\n    color: #fff;\n    border: none;\n    border-radius: 6px;\n    font-size: 0.8rem;\n    font-weight: 600;\n    cursor: pointer;\n    transition: background 0.15s;\n    white-space: nowrap;\n    font-family: inherit;\n  }\n  .i2b-copy-btn:hover { background: #6d28d9; }\n  .i2b-copy-btn.i2b-copied { background: #16a34a; }\n  .i2b-output-textarea {\n    width: 100%;\n    min-height: 80px;\n    max-height: 160px;\n    padding: 12px 16px;\n    font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n    font-size: 0.78rem;\n    line-height: 1.5;\n    color: #374151;\n    background: transparent;\n    border: none;\n    resize: vertical;\n    outline: none;\n    word-break: break-all;\n    overflow-y: auto;\n  }\n  #i2b-reset-btn {\n    margin-top: 20px;\n    padding: 10px 24px;\n    background: transparent;\n    border: 2px solid #7c3aed;\n    color: #7c3aed;\n    border-radius: 8px;\n    font-size: 0.9rem;\n    font-weight: 600;\n    cursor: pointer;\n    transition: background 0.15s, color 0.15s;\n    font-family: inherit;\n  }\n  #i2b-reset-btn:hover { background: #7c3aed; color: #fff; }\n  #i2b-freee-cta {\n    margin-top: 36px;\n    padding: 20px 24px;\n    background: linear-gradient(135deg, #e0f2fe 0%, #f0fdf4 100%);\n    border: 1px solid #bae6fd;\n    border-radius: 12px;\n    display: flex;\n    align-items: center;\n    gap: 16px;\n    flex-wrap: wrap;\n  }\n  #i2b-freee-cta-text { flex: 1; min-width: 200px; }\n  #i2b-freee-cta-text strong {\n    display: block;\n    font-size: 0.95rem;\n    color: #0c4a6e;\n    margin-bottom: 4px;\n  }\n  #i2b-freee-cta-text span {\n    font-size: 0.83rem;\n    color: #0369a1;\n    line-height: 1.5;\n  }\n  #i2b-freee-cta-btn {\n    display: inline-block;\n    padding: 9px 20px;\n    background: #0ea5e9;\n    color: #fff;\n    border-radius: 8px;\n    font-size: 0.875rem;\n    font-weight: 700;\n    text-decoration: none;\n    white-space: nowrap;\n    transition: background 0.15s;\n  }\n  #i2b-freee-cta-btn:hover { background: #0284c7; }\n  @media (max-width: 540px) {\n    #i2b-preview-row { flex-direction: column; }\n    #i2b-preview-img { max-width: 100%; }\n    .i2b-output-header { flex-direction: column; align-items: flex-start; gap: 8px; }\n    #i2b-freee-cta { flex-direction: column; }\n  }\n\u003c/style\u003e\n\u003cdiv id=\"i2b-drop-zone\"\u003e\n  \u003cinput type=\"file\" id=\"i2b-file-input\" accept=\"image/png,image/jpeg,image/gif,image/svg+xml,image/webp\"\u003e\n  \u003cdiv id=\"i2b-drop-zone-icon\"\u003e🖼\u003c/div\u003e\n  \u003cp\u003eここに画像をドラッグ＆ドロップ、またはクリックしてファイルを選択\u003c/p\u003e","title":"画像→Base64変換ツール — データURIコンバーター"},{"content":"ケルビン（K）の色温度をリアルタイムで RGB・HEX・HSL に変換。スライダーを動かすと暖色系から寒色系まで光の色を即座にプレビューできます。ワンクリックでカラー値をコピー可能。\n5500K 昼光 1000K 暖色 中間 寒色 12000K 暖色（赤・オレンジ系） 中間白色 寒色（青系） HEX #fff4e0 コピー RGB rgb(255, 244, 224) コピー HSL hsl(38, 100%, 94%) コピー すべてコピー 代表的な光源プリセット ろうそく（1900K） 白熱球（2700K） ハロゲン（3200K） 蛍光灯（4000K） 昼光（5500K） 曇天（6500K） 日陰（7500K） 青空（10000K） 暖色光と寒色光について 暖色光（1000〜3500K）は赤みがかったオレンジ色の光で、ろうそくや白熱電球が代表例です。リラックスできる雰囲気を作り出し、寝室やレストランでよく使われます。\n中間白色光（3500〜5000K）は白っぽく見え、朝の自然光に近い色温度です。明るさと快適さのバランスが良く、オフィスやキッチンに向いています。\n寒色光（5000〜12000K）は青白い光で、曇り空や日陰の光に相当します。カメラのホワイトバランス設定でよく使われ、一般的なPCモニターは約6500Kに設定されています。\nケルビン値が高いほど「冷たく」見える青みがかった光になります。これは直感に反しますが、加熱された物体が放つ色の物理的な性質によるものです。\n事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; 関連ツール\nカラーネーム検索 → カラーネームファインダー 色を混ぜる → カラーミキサー 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/color-temperature/","summary":"\u003cp\u003e\u003cstrong\u003eケルビン（K）の色温度\u003c/strong\u003eをリアルタイムで \u003cstrong\u003eRGB・HEX・HSL\u003c/strong\u003e に変換。スライダーを動かすと暖色系から寒色系まで光の色を即座にプレビューできます。ワンクリックでカラー値をコピー可能。\u003c/p\u003e\n\u003cdiv id=\"ct-app\"\u003e\n\u003cstyle\u003e\n#ct-app *, #ct-app *::before, #ct-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#ct-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  font-size: 15px;\n  color: #1a1a2e;\n  background: #f7f8fc;\n  border-radius: 12px;\n  padding: 24px;\n  max-width: 740px;\n  margin: 0 auto;\n}\n#ct-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin-bottom: 14px;\n  color: #12122a;\n}\n#ct-app .ct-preview-block {\n  display: flex;\n  gap: 18px;\n  align-items: stretch;\n  margin-bottom: 22px;\n  flex-wrap: wrap;\n}\n#ct-app .ct-swatch {\n  width: 130px;\n  min-height: 130px;\n  border-radius: 12px;\n  border: 2px solid rgba(0,0,0,0.10);\n  flex-shrink: 0;\n  transition: background 0.15s;\n}\n#ct-app .ct-values {\n  flex: 1;\n  min-width: 200px;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  justify-content: center;\n}\n#ct-app .ct-value-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n#ct-app .ct-label {\n  font-size: 12px;\n  font-weight: 700;\n  color: #6b7280;\n  width: 34px;\n  flex-shrink: 0;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#ct-app .ct-value-box {\n  flex: 1;\n  background: #fff;\n  border: 1.5px solid #e5e7eb;\n  border-radius: 7px;\n  padding: 7px 10px;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 14px;\n  color: #111827;\n  min-width: 0;\n}\n#ct-app .ct-copy-btn {\n  background: #6366f1;\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  padding: 7px 13px;\n  font-size: 12px;\n  font-weight: 700;\n  cursor: pointer;\n  white-space: nowrap;\n  transition: background 0.15s, transform 0.1s;\n}\n#ct-app .ct-copy-btn:hover { background: #4f46e5; }\n#ct-app .ct-copy-btn:active { transform: scale(0.96); }\n#ct-app .ct-copy-btn.copied { background: #22c55e; }\n#ct-app .ct-kelvin-display {\n  text-align: center;\n  font-size: 2rem;\n  font-weight: 800;\n  color: #12122a;\n  margin-bottom: 6px;\n  letter-spacing: -0.02em;\n}\n#ct-app .ct-kelvin-display span {\n  font-size: 1rem;\n  font-weight: 500;\n  color: #6b7280;\n  margin-left: 4px;\n}\n#ct-app .ct-preset-name {\n  text-align: center;\n  font-size: 13px;\n  color: #6366f1;\n  font-weight: 600;\n  margin-bottom: 14px;\n  min-height: 20px;\n}\n#ct-app .ct-slider-wrap {\n  margin-bottom: 6px;\n  position: relative;\n}\n#ct-app .ct-slider {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 100%;\n  height: 18px;\n  border-radius: 9px;\n  outline: none;\n  cursor: pointer;\n  background: linear-gradient(\n    to right,\n    #ff4500 0%,\n    #ff6a00 5%,\n    #ff8c00 10%,\n    #ffa500 15%,\n    #ffbf00 20%,\n    #ffd27f 28%,\n    #ffecb3 35%,\n    #fff4e0 42%,\n    #fff9f0 48%,\n    #ffffff 53%,\n    #f0f4ff 58%,\n    #d6e4ff 65%,\n    #bad4f5 72%,\n    #9ec5fa 80%,\n    #74b9ff 90%,\n    #4fc3f7 100%\n  );\n  border: 1.5px solid rgba(0,0,0,0.10);\n}\n#ct-app .ct-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 26px;\n  height: 26px;\n  border-radius: 50%;\n  background: #fff;\n  border: 3px solid #6366f1;\n  box-shadow: 0 2px 8px rgba(99,102,241,0.3);\n  cursor: pointer;\n  transition: border-color 0.15s;\n}\n#ct-app .ct-slider::-moz-range-thumb {\n  width: 26px;\n  height: 26px;\n  border-radius: 50%;\n  background: #fff;\n  border: 3px solid #6366f1;\n  box-shadow: 0 2px 8px rgba(99,102,241,0.3);\n  cursor: pointer;\n}\n#ct-app .ct-scale-labels {\n  display: flex;\n  justify-content: space-between;\n  font-size: 11px;\n  color: #9ca3af;\n  margin-top: 4px;\n  margin-bottom: 20px;\n}\n#ct-app .ct-gradient-bar {\n  width: 100%;\n  height: 28px;\n  border-radius: 8px;\n  margin-bottom: 8px;\n  background: linear-gradient(\n    to right,\n    #ff4500 0%,\n    #ff6a00 5%,\n    #ff8c00 10%,\n    #ffa500 15%,\n    #ffbf00 20%,\n    #ffd27f 28%,\n    #ffecb3 35%,\n    #fff4e0 42%,\n    #fff9f0 48%,\n    #ffffff 53%,\n    #f0f4ff 58%,\n    #d6e4ff 65%,\n    #bad4f5 72%,\n    #9ec5fa 80%,\n    #74b9ff 90%,\n    #4fc3f7 100%\n  );\n  border: 1.5px solid rgba(0,0,0,0.08);\n}\n#ct-app .ct-gradient-label {\n  display: flex;\n  justify-content: space-between;\n  font-size: 11px;\n  color: #9ca3af;\n  margin-bottom: 22px;\n}\n#ct-app .ct-presets {\n  margin-bottom: 22px;\n}\n#ct-app .ct-presets h2 {\n  margin-bottom: 10px;\n}\n#ct-app .ct-preset-grid {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n#ct-app .ct-preset-btn {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 7px 12px;\n  border-radius: 8px;\n  border: 1.5px solid #e5e7eb;\n  background: #fff;\n  cursor: pointer;\n  font-size: 13px;\n  color: #374151;\n  transition: border-color 0.15s, box-shadow 0.15s;\n  font-weight: 500;\n}\n#ct-app .ct-preset-btn:hover {\n  border-color: #6366f1;\n  box-shadow: 0 0 0 2px rgba(99,102,241,0.12);\n}\n#ct-app .ct-preset-btn.active {\n  border-color: #6366f1;\n  background: #eef2ff;\n  color: #4338ca;\n}\n#ct-app .ct-preset-dot {\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  border: 1.5px solid rgba(0,0,0,0.12);\n  flex-shrink: 0;\n}\n#ct-app .ct-info-section {\n  background: #fff;\n  border-radius: 10px;\n  border: 1.5px solid #e5e7eb;\n  padding: 18px 20px;\n  margin-top: 4px;\n}\n#ct-app .ct-info-section h2 {\n  font-size: 1rem;\n  margin-bottom: 10px;\n}\n#ct-app .ct-info-section p {\n  font-size: 14px;\n  color: #374151;\n  line-height: 1.7;\n  margin-bottom: 8px;\n}\n#ct-app .ct-info-section p:last-child { margin-bottom: 0; }\n#ct-app .ct-copy-all-btn {\n  display: inline-block;\n  margin-top: 4px;\n  padding: 9px 20px;\n  background: #6366f1;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n}\n#ct-app .ct-copy-all-btn:hover { background: #4f46e5; }\n#ct-app .ct-copy-all-btn:active { transform: scale(0.97); }\n#ct-app .ct-copy-all-btn.copied { background: #22c55e; }\n@media (max-width: 480px) {\n  #ct-app { padding: 16px; }\n  #ct-app .ct-swatch { width: 100%; min-height: 80px; }\n  #ct-app .ct-kelvin-display { font-size: 1.6rem; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"ct-kelvin-display\" id=\"ct-kelvin-num\"\u003e5500\u003cspan\u003eK\u003c/span\u003e\u003c/div\u003e\n\u003cdiv class=\"ct-preset-name\" id=\"ct-preset-name\"\u003e昼光\u003c/div\u003e\n\u003cdiv class=\"ct-slider-wrap\"\u003e\n  \u003cinput type=\"range\" class=\"ct-slider\" id=\"ct-slider\" min=\"1000\" max=\"12000\" step=\"100\" value=\"5500\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ct-scale-labels\"\u003e\n  \u003cspan\u003e1000K\u003c/span\u003e\n  \u003cspan\u003e暖色\u003c/span\u003e\n  \u003cspan\u003e中間\u003c/span\u003e\n  \u003cspan\u003e寒色\u003c/span\u003e\n  \u003cspan\u003e12000K\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ct-gradient-bar\"\u003e\u003c/div\u003e\n\u003cdiv class=\"ct-gradient-label\"\u003e\n  \u003cspan\u003e暖色（赤・オレンジ系）\u003c/span\u003e\n  \u003cspan\u003e中間白色\u003c/span\u003e\n  \u003cspan\u003e寒色（青系）\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ct-preview-block\"\u003e\n  \u003cdiv class=\"ct-swatch\" id=\"ct-swatch\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"ct-values\"\u003e\n    \u003cdiv class=\"ct-value-row\"\u003e\n      \u003cspan class=\"ct-label\"\u003eHEX\u003c/span\u003e\n      \u003cspan class=\"ct-value-box\" id=\"ct-hex\"\u003e#fff4e0\u003c/span\u003e\n      \u003cbutton class=\"ct-copy-btn\" onclick=\"ctCopy('ct-hex',this)\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ct-value-row\"\u003e\n      \u003cspan class=\"ct-label\"\u003eRGB\u003c/span\u003e\n      \u003cspan class=\"ct-value-box\" id=\"ct-rgb\"\u003ergb(255, 244, 224)\u003c/span\u003e\n      \u003cbutton class=\"ct-copy-btn\" onclick=\"ctCopy('ct-rgb',this)\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ct-value-row\"\u003e\n      \u003cspan class=\"ct-label\"\u003eHSL\u003c/span\u003e\n      \u003cspan class=\"ct-value-box\" id=\"ct-hsl\"\u003ehsl(38, 100%, 94%)\u003c/span\u003e\n      \u003cbutton class=\"ct-copy-btn\" onclick=\"ctCopy('ct-hsl',this)\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"margin-top:4px;\"\u003e\n      \u003cbutton class=\"ct-copy-all-btn\" id=\"ct-copy-all-btn\" onclick=\"ctCopyAll()\"\u003eすべてコピー\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ct-presets\"\u003e\n  \u003ch2\u003e代表的な光源プリセット\u003c/h2\u003e\n  \u003cdiv class=\"ct-preset-grid\" id=\"ct-preset-grid\"\u003e\n    \u003cbutton class=\"ct-preset-btn\" data-k=\"1900\" onclick=\"ctSetPreset(1900,this)\"\u003e\n      \u003cspan class=\"ct-preset-dot\" id=\"ct-dot-1900\"\u003e\u003c/span\u003eろうそく（1900K）\n    \u003c/button\u003e\n    \u003cbutton class=\"ct-preset-btn\" data-k=\"2700\" onclick=\"ctSetPreset(2700,this)\"\u003e\n      \u003cspan class=\"ct-preset-dot\" id=\"ct-dot-2700\"\u003e\u003c/span\u003e白熱球（2700K）\n    \u003c/button\u003e\n    \u003cbutton class=\"ct-preset-btn\" data-k=\"3200\" onclick=\"ctSetPreset(3200,this)\"\u003e\n      \u003cspan class=\"ct-preset-dot\" id=\"ct-dot-3200\"\u003e\u003c/span\u003eハロゲン（3200K）\n    \u003c/button\u003e\n    \u003cbutton class=\"ct-preset-btn\" data-k=\"4000\" onclick=\"ctSetPreset(4000,this)\"\u003e\n      \u003cspan class=\"ct-preset-dot\" id=\"ct-dot-4000\"\u003e\u003c/span\u003e蛍光灯（4000K）\n    \u003c/button\u003e\n    \u003cbutton class=\"ct-preset-btn\" data-k=\"5500\" onclick=\"ctSetPreset(5500,this)\"\u003e\n      \u003cspan class=\"ct-preset-dot\" id=\"ct-dot-5500\"\u003e\u003c/span\u003e昼光（5500K）\n    \u003c/button\u003e\n    \u003cbutton class=\"ct-preset-btn\" data-k=\"6500\" onclick=\"ctSetPreset(6500,this)\"\u003e\n      \u003cspan class=\"ct-preset-dot\" id=\"ct-dot-6500\"\u003e\u003c/span\u003e曇天（6500K）\n    \u003c/button\u003e\n    \u003cbutton class=\"ct-preset-btn\" data-k=\"7500\" onclick=\"ctSetPreset(7500,this)\"\u003e\n      \u003cspan class=\"ct-preset-dot\" id=\"ct-dot-7500\"\u003e\u003c/span\u003e日陰（7500K）\n    \u003c/button\u003e\n    \u003cbutton class=\"ct-preset-btn\" data-k=\"10000\" onclick=\"ctSetPreset(10000,this)\"\u003e\n      \u003cspan class=\"ct-preset-dot\" id=\"ct-dot-10000\"\u003e\u003c/span\u003e青空（10000K）\n    \u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ct-info-section\"\u003e\n  \u003ch2\u003e暖色光と寒色光について\u003c/h2\u003e\n  \u003cp\u003e\u003cstrong\u003e暖色光（1000〜3500K）\u003c/strong\u003eは赤みがかったオレンジ色の光で、ろうそくや白熱電球が代表例です。リラックスできる雰囲気を作り出し、寝室やレストランでよく使われます。\u003c/p\u003e","title":"色温度変換ツール"},{"content":" \u0026#9654; 整形 \u0026#9646;\u0026#9646; 圧縮 \u0026#10003; 検証 \u0026#123;\u0026#125; JSON変換 スペース2 スペース4 タブ \u0026#128196; サンプル \u0026#215; クリア \u0026#128203; 入力をコピー XMLを貼り付けて「整形」または「検証」をクリックしてください。 入力XML 出力 コピーしました！ 整形済み ツリー表示 JSON \u0026#128203; 出力をコピー 開発チームの会計管理もかんたんに\nfreee会計なら、SaaS利用料・サーバー費用の経費管理もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール\nJSONを整形 \u0026rarr; JSON整形ツール \u0026nbsp;|\u0026nbsp; CSV \u0026harr; JSON変換 \u0026rarr; CSV⇔JSON変換ツール \u0026nbsp;|\u0026nbsp; SQLを整形 \u0026rarr; SQLフォーマッター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/xml-formatter/","summary":"\u003cdiv id=\"xf-app\"\u003e\n\u003cstyle\u003e\n#xf-app *,#xf-app *::before,#xf-app *::after{box-sizing:border-box;margin:0;padding:0}\n#xf-app{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Hiragino Sans\",\"Yu Gothic UI\",sans-serif;font-size:15px;color:#1e293b;line-height:1.6}\n#xf-app .xf-toolbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px;align-items:center}\n#xf-app .xf-btn{display:inline-flex;align-items:center;gap:5px;padding:7px 14px;border:none;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s,transform .1s;white-space:nowrap}\n#xf-app .xf-btn:active{transform:scale(.97)}\n#xf-app .xf-btn-primary{background:#2563eb;color:#fff}\n#xf-app .xf-btn-primary:hover{background:#1d4ed8}\n#xf-app .xf-btn-secondary{background:#f1f5f9;color:#334155;border:1px solid #cbd5e1}\n#xf-app .xf-btn-secondary:hover{background:#e2e8f0}\n#xf-app .xf-btn-success{background:#16a34a;color:#fff}\n#xf-app .xf-btn-success:hover{background:#15803d}\n#xf-app .xf-btn-warning{background:#d97706;color:#fff}\n#xf-app .xf-btn-warning:hover{background:#b45309}\n#xf-app .xf-btn-info{background:#0891b2;color:#fff}\n#xf-app .xf-btn-info:hover{background:#0e7490}\n#xf-app .xf-btn-danger{background:#dc2626;color:#fff}\n#xf-app .xf-btn-danger:hover{background:#b91c1c}\n#xf-app .xf-select{padding:7px 10px;border:1px solid #cbd5e1;border-radius:6px;font-size:13px;background:#fff;color:#334155;cursor:pointer}\n#xf-app .xf-panels{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}\n@media(max-width:700px){#xf-app .xf-panels{grid-template-columns:1fr}}\n#xf-app .xf-panel{display:flex;flex-direction:column;gap:6px}\n#xf-app .xf-panel-label{font-size:12px;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.05em}\n#xf-app .xf-editor-wrap{position:relative;border:1.5px solid #cbd5e1;border-radius:8px;overflow:hidden;background:#fafafa}\n#xf-app .xf-editor-wrap.xf-error-border{border-color:#ef4444}\n#xf-app .xf-editor-wrap.xf-ok-border{border-color:#22c55e}\n#xf-app .xf-with-lines{display:flex}\n#xf-app .xf-line-nums{width:36px;min-width:36px;background:#f1f5f9;color:#94a3b8;font-family:\"JetBrains Mono\",\"Fira Code\",\"Cascadia Code\",monospace;font-size:12px;line-height:1.6;padding:10px 0;text-align:right;padding-right:6px;user-select:none;overflow:hidden;border-right:1px solid #e2e8f0}\n#xf-app .xf-line-nums span{display:block}\n#xf-app .xf-textarea{width:100%;min-height:280px;padding:10px 12px;border:none;background:transparent;font-family:\"JetBrains Mono\",\"Fira Code\",\"Cascadia Code\",monospace;font-size:13px;line-height:1.6;color:#1e293b;resize:vertical;outline:none}\n#xf-app .xf-output-pre{width:100%;min-height:280px;padding:10px 12px;font-family:\"JetBrains Mono\",\"Fira Code\",\"Cascadia Code\",monospace;font-size:13px;line-height:1.6;overflow:auto;white-space:pre;background:transparent}\n#xf-app .xf-status{display:flex;align-items:center;gap:8px;padding:9px 14px;border-radius:8px;font-size:13px;font-weight:600;min-height:40px}\n#xf-app .xf-status.xf-idle{background:#f8fafc;color:#64748b;border:1px solid #e2e8f0}\n#xf-app .xf-status.xf-ok{background:#f0fdf4;color:#16a34a;border:1px solid #bbf7d0}\n#xf-app .xf-status.xf-err{background:#fef2f2;color:#dc2626;border:1px solid #fecaca}\n#xf-app .xf-status-dot{width:8px;height:8px;border-radius:50%;background:currentColor;flex-shrink:0}\n#xf-app .xf-tab-bar{display:flex;gap:4px;margin-bottom:8px}\n#xf-app .xf-tab{padding:6px 14px;border-radius:6px 6px 0 0;border:1.5px solid #e2e8f0;border-bottom:none;font-size:13px;font-weight:600;cursor:pointer;background:#f8fafc;color:#64748b;transition:background .15s}\n#xf-app .xf-tab.xf-tab-active{background:#fff;color:#2563eb;border-color:#2563eb;border-bottom:2px solid #fff}\n#xf-app .xf-tab-content{display:none}\n#xf-app .xf-tab-content.xf-tab-visible{display:block}\n#xf-app .xf-tree{padding:10px 12px;min-height:200px;font-family:\"JetBrains Mono\",\"Fira Code\",monospace;font-size:12.5px;line-height:1.7;overflow:auto}\n#xf-app .xf-tree-node{cursor:pointer;user-select:none}\n#xf-app .xf-tree-node:hover{background:#f0f9ff;border-radius:3px}\n#xf-app .xf-tree-toggle{display:inline-block;width:14px;text-align:center;color:#94a3b8;font-size:10px}\n#xf-app .xf-tree-children{margin-left:18px}\n#xf-app .xf-tree-tag{color:#2563eb;font-weight:600}\n#xf-app .xf-tree-attr{color:#7c3aed}\n#xf-app .xf-tree-text{color:#374151}\n#xf-app .xf-tree-comment{color:#6b7280;font-style:italic}\n#xf-app .xf-hl-tag{color:#1d4ed8;font-weight:600}\n#xf-app .xf-hl-attr{color:#7c3aed}\n#xf-app .xf-hl-val{color:#15803d}\n#xf-app .xf-hl-cdata{color:#b45309}\n#xf-app .xf-hl-comment{color:#6b7280;font-style:italic}\n#xf-app .xf-hl-pi{color:#0e7490}\n#xf-app .xf-hl-text{color:#374151}\n#xf-app .xf-copy-tip{font-size:12px;color:#16a34a;font-weight:600;opacity:0;transition:opacity .3s}\n#xf-app .xf-copy-tip.xf-show{opacity:1}\n#xf-app .xf-related{margin-top:20px;padding:14px 16px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;font-size:13px}\n#xf-app .xf-related p{margin:0 0 6px;font-weight:600;color:#475569}\n#xf-app .xf-related a{color:#2563eb;text-decoration:none;margin-right:12px}\n#xf-app .xf-related a:hover{text-decoration:underline}\n#xf-app .xf-freee-cta{margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px}\n\u003c/style\u003e\n\u003cdiv class=\"xf-toolbar\"\u003e\n  \u003cbutton class=\"xf-btn xf-btn-primary\" id=\"xf-btn-format\"\u003e\u0026#9654; 整形\u003c/button\u003e\n  \u003cbutton class=\"xf-btn xf-btn-secondary\" id=\"xf-btn-minify\"\u003e\u0026#9646;\u0026#9646; 圧縮\u003c/button\u003e\n  \u003cbutton class=\"xf-btn xf-btn-success\" id=\"xf-btn-validate\"\u003e\u0026#10003; 検証\u003c/button\u003e\n  \u003cbutton class=\"xf-btn xf-btn-info\" id=\"xf-btn-to-json\"\u003e\u0026#123;\u0026#125; JSON変換\u003c/button\u003e\n  \u003cselect class=\"xf-select\" id=\"xf-indent\"\u003e\n    \u003coption value=\"2\"\u003eスペース2\u003c/option\u003e\n    \u003coption value=\"4\" selected\u003eスペース4\u003c/option\u003e\n    \u003coption value=\"tab\"\u003eタブ\u003c/option\u003e\n  \u003c/select\u003e\n  \u003cbutton class=\"xf-btn xf-btn-secondary\" id=\"xf-btn-sample\"\u003e\u0026#128196; サンプル\u003c/button\u003e\n  \u003cbutton class=\"xf-btn xf-btn-danger\" id=\"xf-btn-clear\"\u003e\u0026#215; クリア\u003c/button\u003e\n  \u003cbutton class=\"xf-btn xf-btn-secondary\" id=\"xf-btn-copy-in\"\u003e\u0026#128203; 入力をコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"xf-status\" class=\"xf-status xf-idle\"\u003e\u003cspan class=\"xf-status-dot\"\u003e\u003c/span\u003e\u003cspan id=\"xf-status-msg\"\u003eXMLを貼り付けて「整形」または「検証」をクリックしてください。\u003c/span\u003e\u003c/div\u003e\n\u003cdiv class=\"xf-panels\" style=\"margin-top:10px\"\u003e\n  \u003cdiv class=\"xf-panel\"\u003e\n    \u003cdiv class=\"xf-panel-label\"\u003e入力XML\u003c/div\u003e\n    \u003cdiv class=\"xf-editor-wrap\" id=\"xf-in-wrap\"\u003e\n      \u003cdiv class=\"xf-with-lines\"\u003e\n        \u003cdiv class=\"xf-line-nums\" id=\"xf-line-nums\"\u003e\u003c/div\u003e\n        \u003ctextarea class=\"xf-textarea\" id=\"xf-input\" spellcheck=\"false\" placeholder=\"XMLをここに貼り付けてください...\"\u003e\u003c/textarea\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"xf-panel\"\u003e\n    \u003cdiv class=\"xf-panel-label\" style=\"display:flex;justify-content:space-between;align-items:center\"\u003e\n      \u003cspan id=\"xf-out-label\"\u003e出力\u003c/span\u003e\n      \u003cspan class=\"xf-copy-tip\" id=\"xf-copy-tip\"\u003eコピーしました！\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"xf-tab-bar\"\u003e\n      \u003cdiv class=\"xf-tab xf-tab-active\" data-tab=\"formatted\"\u003e整形済み\u003c/div\u003e\n      \u003cdiv class=\"xf-tab\" data-tab=\"tree\"\u003eツリー表示\u003c/div\u003e\n      \u003cdiv class=\"xf-tab\" data-tab=\"json\"\u003eJSON\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"xf-editor-wrap\" id=\"xf-out-wrap\"\u003e\n      \u003cdiv class=\"xf-tab-content xf-tab-visible\" id=\"xf-tab-formatted\"\u003e\n        \u003cpre class=\"xf-output-pre\" id=\"xf-output\"\u003e\u003c/pre\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"xf-tab-content\" id=\"xf-tab-tree\"\u003e\n        \u003cdiv class=\"xf-tree\" id=\"xf-tree-view\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"xf-tab-content\" id=\"xf-tab-json\"\u003e\n        \u003cpre class=\"xf-output-pre\" id=\"xf-json-output\"\u003e\u003c/pre\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cbutton class=\"xf-btn xf-btn-secondary\" id=\"xf-btn-copy-out\" style=\"align-self:flex-start;margin-top:4px\"\u003e\u0026#128203; 出力をコピー\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"xf-freee-cta\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e開発チームの会計管理もかんたんに\u003c/p\u003e","title":"XML整形・バリデーションツール"},{"content":" カーボンフットプリント計算ツール 移動・家庭エネルギー・食事の3カテゴリから、あなたの年間CO2排出量を推定します。\n🚗 移動 自動車走行距離（km/年） 平均的な乗用車: 約0.21 kg CO2/km 飛行機の搭乗回数（回/年） 1フライト平均: 約0.9 t CO2 🏠 家庭エネルギー 電力使用量（kWh/年） 日本平均世帯: 約4,300 kWh 都市ガス使用量（kWh換算/年） 日本平均世帯: 約6,500 kWh相当 🍽️ 食事 肉類を含む食事（回/週） 1食あたり: 約2.5 kg CO2 乳製品の摂取（回/週） 1回あたり: 約0.6 kg CO2 CO2排出量を計算する\nあなたの推定年間カーボンフットプリント 0.0 トン CO2 / 年 あなた: 0t 米国平均: 16t 世界平均: 4t 目標: 2t あなたの排出量 vs. 各平均値 カテゴリ別内訳 カテゴリ別内訳 移動 0 t 家庭エネルギー 0 t 食事 0 t 削減のヒント 環境経営を推進 \u0026rarr; freee会計でサステナビリティレポートを効率化\n関連ツール 料理単位変換 → 料理単位変換ツール 電気代計算 → 電気代計算ツール Fuel Cost Calculator → Fuel Cost Calculatorツール ","permalink":"https://productivity-works.com/ja/tools/carbon-footprint-calculator/","summary":"\u003cdiv id=\"cf-app\"\u003e\n\u003cstyle\u003e\n#cf-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  padding: 24px 16px;\n  color: #1a1a2e;\n  box-sizing: border-box;\n}\n#cf-app *, #cf-app *::before, #cf-app *::after {\n  box-sizing: inherit;\n}\n#cf-app h1 {\n  font-size: 1.7rem;\n  font-weight: 700;\n  text-align: center;\n  margin: 0 0 6px 0;\n  color: #1a1a2e;\n}\n#cf-app .cf-subtitle {\n  text-align: center;\n  color: #555;\n  margin: 0 0 32px 0;\n  font-size: 0.95rem;\n}\n#cf-app .cf-sections {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  gap: 18px;\n  margin-bottom: 28px;\n}\n@media (max-width: 640px) {\n  #cf-app .cf-sections { grid-template-columns: 1fr; }\n  #cf-app h1 { font-size: 1.25rem; }\n}\n#cf-app .cf-card {\n  background: #fff;\n  border: 1.5px solid #e0e7ff;\n  border-radius: 14px;\n  padding: 20px 18px;\n  box-shadow: 0 2px 10px rgba(99,102,241,0.06);\n}\n#cf-app .cf-card-title {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 1.0rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #3730a3;\n}\n#cf-app .cf-card-title .cf-icon {\n  font-size: 1.4rem;\n}\n#cf-app .cf-field {\n  margin-bottom: 14px;\n}\n#cf-app .cf-field label {\n  display: block;\n  font-size: 0.82rem;\n  font-weight: 600;\n  color: #444;\n  margin-bottom: 5px;\n}\n#cf-app .cf-field input[type=\"number\"] {\n  width: 100%;\n  padding: 8px 11px;\n  border: 1.5px solid #c7d2fe;\n  border-radius: 8px;\n  font-size: 0.95rem;\n  color: #1a1a2e;\n  background: #f8f9ff;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#cf-app .cf-field input[type=\"number\"]:focus {\n  border-color: #6366f1;\n  background: #fff;\n}\n#cf-app .cf-field .cf-hint {\n  font-size: 0.73rem;\n  color: #888;\n  margin-top: 3px;\n}\n#cf-app .cf-btn {\n  display: block;\n  width: 100%;\n  padding: 14px;\n  background: linear-gradient(135deg, #6366f1 0%, #22d3ee 100%);\n  color: #fff;\n  font-size: 1.05rem;\n  font-weight: 700;\n  border: none;\n  border-radius: 10px;\n  cursor: pointer;\n  margin: 8px 0 32px 0;\n  letter-spacing: 0.04em;\n  transition: opacity 0.2s, transform 0.1s;\n  box-shadow: 0 4px 14px rgba(99,102,241,0.25);\n}\n#cf-app .cf-btn:hover { opacity: 0.92; transform: translateY(-1px); }\n#cf-app .cf-btn:active { transform: translateY(0); }\n#cf-app .cf-results {\n  display: none;\n}\n#cf-app .cf-results.visible {\n  display: block;\n}\n#cf-app .cf-total-box {\n  background: linear-gradient(135deg, #1a1a2e 0%, #3730a3 100%);\n  border-radius: 16px;\n  padding: 28px 24px;\n  text-align: center;\n  color: #fff;\n  margin-bottom: 24px;\n  box-shadow: 0 6px 24px rgba(55,48,163,0.18);\n}\n#cf-app .cf-total-box .cf-total-label {\n  font-size: 0.88rem;\n  opacity: 0.8;\n  margin-bottom: 6px;\n  letter-spacing: 0.04em;\n}\n#cf-app .cf-total-box .cf-total-value {\n  font-size: 3.2rem;\n  font-weight: 800;\n  line-height: 1;\n  margin-bottom: 4px;\n}\n#cf-app .cf-total-box .cf-total-unit {\n  font-size: 1.0rem;\n  opacity: 0.75;\n}\n#cf-app .cf-total-box .cf-tree-line {\n  margin-top: 14px;\n  font-size: 0.87rem;\n  background: rgba(255,255,255,0.12);\n  border-radius: 8px;\n  padding: 8px 12px;\n  display: inline-block;\n}\n#cf-app .cf-charts-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 18px;\n  margin-bottom: 24px;\n}\n@media (max-width: 600px) {\n  #cf-app .cf-charts-row { grid-template-columns: 1fr; }\n}\n#cf-app .cf-chart-box {\n  background: #fff;\n  border: 1.5px solid #e0e7ff;\n  border-radius: 14px;\n  padding: 18px 16px;\n  box-shadow: 0 2px 10px rgba(99,102,241,0.06);\n}\n#cf-app .cf-chart-box h3 {\n  font-size: 0.85rem;\n  font-weight: 700;\n  color: #3730a3;\n  margin: 0 0 12px 0;\n  letter-spacing: 0.02em;\n}\n#cf-app canvas {\n  width: 100% !important;\n  height: auto;\n}\n#cf-app .cf-breakdown {\n  background: #fff;\n  border: 1.5px solid #e0e7ff;\n  border-radius: 14px;\n  padding: 20px 18px;\n  margin-bottom: 24px;\n  box-shadow: 0 2px 10px rgba(99,102,241,0.06);\n}\n#cf-app .cf-breakdown h3 {\n  font-size: 0.88rem;\n  font-weight: 700;\n  color: #3730a3;\n  margin: 0 0 14px 0;\n  letter-spacing: 0.02em;\n}\n#cf-app .cf-bar-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 10px;\n}\n#cf-app .cf-bar-label {\n  width: 90px;\n  font-size: 0.82rem;\n  font-weight: 600;\n  color: #444;\n  flex-shrink: 0;\n}\n#cf-app .cf-bar-track {\n  flex: 1;\n  background: #f0f4ff;\n  border-radius: 999px;\n  height: 14px;\n  overflow: hidden;\n}\n#cf-app .cf-bar-fill {\n  height: 100%;\n  border-radius: 999px;\n  transition: width 0.6s ease;\n}\n#cf-app .cf-bar-val {\n  width: 60px;\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #1a1a2e;\n  text-align: right;\n  flex-shrink: 0;\n}\n#cf-app .cf-tips {\n  background: #f0fdf4;\n  border: 1.5px solid #86efac;\n  border-radius: 14px;\n  padding: 20px 18px;\n  margin-bottom: 24px;\n}\n#cf-app .cf-tips h3 {\n  font-size: 0.88rem;\n  font-weight: 700;\n  color: #15803d;\n  margin: 0 0 12px 0;\n  letter-spacing: 0.02em;\n}\n#cf-app .cf-tips ul {\n  margin: 0;\n  padding-left: 18px;\n}\n#cf-app .cf-tips ul li {\n  margin-bottom: 6px;\n  font-size: 0.92rem;\n  color: #166534;\n  line-height: 1.6;\n}\n#cf-app .cf-cta {\n  background: #fffbeb;\n  border: 1.5px solid #fbbf24;\n  border-radius: 14px;\n  padding: 20px 18px;\n  margin-bottom: 24px;\n}\n#cf-app .cf-cta p {\n  margin: 0;\n  font-size: 0.93rem;\n  color: #92400e;\n  line-height: 1.6;\n}\n#cf-app .cf-cta a {\n  color: #d97706;\n  font-weight: 700;\n  text-decoration: none;\n}\n#cf-app .cf-cta a:hover { text-decoration: underline; }\n#cf-app .cf-badge-row {\n  display: flex;\n  gap: 10px;\n  justify-content: center;\n  flex-wrap: wrap;\n  margin-top: 16px;\n}\n#cf-app .cf-badge {\n  padding: 5px 12px;\n  border-radius: 999px;\n  font-size: 0.8rem;\n  font-weight: 700;\n}\n#cf-app .cf-badge-you { background: #818cf8; color: #fff; }\n#cf-app .cf-badge-us { background: #f87171; color: #fff; }\n#cf-app .cf-badge-world { background: #fb923c; color: #fff; }\n#cf-app .cf-badge-target { background: #4ade80; color: #166534; }\n\u003c/style\u003e\n\u003ch1\u003eカーボンフットプリント計算ツール\u003c/h1\u003e\n\u003cp class=\"cf-subtitle\"\u003e移動・家庭エネルギー・食事の3カテゴリから、あなたの年間CO2排出量を推定します。\u003c/p\u003e","title":"カーボンフットプリント計算ツール - あなたのCO2排出量を推定"},{"content":" 投資リターン計算ツール 投資情報を入力するだけで、最終残高・総リターン・CAGR（年平均成長率）を計算。年別推移グラフと運用シナリオ比較も確認できます。\n初期投資額（円） 投資開始時の一括投資額 毎月の積立額（円） 毎月定期的に追加する金額 期待年利回り（%） 全世界株式インデックスの長期平均 ≈ 5〜7% 運用期間（年） 投資を継続する予定年数 リターンを計算する 計算結果 最終残高 - 総投資元本 - 運用収益（総額） - CAGR（年平均成長率） - 資産推移グラフ 年別内訳 年 残高 投資元本 運用収益 収益率 シナリオ比較 同じ元本・積立額で、利回りが違うと最終残高はどう変わる？\n堅実型 年利 3%（債券・定期預金） - 標準型 年利 5%（インデックス投資） - 積極型 年利 10%（成長株・海外ETF） - 投資の確定申告も簡単 → freee会計で投資収益を自動管理 投資収益の確定申告、手間がかかっていませんか？\nfreee会計なら証券口座との連携・損益通算・申告書作成まで自動化。\nfreee会計で投資収益を自動管理する → 関連ツール 貯蓄目標シミュレーター → 貯蓄目標シミュレーターツール 複利計算 → 複利計算ツール FIRE計算 → FIRE計算ツール 関連記事 新NISA おすすめ銘柄 初心者向け完全ガイド【2026年最新版】 投資信託 おすすめ 初心者向け厳選ファンド完全比較【2026年最新版】 会社員が不動産投資を始めるならRENOSY？｜NISAやiDeCoとの使い分けガイド ","permalink":"https://productivity-works.com/ja/tools/investment-return-calculator/","summary":"\u003cdiv id=\"ir-app\"\u003e\n\u003cstyle\u003e\n#ir-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans JP', sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#ir-app * { box-sizing: border-box; }\n#ir-app h2 {\n  font-size: 1.4rem;\n  font-weight: 700;\n  margin: 1.5rem 0 0.75rem;\n  color: #1a1a2e;\n  border-left: 4px solid #2563eb;\n  padding-left: 0.6rem;\n}\n#ir-app .ir-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n  margin-bottom: 1rem;\n}\n@media (max-width: 600px) {\n  #ir-app .ir-grid { grid-template-columns: 1fr; }\n}\n#ir-app label {\n  display: block;\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #374151;\n  margin-bottom: 0.3rem;\n}\n#ir-app input[type=\"number\"] {\n  width: 100%;\n  padding: 0.6rem 0.75rem;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  font-size: 1rem;\n  outline: none;\n  transition: border-color 0.2s;\n  background: #fff;\n}\n#ir-app input[type=\"number\"]:focus {\n  border-color: #2563eb;\n  box-shadow: 0 0 0 3px rgba(37,99,235,0.1);\n}\n#ir-app .ir-hint {\n  font-size: 0.75rem;\n  color: #6b7280;\n  margin-top: 0.25rem;\n}\n#ir-app .ir-btn {\n  display: inline-block;\n  padding: 0.7rem 2rem;\n  background: linear-gradient(135deg, #2563eb, #1d4ed8);\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 1rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: transform 0.1s, box-shadow 0.1s;\n  margin-top: 0.5rem;\n}\n#ir-app .ir-btn:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 4px 14px rgba(37,99,235,0.35);\n}\n#ir-app .ir-btn:active { transform: translateY(0); }\n#ir-app .ir-results {\n  display: none;\n}\n#ir-app .ir-cards {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 0.75rem;\n  margin: 1.25rem 0;\n}\n@media (max-width: 700px) {\n  #ir-app .ir-cards { grid-template-columns: repeat(2, 1fr); }\n}\n#ir-app .ir-card {\n  background: #fff;\n  border: 1.5px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 1rem 0.75rem;\n  text-align: center;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n}\n#ir-app .ir-card .ir-card-label {\n  font-size: 0.75rem;\n  color: #6b7280;\n  margin-bottom: 0.35rem;\n  font-weight: 600;\n}\n#ir-app .ir-card .ir-card-val {\n  font-size: 1.3rem;\n  font-weight: 800;\n  color: #1a1a2e;\n}\n#ir-app .ir-card.ir-highlight .ir-card-val { color: #2563eb; }\n#ir-app .ir-card.ir-green .ir-card-val { color: #059669; }\n#ir-app .ir-chart-wrap {\n  background: #fff;\n  border: 1.5px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 1rem;\n  margin-bottom: 1.25rem;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n}\n#ir-app canvas { display: block; width: 100% !important; }\n#ir-app .ir-table-wrap {\n  overflow-x: auto;\n  border-radius: 12px;\n  border: 1.5px solid #e5e7eb;\n  margin-bottom: 1.5rem;\n}\n#ir-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n}\n#ir-app thead th {\n  background: #1e3a8a;\n  color: #fff;\n  padding: 0.65rem 0.85rem;\n  text-align: right;\n  font-weight: 700;\n  white-space: nowrap;\n}\n#ir-app thead th:first-child { text-align: center; }\n#ir-app tbody tr:nth-child(even) { background: #f0f4ff; }\n#ir-app tbody tr:hover { background: #dbeafe; }\n#ir-app tbody td {\n  padding: 0.55rem 0.85rem;\n  text-align: right;\n  border-bottom: 1px solid #e5e7eb;\n  white-space: nowrap;\n}\n#ir-app tbody td:first-child { text-align: center; font-weight: 700; }\n#ir-app .ir-scenario {\n  background: #fff;\n  border: 1.5px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 1rem 1.25rem;\n  margin-bottom: 1.5rem;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n}\n#ir-app .ir-scenario h3 {\n  font-size: 1rem;\n  font-weight: 700;\n  margin: 0 0 0.75rem;\n  color: #374151;\n}\n#ir-app .ir-scenario-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 0.75rem;\n}\n@media (max-width: 600px) {\n  #ir-app .ir-scenario-grid { grid-template-columns: 1fr; }\n}\n#ir-app .ir-s-card {\n  border-radius: 10px;\n  padding: 0.85rem 0.75rem;\n  text-align: center;\n}\n#ir-app .ir-s-card.conservative { background: #f0fdf4; border: 1.5px solid #86efac; }\n#ir-app .ir-s-card.moderate    { background: #eff6ff; border: 1.5px solid #93c5fd; }\n#ir-app .ir-s-card.aggressive  { background: #fef3c7; border: 1.5px solid #fcd34d; }\n#ir-app .ir-s-card .ir-s-label {\n  font-size: 0.75rem;\n  font-weight: 700;\n  letter-spacing: 0.03em;\n  margin-bottom: 0.3rem;\n}\n#ir-app .ir-s-card.conservative .ir-s-label { color: #059669; }\n#ir-app .ir-s-card.moderate    .ir-s-label { color: #2563eb; }\n#ir-app .ir-s-card.aggressive  .ir-s-label { color: #d97706; }\n#ir-app .ir-s-card .ir-s-rate {\n  font-size: 0.8rem;\n  color: #6b7280;\n  margin-bottom: 0.5rem;\n}\n#ir-app .ir-s-card .ir-s-val {\n  font-size: 1.2rem;\n  font-weight: 800;\n  color: #1a1a2e;\n}\n#ir-app .ir-cta {\n  background: linear-gradient(135deg, #e0f2fe, #dbeafe);\n  border: 1.5px solid #93c5fd;\n  border-radius: 12px;\n  padding: 1rem 1.25rem;\n  margin: 1.5rem 0;\n  font-size: 0.92rem;\n  color: #1e3a8a;\n  line-height: 1.7;\n}\n#ir-app .ir-cta a { color: #1d4ed8; font-weight: 700; }\n#ir-app .ir-input-section {\n  background: #fff;\n  border: 1.5px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 1.25rem;\n  margin-bottom: 1rem;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n}\n\u003c/style\u003e\n\u003ch2\u003e投資リターン計算ツール\u003c/h2\u003e\n\u003cp style=\"color:#6b7280;font-size:0.92rem;margin-bottom:1rem;\"\u003e投資情報を入力するだけで、最終残高・総リターン・CAGR（年平均成長率）を計算。年別推移グラフと運用シナリオ比較も確認できます。\u003c/p\u003e","title":"投資リターン計算ツール - 年平均成長率(CAGR)＆トータルリターン"},{"content":".htaccess ファイルをビジュアルに生成 — Apache の知識不要。セクションをON/OFFして、リダイレクトルールを追加し、セキュリティヘッダーを設定して、すぐに使えるファイルをダウンロードできます。\nプリセット： WordPress 静的サイト HTTPS強制 悪意あるBot遮断 静的アセットキャッシュ リセット \u0026lt;!-- リダイレクト --\u0026gt; \u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-redirects\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('redirects')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-redirects\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot; checked\u0026gt; \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;リダイレクト\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;ha-section-badge\u0026quot;\u0026gt;301 / 302\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-redirects\u0026quot;\u0026gt;▼\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-section-body\u0026quot; id=\u0026quot;ha-body-redirects\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-field-row\u0026quot; style=\u0026quot;margin-bottom:10px;\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;デフォルト種別\u0026lt;/span\u0026gt; \u0026lt;select class=\u0026quot;ha-select\u0026quot; id=\u0026quot;ha-redirect-type\u0026quot; onchange=\u0026quot;haRender()\u0026quot; style=\u0026quot;max-width:200px;\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;301\u0026quot;\u0026gt;301 恒久リダイレクト\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;302\u0026quot;\u0026gt;302 一時リダイレクト\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-redirect-list\u0026quot; id=\u0026quot;ha-redirect-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;ha-add-btn\u0026quot; onclick=\u0026quot;haAddRedirect()\u0026quot;\u0026gt;＋ リダイレクトルールを追加\u0026lt;/button\u0026gt; \u0026lt;div class=\u0026quot;ha-hint\u0026quot;\u0026gt;転送元パス（例：/old-page）→ 転送先URL\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- セキュリティヘッダー --\u0026gt; \u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-security\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('security')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-security\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot; checked\u0026gt; \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;セキュリティヘッダー\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-security\u0026quot;\u0026gt;▼\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-section-body\u0026quot; id=\u0026quot;ha-body-security\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-xframe\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;X-Frame-Options: SAMEORIGIN（クリックジャッキング対策）\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-xcontent\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;X-Content-Type-Options: nosniff（MIMEスニッフィング防止）\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-xss\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;X-XSS-Protection: 1; mode=block（XSS対策）\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-referrer\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt; \u0026lt;span\u0026gt;Referrer-Policy: strict-origin-when-cross-origin\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-hsts\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt; \u0026lt;span\u0026gt;Strict-Transport-Security（HSTS / HTTPS強制）\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-csp\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt; \u0026lt;span\u0026gt;Content-Security-Policy: default-src 'self'\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-serverhide\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;サーバー情報を非表示（ServerTokens Prod）\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- キャッシュ --\u0026gt; \u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-caching\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('caching')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-caching\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;ブラウザキャッシュ\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-caching\u0026quot;\u0026gt;▶\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-section-body ha-hidden\u0026quot; id=\u0026quot;ha-body-caching\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cache-images\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;画像（jpg, png, gif, webp, svg）— 1ヶ月\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cache-css\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;CSS・JavaScript — 1週間\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cache-fonts\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;フォント（woff, woff2, ttf）— 1年間\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cache-html\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt; \u0026lt;span\u0026gt;HTML — 1時間\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cache-etag\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt; \u0026lt;span\u0026gt;ETagを無効化（CDN環境向け）\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- CORS --\u0026gt; \u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-cors\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('cors')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-cors\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;CORS設定\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-cors\u0026quot;\u0026gt;▶\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-section-body ha-hidden\u0026quot; id=\u0026quot;ha-body-cors\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;許可オリジン\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;ha-input\u0026quot; id=\u0026quot;ha-cors-origin\u0026quot; value=\u0026quot;*\u0026quot; onchange=\u0026quot;haRender()\u0026quot; placeholder=\u0026quot;* または https://example.com\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cors-methods\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;許可メソッド: GET, POST, OPTIONS\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cors-headers\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;許可ヘッダー: Content-Type, Authorization\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cors-fonts-only\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt; \u0026lt;span\u0026gt;フォントのみにCORSを適用（推奨）\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Gzip圧縮 --\u0026gt; \u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-gzip\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('gzip')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-gzip\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;Gzip圧縮\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-gzip\u0026quot;\u0026gt;▶\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-section-body ha-hidden\u0026quot; id=\u0026quot;ha-body-gzip\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-gzip-html\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;HTML・XML・プレーンテキスト\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-gzip-css\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;CSS・JavaScript\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-gzip-fonts\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;フォント（SVG・TTF）\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-gzip-json\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;JSON・API レスポンス\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- エラーページ --\u0026gt; \u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-errors\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('errors')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-errors\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;カスタムエラーページ\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-errors\u0026quot;\u0026gt;▶\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-section-body ha-hidden\u0026quot; id=\u0026quot;ha-body-errors\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;404 Not Found\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;ha-input\u0026quot; id=\u0026quot;ha-err-404\u0026quot; value=\u0026quot;/404.html\u0026quot; onchange=\u0026quot;haRender()\u0026quot; placeholder=\u0026quot;/404.html\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;403 Forbidden\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;ha-input\u0026quot; id=\u0026quot;ha-err-403\u0026quot; value=\u0026quot;/403.html\u0026quot; onchange=\u0026quot;haRender()\u0026quot; placeholder=\u0026quot;/403.html\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;500 Server Error\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;ha-input\u0026quot; id=\u0026quot;ha-err-500\u0026quot; value=\u0026quot;/500.html\u0026quot; onchange=\u0026quot;haRender()\u0026quot; placeholder=\u0026quot;/500.html\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;401 Unauthorized\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;ha-input\u0026quot; id=\u0026quot;ha-err-401\u0026quot; value=\u0026quot;\u0026quot; onchange=\u0026quot;haRender()\u0026quot; placeholder=\u0026quot;/401.html（省略可）\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- ディレクトリオプション --\u0026gt; \u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-directory\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('directory')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-directory\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;ディレクトリオプション\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-directory\u0026quot;\u0026gt;▶\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-section-body ha-hidden\u0026quot; id=\u0026quot;ha-body-directory\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-dir-noindex\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;ディレクトリ一覧を無効化（Options -Indexes）\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-dir-followlinks\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt; \u0026lt;span\u0026gt;シンボリックリンクを許可（Options +FollowSymLinks）\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-dir-blockdotfiles\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt; \u0026lt;span\u0026gt;ドットファイルへのアクセスをブロック（.env, .git など）\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-dir-blockphp\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt; \u0026lt;span\u0026gt;アップロードフォルダでのPHP実行を禁止\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-dir-badbots\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt; \u0026lt;span\u0026gt;悪意あるBot（SemrushBot, AhrefsBot等）をブロック\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ha-field-row\u0026quot; style=\u0026quot;margin-top:8px;\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;デフォルト文字コード\u0026lt;/span\u0026gt; \u0026lt;select class=\u0026quot;ha-select\u0026quot; id=\u0026quot;ha-dir-charset\u0026quot; onchange=\u0026quot;haRender()\u0026quot; style=\u0026quot;max-width:200px;\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;UTF-8\u0026quot; selected\u0026gt;UTF-8\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;ISO-8859-1\u0026quot;\u0026gt;ISO-8859-1\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;\u0026quot;\u0026gt;(指定なし)\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; プレビュー — .htaccess コピー ダウンロード 関連ツール robots.txtを生成 → Robots.txtジェネレーター メタタグを作成 → メタタグジェネレーター SQLを整形 → SQLフォーマッター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/htaccess-generator/","summary":"\u003cp\u003e\u003ccode\u003e.htaccess\u003c/code\u003e ファイルをビジュアルに生成 — Apache の知識不要。セクションをON/OFFして、リダイレクトルールを追加し、セキュリティヘッダーを設定して、すぐに使えるファイルをダウンロードできます。\u003c/p\u003e\n\u003cdiv id=\"htaccess-app\"\u003e\n\u003cstyle\u003e\n#htaccess-app *,\n#htaccess-app *::before,\n#htaccess-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#htaccess-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Yu Gothic\", Meiryo, \"Segoe UI\", sans-serif;\n  font-size: 15px;\n  color: #1a1a2e;\n  line-height: 1.6;\n  max-width: 900px;\n  margin: 0 auto;\n}\n#htaccess-app .ha-layout {\n  display: flex;\n  gap: 20px;\n  flex-wrap: wrap;\n}\n#htaccess-app .ha-left {\n  flex: 1 1 480px;\n  min-width: 0;\n}\n#htaccess-app .ha-right {\n  flex: 1 1 320px;\n  min-width: 0;\n}\n#htaccess-app .ha-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 20px;\n}\n#htaccess-app .ha-preset-btn {\n  padding: 6px 14px;\n  background: #f0f4ff;\n  border: 1px solid #c3d0f5;\n  border-radius: 20px;\n  cursor: pointer;\n  font-size: 13px;\n  color: #3a56d4;\n  font-weight: 500;\n  transition: background 0.15s, border-color 0.15s;\n}\n#htaccess-app .ha-preset-btn:hover {\n  background: #dce6ff;\n  border-color: #3a56d4;\n}\n#htaccess-app .ha-section {\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  margin-bottom: 14px;\n  overflow: hidden;\n}\n#htaccess-app .ha-section-header {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  padding: 12px 16px;\n  background: #f8fafc;\n  cursor: pointer;\n  user-select: none;\n}\n#htaccess-app .ha-section-header:hover {\n  background: #f0f4ff;\n}\n#htaccess-app .ha-section-header input[type=\"checkbox\"] {\n  width: 17px;\n  height: 17px;\n  accent-color: #3a56d4;\n  cursor: pointer;\n  flex-shrink: 0;\n}\n#htaccess-app .ha-section-title {\n  font-weight: 600;\n  font-size: 14px;\n  flex: 1;\n}\n#htaccess-app .ha-section-chevron {\n  font-size: 11px;\n  color: #94a3b8;\n  transition: transform 0.2s;\n}\n#htaccess-app .ha-section-body {\n  padding: 14px 16px;\n  border-top: 1px solid #e2e8f0;\n  background: #fff;\n}\n#htaccess-app .ha-section-body.ha-hidden {\n  display: none;\n}\n#htaccess-app .ha-field-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 10px;\n  flex-wrap: wrap;\n}\n#htaccess-app .ha-field-label {\n  font-size: 13px;\n  color: #475569;\n  min-width: 110px;\n  flex-shrink: 0;\n}\n#htaccess-app .ha-input,\n#htaccess-app .ha-select {\n  flex: 1;\n  min-width: 120px;\n  padding: 6px 10px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  color: #1a1a2e;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#htaccess-app .ha-input:focus,\n#htaccess-app .ha-select:focus {\n  border-color: #3a56d4;\n  box-shadow: 0 0 0 3px rgba(58,86,212,0.1);\n}\n#htaccess-app .ha-redirect-list {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  margin-bottom: 10px;\n}\n#htaccess-app .ha-redirect-row {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n#htaccess-app .ha-redirect-row .ha-input {\n  flex: 1;\n  min-width: 100px;\n}\n#htaccess-app .ha-remove-btn {\n  padding: 5px 10px;\n  background: #fee2e2;\n  border: 1px solid #fca5a5;\n  border-radius: 6px;\n  color: #dc2626;\n  cursor: pointer;\n  font-size: 12px;\n  flex-shrink: 0;\n  transition: background 0.15s;\n}\n#htaccess-app .ha-remove-btn:hover {\n  background: #fecaca;\n}\n#htaccess-app .ha-add-btn {\n  padding: 6px 14px;\n  background: #f0fdf4;\n  border: 1px solid #86efac;\n  border-radius: 6px;\n  color: #16a34a;\n  cursor: pointer;\n  font-size: 13px;\n  font-weight: 500;\n  transition: background 0.15s;\n}\n#htaccess-app .ha-add-btn:hover {\n  background: #dcfce7;\n}\n#htaccess-app .ha-checkbox-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 8px;\n  font-size: 13px;\n  color: #334155;\n}\n#htaccess-app .ha-checkbox-row input[type=\"checkbox\"] {\n  width: 15px;\n  height: 15px;\n  accent-color: #3a56d4;\n  cursor: pointer;\n}\n#htaccess-app .ha-hint {\n  font-size: 12px;\n  color: #94a3b8;\n  margin-top: 4px;\n}\n#htaccess-app .ha-preview-box {\n  background: #0f172a;\n  border-radius: 10px;\n  overflow: hidden;\n  position: sticky;\n  top: 80px;\n}\n#htaccess-app .ha-preview-topbar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 10px 14px;\n  background: #1e293b;\n}\n#htaccess-app .ha-preview-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #94a3b8;\n  letter-spacing: 0.05em;\n  text-transform: uppercase;\n}\n#htaccess-app .ha-preview-actions {\n  display: flex;\n  gap: 8px;\n}\n#htaccess-app .ha-copy-btn,\n#htaccess-app .ha-download-btn {\n  padding: 5px 12px;\n  border-radius: 6px;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  border: none;\n  transition: background 0.15s, transform 0.1s;\n}\n#htaccess-app .ha-copy-btn {\n  background: #3a56d4;\n  color: #fff;\n}\n#htaccess-app .ha-copy-btn:hover {\n  background: #2d44b0;\n}\n#htaccess-app .ha-copy-btn.ha-copied {\n  background: #16a34a;\n}\n#htaccess-app .ha-download-btn {\n  background: #334155;\n  color: #e2e8f0;\n}\n#htaccess-app .ha-download-btn:hover {\n  background: #475569;\n}\n#htaccess-app .ha-preview-code {\n  padding: 16px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 12px;\n  line-height: 1.7;\n  color: #e2e8f0;\n  white-space: pre;\n  overflow-x: auto;\n  max-height: 520px;\n  overflow-y: auto;\n  min-height: 200px;\n}\n#htaccess-app .ha-preview-code .ht-comment { color: #64748b; }\n#htaccess-app .ha-preview-code .ht-directive { color: #7dd3fc; }\n#htaccess-app .ha-preview-code .ht-value { color: #86efac; }\n#htaccess-app .ha-preview-code .ht-tag { color: #f9a8d4; }\n#htaccess-app .ha-section-badge {\n  font-size: 11px;\n  background: #e0e7ff;\n  color: #3730a3;\n  border-radius: 10px;\n  padding: 1px 8px;\n  font-weight: 500;\n}\n@media (max-width: 700px) {\n  #htaccess-app .ha-layout {\n    flex-direction: column;\n  }\n  #htaccess-app .ha-preview-box {\n    position: static;\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"ha-presets\"\u003e\n  \u003cstrong style=\"font-size:13px;color:#64748b;align-self:center;margin-right:4px;\"\u003eプリセット：\u003c/strong\u003e\n  \u003cbutton class=\"ha-preset-btn\" onclick=\"haApplyPreset('wordpress')\"\u003eWordPress\u003c/button\u003e\n  \u003cbutton class=\"ha-preset-btn\" onclick=\"haApplyPreset('static')\"\u003e静的サイト\u003c/button\u003e\n  \u003cbutton class=\"ha-preset-btn\" onclick=\"haApplyPreset('https')\"\u003eHTTPS強制\u003c/button\u003e\n  \u003cbutton class=\"ha-preset-btn\" onclick=\"haApplyPreset('bots')\"\u003e悪意あるBot遮断\u003c/button\u003e\n  \u003cbutton class=\"ha-preset-btn\" onclick=\"haApplyPreset('cache')\"\u003e静的アセットキャッシュ\u003c/button\u003e\n  \u003cbutton class=\"ha-preset-btn\" onclick=\"haApplyPreset('reset')\" style=\"color:#dc2626;background:#fff5f5;border-color:#fca5a5;\"\u003eリセット\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ha-layout\"\u003e\n  \u003cdiv class=\"ha-left\"\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;!-- リダイレクト --\u0026gt;\n\u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-redirects\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('redirects')\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-redirects\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot; checked\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;リダイレクト\u0026lt;/span\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-badge\u0026quot;\u0026gt;301 / 302\u0026lt;/span\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-redirects\u0026quot;\u0026gt;▼\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-body\u0026quot; id=\u0026quot;ha-body-redirects\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-field-row\u0026quot; style=\u0026quot;margin-bottom:10px;\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;デフォルト種別\u0026lt;/span\u0026gt;\n      \u0026lt;select class=\u0026quot;ha-select\u0026quot; id=\u0026quot;ha-redirect-type\u0026quot; onchange=\u0026quot;haRender()\u0026quot; style=\u0026quot;max-width:200px;\u0026quot;\u0026gt;\n        \u0026lt;option value=\u0026quot;301\u0026quot;\u0026gt;301 恒久リダイレクト\u0026lt;/option\u0026gt;\n        \u0026lt;option value=\u0026quot;302\u0026quot;\u0026gt;302 一時リダイレクト\u0026lt;/option\u0026gt;\n      \u0026lt;/select\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-redirect-list\u0026quot; id=\u0026quot;ha-redirect-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;button class=\u0026quot;ha-add-btn\u0026quot; onclick=\u0026quot;haAddRedirect()\u0026quot;\u0026gt;＋ リダイレクトルールを追加\u0026lt;/button\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-hint\u0026quot;\u0026gt;転送元パス（例：/old-page）→ 転送先URL\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- セキュリティヘッダー --\u0026gt;\n\u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-security\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('security')\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-security\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot; checked\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;セキュリティヘッダー\u0026lt;/span\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-security\u0026quot;\u0026gt;▼\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-body\u0026quot; id=\u0026quot;ha-body-security\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-xframe\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;X-Frame-Options: SAMEORIGIN（クリックジャッキング対策）\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-xcontent\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;X-Content-Type-Options: nosniff（MIMEスニッフィング防止）\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-xss\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;X-XSS-Protection: 1; mode=block（XSS対策）\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-referrer\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt;\n      \u0026lt;span\u0026gt;Referrer-Policy: strict-origin-when-cross-origin\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-hsts\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt;\n      \u0026lt;span\u0026gt;Strict-Transport-Security（HSTS / HTTPS強制）\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-csp\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt;\n      \u0026lt;span\u0026gt;Content-Security-Policy: default-src 'self'\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-sec-serverhide\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;サーバー情報を非表示（ServerTokens Prod）\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- キャッシュ --\u0026gt;\n\u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-caching\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('caching')\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-caching\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;ブラウザキャッシュ\u0026lt;/span\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-caching\u0026quot;\u0026gt;▶\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-body ha-hidden\u0026quot; id=\u0026quot;ha-body-caching\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cache-images\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;画像（jpg, png, gif, webp, svg）— 1ヶ月\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cache-css\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;CSS・JavaScript — 1週間\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cache-fonts\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;フォント（woff, woff2, ttf）— 1年間\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cache-html\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt;\n      \u0026lt;span\u0026gt;HTML — 1時間\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cache-etag\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt;\n      \u0026lt;span\u0026gt;ETagを無効化（CDN環境向け）\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- CORS --\u0026gt;\n\u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-cors\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('cors')\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-cors\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;CORS設定\u0026lt;/span\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-cors\u0026quot;\u0026gt;▶\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-body ha-hidden\u0026quot; id=\u0026quot;ha-body-cors\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-field-row\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;許可オリジン\u0026lt;/span\u0026gt;\n      \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;ha-input\u0026quot; id=\u0026quot;ha-cors-origin\u0026quot; value=\u0026quot;*\u0026quot; onchange=\u0026quot;haRender()\u0026quot; placeholder=\u0026quot;* または https://example.com\u0026quot;\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cors-methods\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;許可メソッド: GET, POST, OPTIONS\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cors-headers\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;許可ヘッダー: Content-Type, Authorization\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-cors-fonts-only\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt;\n      \u0026lt;span\u0026gt;フォントのみにCORSを適用（推奨）\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Gzip圧縮 --\u0026gt;\n\u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-gzip\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('gzip')\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-gzip\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;Gzip圧縮\u0026lt;/span\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-gzip\u0026quot;\u0026gt;▶\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-body ha-hidden\u0026quot; id=\u0026quot;ha-body-gzip\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-gzip-html\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;HTML・XML・プレーンテキスト\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-gzip-css\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;CSS・JavaScript\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-gzip-fonts\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;フォント（SVG・TTF）\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-gzip-json\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;JSON・API レスポンス\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- エラーページ --\u0026gt;\n\u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-errors\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('errors')\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-errors\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;カスタムエラーページ\u0026lt;/span\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-errors\u0026quot;\u0026gt;▶\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-body ha-hidden\u0026quot; id=\u0026quot;ha-body-errors\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-field-row\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;404 Not Found\u0026lt;/span\u0026gt;\n      \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;ha-input\u0026quot; id=\u0026quot;ha-err-404\u0026quot; value=\u0026quot;/404.html\u0026quot; onchange=\u0026quot;haRender()\u0026quot; placeholder=\u0026quot;/404.html\u0026quot;\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-field-row\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;403 Forbidden\u0026lt;/span\u0026gt;\n      \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;ha-input\u0026quot; id=\u0026quot;ha-err-403\u0026quot; value=\u0026quot;/403.html\u0026quot; onchange=\u0026quot;haRender()\u0026quot; placeholder=\u0026quot;/403.html\u0026quot;\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-field-row\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;500 Server Error\u0026lt;/span\u0026gt;\n      \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;ha-input\u0026quot; id=\u0026quot;ha-err-500\u0026quot; value=\u0026quot;/500.html\u0026quot; onchange=\u0026quot;haRender()\u0026quot; placeholder=\u0026quot;/500.html\u0026quot;\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-field-row\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;401 Unauthorized\u0026lt;/span\u0026gt;\n      \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;ha-input\u0026quot; id=\u0026quot;ha-err-401\u0026quot; value=\u0026quot;\u0026quot; onchange=\u0026quot;haRender()\u0026quot; placeholder=\u0026quot;/401.html（省略可）\u0026quot;\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- ディレクトリオプション --\u0026gt;\n\u0026lt;div class=\u0026quot;ha-section\u0026quot; id=\u0026quot;ha-sec-directory\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-header\u0026quot; onclick=\u0026quot;haToggleSection('directory')\u0026quot;\u0026gt;\n    \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-chk-directory\u0026quot; onclick=\u0026quot;event.stopPropagation();haRender()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-title\u0026quot;\u0026gt;ディレクトリオプション\u0026lt;/span\u0026gt;\n    \u0026lt;span class=\u0026quot;ha-section-chevron\u0026quot; id=\u0026quot;ha-chev-directory\u0026quot;\u0026gt;▶\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;ha-section-body ha-hidden\u0026quot; id=\u0026quot;ha-body-directory\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-dir-noindex\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;ディレクトリ一覧を無効化（Options -Indexes）\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-dir-followlinks\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt;\n      \u0026lt;span\u0026gt;シンボリックリンクを許可（Options +FollowSymLinks）\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-dir-blockdotfiles\u0026quot; onchange=\u0026quot;haRender()\u0026quot; checked\u0026gt;\n      \u0026lt;span\u0026gt;ドットファイルへのアクセスをブロック（.env, .git など）\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-dir-blockphp\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt;\n      \u0026lt;span\u0026gt;アップロードフォルダでのPHP実行を禁止\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;ha-dir-badbots\u0026quot; onchange=\u0026quot;haRender()\u0026quot;\u0026gt;\n      \u0026lt;span\u0026gt;悪意あるBot（SemrushBot, AhrefsBot等）をブロック\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;ha-field-row\u0026quot; style=\u0026quot;margin-top:8px;\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;ha-field-label\u0026quot;\u0026gt;デフォルト文字コード\u0026lt;/span\u0026gt;\n      \u0026lt;select class=\u0026quot;ha-select\u0026quot; id=\u0026quot;ha-dir-charset\u0026quot; onchange=\u0026quot;haRender()\u0026quot; style=\u0026quot;max-width:200px;\u0026quot;\u0026gt;\n        \u0026lt;option value=\u0026quot;UTF-8\u0026quot; selected\u0026gt;UTF-8\u0026lt;/option\u0026gt;\n        \u0026lt;option value=\u0026quot;ISO-8859-1\u0026quot;\u0026gt;ISO-8859-1\u0026lt;/option\u0026gt;\n        \u0026lt;option value=\u0026quot;\u0026quot;\u0026gt;(指定なし)\u0026lt;/option\u0026gt;\n      \u0026lt;/select\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\u003c!-- /.ha-left --\u003e\n  \u003cdiv class=\"ha-right\"\u003e\n    \u003cdiv class=\"ha-preview-box\"\u003e\n      \u003cdiv class=\"ha-preview-topbar\"\u003e\n        \u003cspan class=\"ha-preview-label\"\u003eプレビュー — .htaccess\u003c/span\u003e\n        \u003cdiv class=\"ha-preview-actions\"\u003e\n          \u003cbutton class=\"ha-copy-btn\" id=\"ha-copy-btn\" onclick=\"haCopy()\"\u003eコピー\u003c/button\u003e\n          \u003cbutton class=\"ha-download-btn\" onclick=\"haDownload()\"\u003eダウンロード\u003c/button\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003cpre class=\"ha-preview-code\" id=\"ha-preview-code\"\u003e\u003c/pre\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\u003c!-- /.ha-layout --\u003e\n\u003cscript\u003e\n(function() {\n  var haRedirects = [{ src: '/old-page', dst: 'https://example.com/new-page' }];\n  var haOpenSections = { redirects: true, security: true, caching: false, cors: false, gzip: false, errors: false, directory: false };\n\n  function haToggleSection(id) {\n    haOpenSections[id] = !haOpenSections[id];\n    var body = document.getElementById('ha-body-' + id);\n    var chev = document.getElementById('ha-chev-' + id);\n    if (body) body.classList.toggle('ha-hidden', !haOpenSections[id]);\n    if (chev) chev.textContent = haOpenSections[id] ? '▼' : '▶';\n  }\n  window.haToggleSection = haToggleSection;\n\n  function haAddRedirect() {\n    haRedirects.push({ src: '', dst: '' });\n    haRenderRedirectList();\n    haRender();\n  }\n  window.haAddRedirect = haAddRedirect;\n\n  function haRemoveRedirect(i) {\n    haRedirects.splice(i, 1);\n    haRenderRedirectList();\n    haRender();\n  }\n  window.haRemoveRedirect = haRemoveRedirect;\n\n  function haRenderRedirectList() {\n    var list = document.getElementById('ha-redirect-list');\n    if (!list) return;\n    list.innerHTML = '';\n    haRedirects.forEach(function(r, i) {\n      var row = document.createElement('div');\n      row.className = 'ha-redirect-row';\n      row.innerHTML =\n        '\u003cinput type=\"text\" class=\"ha-input\" placeholder=\"/old-path\" value=\"' + escAttr(r.src) + '\" oninput=\"haSetRedirect(' + i + ',\\'src\\',this.value)\"\u003e' +\n        '\u003cspan style=\"color:#94a3b8;font-size:13px;\"\u003e→\u003c/span\u003e' +\n        '\u003cinput type=\"text\" class=\"ha-input\" placeholder=\"https://example.com/new\" value=\"' + escAttr(r.dst) + '\" oninput=\"haSetRedirect(' + i + ',\\'dst\\',this.value)\"\u003e' +\n        '\u003cbutton class=\"ha-remove-btn\" onclick=\"haRemoveRedirect(' + i + ')\"\u003e✕\u003c/button\u003e';\n      list.appendChild(row);\n    });\n  }\n\n  function haSetRedirect(i, key, val) {\n    haRedirects[i][key] = val;\n    haRender();\n  }\n  window.haSetRedirect = haSetRedirect;\n\n  function escAttr(s) { return (s || '').replace(/\"/g, '\u0026quot;'); }\n\n  function v(id) { var el = document.getElementById(id); return el ? el.value : ''; }\n  function c(id) { var el = document.getElementById(id); return el ? el.checked : false; }\n\n  function haRender() {\n    var lines = [];\n    lines.push('# .htaccess ジェネレーターで生成');\n    lines.push('# https://productivity.works/ja/tools/htaccess-generator/');\n    lines.push('');\n    lines.push('Options -MultiViews');\n\n    // リダイレクト\n    if (c('ha-chk-redirects')) {\n      var type = v('ha-redirect-type') || '301';\n      var hasRules = haRedirects.some(function(r) { return r.src \u0026\u0026 r.dst; });\n      if (hasRules) {\n        lines.push('');\n        lines.push('# ─── リダイレクト ────────────────────────────────────────');\n        lines.push('RewriteEngine On');\n        haRedirects.forEach(function(r) {\n          if (r.src \u0026\u0026 r.dst) {\n            lines.push('Redirect ' + type + ' ' + r.src + ' ' + r.dst);\n          }\n        });\n      }\n    }\n\n    // セキュリティヘッダー\n    if (c('ha-chk-security')) {\n      lines.push('');\n      lines.push('# ─── セキュリティヘッダー ────────────────────────────────');\n      lines.push('\u003cIfModule mod_headers.c\u003e');\n      if (c('ha-sec-xframe'))      lines.push('  Header always set X-Frame-Options \"SAMEORIGIN\"');\n      if (c('ha-sec-xcontent'))    lines.push('  Header always set X-Content-Type-Options \"nosniff\"');\n      if (c('ha-sec-xss'))         lines.push('  Header always set X-XSS-Protection \"1; mode=block\"');\n      if (c('ha-sec-referrer'))    lines.push('  Header always set Referrer-Policy \"strict-origin-when-cross-origin\"');\n      if (c('ha-sec-hsts'))        lines.push('  Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\"');\n      if (c('ha-sec-csp'))         lines.push('  Header always set Content-Security-Policy \"default-src \\'self\\'\"');\n      if (c('ha-sec-serverhide')) {\n        lines.push('  Header unset Server');\n        lines.push('  Header unset X-Powered-By');\n        lines.push('  ServerTokens Prod');\n        lines.push('  ServerSignature Off');\n      }\n      lines.push('\u003c/IfModule\u003e');\n    }\n\n    // キャッシュ\n    if (c('ha-chk-caching')) {\n      lines.push('');\n      lines.push('# ─── ブラウザキャッシュ ──────────────────────────────────');\n      lines.push('\u003cIfModule mod_expires.c\u003e');\n      lines.push('  ExpiresActive On');\n      if (c('ha-cache-images')) lines.push('  ExpiresByType image/jpeg \"access plus 1 month\"');\n      if (c('ha-cache-images')) lines.push('  ExpiresByType image/png \"access plus 1 month\"');\n      if (c('ha-cache-images')) lines.push('  ExpiresByType image/gif \"access plus 1 month\"');\n      if (c('ha-cache-images')) lines.push('  ExpiresByType image/webp \"access plus 1 month\"');\n      if (c('ha-cache-images')) lines.push('  ExpiresByType image/svg+xml \"access plus 1 month\"');\n      if (c('ha-cache-css'))    lines.push('  ExpiresByType text/css \"access plus 1 week\"');\n      if (c('ha-cache-css'))    lines.push('  ExpiresByType application/javascript \"access plus 1 week\"');\n      if (c('ha-cache-fonts'))  lines.push('  ExpiresByType font/woff2 \"access plus 1 year\"');\n      if (c('ha-cache-fonts'))  lines.push('  ExpiresByType font/woff \"access plus 1 year\"');\n      if (c('ha-cache-fonts'))  lines.push('  ExpiresByType font/ttf \"access plus 1 year\"');\n      if (c('ha-cache-html'))   lines.push('  ExpiresByType text/html \"access plus 1 hour\"');\n      lines.push('\u003c/IfModule\u003e');\n      if (c('ha-cache-etag')) {\n        lines.push('FileETag None');\n        lines.push('Header unset ETag');\n      }\n    }\n\n    // CORS\n    if (c('ha-chk-cors')) {\n      var origin = v('ha-cors-origin') || '*';\n      lines.push('');\n      lines.push('# ─── CORS ────────────────────────────────────────────────');\n      lines.push('\u003cIfModule mod_headers.c\u003e');\n      if (c('ha-cors-fonts-only')) {\n        lines.push('  \u003cFilesMatch \"\\\\.(ttf|ttc|otf|eot|woff|woff2|font.css)$\"\u003e');\n        lines.push('    Header add Access-Control-Allow-Origin \"' + origin + '\"');\n        lines.push('  \u003c/FilesMatch\u003e');\n      } else {\n        lines.push('  Header add Access-Control-Allow-Origin \"' + origin + '\"');\n        if (c('ha-cors-methods')) lines.push('  Header add Access-Control-Allow-Methods \"GET, POST, OPTIONS\"');\n        if (c('ha-cors-headers')) lines.push('  Header add Access-Control-Allow-Headers \"Content-Type, Authorization\"');\n      }\n      lines.push('\u003c/IfModule\u003e');\n    }\n\n    // Gzip\n    if (c('ha-chk-gzip')) {\n      lines.push('');\n      lines.push('# ─── Gzip圧縮 ────────────────────────────────────────────');\n      lines.push('\u003cIfModule mod_deflate.c\u003e');\n      if (c('ha-gzip-html')) {\n        lines.push('  AddOutputFilterByType DEFLATE text/html');\n        lines.push('  AddOutputFilterByType DEFLATE text/plain');\n        lines.push('  AddOutputFilterByType DEFLATE text/xml');\n        lines.push('  AddOutputFilterByType DEFLATE application/xml');\n        lines.push('  AddOutputFilterByType DEFLATE application/xhtml+xml');\n      }\n      if (c('ha-gzip-css')) {\n        lines.push('  AddOutputFilterByType DEFLATE text/css');\n        lines.push('  AddOutputFilterByType DEFLATE text/javascript');\n        lines.push('  AddOutputFilterByType DEFLATE application/javascript');\n        lines.push('  AddOutputFilterByType DEFLATE application/x-javascript');\n      }\n      if (c('ha-gzip-fonts')) {\n        lines.push('  AddOutputFilterByType DEFLATE image/svg+xml');\n        lines.push('  AddOutputFilterByType DEFLATE font/ttf');\n        lines.push('  AddOutputFilterByType DEFLATE font/otf');\n      }\n      if (c('ha-gzip-json')) {\n        lines.push('  AddOutputFilterByType DEFLATE application/json');\n        lines.push('  AddOutputFilterByType DEFLATE application/ld+json');\n      }\n      lines.push('\u003c/IfModule\u003e');\n    }\n\n    // エラーページ\n    if (c('ha-chk-errors')) {\n      lines.push('');\n      lines.push('# ─── カスタムエラーページ ────────────────────────────────');\n      var e404 = v('ha-err-404'); if (e404) lines.push('ErrorDocument 404 ' + e404);\n      var e403 = v('ha-err-403'); if (e403) lines.push('ErrorDocument 403 ' + e403);\n      var e500 = v('ha-err-500'); if (e500) lines.push('ErrorDocument 500 ' + e500);\n      var e401 = v('ha-err-401'); if (e401) lines.push('ErrorDocument 401 ' + e401);\n    }\n\n    // ディレクトリオプション\n    if (c('ha-chk-directory')) {\n      lines.push('');\n      lines.push('# ─── ディレクトリオプション ──────────────────────────────');\n      if (c('ha-dir-noindex'))     lines.push('Options -Indexes');\n      if (c('ha-dir-followlinks')) lines.push('Options +FollowSymLinks');\n      var charset = v('ha-dir-charset');\n      if (charset) lines.push('AddDefaultCharset ' + charset);\n      if (c('ha-dir-blockdotfiles')) {\n        lines.push('\u003cFilesMatch \"^\\\\.(env|git|htaccess|htpasswd|DS_Store)\"\u003e');\n        lines.push('  Order allow,deny');\n        lines.push('  Deny from all');\n        lines.push('\u003c/FilesMatch\u003e');\n      }\n      if (c('ha-dir-blockphp')) {\n        lines.push('\u003cDirectory \"/wp-content/uploads\"\u003e');\n        lines.push('  \u003cFilesMatch \"\\\\.php$\"\u003e');\n        lines.push('    Order allow,deny');\n        lines.push('    Deny from all');\n        lines.push('  \u003c/FilesMatch\u003e');\n        lines.push('\u003c/Directory\u003e');\n      }\n      if (c('ha-dir-badbots')) {\n        lines.push('\u003cIfModule mod_rewrite.c\u003e');\n        lines.push('  RewriteEngine On');\n        lines.push('  RewriteCond %{HTTP_USER_AGENT} (SemrushBot|AhrefsBot|MJ12bot|DotBot|PetalBot) [NC]');\n        lines.push('  RewriteRule .* - [F,L]');\n        lines.push('\u003c/IfModule\u003e');\n      }\n    }\n\n    var code = document.getElementById('ha-preview-code');\n    if (code) {\n      var raw = lines.join('\\n');\n      code.innerHTML = raw.split('\\n').map(function(line) {\n        if (line.startsWith('#')) return '\u003cspan class=\"ht-comment\"\u003e' + hEsc(line) + '\u003c/span\u003e';\n        if (line.startsWith('\u003c') || line.startsWith('\u003c/')) return '\u003cspan class=\"ht-tag\"\u003e' + hEsc(line) + '\u003c/span\u003e';\n        var m = line.match(/^(\\s*\\S+)(.*)/);\n        if (!m) return hEsc(line);\n        return '\u003cspan class=\"ht-directive\"\u003e' + hEsc(m[1]) + '\u003c/span\u003e\u003cspan class=\"ht-value\"\u003e' + hEsc(m[2]) + '\u003c/span\u003e';\n      }).join('\\n');\n      code.setAttribute('data-raw', raw);\n    }\n  }\n  window.haRender = haRender;\n\n  function hEsc(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  function haCopy() {\n    var code = document.getElementById('ha-preview-code');\n    var raw = code ? code.getAttribute('data-raw') : '';\n    if (!raw) return;\n    var btn = document.getElementById('ha-copy-btn');\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(raw).then(function() {\n        btn.textContent = 'コピー完了！';\n        btn.classList.add('ha-copied');\n        setTimeout(function() { btn.textContent = 'コピー'; btn.classList.remove('ha-copied'); }, 2000);\n      });\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = raw;\n      ta.style.position = 'fixed';\n      ta.style.opacity = '0';\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      btn.textContent = 'コピー完了！';\n      btn.classList.add('ha-copied');\n      setTimeout(function() { btn.textContent = 'コピー'; btn.classList.remove('ha-copied'); }, 2000);\n    }\n  }\n  window.haCopy = haCopy;\n\n  function haDownload() {\n    var code = document.getElementById('ha-preview-code');\n    var raw = code ? code.getAttribute('data-raw') : '';\n    if (!raw) return;\n    var blob = new Blob([raw], { type: 'text/plain' });\n    var url = URL.createObjectURL(blob);\n    var a = document.createElement('a');\n    a.href = url;\n    a.download = '.htaccess';\n    a.click();\n    URL.revokeObjectURL(url);\n  }\n  window.haDownload = haDownload;\n\n  function haApplyPreset(name) {\n    var ids = ['ha-chk-redirects','ha-chk-security','ha-chk-caching','ha-chk-cors','ha-chk-gzip','ha-chk-errors','ha-chk-directory',\n               'ha-sec-xframe','ha-sec-xcontent','ha-sec-xss','ha-sec-referrer','ha-sec-hsts','ha-sec-csp','ha-sec-serverhide',\n               'ha-cache-images','ha-cache-css','ha-cache-fonts','ha-cache-html','ha-cache-etag',\n               'ha-cors-methods','ha-cors-headers','ha-cors-fonts-only',\n               'ha-gzip-html','ha-gzip-css','ha-gzip-fonts','ha-gzip-json',\n               'ha-dir-noindex','ha-dir-followlinks','ha-dir-blockdotfiles','ha-dir-blockphp','ha-dir-badbots'];\n    function setChk(id, val) { var el = document.getElementById(id); if (el) el.checked = val; }\n    function setVal(id, val) { var el = document.getElementById(id); if (el) el.value = val; }\n    ids.forEach(function(id) { setChk(id, false); });\n    haRedirects = [];\n    if (name === 'reset') { haRedirects = [{ src: '', dst: '' }]; haRenderRedirectList(); haRender(); return; }\n    if (name === 'wordpress') {\n      setChk('ha-chk-security', true); setChk('ha-chk-gzip', true); setChk('ha-chk-caching', true); setChk('ha-chk-directory', true);\n      setChk('ha-sec-xframe', true); setChk('ha-sec-xcontent', true); setChk('ha-sec-xss', true); setChk('ha-sec-serverhide', true);\n      setChk('ha-gzip-html', true); setChk('ha-gzip-css', true); setChk('ha-gzip-fonts', true); setChk('ha-gzip-json', true);\n      setChk('ha-cache-images', true); setChk('ha-cache-css', true); setChk('ha-cache-fonts', true);\n      setChk('ha-dir-noindex', true); setChk('ha-dir-blockdotfiles', true); setChk('ha-dir-blockphp', true);\n    } else if (name === 'static') {\n      setChk('ha-chk-security', true); setChk('ha-chk-gzip', true); setChk('ha-chk-caching', true); setChk('ha-chk-errors', true);\n      setChk('ha-sec-xframe', true); setChk('ha-sec-xcontent', true); setChk('ha-sec-xss', true); setChk('ha-sec-referrer', true); setChk('ha-sec-serverhide', true);\n      setChk('ha-gzip-html', true); setChk('ha-gzip-css', true); setChk('ha-gzip-fonts', true);\n      setChk('ha-cache-images', true); setChk('ha-cache-css', true); setChk('ha-cache-fonts', true);\n      setVal('ha-err-404', '/404.html'); setVal('ha-err-500', '/500.html');\n    } else if (name === 'https') {\n      setChk('ha-chk-redirects', true); setChk('ha-chk-security', true);\n      setChk('ha-sec-hsts', true); setChk('ha-sec-xframe', true); setChk('ha-sec-xcontent', true);\n      haRedirects = [{ src: 'http://example.com', dst: 'https://example.com' }];\n    } else if (name === 'bots') {\n      setChk('ha-chk-directory', true); setChk('ha-dir-badbots', true); setChk('ha-dir-noindex', true); setChk('ha-dir-blockdotfiles', true);\n    } else if (name === 'cache') {\n      setChk('ha-chk-caching', true); setChk('ha-chk-gzip', true);\n      setChk('ha-cache-images', true); setChk('ha-cache-css', true); setChk('ha-cache-fonts', true);\n      setChk('ha-gzip-html', true); setChk('ha-gzip-css', true); setChk('ha-gzip-fonts', true); setChk('ha-gzip-json', true);\n    }\n    var secMap = { wordpress: ['security','caching','gzip','directory'], static: ['security','caching','gzip','errors'],\n                   https: ['redirects','security'], bots: ['directory'], cache: ['caching','gzip'] };\n    Object.keys(haOpenSections).forEach(function(k) { haOpenSections[k] = false; });\n    (secMap[name] || []).forEach(function(k) { haOpenSections[k] = true; });\n    Object.keys(haOpenSections).forEach(function(k) {\n      var body = document.getElementById('ha-body-' + k);\n      var chev = document.getElementById('ha-chev-' + k);\n      if (body) body.classList.toggle('ha-hidden', !haOpenSections[k]);\n      if (chev) chev.textContent = haOpenSections[k] ? '▼' : '▶';\n    });\n    haRenderRedirectList();\n    haRender();\n  }\n  window.haApplyPreset = haApplyPreset;\n\n  document.addEventListener('DOMContentLoaded', function() {\n    haRenderRedirectList();\n    haRender();\n  });\n  if (document.readyState !== 'loading') {\n    haRenderRedirectList();\n    haRender();\n  }\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch3 id=\"関連ツール\"\u003e関連ツール\u003c/h3\u003e\n\u003cblockquote\u003e\n\u003cp\u003erobots.txtを生成 → \u003ca href=\"https://productivity-works.com/ja/tools/robots-txt-generator/\"\u003eRobots.txtジェネレーター\u003c/a\u003e\n\u003c/p\u003e","title":".htaccess ジェネレーター — 無料オンラインツール"},{"content":" SVGパスエディター パスデータ（d属性）\n\u0026lt;span class=\u0026quot;svg-presets-label\u0026quot;\u0026gt;図形プリセット\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;svg-presets-grid\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;svg-preset-btn\u0026quot; data-shape=\u0026quot;circle\u0026quot;\u0026gt;円\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;svg-preset-btn\u0026quot; data-shape=\u0026quot;star\u0026quot;\u0026gt;星\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;svg-preset-btn\u0026quot; data-shape=\u0026quot;heart\u0026quot;\u0026gt;ハート\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;svg-preset-btn\u0026quot; data-shape=\u0026quot;arrow\u0026quot;\u0026gt;矢印\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;svg-preset-btn\u0026quot; data-shape=\u0026quot;checkmark\u0026quot;\u0026gt;チェック\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;svg-preset-btn\u0026quot; data-shape=\u0026quot;xmark\u0026quot;\u0026gt;バツ印\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;svg-preset-btn\u0026quot; data-shape=\u0026quot;triangle\u0026quot;\u0026gt;三角形\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;svg-preset-btn\u0026quot; data-shape=\u0026quot;hexagon\u0026quot;\u0026gt;六角形\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-panel svg-section-sep\u0026quot;\u0026gt; \u0026lt;p class=\u0026quot;svg-panel-title\u0026quot;\u0026gt;ストローク・塗り\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;svg-controls-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;svg-control-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;線の色\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;svg-stroke-color\u0026quot; value=\u0026quot;#e63946\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-control-group\u0026quot; style=\u0026quot;flex:1;min-width:100px;\u0026quot;\u0026gt; \u0026lt;label\u0026gt;線の太さ\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;svg-stroke-width\u0026quot; value=\u0026quot;2\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;20\u0026quot; step=\u0026quot;0.5\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-control-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;塗りの色\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;svg-fill-color\u0026quot; value=\u0026quot;#ffb3b8\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-control-group\u0026quot; style=\u0026quot;flex:1;min-width:80px;\u0026quot;\u0026gt; \u0026lt;label\u0026gt;塗り透明度\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;svg-fill-opacity\u0026quot; value=\u0026quot;0.3\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;1\u0026quot; step=\u0026quot;0.05\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-panel svg-section-sep\u0026quot;\u0026gt; \u0026lt;p class=\u0026quot;svg-panel-title\u0026quot;\u0026gt;拡縮・移動\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;svg-transform-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;svg-control-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;スケールX\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;svg-scale-x\u0026quot; value=\u0026quot;1\u0026quot; min=\u0026quot;0.1\u0026quot; max=\u0026quot;10\u0026quot; step=\u0026quot;0.1\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-control-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;スケールY\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;svg-scale-y\u0026quot; value=\u0026quot;1\u0026quot; min=\u0026quot;0.1\u0026quot; max=\u0026quot;10\u0026quot; step=\u0026quot;0.1\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-control-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;移動X\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;svg-translate-x\u0026quot; value=\u0026quot;0\u0026quot; step=\u0026quot;1\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-control-group\u0026quot;\u0026gt; \u0026lt;label\u0026gt;移動Y\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;svg-translate-y\u0026quot; value=\u0026quot;0\u0026quot; step=\u0026quot;1\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; プレビュー\nライト ダーク チェッカー \u0026lt;div class=\u0026quot;svg-info-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;svg-info-grid\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;svg-info-item\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;svg-info-key\u0026quot;\u0026gt;コマンド数\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;svg-info-val\u0026quot; id=\u0026quot;info-commands\u0026quot;\u0026gt;—\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-info-item\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;svg-info-key\u0026quot;\u0026gt;パス長\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;svg-info-val\u0026quot; id=\u0026quot;info-length\u0026quot;\u0026gt;—\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-info-item\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;svg-info-key\u0026quot;\u0026gt;バウンディングボックス\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;svg-info-val\u0026quot; id=\u0026quot;info-bbox\u0026quot;\u0026gt;—\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-info-item\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;svg-info-key\u0026quot;\u0026gt;データサイズ\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;svg-info-val\u0026quot; id=\u0026quot;info-size\u0026quot;\u0026gt;—\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-panel svg-section-sep\u0026quot;\u0026gt; \u0026lt;p class=\u0026quot;svg-panel-title\u0026quot;\u0026gt;出力・アクション\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;svg-actions-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;svg-action-btn\u0026quot; id=\u0026quot;svg-btn-minify\u0026quot;\u0026gt;圧縮\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;svg-action-btn\u0026quot; id=\u0026quot;svg-btn-prettify\u0026quot;\u0026gt;整形\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;svg-action-btn primary\u0026quot; id=\u0026quot;svg-btn-copy-svg\u0026quot;\u0026gt;SVGコードをコピー\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;svg-action-btn success\u0026quot; id=\u0026quot;svg-btn-copy-path\u0026quot;\u0026gt;パスデータをコピー\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;svg-action-btn\u0026quot; id=\u0026quot;svg-btn-reset\u0026quot;\u0026gt;リセット\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;svg-output-area\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;svg-output-label\u0026quot;\u0026gt;生成されたSVGコード\u0026lt;/div\u0026gt; \u0026lt;textarea id=\u0026quot;svg-output-code\u0026quot; readonly\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; コピーしました！ 関連ツール CSSグラデーションを生成 → CSSグラデーションジェネレーター カラーパレットを生成 → カラーパレットジェネレーター ファビコンを作成 → ファビコンジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/svg-path-editor/","summary":"\u003cdiv id=\"svg-app\"\u003e\n\u003cstyle\u003e\n#svg-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", \"Segoe UI\", Roboto, sans-serif;\n  max-width: 960px;\n  margin: 0 auto;\n  color: #1a1a1a;\n}\n#svg-app * {\n  box-sizing: border-box;\n}\n#svg-app h2.svg-tool-title {\n  font-size: 1.4rem;\n  font-weight: 700;\n  margin: 0 0 1rem 0;\n  color: #111;\n}\n#svg-app .svg-layout {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1.25rem;\n  align-items: start;\n}\n@media (max-width: 680px) {\n  #svg-app .svg-layout {\n    grid-template-columns: 1fr;\n  }\n}\n#svg-app .svg-panel {\n  background: #f8f9fa;\n  border: 1px solid #dee2e6;\n  border-radius: 10px;\n  padding: 1rem;\n}\n#svg-app .svg-panel-title {\n  font-size: 0.78rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #6c757d;\n  margin: 0 0 0.6rem 0;\n}\n#svg-app textarea#svg-path-input {\n  width: 100%;\n  height: 120px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.82rem;\n  line-height: 1.5;\n  border: 1px solid #ced4da;\n  border-radius: 6px;\n  padding: 0.55rem 0.7rem;\n  resize: vertical;\n  background: #fff;\n  color: #212529;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#svg-app textarea#svg-path-input:focus {\n  border-color: #e63946;\n  box-shadow: 0 0 0 3px rgba(230,57,70,0.15);\n}\n#svg-app .svg-presets-label {\n  font-size: 0.78rem;\n  font-weight: 600;\n  color: #495057;\n  margin: 0.75rem 0 0.4rem 0;\n  display: block;\n}\n#svg-app .svg-presets-grid {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.35rem;\n}\n#svg-app .svg-preset-btn {\n  background: #fff;\n  border: 1px solid #ced4da;\n  border-radius: 5px;\n  padding: 0.28rem 0.65rem;\n  font-size: 0.78rem;\n  cursor: pointer;\n  color: #343a40;\n  transition: all 0.15s;\n  line-height: 1.4;\n}\n#svg-app .svg-preset-btn:hover {\n  background: #e63946;\n  color: #fff;\n  border-color: #e63946;\n}\n#svg-app .svg-controls-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin-top: 0.75rem;\n  align-items: flex-end;\n}\n#svg-app .svg-control-group {\n  display: flex;\n  flex-direction: column;\n  gap: 0.25rem;\n  min-width: 70px;\n}\n#svg-app .svg-control-group label {\n  font-size: 0.72rem;\n  font-weight: 600;\n  color: #6c757d;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#svg-app .svg-control-group input[type=\"number\"],\n#svg-app .svg-control-group input[type=\"range\"] {\n  border: 1px solid #ced4da;\n  border-radius: 5px;\n  padding: 0.3rem 0.4rem;\n  font-size: 0.82rem;\n  background: #fff;\n  color: #212529;\n  outline: none;\n  width: 100%;\n}\n#svg-app .svg-control-group input[type=\"number\"]:focus {\n  border-color: #e63946;\n  box-shadow: 0 0 0 3px rgba(230,57,70,0.15);\n}\n#svg-app .svg-control-group input[type=\"color\"] {\n  border: 1px solid #ced4da;\n  border-radius: 5px;\n  padding: 0.15rem;\n  height: 34px;\n  width: 48px;\n  background: #fff;\n  cursor: pointer;\n}\n#svg-app .svg-preview-wrap {\n  position: relative;\n  border-radius: 8px;\n  overflow: hidden;\n  border: 1px solid #ced4da;\n  min-height: 260px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: #fff;\n  transition: background 0.2s;\n}\n#svg-app .svg-preview-wrap.dark-bg {\n  background: #1a1a2e;\n}\n#svg-app .svg-preview-wrap.checker-bg {\n  background-image:\n    linear-gradient(45deg, #ccc 25%, transparent 25%),\n    linear-gradient(-45deg, #ccc 25%, transparent 25%),\n    linear-gradient(45deg, transparent 75%, #ccc 75%),\n    linear-gradient(-45deg, transparent 75%, #ccc 75%);\n  background-size: 16px 16px;\n  background-position: 0 0, 0 8px, 8px -8px, -8px 0px;\n  background-color: #fff;\n}\n#svg-app svg#svg-preview {\n  max-width: 100%;\n  max-height: 280px;\n  display: block;\n}\n#svg-app .svg-preview-error {\n  color: #dc3545;\n  font-size: 0.82rem;\n  padding: 0.5rem;\n  text-align: center;\n}\n#svg-app .svg-bg-toggles {\n  display: flex;\n  gap: 0.4rem;\n  margin-bottom: 0.6rem;\n  flex-wrap: wrap;\n}\n#svg-app .svg-bg-btn {\n  border: 1px solid #ced4da;\n  border-radius: 5px;\n  padding: 0.22rem 0.6rem;\n  font-size: 0.75rem;\n  cursor: pointer;\n  background: #fff;\n  color: #343a40;\n  transition: all 0.15s;\n}\n#svg-app .svg-bg-btn.active {\n  background: #e63946;\n  color: #fff;\n  border-color: #e63946;\n}\n#svg-app .svg-info-box {\n  margin-top: 0.75rem;\n  background: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 6px;\n  padding: 0.6rem 0.8rem;\n}\n#svg-app .svg-info-grid {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 0.3rem 1rem;\n}\n#svg-app .svg-info-item {\n  display: flex;\n  flex-direction: column;\n}\n#svg-app .svg-info-key {\n  font-size: 0.7rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  color: #6c757d;\n  letter-spacing: 0.05em;\n}\n#svg-app .svg-info-val {\n  font-size: 0.82rem;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  color: #212529;\n}\n#svg-app .svg-actions-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.45rem;\n  margin-top: 0.75rem;\n}\n#svg-app .svg-action-btn {\n  padding: 0.4rem 0.85rem;\n  font-size: 0.82rem;\n  font-weight: 600;\n  border-radius: 6px;\n  border: 1px solid #ced4da;\n  cursor: pointer;\n  background: #fff;\n  color: #343a40;\n  transition: all 0.15s;\n}\n#svg-app .svg-action-btn:hover {\n  background: #e63946;\n  color: #fff;\n  border-color: #e63946;\n}\n#svg-app .svg-action-btn.primary {\n  background: #e63946;\n  color: #fff;\n  border-color: #e63946;\n}\n#svg-app .svg-action-btn.primary:hover {\n  background: #c1121f;\n  border-color: #c1121f;\n}\n#svg-app .svg-action-btn.success {\n  background: #2d9e6b;\n  color: #fff;\n  border-color: #2d9e6b;\n}\n#svg-app .svg-action-btn.success:hover {\n  background: #237a53;\n  border-color: #237a53;\n}\n#svg-app .svg-output-area {\n  margin-top: 1rem;\n}\n#svg-app .svg-output-label {\n  font-size: 0.78rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #6c757d;\n  margin-bottom: 0.4rem;\n}\n#svg-app textarea#svg-output-code {\n  width: 100%;\n  height: 90px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.78rem;\n  line-height: 1.5;\n  border: 1px solid #ced4da;\n  border-radius: 6px;\n  padding: 0.5rem 0.65rem;\n  resize: vertical;\n  background: #f1f3f5;\n  color: #212529;\n  outline: none;\n}\n#svg-app .svg-toast {\n  position: fixed;\n  bottom: 1.5rem;\n  right: 1.5rem;\n  background: #212529;\n  color: #fff;\n  padding: 0.55rem 1.1rem;\n  border-radius: 8px;\n  font-size: 0.85rem;\n  font-weight: 500;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 0.25s;\n  z-index: 9999;\n}\n#svg-app .svg-toast.show {\n  opacity: 1;\n}\n#svg-app .svg-section-sep {\n  margin: 1.25rem 0 0 0;\n}\n#svg-app .svg-transform-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr 1fr;\n  gap: 0.5rem;\n  margin-top: 0.5rem;\n}\n@media (max-width: 480px) {\n  #svg-app .svg-transform-row {\n    grid-template-columns: 1fr 1fr;\n  }\n  #svg-app .svg-info-grid {\n    grid-template-columns: 1fr;\n  }\n}\n\u003c/style\u003e\n\u003ch2 class=\"svg-tool-title\"\u003eSVGパスエディター\u003c/h2\u003e\n\u003cdiv class=\"svg-layout\"\u003e\n  \u003c!-- 左: 入力・コントロール --\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"svg-panel\"\u003e\n      \u003cp class=\"svg-panel-title\"\u003eパスデータ（d属性）\u003c/p\u003e","title":"SVGパスエディター — 無料ビジュアルツール"},{"content":"APA・MLA・Chicago・Harvard形式の参考文献を自動生成。書籍・雑誌論文・Webサイト・学会論文に対応。レポートや卒論の参考文献リストをかんたんに作成できます。\n引用文献を作成 参考文献リスト 資料の種類 書籍 雑誌論文 Webサイト 学会論文 引用スタイル APA 第7版 MLA 第9版 Chicago 第17版 Harvard \u0026lt;!-- 著者 --\u0026gt; \u0026lt;div class=\u0026quot;cg-section\u0026quot;\u0026gt; \u0026lt;label style=\u0026quot;font-size:12px;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.03em;\u0026quot;\u0026gt;著者\u0026lt;/label\u0026gt; \u0026lt;div id=\u0026quot;cg-authors\u0026quot; style=\u0026quot;margin-top:6px;\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;cg-btn cg-btn-secondary cg-btn-sm\u0026quot; id=\u0026quot;cg-add-author\u0026quot; style=\u0026quot;margin-top:6px;\u0026quot;\u0026gt;+ 著者を追加\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;hr class=\u0026quot;cg-divider\u0026quot;\u0026gt; \u0026lt;!-- 基本情報 --\u0026gt; \u0026lt;div class=\u0026quot;cg-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;タイトル\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-title\u0026quot; placeholder=\u0026quot;論文・書籍のタイトル\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;出版年\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-year\u0026quot; placeholder=\u0026quot;2024\u0026quot; maxlength=\u0026quot;4\u0026quot; style=\u0026quot;max-width:120px;\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot; id=\u0026quot;cg-field-publisher\u0026quot;\u0026gt; \u0026lt;label\u0026gt;出版社\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-publisher\u0026quot; placeholder=\u0026quot;出版社名\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot; id=\u0026quot;cg-field-place\u0026quot;\u0026gt; \u0026lt;label\u0026gt;出版地\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-place\u0026quot; placeholder=\u0026quot;東京\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-row\u0026quot; id=\u0026quot;cg-row-journal\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;雑誌名\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-journal\u0026quot; placeholder=\u0026quot;Nature, Science など\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot; style=\u0026quot;max-width:100px;\u0026quot;\u0026gt; \u0026lt;label\u0026gt;巻 (Volume)\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-volume\u0026quot; placeholder=\u0026quot;12\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot; style=\u0026quot;max-width:100px;\u0026quot;\u0026gt; \u0026lt;label\u0026gt;号 (Issue)\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-issue\u0026quot; placeholder=\u0026quot;3\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot; style=\u0026quot;max-width:130px;\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ページ\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-pages\u0026quot; placeholder=\u0026quot;45–67\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-row\u0026quot; id=\u0026quot;cg-row-conference\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;学会名\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-conference\u0026quot; placeholder=\u0026quot;Proceedings of ...\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;開催地\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-conf-location\u0026quot; placeholder=\u0026quot;大阪\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;DOI\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-doi\u0026quot; placeholder=\u0026quot;10.1000/xyz123\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot; id=\u0026quot;cg-field-url\u0026quot;\u0026gt; \u0026lt;label\u0026gt;URL\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-url\u0026quot; placeholder=\u0026quot;https://example.com\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-row\u0026quot; id=\u0026quot;cg-row-access\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;アクセス日\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-access-date\u0026quot; placeholder=\u0026quot;2025年5月16日\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;サイト名\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-site-name\u0026quot; placeholder=\u0026quot;NHK News Web\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;hr class=\u0026quot;cg-divider\u0026quot;\u0026gt; \u0026lt;!-- プレビュー --\u0026gt; \u0026lt;h2\u0026gt;引用文献プレビュー\u0026lt;/h2\u0026gt; \u0026lt;div class=\u0026quot;cg-preview-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cg-preview-label\u0026quot;\u0026gt;参考文献リスト\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-preview-text\u0026quot; id=\u0026quot;cg-preview-ref\u0026quot;\u0026gt;上のフィールドを入力すると引用文献が生成されます。\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-intext\u0026quot; id=\u0026quot;cg-preview-intext\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt; \u0026lt;strong\u0026gt;本文中引用：\u0026lt;/strong\u0026gt; \u0026lt;span id=\u0026quot;cg-intext-text\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cg-copy-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;cg-btn cg-btn-primary\u0026quot; id=\u0026quot;cg-copy-ref\u0026quot;\u0026gt;参考文献をコピー\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cg-btn cg-btn-secondary\u0026quot; id=\u0026quot;cg-copy-intext\u0026quot;\u0026gt;本文引用をコピー\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cg-btn cg-btn-secondary\u0026quot; id=\u0026quot;cg-add-to-bib\u0026quot;\u0026gt;リストに追加\u0026lt;/button\u0026gt; \u0026lt;span class=\u0026quot;cg-toast\u0026quot; id=\u0026quot;cg-toast\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; 参考文献リスト 50音順に並べ替え テキストで書き出し すべて削除 まだ引用文献がありません。「リストに追加」で追加してください。 研究費・学会費の管理もかんたんに\nfreee会計なら、研究費用・書籍購入費の経費管理もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール：\n文字数カウント → 文字数カウンター 読了時間を計算 → 読了時間計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/citation-generator/","summary":"\u003cp\u003eAPA・MLA・Chicago・Harvard形式の参考文献を自動生成。書籍・雑誌論文・Webサイト・学会論文に対応。レポートや卒論の参考文献リストをかんたんに作成できます。\u003c/p\u003e\n\u003cdiv id=\"cg-app\"\u003e\n\u003cstyle\u003e\n#cg-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Noto Sans JP\", sans-serif;\n  max-width: 820px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#cg-app * { box-sizing: border-box; }\n#cg-app h2 {\n  font-size: 1.15rem;\n  font-weight: 700;\n  margin: 0 0 12px;\n  color: #0f172a;\n}\n#cg-app .cg-row {\n  display: flex;\n  gap: 12px;\n  flex-wrap: wrap;\n  margin-bottom: 14px;\n}\n#cg-app .cg-field {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  flex: 1;\n  min-width: 180px;\n}\n#cg-app .cg-field label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #475569;\n  text-transform: uppercase;\n  letter-spacing: .03em;\n}\n#cg-app .cg-field input,\n#cg-app .cg-field select {\n  padding: 8px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 14px;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n  transition: border-color .15s;\n  width: 100%;\n}\n#cg-app .cg-field input:focus,\n#cg-app .cg-field select:focus {\n  border-color: #6366f1;\n}\n#cg-app .cg-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px 22px;\n  margin-bottom: 18px;\n}\n#cg-app .cg-author-row {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n  margin-bottom: 8px;\n}\n#cg-app .cg-author-row input {\n  flex: 1;\n  padding: 8px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 14px;\n  color: #1e293b;\n  outline: none;\n  transition: border-color .15s;\n}\n#cg-app .cg-author-row input:focus { border-color: #6366f1; }\n#cg-app .cg-btn {\n  padding: 8px 16px;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background .15s, transform .1s;\n}\n#cg-app .cg-btn:active { transform: scale(.97); }\n#cg-app .cg-btn-primary {\n  background: #6366f1;\n  color: #fff;\n}\n#cg-app .cg-btn-primary:hover { background: #4f46e5; }\n#cg-app .cg-btn-secondary {\n  background: #e2e8f0;\n  color: #334155;\n}\n#cg-app .cg-btn-secondary:hover { background: #cbd5e1; }\n#cg-app .cg-btn-danger {\n  background: #fee2e2;\n  color: #dc2626;\n  padding: 8px 10px;\n}\n#cg-app .cg-btn-danger:hover { background: #fecaca; }\n#cg-app .cg-btn-sm {\n  padding: 5px 11px;\n  font-size: 12px;\n}\n#cg-app .cg-preview-box {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 9px;\n  padding: 16px 18px;\n  margin-bottom: 10px;\n}\n#cg-app .cg-preview-label {\n  font-size: 11px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: .06em;\n  color: #94a3b8;\n  margin-bottom: 6px;\n}\n#cg-app .cg-preview-text {\n  font-size: 14px;\n  line-height: 1.7;\n  color: #1e293b;\n  white-space: pre-wrap;\n  word-break: break-word;\n}\n#cg-app .cg-intext {\n  font-size: 13px;\n  color: #64748b;\n  margin-top: 8px;\n  padding: 9px 12px;\n  background: #f1f5f9;\n  border-radius: 7px;\n}\n#cg-app .cg-intext strong { color: #0f172a; }\n#cg-app .cg-copy-row {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n  margin-top: 10px;\n}\n#cg-app .cg-toast {\n  display: inline-block;\n  font-size: 12px;\n  color: #16a34a;\n  font-weight: 600;\n  opacity: 0;\n  transition: opacity .3s;\n  margin-left: 6px;\n  align-self: center;\n}\n#cg-app .cg-toast.show { opacity: 1; }\n#cg-app .cg-bib-list {\n  list-style: none;\n  padding: 0;\n  margin: 0 0 12px;\n}\n#cg-app .cg-bib-item {\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n  padding: 10px 0;\n  border-bottom: 1px solid #e2e8f0;\n  font-size: 13px;\n  line-height: 1.6;\n  color: #1e293b;\n  word-break: break-word;\n}\n#cg-app .cg-bib-item:last-child { border-bottom: none; }\n#cg-app .cg-bib-num {\n  font-size: 11px;\n  font-weight: 700;\n  color: #94a3b8;\n  min-width: 22px;\n  padding-top: 2px;\n}\n#cg-app .cg-bib-text { flex: 1; }\n#cg-app .cg-tabs {\n  display: flex;\n  gap: 4px;\n  margin-bottom: 16px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#cg-app .cg-tab {\n  padding: 8px 16px;\n  font-size: 13px;\n  font-weight: 600;\n  color: #64748b;\n  border: none;\n  background: none;\n  cursor: pointer;\n  border-bottom: 2px solid transparent;\n  margin-bottom: -2px;\n  border-radius: 6px 6px 0 0;\n  transition: color .15s;\n}\n#cg-app .cg-tab.active {\n  color: #6366f1;\n  border-bottom-color: #6366f1;\n}\n#cg-app .cg-tab:hover:not(.active) { color: #334155; }\n#cg-app .cg-section { margin-bottom: 6px; }\n#cg-app .cg-divider {\n  border: none;\n  border-top: 1.5px solid #e2e8f0;\n  margin: 18px 0;\n}\n#cg-app .cg-empty {\n  color: #94a3b8;\n  font-size: 13px;\n  text-align: center;\n  padding: 18px 0;\n}\n@media (max-width: 600px) {\n  #cg-app .cg-row { flex-direction: column; }\n  #cg-app .cg-field { min-width: 100%; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"cg-card\"\u003e\n  \u003cdiv class=\"cg-tabs\"\u003e\n    \u003cbutton class=\"cg-tab active\" data-tab=\"generator\"\u003e引用文献を作成\u003c/button\u003e\n    \u003cbutton class=\"cg-tab\" data-tab=\"bibliography\"\u003e参考文献リスト\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- 作成タブ --\u003e\n  \u003cdiv id=\"cg-tab-generator\"\u003e\n    \u003cdiv class=\"cg-row\"\u003e\n      \u003cdiv class=\"cg-field\"\u003e\n        \u003clabel\u003e資料の種類\u003c/label\u003e\n        \u003cselect id=\"cg-source-type\"\u003e\n          \u003coption value=\"book\"\u003e書籍\u003c/option\u003e\n          \u003coption value=\"journal\"\u003e雑誌論文\u003c/option\u003e\n          \u003coption value=\"website\"\u003eWebサイト\u003c/option\u003e\n          \u003coption value=\"conference\"\u003e学会論文\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"cg-field\"\u003e\n        \u003clabel\u003e引用スタイル\u003c/label\u003e\n        \u003cselect id=\"cg-style\"\u003e\n          \u003coption value=\"apa7\"\u003eAPA 第7版\u003c/option\u003e\n          \u003coption value=\"mla9\"\u003eMLA 第9版\u003c/option\u003e\n          \u003coption value=\"chicago17\"\u003eChicago 第17版\u003c/option\u003e\n          \u003coption value=\"harvard\"\u003eHarvard\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;!-- 著者 --\u0026gt;\n\u0026lt;div class=\u0026quot;cg-section\u0026quot;\u0026gt;\n  \u0026lt;label style=\u0026quot;font-size:12px;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.03em;\u0026quot;\u0026gt;著者\u0026lt;/label\u0026gt;\n  \u0026lt;div id=\u0026quot;cg-authors\u0026quot; style=\u0026quot;margin-top:6px;\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n  \u0026lt;button class=\u0026quot;cg-btn cg-btn-secondary cg-btn-sm\u0026quot; id=\u0026quot;cg-add-author\u0026quot; style=\u0026quot;margin-top:6px;\u0026quot;\u0026gt;+ 著者を追加\u0026lt;/button\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;hr class=\u0026quot;cg-divider\u0026quot;\u0026gt;\n\n\u0026lt;!-- 基本情報 --\u0026gt;\n\u0026lt;div class=\u0026quot;cg-row\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;タイトル\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-title\u0026quot; placeholder=\u0026quot;論文・書籍のタイトル\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;出版年\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-year\u0026quot; placeholder=\u0026quot;2024\u0026quot; maxlength=\u0026quot;4\u0026quot; style=\u0026quot;max-width:120px;\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;cg-row\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot; id=\u0026quot;cg-field-publisher\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;出版社\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-publisher\u0026quot; placeholder=\u0026quot;出版社名\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot; id=\u0026quot;cg-field-place\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;出版地\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-place\u0026quot; placeholder=\u0026quot;東京\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;cg-row\u0026quot; id=\u0026quot;cg-row-journal\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;雑誌名\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-journal\u0026quot; placeholder=\u0026quot;Nature, Science など\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot; style=\u0026quot;max-width:100px;\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;巻 (Volume)\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-volume\u0026quot; placeholder=\u0026quot;12\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot; style=\u0026quot;max-width:100px;\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;号 (Issue)\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-issue\u0026quot; placeholder=\u0026quot;3\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot; style=\u0026quot;max-width:130px;\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;ページ\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-pages\u0026quot; placeholder=\u0026quot;45–67\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;cg-row\u0026quot; id=\u0026quot;cg-row-conference\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;学会名\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-conference\u0026quot; placeholder=\u0026quot;Proceedings of ...\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;開催地\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-conf-location\u0026quot; placeholder=\u0026quot;大阪\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;cg-row\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;DOI\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-doi\u0026quot; placeholder=\u0026quot;10.1000/xyz123\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot; id=\u0026quot;cg-field-url\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;URL\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-url\u0026quot; placeholder=\u0026quot;https://example.com\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;cg-row\u0026quot; id=\u0026quot;cg-row-access\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;アクセス日\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-access-date\u0026quot; placeholder=\u0026quot;2025年5月16日\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-field\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;サイト名\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;cg-site-name\u0026quot; placeholder=\u0026quot;NHK News Web\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;hr class=\u0026quot;cg-divider\u0026quot;\u0026gt;\n\n\u0026lt;!-- プレビュー --\u0026gt;\n\u0026lt;h2\u0026gt;引用文献プレビュー\u0026lt;/h2\u0026gt;\n\u0026lt;div class=\u0026quot;cg-preview-box\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-preview-label\u0026quot;\u0026gt;参考文献リスト\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cg-preview-text\u0026quot; id=\u0026quot;cg-preview-ref\u0026quot;\u0026gt;上のフィールドを入力すると引用文献が生成されます。\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u0026lt;div class=\u0026quot;cg-intext\u0026quot; id=\u0026quot;cg-preview-intext\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt;\n  \u0026lt;strong\u0026gt;本文中引用：\u0026lt;/strong\u0026gt; \u0026lt;span id=\u0026quot;cg-intext-text\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;cg-copy-row\u0026quot;\u0026gt;\n  \u0026lt;button class=\u0026quot;cg-btn cg-btn-primary\u0026quot; id=\u0026quot;cg-copy-ref\u0026quot;\u0026gt;参考文献をコピー\u0026lt;/button\u0026gt;\n  \u0026lt;button class=\u0026quot;cg-btn cg-btn-secondary\u0026quot; id=\u0026quot;cg-copy-intext\u0026quot;\u0026gt;本文引用をコピー\u0026lt;/button\u0026gt;\n  \u0026lt;button class=\u0026quot;cg-btn cg-btn-secondary\u0026quot; id=\u0026quot;cg-add-to-bib\u0026quot;\u0026gt;リストに追加\u0026lt;/button\u0026gt;\n  \u0026lt;span class=\u0026quot;cg-toast\u0026quot; id=\u0026quot;cg-toast\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- 参考文献リストタブ --\u003e\n  \u003cdiv id=\"cg-tab-bibliography\" style=\"display:none;\"\u003e\n    \u003cdiv style=\"display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;flex-wrap:wrap;gap:8px;\"\u003e\n      \u003ch2 style=\"margin:0;\"\u003e参考文献リスト\u003c/h2\u003e\n      \u003cdiv style=\"display:flex;gap:8px;flex-wrap:wrap;\"\u003e\n        \u003cbutton class=\"cg-btn cg-btn-secondary cg-btn-sm\" id=\"cg-sort-alpha\"\u003e50音順に並べ替え\u003c/button\u003e\n        \u003cbutton class=\"cg-btn cg-btn-secondary cg-btn-sm\" id=\"cg-export-txt\"\u003eテキストで書き出し\u003c/button\u003e\n        \u003cbutton class=\"cg-btn cg-btn-danger cg-btn-sm\" id=\"cg-clear-bib\"\u003eすべて削除\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cul class=\"cg-bib-list\" id=\"cg-bib-list\"\u003e\n      \u003cli class=\"cg-empty\" id=\"cg-bib-empty\"\u003eまだ引用文献がありません。「リストに追加」で追加してください。\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cg-freee-cta\" style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n    \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e研究費・学会費の管理もかんたんに\u003c/p\u003e","title":"引用文献ジェネレーター"},{"content":"グラデーションボーダーを数秒で作成。色・方向・幅・角丸を自由にカスタマイズして、すぐに使えるCSSコードをコピーできます。外部ライブラリ不要・登録不要。\nプレビュー カラーストップ ＋ カラーストップを追加 グラデーションの方向 ↑ 0° ↗ 45° → 90° ↘ 135° ↓ 180° ↙ 225° ← 270° ↖ 315° カスタム角度 ° ボーダー設定 ボーダー幅 3px 角丸（radius） 12px パディング 20px CSSの実装方法 background-clip（推奨） border-image background-clip: padding-box を使用。角丸（border-radius）対応で全ブラウザで動作します。\nプリセット 生成されたCSS CSSをコピー 関連ツール CSSグラデーションジェネレーター ボーダーラジアスジェネレーター CSSアニメーションジェネレーター 使い方 色を選ぶ — カラースウォッチをクリックしてカラーピッカーを開くか、HEXコードを直接入力します。「＋ カラーストップを追加」ボタンで最大5色まで追加でき、×ボタンで削除できます（最低2色は必須）。\n位置を調整する — 各カラーストップの横にあるスライダーで、グラデーション内での色の開始位置（0〜100%）を指定します。\n方向を決める — 8方向のプリセットボタン（0°・45°・90°など）から選ぶか、カスタム角度スライダーで0〜360°を自由に設定します。\nボーダーを設定する — スライダーでボーダー幅（1〜10px）・角丸（0〜50px）・パディングを調整します。\nCSSの実装方法を選ぶ — 2種類の実装方法から選択できます：\nbackground-clip（推奨）：外側の要素にグラデーション背景を設定し、内側の要素で白背景を重ねる手法。角丸対応で全ブラウザで動作します。 border-image：1要素のみのシンプルな実装ですが、border-radiusには非対応です。 プリセットを適用する — プリセットギャラリーのタイルをクリックするだけで即適用されます。夕焼け・海・桜・炎など日本語名のカラーセットを12種収録。\nCSSをコピーする — 「CSSをコピー」ボタンを押してクリップボードにコピーし、スタイルシートに貼り付けるだけです。\nCSSグラデーションボーダーの実装方法 background-clip を使う方法（推奨） 角丸にも対応した最も汎用性の高いアプローチです。外側の要素にグラデーション背景と border-radius を設定し、内側の要素で白（または任意の色）背景を重ねます：\n.gradient-border { padding: 20px; background: linear-gradient(90deg, #6366f1 0%, #ec4899 100%); border-radius: 12px; } .gradient-border-inner { background: #fff; border-radius: 9px; padding: 3px; } border-image を使う方法 HTMLが1要素で済むシンプルな手法ですが、border-radius は機能しません：\n.gradient-border { border: 3px solid transparent; border-image: linear-gradient(90deg, #6366f1 0%, #ec4899 100%) 1; } ダークモードや透過背景が必要な場合は、::before 擬似要素を使って background-clip: padding-box と組み合わせる手法もよく使われます。\nデザイン業務の会計管理にはfreee フリーランスのデザイナーやエンジニアの方、経費精算・請求書発行もfreeeでまとめて管理しませんか？ freeeを無料で試す →\n※本ページには広告リンクが含まれています。\n関連ツール Border Radius Generator → Border Radius Generatorツール Glassmorphism Generator → Glassmorphism Generatorツール Gradient Gallery → Gradient Galleryツール ","permalink":"https://productivity-works.com/ja/tools/gradient-border-generator/","summary":"\u003cp\u003eグラデーションボーダーを数秒で作成。色・方向・幅・角丸を自由にカスタマイズして、すぐに使えるCSSコードをコピーできます。外部ライブラリ不要・登録不要。\u003c/p\u003e\n\u003cdiv id=\"gb-app\"\u003e\n\u003cstyle\u003e\n#gb-app *,\n#gb-app *::before,\n#gb-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#gb-app {\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', Roboto, sans-serif;\n  max-width: 880px;\n  margin: 0 auto;\n  padding: 0 0 56px;\n  color: #1f2937;\n}\n\n/* ── Preview ────────────────────────────────────────── */\n.gb-preview-wrap {\n  background: repeating-conic-gradient(#e5e7eb 0% 25%, #fff 0% 50%) 0 0 / 20px 20px;\n  border-radius: 16px;\n  padding: 48px 32px;\n  margin-bottom: 20px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 220px;\n  box-shadow: 0 4px 24px rgba(0,0,0,0.10);\n}\n.gb-preview-box {\n  background: #fff;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 15px;\n  color: #6b7280;\n  font-weight: 500;\n  min-width: 200px;\n  min-height: 100px;\n  transition: all 0.2s;\n  word-break: break-all;\n}\n\n/* ── Cards ──────────────────────────────────────────── */\n.gb-card {\n  background: #fff;\n  border-radius: 14px;\n  box-shadow: 0 2px 16px rgba(0,0,0,0.07);\n  padding: 22px 24px;\n  margin-bottom: 16px;\n}\n.gb-card-title {\n  font-size: 12px;\n  font-weight: 700;\n  color: #374151;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  border-bottom: 2px solid #f3f4f6;\n  padding-bottom: 10px;\n  margin-bottom: 18px;\n}\n\n/* ── Color Stops ─────────────────────────────────────── */\n.gb-stops-list {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  margin-bottom: 14px;\n}\n.gb-stop-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n.gb-color-swatch {\n  width: 38px;\n  height: 38px;\n  border-radius: 8px;\n  border: 2px solid #e5e7eb;\n  cursor: pointer;\n  position: relative;\n  overflow: hidden;\n  flex-shrink: 0;\n}\n.gb-color-swatch input[type=\"color\"] {\n  position: absolute;\n  inset: -4px;\n  width: calc(100% + 8px);\n  height: calc(100% + 8px);\n  opacity: 0;\n  cursor: pointer;\n}\n.gb-color-hex {\n  width: 88px;\n  padding: 7px 10px;\n  border: 1.5px solid #e5e7eb;\n  border-radius: 8px;\n  font-size: 13px;\n  font-family: 'Menlo', 'Consolas', monospace;\n  color: #374151;\n  outline: none;\n  transition: border-color 0.15s;\n}\n.gb-color-hex:focus { border-color: #6366f1; }\n.gb-stop-label {\n  font-size: 12px;\n  color: #9ca3af;\n  width: 32px;\n  text-align: center;\n  flex-shrink: 0;\n}\n.gb-stop-percent {\n  flex: 1;\n  accent-color: #6366f1;\n}\n.gb-stop-pct-val {\n  font-size: 12px;\n  color: #6b7280;\n  width: 34px;\n  text-align: right;\n  flex-shrink: 0;\n}\n.gb-stop-remove {\n  width: 28px;\n  height: 28px;\n  border-radius: 6px;\n  border: none;\n  background: #fee2e2;\n  color: #ef4444;\n  font-size: 16px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  transition: background 0.15s;\n  line-height: 1;\n}\n.gb-stop-remove:hover { background: #fecaca; }\n.gb-stop-remove:disabled { opacity: 0.3; cursor: default; }\n.gb-add-stop-btn {\n  padding: 8px 18px;\n  border-radius: 8px;\n  border: 1.5px dashed #c7d2fe;\n  background: #eef2ff;\n  color: #6366f1;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n.gb-add-stop-btn:hover { background: #e0e7ff; }\n.gb-add-stop-btn:disabled { opacity: 0.4; cursor: default; }\n\n/* ── Direction ───────────────────────────────────────── */\n.gb-dir-row {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  flex-wrap: wrap;\n}\n.gb-dir-presets {\n  display: flex;\n  gap: 6px;\n  flex-wrap: wrap;\n}\n.gb-dir-btn {\n  padding: 6px 12px;\n  border-radius: 7px;\n  border: 1.5px solid #e5e7eb;\n  background: #f9fafb;\n  color: #374151;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n.gb-dir-btn:hover { border-color: #a5b4fc; background: #eef2ff; }\n.gb-dir-btn.gb-active { border-color: #6366f1; background: #eef2ff; color: #4f46e5; }\n.gb-angle-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 14px;\n}\n.gb-angle-label { font-size: 13px; color: #6b7280; flex-shrink: 0; }\n.gb-angle-slider { flex: 1; accent-color: #6366f1; }\n.gb-angle-num {\n  width: 60px;\n  padding: 6px 8px;\n  border: 1.5px solid #e5e7eb;\n  border-radius: 7px;\n  font-size: 13px;\n  text-align: center;\n  outline: none;\n}\n.gb-angle-num:focus { border-color: #6366f1; }\n.gb-angle-deg { font-size: 13px; color: #9ca3af; }\n\n/* ── Sliders ─────────────────────────────────────────── */\n.gb-slider-row {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-bottom: 14px;\n}\n.gb-slider-row:last-child { margin-bottom: 0; }\n.gb-slider-label {\n  font-size: 13px;\n  color: #374151;\n  width: 110px;\n  flex-shrink: 0;\n}\n.gb-slider {\n  flex: 1;\n  accent-color: #6366f1;\n}\n.gb-slider-val {\n  font-size: 13px;\n  color: #6b7280;\n  width: 44px;\n  text-align: right;\n  flex-shrink: 0;\n  font-variant-numeric: tabular-nums;\n}\n\n/* ── Technique Toggle ────────────────────────────────── */\n.gb-tech-row {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n.gb-tech-btn {\n  padding: 7px 16px;\n  border-radius: 8px;\n  border: 1.5px solid #e5e7eb;\n  background: #f9fafb;\n  color: #374151;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n.gb-tech-btn:hover { border-color: #a5b4fc; }\n.gb-tech-btn.gb-active { border-color: #6366f1; background: #eef2ff; color: #4f46e5; }\n.gb-tech-note {\n  font-size: 12px;\n  color: #9ca3af;\n  margin-top: 10px;\n  line-height: 1.5;\n}\n\n/* ── Presets ─────────────────────────────────────────── */\n.gb-presets-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));\n  gap: 10px;\n}\n.gb-preset-item {\n  border-radius: 10px;\n  height: 52px;\n  cursor: pointer;\n  border: 3px solid transparent;\n  transition: all 0.15s;\n  position: relative;\n  overflow: hidden;\n}\n.gb-preset-item:hover { transform: scale(1.06); box-shadow: 0 4px 12px rgba(0,0,0,0.15); }\n.gb-preset-item.gb-active { border-color: #6366f1; }\n.gb-preset-label {\n  position: absolute;\n  bottom: 0; left: 0; right: 0;\n  background: rgba(0,0,0,0.45);\n  color: #fff;\n  font-size: 9px;\n  text-align: center;\n  padding: 2px 4px;\n}\n\n/* ── CSS Output ──────────────────────────────────────── */\n.gb-output-wrap {\n  position: relative;\n}\n.gb-output-code {\n  display: block;\n  background: #1e1e2e;\n  color: #cdd6f4;\n  border-radius: 10px;\n  padding: 18px 20px;\n  font-family: 'Menlo', 'Consolas', monospace;\n  font-size: 13px;\n  line-height: 1.7;\n  white-space: pre-wrap;\n  word-break: break-all;\n  min-height: 80px;\n  user-select: all;\n}\n.gb-copy-btn {\n  margin-top: 12px;\n  padding: 11px 28px;\n  background: linear-gradient(135deg, #6366f1, #8b5cf6);\n  color: #fff;\n  border: none;\n  border-radius: 9px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.15s, transform 0.1s;\n  width: 100%;\n}\n.gb-copy-btn:hover { opacity: 0.9; transform: translateY(-1px); }\n.gb-copy-btn.gb-copied { background: linear-gradient(135deg, #10b981, #059669); }\n\n/* ── Related Links ───────────────────────────────────── */\n.gb-related {\n  margin-top: 28px;\n  padding-top: 22px;\n  border-top: 2px solid #f3f4f6;\n}\n.gb-related-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #374151;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  margin-bottom: 12px;\n}\n.gb-related-links {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n.gb-related-links a {\n  padding: 7px 14px;\n  background: #f3f4f6;\n  border-radius: 7px;\n  font-size: 13px;\n  color: #4f46e5;\n  text-decoration: none;\n  font-weight: 500;\n  transition: background 0.15s;\n}\n.gb-related-links a:hover { background: #e0e7ff; }\n\u003c/style\u003e\n\u003c!-- Preview --\u003e\n\u003cdiv class=\"gb-preview-wrap\"\u003e\n  \u003cdiv class=\"gb-preview-box\" id=\"gb-preview\"\u003eプレビュー\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Color Stops --\u003e\n\u003cdiv class=\"gb-card\"\u003e\n  \u003cdiv class=\"gb-card-title\"\u003eカラーストップ\u003c/div\u003e\n  \u003cdiv class=\"gb-stops-list\" id=\"gb-stops-list\"\u003e\u003c/div\u003e\n  \u003cbutton class=\"gb-add-stop-btn\" id=\"gb-add-stop\"\u003e＋ カラーストップを追加\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- Direction --\u003e\n\u003cdiv class=\"gb-card\"\u003e\n  \u003cdiv class=\"gb-card-title\"\u003eグラデーションの方向\u003c/div\u003e\n  \u003cdiv class=\"gb-dir-row\"\u003e\n    \u003cdiv class=\"gb-dir-presets\" id=\"gb-dir-presets\"\u003e\n      \u003cbutton class=\"gb-dir-btn\" data-angle=\"0\"\u003e↑ 0°\u003c/button\u003e\n      \u003cbutton class=\"gb-dir-btn\" data-angle=\"45\"\u003e↗ 45°\u003c/button\u003e\n      \u003cbutton class=\"gb-dir-btn gb-active\" data-angle=\"90\"\u003e→ 90°\u003c/button\u003e\n      \u003cbutton class=\"gb-dir-btn\" data-angle=\"135\"\u003e↘ 135°\u003c/button\u003e\n      \u003cbutton class=\"gb-dir-btn\" data-angle=\"180\"\u003e↓ 180°\u003c/button\u003e\n      \u003cbutton class=\"gb-dir-btn\" data-angle=\"225\"\u003e↙ 225°\u003c/button\u003e\n      \u003cbutton class=\"gb-dir-btn\" data-angle=\"270\"\u003e← 270°\u003c/button\u003e\n      \u003cbutton class=\"gb-dir-btn\" data-angle=\"315\"\u003e↖ 315°\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"gb-angle-row\"\u003e\n    \u003cspan class=\"gb-angle-label\"\u003eカスタム角度\u003c/span\u003e\n    \u003cinput type=\"range\" class=\"gb-angle-slider\" id=\"gb-angle-slider\" min=\"0\" max=\"360\" value=\"90\"\u003e\n    \u003cinput type=\"number\" class=\"gb-angle-num\" id=\"gb-angle-num\" min=\"0\" max=\"360\" value=\"90\"\u003e\n    \u003cspan class=\"gb-angle-deg\"\u003e°\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Border Controls --\u003e\n\u003cdiv class=\"gb-card\"\u003e\n  \u003cdiv class=\"gb-card-title\"\u003eボーダー設定\u003c/div\u003e\n  \u003cdiv class=\"gb-slider-row\"\u003e\n    \u003cspan class=\"gb-slider-label\"\u003eボーダー幅\u003c/span\u003e\n    \u003cinput type=\"range\" class=\"gb-slider\" id=\"gb-border-width\" min=\"1\" max=\"10\" value=\"3\"\u003e\n    \u003cspan class=\"gb-slider-val\" id=\"gb-border-width-val\"\u003e3px\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"gb-slider-row\"\u003e\n    \u003cspan class=\"gb-slider-label\"\u003e角丸（radius）\u003c/span\u003e\n    \u003cinput type=\"range\" class=\"gb-slider\" id=\"gb-border-radius\" min=\"0\" max=\"50\" value=\"12\"\u003e\n    \u003cspan class=\"gb-slider-val\" id=\"gb-border-radius-val\"\u003e12px\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"gb-slider-row\"\u003e\n    \u003cspan class=\"gb-slider-label\"\u003eパディング\u003c/span\u003e\n    \u003cinput type=\"range\" class=\"gb-slider\" id=\"gb-padding\" min=\"8\" max=\"48\" value=\"20\"\u003e\n    \u003cspan class=\"gb-slider-val\" id=\"gb-padding-val\"\u003e20px\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Technique --\u003e\n\u003cdiv class=\"gb-card\"\u003e\n  \u003cdiv class=\"gb-card-title\"\u003eCSSの実装方法\u003c/div\u003e\n  \u003cdiv class=\"gb-tech-row\" id=\"gb-tech-row\"\u003e\n    \u003cbutton class=\"gb-tech-btn gb-active\" data-tech=\"background-clip\"\u003ebackground-clip（推奨）\u003c/button\u003e\n    \u003cbutton class=\"gb-tech-btn\" data-tech=\"border-image\"\u003eborder-image\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cp class=\"gb-tech-note\" id=\"gb-tech-note\"\u003e\u003ccode\u003ebackground-clip: padding-box\u003c/code\u003e を使用。角丸（border-radius）対応で全ブラウザで動作します。\u003c/p\u003e","title":"CSSグラデーションボーダージェネレーター"},{"content":" 使い方 幅と高さを入力してアスペクト比を計算、または比率から辺の長さを逆算。プリセット・プレビュー・比較モード付き。\n1. アスペクト比を計算する（幅 x 高さ \u0026#x2192; 比率） 幅（px） 高さ（px） アスペクト比を計算 幅と高さを入力して「計算」ボタンを押してください。 2. 比率でリサイズ（一辺 + 比率 \u0026#x2192; もう一辺） 幅（px） 高さ（px） 比率 W 比率 H 幅か高さのどちらか一方を入力し、もう一方を空欄にしてください。\nもう一辺を計算 一辺と比率を入力してください。 3. プリセットから選ぶ よく使われるアスペクト比をワンクリックで選択。プレビューに反映されます。\nプリセットを選択してください。 4. ビジュアルプレビュー 上のセクションで計算・プリセット選択した比率がここに表示されます。\nプレビュー 5. 比較モード（2つの比率を並列表示） 比率A — W 比率A — H 比率B — W 比率B — H 比較する 比率A 比率B — 比率A（簡略） — 比率B（簡略） 6. 主な解像度とアスペクト比 一覧 解像度 アスペクト比 主な用途 3840 \u0026#xd7; 216016:94K UHD 1920 \u0026#xd7; 108016:9Full HD / YouTube 1280 \u0026#xd7; 72016:9HD 1280 \u0026#xd7; 9604:3旧来のモニター・プレゼン 1024 \u0026#xd7; 7684:3XGA 2560 \u0026#xd7; 108021:9（64:27）ウルトラワイドモニター 3440 \u0026#xd7; 144021:9（43:18）ウルトラワイドQHD 1080 \u0026#xd7; 10801:1Instagram正方形 1080 \u0026#xd7; 19209:16TikTok / Instagram Stories 1080 \u0026#xd7; 13504:5Instagram縦型 6000 \u0026#xd7; 40003:2一眼レフカメラ 4032 \u0026#xd7; 30244:3スマートフォンカメラ 2560 \u0026#xd7; 160016:10MacBook / ノートPC 1366 \u0026#xd7; 76816:9一般的なラップトップ 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026#x2192; 画像をリサイズ → 画像リサイズツール CSSアスペクト比を生成 → CSSアスペクト比計算ツール ダミー画像を作成 → プレースホルダー画像生成ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/aspect-ratio-calculator/","summary":"\u003cdiv id=\"ar-app\"\u003e\n\u003cstyle\u003e\n#ar-app {\n  font-family: 'Segoe UI', 'Helvetica Neue', Arial, sans-serif;\n  max-width: 780px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#ar-app h2.ar-section-title {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #1e293b;\n  border-left: 4px solid #475569;\n  padding-left: 10px;\n  margin: 28px 0 14px;\n}\n#ar-app .ar-card {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 20px 22px;\n  margin-bottom: 20px;\n}\n#ar-app label {\n  display: block;\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 4px;\n}\n#ar-app input[type=\"number\"],\n#ar-app select {\n  width: 100%;\n  padding: 9px 12px;\n  border: 1px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 15px;\n  color: #1e293b;\n  background: #fff;\n  box-sizing: border-box;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#ar-app input[type=\"number\"]:focus,\n#ar-app select:focus {\n  border-color: #475569;\n}\n#ar-app .ar-row {\n  display: flex;\n  gap: 14px;\n  flex-wrap: wrap;\n}\n#ar-app .ar-row \u003e div {\n  flex: 1 1 120px;\n  min-width: 100px;\n}\n#ar-app .ar-btn {\n  display: inline-block;\n  padding: 10px 22px;\n  background: #334155;\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  margin-top: 12px;\n  transition: background 0.18s;\n}\n#ar-app .ar-btn:hover {\n  background: #1e293b;\n}\n#ar-app .ar-result {\n  margin-top: 14px;\n  padding: 13px 16px;\n  background: #e0f2fe;\n  border: 1px solid #bae6fd;\n  border-radius: 8px;\n  font-size: 15px;\n  color: #0c4a6e;\n  font-weight: 600;\n  min-height: 38px;\n}\n#ar-app .ar-result.error {\n  background: #fef2f2;\n  border-color: #fecaca;\n  color: #b91c1c;\n}\n#ar-app .ar-preset-grid {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 4px;\n}\n#ar-app .ar-preset-btn {\n  padding: 7px 15px;\n  background: #fff;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 20px;\n  font-size: 13px;\n  font-weight: 600;\n  color: #334155;\n  cursor: pointer;\n  transition: all 0.16s;\n}\n#ar-app .ar-preset-btn:hover,\n#ar-app .ar-preset-btn.active {\n  background: #334155;\n  color: #fff;\n  border-color: #334155;\n}\n#ar-app canvas {\n  display: block;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  background: #f1f5f9;\n  max-width: 100%;\n}\n#ar-app .ar-canvas-wrap {\n  display: flex;\n  gap: 18px;\n  flex-wrap: wrap;\n  justify-content: center;\n  margin-top: 10px;\n}\n#ar-app .ar-canvas-item {\n  text-align: center;\n  flex: 1 1 200px;\n}\n#ar-app .ar-canvas-label {\n  font-size: 12px;\n  color: #64748b;\n  margin-top: 6px;\n}\n#ar-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n  margin-top: 8px;\n}\n#ar-app th {\n  background: #e2e8f0;\n  color: #1e293b;\n  font-weight: 700;\n  padding: 8px 10px;\n  text-align: left;\n}\n#ar-app td {\n  padding: 7px 10px;\n  border-bottom: 1px solid #f1f5f9;\n  color: #334155;\n}\n#ar-app tr:nth-child(even) td {\n  background: #f8fafc;\n}\n#ar-app .ar-compare-flex {\n  display: flex;\n  gap: 18px;\n  margin-top: 14px;\n  flex-wrap: wrap;\n}\n#ar-app .ar-compare-box {\n  flex: 1 1 200px;\n  background: #f1f5f9;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 12px 14px;\n  text-align: center;\n}\n#ar-app .ar-compare-box .ar-compare-ratio {\n  font-size: 1.25rem;\n  font-weight: 800;\n  color: #1e293b;\n}\n#ar-app .ar-compare-box .ar-compare-name {\n  font-size: 12px;\n  color: #64748b;\n  margin-top: 4px;\n}\n@media (max-width: 540px) {\n  #ar-app .ar-row { flex-direction: column; }\n  #ar-app .ar-compare-flex { flex-direction: column; }\n  #ar-app .ar-canvas-wrap { flex-direction: column; align-items: center; }\n}\n\u003c/style\u003e\n\u003chr\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003cp\u003e幅と高さを入力してアスペクト比を計算、または比率から辺の長さを逆算。プリセット・プレビュー・比較モード付き。\u003c/p\u003e","title":"アスペクト比計算ツール"},{"content":"背景色を選ぶだけで、ライト・ダークシャドウを自動計算。距離・ぼかし・強度・形状を自由に調整して、CSSをワンクリックでコピーできます。登録不要・完全無料。\nソフトカード ボタン サークル 入力フィールド トグルスイッチ 設定 \u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;背景色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;nm-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;nm-bg\u0026quot; value=\u0026quot;#e0e5ec\u0026quot; oninput=\u0026quot;nmUpdate()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;nm-color-hex\u0026quot; id=\u0026quot;nm-bg-hex\u0026quot;\u0026gt;#e0e5ec\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;nm-divider\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;シャドウタイプ\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;nm-seg\u0026quot; id=\u0026quot;nm-shape-seg\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;active\u0026quot; onclick=\u0026quot;nmShape('flat',this)\u0026quot;\u0026gt;フラット\u0026lt;/button\u0026gt; \u0026lt;button onclick=\u0026quot;nmShape('concave',this)\u0026quot;\u0026gt;凹面\u0026lt;/button\u0026gt; \u0026lt;button onclick=\u0026quot;nmShape('convex',this)\u0026quot;\u0026gt;凸面\u0026lt;/button\u0026gt; \u0026lt;button onclick=\u0026quot;nmShape('pressed',this)\u0026quot;\u0026gt;押下\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;要素の形\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;nm-seg\u0026quot; id=\u0026quot;nm-el-seg\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;active\u0026quot; onclick=\u0026quot;nmElShape('card',this)\u0026quot;\u0026gt;カード\u0026lt;/button\u0026gt; \u0026lt;button onclick=\u0026quot;nmElShape('button',this)\u0026quot;\u0026gt;ボタン\u0026lt;/button\u0026gt; \u0026lt;button onclick=\u0026quot;nmElShape('circle',this)\u0026quot;\u0026gt;サークル\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;nm-divider\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;サイズ \u0026lt;span class=\u0026quot;nm-val\u0026quot; id=\u0026quot;v-size\u0026quot;\u0026gt;160px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;nm-size\u0026quot; min=\u0026quot;60\u0026quot; max=\u0026quot;300\u0026quot; value=\u0026quot;160\u0026quot; oninput=\u0026quot;nmUpdate()\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;シャドウ距離 \u0026lt;span class=\u0026quot;nm-val\u0026quot; id=\u0026quot;v-dist\u0026quot;\u0026gt;10px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;nm-dist\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;10\u0026quot; oninput=\u0026quot;nmUpdate()\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;ぼかし \u0026lt;span class=\u0026quot;nm-val\u0026quot; id=\u0026quot;v-blur\u0026quot;\u0026gt;20px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;nm-blur\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;20\u0026quot; oninput=\u0026quot;nmUpdate()\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;強度 \u0026lt;span class=\u0026quot;nm-val\u0026quot; id=\u0026quot;v-int\u0026quot;\u0026gt;0.25\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;nm-int\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;25\u0026quot; oninput=\u0026quot;nmUpdate()\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;角丸 \u0026lt;span class=\u0026quot;nm-val\u0026quot; id=\u0026quot;v-rad\u0026quot;\u0026gt;16px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;nm-rad\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;60\u0026quot; value=\u0026quot;16\u0026quot; oninput=\u0026quot;nmUpdate()\u0026quot;\u0026gt; プレビュー CSSをコピー ニューモーフィズムの仕組み ニューモーフィズム（ソフトUI）は、1つの要素から2方向のシャドウを投影することで奥行きを表現します。背景色より明るいシャドウを左上に、暗いシャドウを右下に配置するのが基本です。要素の背景色とコンテナの背景色を必ず同じ色にすることがポイントです。\n設計のコツ：\n背景色は中間的な明度が最適（極端に暗い・明るい色は不向き） 強度は 0.15〜0.30 が自然に見えるベスト範囲 押下タイプはクリック時・フォーカス時の状態に活用 凹面・凸面はグラデーションで立体感を強調 小さな要素にはニューモーフィズムの効果が出にくいため、ある程度のサイズが必要 Web制作の経費管理もかんたんに\nfreee会計なら、デザインツール・サーバー費用の経費精算もクラウドで一元管理。 freeeを無料で試す → 関連ツール グラスモーフィズム → グラスモーフィズムジェネレーター ボックスシャドウ → CSSボックスシャドウジェネレーター CSSボタン → CSSボタンジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/neumorphism-generator/","summary":"\u003cp\u003e背景色を選ぶだけで、ライト・ダークシャドウを自動計算。距離・ぼかし・強度・形状を自由に調整して、CSSをワンクリックでコピーできます。登録不要・完全無料。\u003c/p\u003e\n\u003cdiv id=\"nm-app\" style=\"font-family:system-ui,-apple-system,sans-serif;max-width:900px;margin:0 auto;color:#333;\"\u003e\n\u003cstyle\u003e\n#nm-app *,#nm-app *::before,#nm-app *::after{box-sizing:border-box;}\n#nm-app .nm-layout{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:16px;}\n@media(max-width:660px){#nm-app .nm-layout{grid-template-columns:1fr;}}\n#nm-app .nm-panel{background:#f5f5f5;border-radius:14px;padding:20px;}\n#nm-app .nm-preview-wrap{display:flex;align-items:center;justify-content:center;border-radius:14px;min-height:220px;transition:background .3s;}\n#nm-app .nm-preview-el{transition:all .3s;cursor:default;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;color:#888;letter-spacing:.04em;}\n#nm-app label.nm-label{display:block;font-size:12px;font-weight:700;color:#555;margin-bottom:4px;margin-top:14px;text-transform:uppercase;letter-spacing:.06em;}\n#nm-app label.nm-label:first-child{margin-top:0;}\n#nm-app input[type=range]{width:100%;accent-color:#6366f1;height:4px;cursor:pointer;}\n#nm-app input[type=color]{width:48px;height:32px;border:none;border-radius:6px;cursor:pointer;padding:2px;background:none;}\n#nm-app .nm-row{display:flex;align-items:center;gap:10px;}\n#nm-app .nm-val{font-size:12px;color:#6366f1;font-weight:700;min-width:36px;text-align:right;}\n#nm-app .nm-seg{display:flex;gap:6px;flex-wrap:wrap;}\n#nm-app .nm-seg button{padding:5px 12px;border-radius:6px;border:1.5px solid #ddd;background:#fff;font-size:12px;cursor:pointer;font-weight:600;color:#555;transition:all .15s;}\n#nm-app .nm-seg button.active{background:#6366f1;color:#fff;border-color:#6366f1;}\n#nm-app .nm-presets{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px;}\n#nm-app .nm-preset-btn{padding:6px 14px;border-radius:20px;border:1.5px solid #c7d2fe;background:#eef2ff;font-size:12px;cursor:pointer;font-weight:600;color:#4338ca;transition:all .15s;}\n#nm-app .nm-preset-btn:hover{background:#6366f1;color:#fff;border-color:#6366f1;}\n#nm-app .nm-code-wrap{position:relative;margin-top:16px;}\n#nm-app .nm-code{background:#1e1e2e;color:#cdd6f4;border-radius:10px;padding:16px;font-size:12.5px;font-family:'Fira Mono','Courier New',monospace;line-height:1.7;overflow-x:auto;white-space:pre;tab-size:2;}\n#nm-app .nm-code .c-prop{color:#89b4fa;}\n#nm-app .nm-code .c-val{color:#a6e3a1;}\n#nm-app .nm-code .c-punc{color:#cdd6f4;}\n#nm-app .nm-copy-btn{position:absolute;top:10px;right:10px;padding:5px 14px;background:#6366f1;color:#fff;border:none;border-radius:6px;font-size:12px;font-weight:700;cursor:pointer;transition:background .15s;}\n#nm-app .nm-copy-btn:hover{background:#4f46e5;}\n#nm-app .nm-copy-btn.copied{background:#22c55e;}\n#nm-app h3.nm-section-title{margin:0 0 12px;font-size:14px;font-weight:800;color:#4338ca;text-transform:uppercase;letter-spacing:.08em;}\n#nm-app .nm-color-row{display:flex;align-items:center;gap:10px;}\n#nm-app .nm-color-hex{font-size:13px;font-weight:700;color:#555;font-family:monospace;}\n#nm-app .nm-divider{height:1px;background:#e5e7eb;margin:14px 0;}\n\u003c/style\u003e\n\u003cdiv class=\"nm-presets\"\u003e\n  \u003cbutton class=\"nm-preset-btn\" onclick=\"nmLoadPreset('softcard')\"\u003eソフトカード\u003c/button\u003e\n  \u003cbutton class=\"nm-preset-btn\" onclick=\"nmLoadPreset('button')\"\u003eボタン\u003c/button\u003e\n  \u003cbutton class=\"nm-preset-btn\" onclick=\"nmLoadPreset('circle')\"\u003eサークル\u003c/button\u003e\n  \u003cbutton class=\"nm-preset-btn\" onclick=\"nmLoadPreset('input')\"\u003e入力フィールド\u003c/button\u003e\n  \u003cbutton class=\"nm-preset-btn\" onclick=\"nmLoadPreset('toggle')\"\u003eトグルスイッチ\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"nm-layout\"\u003e\n  \u003c!-- 左：コントロール --\u003e\n  \u003cdiv class=\"nm-panel\"\u003e\n    \u003ch3 class=\"nm-section-title\"\u003e設定\u003c/h3\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;背景色\u0026lt;/label\u0026gt;\n\u0026lt;div class=\u0026quot;nm-color-row\u0026quot;\u0026gt;\n  \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;nm-bg\u0026quot; value=\u0026quot;#e0e5ec\u0026quot; oninput=\u0026quot;nmUpdate()\u0026quot;\u0026gt;\n  \u0026lt;span class=\u0026quot;nm-color-hex\u0026quot; id=\u0026quot;nm-bg-hex\u0026quot;\u0026gt;#e0e5ec\u0026lt;/span\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;nm-divider\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n\n\u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;シャドウタイプ\u0026lt;/label\u0026gt;\n\u0026lt;div class=\u0026quot;nm-seg\u0026quot; id=\u0026quot;nm-shape-seg\u0026quot;\u0026gt;\n  \u0026lt;button class=\u0026quot;active\u0026quot; onclick=\u0026quot;nmShape('flat',this)\u0026quot;\u0026gt;フラット\u0026lt;/button\u0026gt;\n  \u0026lt;button onclick=\u0026quot;nmShape('concave',this)\u0026quot;\u0026gt;凹面\u0026lt;/button\u0026gt;\n  \u0026lt;button onclick=\u0026quot;nmShape('convex',this)\u0026quot;\u0026gt;凸面\u0026lt;/button\u0026gt;\n  \u0026lt;button onclick=\u0026quot;nmShape('pressed',this)\u0026quot;\u0026gt;押下\u0026lt;/button\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;要素の形\u0026lt;/label\u0026gt;\n\u0026lt;div class=\u0026quot;nm-seg\u0026quot; id=\u0026quot;nm-el-seg\u0026quot;\u0026gt;\n  \u0026lt;button class=\u0026quot;active\u0026quot; onclick=\u0026quot;nmElShape('card',this)\u0026quot;\u0026gt;カード\u0026lt;/button\u0026gt;\n  \u0026lt;button onclick=\u0026quot;nmElShape('button',this)\u0026quot;\u0026gt;ボタン\u0026lt;/button\u0026gt;\n  \u0026lt;button onclick=\u0026quot;nmElShape('circle',this)\u0026quot;\u0026gt;サークル\u0026lt;/button\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;nm-divider\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n\n\u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;サイズ \u0026lt;span class=\u0026quot;nm-val\u0026quot; id=\u0026quot;v-size\u0026quot;\u0026gt;160px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n\u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;nm-size\u0026quot; min=\u0026quot;60\u0026quot; max=\u0026quot;300\u0026quot; value=\u0026quot;160\u0026quot; oninput=\u0026quot;nmUpdate()\u0026quot;\u0026gt;\n\n\u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;シャドウ距離 \u0026lt;span class=\u0026quot;nm-val\u0026quot; id=\u0026quot;v-dist\u0026quot;\u0026gt;10px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n\u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;nm-dist\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;10\u0026quot; oninput=\u0026quot;nmUpdate()\u0026quot;\u0026gt;\n\n\u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;ぼかし \u0026lt;span class=\u0026quot;nm-val\u0026quot; id=\u0026quot;v-blur\u0026quot;\u0026gt;20px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n\u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;nm-blur\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;20\u0026quot; oninput=\u0026quot;nmUpdate()\u0026quot;\u0026gt;\n\n\u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;強度 \u0026lt;span class=\u0026quot;nm-val\u0026quot; id=\u0026quot;v-int\u0026quot;\u0026gt;0.25\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n\u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;nm-int\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;25\u0026quot; oninput=\u0026quot;nmUpdate()\u0026quot;\u0026gt;\n\n\u0026lt;label class=\u0026quot;nm-label\u0026quot;\u0026gt;角丸 \u0026lt;span class=\u0026quot;nm-val\u0026quot; id=\u0026quot;v-rad\u0026quot;\u0026gt;16px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt;\n\u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;nm-rad\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;60\u0026quot; value=\u0026quot;16\u0026quot; oninput=\u0026quot;nmUpdate()\u0026quot;\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- 右：プレビュー --\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"nm-panel\" style=\"padding:0;overflow:hidden;\"\u003e\n      \u003cdiv class=\"nm-preview-wrap\" id=\"nm-preview-wrap\"\u003e\n        \u003cdiv class=\"nm-preview-el\" id=\"nm-preview-el\"\u003eプレビュー\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"nm-code-wrap\"\u003e\n      \u003cpre class=\"nm-code\" id=\"nm-code-out\"\u003e\u003c/pre\u003e\n      \u003cbutton class=\"nm-copy-btn\" id=\"nm-copy-btn\" onclick=\"nmCopy()\"\u003eCSSをコピー\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var state = {\n    bg: '#e0e5ec',\n    dist: 10,\n    blur: 20,\n    intensity: 0.25,\n    radius: 16,\n    size: 160,\n    shape: 'flat',\n    elShape: 'card'\n  };\n\n  function hexToRgb(hex) {\n    hex = hex.replace('#','');\n    if(hex.length===3) hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];\n    var n=parseInt(hex,16);\n    return {r:(n\u003e\u003e16)\u0026255,g:(n\u003e\u003e8)\u0026255,b:n\u0026255};\n  }\n\n  function rgbToHex(r,g,b){\n    return '#'+[r,g,b].map(function(v){\n      v=Math.max(0,Math.min(255,Math.round(v)));\n      return v.toString(16).padStart(2,'0');\n    }).join('');\n  }\n\n  function calcShadows(hex, dist, blur, intensity) {\n    var c = hexToRgb(hex);\n    var lighten = intensity * 255;\n    var darken = intensity * 255;\n    var light = rgbToHex(c.r+lighten, c.g+lighten, c.b+lighten);\n    var dark  = rgbToHex(c.r-darken,  c.g-darken,  c.b-darken);\n    return {light:light, dark:dark};\n  }\n\n  function buildBoxShadow(dist, blur, sh, shape, inset) {\n    var prefix = inset ? 'inset ' : '';\n    var base = prefix+(-dist)+'px '+(-dist)+'px '+blur+'px '+sh.light+', '+\n               prefix+dist+'px '+dist+'px '+blur+'px '+sh.dark;\n    return base;\n  }\n\n  function buildBackground(bg, shape) {\n    if(shape==='flat') return bg;\n    var c = hexToRgb(bg);\n    if(shape==='concave'){\n      var d=20;\n      var c1=rgbToHex(c.r-d,c.g-d,c.b-d);\n      var c2=rgbToHex(c.r+d,c.g+d,c.b+d);\n      return 'linear-gradient(145deg,'+c1+','+c2+')';\n    }\n    if(shape==='convex'){\n      var d=20;\n      var c1=rgbToHex(c.r+d,c.g+d,c.b+d);\n      var c2=rgbToHex(c.r-d,c.g-d,c.b-d);\n      return 'linear-gradient(145deg,'+c1+','+c2+')';\n    }\n    return bg;\n  }\n\n  function getRadiusForElShape(elShape, radius) {\n    if(elShape==='circle') return '50%';\n    if(elShape==='button') return Math.min(radius,30)+'px';\n    return radius+'px';\n  }\n\n  function getSizeStyle(elShape, size) {\n    if(elShape==='circle') return {width:size+'px',height:size+'px'};\n    if(elShape==='button') return {width:(size*1.6)+'px',height:(size*0.5)+'px'};\n    return {width:size+'px',height:size+'px'};\n  }\n\n  function nmUpdate() {\n    state.bg      = document.getElementById('nm-bg').value;\n    state.dist    = parseInt(document.getElementById('nm-dist').value);\n    state.blur    = parseInt(document.getElementById('nm-blur').value);\n    state.intensity = parseInt(document.getElementById('nm-int').value)/100;\n    state.radius  = parseInt(document.getElementById('nm-rad').value);\n    state.size    = parseInt(document.getElementById('nm-size').value);\n\n    document.getElementById('nm-bg-hex').textContent = state.bg;\n    document.getElementById('v-dist').textContent = state.dist+'px';\n    document.getElementById('v-blur').textContent = state.blur+'px';\n    document.getElementById('v-int').textContent  = state.intensity.toFixed(2);\n    document.getElementById('v-rad').textContent  = state.radius+'px';\n    document.getElementById('v-size').textContent = state.size+'px';\n\n    var sh = calcShadows(state.bg, state.dist, state.blur, state.intensity);\n    var isPressed = state.shape==='pressed';\n    var boxShadow = buildBoxShadow(state.dist, state.blur, sh, state.shape, isPressed);\n    var bg = buildBackground(state.bg, state.shape);\n    var borderRadius = getRadiusForElShape(state.elShape, state.radius);\n    var sz = getSizeStyle(state.elShape, state.size);\n\n    var wrap = document.getElementById('nm-preview-wrap');\n    wrap.style.background = state.bg;\n    wrap.style.padding = '40px';\n\n    var el = document.getElementById('nm-preview-el');\n    el.style.width = sz.width;\n    el.style.height = sz.height;\n    el.style.borderRadius = borderRadius;\n    el.style.background = bg;\n    el.style.boxShadow = boxShadow;\n\n    var lines = [];\n    lines.push('.nm-element {');\n    lines.push('  background: '+bg+';');\n    lines.push('  border-radius: '+borderRadius+';');\n    lines.push('  box-shadow: '+boxShadow+';');\n    lines.push('  width: '+sz.width+';');\n    lines.push('  height: '+sz.height+';');\n    lines.push('}');\n\n    renderCode(lines.join('\\n'));\n  }\n\n  function renderCode(css) {\n    var html = css\n      .replace(/\u0026/g,'\u0026amp;')\n      .replace(/\u003c/g,'\u0026lt;')\n      .replace(/\u003e/g,'\u0026gt;')\n      .replace(/([\\w-]+)(?=\\s*:)/g,'\u003cspan class=\"c-prop\"\u003e$1\u003c/span\u003e')\n      .replace(/:\\s*([^;{}\\n]+)/g,function(m,v){\n        return ': \u003cspan class=\"c-val\"\u003e'+v+'\u003c/span\u003e';\n      })\n      .replace(/[{}]/g,'\u003cspan class=\"c-punc\"\u003e$\u0026\u003c/span\u003e');\n    document.getElementById('nm-code-out').innerHTML = html;\n  }\n\n  window.nmUpdate = nmUpdate;\n\n  window.nmShape = function(s, btn) {\n    state.shape = s;\n    document.querySelectorAll('#nm-shape-seg button').forEach(function(b){b.classList.remove('active');});\n    btn.classList.add('active');\n    nmUpdate();\n  };\n\n  window.nmElShape = function(s, btn) {\n    state.elShape = s;\n    document.querySelectorAll('#nm-el-seg button').forEach(function(b){b.classList.remove('active');});\n    btn.classList.add('active');\n    nmUpdate();\n  };\n\n  window.nmCopy = function() {\n    var code = document.getElementById('nm-code-out').textContent;\n    navigator.clipboard.writeText(code).then(function(){\n      var btn = document.getElementById('nm-copy-btn');\n      btn.textContent = 'コピー完了!';\n      btn.classList.add('copied');\n      setTimeout(function(){btn.textContent='CSSをコピー';btn.classList.remove('copied');},1800);\n    });\n  };\n\n  var presets = {\n    softcard:  {bg:'#e0e5ec',dist:10,blur:20,int:25,rad:16,size:160,shape:'flat',elShape:'card'},\n    button:    {bg:'#e8ecf0',dist:6, blur:12,int:20,rad:10,size:130,shape:'convex',elShape:'button'},\n    circle:    {bg:'#dde1e7',dist:8, blur:16,int:22,rad:50,size:140,shape:'flat',elShape:'circle'},\n    input:     {bg:'#eaeef3',dist:5, blur:10,int:18,rad:8, size:160,shape:'pressed',elShape:'button'},\n    toggle:    {bg:'#e0e5ec',dist:6, blur:12,int:20,rad:30,size:100,shape:'flat',elShape:'button'}\n  };\n\n  window.nmLoadPreset = function(name) {\n    var p = presets[name];\n    if(!p) return;\n    document.getElementById('nm-bg').value = p.bg;\n    document.getElementById('nm-dist').value = p.dist;\n    document.getElementById('nm-blur').value = p.blur;\n    document.getElementById('nm-int').value = p.int;\n    document.getElementById('nm-rad').value = p.rad;\n    document.getElementById('nm-size').value = p.size;\n    state.shape = p.shape;\n    state.elShape = p.elShape;\n    document.querySelectorAll('#nm-shape-seg button').forEach(function(b){\n      var map={'flat':'フラット','concave':'凹面','convex':'凸面','pressed':'押下'};\n      b.classList.toggle('active', b.textContent===map[p.shape]);\n    });\n    document.querySelectorAll('#nm-el-seg button').forEach(function(b){\n      var map={'card':'カード','button':'ボタン','circle':'サークル'};\n      b.classList.toggle('active', b.textContent===map[p.elShape]);\n    });\n    nmUpdate();\n  };\n\n  nmUpdate();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch3 id=\"ニューモーフィズムの仕組み\"\u003eニューモーフィズムの仕組み\u003c/h3\u003e\n\u003cp\u003eニューモーフィズム（ソフトUI）は、1つの要素から2方向のシャドウを投影することで奥行きを表現します。背景色より明るいシャドウを左上に、暗いシャドウを右下に配置するのが基本です。要素の背景色とコンテナの背景色を\u003cstrong\u003e必ず同じ色にする\u003c/strong\u003eことがポイントです。\u003c/p\u003e","title":"ニューモーフィズム ジェネレーター"},{"content":"Keep a Changelog 形式で変更履歴・リリースノートを作成できます。バージョン情報を入力し、カテゴリ別に変更点を追加して、マークダウン・HTML・プレーンテキストでコピー・ダウンロードできます。無料・登録不要。\nクイックプリセット メジャーリリース マイナーアップデート パッチ / バグ修正 セキュリティ更新 すべてクリア リリース情報 バージョン番号 リリース日 プロジェクト名（任意） 変更エントリ 追加 (Added) 0 \u0026#9660; + エントリを追加 変更 (Changed) 0 \u0026#9660; + エントリを追加 非推奨 (Deprecated) 0 \u0026#9660; + エントリを追加 削除 (Removed) 0 \u0026#9660; + エントリを追加 修正 (Fixed) 0 \u0026#9660; + エントリを追加 セキュリティ (Security) 0 \u0026#9660; + エントリを追加 既存の変更履歴に追記 既存の変更履歴を貼り付けると、新しいリリースをその上に追記します。\nプレビューと出力 Markdown HTML プレーンテキスト クリップボードにコピー ファイルをダウンロード リセット \u0026#128200; リリース管理と経費・請求書をまとめて効率化 開発チームの経費精算・請求書発行・給与計算を自動化するなら freee が便利です。無料プランから始められます。\nfreee を無料で試す 関連ツール Markdownをプレビュー → Markdownプレビュー Markdownテーブルを作成 → Markdownテーブルジェネレーター JSONを整形 → JSONフォーマッター ","permalink":"https://productivity-works.com/ja/tools/changelog-generator/","summary":"\u003cp\u003e\u003ca href=\"https://keepachangelog.com/ja/1.0.0/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eKeep a Changelog\u003c/a\u003e\n 形式で変更履歴・リリースノートを作成できます。バージョン情報を入力し、カテゴリ別に変更点を追加して、マークダウン・HTML・プレーンテキストでコピー・ダウンロードできます。無料・登録不要。\u003c/p\u003e\n\u003cdiv id=\"cl-app\"\u003e\n\u003cstyle\u003e\n  #cl-app *,\n  #cl-app *::before,\n  #cl-app *::after {\n    box-sizing: border-box;\n  }\n  #cl-app {\n    font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, -apple-system, BlinkMacSystemFont, sans-serif;\n    font-size: 15px;\n    color: #1a1a2e;\n    margin: 0 auto;\n    max-width: 900px;\n  }\n  #cl-app h2 {\n    font-size: 1.05rem;\n    font-weight: 700;\n    margin: 0 0 12px 0;\n    color: #1a1a2e;\n  }\n  #cl-app .cl-section {\n    background: #f8f9fc;\n    border: 1px solid #e2e8f0;\n    border-radius: 10px;\n    padding: 20px;\n    margin-bottom: 18px;\n  }\n  #cl-app .cl-row {\n    display: flex;\n    gap: 14px;\n    flex-wrap: wrap;\n  }\n  #cl-app .cl-field {\n    display: flex;\n    flex-direction: column;\n    gap: 5px;\n    flex: 1;\n    min-width: 180px;\n  }\n  #cl-app label {\n    font-size: 0.8rem;\n    font-weight: 700;\n    color: #4a5568;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n  }\n  #cl-app input[type=\"text\"],\n  #cl-app input[type=\"date\"],\n  #cl-app select,\n  #cl-app textarea {\n    width: 100%;\n    padding: 9px 12px;\n    border: 1px solid #cbd5e0;\n    border-radius: 7px;\n    font-size: 0.95rem;\n    font-family: inherit;\n    background: #fff;\n    color: #1a1a2e;\n    transition: border-color 0.18s;\n    outline: none;\n  }\n  #cl-app input[type=\"text\"]:focus,\n  #cl-app input[type=\"date\"]:focus,\n  #cl-app select:focus,\n  #cl-app textarea:focus {\n    border-color: #667eea;\n    box-shadow: 0 0 0 3px rgba(102,126,234,0.12);\n  }\n  #cl-app .cl-presets {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n  }\n  #cl-app .cl-preset-btn {\n    padding: 6px 14px;\n    border-radius: 20px;\n    border: 1.5px solid #667eea;\n    background: #fff;\n    color: #667eea;\n    font-size: 0.83rem;\n    font-weight: 700;\n    cursor: pointer;\n    transition: background 0.15s, color 0.15s;\n    font-family: inherit;\n  }\n  #cl-app .cl-preset-btn:hover {\n    background: #667eea;\n    color: #fff;\n  }\n  #cl-app .cl-category {\n    border: 1px solid #e2e8f0;\n    border-radius: 9px;\n    margin-bottom: 12px;\n    overflow: hidden;\n    background: #fff;\n  }\n  #cl-app .cl-cat-header {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    padding: 10px 14px;\n    cursor: pointer;\n    user-select: none;\n    background: #fff;\n    border-bottom: 1px solid #e2e8f0;\n  }\n  #cl-app .cl-cat-header:hover {\n    background: #f0f4ff;\n  }\n  #cl-app .cl-cat-badge {\n    display: inline-block;\n    padding: 2px 10px;\n    border-radius: 12px;\n    font-size: 0.78rem;\n    font-weight: 700;\n    letter-spacing: 0.02em;\n  }\n  #cl-app .cl-cat-added     .cl-cat-badge { background: #c6f6d5; color: #22543d; }\n  #cl-app .cl-cat-changed   .cl-cat-badge { background: #bee3f8; color: #2a4365; }\n  #cl-app .cl-cat-deprecated .cl-cat-badge { background: #fefcbf; color: #744210; }\n  #cl-app .cl-cat-removed   .cl-cat-badge { background: #fed7d7; color: #742a2a; }\n  #cl-app .cl-cat-fixed     .cl-cat-badge { background: #e9d8fd; color: #44337a; }\n  #cl-app .cl-cat-security  .cl-cat-badge { background: #feebc8; color: #7b341e; }\n  #cl-app .cl-cat-toggle {\n    margin-left: auto;\n    font-size: 0.8rem;\n    color: #718096;\n  }\n  #cl-app .cl-cat-count {\n    font-size: 0.78rem;\n    color: #718096;\n    background: #edf2f7;\n    border-radius: 10px;\n    padding: 1px 8px;\n  }\n  #cl-app .cl-cat-body {\n    padding: 12px 14px;\n  }\n  #cl-app .cl-entry-row {\n    display: flex;\n    gap: 8px;\n    margin-bottom: 8px;\n    align-items: center;\n  }\n  #cl-app .cl-entry-input {\n    flex: 1;\n  }\n  #cl-app .cl-remove-btn {\n    background: #fff5f5;\n    border: 1px solid #feb2b2;\n    color: #c53030;\n    border-radius: 6px;\n    padding: 6px 10px;\n    cursor: pointer;\n    font-size: 0.85rem;\n    font-weight: 700;\n    transition: background 0.15s;\n    flex-shrink: 0;\n    font-family: inherit;\n  }\n  #cl-app .cl-remove-btn:hover {\n    background: #fed7d7;\n  }\n  #cl-app .cl-add-btn {\n    background: #ebf8ff;\n    border: 1px dashed #90cdf4;\n    color: #2b6cb0;\n    border-radius: 7px;\n    padding: 7px 14px;\n    cursor: pointer;\n    font-size: 0.85rem;\n    font-weight: 600;\n    width: 100%;\n    margin-top: 4px;\n    transition: background 0.15s;\n    font-family: inherit;\n  }\n  #cl-app .cl-add-btn:hover {\n    background: #bee3f8;\n  }\n  #cl-app .cl-format-tabs {\n    display: flex;\n    gap: 0;\n    border-bottom: 2px solid #e2e8f0;\n    margin-bottom: 14px;\n  }\n  #cl-app .cl-tab {\n    padding: 8px 20px;\n    border: none;\n    background: transparent;\n    font-size: 0.9rem;\n    font-weight: 700;\n    color: #718096;\n    cursor: pointer;\n    border-bottom: 2px solid transparent;\n    margin-bottom: -2px;\n    transition: color 0.15s, border-color 0.15s;\n    font-family: inherit;\n  }\n  #cl-app .cl-tab.active {\n    color: #667eea;\n    border-bottom-color: #667eea;\n  }\n  #cl-app .cl-tab:hover:not(.active) {\n    color: #4a5568;\n  }\n  #cl-app .cl-preview-box {\n    background: #1a202c;\n    color: #e2e8f0;\n    border-radius: 8px;\n    padding: 18px 20px;\n    font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n    font-size: 0.85rem;\n    line-height: 1.7;\n    white-space: pre-wrap;\n    word-break: break-word;\n    min-height: 180px;\n    max-height: 420px;\n    overflow-y: auto;\n  }\n  #cl-app .cl-preview-box.html-mode {\n    background: #fff;\n    color: #1a1a2e;\n    font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, sans-serif;\n    font-size: 0.95rem;\n    border: 1px solid #e2e8f0;\n    line-height: 1.8;\n    white-space: normal;\n  }\n  #cl-app .cl-action-row {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px;\n    margin-top: 14px;\n  }\n  #cl-app .cl-btn {\n    padding: 9px 20px;\n    border-radius: 7px;\n    border: none;\n    font-size: 0.9rem;\n    font-weight: 700;\n    cursor: pointer;\n    transition: opacity 0.15s, transform 0.1s;\n    font-family: inherit;\n  }\n  #cl-app .cl-btn:active {\n    transform: scale(0.97);\n  }\n  #cl-app .cl-btn-primary {\n    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n    color: #fff;\n  }\n  #cl-app .cl-btn-secondary {\n    background: #edf2f7;\n    color: #2d3748;\n  }\n  #cl-app .cl-btn-danger {\n    background: #fff5f5;\n    border: 1px solid #feb2b2;\n    color: #c53030;\n  }\n  #cl-app .cl-btn:hover {\n    opacity: 0.88;\n  }\n  #cl-app .cl-toast {\n    display: none;\n    position: fixed;\n    bottom: 24px;\n    right: 24px;\n    background: #2d3748;\n    color: #fff;\n    padding: 10px 20px;\n    border-radius: 8px;\n    font-size: 0.9rem;\n    font-weight: 700;\n    z-index: 9999;\n    box-shadow: 0 4px 16px rgba(0,0,0,0.18);\n    animation: cl-fadein 0.2s ease;\n    font-family: inherit;\n  }\n  @keyframes cl-fadein {\n    from { opacity: 0; transform: translateY(8px); }\n    to   { opacity: 1; transform: translateY(0); }\n  }\n  #cl-app .cl-append-area {\n    width: 100%;\n    min-height: 90px;\n    font-family: \"SFMono-Regular\", Consolas, monospace;\n    font-size: 0.83rem;\n    resize: vertical;\n  }\n  #cl-app .cl-info {\n    font-size: 0.82rem;\n    color: #718096;\n    margin-top: 6px;\n  }\n  #cl-app .cl-section-title {\n    font-size: 0.78rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n    color: #667eea;\n    margin-bottom: 10px;\n  }\n  #cl-app .cl-cta {\n    background: linear-gradient(135deg, #f0f4ff 0%, #faf5ff 100%);\n    border: 1.5px solid #c3dafe;\n    border-radius: 10px;\n    padding: 20px 22px;\n    margin-top: 28px;\n    display: flex;\n    gap: 16px;\n    align-items: flex-start;\n    flex-wrap: wrap;\n  }\n  #cl-app .cl-cta-icon {\n    font-size: 2rem;\n    flex-shrink: 0;\n    line-height: 1;\n  }\n  #cl-app .cl-cta-body { flex: 1; min-width: 220px; }\n  #cl-app .cl-cta-body strong {\n    display: block;\n    font-size: 1rem;\n    font-weight: 700;\n    color: #434190;\n    margin-bottom: 4px;\n  }\n  #cl-app .cl-cta-body p {\n    font-size: 0.88rem;\n    color: #4a5568;\n    margin: 0 0 12px 0;\n    line-height: 1.6;\n  }\n  #cl-app .cl-cta-link {\n    display: inline-block;\n    background: #667eea;\n    color: #fff;\n    padding: 8px 18px;\n    border-radius: 7px;\n    font-size: 0.88rem;\n    font-weight: 700;\n    text-decoration: none;\n    transition: background 0.15s;\n  }\n  #cl-app .cl-cta-link:hover { background: #5a67d8; }\n  @media (max-width: 600px) {\n    #cl-app .cl-row { flex-direction: column; }\n    #cl-app .cl-tab { padding: 8px 10px; font-size: 0.8rem; }\n    #cl-app .cl-action-row { flex-direction: column; }\n    #cl-app .cl-btn { width: 100%; text-align: center; }\n    #cl-app .cl-cta { flex-direction: column; }\n  }\n\u003c/style\u003e\n\u003c!-- プリセット --\u003e\n\u003cdiv class=\"cl-section\"\u003e\n  \u003cdiv class=\"cl-section-title\"\u003eクイックプリセット\u003c/div\u003e\n  \u003cdiv class=\"cl-presets\"\u003e\n    \u003cbutton class=\"cl-preset-btn\" onclick=\"clApplyPreset('major')\"\u003eメジャーリリース\u003c/button\u003e\n    \u003cbutton class=\"cl-preset-btn\" onclick=\"clApplyPreset('minor')\"\u003eマイナーアップデート\u003c/button\u003e\n    \u003cbutton class=\"cl-preset-btn\" onclick=\"clApplyPreset('patch')\"\u003eパッチ / バグ修正\u003c/button\u003e\n    \u003cbutton class=\"cl-preset-btn\" onclick=\"clApplyPreset('security')\"\u003eセキュリティ更新\u003c/button\u003e\n    \u003cbutton class=\"cl-preset-btn\" onclick=\"clApplyPreset('clear')\"\u003eすべてクリア\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- リリース情報 --\u003e\n\u003cdiv class=\"cl-section\"\u003e\n  \u003ch2\u003eリリース情報\u003c/h2\u003e\n  \u003cdiv class=\"cl-row\"\u003e\n    \u003cdiv class=\"cl-field\"\u003e\n      \u003clabel for=\"cl-version\"\u003eバージョン番号\u003c/label\u003e\n      \u003cinput type=\"text\" id=\"cl-version\" placeholder=\"例: 2.1.0\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cl-field\"\u003e\n      \u003clabel for=\"cl-date\"\u003eリリース日\u003c/label\u003e\n      \u003cinput type=\"date\" id=\"cl-date\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cl-field\"\u003e\n      \u003clabel for=\"cl-project\"\u003eプロジェクト名（任意）\u003c/label\u003e\n      \u003cinput type=\"text\" id=\"cl-project\" placeholder=\"例: マイアプリ\" /\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- カテゴリ別エントリ --\u003e\n\u003cdiv class=\"cl-section\"\u003e\n  \u003ch2\u003e変更エントリ\u003c/h2\u003e\n  \u003cdiv class=\"cl-category cl-cat-added\" id=\"cl-cat-added\"\u003e\n    \u003cdiv class=\"cl-cat-header\" onclick=\"clToggleCat('added')\"\u003e\n      \u003cspan class=\"cl-cat-badge\"\u003e追加 (Added)\u003c/span\u003e\n      \u003cspan class=\"cl-cat-count\" id=\"cl-count-added\"\u003e0\u003c/span\u003e\n      \u003cspan class=\"cl-cat-toggle\" id=\"cl-toggle-added\"\u003e\u0026#9660;\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cl-cat-body\" id=\"cl-body-added\"\u003e\n      \u003cdiv id=\"cl-entries-added\"\u003e\u003c/div\u003e\n      \u003cbutton class=\"cl-add-btn\" onclick=\"clAddEntry('added')\"\u003e+ エントリを追加\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cl-category cl-cat-changed\" id=\"cl-cat-changed\"\u003e\n    \u003cdiv class=\"cl-cat-header\" onclick=\"clToggleCat('changed')\"\u003e\n      \u003cspan class=\"cl-cat-badge\"\u003e変更 (Changed)\u003c/span\u003e\n      \u003cspan class=\"cl-cat-count\" id=\"cl-count-changed\"\u003e0\u003c/span\u003e\n      \u003cspan class=\"cl-cat-toggle\" id=\"cl-toggle-changed\"\u003e\u0026#9660;\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cl-cat-body\" id=\"cl-body-changed\"\u003e\n      \u003cdiv id=\"cl-entries-changed\"\u003e\u003c/div\u003e\n      \u003cbutton class=\"cl-add-btn\" onclick=\"clAddEntry('changed')\"\u003e+ エントリを追加\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cl-category cl-cat-deprecated\" id=\"cl-cat-deprecated\"\u003e\n    \u003cdiv class=\"cl-cat-header\" onclick=\"clToggleCat('deprecated')\"\u003e\n      \u003cspan class=\"cl-cat-badge\"\u003e非推奨 (Deprecated)\u003c/span\u003e\n      \u003cspan class=\"cl-cat-count\" id=\"cl-count-deprecated\"\u003e0\u003c/span\u003e\n      \u003cspan class=\"cl-cat-toggle\" id=\"cl-toggle-deprecated\"\u003e\u0026#9660;\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cl-cat-body\" id=\"cl-body-deprecated\"\u003e\n      \u003cdiv id=\"cl-entries-deprecated\"\u003e\u003c/div\u003e\n      \u003cbutton class=\"cl-add-btn\" onclick=\"clAddEntry('deprecated')\"\u003e+ エントリを追加\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cl-category cl-cat-removed\" id=\"cl-cat-removed\"\u003e\n    \u003cdiv class=\"cl-cat-header\" onclick=\"clToggleCat('removed')\"\u003e\n      \u003cspan class=\"cl-cat-badge\"\u003e削除 (Removed)\u003c/span\u003e\n      \u003cspan class=\"cl-cat-count\" id=\"cl-count-removed\"\u003e0\u003c/span\u003e\n      \u003cspan class=\"cl-cat-toggle\" id=\"cl-toggle-removed\"\u003e\u0026#9660;\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cl-cat-body\" id=\"cl-body-removed\"\u003e\n      \u003cdiv id=\"cl-entries-removed\"\u003e\u003c/div\u003e\n      \u003cbutton class=\"cl-add-btn\" onclick=\"clAddEntry('removed')\"\u003e+ エントリを追加\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cl-category cl-cat-fixed\" id=\"cl-cat-fixed\"\u003e\n    \u003cdiv class=\"cl-cat-header\" onclick=\"clToggleCat('fixed')\"\u003e\n      \u003cspan class=\"cl-cat-badge\"\u003e修正 (Fixed)\u003c/span\u003e\n      \u003cspan class=\"cl-cat-count\" id=\"cl-count-fixed\"\u003e0\u003c/span\u003e\n      \u003cspan class=\"cl-cat-toggle\" id=\"cl-toggle-fixed\"\u003e\u0026#9660;\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cl-cat-body\" id=\"cl-body-fixed\"\u003e\n      \u003cdiv id=\"cl-entries-fixed\"\u003e\u003c/div\u003e\n      \u003cbutton class=\"cl-add-btn\" onclick=\"clAddEntry('fixed')\"\u003e+ エントリを追加\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cl-category cl-cat-security\" id=\"cl-cat-security\"\u003e\n    \u003cdiv class=\"cl-cat-header\" onclick=\"clToggleCat('security')\"\u003e\n      \u003cspan class=\"cl-cat-badge\"\u003eセキュリティ (Security)\u003c/span\u003e\n      \u003cspan class=\"cl-cat-count\" id=\"cl-count-security\"\u003e0\u003c/span\u003e\n      \u003cspan class=\"cl-cat-toggle\" id=\"cl-toggle-security\"\u003e\u0026#9660;\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cl-cat-body\" id=\"cl-body-security\"\u003e\n      \u003cdiv id=\"cl-entries-security\"\u003e\u003c/div\u003e\n      \u003cbutton class=\"cl-add-btn\" onclick=\"clAddEntry('security')\"\u003e+ エントリを追加\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 既存の変更履歴に追記 --\u003e\n\u003cdiv class=\"cl-section\"\u003e\n  \u003ch2\u003e既存の変更履歴に追記\u003c/h2\u003e\n  \u003cp class=\"cl-info\"\u003e既存の変更履歴を貼り付けると、新しいリリースをその上に追記します。\u003c/p\u003e","title":"変更履歴ジェネレーター — リリースノート作成ツール"},{"content":" 料理単位変換ツール 容量 重量 日本の単位 食材別換算 レシピスケール 早見表 数量 \u0026#8644; 換算結果 変換元の単位 カップ（米国） 大さじ（tbsp） 小さじ（tsp） ミリリットル（ml/cc） リットル（L） 液量オンス（fl oz） 変換先の単位 カップ（米国） 大さじ（tbsp） 小さじ（tsp） ミリリットル（ml/cc） リットル（L） 液量オンス（fl oz） 236.59 ml 1 カップ（米国）= 236.59 ml ヒント：米国カップ1杯 = 大さじ16杯 = 小さじ48杯 = 約236.6ml = 8 fl oz 数量 \u0026#8644; 換算結果 変換元の単位 グラム（g） キログラム（kg） オンス（oz） ポンド（lb） 変換先の単位 グラム（g） キログラム（kg） オンス（oz） ポンド（lb） 0.035 oz 1 グラム（g）= 0.035 オンス（oz） ヒント：1 oz = 28.35 g ｜ 1 lb = 16 oz = 453.6 g ｜ 1 kg = 2.205 lb 日本特有の料理・計量単位（合・勺・升）を他の単位へ変換します。\n数量 \u0026#8644; 換算結果 変換元の単位 合（ごう） 勺（しゃく） 升（しょう） 大さじ 小さじ cc（= ml） ml カップ（日本：200ml） 変換先の単位 合（ごう） 勺（しゃく） 升（しょう） 大さじ 小さじ cc（= ml） ml カップ（日本：200ml） 180 ml 1 合 = 180 ml ヒント：1合 = 180ml ｜ 大さじ1 = 15ml ｜ 小さじ1 = 5ml ｜ 日本のカップ = 200ml（米国カップ≠日本カップ） 食材の密度を考慮して、容量と重量を相互変換します。\n食材 水 牛乳 薄力粉（小麦粉） 強力粉 上白糖（グラニュー糖） 黒糖・三温糖（詰め込み） 粉砂糖 バター サラダ油・植物油 醤油 味噌 はちみつ 米（生） 塩 片栗粉 数量 単位 カップ（日本 200ml） 大さじ（15ml） 小さじ（5ml） ml / cc 合（180ml） グラム（g） オンス（oz） -- 食材と数量を選択してください レシピの人数に合わせて材料の分量を自動計算します。\n元のレシピ人数 作りたい人数 材料リスト カップ 大さじ 小さじ 合 ml g 個 枚 本 \u0026#10005; カップ 大さじ 小さじ 合 ml g 個 枚 本 \u0026#10005; + 材料を追加 計算する 元の分量 換算後の分量 日本の料理単位早見表 単位 ml / cc 大さじ 小さじ 合 米国カップ 1合（180ml）180123610.76 1升（1800ml）1800120360107.61 日本カップ1（200ml）20013.3401.110.85 大さじ1（15ml）15130.0830.063 小さじ1（5ml）50.33310.0280.021 米国カップ1（236.6ml）236.615.7747.31.311 食材1カップ（日本 200ml）あたりの重量 食材 グラム（g） 大さじ1（g） 小さじ1（g） 水・だし200 g15 g5 g 牛乳206 g15.5 g5.2 g 薄力粉106 g8 g2.7 g 強力粉110 g8.3 g2.8 g 上白糖169 g9 g3 g 塩240 g18 g6 g 醤油230 g18 g6 g 味噌—18 g6 g バター191 g14.3 g4.8 g サラダ油184 g13.8 g4.6 g 米（生）158 g—— 片栗粉130 g9 g3 g 重量早見表 換算元 グラム（g） kg オンス（oz） ポンド（lb） 1グラム10.0010.0350.0022 1キログラム1000135.272.205 1オンス28.350.02810.0625 1ポンド453.60.454161 家計管理を効率化 → freee会計で食費を自動管理\n関連ツール CO2排出量計算 → CO2排出量計算ツール 電気代計算 → 電気代計算ツール Fuel Cost Calculator → Fuel Cost Calculatorツール ","permalink":"https://productivity-works.com/ja/tools/cooking-unit-converter/","summary":"\u003cdiv id=\"cu-app\"\u003e\n\u003cstyle\u003e\n#cu-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 820px;\n  margin: 0 auto;\n  color: #1a1a2e;\n  line-height: 1.7;\n}\n#cu-app h2 {\n  font-size: 1.3rem;\n  font-weight: 700;\n  color: #1a1a2e;\n  margin: 1.8rem 0 1rem;\n  padding-bottom: 0.4rem;\n  border-bottom: 2px solid #e85d26;\n}\n#cu-app .tabs {\n  display: flex;\n  gap: 0.5rem;\n  margin-bottom: 1.5rem;\n  flex-wrap: wrap;\n}\n#cu-app .tab-btn {\n  padding: 0.55rem 1.1rem;\n  border: 2px solid #e0e0e0;\n  border-radius: 2rem;\n  background: #fff;\n  color: #555;\n  font-size: 0.88rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.2s;\n}\n#cu-app .tab-btn.active,\n#cu-app .tab-btn:hover {\n  background: #e85d26;\n  border-color: #e85d26;\n  color: #fff;\n}\n#cu-app .panel {\n  display: none;\n  background: #fff;\n  border: 1px solid #e8e8e8;\n  border-radius: 12px;\n  padding: 1.5rem;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n}\n#cu-app .panel.active { display: block; }\n#cu-app .converter-grid {\n  display: grid;\n  grid-template-columns: 1fr auto 1fr;\n  gap: 1rem;\n  align-items: end;\n  margin-bottom: 1rem;\n}\n#cu-app .swap-btn {\n  background: #e85d26;\n  color: #fff;\n  border: none;\n  border-radius: 50%;\n  width: 40px;\n  height: 40px;\n  font-size: 1.1rem;\n  cursor: pointer;\n  transition: background 0.2s;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-bottom: 0.2rem;\n}\n#cu-app .swap-btn:hover { background: #c94e1f; }\n#cu-app label {\n  display: block;\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #666;\n  margin-bottom: 0.3rem;\n  letter-spacing: 0.02em;\n}\n#cu-app input[type=\"number\"],\n#cu-app select {\n  width: 100%;\n  padding: 0.65rem 0.8rem;\n  border: 1.5px solid #ddd;\n  border-radius: 8px;\n  font-size: 1rem;\n  background: #fafafa;\n  box-sizing: border-box;\n  transition: border-color 0.2s;\n  font-family: inherit;\n}\n#cu-app input[type=\"number\"]:focus,\n#cu-app select:focus {\n  outline: none;\n  border-color: #e85d26;\n  background: #fff;\n}\n#cu-app .result-box {\n  background: linear-gradient(135deg, #fff3ee, #fff);\n  border: 1.5px solid #e85d26;\n  border-radius: 10px;\n  padding: 1rem 1.2rem;\n  margin-top: 1rem;\n  text-align: center;\n}\n#cu-app .result-box .result-value {\n  font-size: 2rem;\n  font-weight: 800;\n  color: #e85d26;\n}\n#cu-app .result-box .result-label {\n  font-size: 0.88rem;\n  color: #888;\n  margin-top: 0.2rem;\n}\n#cu-app .ingredient-row {\n  display: flex;\n  gap: 0.8rem;\n  margin-bottom: 1rem;\n  align-items: end;\n  flex-wrap: wrap;\n}\n#cu-app .ingredient-row \u003e div {\n  flex: 1;\n  min-width: 120px;\n}\n#cu-app .scaler-row {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n  margin-bottom: 1rem;\n}\n#cu-app .scaler-ingredients { margin-top: 1rem; }\n#cu-app .scaler-ingredient-item {\n  display: grid;\n  grid-template-columns: 1fr 1fr auto;\n  gap: 0.6rem;\n  margin-bottom: 0.5rem;\n  align-items: center;\n}\n#cu-app .scaler-ingredient-item input,\n#cu-app .scaler-ingredient-item select {\n  padding: 0.5rem 0.6rem;\n  font-size: 0.9rem;\n}\n#cu-app .remove-btn {\n  background: #ff5555;\n  color: #fff;\n  border: none;\n  border-radius: 6px;\n  padding: 0.5rem 0.7rem;\n  cursor: pointer;\n  font-size: 0.85rem;\n}\n#cu-app .remove-btn:hover { background: #cc3333; }\n#cu-app .add-btn {\n  background: #e8f5e9;\n  color: #2e7d32;\n  border: 1.5px solid #a5d6a7;\n  border-radius: 8px;\n  padding: 0.5rem 1rem;\n  cursor: pointer;\n  font-size: 0.88rem;\n  font-weight: 600;\n  margin-right: 0.5rem;\n  font-family: inherit;\n}\n#cu-app .add-btn:hover { background: #c8e6c9; }\n#cu-app .calc-btn {\n  background: #e85d26;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  padding: 0.55rem 1.2rem;\n  cursor: pointer;\n  font-size: 0.9rem;\n  font-weight: 700;\n  font-family: inherit;\n}\n#cu-app .calc-btn:hover { background: #c94e1f; }\n#cu-app .scaler-result {\n  background: #f8f9fa;\n  border-radius: 10px;\n  padding: 1rem;\n  margin-top: 1rem;\n}\n#cu-app .scaler-result table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.92rem;\n}\n#cu-app .scaler-result th {\n  text-align: left;\n  padding: 0.4rem 0.6rem;\n  background: #e85d26;\n  color: #fff;\n  border-radius: 4px;\n}\n#cu-app .scaler-result td {\n  padding: 0.4rem 0.6rem;\n  border-bottom: 1px solid #eee;\n}\n#cu-app .scaler-result tr:last-child td { border-bottom: none; }\n#cu-app .ref-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.87rem;\n  margin-top: 0.5rem;\n}\n#cu-app .ref-table th {\n  background: #1a1a2e;\n  color: #fff;\n  padding: 0.55rem 0.8rem;\n  text-align: left;\n}\n#cu-app .ref-table td {\n  padding: 0.5rem 0.8rem;\n  border-bottom: 1px solid #eee;\n}\n#cu-app .ref-table tr:nth-child(even) td { background: #f9f9f9; }\n#cu-app .tip-box {\n  background: #fff3e0;\n  border-left: 4px solid #e85d26;\n  border-radius: 0 8px 8px 0;\n  padding: 0.8rem 1rem;\n  margin: 1rem 0;\n  font-size: 0.87rem;\n  color: #7b3d00;\n}\n#cu-app .freee-cta {\n  background: linear-gradient(135deg, #e8f4fd, #eef7ff);\n  border: 1px solid #90caf9;\n  border-radius: 10px;\n  padding: 1rem 1.2rem;\n  margin-top: 2rem;\n  font-size: 0.9rem;\n}\n#cu-app .freee-cta p { margin: 0; }\n#cu-app .freee-cta a {\n  color: #1565c0;\n  font-weight: 700;\n  text-decoration: none;\n}\n#cu-app .freee-cta a:hover { text-decoration: underline; }\n@media (max-width: 600px) {\n  #cu-app .converter-grid { grid-template-columns: 1fr; }\n  #cu-app .swap-btn { margin: 0 auto; transform: rotate(90deg); }\n  #cu-app .scaler-row { grid-template-columns: 1fr; }\n  #cu-app .ref-table { font-size: 0.78rem; }\n  #cu-app .ref-table th, #cu-app .ref-table td { padding: 0.4rem 0.5rem; }\n}\n\u003c/style\u003e\n\u003ch2\u003e料理単位変換ツール\u003c/h2\u003e\n\u003cdiv class=\"tabs\"\u003e\n  \u003cbutton class=\"tab-btn active\" onclick=\"cuShowTab('volume')\"\u003e容量\u003c/button\u003e\n  \u003cbutton class=\"tab-btn\" onclick=\"cuShowTab('weight')\"\u003e重量\u003c/button\u003e\n  \u003cbutton class=\"tab-btn\" onclick=\"cuShowTab('jp')\"\u003e日本の単位\u003c/button\u003e\n  \u003cbutton class=\"tab-btn\" onclick=\"cuShowTab('ingredient')\"\u003e食材別換算\u003c/button\u003e\n  \u003cbutton class=\"tab-btn\" onclick=\"cuShowTab('scaler')\"\u003eレシピスケール\u003c/button\u003e\n  \u003cbutton class=\"tab-btn\" onclick=\"cuShowTab('reference')\"\u003e早見表\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- 容量タブ --\u003e\n\u003cdiv id=\"cu-tab-volume\" class=\"panel active\"\u003e\n  \u003cdiv class=\"converter-grid\"\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003e数量\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"vol-amount\" value=\"1\" min=\"0\" step=\"any\" oninput=\"cuConvertVolume()\"\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"display:flex;align-items:flex-end;padding-bottom:0.2rem;\"\u003e\n      \u003cbutton class=\"swap-btn\" onclick=\"cuSwapVolume()\" title=\"単位を入れ替え\"\u003e\u0026#8644;\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003e換算結果\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"vol-result\" value=\"\" min=\"0\" step=\"any\" oninput=\"cuConvertVolumeReverse()\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1rem;\"\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003e変換元の単位\u003c/label\u003e\n      \u003cselect id=\"vol-from\" onchange=\"cuConvertVolume()\"\u003e\n        \u003coption value=\"cup\"\u003eカップ（米国）\u003c/option\u003e\n        \u003coption value=\"tbsp\"\u003e大さじ（tbsp）\u003c/option\u003e\n        \u003coption value=\"tsp\"\u003e小さじ（tsp）\u003c/option\u003e\n        \u003coption value=\"ml\"\u003eミリリットル（ml/cc）\u003c/option\u003e\n        \u003coption value=\"liter\"\u003eリットル（L）\u003c/option\u003e\n        \u003coption value=\"floz\"\u003e液量オンス（fl oz）\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003e変換先の単位\u003c/label\u003e\n      \u003cselect id=\"vol-to\" onchange=\"cuConvertVolume()\"\u003e\n        \u003coption value=\"cup\"\u003eカップ（米国）\u003c/option\u003e\n        \u003coption value=\"tbsp\"\u003e大さじ（tbsp）\u003c/option\u003e\n        \u003coption value=\"tsp\"\u003e小さじ（tsp）\u003c/option\u003e\n        \u003coption value=\"ml\" selected\u003eミリリットル（ml/cc）\u003c/option\u003e\n        \u003coption value=\"liter\"\u003eリットル（L）\u003c/option\u003e\n        \u003coption value=\"floz\"\u003e液量オンス（fl oz）\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"result-box\" id=\"vol-result-box\"\u003e\n    \u003cdiv class=\"result-value\" id=\"vol-result-display\"\u003e236.59 ml\u003c/div\u003e\n    \u003cdiv class=\"result-label\"\u003e1 カップ（米国）= 236.59 ml\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"tip-box\"\u003e\n    ヒント：米国カップ1杯 = 大さじ16杯 = 小さじ48杯 = 約236.6ml = 8 fl oz\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 重量タブ --\u003e\n\u003cdiv id=\"cu-tab-weight\" class=\"panel\"\u003e\n  \u003cdiv class=\"converter-grid\"\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003e数量\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"wt-amount\" value=\"1\" min=\"0\" step=\"any\" oninput=\"cuConvertWeight()\"\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"display:flex;align-items:flex-end;padding-bottom:0.2rem;\"\u003e\n      \u003cbutton class=\"swap-btn\" onclick=\"cuSwapWeight()\" title=\"単位を入れ替え\"\u003e\u0026#8644;\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003e換算結果\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"wt-result\" value=\"\" min=\"0\" step=\"any\" oninput=\"cuConvertWeightReverse()\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1rem;\"\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003e変換元の単位\u003c/label\u003e\n      \u003cselect id=\"wt-from\" onchange=\"cuConvertWeight()\"\u003e\n        \u003coption value=\"g\"\u003eグラム（g）\u003c/option\u003e\n        \u003coption value=\"kg\"\u003eキログラム（kg）\u003c/option\u003e\n        \u003coption value=\"oz\"\u003eオンス（oz）\u003c/option\u003e\n        \u003coption value=\"lb\"\u003eポンド（lb）\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003e変換先の単位\u003c/label\u003e\n      \u003cselect id=\"wt-to\" onchange=\"cuConvertWeight()\"\u003e\n        \u003coption value=\"g\"\u003eグラム（g）\u003c/option\u003e\n        \u003coption value=\"kg\"\u003eキログラム（kg）\u003c/option\u003e\n        \u003coption value=\"oz\" selected\u003eオンス（oz）\u003c/option\u003e\n        \u003coption value=\"lb\"\u003eポンド（lb）\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"result-box\" id=\"wt-result-box\"\u003e\n    \u003cdiv class=\"result-value\" id=\"wt-result-display\"\u003e0.035 oz\u003c/div\u003e\n    \u003cdiv class=\"result-label\"\u003e1 グラム（g）= 0.035 オンス（oz）\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"tip-box\"\u003e\n    ヒント：1 oz = 28.35 g ｜ 1 lb = 16 oz = 453.6 g ｜ 1 kg = 2.205 lb\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 日本の単位タブ --\u003e\n\u003cdiv id=\"cu-tab-jp\" class=\"panel\"\u003e\n  \u003cp style=\"font-size:0.9rem;color:#555;margin-top:0;\"\u003e日本特有の料理・計量単位（合・勺・升）を他の単位へ変換します。\u003c/p\u003e","title":"料理単位変換ツール - キッチン計量換算計算機"},{"content":" 整形 インデント: 2スペース インデント: 4スペース インデント: タブ 圧縮 検証 サンプル ツリービュー コピー コピーしました クリア 入力 JSON 出力 準備完了 文字数: 0 行数: 0 JSONとは JSON（JavaScript Object Notation）は、人間にも機械にも読みやすい軽量なデータ交換フォーマットです。テキストベースで構造化データを表現でき、WebAPIのレスポンスや設定ファイル、データベースのエクスポートなど、あらゆる場面で広く利用されています。キーと値のペア、配列、ネストされたオブジェクトを組み合わせることで、複雑なデータ構造もシンプルに記述できます。\n開発現場では、APIのデバッグ時に圧縮されたJSONを読みやすく整形したり、構文エラーを素早く特定したりする場面が頻繁に発生します。このツールはそういった日常的な作業をブラウザ上で即座に完結させるために設計されており、インストール不要・登録不要で誰でも無料で利用できます。\nこのJSONフォーマッターの使い方 整形: 左の入力エリアにJSONを貼り付け、「整形」ボタンをクリックすると右側に見やすく整形されたJSONが表示されます。インデント幅（2スペース・4スペース・タブ）はドロップダウンで切り替えられます。\n圧縮: 「圧縮」ボタンで空白・改行をすべて除去し、データ転送に適したコンパクトなJSON文字列を生成します。\n検証: 「検証」ボタンでJSON構文の正確さをチェックします。エラーがある場合は行番号と詳細なメッセージを表示するので、どこを修正すればよいかすぐに分かります。\nツリービュー: 「ツリービュー」ボタンでフォルダのような折りたたみ可能なツリー表示に切り替えられます。階層の深いJSONを俯瞰したいときに便利です。\nコピー: 整形・圧縮後の結果を「コピー」ボタンでクリップボードに一発コピーできます。\n関連ツール 文字数・単語数をリアルタイムでカウント → 文字数カウンター 安全なパスワードを即座に生成 → パスワード生成ツール ポモドーロテクニックで集中力アップ → ポモドーロタイマー マークダウンエディターが必要？ → マークダウンプレビュー — リアルタイムでプレビュー\nエンジニア・フリーランスの確定申告を自動化\n開発に集中したいのに、経理業務に時間を取られていませんか？クラウド会計ソフト「freee」なら、銀行口座・クレジットカードと自動連携。確定申告もワンクリック。\nfreee会計を無料で試す 関連記事 無料で使えるAIツールおすすめ15選【2026年版・目的別に厳選】 ChatGPT API初心者向け完全ガイド【2026年版・サンプルコード付き】 AIでExcel作業を自動化する方法【マクロ不要で誰でもできる】 ","permalink":"https://productivity-works.com/ja/tools/json-formatter/","summary":"\u003cdiv id=\"json-app\"\u003e\n\u003cstyle\u003e\n#json-app {\n  font-family: 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  background: #1e1e2e;\n  color: #cdd6f4;\n  border-radius: 12px;\n  padding: 20px;\n  margin: 0 -16px;\n}\n\n#json-app * {\n  box-sizing: border-box;\n}\n\n.json-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 16px;\n  align-items: center;\n}\n\n.json-btn {\n  background: #313244;\n  color: #cdd6f4;\n  border: 1px solid #45475a;\n  border-radius: 6px;\n  padding: 7px 14px;\n  font-size: 13px;\n  cursor: pointer;\n  transition: background 0.15s, border-color 0.15s;\n  white-space: nowrap;\n}\n\n.json-btn:hover {\n  background: #45475a;\n  border-color: #89b4fa;\n}\n\n.json-btn.primary {\n  background: #89b4fa;\n  color: #1e1e2e;\n  border-color: #89b4fa;\n  font-weight: 600;\n}\n\n.json-btn.primary:hover {\n  background: #b4d0ff;\n  border-color: #b4d0ff;\n}\n\n.json-btn.danger {\n  border-color: #f38ba8;\n  color: #f38ba8;\n}\n\n.json-btn.danger:hover {\n  background: #f38ba822;\n}\n\n.indent-select {\n  background: #313244;\n  color: #cdd6f4;\n  border: 1px solid #45475a;\n  border-radius: 6px;\n  padding: 7px 10px;\n  font-size: 13px;\n  cursor: pointer;\n}\n\n.indent-select:focus {\n  outline: none;\n  border-color: #89b4fa;\n}\n\n.json-panes {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n}\n\n@media (max-width: 700px) {\n  .json-panes {\n    grid-template-columns: 1fr;\n  }\n}\n\n.json-pane-label {\n  font-size: 11px;\n  color: #6c7086;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  margin-bottom: 6px;\n}\n\n.json-textarea {\n  width: 100%;\n  height: 300px;\n  background: #181825;\n  color: #cdd6f4;\n  border: 1px solid #313244;\n  border-radius: 8px;\n  padding: 12px;\n  font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;\n  font-size: 13px;\n  line-height: 1.6;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.15s;\n}\n\n.json-textarea:focus {\n  border-color: #89b4fa;\n}\n\n.json-textarea.error-border {\n  border-color: #f38ba8;\n}\n\n.json-output {\n  width: 100%;\n  min-height: 300px;\n  background: #181825;\n  border: 1px solid #313244;\n  border-radius: 8px;\n  padding: 12px;\n  font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;\n  font-size: 13px;\n  line-height: 1.6;\n  overflow: auto;\n  white-space: pre;\n  word-break: break-all;\n}\n\n.json-output.tree-mode {\n  white-space: normal;\n}\n\n.json-status-bar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  margin-top: 10px;\n  font-size: 12px;\n  color: #6c7086;\n  align-items: center;\n}\n\n.json-status-ok {\n  color: #a6e3a1;\n  font-weight: 600;\n}\n\n.json-status-err {\n  color: #f38ba8;\n  font-weight: 600;\n}\n\n.json-error-box {\n  background: #2e1c24;\n  border: 1px solid #f38ba8;\n  border-radius: 6px;\n  padding: 10px 14px;\n  margin-top: 10px;\n  font-size: 13px;\n  color: #f38ba8;\n  display: none;\n}\n\n.json-copy-notice {\n  color: #a6e3a1;\n  font-size: 12px;\n  display: none;\n}\n\n/* Syntax highlight colors */\n.jsh-string  { color: #a6e3a1; }\n.jsh-number  { color: #fab387; }\n.jsh-bool    { color: #cba6f7; }\n.jsh-null    { color: #f38ba8; }\n.jsh-key     { color: #89b4fa; }\n.jsh-punct   { color: #6c7086; }\n\n/* Tree view */\n.tree-node {\n  margin-left: 18px;\n  position: relative;\n}\n\n.tree-toggle {\n  cursor: pointer;\n  user-select: none;\n  display: inline-block;\n  width: 16px;\n  text-align: center;\n  color: #89b4fa;\n  font-size: 11px;\n  margin-right: 2px;\n}\n\n.tree-key {\n  color: #89b4fa;\n  font-weight: 600;\n}\n\n.tree-string { color: #a6e3a1; }\n.tree-number { color: #fab387; }\n.tree-bool   { color: #cba6f7; }\n.tree-null   { color: #f38ba8; }\n\n.tree-collapsed \u003e .tree-node-children {\n  display: none;\n}\n\n.toolbar-sep {\n  width: 1px;\n  height: 24px;\n  background: #45475a;\n  margin: 0 4px;\n}\n\u003c/style\u003e\n\u003cdiv class=\"json-toolbar\"\u003e\n  \u003cbutton class=\"json-btn primary\" onclick=\"jsonFormat()\"\u003e整形\u003c/button\u003e\n  \u003cselect class=\"indent-select\" id=\"indentSelect\"\u003e\n    \u003coption value=\"2\"\u003eインデント: 2スペース\u003c/option\u003e\n    \u003coption value=\"4\"\u003eインデント: 4スペース\u003c/option\u003e\n    \u003coption value=\"tab\"\u003eインデント: タブ\u003c/option\u003e\n  \u003c/select\u003e\n  \u003cbutton class=\"json-btn\" onclick=\"jsonMinify()\"\u003e圧縮\u003c/button\u003e\n  \u003cbutton class=\"json-btn\" onclick=\"jsonValidate()\"\u003e検証\u003c/button\u003e\n  \u003cdiv class=\"toolbar-sep\"\u003e\u003c/div\u003e\n  \u003cbutton class=\"json-btn\" onclick=\"jsonSample()\"\u003eサンプル\u003c/button\u003e\n  \u003cbutton class=\"json-btn\" onclick=\"toggleTreeView()\" id=\"treeBtn\"\u003eツリービュー\u003c/button\u003e\n  \u003cdiv class=\"toolbar-sep\"\u003e\u003c/div\u003e\n  \u003cbutton class=\"json-btn\" onclick=\"jsonCopy()\"\u003eコピー\u003c/button\u003e\n  \u003cspan class=\"json-copy-notice\" id=\"copyNotice\"\u003eコピーしました\u003c/span\u003e\n  \u003cbutton class=\"json-btn danger\" onclick=\"jsonClear()\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"json-panes\"\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"json-pane-label\"\u003e入力 JSON\u003c/div\u003e\n    \u003ctextarea class=\"json-textarea\" id=\"jsonInput\" placeholder='{\"key\": \"value\"}' oninput=\"onInputChange()\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"json-pane-label\"\u003e出力\u003c/div\u003e\n    \u003cdiv class=\"json-output\" id=\"jsonOutput\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"json-status-bar\"\u003e\n  \u003cspan id=\"statusText\"\u003e準備完了\u003c/span\u003e\n  \u003cspan id=\"charCount\"\u003e文字数: 0\u003c/span\u003e\n  \u003cspan id=\"lineCount\"\u003e行数: 0\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv class=\"json-error-box\" id=\"errorBox\"\u003e\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var treeMode = false;\n  var lastParsed = null;\n\n  function getIndent() {\n    var v = document.getElementById('indentSelect').value;\n    if (v === 'tab') return '\\t';\n    return parseInt(v, 10);\n  }\n\n  function highlightJSON(str) {\n    return str.replace(\n      /(\"(\\\\u[a-fA-F0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?|[{}\\[\\],:])/g,\n      function(match) {\n        if (/^\"/.test(match)) {\n          if (/:$/.test(match)) {\n            return '\u003cspan class=\"jsh-key\"\u003e' + escHtml(match) + '\u003c/span\u003e';\n          }\n          return '\u003cspan class=\"jsh-string\"\u003e' + escHtml(match) + '\u003c/span\u003e';\n        }\n        if (/true|false/.test(match)) return '\u003cspan class=\"jsh-bool\"\u003e' + match + '\u003c/span\u003e';\n        if (/null/.test(match))       return '\u003cspan class=\"jsh-null\"\u003e' + match + '\u003c/span\u003e';\n        if (/[{}\\[\\],:]/.test(match)) return '\u003cspan class=\"jsh-punct\"\u003e' + match + '\u003c/span\u003e';\n        return '\u003cspan class=\"jsh-number\"\u003e' + match + '\u003c/span\u003e';\n      }\n    );\n  }\n\n  function escHtml(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;');\n  }\n\n  function setOutput(html) {\n    var out = document.getElementById('jsonOutput');\n    out.innerHTML = html;\n    if (treeMode) {\n      out.classList.add('tree-mode');\n    } else {\n      out.classList.remove('tree-mode');\n    }\n  }\n\n  function setError(msg) {\n    var eb = document.getElementById('errorBox');\n    eb.textContent = msg;\n    eb.style.display = msg ? 'block' : 'none';\n    document.getElementById('jsonInput').classList.toggle('error-border', !!msg);\n  }\n\n  function setStatus(text, type) {\n    var el = document.getElementById('statusText');\n    el.textContent = text;\n    el.className = type === 'ok' ? 'json-status-ok' : type === 'err' ? 'json-status-err' : '';\n  }\n\n  function updateCounts() {\n    var val = document.getElementById('jsonInput').value;\n    document.getElementById('charCount').textContent = '文字数: ' + val.length;\n    document.getElementById('lineCount').textContent = '行数: ' + (val ? val.split('\\n').length : 0);\n  }\n\n  window.onInputChange = function() {\n    updateCounts();\n    setError('');\n    setStatus('準備完了');\n  };\n\n  window.jsonFormat = function() {\n    var input = document.getElementById('jsonInput').value.trim();\n    if (!input) { setStatus('JSONを入力してください'); return; }\n    try {\n      var parsed = JSON.parse(input);\n      lastParsed = parsed;\n      var indent = getIndent();\n      var formatted = JSON.stringify(parsed, null, indent);\n      document.getElementById('jsonInput').value = formatted;\n      updateCounts();\n      setError('');\n      if (treeMode) {\n        renderTree(parsed);\n      } else {\n        setOutput(highlightJSON(escHtml(formatted)));\n      }\n      setStatus('整形完了 — 有効なJSON', 'ok');\n    } catch(e) {\n      handleParseError(e, input);\n    }\n  };\n\n  window.jsonMinify = function() {\n    var input = document.getElementById('jsonInput').value.trim();\n    if (!input) { setStatus('JSONを入力してください'); return; }\n    try {\n      var parsed = JSON.parse(input);\n      lastParsed = parsed;\n      var minified = JSON.stringify(parsed);\n      setError('');\n      if (treeMode) {\n        renderTree(parsed);\n      } else {\n        setOutput(highlightJSON(escHtml(minified)));\n      }\n      setStatus('圧縮完了 — ' + minified.length + '文字', 'ok');\n    } catch(e) {\n      handleParseError(e, input);\n    }\n  };\n\n  window.jsonValidate = function() {\n    var input = document.getElementById('jsonInput').value.trim();\n    if (!input) { setStatus('JSONを入力してください'); return; }\n    try {\n      var parsed = JSON.parse(input);\n      lastParsed = parsed;\n      setError('');\n      setStatus('有効なJSON — 構文エラーなし', 'ok');\n      setOutput('\u003cspan style=\"color:#a6e3a1;font-size:15px;\"\u003e有効なJSON\u003c/span\u003e');\n    } catch(e) {\n      handleParseError(e, input);\n    }\n  };\n\n  function handleParseError(e, input) {\n    lastParsed = null;\n    var msg = e.message;\n    var lineNum = '';\n    var match = msg.match(/position (\\d+)/);\n    if (match) {\n      var pos = parseInt(match[1], 10);\n      var before = input.substring(0, pos);\n      var ln = before.split('\\n').length;\n      lineNum = '（' + ln + '行目付近）';\n    }\n    setError('JSONエラー: ' + msg + lineNum);\n    setStatus('無効なJSON', 'err');\n    setOutput('\u003cspan style=\"color:#f38ba8;\"\u003eJSONの解析に失敗しました。エラー詳細を確認してください。\u003c/span\u003e');\n  }\n\n  window.jsonCopy = function() {\n    var out = document.getElementById('jsonOutput');\n    var text = out.innerText || out.textContent;\n    if (!text.trim()) { setStatus('コピーする内容がありません'); return; }\n    navigator.clipboard.writeText(text).then(function() {\n      var notice = document.getElementById('copyNotice');\n      notice.style.display = 'inline';\n      setTimeout(function() { notice.style.display = 'none'; }, 1800);\n    });\n  };\n\n  window.jsonClear = function() {\n    document.getElementById('jsonInput').value = '';\n    setOutput('');\n    setError('');\n    setStatus('準備完了');\n    updateCounts();\n    lastParsed = null;\n    document.getElementById('jsonInput').classList.remove('error-border');\n  };\n\n  window.jsonSample = function() {\n    var sample = {\n      \"会社情報\": {\n        \"会社名\": \"株式会社サンプル\",\n        \"設立年\": 2020,\n        \"上場\": false,\n        \"従業員数\": 42,\n        \"本社\": \"東京都渋谷区\"\n      },\n      \"製品\": [\n        {\n          \"ID\": \"P001\",\n          \"名称\": \"生産性管理ツール\",\n          \"価格\": 9800,\n          \"在庫\": true,\n          \"タグ\": [\"SaaS\", \"AI\", \"クラウド\"]\n        },\n        {\n          \"ID\": \"P002\",\n          \"名称\": \"データ分析プラットフォーム\",\n          \"価格\": 29800,\n          \"在庫\": false,\n          \"タグ\": [\"分析\", \"BI\"]\n        }\n      ],\n      \"メモ\": null\n    };\n    document.getElementById('jsonInput').value = JSON.stringify(sample, null, 2);\n    updateCounts();\n    setError('');\n    setStatus('サンプルを読み込みました');\n    lastParsed = sample;\n    if (treeMode) {\n      renderTree(sample);\n    } else {\n      setOutput(highlightJSON(escHtml(JSON.stringify(sample, null, 2))));\n    }\n  };\n\n  window.toggleTreeView = function() {\n    treeMode = !treeMode;\n    var btn = document.getElementById('treeBtn');\n    btn.textContent = treeMode ? 'テキストビュー' : 'ツリービュー';\n    btn.style.borderColor = treeMode ? '#89b4fa' : '';\n    btn.style.color = treeMode ? '#89b4fa' : '';\n\n    var input = document.getElementById('jsonInput').value.trim();\n    if (!input) return;\n    try {\n      var parsed = JSON.parse(input);\n      lastParsed = parsed;\n      if (treeMode) {\n        renderTree(parsed);\n      } else {\n        var indent = getIndent();\n        setOutput(highlightJSON(escHtml(JSON.stringify(parsed, null, indent))));\n      }\n    } catch(e) {\n      // keep current output\n    }\n  };\n\n  function renderTree(data) {\n    var out = document.getElementById('jsonOutput');\n    out.classList.add('tree-mode');\n    out.innerHTML = buildTreeHTML(data, null, 0);\n    attachTreeToggles();\n  }\n\n  function buildTreeHTML(val, key, depth) {\n    var html = '';\n    var keyHtml = key !== null ? '\u003cspan class=\"tree-key\"\u003e' + escHtml(JSON.stringify(key)) + '\u003c/span\u003e: ' : '';\n\n    if (val === null) {\n      html = '\u003cdiv\u003e' + keyHtml + '\u003cspan class=\"tree-null\"\u003enull\u003c/span\u003e\u003c/div\u003e';\n    } else if (typeof val === 'boolean') {\n      html = '\u003cdiv\u003e' + keyHtml + '\u003cspan class=\"tree-bool\"\u003e' + val + '\u003c/span\u003e\u003c/div\u003e';\n    } else if (typeof val === 'number') {\n      html = '\u003cdiv\u003e' + keyHtml + '\u003cspan class=\"tree-number\"\u003e' + val + '\u003c/span\u003e\u003c/div\u003e';\n    } else if (typeof val === 'string') {\n      html = '\u003cdiv\u003e' + keyHtml + '\u003cspan class=\"tree-string\"\u003e' + escHtml(JSON.stringify(val)) + '\u003c/span\u003e\u003c/div\u003e';\n    } else if (Array.isArray(val)) {\n      var count = val.length;\n      html += '\u003cdiv class=\"tree-collapsible\"\u003e';\n      html += '\u003cspan class=\"tree-toggle\" onclick=\"treeToggle(this)\"\u003e\u0026#9660;\u003c/span\u003e';\n      html += keyHtml + '\u003cspan style=\"color:#6c7086;\"\u003e[ ' + count + '件 ]\u003c/span\u003e';\n      html += '\u003cdiv class=\"tree-node-children\"\u003e';\n      for (var i = 0; i \u003c count; i++) {\n        html += '\u003cdiv class=\"tree-node\"\u003e' + buildTreeHTML(val[i], i, depth+1) + '\u003c/div\u003e';\n      }\n      html += '\u003c/div\u003e\u003c/div\u003e';\n    } else if (typeof val === 'object') {\n      var keys = Object.keys(val);\n      html += '\u003cdiv class=\"tree-collapsible\"\u003e';\n      html += '\u003cspan class=\"tree-toggle\" onclick=\"treeToggle(this)\"\u003e\u0026#9660;\u003c/span\u003e';\n      html += keyHtml + '\u003cspan style=\"color:#6c7086;\"\u003e{ ' + keys.length + '件 }\u003c/span\u003e';\n      html += '\u003cdiv class=\"tree-node-children\"\u003e';\n      for (var k = 0; k \u003c keys.length; k++) {\n        html += '\u003cdiv class=\"tree-node\"\u003e' + buildTreeHTML(val[keys[k]], keys[k], depth+1) + '\u003c/div\u003e';\n      }\n      html += '\u003c/div\u003e\u003c/div\u003e';\n    }\n    return html;\n  }\n\n  window.treeToggle = function(el) {\n    var parent = el.closest('.tree-collapsible');\n    parent.classList.toggle('tree-collapsed');\n    el.innerHTML = parent.classList.contains('tree-collapsed') ? '\u0026#9654;' : '\u0026#9660;';\n  };\n\n  function attachTreeToggles() {\n    // toggles are inline onclick, no extra wiring needed\n  }\n\n  updateCounts();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003ch2 id=\"jsonとは\"\u003eJSONとは\u003c/h2\u003e\n\u003cp\u003eJSON（JavaScript Object Notation）は、人間にも機械にも読みやすい軽量なデータ交換フォーマットです。テキストベースで構造化データを表現でき、WebAPIのレスポンスや設定ファイル、データベースのエクスポートなど、あらゆる場面で広く利用されています。キーと値のペア、配列、ネストされたオブジェクトを組み合わせることで、複雑なデータ構造もシンプルに記述できます。\u003c/p\u003e","title":"JSONフォーマッター｜JSON整形・バリデーション・圧縮ツール【無料】"},{"content":"2つの文字列を入力するだけで編集距離を即時計算。挿入・削除・置換の操作手順をステップごとに表示し、DPテーブルの可視化やバッチ比較にも対応。すべてブラウザ内で完結します。\n1ペア比較 バッチ比較 文字列 A 文字列 B 計算する \u0026#8646; 入れ替え クリア 大文字/小文字を区別する DPテーブルを表示 — 編集距離 — 類似度 0 挿入 0 削除 0 置換 類似度 編集操作のステップバイステップ 動的計画法テーブル （ハイライト = 最適経路） バッチ比較 1行に1ペア、カンマ区切りで入力してください：文字列1,文字列2\nすべて比較 クリア 大文字/小文字を区別する 開発・研究ツールの経費管理もかんたんに\nfreee会計なら、ソフトウェア・サーバー費用の経費精算もクラウドで一元管理。確定申告もスムーズに。無料トライアル実施中。 freeeを無料で試す → レーベンシュタイン距離とは？ レーベンシュタイン距離（編集距離）とは、ある文字列を別の文字列に変換するために必要な挿入・削除・置換の最小操作回数です。1965年にロシアの数学者ウラジーミル・レーベンシュタインが考案しました。\n有名な例：\u0026ldquo;kitten\u0026rdquo; を \u0026ldquo;sitting\u0026rdquo; に変換するには3回の操作が必要 → 編集距離 3\n操作 例 コスト 置換 k → s（kitten → sitten） 1 置換 e → i（sitten → sittin） 1 挿入 sittin → sitting 1 類似度（%） は (1 − 距離 / max(len_A, len_B)) × 100 で計算します。\n動的計画法による計算の仕組み サイズ (m+1) × (n+1) の行列を構築します（m, n は各文字列の長さ）。各セル dp[i][j] は「文字列Aの最初のi文字」と「文字列Bの最初のj文字」の間の最小編集距離を保持します。\n漸化式：\nA[i] == B[j] の場合：dp[i][j] = dp[i-1][j-1]（コストなし） それ以外：dp[i][j] = 1 + min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1])（置換・削除・挿入） dp[m][n] からトレースバックすることで、具体的な操作手順を復元します。\n主な活用例 分野 活用方法 スペルチェッカー 辞書内の最近傍単語を特定 DNA配列解析 遺伝子配列の類似度を計測 あいまい検索 検索結果を類似度でランク付け 盗用検出 ほぼ同一の文章を発見 データ統合 重複レコードの名寄せ 自動補正 ユーザーの意図した単語を推定 自然言語処理 テキスト類似度の特徴量として利用 使い方・ヒント 大文字/小文字の区別 — デフォルトは区別なし。コード識別子やパスワード比較時は有効化してください。 DPテーブル表示 — 「DPテーブルを表示」を有効にすると、動的計画法の行列と最適経路（ハイライト）を確認できます。20文字以内の文字列のみ対応。 バッチ比較 — 文字列1,文字列2 の形式で複数ペアをまとめて比較できます。しきい値の検証などに便利です。 入れ替え — AとBを一発で入れ替えます。レーベンシュタイン距離は対称なので d(A,B) == d(B,A) です。 日本語対応 — ひらがな・カタカナ・漢字も1文字単位で計算します。 テキストを行単位で比較する → テキスト差分比較ツール 文字数・単語数をカウントする → 文字数カウンター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/levenshtein-distance/","summary":"\u003cp\u003e2つの文字列を入力するだけで編集距離を即時計算。挿入・削除・置換の操作手順をステップごとに表示し、DPテーブルの可視化やバッチ比較にも対応。すべてブラウザ内で完結します。\u003c/p\u003e\n\u003cdiv id=\"ld-app\"\u003e\n\u003cstyle\u003e\n#ld-app *,\n#ld-app *::before,\n#ld-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#ld-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", Roboto, sans-serif;\n  font-size: 14px;\n  color: #1e293b;\n  line-height: 1.6;\n}\n#ld-app .ld-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 18px 20px;\n  margin-bottom: 16px;\n}\n#ld-app .ld-row {\n  display: flex;\n  gap: 14px;\n  flex-wrap: wrap;\n}\n#ld-app .ld-col {\n  flex: 1;\n  min-width: 180px;\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n#ld-app label.ld-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#ld-app input.ld-input {\n  width: 100%;\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 15px;\n  font-family: \"SF Mono\", \"Fira Code\", Consolas, monospace;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.15s, box-shadow 0.15s;\n}\n#ld-app input.ld-input:focus {\n  border-color: #6366f1;\n  box-shadow: 0 0 0 3px rgba(99,102,241,0.12);\n}\n#ld-app .ld-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n}\n#ld-app .ld-btn {\n  padding: 7px 16px;\n  border-radius: 7px;\n  border: 1.5px solid #cbd5e1;\n  background: #f8fafc;\n  color: #334155;\n  font-size: 13px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: background 0.15s, border-color 0.15s;\n  white-space: nowrap;\n}\n#ld-app .ld-btn:hover {\n  background: #f1f5f9;\n  border-color: #94a3b8;\n}\n#ld-app .ld-btn-primary {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n  font-weight: 600;\n}\n#ld-app .ld-btn-primary:hover {\n  background: #4f46e5;\n  border-color: #4f46e5;\n}\n#ld-app label.ld-check {\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  font-size: 13px;\n  color: #475569;\n  cursor: pointer;\n  user-select: none;\n}\n#ld-app label.ld-check input[type=\"checkbox\"] {\n  width: 15px;\n  height: 15px;\n  accent-color: #6366f1;\n  cursor: pointer;\n}\n#ld-app .ld-result-banner {\n  display: none;\n  gap: 20px;\n  flex-wrap: wrap;\n  background: linear-gradient(135deg, #eef2ff 0%, #f0fdf4 100%);\n  border: 1.5px solid #c7d2fe;\n  border-radius: 10px;\n  padding: 16px 20px;\n  margin-bottom: 16px;\n}\n#ld-app .ld-result-banner.show { display: flex; }\n#ld-app .ld-stat {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 2px;\n  min-width: 80px;\n}\n#ld-app .ld-stat-num {\n  font-size: 28px;\n  font-weight: 700;\n  color: #4f46e5;\n  line-height: 1;\n}\n#ld-app .ld-stat-label {\n  font-size: 11px;\n  color: #64748b;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.03em;\n  text-align: center;\n}\n#ld-app .ld-sim-bar-wrap {\n  margin-top: 8px;\n  background: #e2e8f0;\n  border-radius: 99px;\n  height: 8px;\n  overflow: hidden;\n}\n#ld-app .ld-sim-bar {\n  height: 100%;\n  border-radius: 99px;\n  background: linear-gradient(90deg, #6366f1, #22c55e);\n  transition: width 0.4s ease;\n  width: 0%;\n}\n#ld-app .ld-section-title {\n  font-size: 12px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 10px;\n}\n#ld-app .ld-steps {\n  display: none;\n  flex-direction: column;\n  gap: 6px;\n  max-height: 280px;\n  overflow-y: auto;\n  padding-right: 4px;\n}\n#ld-app .ld-steps.show { display: flex; }\n#ld-app .ld-step {\n  display: flex;\n  align-items: flex-start;\n  gap: 10px;\n  padding: 8px 12px;\n  border-radius: 7px;\n  border-left: 4px solid transparent;\n  background: #f8fafc;\n  font-size: 13px;\n}\n#ld-app .ld-step.ins { border-left-color: #22c55e; background: #f0fdf4; }\n#ld-app .ld-step.del { border-left-color: #ef4444; background: #fef2f2; }\n#ld-app .ld-step.sub { border-left-color: #f59e0b; background: #fffbeb; }\n#ld-app .ld-step.eq  { border-left-color: #cbd5e1; }\n#ld-app .ld-step-icon { font-weight: 700; font-size: 14px; min-width: 18px; }\n#ld-app .ld-step-text { color: #334155; line-height: 1.5; }\n#ld-app .ld-step-text code {\n  font-family: \"SF Mono\", \"Fira Code\", Consolas, monospace;\n  background: rgba(0,0,0,0.06);\n  padding: 1px 5px;\n  border-radius: 4px;\n  font-size: 12px;\n}\n#ld-app .ld-matrix-wrap {\n  display: none;\n  overflow-x: auto;\n  margin-top: 4px;\n}\n#ld-app .ld-matrix-wrap.show { display: block; }\n#ld-app .ld-matrix-table {\n  border-collapse: collapse;\n  font-family: \"SF Mono\", \"Fira Code\", Consolas, monospace;\n  font-size: 12px;\n}\n#ld-app .ld-matrix-table th,\n#ld-app .ld-matrix-table td {\n  width: 32px;\n  height: 32px;\n  text-align: center;\n  vertical-align: middle;\n  border: 1px solid #e2e8f0;\n}\n#ld-app .ld-matrix-table th {\n  background: #f1f5f9;\n  color: #64748b;\n  font-weight: 700;\n  font-size: 11px;\n}\n#ld-app .ld-matrix-table td {\n  background: #fff;\n  color: #1e293b;\n}\n#ld-app .ld-matrix-table td.ld-path {\n  background: #eef2ff;\n  color: #4f46e5;\n  font-weight: 700;\n}\n#ld-app .ld-matrix-table td.ld-path-end {\n  background: #6366f1;\n  color: #fff;\n  font-weight: 700;\n}\n#ld-app .ld-batch-area {\n  width: 100%;\n  min-height: 100px;\n  padding: 10px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-family: \"SF Mono\", \"Fira Code\", Consolas, monospace;\n  font-size: 13px;\n  resize: vertical;\n  outline: none;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.15s, box-shadow 0.15s;\n}\n#ld-app .ld-batch-area:focus {\n  border-color: #6366f1;\n  box-shadow: 0 0 0 3px rgba(99,102,241,0.12);\n}\n#ld-app .ld-batch-results {\n  display: none;\n  flex-direction: column;\n  gap: 6px;\n  margin-top: 10px;\n}\n#ld-app .ld-batch-results.show { display: flex; }\n#ld-app .ld-batch-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  padding: 8px 12px;\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 7px;\n  font-size: 13px;\n  flex-wrap: wrap;\n}\n#ld-app .ld-batch-pair {\n  font-family: \"SF Mono\", \"Fira Code\", Consolas, monospace;\n  color: #475569;\n  flex: 1;\n  min-width: 120px;\n}\n#ld-app .ld-batch-dist {\n  font-weight: 700;\n  color: #4f46e5;\n  min-width: 90px;\n  text-align: right;\n}\n#ld-app .ld-batch-sim {\n  color: #16a34a;\n  font-weight: 600;\n  min-width: 70px;\n  text-align: right;\n}\n#ld-app .ld-tab-row {\n  display: flex;\n  gap: 4px;\n  margin-bottom: 14px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#ld-app .ld-tab {\n  padding: 8px 16px;\n  font-size: 13px;\n  font-weight: 600;\n  color: #64748b;\n  cursor: pointer;\n  border: none;\n  background: none;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  transition: color 0.15s, border-color 0.15s;\n}\n#ld-app .ld-tab.active {\n  color: #6366f1;\n  border-bottom-color: #6366f1;\n}\n#ld-app .ld-tab-panel { display: none; }\n#ld-app .ld-tab-panel.active { display: block; }\n#ld-app .ld-hint {\n  font-size: 12px;\n  color: #94a3b8;\n  margin-top: 5px;\n}\n#ld-app .ld-empty {\n  color: #94a3b8;\n  font-size: 13px;\n  text-align: center;\n  padding: 20px 0;\n}\n#ld-app .ld-error {\n  color: #dc2626;\n  font-size: 13px;\n  padding: 8px 12px;\n  background: #fef2f2;\n  border-radius: 7px;\n  border: 1px solid #fecaca;\n}\n\u003c/style\u003e\n\u003c!-- タブナビゲーション --\u003e\n\u003cdiv class=\"ld-tab-row\"\u003e\n  \u003cbutton class=\"ld-tab active\" data-tab=\"single\"\u003e1ペア比較\u003c/button\u003e\n  \u003cbutton class=\"ld-tab\" data-tab=\"batch\"\u003eバッチ比較\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- ===== 1ペア比較タブ ===== --\u003e\n\u003cdiv class=\"ld-tab-panel active\" id=\"ld-tab-single\"\u003e\n  \u003cdiv class=\"ld-card\"\u003e\n    \u003cdiv class=\"ld-row\" style=\"margin-bottom:14px;\"\u003e\n      \u003cdiv class=\"ld-col\"\u003e\n        \u003clabel class=\"ld-label\" for=\"ld-str1\"\u003e文字列 A\u003c/label\u003e\n        \u003cinput class=\"ld-input\" id=\"ld-str1\" type=\"text\" placeholder=\"例：kitten\" autocomplete=\"off\" spellcheck=\"false\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"ld-col\"\u003e\n        \u003clabel class=\"ld-label\" for=\"ld-str2\"\u003e文字列 B\u003c/label\u003e\n        \u003cinput class=\"ld-input\" id=\"ld-str2\" type=\"text\" placeholder=\"例：sitting\" autocomplete=\"off\" spellcheck=\"false\"\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ld-toolbar\"\u003e\n      \u003cbutton class=\"ld-btn ld-btn-primary\" id=\"ld-calc-btn\"\u003e計算する\u003c/button\u003e\n      \u003cbutton class=\"ld-btn\" id=\"ld-swap-btn\"\u003e\u0026#8646; 入れ替え\u003c/button\u003e\n      \u003cbutton class=\"ld-btn\" id=\"ld-clear-btn\"\u003eクリア\u003c/button\u003e\n      \u003clabel class=\"ld-check\"\u003e\n        \u003cinput type=\"checkbox\" id=\"ld-case-toggle\"\u003e 大文字/小文字を区別する\n      \u003c/label\u003e\n      \u003clabel class=\"ld-check\"\u003e\n        \u003cinput type=\"checkbox\" id=\"ld-matrix-toggle\"\u003e DPテーブルを表示\n      \u003c/label\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 結果バナー --\u003e\n  \u003cdiv class=\"ld-result-banner\" id=\"ld-banner\"\u003e\n    \u003cdiv class=\"ld-stat\"\u003e\n      \u003cspan class=\"ld-stat-num\" id=\"ld-dist-num\"\u003e—\u003c/span\u003e\n      \u003cspan class=\"ld-stat-label\"\u003e編集距離\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ld-stat\"\u003e\n      \u003cspan class=\"ld-stat-num\" id=\"ld-sim-num\"\u003e—\u003c/span\u003e\n      \u003cspan class=\"ld-stat-label\"\u003e類似度\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ld-stat\"\u003e\n      \u003cspan class=\"ld-stat-num\" id=\"ld-ins-num\" style=\"color:#16a34a;\"\u003e0\u003c/span\u003e\n      \u003cspan class=\"ld-stat-label\"\u003e挿入\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ld-stat\"\u003e\n      \u003cspan class=\"ld-stat-num\" id=\"ld-del-num\" style=\"color:#dc2626;\"\u003e0\u003c/span\u003e\n      \u003cspan class=\"ld-stat-label\"\u003e削除\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ld-stat\"\u003e\n      \u003cspan class=\"ld-stat-num\" id=\"ld-sub-num\" style=\"color:#d97706;\"\u003e0\u003c/span\u003e\n      \u003cspan class=\"ld-stat-label\"\u003e置換\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"flex:1;min-width:140px;display:flex;flex-direction:column;justify-content:center;\"\u003e\n      \u003cdiv style=\"font-size:11px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:0.04em;margin-bottom:5px;\"\u003e類似度\u003c/div\u003e\n      \u003cdiv class=\"ld-sim-bar-wrap\"\u003e\u003cdiv class=\"ld-sim-bar\" id=\"ld-sim-bar\"\u003e\u003c/div\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- ステップ説明 --\u003e\n  \u003cdiv class=\"ld-card\" id=\"ld-steps-card\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"ld-section-title\"\u003e編集操作のステップバイステップ\u003c/div\u003e\n    \u003cdiv class=\"ld-steps show\" id=\"ld-steps\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- DPテーブル --\u003e\n  \u003cdiv class=\"ld-card\" id=\"ld-matrix-card\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"ld-section-title\"\u003e動的計画法テーブル \u003cspan style=\"font-size:11px;font-weight:400;color:#94a3b8;\"\u003e（ハイライト = 最適経路）\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"ld-matrix-wrap show\" id=\"ld-matrix\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ===== バッチ比較タブ ===== --\u003e\n\u003cdiv class=\"ld-tab-panel\" id=\"ld-tab-batch\"\u003e\n  \u003cdiv class=\"ld-card\"\u003e\n    \u003cdiv class=\"ld-section-title\" style=\"margin-bottom:8px;\"\u003eバッチ比較\u003c/div\u003e\n    \u003cp class=\"ld-hint\" style=\"margin-bottom:10px;\"\u003e1行に1ペア、カンマ区切りで入力してください：\u003ccode style=\"font-family:monospace;background:#f1f5f9;padding:1px 5px;border-radius:3px;\"\u003e文字列1,文字列2\u003c/code\u003e\u003c/p\u003e","title":"レーベンシュタイン距離計算ツール"},{"content":" あなたの情報を入力してください kg lbs 体重（kg） 運動量 ほぼ運動しない（座り仕事中心） 軽い運動（週1〜3日） 適度な運動（週3〜5日） 活発（週6〜7日） 非常に活発（毎日ハードに運動） 気候・環境 涼しい・寒い 普通（温暖） 暑い 非常に暑い・多湿 1日の必要水分量を計算する — リットル / 日 が目安です 今日の水分補給トラッカー 0 / 0 杯 ログ済み 0% 今日の目標達成！素晴らしい水分補給ができました！ + コップ1杯（250ml）を記録 リセット 水分補給を習慣化するコツ 朝起きたらまずコップ1杯の水を飲む習慣をつけましょう。 スマートフォンに1時間おきの水分補給アラームをセットする。 きゅうり・スイカ・レタスなど水分の多い食材を積極的に摂る。 運動30分ごとに追加で250〜500mlを摂取しましょう。 カフェイン飲料は利尿作用があるため、コーヒー1杯に対して水を1杯追加する。 尿の色が薄い黄色なら適切な水分補給ができているサイン。濃い場合は要注意。 デスクに水筒を置いておくだけで飲む頻度が自然に増えます。 夏や高温多湿の環境では、目安量より最低500ml多めに飲みましょう。 健康管理も仕事も効率化 → freee会計で日々の管理を自動化 関連ツール BMI計算 → BMI計算ツール 体脂肪率計算 → 体脂肪率計算ツール カロリー計算 → カロリー計算ツール ","permalink":"https://productivity-works.com/ja/tools/water-intake-calculator/","summary":"\u003cdiv id=\"wi-app\"\u003e\n\u003cstyle\u003e\n#wi-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Yu Gothic UI', Meiryo, sans-serif;\n  max-width: 720px;\n  margin: 0 auto;\n  color: #1a2b3c;\n}\n#wi-app h2 {\n  font-size: 1.25rem;\n  font-weight: 700;\n  margin: 1.5rem 0 0.75rem;\n  color: #0077cc;\n}\n#wi-app .wi-card {\n  background: #f0f8ff;\n  border: 1px solid #b3d9f5;\n  border-radius: 12px;\n  padding: 1.5rem;\n  margin-bottom: 1.25rem;\n}\n#wi-app .wi-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1rem;\n}\n@media (max-width: 520px) {\n  #wi-app .wi-grid { grid-template-columns: 1fr; }\n}\n#wi-app label {\n  display: block;\n  font-size: 0.85rem;\n  font-weight: 600;\n  margin-bottom: 0.3rem;\n  color: #345;\n}\n#wi-app input[type=\"number\"],\n#wi-app select {\n  width: 100%;\n  padding: 0.55rem 0.75rem;\n  border: 1.5px solid #90c4e8;\n  border-radius: 8px;\n  font-size: 1rem;\n  background: #fff;\n  box-sizing: border-box;\n  transition: border-color 0.2s;\n}\n#wi-app input[type=\"number\"]:focus,\n#wi-app select:focus {\n  border-color: #0077cc;\n  outline: none;\n}\n#wi-app .wi-unit-toggle {\n  display: flex;\n  gap: 0.5rem;\n  margin-bottom: 0.75rem;\n}\n#wi-app .wi-unit-btn {\n  flex: 1;\n  padding: 0.45rem;\n  border: 1.5px solid #90c4e8;\n  border-radius: 8px;\n  background: #fff;\n  font-size: 0.9rem;\n  cursor: pointer;\n  font-weight: 600;\n  transition: all 0.2s;\n}\n#wi-app .wi-unit-btn.active {\n  background: #0077cc;\n  color: #fff;\n  border-color: #0077cc;\n}\n#wi-app .wi-calc-btn {\n  display: block;\n  width: 100%;\n  padding: 0.9rem;\n  background: linear-gradient(135deg, #0077cc, #00aaff);\n  color: #fff;\n  border: none;\n  border-radius: 10px;\n  font-size: 1.05rem;\n  font-weight: 700;\n  cursor: pointer;\n  margin-top: 1rem;\n  letter-spacing: 0.02em;\n  transition: opacity 0.2s;\n}\n#wi-app .wi-calc-btn:hover { opacity: 0.9; }\n#wi-app .wi-result-box {\n  display: none;\n  background: linear-gradient(135deg, #e8f5ff, #d0eeff);\n  border: 2px solid #0077cc;\n  border-radius: 12px;\n  padding: 1.25rem 1.5rem;\n  margin-bottom: 1.25rem;\n  text-align: center;\n}\n#wi-app .wi-result-box.show { display: block; }\n#wi-app .wi-result-liters {\n  font-size: 3rem;\n  font-weight: 800;\n  color: #0055aa;\n  line-height: 1.1;\n}\n#wi-app .wi-result-label {\n  font-size: 1rem;\n  color: #0077cc;\n  font-weight: 600;\n  margin-top: 0.2rem;\n}\n#wi-app .wi-result-glasses {\n  font-size: 0.95rem;\n  color: #345;\n  margin-top: 0.5rem;\n}\n#wi-app .wi-tracker {\n  display: none;\n  margin-bottom: 1.25rem;\n}\n#wi-app .wi-tracker.show { display: block; }\n#wi-app .wi-progress-bar-wrap {\n  background: #d0e8f5;\n  border-radius: 999px;\n  height: 22px;\n  overflow: hidden;\n  margin: 0.6rem 0 0.4rem;\n}\n#wi-app .wi-progress-bar-fill {\n  height: 100%;\n  background: linear-gradient(90deg, #00aaff, #0077cc);\n  border-radius: 999px;\n  transition: width 0.4s ease;\n  width: 0%;\n}\n#wi-app .wi-progress-label {\n  font-size: 0.85rem;\n  color: #456;\n  text-align: right;\n}\n#wi-app .wi-glasses-area {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin: 1rem 0 0.75rem;\n}\n#wi-app .wi-glass {\n  font-size: 2rem;\n  cursor: pointer;\n  opacity: 0.25;\n  transition: opacity 0.2s, transform 0.15s;\n  user-select: none;\n  line-height: 1;\n}\n#wi-app .wi-glass.filled { opacity: 1; }\n#wi-app .wi-glass:hover { transform: scale(1.15); }\n#wi-app .wi-tracker-status {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #0055aa;\n  margin-bottom: 0.5rem;\n}\n#wi-app .wi-tracker-actions {\n  display: flex;\n  gap: 0.75rem;\n  margin-top: 0.75rem;\n}\n#wi-app .wi-log-btn {\n  flex: 1;\n  padding: 0.65rem;\n  background: #0077cc;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 0.95rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.2s;\n}\n#wi-app .wi-log-btn:hover { opacity: 0.85; }\n#wi-app .wi-reset-btn {\n  padding: 0.65rem 1.1rem;\n  background: #fff;\n  color: #0077cc;\n  border: 1.5px solid #0077cc;\n  border-radius: 8px;\n  font-size: 0.95rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n#wi-app .wi-reset-btn:hover { background: #e8f4ff; }\n#wi-app .wi-congrats {\n  display: none;\n  background: #e6fff0;\n  border: 2px solid #22bb66;\n  border-radius: 10px;\n  padding: 0.9rem 1.2rem;\n  font-weight: 700;\n  color: #117733;\n  text-align: center;\n  margin-bottom: 0.75rem;\n  font-size: 1rem;\n}\n#wi-app .wi-congrats.show { display: block; }\n#wi-app .wi-tips-list {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n#wi-app .wi-tips-list li {\n  padding: 0.5rem 0 0.5rem 1.75rem;\n  border-bottom: 1px solid #c8e4f5;\n  position: relative;\n  font-size: 0.95rem;\n  line-height: 1.6;\n}\n#wi-app .wi-tips-list li:last-child { border-bottom: none; }\n#wi-app .wi-tips-list li::before {\n  content: attr(data-icon);\n  position: absolute;\n  left: 0;\n  font-size: 1.1rem;\n}\n#wi-app .wi-cta {\n  background: #fffbea;\n  border: 1.5px solid #f5c842;\n  border-radius: 10px;\n  padding: 1rem 1.25rem;\n  margin-top: 1rem;\n  font-size: 0.95rem;\n  line-height: 1.6;\n}\n#wi-app .wi-cta a {\n  color: #c47d00;\n  font-weight: 700;\n}\n\u003c/style\u003e\n\u003ch2\u003eあなたの情報を入力してください\u003c/h2\u003e\n\u003cdiv class=\"wi-card\"\u003e\n  \u003cdiv class=\"wi-unit-toggle\"\u003e\n    \u003cbutton class=\"wi-unit-btn active\" id=\"wi-kg-btn\" onclick=\"wiSetUnit('kg')\"\u003ekg\u003c/button\u003e\n    \u003cbutton class=\"wi-unit-btn\" id=\"wi-lbs-btn\" onclick=\"wiSetUnit('lbs')\"\u003elbs\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wi-grid\"\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"wi-weight\"\u003e体重（\u003cspan id=\"wi-unit-label\"\u003ekg\u003c/span\u003e）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"wi-weight\" min=\"1\" max=\"500\" placeholder=\"例：60\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"wi-activity\"\u003e運動量\u003c/label\u003e\n      \u003cselect id=\"wi-activity\"\u003e\n        \u003coption value=\"1.0\"\u003eほぼ運動しない（座り仕事中心）\u003c/option\u003e\n        \u003coption value=\"1.1\"\u003e軽い運動（週1〜3日）\u003c/option\u003e\n        \u003coption value=\"1.2\" selected\u003e適度な運動（週3〜5日）\u003c/option\u003e\n        \u003coption value=\"1.35\"\u003e活発（週6〜7日）\u003c/option\u003e\n        \u003coption value=\"1.5\"\u003e非常に活発（毎日ハードに運動）\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"wi-climate\"\u003e気候・環境\u003c/label\u003e\n      \u003cselect id=\"wi-climate\"\u003e\n        \u003coption value=\"0\"\u003e涼しい・寒い\u003c/option\u003e\n        \u003coption value=\"0.3\" selected\u003e普通（温暖）\u003c/option\u003e\n        \u003coption value=\"0.5\"\u003e暑い\u003c/option\u003e\n        \u003coption value=\"0.75\"\u003e非常に暑い・多湿\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"wi-calc-btn\" onclick=\"wiCalculate()\"\u003e1日の必要水分量を計算する\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wi-result-box\" id=\"wi-result-box\"\u003e\n  \u003cdiv class=\"wi-result-liters\" id=\"wi-result-liters\"\u003e—\u003c/div\u003e\n  \u003cdiv class=\"wi-result-label\"\u003eリットル / 日 が目安です\u003c/div\u003e\n  \u003cdiv class=\"wi-result-glasses\" id=\"wi-result-glasses\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wi-tracker wi-card\" id=\"wi-tracker\"\u003e\n  \u003ch2 style=\"margin-top:0\"\u003e今日の水分補給トラッカー\u003c/h2\u003e\n  \u003cdiv class=\"wi-tracker-status\" id=\"wi-tracker-status\"\u003e0 / 0 杯 ログ済み\u003c/div\u003e\n  \u003cdiv class=\"wi-progress-bar-wrap\"\u003e\n    \u003cdiv class=\"wi-progress-bar-fill\" id=\"wi-progress-fill\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wi-progress-label\" id=\"wi-progress-label\"\u003e0%\u003c/div\u003e\n  \u003cdiv class=\"wi-glasses-area\" id=\"wi-glasses-area\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"wi-congrats\" id=\"wi-congrats\"\u003e今日の目標達成！素晴らしい水分補給ができました！\u003c/div\u003e\n  \u003cdiv class=\"wi-tracker-actions\"\u003e\n    \u003cbutton class=\"wi-log-btn\" onclick=\"wiLogGlass()\"\u003e+ コップ1杯（250ml）を記録\u003c/button\u003e\n    \u003cbutton class=\"wi-reset-btn\" onclick=\"wiResetDay()\"\u003eリセット\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003e水分補給を習慣化するコツ\u003c/h2\u003e\n\u003cdiv class=\"wi-card\"\u003e\n  \u003cul class=\"wi-tips-list\"\u003e\n    \u003cli data-icon=\"🌅\"\u003e朝起きたらまずコップ1杯の水を飲む習慣をつけましょう。\u003c/li\u003e\n    \u003cli data-icon=\"⏰\"\u003eスマートフォンに1時間おきの水分補給アラームをセットする。\u003c/li\u003e\n    \u003cli data-icon=\"🥒\"\u003eきゅうり・スイカ・レタスなど水分の多い食材を積極的に摂る。\u003c/li\u003e\n    \u003cli data-icon=\"🏃\"\u003e運動30分ごとに追加で250〜500mlを摂取しましょう。\u003c/li\u003e\n    \u003cli data-icon=\"☕\"\u003eカフェイン飲料は利尿作用があるため、コーヒー1杯に対して水を1杯追加する。\u003c/li\u003e\n    \u003cli data-icon=\"💛\"\u003e尿の色が薄い黄色なら適切な水分補給ができているサイン。濃い場合は要注意。\u003c/li\u003e\n    \u003cli data-icon=\"🥤\"\u003eデスクに水筒を置いておくだけで飲む頻度が自然に増えます。\u003c/li\u003e\n    \u003cli data-icon=\"🌡️\"\u003e夏や高温多湿の環境では、目安量より最低500ml多めに飲みましょう。\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003e健康管理も仕事も効率化 → \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計で日々の管理を自動化\u003c/a\u003e\n\u003c/p\u003e","title":"水分摂取量計算ツール - 1日の必要水分量ガイド"},{"content":" CSSフィルタージェネレーター\nスライダーを動かしてフィルターエフェクトを作成し、CSSをそのままコピーできます。画像をドラッグ＆ドロップするか、URLを貼り付けてご自身の画像でお試しください。\nライブプレビュー \u0026#9654; 適用前後を比較 CSSをコピー \u0026lt;div class=\u0026quot;cf-image-wrapper\u0026quot; id=\u0026quot;cf-image-wrapper\u0026quot;\u0026gt; \u0026lt;canvas id=\u0026quot;cf-default-canvas\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt;\u0026lt;/canvas\u0026gt; \u0026lt;img id=\u0026quot;cf-preview-img\u0026quot; class=\u0026quot;cf-preview-img\u0026quot; alt=\u0026quot;プレビュー\u0026quot; /\u0026gt; \u0026lt;img id=\u0026quot;cf-before-img\u0026quot; class=\u0026quot;cf-before-img\u0026quot; alt=\u0026quot;適用前\u0026quot; /\u0026gt; \u0026lt;div class=\u0026quot;cf-compare-label cf-label-before\u0026quot;\u0026gt;適用前\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cf-compare-label cf-label-after\u0026quot;\u0026gt;適用後\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cf-divider-line\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cf-drop-overlay\u0026quot;\u0026gt;ここに画像をドロップ\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cf-upload-bar\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cf-url-input\u0026quot; id=\u0026quot;cf-url-input\u0026quot; placeholder=\u0026quot;画像URLを貼り付けてEnterキーを押す…\u0026quot; /\u0026gt; \u0026lt;button class=\u0026quot;cf-btn cf-btn-sm\u0026quot; id=\u0026quot;cf-load-url-btn\u0026quot;\u0026gt;読込\u0026lt;/button\u0026gt; \u0026lt;label class=\u0026quot;cf-btn cf-btn-sm\u0026quot; style=\u0026quot;cursor:pointer;\u0026quot;\u0026gt; アップロード \u0026lt;input type=\u0026quot;file\u0026quot; id=\u0026quot;cf-file-input\u0026quot; accept=\u0026quot;image/*\u0026quot; style=\u0026quot;display:none;\u0026quot; /\u0026gt; \u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cf-output-panel\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cf-css-code\u0026quot; id=\u0026quot;cf-css-output\u0026quot;\u0026gt;\u0026lt;span class=\u0026quot;cf-css-prop\u0026quot;\u0026gt;filter\u0026lt;/span\u0026gt;: \u0026lt;span class=\u0026quot;cf-css-val\u0026quot; id=\u0026quot;cf-css-val-span\u0026quot;\u0026gt;none\u0026lt;/span\u0026gt;;\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;cf-copy-btn\u0026quot; id=\u0026quot;cf-copy-output-btn\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; フィルター設定 全リセット \u0026lt;div class=\u0026quot;cf-filter-list\u0026quot; id=\u0026quot;cf-filter-list\u0026quot;\u0026gt; \u0026lt;!-- JSで描画 --\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cf-presets-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cf-presets-label\u0026quot;\u0026gt;プリセット\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cf-presets-grid\u0026quot; id=\u0026quot;cf-presets-grid\u0026quot;\u0026gt; \u0026lt;!-- JSで描画 --\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 関連ツール グラデーション作成 → CSSグラデーションジェネレーター 色のコントラスト確認 → カラーコントラストチェッカー 画像をリサイズ → 画像リサイザー \u0026#128196; freee で経理・請求書を自動化しよう フリーランス・中小企業向けのクラウド会計ソフト。銀行口座・クレカと自動連携で、確定申告もラクラク。30日間無料トライアル実施中。\n無料で試す ","permalink":"https://productivity-works.com/ja/tools/css-filter-generator/","summary":"\u003cdiv id=\"cf-app\"\u003e\n\u003cstyle\u003e\n#cf-app *,\n#cf-app *::before,\n#cf-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#cf-app {\n  font-family: \"Hiragino Sans\", \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", -apple-system, BlinkMacSystemFont, sans-serif;\n  font-size: 15px;\n  color: #1a1a2e;\n  line-height: 1.6;\n}\n\n/* Layout */\n#cf-app .cf-layout {\n  display: grid;\n  grid-template-columns: 1fr 340px;\n  gap: 24px;\n  align-items: start;\n}\n\n@media (max-width: 900px) {\n  #cf-app .cf-layout {\n    grid-template-columns: 1fr;\n  }\n}\n\n/* Preview Panel */\n#cf-app .cf-preview-panel {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  overflow: hidden;\n}\n\n#cf-app .cf-preview-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 12px 16px;\n  background: #f8fafc;\n  border-bottom: 1px solid #e2e8f0;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n\n#cf-app .cf-preview-header h3 {\n  font-size: 14px;\n  font-weight: 600;\n  color: #475569;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n\n#cf-app .cf-preview-actions {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n\n#cf-app .cf-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 6px 12px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  background: #fff;\n  color: #374151;\n  font-size: 13px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.15s ease;\n  white-space: nowrap;\n}\n\n#cf-app .cf-btn:hover {\n  background: #f1f5f9;\n  border-color: #94a3b8;\n}\n\n#cf-app .cf-btn-primary {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n\n#cf-app .cf-btn-primary:hover {\n  background: #4f46e5;\n  border-color: #4f46e5;\n}\n\n#cf-app .cf-btn-success {\n  background: #10b981;\n  border-color: #10b981;\n  color: #fff;\n}\n\n#cf-app .cf-btn-danger {\n  background: #ef4444;\n  border-color: #ef4444;\n  color: #fff;\n  font-size: 12px;\n  padding: 4px 8px;\n}\n\n#cf-app .cf-btn-sm {\n  padding: 4px 8px;\n  font-size: 12px;\n}\n\n/* Image Wrapper */\n#cf-app .cf-image-wrapper {\n  position: relative;\n  overflow: hidden;\n  background: #0f172a;\n  min-height: 260px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n#cf-app .cf-preview-img {\n  display: block;\n  max-width: 100%;\n  max-height: 400px;\n  width: auto;\n  height: auto;\n  object-fit: contain;\n  transition: filter 0.2s ease;\n  user-select: none;\n}\n\n#cf-app .cf-before-img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 50%;\n  height: 100%;\n  object-fit: cover;\n  clip-path: inset(0 50% 0 0);\n  filter: none !important;\n  display: none;\n  max-width: none;\n  max-height: none;\n}\n\n#cf-app.cf-compare-mode .cf-before-img {\n  display: block;\n}\n\n#cf-app.cf-compare-mode .cf-preview-img {\n  width: 100%;\n  max-height: 400px;\n  object-fit: cover;\n}\n\n#cf-app .cf-compare-label {\n  position: absolute;\n  top: 8px;\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  padding: 3px 8px;\n  border-radius: 4px;\n  display: none;\n}\n\n#cf-app.cf-compare-mode .cf-compare-label {\n  display: block;\n}\n\n#cf-app .cf-label-before {\n  left: 8px;\n  background: rgba(0,0,0,0.6);\n  color: #fff;\n}\n\n#cf-app .cf-label-after {\n  right: 8px;\n  background: rgba(99,102,241,0.85);\n  color: #fff;\n}\n\n#cf-app .cf-divider-line {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  transform: translateX(-50%);\n  width: 2px;\n  height: 100%;\n  background: #6366f1;\n  display: none;\n}\n\n#cf-app.cf-compare-mode .cf-divider-line {\n  display: block;\n}\n\n/* Drop overlay */\n#cf-app .cf-drop-overlay {\n  position: absolute;\n  inset: 0;\n  background: rgba(99,102,241,0.85);\n  color: #fff;\n  font-size: 18px;\n  font-weight: 600;\n  display: none;\n  align-items: center;\n  justify-content: center;\n  pointer-events: none;\n}\n\n#cf-app .cf-image-wrapper.cf-drag-over .cf-drop-overlay {\n  display: flex;\n}\n\n/* Upload bar */\n#cf-app .cf-upload-bar {\n  display: flex;\n  gap: 8px;\n  padding: 10px 14px;\n  background: #f8fafc;\n  border-top: 1px solid #e2e8f0;\n  align-items: center;\n  flex-wrap: wrap;\n}\n\n#cf-app .cf-url-input {\n  flex: 1;\n  min-width: 120px;\n  padding: 6px 10px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  outline: none;\n  transition: border-color 0.15s;\n}\n\n#cf-app .cf-url-input:focus {\n  border-color: #6366f1;\n  box-shadow: 0 0 0 3px rgba(99,102,241,0.12);\n}\n\n/* CSS Output */\n#cf-app .cf-output-panel {\n  background: #0f172a;\n  color: #e2e8f0;\n  padding: 14px 16px;\n  border-top: 1px solid #e2e8f0;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 13px;\n  line-height: 1.6;\n  display: flex;\n  align-items: flex-start;\n  gap: 10px;\n  justify-content: space-between;\n}\n\n#cf-app .cf-css-code {\n  flex: 1;\n  white-space: pre-wrap;\n  word-break: break-all;\n  color: #a5b4fc;\n}\n\n#cf-app .cf-css-prop { color: #67e8f9; }\n#cf-app .cf-css-val  { color: #fde68a; }\n\n#cf-app .cf-copy-btn {\n  flex-shrink: 0;\n  padding: 5px 10px;\n  border: 1px solid #334155;\n  border-radius: 6px;\n  background: #1e293b;\n  color: #94a3b8;\n  font-size: 12px;\n  cursor: pointer;\n  transition: all 0.15s;\n  font-family: inherit;\n}\n\n#cf-app .cf-copy-btn:hover {\n  background: #334155;\n  color: #e2e8f0;\n}\n\n#cf-app .cf-copy-btn.cf-copied {\n  background: #10b981;\n  border-color: #10b981;\n  color: #fff;\n}\n\n/* Controls Panel */\n#cf-app .cf-controls-panel {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  overflow: hidden;\n}\n\n#cf-app .cf-controls-header {\n  padding: 12px 16px;\n  background: #f8fafc;\n  border-bottom: 1px solid #e2e8f0;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n#cf-app .cf-controls-header h3 {\n  font-size: 14px;\n  font-weight: 600;\n  color: #475569;\n}\n\n#cf-app .cf-filter-list {\n  padding: 12px;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  max-height: 520px;\n  overflow-y: auto;\n}\n\n#cf-app .cf-filter-item {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 10px 12px;\n}\n\n#cf-app .cf-filter-top {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 6px;\n}\n\n#cf-app .cf-filter-name {\n  font-size: 13px;\n  font-weight: 600;\n  color: #374151;\n}\n\n#cf-app .cf-filter-val {\n  font-size: 12px;\n  font-weight: 600;\n  color: #6366f1;\n  min-width: 48px;\n  text-align: right;\n}\n\n#cf-app .cf-filter-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n#cf-app .cf-slider {\n  -webkit-appearance: none;\n  flex: 1;\n  height: 4px;\n  border-radius: 2px;\n  background: #e2e8f0;\n  outline: none;\n  cursor: pointer;\n}\n\n#cf-app .cf-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #6366f1;\n  cursor: pointer;\n  border: 2px solid #fff;\n  box-shadow: 0 0 0 1px #6366f1;\n  transition: transform 0.1s;\n}\n\n#cf-app .cf-slider::-webkit-slider-thumb:hover {\n  transform: scale(1.2);\n}\n\n#cf-app .cf-slider::-moz-range-thumb {\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #6366f1;\n  cursor: pointer;\n  border: 2px solid #fff;\n  box-shadow: 0 0 0 1px #6366f1;\n}\n\n#cf-app .cf-reset-single {\n  background: none;\n  border: none;\n  color: #94a3b8;\n  font-size: 15px;\n  cursor: pointer;\n  padding: 0 2px;\n  line-height: 1;\n  transition: color 0.15s;\n  flex-shrink: 0;\n}\n\n#cf-app .cf-reset-single:hover {\n  color: #ef4444;\n}\n\n/* Shadow sub */\n#cf-app .cf-shadow-sub {\n  margin-top: 8px;\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 6px;\n}\n\n#cf-app .cf-shadow-sub label {\n  font-size: 11px;\n  color: #64748b;\n  display: block;\n  margin-bottom: 2px;\n}\n\n#cf-app .cf-shadow-color-row {\n  grid-column: span 2;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n#cf-app .cf-color-input {\n  width: 36px;\n  height: 28px;\n  border: 1px solid #cbd5e1;\n  border-radius: 4px;\n  cursor: pointer;\n  padding: 1px;\n  background: none;\n}\n\n/* Presets */\n#cf-app .cf-presets-section {\n  padding: 12px;\n  border-top: 1px solid #e2e8f0;\n}\n\n#cf-app .cf-presets-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  margin-bottom: 8px;\n}\n\n#cf-app .cf-presets-grid {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 6px;\n}\n\n#cf-app .cf-preset-btn {\n  padding: 7px 6px;\n  border: 1px solid #e2e8f0;\n  border-radius: 6px;\n  background: #f8fafc;\n  color: #374151;\n  font-size: 12px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.15s;\n  text-align: center;\n}\n\n#cf-app .cf-preset-btn:hover {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n\n#cf-app .cf-preset-btn.cf-active {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n\n/* Toast */\n#cf-app .cf-toast {\n  position: fixed;\n  bottom: 24px;\n  right: 24px;\n  background: #1e293b;\n  color: #fff;\n  padding: 10px 18px;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 500;\n  opacity: 0;\n  transform: translateY(8px);\n  transition: opacity 0.2s, transform 0.2s;\n  pointer-events: none;\n  z-index: 9999;\n  box-shadow: 0 4px 16px rgba(0,0,0,0.25);\n}\n\n#cf-app .cf-toast.cf-show {\n  opacity: 1;\n  transform: translateY(0);\n}\n\n#cf-app .cf-section-title {\n  font-size: 22px;\n  font-weight: 700;\n  color: #1e293b;\n  margin-bottom: 6px;\n}\n\n#cf-app .cf-section-sub {\n  font-size: 14px;\n  color: #64748b;\n  margin-bottom: 20px;\n}\n\n/* freee CTA */\n#cf-app .cf-freee-cta {\n  margin-top: 36px;\n  padding: 20px 24px;\n  background: linear-gradient(135deg, #e0f2fe 0%, #ede9fe 100%);\n  border: 1px solid #bfdbfe;\n  border-radius: 12px;\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  flex-wrap: wrap;\n}\n\n#cf-app .cf-freee-icon {\n  font-size: 36px;\n  flex-shrink: 0;\n}\n\n#cf-app .cf-freee-body {\n  flex: 1;\n  min-width: 200px;\n}\n\n#cf-app .cf-freee-body h4 {\n  font-size: 16px;\n  font-weight: 700;\n  color: #1e3a8a;\n  margin-bottom: 4px;\n}\n\n#cf-app .cf-freee-body p {\n  font-size: 13px;\n  color: #475569;\n  line-height: 1.5;\n}\n\n#cf-app .cf-freee-link {\n  display: inline-block;\n  padding: 9px 18px;\n  background: #6366f1;\n  color: #fff;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  text-decoration: none;\n  transition: background 0.15s;\n  white-space: nowrap;\n}\n\n#cf-app .cf-freee-link:hover {\n  background: #4f46e5;\n}\n\u003c/style\u003e\n\u003cp class=\"cf-section-title\"\u003eCSSフィルタージェネレーター\u003c/p\u003e","title":"CSSフィルタージェネレーター — 画像エフェクトツール"},{"content":" 1件変換 一括変換 入力テキスト \u0026lt;div class=\u0026quot;sg-options-grid\u0026quot; style=\u0026quot;margin-bottom:16px;\u0026quot;\u0026gt; \u0026lt;div\u0026gt; \u0026lt;label for=\u0026quot;sg-separator\u0026quot;\u0026gt;区切り文字\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;sg-separator\u0026quot; onchange=\u0026quot;sgConvert()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;-\u0026quot;\u0026gt;ハイフン ( - )\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;_\u0026quot;\u0026gt;アンダースコア ( _ )\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;.\u0026quot;\u0026gt;ドット ( . )\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;label for=\u0026quot;sg-maxlen\u0026quot;\u0026gt;最大文字数\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;sg-maxlen\u0026quot; value=\u0026quot;80\u0026quot; min=\u0026quot;10\u0026quot; max=\u0026quot;500\u0026quot; oninput=\u0026quot;sgConvert()\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;display:flex;flex-direction:column;justify-content:flex-end;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sg-checkbox-row\u0026quot; style=\u0026quot;margin-bottom:6px;\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;sg-stopwords\u0026quot; onchange=\u0026quot;sgConvert()\u0026quot; /\u0026gt; \u0026lt;label for=\u0026quot;sg-stopwords\u0026quot;\u0026gt;ストップワード除去\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sg-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;sg-translit\u0026quot; checked onchange=\u0026quot;sgConvert()\u0026quot; /\u0026gt; \u0026lt;label for=\u0026quot;sg-translit\u0026quot;\u0026gt;アクセント文字変換\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;margin-bottom:10px;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sg-section-label\u0026quot;\u0026gt;ベースURL（プレビュー用）\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sg-base-url-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;sg-base-url-prefix\u0026quot;\u0026gt;https://\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sg-baseurl\u0026quot; class=\u0026quot;sg-base-url-input\u0026quot; value=\u0026quot;example.com/\u0026quot; placeholder=\u0026quot;example.com/\u0026quot; oninput=\u0026quot;sgConvert()\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;margin-bottom:8px;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sg-section-label\u0026quot;\u0026gt;生成されたスラッグ\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sg-result-box empty\u0026quot; id=\u0026quot;sg-result\u0026quot;\u0026gt;スラッグがここに表示されます…\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sg-preview-box empty\u0026quot; id=\u0026quot;sg-preview\u0026quot;\u0026gt;フルURLのプレビューがここに表示されます…\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sg-row\u0026quot; style=\u0026quot;margin-top:12px;\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;sg-copy-btn\u0026quot; id=\u0026quot;sg-copy-btn\u0026quot; onclick=\u0026quot;sgCopySlug()\u0026quot;\u0026gt; \u0026lt;svg width=\u0026quot;14\u0026quot; height=\u0026quot;14\u0026quot; viewBox=\u0026quot;0 0 24 24\u0026quot; fill=\u0026quot;none\u0026quot; stroke=\u0026quot;currentColor\u0026quot; stroke-width=\u0026quot;2.5\u0026quot; stroke-linecap=\u0026quot;round\u0026quot; stroke-linejoin=\u0026quot;round\u0026quot;\u0026gt;\u0026lt;rect x=\u0026quot;9\u0026quot; y=\u0026quot;9\u0026quot; width=\u0026quot;13\u0026quot; height=\u0026quot;13\u0026quot; rx=\u0026quot;2\u0026quot;/\u0026gt;\u0026lt;path d=\u0026quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; スラッグをコピー \u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;sg-copy-btn\u0026quot; id=\u0026quot;sg-copy-url-btn\u0026quot; onclick=\u0026quot;sgCopyUrl()\u0026quot; style=\u0026quot;background:#0284c7;\u0026quot;\u0026gt; \u0026lt;svg width=\u0026quot;14\u0026quot; height=\u0026quot;14\u0026quot; viewBox=\u0026quot;0 0 24 24\u0026quot; fill=\u0026quot;none\u0026quot; stroke=\u0026quot;currentColor\u0026quot; stroke-width=\u0026quot;2.5\u0026quot; stroke-linecap=\u0026quot;round\u0026quot; stroke-linejoin=\u0026quot;round\u0026quot;\u0026gt;\u0026lt;path d=\u0026quot;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\u0026quot;/\u0026gt;\u0026lt;path d=\u0026quot;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; フルURLをコピー \u0026lt;/button\u0026gt; \u0026lt;span class=\u0026quot;sg-char-badge\u0026quot; id=\u0026quot;sg-char-count\u0026quot;\u0026gt;0 文字\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; テキストを1行ずつ貼り付けてください \u0026lt;div class=\u0026quot;sg-options-grid\u0026quot; style=\u0026quot;margin-bottom:16px;\u0026quot;\u0026gt; \u0026lt;div\u0026gt; \u0026lt;label for=\u0026quot;sg-bulk-separator\u0026quot;\u0026gt;区切り文字\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;sg-bulk-separator\u0026quot; onchange=\u0026quot;sgBulkConvert()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;-\u0026quot;\u0026gt;ハイフン ( - )\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;_\u0026quot;\u0026gt;アンダースコア ( _ )\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;.\u0026quot;\u0026gt;ドット ( . )\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;label for=\u0026quot;sg-bulk-maxlen\u0026quot;\u0026gt;最大文字数\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;sg-bulk-maxlen\u0026quot; value=\u0026quot;80\u0026quot; min=\u0026quot;10\u0026quot; max=\u0026quot;500\u0026quot; oninput=\u0026quot;sgBulkConvert()\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;display:flex;flex-direction:column;justify-content:flex-end;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sg-checkbox-row\u0026quot; style=\u0026quot;margin-bottom:6px;\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;sg-bulk-stopwords\u0026quot; onchange=\u0026quot;sgBulkConvert()\u0026quot; /\u0026gt; \u0026lt;label for=\u0026quot;sg-bulk-stopwords\u0026quot;\u0026gt;ストップワード除去\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sg-checkbox-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;sg-bulk-translit\u0026quot; checked onchange=\u0026quot;sgBulkConvert()\u0026quot; /\u0026gt; \u0026lt;label for=\u0026quot;sg-bulk-translit\u0026quot;\u0026gt;アクセント文字変換\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sg-bulk-results\u0026quot; id=\u0026quot;sg-bulk-results\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → URLエンコード → URLエンコーダー メタタグ生成 → メタタグ生成ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/slug-generator/","summary":"\u003cdiv id=\"sg-app\"\u003e\n\u003cstyle\u003e\n#sg-app {\n  font-family: 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Noto Sans JP', -apple-system, sans-serif;\n  max-width: 700px;\n  margin: 0 auto;\n  color: #1e293b;\n  box-sizing: border-box;\n}\n#sg-app *, #sg-app *::before, #sg-app *::after {\n  box-sizing: border-box;\n}\n#sg-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin: 0 0 14px 0;\n  color: #0f172a;\n}\n#sg-app .sg-card {\n  background: #ffffff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 22px 20px;\n  margin-bottom: 18px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.05);\n}\n#sg-app label {\n  display: block;\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 6px;\n}\n#sg-app input[type=\"text\"],\n#sg-app textarea,\n#sg-app select,\n#sg-app input[type=\"number\"] {\n  width: 100%;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  padding: 10px 12px;\n  font-size: 15px;\n  color: #1e293b;\n  background: #f8fafc;\n  outline: none;\n  transition: border-color 0.15s;\n  font-family: inherit;\n}\n#sg-app input[type=\"text\"]:focus,\n#sg-app textarea:focus,\n#sg-app select:focus,\n#sg-app input[type=\"number\"]:focus {\n  border-color: #6366f1;\n  background: #fff;\n}\n#sg-app textarea {\n  resize: vertical;\n  min-height: 90px;\n}\n#sg-app .sg-options-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 0;\n}\n@media (max-width: 560px) {\n  #sg-app .sg-options-grid {\n    grid-template-columns: 1fr 1fr;\n  }\n}\n@media (max-width: 380px) {\n  #sg-app .sg-options-grid {\n    grid-template-columns: 1fr;\n  }\n}\n#sg-app .sg-checkbox-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-top: 4px;\n}\n#sg-app .sg-checkbox-row input[type=\"checkbox\"] {\n  width: 16px;\n  height: 16px;\n  accent-color: #6366f1;\n  cursor: pointer;\n  flex-shrink: 0;\n}\n#sg-app .sg-checkbox-row label {\n  margin: 0;\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  cursor: pointer;\n}\n#sg-app .sg-result-box {\n  background: #f1f5f9;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  padding: 11px 14px;\n  font-size: 15px;\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n  color: #1e293b;\n  word-break: break-all;\n  min-height: 42px;\n  line-height: 1.5;\n}\n#sg-app .sg-result-box.empty {\n  color: #94a3b8;\n  font-family: inherit;\n  font-size: 14px;\n}\n#sg-app .sg-preview-box {\n  background: #eff6ff;\n  border: 1.5px solid #bfdbfe;\n  border-radius: 8px;\n  padding: 10px 14px;\n  font-size: 13px;\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n  color: #1d4ed8;\n  word-break: break-all;\n  margin-top: 10px;\n  min-height: 38px;\n  line-height: 1.5;\n}\n#sg-app .sg-preview-box.empty {\n  color: #94a3b8;\n  font-family: inherit;\n  font-size: 13px;\n}\n#sg-app .sg-row {\n  display: flex;\n  gap: 10px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n#sg-app .sg-copy-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 9px 18px;\n  background: #6366f1;\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n  white-space: nowrap;\n}\n#sg-app .sg-copy-btn:hover {\n  background: #4f46e5;\n}\n#sg-app .sg-copy-btn.copied {\n  background: #16a34a;\n}\n#sg-app .sg-char-badge {\n  font-size: 12px;\n  color: #64748b;\n  background: #f1f5f9;\n  border: 1px solid #e2e8f0;\n  border-radius: 20px;\n  padding: 3px 10px;\n}\n#sg-app .sg-tab-row {\n  display: flex;\n  gap: 0;\n  margin-bottom: 16px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#sg-app .sg-tab {\n  padding: 8px 20px;\n  font-size: 13px;\n  font-weight: 700;\n  color: #64748b;\n  cursor: pointer;\n  border: none;\n  background: none;\n  border-bottom: 2.5px solid transparent;\n  margin-bottom: -2px;\n  transition: color 0.12s, border-color 0.12s;\n}\n#sg-app .sg-tab.active {\n  color: #6366f1;\n  border-bottom-color: #6366f1;\n}\n#sg-app .sg-bulk-results {\n  margin-top: 12px;\n}\n#sg-app .sg-bulk-row {\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n  padding: 7px 0;\n  border-bottom: 1px solid #f1f5f9;\n}\n#sg-app .sg-bulk-row:last-child {\n  border-bottom: none;\n}\n#sg-app .sg-bulk-input {\n  font-size: 13px;\n  color: #64748b;\n  flex: 1;\n  word-break: break-all;\n  padding-top: 1px;\n}\n#sg-app .sg-bulk-arrow {\n  font-size: 13px;\n  color: #94a3b8;\n  flex-shrink: 0;\n  padding-top: 1px;\n}\n#sg-app .sg-bulk-slug {\n  font-size: 13px;\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n  color: #4f46e5;\n  flex: 1.5;\n  word-break: break-all;\n  padding-top: 1px;\n}\n#sg-app .sg-bulk-copy {\n  background: none;\n  border: 1px solid #c7d2fe;\n  border-radius: 5px;\n  color: #6366f1;\n  font-size: 11px;\n  font-weight: 700;\n  padding: 2px 9px;\n  cursor: pointer;\n  flex-shrink: 0;\n  transition: background 0.12s;\n}\n#sg-app .sg-bulk-copy:hover {\n  background: #eef2ff;\n}\n#sg-app .sg-bulk-copy-all {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 7px 16px;\n  background: #6366f1;\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  margin-top: 12px;\n  transition: background 0.15s;\n}\n#sg-app .sg-bulk-copy-all:hover {\n  background: #4f46e5;\n}\n#sg-app .sg-section-label {\n  font-size: 12px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #94a3b8;\n  margin-bottom: 10px;\n}\n#sg-app .sg-base-url-row {\n  display: flex;\n  align-items: center;\n  gap: 0;\n  margin-top: 10px;\n}\n#sg-app .sg-base-url-prefix {\n  background: #e2e8f0;\n  border: 1.5px solid #cbd5e1;\n  border-right: none;\n  border-radius: 8px 0 0 8px;\n  padding: 10px 10px;\n  font-size: 13px;\n  color: #64748b;\n  white-space: nowrap;\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n}\n#sg-app .sg-base-url-input {\n  border-radius: 0 8px 8px 0 !important;\n}\n\u003c/style\u003e\n\u003cdiv class=\"sg-card\"\u003e\n  \u003cdiv class=\"sg-tab-row\"\u003e\n    \u003cbutton class=\"sg-tab active\" id=\"sg-tab-single\" onclick=\"sgSwitchTab('single')\"\u003e1件変換\u003c/button\u003e\n    \u003cbutton class=\"sg-tab\" id=\"sg-tab-bulk\" onclick=\"sgSwitchTab('bulk')\"\u003e一括変換\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- 1件変換モード --\u003e\n  \u003cdiv id=\"sg-panel-single\"\u003e\n    \u003cdiv style=\"margin-bottom:14px;\"\u003e\n      \u003clabel for=\"sg-input\"\u003e入力テキスト\u003c/label\u003e\n      \u003cinput type=\"text\" id=\"sg-input\" placeholder=\"例: Hello World! ブログ記事タイトル\" oninput=\"sgConvert()\" /\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div class=\u0026quot;sg-options-grid\u0026quot; style=\u0026quot;margin-bottom:16px;\u0026quot;\u0026gt;\n  \u0026lt;div\u0026gt;\n    \u0026lt;label for=\u0026quot;sg-separator\u0026quot;\u0026gt;区切り文字\u0026lt;/label\u0026gt;\n    \u0026lt;select id=\u0026quot;sg-separator\u0026quot; onchange=\u0026quot;sgConvert()\u0026quot;\u0026gt;\n      \u0026lt;option value=\u0026quot;-\u0026quot;\u0026gt;ハイフン ( - )\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;_\u0026quot;\u0026gt;アンダースコア ( _ )\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;.\u0026quot;\u0026gt;ドット ( . )\u0026lt;/option\u0026gt;\n    \u0026lt;/select\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div\u0026gt;\n    \u0026lt;label for=\u0026quot;sg-maxlen\u0026quot;\u0026gt;最大文字数\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;sg-maxlen\u0026quot; value=\u0026quot;80\u0026quot; min=\u0026quot;10\u0026quot; max=\u0026quot;500\u0026quot; oninput=\u0026quot;sgConvert()\u0026quot; /\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div style=\u0026quot;display:flex;flex-direction:column;justify-content:flex-end;\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;sg-checkbox-row\u0026quot; style=\u0026quot;margin-bottom:6px;\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;sg-stopwords\u0026quot; onchange=\u0026quot;sgConvert()\u0026quot; /\u0026gt;\n      \u0026lt;label for=\u0026quot;sg-stopwords\u0026quot;\u0026gt;ストップワード除去\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;sg-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;sg-translit\u0026quot; checked onchange=\u0026quot;sgConvert()\u0026quot; /\u0026gt;\n      \u0026lt;label for=\u0026quot;sg-translit\u0026quot;\u0026gt;アクセント文字変換\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div style=\u0026quot;margin-bottom:10px;\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;sg-section-label\u0026quot;\u0026gt;ベースURL（プレビュー用）\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;sg-base-url-row\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;sg-base-url-prefix\u0026quot;\u0026gt;https://\u0026lt;/span\u0026gt;\n    \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sg-baseurl\u0026quot; class=\u0026quot;sg-base-url-input\u0026quot; value=\u0026quot;example.com/\u0026quot; placeholder=\u0026quot;example.com/\u0026quot; oninput=\u0026quot;sgConvert()\u0026quot; /\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div style=\u0026quot;margin-bottom:8px;\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;sg-section-label\u0026quot;\u0026gt;生成されたスラッグ\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;sg-result-box empty\u0026quot; id=\u0026quot;sg-result\u0026quot;\u0026gt;スラッグがここに表示されます…\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;sg-preview-box empty\u0026quot; id=\u0026quot;sg-preview\u0026quot;\u0026gt;フルURLのプレビューがここに表示されます…\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;sg-row\u0026quot; style=\u0026quot;margin-top:12px;\u0026quot;\u0026gt;\n  \u0026lt;button class=\u0026quot;sg-copy-btn\u0026quot; id=\u0026quot;sg-copy-btn\u0026quot; onclick=\u0026quot;sgCopySlug()\u0026quot;\u0026gt;\n    \u0026lt;svg width=\u0026quot;14\u0026quot; height=\u0026quot;14\u0026quot; viewBox=\u0026quot;0 0 24 24\u0026quot; fill=\u0026quot;none\u0026quot; stroke=\u0026quot;currentColor\u0026quot; stroke-width=\u0026quot;2.5\u0026quot; stroke-linecap=\u0026quot;round\u0026quot; stroke-linejoin=\u0026quot;round\u0026quot;\u0026gt;\u0026lt;rect x=\u0026quot;9\u0026quot; y=\u0026quot;9\u0026quot; width=\u0026quot;13\u0026quot; height=\u0026quot;13\u0026quot; rx=\u0026quot;2\u0026quot;/\u0026gt;\u0026lt;path d=\u0026quot;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n    スラッグをコピー\n  \u0026lt;/button\u0026gt;\n  \u0026lt;button class=\u0026quot;sg-copy-btn\u0026quot; id=\u0026quot;sg-copy-url-btn\u0026quot; onclick=\u0026quot;sgCopyUrl()\u0026quot; style=\u0026quot;background:#0284c7;\u0026quot;\u0026gt;\n    \u0026lt;svg width=\u0026quot;14\u0026quot; height=\u0026quot;14\u0026quot; viewBox=\u0026quot;0 0 24 24\u0026quot; fill=\u0026quot;none\u0026quot; stroke=\u0026quot;currentColor\u0026quot; stroke-width=\u0026quot;2.5\u0026quot; stroke-linecap=\u0026quot;round\u0026quot; stroke-linejoin=\u0026quot;round\u0026quot;\u0026gt;\u0026lt;path d=\u0026quot;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\u0026quot;/\u0026gt;\u0026lt;path d=\u0026quot;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n    フルURLをコピー\n  \u0026lt;/button\u0026gt;\n  \u0026lt;span class=\u0026quot;sg-char-badge\u0026quot; id=\u0026quot;sg-char-count\u0026quot;\u0026gt;0 文字\u0026lt;/span\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- 一括変換モード --\u003e\n  \u003cdiv id=\"sg-panel-bulk\" style=\"display:none;\"\u003e\n    \u003cdiv style=\"margin-bottom:14px;\"\u003e\n      \u003clabel for=\"sg-bulk-input\"\u003eテキストを1行ずつ貼り付けてください\u003c/label\u003e\n      \u003ctextarea id=\"sg-bulk-input\" placeholder=\"最初の記事タイトル\u0026#10;Hello World Example\u0026#10;別の素晴らしい記事\" oninput=\"sgBulkConvert()\" rows=\"6\"\u003e\u003c/textarea\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div class=\u0026quot;sg-options-grid\u0026quot; style=\u0026quot;margin-bottom:16px;\u0026quot;\u0026gt;\n  \u0026lt;div\u0026gt;\n    \u0026lt;label for=\u0026quot;sg-bulk-separator\u0026quot;\u0026gt;区切り文字\u0026lt;/label\u0026gt;\n    \u0026lt;select id=\u0026quot;sg-bulk-separator\u0026quot; onchange=\u0026quot;sgBulkConvert()\u0026quot;\u0026gt;\n      \u0026lt;option value=\u0026quot;-\u0026quot;\u0026gt;ハイフン ( - )\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;_\u0026quot;\u0026gt;アンダースコア ( _ )\u0026lt;/option\u0026gt;\n      \u0026lt;option value=\u0026quot;.\u0026quot;\u0026gt;ドット ( . )\u0026lt;/option\u0026gt;\n    \u0026lt;/select\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div\u0026gt;\n    \u0026lt;label for=\u0026quot;sg-bulk-maxlen\u0026quot;\u0026gt;最大文字数\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;sg-bulk-maxlen\u0026quot; value=\u0026quot;80\u0026quot; min=\u0026quot;10\u0026quot; max=\u0026quot;500\u0026quot; oninput=\u0026quot;sgBulkConvert()\u0026quot; /\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div style=\u0026quot;display:flex;flex-direction:column;justify-content:flex-end;\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;sg-checkbox-row\u0026quot; style=\u0026quot;margin-bottom:6px;\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;sg-bulk-stopwords\u0026quot; onchange=\u0026quot;sgBulkConvert()\u0026quot; /\u0026gt;\n      \u0026lt;label for=\u0026quot;sg-bulk-stopwords\u0026quot;\u0026gt;ストップワード除去\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;sg-checkbox-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;sg-bulk-translit\u0026quot; checked onchange=\u0026quot;sgBulkConvert()\u0026quot; /\u0026gt;\n      \u0026lt;label for=\u0026quot;sg-bulk-translit\u0026quot;\u0026gt;アクセント文字変換\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;sg-bulk-results\u0026quot; id=\u0026quot;sg-bulk-results\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"URLスラッグ生成ツール"},{"content":" 表示: 月表示 年間一覧 月: 1月2月 3月4月 5月6月 7月8月 9月10月 11月12月 年: 週の開始: 日曜日 月曜日 \u0026#128438; 印刷 \u0026#8592; 前へ 今日 次へ \u0026#8594; 予定を追加 閉じる 追加 使い方:\n月・年を選択するか、年間一覧で12ヶ月をまとめて表示。 週の開始日（日曜・月曜）を選択できます。 日付をクリックして予定・メモを追加 — ブラウザに自動保存されます。 印刷ボタンで印刷専用レイアウトのカレンダーを出力。 1日の予定管理 → デイリープランナー イベントカウントダウン → イベントカウントダウン 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; ","permalink":"https://productivity-works.com/ja/tools/calendar-generator/","summary":"\u003cdiv id=\"cg-app\"\u003e\n\u003cstyle\u003e\n#cg-app *,#cg-app *::before,#cg-app *::after{box-sizing:border-box;margin:0;padding:0}\n#cg-app{\n  font-family:'Hiragino Sans','Noto Sans JP','Yu Gothic UI',sans-serif;\n  font-size:15px;line-height:1.6;\n  color:#1e293b;\n  background:#f8fafc;\n  border-radius:12px;\n  padding:20px;\n  max-width:980px;\n  margin:0 auto;\n}\n\u003cp\u003e/* ── ツールバー ── */\n#cg-app .cg-toolbar{\ndisplay:flex;flex-wrap:wrap;gap:10px;align-items:center;\nbackground:#fff;border:1px solid #e2e8f0;border-radius:10px;\npadding:14px 16px;margin-bottom:18px;\n}\n#cg-app .cg-toolbar label{font-size:13px;font-weight:600;color:#475569;margin-right:4px;}\n#cg-app .cg-toolbar select,\n#cg-app .cg-toolbar input[type=number]{\nborder:1px solid #cbd5e1;border-radius:6px;padding:5px 8px;\nfont-size:14px;color:#1e293b;background:#f8fafc;\noutline:none;cursor:pointer;\n}\n#cg-app .cg-toolbar select:focus,\n#cg-app .cg-toolbar input[type=number]:focus{border-color:#3b82f6;}\n#cg-app .cg-toolbar input[type=number]{width:76px;}\n#cg-app .cg-btn{\npadding:7px 14px;border-radius:7px;border:none;cursor:pointer;\nfont-size:13px;font-weight:600;transition:background 0.15s,transform 0.1s;\n}\n#cg-app .cg-btn:active{transform:scale(0.97);}\n#cg-app .cg-btn-primary{background:#3b82f6;color:#fff;}\n#cg-app .cg-btn-primary:hover{background:#2563eb;}\n#cg-app .cg-btn-secondary{background:#e2e8f0;color:#334155;}\n#cg-app .cg-btn-secondary:hover{background:#cbd5e1;}\n#cg-app .cg-btn-print{background:#10b981;color:#fff;}\n#cg-app .cg-btn-print:hover{background:#059669;}\n#cg-app .cg-sep{width:1px;height:28px;background:#e2e8f0;margin:0 4px;}\n#cg-app .cg-toolbar-group{display:flex;align-items:center;gap:6px;}\u003c/p\u003e","title":"カレンダー生成ツール"},{"content":" バーコード設定 バーコードの種類 Code 128（汎用性が高い） Code 39 EAN-13 データ / 値\nバーの色 背景色 バー幅: 2px 高さ: 80px バーコードを生成する\nPNGでダウンロード 在庫管理・販売管理もかんたんに\nfreee会計なら、商品の在庫管理・売上管理もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → QRコード作成 \u0026rarr; QRコードジェネレーター\n請求書作成 \u0026rarr; 請求書ジェネレーター\n確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連ツール QRコード生成 → QRコード生成ツール ","permalink":"https://productivity-works.com/ja/tools/barcode-generator/","summary":"\u003cdiv id=\"bg-app\"\u003e\n\u003cstyle\u003e\n#bg-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  max-width: 720px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#bg-app h2.bg-section-title {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 24px 0 12px;\n  padding-bottom: 6px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#bg-app .bg-card {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 20px;\n  margin-bottom: 18px;\n}\n#bg-app label.bg-label {\n  display: block;\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 5px;\n}\n#bg-app select.bg-select,\n#bg-app input.bg-input {\n  width: 100%;\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 14px;\n  background: #fff;\n  color: #1e293b;\n  box-sizing: border-box;\n  margin-bottom: 12px;\n  transition: border-color 0.2s;\n}\n#bg-app select.bg-select:focus,\n#bg-app input.bg-input:focus {\n  outline: none;\n  border-color: #3b82f6;\n}\n#bg-app .bg-row {\n  display: flex;\n  gap: 14px;\n  flex-wrap: wrap;\n}\n#bg-app .bg-col {\n  flex: 1;\n  min-width: 140px;\n}\n#bg-app input[type=\"color\"].bg-color {\n  width: 100%;\n  height: 40px;\n  padding: 2px 4px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  background: #fff;\n  cursor: pointer;\n  margin-bottom: 12px;\n  box-sizing: border-box;\n}\n#bg-app input[type=\"range\"].bg-range {\n  width: 100%;\n  margin-bottom: 4px;\n}\n#bg-app .bg-range-val {\n  font-size: 12px;\n  color: #64748b;\n  margin-bottom: 12px;\n  display: block;\n}\n#bg-app .bg-samples {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 12px;\n}\n#bg-app button.bg-sample-btn {\n  padding: 5px 12px;\n  font-size: 12px;\n  border: 1.5px solid #3b82f6;\n  border-radius: 6px;\n  background: #eff6ff;\n  color: #1d4ed8;\n  cursor: pointer;\n  font-weight: 600;\n  transition: background 0.15s;\n}\n#bg-app button.bg-sample-btn:hover {\n  background: #dbeafe;\n}\n#bg-app button.bg-generate-btn {\n  width: 100%;\n  padding: 12px;\n  background: #2563eb;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.2s;\n  margin-top: 4px;\n}\n#bg-app button.bg-generate-btn:hover {\n  background: #1d4ed8;\n}\n#bg-app .bg-error {\n  background: #fef2f2;\n  border: 1.5px solid #fca5a5;\n  border-radius: 8px;\n  color: #b91c1c;\n  font-size: 13px;\n  padding: 10px 14px;\n  margin-top: 10px;\n  display: none;\n}\n#bg-app .bg-result {\n  display: none;\n  margin-top: 18px;\n}\n#bg-app .bg-canvas-wrap {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 20px;\n  text-align: center;\n  margin-bottom: 14px;\n}\n#bg-app canvas#bg-canvas {\n  display: block;\n  margin: 0 auto;\n  max-width: 100%;\n}\n#bg-app button.bg-dl-btn {\n  display: inline-block;\n  padding: 10px 26px;\n  background: #0f172a;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  text-decoration: none;\n  transition: background 0.2s;\n}\n#bg-app button.bg-dl-btn:hover {\n  background: #1e293b;\n}\n#bg-app .bg-info-box {\n  background: #f0fdf4;\n  border: 1px solid #bbf7d0;\n  border-radius: 8px;\n  padding: 14px 16px;\n  font-size: 13px;\n  color: #166534;\n  margin-top: 14px;\n  line-height: 1.6;\n}\n#bg-app .bg-crosslinks {\n  margin-top: 24px;\n  font-size: 14px;\n  color: #475569;\n}\n#bg-app .bg-crosslinks a {\n  color: #2563eb;\n  text-decoration: none;\n}\n#bg-app .bg-crosslinks a:hover {\n  text-decoration: underline;\n}\n\u003c/style\u003e\n\u003ch2 class=\"bg-section-title\"\u003eバーコード設定\u003c/h2\u003e\n\u003cdiv class=\"bg-card\"\u003e\n  \u003clabel class=\"bg-label\" for=\"bg-type\"\u003eバーコードの種類\u003c/label\u003e\n  \u003cselect id=\"bg-type\" class=\"bg-select\"\u003e\n    \u003coption value=\"code128\"\u003eCode 128（汎用性が高い）\u003c/option\u003e\n    \u003coption value=\"code39\"\u003eCode 39\u003c/option\u003e\n    \u003coption value=\"ean13\"\u003eEAN-13\u003c/option\u003e\n  \u003c/select\u003e\n\u003cp\u003e\u003clabel class=\"bg-label\" for=\"bg-data\"\u003eデータ / 値\u003c/label\u003e\u003c/p\u003e","title":"バーコードジェネレーター"},{"content":" 24時間 12時間 あなたの現地時間には ⭐ が表示されます 主要都市を追加： ニューヨーク ロンドン 東京 シドニー ドバイ パリ シンガポール ロサンゼルス -- タイムゾーンを選択 -- + 追加 上のプリセットまたはセレクターから時計を追加してください。 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → タイムゾーン変換 → タイムゾーン変換ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/timezone-clock/","summary":"\u003cdiv id=\"tzc-app\"\u003e\n\u003cstyle\u003e\n#tzc-app {\n  font-family: 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Noto Sans JP', -apple-system, sans-serif;\n  max-width: 720px;\n  margin: 0 auto;\n  color: #1e293b;\n  box-sizing: border-box;\n}\n#tzc-app *, #tzc-app *::before, #tzc-app *::after {\n  box-sizing: border-box;\n}\n#tzc-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin: 0 0 12px 0;\n  color: #0f172a;\n}\n#tzc-app .tzc-topbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n  margin-bottom: 16px;\n}\n#tzc-app .tzc-toggle {\n  display: flex;\n  background: #f1f5f9;\n  border-radius: 8px;\n  padding: 3px;\n  gap: 2px;\n}\n#tzc-app .tzc-toggle button {\n  padding: 5px 14px;\n  border: none;\n  background: transparent;\n  border-radius: 6px;\n  font-size: 13px;\n  font-weight: 600;\n  color: #64748b;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n#tzc-app .tzc-toggle button.active {\n  background: #fff;\n  color: #1e293b;\n  box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n#tzc-app .tzc-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n  margin-bottom: 14px;\n}\n#tzc-app .tzc-preset-btn {\n  padding: 5px 12px;\n  background: #e0f2fe;\n  color: #0369a1;\n  border: 1.5px solid #bae6fd;\n  border-radius: 20px;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#tzc-app .tzc-preset-btn:hover {\n  background: #bae6fd;\n}\n#tzc-app .tzc-add-row {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 18px;\n  flex-wrap: wrap;\n}\n#tzc-app .tzc-add-row select {\n  flex: 1;\n  min-width: 200px;\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 14px;\n  color: #1e293b;\n  background: #f8fafc;\n}\n#tzc-app .tzc-add-row button {\n  padding: 9px 18px;\n  background: #6366f1;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#tzc-app .tzc-add-row button:hover {\n  background: #4f46e5;\n}\n#tzc-app .tzc-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));\n  gap: 14px;\n}\n#tzc-app .tzc-card {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 16px 16px 14px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.05);\n  position: relative;\n  transition: border-color 0.2s;\n}\n#tzc-app .tzc-card.day-card {\n  border-color: #fde68a;\n  background: linear-gradient(135deg, #fffbeb 0%, #fef9c3 100%);\n}\n#tzc-app .tzc-card.night-card {\n  border-color: #818cf8;\n  background: linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%);\n}\n#tzc-app .tzc-card-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 8px;\n}\n#tzc-app .tzc-city-name {\n  font-size: 14px;\n  font-weight: 700;\n  color: #0f172a;\n}\n#tzc-app .tzc-dn-icon {\n  font-size: 18px;\n  line-height: 1;\n}\n#tzc-app .tzc-time {\n  font-size: 2rem;\n  font-weight: 800;\n  color: #1e293b;\n  letter-spacing: -1px;\n  line-height: 1.1;\n  margin-bottom: 2px;\n}\n#tzc-app .tzc-date {\n  font-size: 12px;\n  color: #64748b;\n  margin-bottom: 6px;\n}\n#tzc-app .tzc-diff {\n  display: inline-block;\n  font-size: 11px;\n  font-weight: 600;\n  padding: 2px 8px;\n  border-radius: 20px;\n  background: #f1f5f9;\n  color: #475569;\n}\n#tzc-app .tzc-remove {\n  position: absolute;\n  top: 8px;\n  right: 8px;\n  width: 22px;\n  height: 22px;\n  background: #fee2e2;\n  color: #dc2626;\n  border: none;\n  border-radius: 50%;\n  font-size: 14px;\n  line-height: 22px;\n  text-align: center;\n  cursor: pointer;\n  display: none;\n  font-weight: 700;\n  padding: 0;\n}\n#tzc-app .tzc-card:hover .tzc-remove {\n  display: block;\n}\n#tzc-app .tzc-empty {\n  text-align: center;\n  color: #94a3b8;\n  padding: 30px 0;\n  font-size: 14px;\n}\n@media (max-width: 480px) {\n  #tzc-app .tzc-time { font-size: 1.6rem; }\n  #tzc-app .tzc-grid { grid-template-columns: 1fr 1fr; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"tzc-topbar\"\u003e\n  \u003cdiv class=\"tzc-toggle\"\u003e\n    \u003cbutton id=\"tzc-btn-24\" class=\"active\" onclick=\"tzcSetFormat(24)\"\u003e24時間\u003c/button\u003e\n    \u003cbutton id=\"tzc-btn-12\" onclick=\"tzcSetFormat(12)\"\u003e12時間\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cspan style=\"font-size:13px;color:#64748b;\"\u003eあなたの現地時間には ⭐ が表示されます\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:8px;font-size:13px;font-weight:600;color:#475569;\"\u003e主要都市を追加：\u003c/div\u003e\n\u003cdiv class=\"tzc-presets\"\u003e\n  \u003cbutton class=\"tzc-preset-btn\" onclick=\"tzcAddPreset('ニューヨーク','America/New_York')\"\u003eニューヨーク\u003c/button\u003e\n  \u003cbutton class=\"tzc-preset-btn\" onclick=\"tzcAddPreset('ロンドン','Europe/London')\"\u003eロンドン\u003c/button\u003e\n  \u003cbutton class=\"tzc-preset-btn\" onclick=\"tzcAddPreset('東京','Asia/Tokyo')\"\u003e東京\u003c/button\u003e\n  \u003cbutton class=\"tzc-preset-btn\" onclick=\"tzcAddPreset('シドニー','Australia/Sydney')\"\u003eシドニー\u003c/button\u003e\n  \u003cbutton class=\"tzc-preset-btn\" onclick=\"tzcAddPreset('ドバイ','Asia/Dubai')\"\u003eドバイ\u003c/button\u003e\n  \u003cbutton class=\"tzc-preset-btn\" onclick=\"tzcAddPreset('パリ','Europe/Paris')\"\u003eパリ\u003c/button\u003e\n  \u003cbutton class=\"tzc-preset-btn\" onclick=\"tzcAddPreset('シンガポール','Asia/Singapore')\"\u003eシンガポール\u003c/button\u003e\n  \u003cbutton class=\"tzc-preset-btn\" onclick=\"tzcAddPreset('ロサンゼルス','America/Los_Angeles')\"\u003eロサンゼルス\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"tzc-add-row\"\u003e\n  \u003cselect id=\"tzc-tz-select\"\u003e\n    \u003coption value=\"\"\u003e-- タイムゾーンを選択 --\u003c/option\u003e\n  \u003c/select\u003e\n  \u003cbutton onclick=\"tzcAddFromSelect()\"\u003e+ 追加\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"tzc-grid\" id=\"tzc-grid\"\u003e\n  \u003cdiv class=\"tzc-empty\" id=\"tzc-empty\"\u003e上のプリセットまたはセレクターから時計を追加してください。\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  const TZC_ZONES = [\n    [\"Africa/Cairo\",\"アフリカ/カイロ\"],[\"Africa/Johannesburg\",\"アフリカ/ヨハネスブルク\"],[\"Africa/Lagos\",\"アフリカ/ラゴス\"],\n    [\"Africa/Nairobi\",\"アフリカ/ナイロビ\"],[\"America/Anchorage\",\"アメリカ/アンカレッジ\"],[\"America/Bogota\",\"アメリカ/ボゴタ\"],\n    [\"America/Buenos_Aires\",\"アメリカ/ブエノスアイレス\"],[\"America/Chicago\",\"アメリカ/シカゴ\"],[\"America/Denver\",\"アメリカ/デンバー\"],\n    [\"America/Los_Angeles\",\"アメリカ/ロサンゼルス\"],[\"America/Mexico_City\",\"アメリカ/メキシコシティ\"],\n    [\"America/New_York\",\"アメリカ/ニューヨーク\"],[\"America/Sao_Paulo\",\"アメリカ/サンパウロ\"],\n    [\"America/Toronto\",\"アメリカ/トロント\"],[\"America/Vancouver\",\"アメリカ/バンクーバー\"],\n    [\"Asia/Bangkok\",\"アジア/バンコク\"],[\"Asia/Dubai\",\"アジア/ドバイ\"],[\"Asia/Hong_Kong\",\"アジア/香港\"],\n    [\"Asia/Jakarta\",\"アジア/ジャカルタ\"],[\"Asia/Karachi\",\"アジア/カラチ\"],[\"Asia/Kolkata\",\"アジア/コルカタ\"],\n    [\"Asia/Kuala_Lumpur\",\"アジア/クアラルンプール\"],[\"Asia/Manila\",\"アジア/マニラ\"],[\"Asia/Seoul\",\"アジア/ソウル\"],\n    [\"Asia/Shanghai\",\"アジア/上海\"],[\"Asia/Singapore\",\"アジア/シンガポール\"],[\"Asia/Taipei\",\"アジア/台北\"],\n    [\"Asia/Tehran\",\"アジア/テヘラン\"],[\"Asia/Tokyo\",\"アジア/東京\"],\n    [\"Australia/Adelaide\",\"オーストラリア/アデレード\"],[\"Australia/Brisbane\",\"オーストラリア/ブリスベン\"],\n    [\"Australia/Melbourne\",\"オーストラリア/メルボルン\"],[\"Australia/Perth\",\"オーストラリア/パース\"],\n    [\"Australia/Sydney\",\"オーストラリア/シドニー\"],\n    [\"Europe/Amsterdam\",\"ヨーロッパ/アムステルダム\"],[\"Europe/Athens\",\"ヨーロッパ/アテネ\"],\n    [\"Europe/Berlin\",\"ヨーロッパ/ベルリン\"],[\"Europe/Dublin\",\"ヨーロッパ/ダブリン\"],\n    [\"Europe/Helsinki\",\"ヨーロッパ/ヘルシンキ\"],[\"Europe/Istanbul\",\"ヨーロッパ/イスタンブール\"],\n    [\"Europe/London\",\"ヨーロッパ/ロンドン\"],[\"Europe/Madrid\",\"ヨーロッパ/マドリード\"],\n    [\"Europe/Moscow\",\"ヨーロッパ/モスクワ\"],[\"Europe/Paris\",\"ヨーロッパ/パリ\"],\n    [\"Europe/Rome\",\"ヨーロッパ/ローマ\"],[\"Europe/Zurich\",\"ヨーロッパ/チューリッヒ\"],\n    [\"Pacific/Auckland\",\"太平洋/オークランド\"],[\"Pacific/Honolulu\",\"太平洋/ホノルル\"],[\"UTC\",\"UTC\"]\n  ];\n\n  let tzcClocks = [];\n  let tzcFormat = 24;\n  let tzcTimer = null;\n  const localTZ = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n  const sel = document.getElementById('tzc-tz-select');\n  TZC_ZONES.forEach(([tz, label]) =\u003e {\n    const opt = document.createElement('option');\n    opt.value = tz;\n    opt.textContent = label;\n    sel.appendChild(opt);\n  });\n\n  window.tzcSetFormat = function(f) {\n    tzcFormat = f;\n    document.getElementById('tzc-btn-24').classList.toggle('active', f === 24);\n    document.getElementById('tzc-btn-12').classList.toggle('active', f === 12);\n    tzcRender();\n  };\n\n  window.tzcAddPreset = function(city, tz) {\n    if (tzcClocks.find(c =\u003e c.tz === tz)) return;\n    tzcClocks.push({city, tz});\n    tzcRender();\n  };\n\n  window.tzcAddFromSelect = function() {\n    const s = document.getElementById('tzc-tz-select');\n    if (!s.value) return;\n    const tz = s.value;\n    const city = s.options[s.selectedIndex].text;\n    if (tzcClocks.find(c =\u003e c.tz === tz)) return;\n    tzcClocks.push({city, tz});\n    s.value = '';\n    tzcRender();\n  };\n\n  window.tzcRemove = function(tz) {\n    tzcClocks = tzcClocks.filter(c =\u003e c.tz !== tz);\n    tzcRender();\n  };\n\n  function tzcGetLocalOffset() {\n    const now = new Date();\n    return -now.getTimezoneOffset();\n  }\n\n  function tzcGetZoneOffset(tz, now) {\n    try {\n      const utcStr = new Intl.DateTimeFormat('en-US', {timeZone:'UTC', hour:'2-digit', minute:'2-digit', hour12:false}).format(now);\n      const tzStr = new Intl.DateTimeFormat('en-US', {timeZone:tz, hour:'2-digit', minute:'2-digit', hour12:false}).format(now);\n      const [uh,um] = utcStr.split(':').map(Number);\n      const [th,tm] = tzStr.split(':').map(Number);\n      return (th - uh) * 60 + (tm - um);\n    } catch(e) { return 0; }\n  }\n\n  function tzcFormatDiff(diffMin) {\n    if (diffMin === 0) return 'あなたと同じ時間';\n    const sign = diffMin \u003e 0 ? '+' : '-';\n    const abs = Math.abs(diffMin);\n    const h = Math.floor(abs / 60);\n    const m = abs % 60;\n    return 'あなたより' + sign + h + (m ? ':' + String(m).padStart(2,'0') : '') + '時間';\n  }\n\n  function tzcIsDay(hour) {\n    return hour \u003e= 6 \u0026\u0026 hour \u003c 20;\n  }\n\n  function tzcRender() {\n    const grid = document.getElementById('tzc-grid');\n    if (tzcClocks.length === 0) {\n      grid.innerHTML = '\u003cdiv class=\"tzc-empty\"\u003e上のプリセットまたはセレクターから時計を追加してください。\u003c/div\u003e';\n      return;\n    }\n    const now = new Date();\n    const localOffMin = tzcGetLocalOffset();\n\n    grid.innerHTML = tzcClocks.map(({city, tz}) =\u003e {\n      const isLocal = tz === localTZ;\n      let timeStr, dateStr, hourNum;\n      try {\n        const opts12 = {timeZone:tz, hour:'numeric', minute:'2-digit', second:'2-digit', hour12:true};\n        const opts24 = {timeZone:tz, hour:'2-digit', minute:'2-digit', second:'2-digit', hour12:false};\n        timeStr = new Intl.DateTimeFormat('ja-JP', tzcFormat===12 ? opts12 : opts24).format(now);\n        dateStr = new Intl.DateTimeFormat('ja-JP', {timeZone:tz, weekday:'short', month:'long', day:'numeric'}).format(now);\n        const h = parseInt(new Intl.DateTimeFormat('en-US', {timeZone:tz, hour:'2-digit', hour12:false}).format(now));\n        hourNum = h;\n      } catch(e) {\n        timeStr = '--:--';\n        dateStr = '';\n        hourNum = 12;\n      }\n      const day = tzcIsDay(hourNum);\n      const dnIcon = day ? '☀️' : '🌙';\n      const cardClass = day ? 'tzc-card day-card' : 'tzc-card night-card';\n      const tzOff = tzcGetZoneOffset(tz, now);\n      const diffMin = tzOff - localOffMin;\n      const diffStr = isLocal ? '⭐ 現地時間' : tzcFormatDiff(diffMin);\n\n      return `\u003cdiv class=\"${cardClass}\"\u003e\n        \u003cbutton class=\"tzc-remove\" onclick=\"tzcRemove('${tz.replace(/'/g,\"\\\\'\")}')\"\u003e\u0026#x2715;\u003c/button\u003e\n        \u003cdiv class=\"tzc-card-header\"\u003e\n          \u003cdiv class=\"tzc-city-name\"\u003e${city}${isLocal ? ' ⭐' : ''}\u003c/div\u003e\n          \u003cdiv class=\"tzc-dn-icon\"\u003e${dnIcon}\u003c/div\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"tzc-time\"\u003e${timeStr}\u003c/div\u003e\n        \u003cdiv class=\"tzc-date\"\u003e${dateStr}\u003c/div\u003e\n        \u003cdiv class=\"tzc-diff\"\u003e${diffStr}\u003c/div\u003e\n      \u003c/div\u003e`;\n    }).join('');\n  }\n\n  function tzcTick() {\n    tzcRender();\n    tzcTimer = setTimeout(tzcTick, 1000 - (Date.now() % 1000));\n  }\n\n  tzcAddPreset('現地時間', localTZ);\n  tzcAddPreset('ニューヨーク', 'America/New_York');\n  tzcAddPreset('ロンドン', 'Europe/London');\n  tzcAddPreset('東京', 'Asia/Tokyo');\n  tzcTick();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"タイムゾーン時計"},{"content":" フィボナッチ数列計算ツール 第N項の計算 数列生成 判定 黄金比 螺旋 N（1 〜 1000） F(N) 項数（1 〜 100） コピー 数値を入力 Nが大きくなるにつれ、F(N)/F(N-1) は黄金比 \u0026phi;（ファイ）\u0026asymp; 1.6180339887\u0026hellip; に収束します。\nNF(N)F(N)/F(N-1)\u0026phi; との差 \u0026phi; = 1.6180339887498948482\u0026hellip; フィボナッチ正方形で構成された黄金螺旋。\nステップ数: 10 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール 進数変換 → 進数変換ツール パーセント計算 → パーセント計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/fibonacci-calculator/","summary":"\u003cdiv id=\"fib-app\"\u003e\n\u003cstyle\u003e\n#fib-app *, #fib-app *::before, #fib-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n#fib-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 740px;\n  margin: 0 auto;\n  padding: 12px;\n  color: #1e293b;\n}\n#fib-app h2.fib-title {\n  font-size: 18px;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 14px;\n  letter-spacing: -0.3px;\n}\n#fib-app .fib-tabs {\n  display: flex;\n  gap: 6px;\n  flex-wrap: wrap;\n  margin-bottom: 16px;\n}\n#fib-app .fib-tab-btn {\n  padding: 7px 16px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 20px;\n  background: #f8fafc;\n  color: #475569;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#fib-app .fib-tab-btn:hover { background: #f1f5f9; border-color: #cbd5e1; }\n#fib-app .fib-tab-btn.fib-active {\n  background: #7c3aed;\n  border-color: #7c3aed;\n  color: #fff;\n}\n#fib-app .fib-panel { display: none; }\n#fib-app .fib-panel.fib-visible { display: block; }\n#fib-app .fib-card {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 18px;\n  margin-bottom: 14px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.05);\n}\n#fib-app label.fib-label {\n  display: block;\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  margin-bottom: 5px;\n  text-transform: uppercase;\n  letter-spacing: 0.4px;\n}\n#fib-app input[type=\"number\"], #fib-app input[type=\"text\"] {\n  width: 100%;\n  padding: 9px 12px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  font-size: 15px;\n  color: #1e293b;\n  background: #f8fafc;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#fib-app input[type=\"number\"]:focus, #fib-app input[type=\"text\"]:focus {\n  border-color: #7c3aed;\n  background: #fff;\n}\n#fib-app .fib-btn {\n  display: inline-block;\n  padding: 9px 22px;\n  background: #7c3aed;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n  margin-top: 10px;\n}\n#fib-app .fib-btn:hover { background: #6d28d9; }\n#fib-app .fib-btn-sm {\n  display: inline-block;\n  padding: 6px 14px;\n  background: #f1f5f9;\n  color: #475569;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 7px;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#fib-app .fib-btn-sm:hover { background: #e2e8f0; }\n#fib-app .fib-btn-sm.fib-copied { background: #dcfce7; border-color: #86efac; color: #16a34a; }\n#fib-app .fib-result-box {\n  margin-top: 12px;\n  padding: 14px;\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  word-break: break-all;\n}\n#fib-app .fib-result-label {\n  font-size: 11px;\n  font-weight: 700;\n  color: #94a3b8;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n  margin-bottom: 5px;\n}\n#fib-app .fib-result-val {\n  font-size: 15px;\n  font-weight: 700;\n  color: #7c3aed;\n  word-break: break-all;\n  line-height: 1.5;\n}\n#fib-app .fib-result-sub {\n  font-size: 12px;\n  color: #64748b;\n  margin-top: 4px;\n}\n#fib-app .fib-seq-wrap {\n  margin-top: 10px;\n  max-height: 180px;\n  overflow-y: auto;\n  padding: 10px 12px;\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  font-size: 13px;\n  color: #334155;\n  line-height: 1.8;\n  word-break: break-all;\n}\n#fib-app .fib-seq-actions {\n  display: flex;\n  gap: 8px;\n  margin-top: 8px;\n  flex-wrap: wrap;\n  align-items: center;\n}\n#fib-app .fib-ratio-table {\n  width: 100%;\n  border-collapse: collapse;\n  margin-top: 10px;\n  font-size: 13px;\n}\n#fib-app .fib-ratio-table th {\n  background: #f1f5f9;\n  padding: 7px 10px;\n  text-align: left;\n  font-size: 11px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.4px;\n  border-bottom: 1.5px solid #e2e8f0;\n}\n#fib-app .fib-ratio-table td {\n  padding: 7px 10px;\n  border-bottom: 1px solid #f1f5f9;\n  color: #334155;\n  vertical-align: top;\n}\n#fib-app .fib-ratio-table tr:last-child td { border-bottom: none; }\n#fib-app .fib-ratio-val { font-weight: 700; color: #7c3aed; font-size: 12px; }\n#fib-app .fib-phi-highlight { color: #d97706; font-weight: 700; }\n#fib-app .fib-check-badge {\n  display: inline-block;\n  padding: 4px 12px;\n  border-radius: 20px;\n  font-size: 13px;\n  font-weight: 700;\n  margin-top: 8px;\n}\n#fib-app .fib-check-yes { background: #dcfce7; color: #16a34a; }\n#fib-app .fib-check-no  { background: #fee2e2; color: #dc2626; }\n#fib-app canvas#fib-canvas {\n  display: block;\n  margin: 12px auto 0;\n  border-radius: 10px;\n  border: 1.5px solid #e2e8f0;\n  max-width: 100%;\n}\n#fib-app .fib-spiral-ctrl {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n  margin-top: 10px;\n  flex-wrap: wrap;\n}\n#fib-app .fib-spiral-ctrl label { font-size: 12px; color: #64748b; font-weight: 600; }\n#fib-app .fib-spiral-ctrl input[type=\"range\"] { flex: 1; min-width: 80px; accent-color: #7c3aed; }\n#fib-app .fib-err {\n  color: #dc2626;\n  font-size: 13px;\n  margin-top: 8px;\n  font-weight: 600;\n}\n#fib-app .fib-info-row {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  margin-top: 10px;\n}\n#fib-app .fib-info-chip {\n  background: #ede9fe;\n  color: #5b21b6;\n  border-radius: 8px;\n  padding: 5px 12px;\n  font-size: 12px;\n  font-weight: 600;\n}\n@media (max-width: 500px) {\n  #fib-app .fib-ratio-table { font-size: 11px; }\n  #fib-app .fib-ratio-table td, #fib-app .fib-ratio-table th { padding: 5px 6px; }\n}\n\u003c/style\u003e\n\u003ch2 class=\"fib-title\"\u003eフィボナッチ数列計算ツール\u003c/h2\u003e\n\u003cdiv class=\"fib-tabs\"\u003e\n  \u003cbutton class=\"fib-tab-btn fib-active\" onclick=\"fibSwitchTab('nth',this)\"\u003e第N項の計算\u003c/button\u003e\n  \u003cbutton class=\"fib-tab-btn\" onclick=\"fibSwitchTab('seq',this)\"\u003e数列生成\u003c/button\u003e\n  \u003cbutton class=\"fib-tab-btn\" onclick=\"fibSwitchTab('check',this)\"\u003e判定\u003c/button\u003e\n  \u003cbutton class=\"fib-tab-btn\" onclick=\"fibSwitchTab('ratio',this)\"\u003e黄金比\u003c/button\u003e\n  \u003cbutton class=\"fib-tab-btn\" onclick=\"fibSwitchTab('spiral',this)\"\u003e螺旋\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- パネル：第N項 --\u003e\n\u003cdiv id=\"fib-panel-nth\" class=\"fib-panel fib-visible\"\u003e\n  \u003cdiv class=\"fib-card\"\u003e\n    \u003clabel class=\"fib-label\"\u003eN（1 〜 1000）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"fib-nth-input\" min=\"1\" max=\"1000\" value=\"10\" oninput=\"fibCalcNth()\"\u003e\n    \u003cdiv id=\"fib-nth-err\" class=\"fib-err\"\u003e\u003c/div\u003e\n    \u003cdiv id=\"fib-nth-result\" class=\"fib-result-box\" style=\"display:none;\"\u003e\n      \u003cdiv class=\"fib-result-label\"\u003eF(N)\u003c/div\u003e\n      \u003cdiv class=\"fib-result-val\" id=\"fib-nth-val\"\u003e\u003c/div\u003e\n      \u003cdiv class=\"fib-result-sub\" id=\"fib-nth-sub\"\u003e\u003c/div\u003e\n      \u003cdiv class=\"fib-info-row\" id=\"fib-nth-chips\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- パネル：数列生成 --\u003e\n\u003cdiv id=\"fib-panel-seq\" class=\"fib-panel\"\u003e\n  \u003cdiv class=\"fib-card\"\u003e\n    \u003clabel class=\"fib-label\"\u003e項数（1 〜 100）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"fib-seq-input\" min=\"1\" max=\"100\" value=\"15\" oninput=\"fibGenSeq()\"\u003e\n    \u003cdiv id=\"fib-seq-err\" class=\"fib-err\"\u003e\u003c/div\u003e\n    \u003cdiv id=\"fib-seq-wrap\" class=\"fib-seq-wrap\" style=\"display:none;\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"fib-seq-actions\" id=\"fib-seq-actions\" style=\"display:none;\"\u003e\n      \u003cbutton class=\"fib-btn-sm\" id=\"fib-copy-btn\" onclick=\"fibCopySeq()\"\u003eコピー\u003c/button\u003e\n      \u003cspan id=\"fib-seq-count\" style=\"font-size:12px;color:#94a3b8;\"\u003e\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- パネル：フィボナッチ判定 --\u003e\n\u003cdiv id=\"fib-panel-check\" class=\"fib-panel\"\u003e\n  \u003cdiv class=\"fib-card\"\u003e\n    \u003clabel class=\"fib-label\"\u003e数値を入力\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"fib-check-input\" placeholder=\"例：89\" oninput=\"fibCheckNum()\"\u003e\n    \u003cdiv id=\"fib-check-err\" class=\"fib-err\"\u003e\u003c/div\u003e\n    \u003cdiv id=\"fib-check-result\" style=\"margin-top:10px;display:none;\"\u003e\n      \u003cdiv id=\"fib-check-badge\"\u003e\u003c/div\u003e\n      \u003cdiv class=\"fib-result-sub\" id=\"fib-check-sub\" style=\"margin-top:6px;\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- パネル：黄金比 --\u003e\n\u003cdiv id=\"fib-panel-ratio\" class=\"fib-panel\"\u003e\n  \u003cdiv class=\"fib-card\"\u003e\n    \u003cp style=\"font-size:13px;color:#64748b;margin-bottom:10px;\"\u003eNが大きくなるにつれ、F(N)/F(N-1) は黄金比 \u0026phi;（ファイ）\u0026asymp; 1.6180339887\u0026hellip; に収束します。\u003c/p\u003e","title":"フィボナッチ数列計算ツール"},{"content":" ローン条件の入力 物件価格（円） 頭金（円） 年利（%） 返済期間（年） 10年 15年 20年 25年 30年 35年 計算する 計算結果 月々の返済額 — 借入金額 — 総返済額 — 利息総額 — 元金 利息 返済予定表 回 返済額 元金分 利息分 残高 全期間を表示 ※ 元利均等返済方式による計算です。管理費・固定資産税・火災保険料等は含まれません。あくまで参考値としてご利用ください。実際のローン条件は金融機関にご確認ください。\n確定申告・会計をもっとラクに？\nfreee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\nfreee会計を無料で試す 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連ツール 借金返済計算 → 借金返済計算ツール ローン比較 → ローン比較ツール 住宅ローン借入可能額 → 住宅ローン借入可能額ツール ","permalink":"https://productivity-works.com/ja/tools/mortgage-calculator/","summary":"\u003cdiv id=\"mc-app\"\u003e\n\u003cstyle\u003e\n#mc-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#mc-app * { box-sizing: border-box; }\n#mc-app h2 {\n  font-size: 1.4rem;\n  font-weight: 700;\n  margin: 0 0 1.2rem;\n  color: #1a1a2e;\n  border-left: 4px solid #4f8ef7;\n  padding-left: 0.7rem;\n}\n#mc-app .mc-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 1.6rem;\n  margin-bottom: 1.4rem;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.05);\n}\n#mc-app .mc-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  gap: 1rem;\n}\n#mc-app label {\n  display: block;\n  font-size: 0.82rem;\n  font-weight: 600;\n  color: #4a5568;\n  margin-bottom: 0.35rem;\n  letter-spacing: 0.02em;\n}\n#mc-app input[type=number], #mc-app select {\n  width: 100%;\n  padding: 0.6rem 0.9rem;\n  border: 1.5px solid #cbd5e0;\n  border-radius: 8px;\n  font-size: 1rem;\n  color: #1a1a2e;\n  background: #f8fafc;\n  transition: border-color 0.2s;\n  outline: none;\n}\n#mc-app input[type=number]:focus, #mc-app select:focus {\n  border-color: #4f8ef7;\n  background: #fff;\n}\n#mc-app .mc-btn {\n  display: inline-block;\n  padding: 0.7rem 2rem;\n  background: linear-gradient(135deg, #4f8ef7, #3b6fd4);\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 1rem;\n  font-weight: 700;\n  cursor: pointer;\n  margin-top: 0.5rem;\n  transition: opacity 0.2s;\n}\n#mc-app .mc-btn:hover { opacity: 0.88; }\n#mc-app .mc-results-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n  gap: 1rem;\n  margin-bottom: 1.2rem;\n}\n#mc-app .mc-stat {\n  background: #f0f5ff;\n  border-radius: 10px;\n  padding: 1rem 1.2rem;\n  text-align: center;\n}\n#mc-app .mc-stat .mc-stat-label {\n  font-size: 0.75rem;\n  font-weight: 600;\n  color: #667eea;\n  margin-bottom: 0.3rem;\n}\n#mc-app .mc-stat .mc-stat-value {\n  font-size: 1.45rem;\n  font-weight: 800;\n  color: #1a1a2e;\n}\n#mc-app .mc-chart-row {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 2rem;\n  flex-wrap: wrap;\n}\n#mc-app .mc-legend {\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n}\n#mc-app .mc-legend-item {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  font-size: 0.9rem;\n}\n#mc-app .mc-legend-dot {\n  width: 14px;\n  height: 14px;\n  border-radius: 50%;\n  flex-shrink: 0;\n}\n#mc-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n}\n#mc-app thead th {\n  background: #f0f5ff;\n  color: #4f8ef7;\n  font-weight: 700;\n  padding: 0.6rem 0.8rem;\n  text-align: right;\n  border-bottom: 2px solid #e2e8f0;\n}\n#mc-app thead th:first-child { text-align: center; }\n#mc-app tbody td {\n  padding: 0.5rem 0.8rem;\n  text-align: right;\n  border-bottom: 1px solid #f0f0f0;\n  color: #2d3748;\n}\n#mc-app tbody td:first-child { text-align: center; font-weight: 600; color: #667eea; }\n#mc-app tbody tr:hover { background: #fafbff; }\n#mc-app .mc-toggle-btn {\n  display: block;\n  width: 100%;\n  text-align: center;\n  padding: 0.55rem;\n  background: #f0f5ff;\n  border: 1.5px solid #4f8ef7;\n  color: #4f8ef7;\n  border-radius: 8px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  cursor: pointer;\n  margin-top: 1rem;\n  transition: background 0.2s;\n}\n#mc-app .mc-toggle-btn:hover { background: #e0eaff; }\n#mc-app .mc-hidden { display: none; }\n#mc-app .mc-note {\n  font-size: 0.78rem;\n  color: #888;\n  margin-top: 1rem;\n  line-height: 1.7;\n}\n#mc-app .mc-cta {\n  background: linear-gradient(135deg, #f0f5ff, #e8f4fd);\n  border: 1.5px solid #4f8ef7;\n  border-radius: 12px;\n  padding: 1.4rem 1.6rem;\n  margin-top: 1.4rem;\n  text-align: center;\n}\n#mc-app .mc-cta p {\n  margin: 0 0 0.8rem;\n  font-size: 0.95rem;\n  color: #2d3748;\n  line-height: 1.7;\n}\n#mc-app .mc-cta a {\n  display: inline-block;\n  background: linear-gradient(135deg, #4f8ef7, #3b6fd4);\n  color: #fff;\n  padding: 0.65rem 1.8rem;\n  border-radius: 8px;\n  font-weight: 700;\n  font-size: 0.95rem;\n  text-decoration: none;\n  transition: opacity 0.2s;\n}\n#mc-app .mc-cta a:hover { opacity: 0.85; }\n\u003c/style\u003e\n\u003cdiv class=\"mc-card\"\u003e\n  \u003ch2\u003eローン条件の入力\u003c/h2\u003e\n  \u003cdiv class=\"mc-grid\"\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"mc-price\"\u003e物件価格（円）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"mc-price\" value=\"40000000\" min=\"0\" step=\"100000\"\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"mc-down\"\u003e頭金（円）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"mc-down\" value=\"8000000\" min=\"0\" step=\"100000\"\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"mc-rate\"\u003e年利（%）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"mc-rate\" value=\"1.5\" min=\"0\" max=\"20\" step=\"0.01\"\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"mc-term\"\u003e返済期間（年）\u003c/label\u003e\n      \u003cselect id=\"mc-term\"\u003e\n        \u003coption value=\"10\"\u003e10年\u003c/option\u003e\n        \u003coption value=\"15\"\u003e15年\u003c/option\u003e\n        \u003coption value=\"20\"\u003e20年\u003c/option\u003e\n        \u003coption value=\"25\"\u003e25年\u003c/option\u003e\n        \u003coption value=\"30\"\u003e30年\u003c/option\u003e\n        \u003coption value=\"35\" selected\u003e35年\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"mc-btn\" onclick=\"mcCalculate()\"\u003e計算する\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mc-card mc-hidden\" id=\"mc-results\"\u003e\n  \u003ch2\u003e計算結果\u003c/h2\u003e\n  \u003cdiv class=\"mc-results-grid\"\u003e\n    \u003cdiv class=\"mc-stat\"\u003e\n      \u003cdiv class=\"mc-stat-label\"\u003e月々の返済額\u003c/div\u003e\n      \u003cdiv class=\"mc-stat-value\" id=\"mc-monthly\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"mc-stat\"\u003e\n      \u003cdiv class=\"mc-stat-label\"\u003e借入金額\u003c/div\u003e\n      \u003cdiv class=\"mc-stat-value\" id=\"mc-principal\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"mc-stat\"\u003e\n      \u003cdiv class=\"mc-stat-label\"\u003e総返済額\u003c/div\u003e\n      \u003cdiv class=\"mc-stat-value\" id=\"mc-total\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"mc-stat\"\u003e\n      \u003cdiv class=\"mc-stat-label\"\u003e利息総額\u003c/div\u003e\n      \u003cdiv class=\"mc-stat-value\" id=\"mc-interest\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mc-chart-row\"\u003e\n    \u003ccanvas id=\"mc-pie\" width=\"200\" height=\"200\"\u003e\u003c/canvas\u003e\n    \u003cdiv class=\"mc-legend\"\u003e\n      \u003cdiv class=\"mc-legend-item\"\u003e\n        \u003cdiv class=\"mc-legend-dot\" style=\"background:#4f8ef7\"\u003e\u003c/div\u003e\n        \u003cspan id=\"mc-legend-principal\"\u003e元金\u003c/span\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"mc-legend-item\"\u003e\n        \u003cdiv class=\"mc-legend-dot\" style=\"background:#f97b4f\"\u003e\u003c/div\u003e\n        \u003cspan id=\"mc-legend-interest\"\u003e利息\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mc-card mc-hidden\" id=\"mc-amort-card\"\u003e\n  \u003ch2\u003e返済予定表\u003c/h2\u003e\n  \u003cdiv style=\"overflow-x:auto\"\u003e\n    \u003ctable\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\n          \u003cth\u003e回\u003c/th\u003e\n          \u003cth\u003e返済額\u003c/th\u003e\n          \u003cth\u003e元金分\u003c/th\u003e\n          \u003cth\u003e利息分\u003c/th\u003e\n          \u003cth\u003e残高\u003c/th\u003e\n        \u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody id=\"mc-amort-body\"\u003e\u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"mc-toggle-btn\" id=\"mc-toggle-btn\" onclick=\"mcToggleAll()\"\u003e全期間を表示\u003c/button\u003e\n  \u003cp class=\"mc-note\"\u003e※ 元利均等返済方式による計算です。管理費・固定資産税・火災保険料等は含まれません。あくまで参考値としてご利用ください。実際のローン条件は金融機関にご確認ください。\u003c/p\u003e","title":"住宅ローン計算ツール - 月々返済額シミュレーション"},{"content":" このツールはコードを生成するのみです。実際のAPIリクエストはブラウザから送信されません。 リクエスト設定 GET POST PUT PATCH DELETE ヘッダー クエリパラメータ ボディ 認証 ヘッダー名 値 + ヘッダーを追加 パラメータ名 値 + パラメータを追加 なし JSON フォームデータ（URLエンコード） テキスト（生） {\\n \"name\": \"山田太郎\",\\n \"email\": \"taro@example.com\"\\n} フィールド名 値 + フィールドを追加 認証なし Bearer トークン Basic 認証 APIキー cURL JavaScript - Fetch JavaScript - Axios Python - requests PHP - cURL コードを生成 cURL コピー 「コードを生成」ボタンを押すと、ここにコードが表示されます。 API連携を効率化 \u0026rarr; freee APIで会計業務を自動化\n関連ツール Dns Record Guide → Dns Record Guideツール Http Status Codes → Http Status Codesツール Ip Address Calculator → Ip Address Calculatorツール ","permalink":"https://productivity-works.com/ja/tools/api-request-builder/","summary":"\u003cdiv id=\"arb-app\"\u003e\n\u003cstyle\u003e\n#arb-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Meiryo', 'Segoe UI', Roboto, sans-serif;\n  max-width: 960px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#arb-app * { box-sizing: border-box; }\n#arb-app h2 {\n  font-size: 1.4rem;\n  margin: 0 0 1rem;\n  color: #0f3460;\n  border-bottom: 2px solid #e2e8f0;\n  padding-bottom: 0.5rem;\n}\n#arb-app .arb-notice {\n  background: #eff6ff;\n  border: 1px solid #bfdbfe;\n  border-radius: 8px;\n  padding: 0.75rem 1rem;\n  font-size: 0.85rem;\n  color: #1d4ed8;\n  margin-bottom: 1.5rem;\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n#arb-app .arb-notice::before { content: \"ℹ\"; font-weight: bold; font-size: 1rem; }\n#arb-app .arb-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 1.25rem 1.5rem;\n  margin-bottom: 1.25rem;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.05);\n}\n#arb-app .arb-row {\n  display: flex;\n  gap: 0.75rem;\n  align-items: stretch;\n  margin-bottom: 0.75rem;\n}\n#arb-app .arb-method-select {\n  padding: 0.6rem 0.75rem;\n  border: 2px solid #e2e8f0;\n  border-radius: 7px;\n  font-size: 0.95rem;\n  font-weight: 700;\n  cursor: pointer;\n  background: #f8fafc;\n  color: #0f3460;\n  min-width: 110px;\n  appearance: none;\n  text-align: center;\n}\n#arb-app .arb-method-select:focus { outline: none; border-color: #3b82f6; }\n#arb-app select[data-method=\"GET\"] { color: #16a34a; border-color: #bbf7d0; background: #f0fdf4; }\n#arb-app select[data-method=\"POST\"] { color: #ca8a04; border-color: #fde68a; background: #fefce8; }\n#arb-app select[data-method=\"PUT\"] { color: #d97706; border-color: #fed7aa; background: #fff7ed; }\n#arb-app select[data-method=\"PATCH\"] { color: #7c3aed; border-color: #ddd6fe; background: #faf5ff; }\n#arb-app select[data-method=\"DELETE\"] { color: #dc2626; border-color: #fecaca; background: #fff5f5; }\n#arb-app .arb-url-input {\n  flex: 1;\n  padding: 0.6rem 0.9rem;\n  border: 2px solid #e2e8f0;\n  border-radius: 7px;\n  font-size: 0.95rem;\n  font-family: 'Courier New', monospace;\n  transition: border-color 0.2s;\n}\n#arb-app .arb-url-input:focus { outline: none; border-color: #3b82f6; }\n#arb-app .arb-btn {\n  padding: 0.6rem 1.1rem;\n  border: none;\n  border-radius: 7px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: opacity 0.15s, transform 0.1s;\n  white-space: nowrap;\n}\n#arb-app .arb-btn:active { transform: scale(0.97); }\n#arb-app .arb-btn-primary { background: #3b82f6; color: #fff; }\n#arb-app .arb-btn-primary:hover { background: #2563eb; }\n#arb-app .arb-btn-secondary { background: #f1f5f9; color: #475569; border: 1px solid #e2e8f0; }\n#arb-app .arb-btn-secondary:hover { background: #e2e8f0; }\n#arb-app .arb-btn-danger { background: #fee2e2; color: #dc2626; font-size: 0.8rem; padding: 0.35rem 0.6rem; }\n#arb-app .arb-btn-danger:hover { background: #fecaca; }\n#arb-app .arb-btn-add { background: #f0fdf4; color: #16a34a; border: 1px dashed #86efac; font-size: 0.85rem; }\n#arb-app .arb-btn-add:hover { background: #dcfce7; }\n#arb-app .arb-tabs {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #e2e8f0;\n  margin-bottom: 1rem;\n  overflow-x: auto;\n}\n#arb-app .arb-tab {\n  padding: 0.5rem 1rem;\n  font-size: 0.88rem;\n  font-weight: 600;\n  cursor: pointer;\n  color: #64748b;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  white-space: nowrap;\n  transition: color 0.15s;\n  background: none;\n  border-top: none;\n  border-left: none;\n  border-right: none;\n}\n#arb-app .arb-tab:hover { color: #3b82f6; }\n#arb-app .arb-tab.active { color: #3b82f6; border-bottom-color: #3b82f6; }\n#arb-app .arb-tab-content { display: none; }\n#arb-app .arb-tab-content.active { display: block; }\n#arb-app .arb-kv-table { width: 100%; border-collapse: collapse; }\n#arb-app .arb-kv-table th {\n  text-align: left;\n  font-size: 0.78rem;\n  font-weight: 700;\n  color: #94a3b8;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  padding: 0.3rem 0.5rem 0.6rem;\n}\n#arb-app .arb-kv-table td { padding: 0.3rem 0.4rem; vertical-align: middle; }\n#arb-app .arb-kv-input {\n  width: 100%;\n  padding: 0.45rem 0.65rem;\n  border: 1px solid #e2e8f0;\n  border-radius: 6px;\n  font-size: 0.88rem;\n  font-family: 'Courier New', monospace;\n  background: #f8fafc;\n  transition: border-color 0.2s;\n}\n#arb-app .arb-kv-input:focus { outline: none; border-color: #93c5fd; background: #fff; }\n#arb-app .arb-kv-enable {\n  width: 16px; height: 16px; cursor: pointer; accent-color: #3b82f6;\n}\n#arb-app .arb-kv-td-check { width: 28px; text-align: center; }\n#arb-app .arb-kv-td-del { width: 36px; text-align: center; }\n#arb-app .arb-kv-td-key { width: 38%; }\n#arb-app .arb-body-select {\n  padding: 0.45rem 0.75rem;\n  border: 1px solid #e2e8f0;\n  border-radius: 6px;\n  font-size: 0.88rem;\n  background: #f8fafc;\n  margin-bottom: 0.75rem;\n  cursor: pointer;\n}\n#arb-app .arb-body-select:focus { outline: none; border-color: #93c5fd; }\n#arb-app .arb-body-editor {\n  width: 100%;\n  min-height: 140px;\n  padding: 0.75rem;\n  border: 1px solid #e2e8f0;\n  border-radius: 7px;\n  font-family: 'Courier New', monospace;\n  font-size: 0.875rem;\n  line-height: 1.6;\n  resize: vertical;\n  background: #1e1e2e;\n  color: #cdd6f4;\n}\n#arb-app .arb-body-editor:focus { outline: none; border-color: #93c5fd; }\n#arb-app .arb-auth-select {\n  padding: 0.45rem 0.75rem;\n  border: 1px solid #e2e8f0;\n  border-radius: 6px;\n  font-size: 0.88rem;\n  background: #f8fafc;\n  margin-bottom: 0.75rem;\n  cursor: pointer;\n  min-width: 200px;\n}\n#arb-app .arb-auth-select:focus { outline: none; border-color: #93c5fd; }\n#arb-app .arb-auth-fields { display: flex; flex-direction: column; gap: 0.6rem; }\n#arb-app .arb-auth-field-row { display: flex; align-items: center; gap: 0.75rem; }\n#arb-app .arb-auth-label { font-size: 0.85rem; font-weight: 600; color: #475569; min-width: 110px; }\n#arb-app .arb-auth-input {\n  flex: 1;\n  padding: 0.45rem 0.65rem;\n  border: 1px solid #e2e8f0;\n  border-radius: 6px;\n  font-size: 0.88rem;\n  font-family: 'Courier New', monospace;\n  background: #f8fafc;\n}\n#arb-app .arb-auth-input:focus { outline: none; border-color: #93c5fd; background: #fff; }\n#arb-app .arb-generate-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.75rem;\n  align-items: center;\n  margin-bottom: 1.25rem;\n}\n#arb-app .arb-lang-select {\n  padding: 0.6rem 0.9rem;\n  border: 2px solid #3b82f6;\n  border-radius: 7px;\n  font-size: 0.92rem;\n  font-weight: 600;\n  background: #eff6ff;\n  color: #1d4ed8;\n  cursor: pointer;\n  min-width: 200px;\n}\n#arb-app .arb-lang-select:focus { outline: none; }\n#arb-app .arb-output-wrap {\n  position: relative;\n  background: #1e1e2e;\n  border-radius: 10px;\n  overflow: hidden;\n  border: 1px solid #313244;\n}\n#arb-app .arb-output-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 0.65rem 1rem;\n  background: #181825;\n  border-bottom: 1px solid #313244;\n}\n#arb-app .arb-output-lang-badge {\n  font-size: 0.78rem;\n  font-weight: 700;\n  color: #89b4fa;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n}\n#arb-app .arb-copy-btn {\n  padding: 0.35rem 0.85rem;\n  background: #313244;\n  color: #cdd6f4;\n  border: none;\n  border-radius: 5px;\n  font-size: 0.82rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#arb-app .arb-copy-btn:hover { background: #45475a; }\n#arb-app .arb-copy-btn.copied { background: #1e3a2f; color: #a6e3a1; }\n#arb-app .arb-code-block {\n  padding: 1.25rem 1.5rem;\n  overflow-x: auto;\n  margin: 0;\n}\n#arb-app .arb-code-block code {\n  font-family: 'Courier New', Consolas, monospace;\n  font-size: 0.875rem;\n  line-height: 1.7;\n  white-space: pre;\n  display: block;\n  color: #cdd6f4;\n}\n/* Syntax highlight tokens */\n#arb-app .t-kw { color: #cba6f7; }\n#arb-app .t-str { color: #a6e3a1; }\n#arb-app .t-num { color: #fab387; }\n#arb-app .t-fn { color: #89b4fa; }\n#arb-app .t-cm { color: #6c7086; font-style: italic; }\n#arb-app .t-op { color: #89dceb; }\n#arb-app .t-flag { color: #f38ba8; }\n#arb-app .t-url { color: #f9e2af; }\n#arb-app .t-prop { color: #89dceb; }\n#arb-app .arb-cta {\n  margin-top: 2rem;\n  padding: 1.25rem 1.5rem;\n  background: linear-gradient(135deg, #eff6ff 0%, #f0fdf4 100%);\n  border: 1px solid #bfdbfe;\n  border-radius: 10px;\n}\n#arb-app .arb-cta p { margin: 0; font-size: 0.95rem; color: #1e40af; }\n#arb-app .arb-cta a { color: #2563eb; font-weight: 700; }\n@media (max-width: 600px) {\n  #arb-app .arb-row { flex-direction: column; }\n  #arb-app .arb-generate-row { flex-direction: column; align-items: stretch; }\n  #arb-app .arb-lang-select { min-width: unset; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"arb-notice\"\u003eこのツールはコードを生成するのみです。実際のAPIリクエストはブラウザから送信されません。\u003c/div\u003e\n\u003c!-- Request Line --\u003e\n\u003cdiv class=\"arb-card\"\u003e\n  \u003ch2\u003eリクエスト設定\u003c/h2\u003e\n  \u003cdiv class=\"arb-row\"\u003e\n    \u003cselect class=\"arb-method-select\" id=\"arb-method\" onchange=\"arbMethodColor()\"\u003e\n      \u003coption value=\"GET\"\u003eGET\u003c/option\u003e\n      \u003coption value=\"POST\"\u003ePOST\u003c/option\u003e\n      \u003coption value=\"PUT\"\u003ePUT\u003c/option\u003e\n      \u003coption value=\"PATCH\"\u003ePATCH\u003c/option\u003e\n      \u003coption value=\"DELETE\"\u003eDELETE\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cinput type=\"url\" class=\"arb-url-input\" id=\"arb-url\" placeholder=\"https://api.example.com/endpoint\" value=\"https://api.example.com/users\" /\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Tabs: Headers / Params / Body / Auth --\u003e\n\u003cdiv class=\"arb-card\"\u003e\n  \u003cdiv class=\"arb-tabs\"\u003e\n    \u003cbutton class=\"arb-tab active\" onclick=\"arbTab('headers',this)\"\u003eヘッダー\u003c/button\u003e\n    \u003cbutton class=\"arb-tab\" onclick=\"arbTab('params',this)\"\u003eクエリパラメータ\u003c/button\u003e\n    \u003cbutton class=\"arb-tab\" onclick=\"arbTab('body',this)\"\u003eボディ\u003c/button\u003e\n    \u003cbutton class=\"arb-tab\" onclick=\"arbTab('auth',this)\"\u003e認証\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- Headers --\u003e\n  \u003cdiv class=\"arb-tab-content active\" id=\"arb-tab-headers\"\u003e\n    \u003ctable class=\"arb-kv-table\" id=\"arb-headers-table\"\u003e\n      \u003cthead\u003e\u003ctr\u003e\n        \u003cth class=\"arb-kv-td-check\"\u003e\u003c/th\u003e\n        \u003cth class=\"arb-kv-td-key\"\u003eヘッダー名\u003c/th\u003e\n        \u003cth\u003e値\u003c/th\u003e\n        \u003cth class=\"arb-kv-td-del\"\u003e\u003c/th\u003e\n      \u003c/tr\u003e\u003c/thead\u003e\n      \u003ctbody id=\"arb-headers-body\"\u003e\u003c/tbody\u003e\n    \u003c/table\u003e\n    \u003cbutton class=\"arb-btn arb-btn-add\" style=\"margin-top:0.6rem\" onclick=\"arbAddRow('headers')\"\u003e+ ヘッダーを追加\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- Query Params --\u003e\n  \u003cdiv class=\"arb-tab-content\" id=\"arb-tab-params\"\u003e\n    \u003ctable class=\"arb-kv-table\" id=\"arb-params-table\"\u003e\n      \u003cthead\u003e\u003ctr\u003e\n        \u003cth class=\"arb-kv-td-check\"\u003e\u003c/th\u003e\n        \u003cth class=\"arb-kv-td-key\"\u003eパラメータ名\u003c/th\u003e\n        \u003cth\u003e値\u003c/th\u003e\n        \u003cth class=\"arb-kv-td-del\"\u003e\u003c/th\u003e\n      \u003c/tr\u003e\u003c/thead\u003e\n      \u003ctbody id=\"arb-params-body\"\u003e\u003c/tbody\u003e\n    \u003c/table\u003e\n    \u003cbutton class=\"arb-btn arb-btn-add\" style=\"margin-top:0.6rem\" onclick=\"arbAddRow('params')\"\u003e+ パラメータを追加\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- Body --\u003e\n  \u003cdiv class=\"arb-tab-content\" id=\"arb-tab-body\"\u003e\n    \u003cselect class=\"arb-body-select\" id=\"arb-body-type\" onchange=\"arbBodyTypeChange()\"\u003e\n      \u003coption value=\"none\"\u003eなし\u003c/option\u003e\n      \u003coption value=\"json\" selected\u003eJSON\u003c/option\u003e\n      \u003coption value=\"form\"\u003eフォームデータ（URLエンコード）\u003c/option\u003e\n      \u003coption value=\"raw\"\u003eテキスト（生）\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cdiv id=\"arb-body-editor-wrap\"\u003e\n      \u003ctextarea class=\"arb-body-editor\" id=\"arb-body-editor\" placeholder='{\\n  \"key\": \"value\"\\n}'\u003e{\\n  \"name\": \"山田太郎\",\\n  \"email\": \"taro@example.com\"\\n}\u003c/textarea\u003e\n    \u003c/div\u003e\n    \u003cdiv id=\"arb-body-form-wrap\" style=\"display:none\"\u003e\n      \u003ctable class=\"arb-kv-table\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\n          \u003cth class=\"arb-kv-td-check\"\u003e\u003c/th\u003e\n          \u003cth class=\"arb-kv-td-key\"\u003eフィールド名\u003c/th\u003e\n          \u003cth\u003e値\u003c/th\u003e\n          \u003cth class=\"arb-kv-td-del\"\u003e\u003c/th\u003e\n        \u003c/tr\u003e\u003c/thead\u003e\n        \u003ctbody id=\"arb-formdata-body\"\u003e\u003c/tbody\u003e\n      \u003c/table\u003e\n      \u003cbutton class=\"arb-btn arb-btn-add\" style=\"margin-top:0.6rem\" onclick=\"arbAddRow('formdata')\"\u003e+ フィールドを追加\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Auth --\u003e\n  \u003cdiv class=\"arb-tab-content\" id=\"arb-tab-auth\"\u003e\n    \u003cselect class=\"arb-auth-select\" id=\"arb-auth-type\" onchange=\"arbAuthTypeChange()\"\u003e\n      \u003coption value=\"none\"\u003e認証なし\u003c/option\u003e\n      \u003coption value=\"bearer\"\u003eBearer トークン\u003c/option\u003e\n      \u003coption value=\"basic\"\u003eBasic 認証\u003c/option\u003e\n      \u003coption value=\"apikey\"\u003eAPIキー\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cdiv class=\"arb-auth-fields\" id=\"arb-auth-fields\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Generate --\u003e\n\u003cdiv class=\"arb-generate-row\"\u003e\n  \u003cselect class=\"arb-lang-select\" id=\"arb-lang\"\u003e\n    \u003coption value=\"curl\"\u003ecURL\u003c/option\u003e\n    \u003coption value=\"fetch\"\u003eJavaScript - Fetch\u003c/option\u003e\n    \u003coption value=\"axios\"\u003eJavaScript - Axios\u003c/option\u003e\n    \u003coption value=\"python\"\u003ePython - requests\u003c/option\u003e\n    \u003coption value=\"php\"\u003ePHP - cURL\u003c/option\u003e\n  \u003c/select\u003e\n  \u003cbutton class=\"arb-btn arb-btn-primary\" onclick=\"arbGenerate()\" style=\"padding:0.6rem 1.8rem;font-size:1rem\"\u003eコードを生成\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- Output --\u003e\n\u003cdiv class=\"arb-output-wrap\" id=\"arb-output-wrap\"\u003e\n  \u003cdiv class=\"arb-output-header\"\u003e\n    \u003cspan class=\"arb-output-lang-badge\" id=\"arb-output-badge\"\u003ecURL\u003c/span\u003e\n    \u003cbutton class=\"arb-copy-btn\" id=\"arb-copy-btn\" onclick=\"arbCopy()\"\u003eコピー\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cpre class=\"arb-code-block\"\u003e\u003ccode id=\"arb-output-code\"\u003e「コードを生成」ボタンを押すと、ここにコードが表示されます。\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"arb-cta\"\u003e\n  \u003cp\u003eAPI連携を効率化 \u0026rarr; \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\"\u003efreee APIで会計業務を自動化\u003c/a\u003e\u003c/p\u003e","title":"APIリクエストビルダー - cURL・Fetch・Axiosコード生成"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nFIREシミュレーター【2026年版】 年収・年間生活費・現在の資産額を入力するだけで、FIRE達成までの年数と必要資産額を自動計算します。リーンFIRE・ファットFIRE・コーストFIREの比較も一覧表示。\n基本情報を入力 現在の年齢 歳 年収（万円） 万円 年間生活費（万円） 万円 現在の資産額（万円） 万円 期待リターン（%）: 5.0% 3%12% 取崩し率（%）: 4.00% 2%（保守的）5%（積極的） FIRE達成額（目標資産） 7,500万円 年間生活費 ÷ 取崩し率 FIRE達成まで 21年6ヶ月 FIRE達成年齢 51歳 月間貯蓄額 16.7万円 貯蓄率 40.0% FIRE達成への進捗 4.0% 現在 300万円 目標 7,500万円 FIRE種類別の比較 リーンFIRE （生活費×0.8） 6,000万円 XX年でFIRE達成 現在の設定 通常FIRE 7,500万円 XX年でFIRE達成 ファットFIRE （生活費×1.5） 11,250万円 XX年でFIRE達成 コーストFIRE （65歳達成に必要な現在額） — 計算中... ▶ 年次推移表を表示する 経過年 年齢 年間貯蓄 運用益 資産総額 貯蓄率別のFIRE達成年数 貯蓄率 20% 30% 40% 50% 60% 70% 達成年数 ※ 現在の年間生活費・取崩し率・期待リターンをベースに試算。資産0から開始した場合の年数。 計算条件: 年次複利計算。税金・インフレは考慮しておりません。実際の投資成果は市場状況により変動します。本シミュレーターは参考値の提供を目的としており、投資助言ではありません。 FIREとは？ **FIRE（Financial Independence, Retire Early）**とは、「経済的自立と早期リタイア」を目指すライフスタイルのことです。2010年代にアメリカで広まり、日本でも20〜40代を中心に注目されています。FIREの本質は「お金のために働き続けなければならない状態」から脱することであり、リタイア後は投資資産の運用益だけで生活費をまかなうことを目指します。\nFIREを達成するための基本戦略はシンプルです。「収入を増やし、支出を減らし、差額を投資する」の繰り返しです。貯蓄率が高いほど、二重の意味で達成が早まります。貯蓄額が増えるだけでなく、FIRE後の生活費も少なくなるため、必要な資産額（FIRE達成額）自体も小さくなるからです。このため、貯蓄率50%以上を達成した人は、わずか10〜17年でFIREできると試算されています。\n4%ルールの仕組み 4%ルールとは、米国トリニティ大学の研究（Trinity Study）に基づく考え方です。資産の4%以内を毎年取り崩して生活する場合、30年以上にわたって資産が枯渇しないことが過去データから示されています。逆に言えば、年間生活費の25倍（= 1 ÷ 4%）の資産があれば、理論上は永続的に生活できます。\nただし4%ルールには注意点もあります。米国株式市場のデータに基づいているため、日本株中心のポートフォリオでは結果が異なる可能性があります。また、インフレや市場の暴落タイミングによってはリスクが生じます。安全を重視する場合は取崩し率を3〜3.5%に抑えることも選択肢の一つです。本シミュレーターでは取崩し率を2〜5%の範囲で調整できるため、保守的〜積極的なさまざまなシナリオを試してみてください。\nFIREの種類 **リーンFIRE（Lean FIRE）**は、生活コストを極限まで抑えた最小限の資産でFIREする方法です。通常のFIREより少ない資産で達成できますが、生活費の削減が前提となります。年間生活費の目安は200〜240万円程度です。\n通常FIREは、現在の生活水準を維持したままFIREするスタンダードな形です。年間生活費の25倍（4%ルール）が達成目標となります。日本では年間生活費300万円×25倍＝7,500万円が典型的な目標金額です。\n**ファットFIRE（Fat FIRE）**は、FIRE後も豊かな生活を送ることを目標とします。年間生活費の1.5倍以上をベースに計算するため、必要資産額は大きくなりますが、ゆとりあるリタイア生活が実現できます。\n**コーストFIRE（Coast FIRE）**は、今すぐFIREするのではなく、「これ以上積立をしなくても、65歳までに運用益で目標額に到達できる」状態のことです。コーストFIRE達成後は好きな仕事を選び、生活費だけを稼ぐ働き方に移行できます。\n**バリスタFIRE（Barista FIRE）**は、資産が完全なFIREには届かない段階で、パートタイムや副業で生活費の一部を補いながら半リタイアする方法です。完全なFIREより少ない資産で実現でき、社会とのつながりを保ちながら自由な時間も確保できます。\nFIREを早く達成する方法 1. 貯蓄率を高める（最重要） FIREまでの年数を最も短縮するのは貯蓄率の向上です。貯蓄率20%なら約37年、50%なら約17年、70%なら約8.5年でFIREできます（年利5%・4%ルール想定、資産0スタート）。収入アップと支出削減の両輪で、まず貯蓄率30〜40%を目指しましょう。\n2. 投資利回りを改善する 低コストのインデックスファンド（全世界株式・S\u0026amp;P500など）への長期投資が有効です。信託報酬0.2%以下の商品を選び、新NISAの非課税枠（年間360万円・生涯1,800万円）を最大限に活用してください。同じ貯蓄額でも、リターン3%と7%では10年後の資産額に大きな差が生まれます。\n3. 収入の柱を増やす 副業・フリーランス・投資収益など、給与以外の収入源を持つことで貯蓄率が格段に上がります。特にスキルを活かしたサービス提供や、デジタルコンテンツ販売などの「レバレッジが効く収入」は、時間とお金の両面でFIREを加速させます。\n4. 固定費から見直す 家賃・通信費・保険料・車関連費などの固定費は、一度見直すと毎月・永続的に節約効果が続きます。月5万円の固定費削減は年60万円、25年分の4%ルールに換算すると1,500万円の資産に相当します。変動費より先に固定費の最適化を行うのがFIREへの近道です。\n関連ツール 複利で資産がどう増えるか → 複利計算シミュレーター 純資産を把握する → 資産管理シミュレーター 年金受給額を確認 → 年金シミュレーター 手取り額を計算 → 手取り計算シミュレーター NISAで非課税運用 → NISAシミュレーター iDeCoで節税しながら資産形成 → iDeCoシミュレーター 関連記事 老後2,000万円問題の対策 新NISA始め方 初心者向け完全ガイド 副業の始め方【2026年版】 インデックス投資の始め方 貯蓄率を上げる15の方法 資産管理・確定申告・家計管理なら**freee会計（無料トライアルあり） **がおすすめ\nProductivity Works 無料ツール 当サイトの計算ツールはすべて完全無料、ブラウザ上で動作し、データは一切保存されません。\n全ツール一覧はこちら 本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/tools/fire-simulator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"fireシミュレーター2026年版\"\u003eFIREシミュレーター【2026年版】\u003c/h1\u003e\n\u003cp\u003e年収・年間生活費・現在の資産額を入力するだけで、\u003cstrong\u003eFIRE達成までの年数\u003c/strong\u003eと\u003cstrong\u003e必要資産額\u003c/strong\u003eを自動計算します。リーンFIRE・ファットFIRE・コーストFIREの比較も一覧表示。\u003c/p\u003e\n\u003cdiv id=\"fire-calc\" style=\"max-width:680px;margin:0 auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Hiragino Sans',sans-serif;color:#1e293b;\"\u003e\n\u003c!-- 入力パネル --\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #7c3aed;border-radius:12px;background:#faf5ff;margin-bottom:20px;\"\u003e\n\u003ch2 style=\"margin:0 0 20px 0;font-size:18px;color:#7c3aed;\"\u003e基本情報を入力\u003c/h2\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px;\"\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;\"\u003e現在の年齢\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"fireAge\" min=\"20\" max=\"70\" step=\"1\" value=\"30\" oninput=\"calcFire()\" style=\"flex:1;padding:10px;border:1px solid #c4b5fd;border-radius:8px;font-size:16px;background:white;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e歳\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;\"\u003e年収（万円）\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"fireIncome\" min=\"0\" max=\"5000\" step=\"10\" value=\"500\" oninput=\"calcFire()\" style=\"flex:1;padding:10px;border:1px solid #c4b5fd;border-radius:8px;font-size:16px;background:white;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;\"\u003e年間生活費（万円）\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"fireExpense\" min=\"0\" max=\"2000\" step=\"10\" value=\"300\" oninput=\"calcFire()\" style=\"flex:1;padding:10px;border:1px solid #c4b5fd;border-radius:8px;font-size:16px;background:white;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:4px;font-size:14px;\"\u003e現在の資産額（万円）\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cinput type=\"number\" id=\"fireAsset\" min=\"0\" max=\"50000\" step=\"10\" value=\"300\" oninput=\"calcFire()\" style=\"flex:1;padding:10px;border:1px solid #c4b5fd;border-radius:8px;font-size:16px;background:white;\"\u003e\n\u003cspan style=\"color:#64748b;white-space:nowrap;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e期待リターン（%）: \u003cspan id=\"fireReturnVal\" style=\"color:#7c3aed;\"\u003e5.0%\u003c/span\u003e\u003c/label\u003e\n\u003cinput type=\"range\" id=\"fireReturn\" min=\"3\" max=\"12\" step=\"0.5\" value=\"5\" oninput=\"calcFire()\" style=\"width:100%;accent-color:#7c3aed;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:12px;color:#94a3b8;\"\u003e\u003cspan\u003e3%\u003c/span\u003e\u003cspan\u003e12%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:4px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e取崩し率（%）: \u003cspan id=\"fireWithdrawVal\" style=\"color:#7c3aed;\"\u003e4.00%\u003c/span\u003e\u003c/label\u003e\n\u003cinput type=\"range\" id=\"fireWithdraw\" min=\"2\" max=\"5\" step=\"0.25\" value=\"4\" oninput=\"calcFire()\" style=\"width:100%;accent-color:#7c3aed;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:12px;color:#94a3b8;\"\u003e\u003cspan\u003e2%（保守的）\u003c/span\u003e\u003cspan\u003e5%（積極的）\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 結果メインパネル --\u003e\n\u003cdiv style=\"background:linear-gradient(135deg,#7c3aed,#5b21b6);color:white;border-radius:12px;padding:24px;margin-bottom:16px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:14px;opacity:0.85;margin-bottom:4px;\"\u003eFIRE達成額（目標資産）\u003c/div\u003e\n\u003cdiv id=\"fireTarget\" style=\"font-size:42px;font-weight:bold;letter-spacing:-1px;\"\u003e7,500万円\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;opacity:0.75;margin-top:4px;\"\u003e年間生活費 ÷ 取崩し率\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"background:#ede9fe;border-radius:10px;padding:16px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#6b7280;margin-bottom:4px;\"\u003eFIRE達成まで\u003c/div\u003e\n\u003cdiv id=\"fireYears\" style=\"font-size:22px;font-weight:bold;color:#7c3aed;\"\u003e21年6ヶ月\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#ede9fe;border-radius:10px;padding:16px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#6b7280;margin-bottom:4px;\"\u003eFIRE達成年齢\u003c/div\u003e\n\u003cdiv id=\"fireAgeResult\" style=\"font-size:22px;font-weight:bold;color:#7c3aed;\"\u003e51歳\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#ede9fe;border-radius:10px;padding:16px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#6b7280;margin-bottom:4px;\"\u003e月間貯蓄額\u003c/div\u003e\n\u003cdiv id=\"fireMonthlySave\" style=\"font-size:22px;font-weight:bold;color:#7c3aed;\"\u003e16.7万円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f5f3ff;border-radius:10px;padding:16px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;\"\u003e\n\u003cspan style=\"font-size:14px;font-weight:bold;\"\u003e貯蓄率\u003c/span\u003e\n\u003cspan id=\"fireSavingsRate\" style=\"font-size:20px;font-weight:bold;color:#7c3aed;\"\u003e40.0%\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;\"\u003e\n\u003cspan style=\"font-size:13px;color:#6b7280;\"\u003eFIRE達成への進捗\u003c/span\u003e\n\u003cspan id=\"fireProgressPct\" style=\"font-size:14px;font-weight:bold;color:#7c3aed;\"\u003e4.0%\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#ddd6fe;border-radius:999px;height:12px;overflow:hidden;\"\u003e\n\u003cdiv id=\"fireProgressBar\" style=\"height:100%;background:linear-gradient(90deg,#7c3aed,#a78bfa);border-radius:999px;width:4%;transition:width 0.4s;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:11px;color:#94a3b8;margin-top:4px;\"\u003e\n\u003cspan\u003e現在 \u003cspan id=\"fireCurrentAssetLabel\"\u003e300万円\u003c/span\u003e\u003c/span\u003e\n\u003cspan\u003e目標 \u003cspan id=\"fireTargetLabel\"\u003e7,500万円\u003c/span\u003e\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- FIRE種類比較パネル --\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003ch3 style=\"font-size:16px;font-weight:bold;margin:0 0 12px 0;color:#4c1d95;\"\u003eFIRE種類別の比較\u003c/h3\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:10px;\" id=\"fireTypeGrid\"\u003e\n\u003cdiv style=\"border:1px solid #c4b5fd;border-radius:10px;padding:14px;background:#faf5ff;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#6b7280;margin-bottom:6px;\"\u003eリーンFIRE \u003cspan style=\"font-size:11px;font-weight:normal;\"\u003e（生活費×0.8）\u003c/span\u003e\u003c/div\u003e\n\u003cdiv id=\"leanTarget\" style=\"font-size:18px;font-weight:bold;color:#7c3aed;margin-bottom:2px;\"\u003e6,000万円\u003c/div\u003e\n\u003cdiv id=\"leanYears\" style=\"font-size:13px;color:#6b7280;\"\u003eXX年でFIRE達成\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"border:2px solid #7c3aed;border-radius:10px;padding:14px;background:#ede9fe;position:relative;\"\u003e\n\u003cdiv style=\"position:absolute;top:-10px;left:12px;background:#7c3aed;color:white;font-size:11px;padding:2px 8px;border-radius:999px;\"\u003e現在の設定\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#5b21b6;margin-bottom:6px;\"\u003e通常FIRE\u003c/div\u003e\n\u003cdiv id=\"normalTarget\" style=\"font-size:18px;font-weight:bold;color:#7c3aed;margin-bottom:2px;\"\u003e7,500万円\u003c/div\u003e\n\u003cdiv id=\"normalYears\" style=\"font-size:13px;color:#5b21b6;font-weight:bold;\"\u003eXX年でFIRE達成\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"border:1px solid #c4b5fd;border-radius:10px;padding:14px;background:#faf5ff;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#6b7280;margin-bottom:6px;\"\u003eファットFIRE \u003cspan style=\"font-size:11px;font-weight:normal;\"\u003e（生活費×1.5）\u003c/span\u003e\u003c/div\u003e\n\u003cdiv id=\"fatTarget\" style=\"font-size:18px;font-weight:bold;color:#7c3aed;margin-bottom:2px;\"\u003e11,250万円\u003c/div\u003e\n\u003cdiv id=\"fatYears\" style=\"font-size:13px;color:#6b7280;\"\u003eXX年でFIRE達成\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"border:1px solid #c4b5fd;border-radius:10px;padding:14px;background:#faf5ff;\"\u003e\n\u003cdiv style=\"font-size:13px;font-weight:bold;color:#6b7280;margin-bottom:6px;\"\u003eコーストFIRE \u003cspan style=\"font-size:11px;font-weight:normal;\"\u003e（65歳達成に必要な現在額）\u003c/span\u003e\u003c/div\u003e\n\u003cdiv id=\"coastTarget\" style=\"font-size:18px;font-weight:bold;color:#7c3aed;margin-bottom:2px;\"\u003e—\u003c/div\u003e\n\u003cdiv id=\"coastStatus\" style=\"font-size:13px;color:#6b7280;\"\u003e計算中...\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 年次推移表（折りたたみ） --\u003e\n\u003cdetails style=\"margin-bottom:20px;border:1px solid #c4b5fd;border-radius:10px;overflow:hidden;\"\u003e\n\u003csummary style=\"padding:14px 16px;font-weight:bold;font-size:14px;cursor:pointer;background:#faf5ff;color:#4c1d95;list-style:none;display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan\u003e▶ 年次推移表を表示する\u003c/span\u003e\n\u003c/summary\u003e\n\u003cdiv style=\"overflow-x:auto;\"\u003e\n\u003ctable id=\"fireTable\" style=\"width:100%;border-collapse:collapse;font-size:13px;\"\u003e\n\u003cthead\u003e\n\u003ctr style=\"background:#7c3aed;color:white;\"\u003e\n\u003cth style=\"padding:8px 12px;text-align:right;\"\u003e経過年\u003c/th\u003e\n\u003cth style=\"padding:8px 12px;text-align:right;\"\u003e年齢\u003c/th\u003e\n\u003cth style=\"padding:8px 12px;text-align:right;\"\u003e年間貯蓄\u003c/th\u003e\n\u003cth style=\"padding:8px 12px;text-align:right;\"\u003e運用益\u003c/th\u003e\n\u003cth style=\"padding:8px 12px;text-align:right;\"\u003e資産総額\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody id=\"fireTableBody\"\u003e\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/details\u003e\n\u003c!-- 貯蓄率別達成年数テーブル --\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003ch3 style=\"font-size:16px;font-weight:bold;margin:0 0 12px 0;color:#4c1d95;\"\u003e貯蓄率別のFIRE達成年数\u003c/h3\u003e\n\u003cdiv style=\"overflow-x:auto;\"\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;font-size:13px;text-align:center;\"\u003e\n\u003cthead\u003e\n\u003ctr style=\"background:#7c3aed;color:white;\"\u003e\n\u003cth style=\"padding:8px 10px;\"\u003e貯蓄率\u003c/th\u003e\n\u003cth style=\"padding:8px 10px;\"\u003e20%\u003c/th\u003e\n\u003cth style=\"padding:8px 10px;\"\u003e30%\u003c/th\u003e\n\u003cth style=\"padding:8px 10px;\"\u003e40%\u003c/th\u003e\n\u003cth style=\"padding:8px 10px;\"\u003e50%\u003c/th\u003e\n\u003cth style=\"padding:8px 10px;\"\u003e60%\u003c/th\u003e\n\u003cth style=\"padding:8px 10px;\"\u003e70%\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr id=\"savingsRateRow\" style=\"background:#f5f3ff;\"\u003e\n\u003ctd style=\"padding:8px 10px;font-weight:bold;color:#4c1d95;\"\u003e達成年数\u003c/td\u003e\n\u003ctd id=\"sr20\" style=\"padding:8px 10px;font-weight:bold;\"\u003e\u003c/td\u003e\n\u003ctd id=\"sr30\" style=\"padding:8px 10px;font-weight:bold;\"\u003e\u003c/td\u003e\n\u003ctd id=\"sr40\" style=\"padding:8px 10px;font-weight:bold;\"\u003e\u003c/td\u003e\n\u003ctd id=\"sr50\" style=\"padding:8px 10px;font-weight:bold;\"\u003e\u003c/td\u003e\n\u003ctd id=\"sr60\" style=\"padding:8px 10px;font-weight:bold;\"\u003e\u003c/td\u003e\n\u003ctd id=\"sr70\" style=\"padding:8px 10px;font-weight:bold;\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003cdiv style=\"font-size:11px;color:#94a3b8;margin-top:6px;\"\u003e※ 現在の年間生活費・取崩し率・期待リターンをベースに試算。資産0から開始した場合の年数。\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f5f3ff;border-radius:8px;padding:12px;font-size:12px;color:#64748b;\"\u003e\n\u003cstrong\u003e計算条件:\u003c/strong\u003e 年次複利計算。税金・インフレは考慮しておりません。実際の投資成果は市場状況により変動します。本シミュレーターは参考値の提供を目的としており、投資助言ではありません。\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n\nfunction fmt(v){\n  return Math.round(v).toLocaleString();\n}\n\nfunction calcYearsToFire(currentAsset, annualSave, targetAmount, returnRate){\n  // Returns fractional years, or Infinity if never\n  if(annualSave \u003c= 0 \u0026\u0026 currentAsset \u003e= targetAmount) return 0;\n  if(annualSave \u003c= 0 \u0026\u0026 currentAsset \u003c targetAmount) return Infinity;\n  var asset = currentAsset;\n  var r = returnRate / 100;\n  for(var y = 0; y \u003c= 200; y++){\n    if(asset \u003e= targetAmount) return y;\n    asset = asset * (1 + r) + annualSave;\n  }\n  return Infinity;\n}\n\nfunction calcYearsToFireFractional(currentAsset, annualSave, targetAmount, returnRate){\n  var asset = currentAsset;\n  var r = returnRate / 100;\n  for(var y = 0; y \u003c= 200; y++){\n    if(asset \u003e= targetAmount) return y;\n    var nextAsset = asset * (1 + r) + annualSave;\n    if(nextAsset \u003e= targetAmount){\n      // Interpolate within this year\n      var frac = (targetAmount - asset) / (nextAsset - asset);\n      return y + frac;\n    }\n    asset = nextAsset;\n  }\n  return Infinity;\n}\n\nfunction fmtYears(y){\n  if(y === Infinity || isNaN(y)) return '達成不可';\n  if(y \u003c 0) return 'すでに達成！';\n  var totalMonths = Math.round(y * 12);\n  var yy = Math.floor(totalMonths / 12);\n  var mm = totalMonths % 12;\n  if(yy === 0) return mm + 'ヶ月';\n  if(mm === 0) return yy + '年';\n  return yy + '年' + mm + 'ヶ月';\n}\n\nwindow.calcFire = function(){\n  var age      = parseInt(document.getElementById('fireAge').value)    || 30;\n  var income   = parseFloat(document.getElementById('fireIncome').value)  || 0;\n  var expense  = parseFloat(document.getElementById('fireExpense').value) || 0;\n  var asset    = parseFloat(document.getElementById('fireAsset').value)   || 0;\n  var retRate  = parseFloat(document.getElementById('fireReturn').value)  || 5;\n  var wdRate   = parseFloat(document.getElementById('fireWithdraw').value) || 4;\n\n  document.getElementById('fireReturnVal').textContent  = retRate.toFixed(1) + '%';\n  document.getElementById('fireWithdrawVal').textContent = wdRate.toFixed(2) + '%';\n\n  var annualSave = income - expense;\n  var savingsRate = income \u003e 0 ? (annualSave / income * 100) : 0;\n  var monthlySave = annualSave / 12;\n\n  // FIRE targets\n  var targetNormal = expense / (wdRate / 100);\n  var targetLean   = (expense * 0.8) / (wdRate / 100);\n  var targetFat    = (expense * 1.5) / (wdRate / 100);\n\n  // Progress\n  var progressPct = targetNormal \u003e 0 ? Math.min((asset / targetNormal) * 100, 100) : 0;\n  var progressDisplay = asset \u003c 0 ? 0 : progressPct;\n\n  // FIRE years\n  var yearsNormal = calcYearsToFireFractional(asset, annualSave, targetNormal, retRate);\n  var yearsLean   = calcYearsToFireFractional(asset, annualSave, targetLean,   retRate);\n  var yearsFat    = calcYearsToFireFractional(asset, annualSave, targetFat,    retRate);\n\n  // Coast FIRE — amount needed now to reach targetNormal by age 65 with no contributions\n  var yearsToRetire = Math.max(65 - age, 0);\n  var coastAmount = yearsToRetire \u003e 0\n    ? targetNormal / Math.pow(1 + retRate / 100, yearsToRetire)\n    : targetNormal;\n  var coastAchieved = asset \u003e= coastAmount;\n\n  // Update main results\n  document.getElementById('fireTarget').textContent    = fmt(targetNormal) + '万円';\n  document.getElementById('fireTargetLabel').textContent = fmt(targetNormal) + '万円';\n  document.getElementById('fireCurrentAssetLabel').textContent = fmt(asset) + '万円';\n  document.getElementById('fireProgressPct').textContent = progressDisplay.toFixed(1) + '%';\n  document.getElementById('fireProgressBar').style.width = progressDisplay + '%';\n  document.getElementById('fireSavingsRate').textContent = savingsRate.toFixed(1) + '%';\n  document.getElementById('fireMonthlySave').textContent = (monthlySave \u003e= 0 ? '' : '-') + fmt(Math.abs(monthlySave)) + '万円';\n\n  if(yearsNormal === Infinity){\n    document.getElementById('fireYears').textContent    = '達成不可';\n    document.getElementById('fireAgeResult').textContent = '—';\n  } else if(asset \u003e= targetNormal){\n    document.getElementById('fireYears').textContent    = 'すでに達成！';\n    document.getElementById('fireAgeResult').textContent = age + '歳';\n  } else {\n    document.getElementById('fireYears').textContent    = fmtYears(yearsNormal);\n    document.getElementById('fireAgeResult').textContent = Math.floor(age + yearsNormal) + '歳';\n  }\n\n  // FIRE type cards\n  document.getElementById('leanTarget').textContent  = fmt(targetLean)   + '万円';\n  document.getElementById('normalTarget').textContent = fmt(targetNormal) + '万円';\n  document.getElementById('fatTarget').textContent   = fmt(targetFat)    + '万円';\n\n  document.getElementById('leanYears').textContent  = asset \u003e= targetLean   ? 'すでに達成！' : (yearsLean   === Infinity ? '達成不可' : fmtYears(yearsLean)   + 'でFIRE達成');\n  document.getElementById('normalYears').textContent = asset \u003e= targetNormal ? 'すでに達成！' : (yearsNormal === Infinity ? '達成不可' : fmtYears(yearsNormal) + 'でFIRE達成');\n  document.getElementById('fatYears').textContent   = asset \u003e= targetFat    ? 'すでに達成！' : (yearsFat    === Infinity ? '達成不可' : fmtYears(yearsFat)    + 'でFIRE達成');\n\n  document.getElementById('coastTarget').textContent = fmt(coastAmount) + '万円';\n  if(coastAchieved){\n    document.getElementById('coastStatus').textContent = '達成済！積立なしで65歳FIRE可能';\n    document.getElementById('coastStatus').style.color = '#059669';\n  } else {\n    var coastShortfall = coastAmount - asset;\n    document.getElementById('coastStatus').textContent = 'あと' + fmt(coastShortfall) + '万円で達成';\n    document.getElementById('coastStatus').style.color = '#6b7280';\n  }\n\n  // Year-by-year table\n  var tbody = document.getElementById('fireTableBody');\n  tbody.innerHTML = '';\n  var a = asset;\n  var r = retRate / 100;\n  var maxYears = Math.min(\n    yearsNormal === Infinity ? 50 : Math.ceil(yearsNormal) + 2,\n    60\n  );\n  var fireReached = false;\n  for(var y = 0; y \u003c= maxYears; y++){\n    var investment = a * r;\n    var tr = document.createElement('tr');\n    var isFireYear = !fireReached \u0026\u0026 a \u003e= targetNormal;\n    if(isFireYear){ fireReached = true; }\n    tr.style.background = isFireYear ? '#ede9fe' : (y % 2 === 0 ? 'white' : '#faf5ff');\n    tr.style.fontWeight = isFireYear ? 'bold' : 'normal';\n    var saveCurrent = y === 0 ? 0 : annualSave;\n    tr.innerHTML =\n      '\u003ctd style=\"padding:7px 12px;text-align:right;\"\u003e' + (isFireYear ? '\u003cspan style=\"color:#7c3aed;\"\u003e★ ' : '') + y + '年目' + (isFireYear ? '\u003c/span\u003e' : '') + '\u003c/td\u003e' +\n      '\u003ctd style=\"padding:7px 12px;text-align:right;\"\u003e' + (age + y) + '歳\u003c/td\u003e' +\n      '\u003ctd style=\"padding:7px 12px;text-align:right;\"\u003e' + (y === 0 ? '—' : fmt(saveCurrent) + '万円') + '\u003c/td\u003e' +\n      '\u003ctd style=\"padding:7px 12px;text-align:right;\"\u003e' + fmt(y === 0 ? 0 : a * r / (1 + r) ) + '万円\u003c/td\u003e' +\n      '\u003ctd style=\"padding:7px 12px;text-align:right;color:' + (isFireYear ? '#7c3aed' : '#1e293b') + ';\"\u003e' + fmt(a) + '万円\u003c/td\u003e';\n    tbody.appendChild(tr);\n    if(y \u003e 0) a = a * (1 + r) + annualSave;\n    else a = a * (1 + r) + annualSave;\n  }\n\n  // Savings rate table\n  var rates = [20, 30, 40, 50, 60, 70];\n  rates.forEach(function(sr){\n    var annSave2 = income * (sr / 100);\n    var exp2 = income - annSave2;\n    var target2 = exp2 \u003e 0 ? exp2 / (wdRate / 100) : 0;\n    var y2 = target2 \u003e 0 ? calcYearsToFireFractional(0, annSave2, target2, retRate) : 0;\n    var el = document.getElementById('sr' + sr);\n    if(el){\n      el.textContent = y2 === Infinity ? '不可' : (y2 \u003c= 0 ? '即時' : fmtYears(y2));\n      el.style.color = '#7c3aed';\n      // Highlight the closest savings rate to current\n      var curSR = Math.round(savingsRate / 10) * 10;\n      el.style.background = (sr === curSR) ? '#ddd6fe' : '';\n    }\n  });\n};\n\ncalcFire();\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"fireとは\"\u003eFIREとは？\u003c/h2\u003e\n\u003cp\u003e**FIRE（Financial Independence, Retire Early）**とは、「経済的自立と早期リタイア」を目指すライフスタイルのことです。2010年代にアメリカで広まり、日本でも20〜40代を中心に注目されています。FIREの本質は「お金のために働き続けなければならない状態」から脱することであり、リタイア後は投資資産の運用益だけで生活費をまかなうことを目指します。\u003c/p\u003e","title":"FIREシミュレーター｜経済的自立・早期リタイアまで何年？【2026年版】"},{"content":" 正規表現 インタラクティブチートシート 各行の「試す」ボタンをクリックするとパターンがライブテスターに読み込まれます。\nライブテスター / / g 全検索 i 大小無視 m 複数行 s dotAll マッチなし マッチした箇所がここにハイライト表示されます クリア 一致するエントリが見つかりませんでした。 パターン 説明 例 操作 文字クラス (Character Classes) . 改行以外の任意の1文字 c.t → \"cat\", \"cut\", \"c3t\" 試すコピー \\d 数字 [0-9] \\d+ → \"42\", \"100\" 試すコピー \\D 数字以外の文字 \\D+ → \"abc \", \" xyz\" 試すコピー \\w 単語文字 [a-zA-Z0-9_] \\w+ → \"hello\", \"world_2\" 試すコピー \\W 単語文字以外（記号・空白など） \\W → \" \", \"-\", \"@\" 試すコピー \\s 空白文字（スペース・タブ・改行など） \\s+ → 単語間の空白 試すコピー \\S 空白以外の文字 \\S+ → \"hello\", \"world\" 試すコピー \\t 水平タブ文字 \\t → TSVの区切り文字 試すコピー \\n 改行文字 \\n → 行の区切り 試すコピー [abc] 文字クラス — a・b・cのいずれか1文字 [aeiou] → 母音 試すコピー [^abc] 否定文字クラス — a・b・c以外の文字 [^aeiou\\s] → 子音 試すコピー [a-z] 文字範囲（aからzまでの1文字） [a-zA-Z]+ → 英単語 試すコピー 量指定子 (Quantifiers) * 0回以上（貪欲マッチ） ab* → \"a\", \"ab\", \"abbb\" 試すコピー + 1回以上（貪欲マッチ） ab+ → \"ab\", \"abbb\"（\"a\"は非マッチ） 試すコピー ? 0回または1回（省略可能） colou?r → \"color\", \"colour\" 試すコピー {n} ちょうどn回繰り返す \\d{4} → \"2025\", \"1234\" 試すコピー {n,m} n回以上m回以下の繰り返し \\d{2,4} → \"12\", \"123\", \"1234\" 試すコピー {n,} n回以上の繰り返し \\d{3,} → \"123\", \"12345\" 試すコピー *? 0回以上（非貪欲 — 最短マッチ） \u0026lt;.*?\u0026gt; → 各HTMLタグ 試すコピー +? 1回以上（非貪欲 — 最短マッチ） \".+?\" → 引用符内の文字列 ","permalink":"https://productivity-works.com/ja/tools/regex-cheatsheet/","summary":"\u003cdiv id=\"rxcs-app\"\u003e\n\u003cstyle\u003e\n#rxcs-app {\n  font-family: 'Segoe UI', 'Hiragino Sans', 'Meiryo', system-ui, sans-serif;\n  background: #1a1a2e;\n  color: #e0e0e0;\n  padding: 24px;\n  border-radius: 12px;\n  max-width: 960px;\n  margin: 0 auto;\n  box-sizing: border-box;\n}\n\n#rxcs-app * {\n  box-sizing: border-box;\n}\n\n#rxcs-app h2 {\n  color: #00ff88;\n  margin: 0 0 6px 0;\n  font-size: 1.3rem;\n  letter-spacing: 0.04em;\n}\n\n#rxcs-app h3 {\n  color: #00cc70;\n  font-size: 0.9rem;\n  margin: 22px 0 10px 0;\n  text-transform: none;\n  letter-spacing: 0.05em;\n  border-bottom: 1px solid #2a2a4a;\n  padding-bottom: 6px;\n}\n\n#rxcs-app .rxcs-subtitle {\n  color: #606080;\n  font-size: 0.82rem;\n  margin-bottom: 20px;\n}\n\n/* ── テストエリア ── */\n#rxcs-app .rxcs-tester {\n  background: #0d0d1a;\n  border: 1px solid #2a2a4a;\n  border-radius: 10px;\n  padding: 18px;\n  margin-bottom: 24px;\n}\n\n#rxcs-app .rxcs-tester-title {\n  color: #a0a0c0;\n  font-size: 0.76rem;\n  text-transform: uppercase;\n  letter-spacing: 0.9px;\n  font-weight: 700;\n  margin-bottom: 12px;\n}\n\n#rxcs-app .rxcs-row {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n  flex-wrap: wrap;\n  margin-bottom: 10px;\n}\n\n#rxcs-app .rxcs-pattern-wrap {\n  display: flex;\n  align-items: center;\n  background: #16162a;\n  border: 1px solid #2a2a4a;\n  border-radius: 7px;\n  flex: 1;\n  min-width: 180px;\n  transition: border-color 0.2s;\n}\n\n#rxcs-app .rxcs-pattern-wrap:focus-within {\n  border-color: #00ff88;\n}\n\n#rxcs-app .rxcs-slash {\n  color: #00ff88;\n  font-size: 1.2rem;\n  padding: 0 7px;\n  font-family: monospace;\n  user-select: none;\n}\n\n#rxcs-app .rxcs-pattern-input {\n  background: transparent;\n  border: none;\n  outline: none;\n  color: #00ff88;\n  font-family: 'Courier New', monospace;\n  font-size: 0.95rem;\n  flex: 1;\n  padding: 9px 2px;\n  width: 0;\n}\n\n#rxcs-app .rxcs-flags-wrap {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  align-items: center;\n}\n\n#rxcs-app .rxcs-flag-label {\n  display: flex;\n  align-items: center;\n  gap: 3px;\n  cursor: pointer;\n  font-size: 0.8rem;\n  color: #9090b0;\n  user-select: none;\n}\n\n#rxcs-app .rxcs-flag-label input[type=\"checkbox\"] {\n  accent-color: #00ff88;\n  width: 13px;\n  height: 13px;\n  cursor: pointer;\n}\n\n#rxcs-app .rxcs-flag-key {\n  font-family: monospace;\n  color: #00ff88;\n  font-weight: 700;\n}\n\n#rxcs-app .rxcs-teststr {\n  width: 100%;\n  background: #16162a;\n  border: 1px solid #2a2a4a;\n  color: #e0e0e0;\n  padding: 10px 12px;\n  border-radius: 7px;\n  font-family: 'Courier New', monospace;\n  font-size: 0.88rem;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.2s;\n  line-height: 1.55;\n}\n\n#rxcs-app .rxcs-teststr:focus {\n  border-color: #00ff88;\n}\n\n#rxcs-app .rxcs-stats {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin: 8px 0;\n  flex-wrap: wrap;\n}\n\n#rxcs-app .rxcs-badge {\n  background: #00ff8820;\n  border: 1px solid #00ff8840;\n  color: #00ff88;\n  padding: 3px 11px;\n  border-radius: 20px;\n  font-size: 0.78rem;\n  font-weight: 700;\n}\n\n#rxcs-app .rxcs-badge.no-match {\n  background: #ff444420;\n  border-color: #ff444440;\n  color: #ff8888;\n}\n\n#rxcs-app .rxcs-badge.error {\n  background: #ff220020;\n  border-color: #ff220040;\n  color: #ff6666;\n}\n\n#rxcs-app .rxcs-display {\n  background: #16162a;\n  border: 1px solid #2a2a4a;\n  border-radius: 7px;\n  padding: 10px 12px;\n  font-family: 'Courier New', monospace;\n  font-size: 0.88rem;\n  line-height: 1.6;\n  min-height: 60px;\n  white-space: pre-wrap;\n  word-break: break-all;\n  color: #c0c0e0;\n  margin-top: 6px;\n}\n\n#rxcs-app .rxcs-hl {\n  background: #00ff8840;\n  border-bottom: 2px solid #00ff88;\n  border-radius: 2px;\n  color: #00ff88;\n}\n\n#rxcs-app .rxcs-hl-alt {\n  background: #ff88ff30;\n  border-bottom: 2px solid #ff88ff;\n  border-radius: 2px;\n  color: #ff88ff;\n}\n\n/* ── 検索バー ── */\n#rxcs-app .rxcs-search-wrap {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 18px;\n}\n\n#rxcs-app .rxcs-search {\n  flex: 1;\n  background: #0d0d1a;\n  border: 1px solid #2a2a4a;\n  color: #e0e0e0;\n  padding: 9px 13px;\n  border-radius: 7px;\n  font-size: 0.88rem;\n  outline: none;\n  transition: border-color 0.2s;\n  font-family: inherit;\n}\n\n#rxcs-app .rxcs-search:focus {\n  border-color: #00ff88;\n}\n\n#rxcs-app .rxcs-search::placeholder {\n  color: #404060;\n}\n\n#rxcs-app .rxcs-search-clear {\n  background: #0d0d1a;\n  border: 1px solid #2a2a4a;\n  color: #808090;\n  padding: 8px 13px;\n  border-radius: 7px;\n  cursor: pointer;\n  font-size: 0.82rem;\n  transition: all 0.2s;\n  font-family: inherit;\n}\n\n#rxcs-app .rxcs-search-clear:hover {\n  border-color: #00ff88;\n  color: #00ff88;\n}\n\n/* ── リファレンステーブル ── */\n#rxcs-app .rxcs-table-wrap {\n  overflow-x: auto;\n  margin-bottom: 6px;\n  border-radius: 8px;\n  border: 1px solid #2a2a4a;\n}\n\n#rxcs-app .rxcs-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.84rem;\n  min-width: 580px;\n}\n\n#rxcs-app .rxcs-table thead tr {\n  background: #0d0d1a;\n}\n\n#rxcs-app .rxcs-table thead th {\n  color: #606080;\n  font-size: 0.72rem;\n  letter-spacing: 0.6px;\n  padding: 9px 12px;\n  text-align: left;\n  font-weight: 700;\n  border-bottom: 1px solid #2a2a4a;\n}\n\n#rxcs-app .rxcs-table tbody tr {\n  border-bottom: 1px solid #1a1a30;\n  transition: background 0.15s;\n}\n\n#rxcs-app .rxcs-table tbody tr:last-child {\n  border-bottom: none;\n}\n\n#rxcs-app .rxcs-table tbody tr:hover {\n  background: #1e1e38;\n}\n\n#rxcs-app .rxcs-table tbody tr.rxcs-hidden {\n  display: none;\n}\n\n#rxcs-app .rxcs-table td {\n  padding: 9px 12px;\n  vertical-align: middle;\n}\n\n#rxcs-app .rxcs-token {\n  font-family: 'Courier New', monospace;\n  color: #00ff88;\n  font-weight: 700;\n  font-size: 0.9rem;\n  white-space: nowrap;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n#rxcs-app .rxcs-desc {\n  color: #c0c0d8;\n  line-height: 1.5;\n  font-size: 0.83rem;\n}\n\n#rxcs-app .rxcs-example {\n  font-family: 'Courier New', monospace;\n  color: #ffe066;\n  font-size: 0.8rem;\n  white-space: nowrap;\n}\n\n#rxcs-app .rxcs-actions {\n  display: flex;\n  gap: 5px;\n  align-items: center;\n  white-space: nowrap;\n}\n\n#rxcs-app .rxcs-btn-try {\n  background: #00ff8818;\n  border: 1px solid #00ff8840;\n  color: #00ff88;\n  padding: 4px 10px;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 0.74rem;\n  font-weight: 600;\n  transition: all 0.18s;\n  font-family: inherit;\n}\n\n#rxcs-app .rxcs-btn-try:hover {\n  background: #00ff8830;\n  border-color: #00ff88;\n}\n\n#rxcs-app .rxcs-btn-copy {\n  background: #1a1a3a;\n  border: 1px solid #2a2a4a;\n  color: #8080a0;\n  padding: 4px 9px;\n  border-radius: 5px;\n  cursor: pointer;\n  font-size: 0.74rem;\n  transition: all 0.18s;\n  font-family: inherit;\n}\n\n#rxcs-app .rxcs-btn-copy:hover {\n  border-color: #5050a0;\n  color: #c0c0e0;\n}\n\n#rxcs-app .rxcs-btn-copy.copied {\n  border-color: #00ff88;\n  color: #00ff88;\n}\n\n/* ── セクションヘッダー ── */\n#rxcs-app .rxcs-section-header {\n  background: #0d0d1a;\n}\n\n#rxcs-app .rxcs-section-header td {\n  color: #00cc70;\n  font-size: 0.74rem;\n  font-weight: 700;\n  letter-spacing: 0.08em;\n  padding: 7px 12px;\n  border-bottom: 1px solid #2a2a4a;\n}\n\n/* ── 結果なし ── */\n#rxcs-app .rxcs-no-results {\n  text-align: center;\n  color: #404060;\n  padding: 28px;\n  font-size: 0.86rem;\n  display: none;\n}\n\n#rxcs-app .rxcs-no-results.visible {\n  display: block;\n}\n\n/* ── レシピカード ── */\n#rxcs-app .rxcs-recipes {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(270px, 1fr));\n  gap: 10px;\n  margin-top: 8px;\n}\n\n#rxcs-app .rxcs-recipe-card {\n  background: #0d0d1a;\n  border: 1px solid #2a2a4a;\n  border-radius: 8px;\n  padding: 13px 14px;\n  transition: border-color 0.2s;\n}\n\n#rxcs-app .rxcs-recipe-card:hover {\n  border-color: #3a3a6a;\n}\n\n#rxcs-app .rxcs-recipe-name {\n  color: #e0e0ff;\n  font-size: 0.86rem;\n  font-weight: 700;\n  margin-bottom: 5px;\n}\n\n#rxcs-app .rxcs-recipe-pat {\n  font-family: 'Courier New', monospace;\n  color: #00ff88;\n  font-size: 0.76rem;\n  word-break: break-all;\n  margin-bottom: 7px;\n  background: #16162a;\n  padding: 5px 8px;\n  border-radius: 5px;\n  display: block;\n}\n\n#rxcs-app .rxcs-recipe-desc {\n  color: #7070a0;\n  font-size: 0.78rem;\n  margin-bottom: 9px;\n  line-height: 1.5;\n}\n\n#rxcs-app .rxcs-recipe-btns {\n  display: flex;\n  gap: 6px;\n}\n\n/* ── freee CTA ── */\n#rxcs-app .rxcs-cta {\n  background: linear-gradient(135deg, #0f3460 0%, #16213e 100%);\n  border: 1px solid #1a4a8a;\n  border-radius: 10px;\n  padding: 20px 22px;\n  margin-top: 28px;\n  display: flex;\n  align-items: flex-start;\n  gap: 16px;\n  flex-wrap: wrap;\n}\n\n#rxcs-app .rxcs-cta-icon {\n  font-size: 2rem;\n  line-height: 1;\n  flex-shrink: 0;\n}\n\n#rxcs-app .rxcs-cta-body {\n  flex: 1;\n  min-width: 200px;\n}\n\n#rxcs-app .rxcs-cta-title {\n  color: #e0e8ff;\n  font-size: 0.92rem;\n  font-weight: 700;\n  margin-bottom: 5px;\n}\n\n#rxcs-app .rxcs-cta-desc {\n  color: #7090c0;\n  font-size: 0.8rem;\n  line-height: 1.5;\n  margin-bottom: 12px;\n}\n\n#rxcs-app .rxcs-cta-btn {\n  display: inline-block;\n  background: #00ff88;\n  color: #0d0d1a;\n  font-weight: 700;\n  font-size: 0.84rem;\n  padding: 9px 20px;\n  border-radius: 6px;\n  text-decoration: none;\n  transition: background 0.2s;\n}\n\n#rxcs-app .rxcs-cta-btn:hover {\n  background: #00cc6e;\n}\n\n/* ── レスポンシブ ── */\n@media (max-width: 640px) {\n  #rxcs-app {\n    padding: 14px;\n  }\n  #rxcs-app .rxcs-table {\n    font-size: 0.78rem;\n    min-width: 460px;\n  }\n  #rxcs-app .rxcs-recipes {\n    grid-template-columns: 1fr;\n  }\n  #rxcs-app .rxcs-flags-wrap {\n    gap: 7px;\n  }\n  #rxcs-app .rxcs-cta {\n    flex-direction: column;\n    gap: 10px;\n  }\n}\n\u003c/style\u003e\n\u003ch2\u003e正規表現 インタラクティブチートシート\u003c/h2\u003e\n\u003cp class=\"rxcs-subtitle\"\u003e各行の「試す」ボタンをクリックするとパターンがライブテスターに読み込まれます。\u003c/p\u003e","title":"正規表現チートシート — インタラクティブリファレンス"},{"content":" スキーマ生成 JSONを検証 スキーマバージョン: Draft-07 2020-12 サンプル: — プリセットを選択 — ユーザーオブジェクト 商品カタログ APIレスポンス スキーマをコピー クリア 入力 JSON 文字数: 0 行数: 1 生成済み JSON スキーマ // 左にJSONを貼り付けて「スキーマ生成」をクリックするとここに表示されます スキーマプロパティを編集 プロパティ名 型 説明（description） 必須 編集を適用して再生成 コピーしました！ JSONスキーマとは JSONスキーマ（JSON Schema）は、JSONデータの構造を記述・検証するための仕様です。「このオブジェクトはどのようなプロパティを持つか」「各フィールドの型は何か」「どのフィールドが必須か」「文字列のフォーマットはどうあるべきか」といった制約を機械可読な形式で定義できます。APIの設計・ドキュメント生成・コード自動生成・入力バリデーションなど、様々な場面で活用されています。\n広く使われているバージョンは Draft-07（ほぼすべての言語のバリデーションライブラリが対応）と、現行の安定仕様である Draft 2020-12 です。このツールはボタン一つで両バージョンを切り替えられます。\nこのJSONスキーマジェネレーターの使い方 スキーマ生成 — 左の入力欄にJSONを貼り付けて「スキーマ生成」をクリックします。ツールは各値を再帰的に検査し、true/false を boolean、整数を integer、小数を number、null を null、配列・オブジェクトをそれぞれの型にマッピングします。文字列は日時（date-time）・メールアドレス（email）・URL（uri）・UUID のパターンを自動検出し、format キーワードを付加します。\nスキーマバージョン切替 — 「Draft-07」または「2020-12」ボタンで $schema URIを切り替えます。入力済みの場合は即座に再生成されます。\nプロパティ編集 — スキーマ生成後、下部に「スキーマプロパティを編集」テーブルが表示されます。各プロパティに description（説明文）を追加し、「必須」チェックボックスで required 配列を制御できます。「編集を適用して再生成」をクリックすると反映されます。\nJSONを検証 — 「JSONを検証」をクリックすると、入力JSONを生成済みスキーマと照合します。型の不一致・必須フィールドの欠落・ネスト構造のエラーをJSONパスとともに報告します。\nサンプルプリセット — 「サンプル」ドロップダウンから3種類の例を読み込めます。ユーザーオブジェクト（UUID・メール・日時・ネスト住所・ロール配列）、商品カタログ（価格・評価・画像配列）、APIレスポンス（ページネーション・ネストデータ・メタ情報）。\nスキーマをコピー — 「スキーマをコピー」ボタンで生成済みスキーマをクリップボードに一発コピーできます。\n関連ツール JSONを整形 → JSONフォーマッター JSONをCSVに変換 → JSON to CSV YAML ↔ JSON を相互変換 → YAML↔JSONコンバーター エンジニア・フリーランスの確定申告を自動化\n開発に集中したいのに、経理業務に時間を取られていませんか？クラウド会計ソフト「freee」なら、銀行口座・クレジットカードと自動連携。確定申告もワンクリック。\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/json-schema-generator/","summary":"\u003cdiv id=\"jsg-app\"\u003e\n\u003cstyle\u003e\n#jsg-app {\n  font-family: 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', system-ui, sans-serif;\n  background: #1e1e2e;\n  color: #cdd6f4;\n  border-radius: 12px;\n  padding: 20px;\n  margin: 0 auto;\n  max-width: 1200px;\n  box-sizing: border-box;\n}\n\n#jsg-app * {\n  box-sizing: border-box;\n}\n\n/* ── ツールバー ── */\n#jsg-app .jsg-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n  margin-bottom: 16px;\n}\n\n#jsg-app .jsg-toolbar-group {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  flex-wrap: wrap;\n}\n\n#jsg-app .jsg-sep {\n  width: 1px;\n  height: 26px;\n  background: #45475a;\n  margin: 0 4px;\n}\n\n#jsg-app .jsg-label {\n  font-size: 12px;\n  color: #a6adc8;\n  white-space: nowrap;\n}\n\n#jsg-app .jsg-btn {\n  padding: 7px 15px;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: opacity 0.15s, transform 0.1s;\n  outline: none;\n  white-space: nowrap;\n}\n#jsg-app .jsg-btn:active { transform: scale(0.97); }\n#jsg-app .jsg-btn:hover  { opacity: 0.88; }\n\n#jsg-app .jsg-btn-generate { background: #89b4fa; color: #1e1e2e; }\n#jsg-app .jsg-btn-validate { background: #a6e3a1; color: #1e1e2e; }\n#jsg-app .jsg-btn-copy     { background: #cba6f7; color: #1e1e2e; }\n#jsg-app .jsg-btn-clear    { background: #45475a; color: #cdd6f4; }\n\n#jsg-app .jsg-select {\n  background: #313244;\n  color: #cdd6f4;\n  border: 1px solid #45475a;\n  border-radius: 6px;\n  padding: 6px 10px;\n  font-size: 13px;\n  cursor: pointer;\n  outline: none;\n}\n#jsg-app .jsg-select:focus { border-color: #89b4fa; }\n\n#jsg-app .jsg-version-toggle {\n  display: flex;\n  gap: 0;\n  border-radius: 7px;\n  overflow: hidden;\n  border: 1px solid #45475a;\n}\n\n#jsg-app .jsg-version-btn {\n  padding: 6px 13px;\n  background: #313244;\n  color: #a6adc8;\n  border: none;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n  outline: none;\n}\n#jsg-app .jsg-version-btn.active {\n  background: #89b4fa;\n  color: #1e1e2e;\n}\n\n/* ── メインレイアウト ── */\n#jsg-app .jsg-main {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n}\n\n@media (max-width: 750px) {\n  #jsg-app .jsg-main { grid-template-columns: 1fr; }\n  #jsg-app .jsg-sep  { display: none; }\n}\n\n#jsg-app .jsg-pane {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n#jsg-app .jsg-pane-label {\n  font-size: 11px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #a6adc8;\n}\n\n#jsg-app .jsg-textarea {\n  width: 100%;\n  min-height: 320px;\n  background: #11111b;\n  color: #cdd6f4;\n  border: 2px solid #313244;\n  border-radius: 9px;\n  padding: 14px;\n  font-family: 'Cascadia Code', 'Fira Code', 'Consolas', monospace;\n  font-size: 13px;\n  line-height: 1.65;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.2s;\n  tab-size: 2;\n}\n#jsg-app .jsg-textarea:focus { border-color: #89b4fa; }\n#jsg-app .jsg-textarea.jsg-error { border-color: #f38ba8; }\n#jsg-app .jsg-textarea.jsg-valid { border-color: #a6e3a1; }\n\n#jsg-app .jsg-output-box {\n  width: 100%;\n  min-height: 320px;\n  background: #11111b;\n  border: 2px solid #313244;\n  border-radius: 9px;\n  padding: 14px;\n  font-family: 'Cascadia Code', 'Fira Code', 'Consolas', monospace;\n  font-size: 13px;\n  line-height: 1.65;\n  overflow: auto;\n  white-space: pre-wrap;\n  word-break: break-all;\n  transition: border-color 0.2s;\n}\n#jsg-app .jsg-output-box.jsg-valid { border-color: #a6e3a1; }\n#jsg-app .jsg-output-box.jsg-error { border-color: #f38ba8; }\n\n/* ── ステータス・エラー ── */\n#jsg-app .jsg-status-bar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  font-size: 12px;\n  color: #6c7086;\n  margin-top: 2px;\n}\n#jsg-app .jsg-ok   { color: #a6e3a1; font-weight: 600; }\n#jsg-app .jsg-err  { color: #f38ba8; font-weight: 600; }\n#jsg-app .jsg-info { color: #89b4fa; }\n\n#jsg-app .jsg-error-box {\n  background: #1a0a0a;\n  border: 1px solid #f38ba8;\n  border-radius: 7px;\n  color: #f38ba8;\n  font-size: 13px;\n  padding: 10px 14px;\n  display: none;\n  font-family: 'Cascadia Code', 'Fira Code', 'Consolas', monospace;\n}\n#jsg-app .jsg-error-box.visible { display: block; }\n\n/* ── プロパティエディター ── */\n#jsg-app .jsg-editor-section {\n  margin-top: 18px;\n  background: #181825;\n  border: 1px solid #313244;\n  border-radius: 10px;\n  padding: 14px;\n}\n\n#jsg-app .jsg-editor-title {\n  font-size: 12px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  color: #a6adc8;\n  margin-bottom: 12px;\n}\n\n#jsg-app .jsg-prop-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n\n#jsg-app .jsg-prop-table th {\n  text-align: left;\n  color: #6c7086;\n  font-weight: 600;\n  font-size: 11px;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  padding: 4px 8px 8px 8px;\n  border-bottom: 1px solid #313244;\n}\n\n#jsg-app .jsg-prop-table td {\n  padding: 6px 8px;\n  vertical-align: middle;\n  border-bottom: 1px solid #1e1e2e;\n}\n#jsg-app .jsg-prop-table tr:last-child td { border-bottom: none; }\n\n#jsg-app .jsg-prop-key {\n  color: #89b4fa;\n  font-family: 'Cascadia Code', 'Fira Code', 'Consolas', monospace;\n  white-space: nowrap;\n}\n\n#jsg-app .jsg-prop-type {\n  color: #fab387;\n  font-family: 'Cascadia Code', 'Fira Code', 'Consolas', monospace;\n  font-size: 12px;\n}\n\n#jsg-app .jsg-prop-desc-input {\n  background: #11111b;\n  color: #cdd6f4;\n  border: 1px solid #313244;\n  border-radius: 5px;\n  padding: 4px 8px;\n  font-size: 12px;\n  width: 100%;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#jsg-app .jsg-prop-desc-input:focus { border-color: #89b4fa; }\n\n#jsg-app .jsg-prop-req-chk {\n  accent-color: #89b4fa;\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n}\n\n#jsg-app .jsg-apply-btn {\n  margin-top: 12px;\n  padding: 7px 18px;\n  background: #89b4fa;\n  color: #1e1e2e;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.15s;\n}\n#jsg-app .jsg-apply-btn:hover { opacity: 0.85; }\n\n/* ── シンタックスハイライト ── */\n#jsg-app .jst-key    { color: #89b4fa; }\n#jsg-app .jst-str    { color: #a6e3a1; }\n#jsg-app .jst-num    { color: #fab387; }\n#jsg-app .jst-bool   { color: #cba6f7; }\n#jsg-app .jst-null   { color: #f38ba8; }\n#jsg-app .jst-punc   { color: #6c7086; }\n\n/* ── トースト通知 ── */\n#jsg-app .jsg-toast {\n  position: fixed;\n  bottom: 32px;\n  right: 32px;\n  background: #a6e3a1;\n  color: #1e1e2e;\n  font-weight: 700;\n  font-size: 14px;\n  padding: 10px 22px;\n  border-radius: 8px;\n  box-shadow: 0 4px 24px rgba(0,0,0,0.4);\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 0.25s;\n  z-index: 9999;\n}\n#jsg-app .jsg-toast.show { opacity: 1; }\n\u003c/style\u003e\n\u003c!-- ツールバー --\u003e\n\u003cdiv class=\"jsg-toolbar\"\u003e\n  \u003cdiv class=\"jsg-toolbar-group\"\u003e\n    \u003cbutton class=\"jsg-btn jsg-btn-generate\" onclick=\"jsgGenerate()\"\u003eスキーマ生成\u003c/button\u003e\n    \u003cbutton class=\"jsg-btn jsg-btn-validate\" onclick=\"jsgValidate()\"\u003eJSONを検証\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"jsg-sep\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"jsg-toolbar-group\"\u003e\n    \u003cspan class=\"jsg-label\"\u003eスキーマバージョン:\u003c/span\u003e\n    \u003cdiv class=\"jsg-version-toggle\"\u003e\n      \u003cbutton class=\"jsg-version-btn active\" id=\"jsg-v07\" onclick=\"jsgSetVersion('draft-07')\"\u003eDraft-07\u003c/button\u003e\n      \u003cbutton class=\"jsg-version-btn\" id=\"jsg-v20\" onclick=\"jsgSetVersion('2020-12')\"\u003e2020-12\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"jsg-sep\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"jsg-toolbar-group\"\u003e\n    \u003cspan class=\"jsg-label\"\u003eサンプル:\u003c/span\u003e\n    \u003cselect class=\"jsg-select\" id=\"jsg-sample-select\" onchange=\"jsgLoadSample(this.value)\"\u003e\n      \u003coption value=\"\"\u003e— プリセットを選択 —\u003c/option\u003e\n      \u003coption value=\"user\"\u003eユーザーオブジェクト\u003c/option\u003e\n      \u003coption value=\"product\"\u003e商品カタログ\u003c/option\u003e\n      \u003coption value=\"api\"\u003eAPIレスポンス\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"jsg-sep\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"jsg-toolbar-group\"\u003e\n    \u003cbutton class=\"jsg-btn jsg-btn-copy\"  onclick=\"jsgCopy()\"\u003eスキーマをコピー\u003c/button\u003e\n    \u003cbutton class=\"jsg-btn jsg-btn-clear\" onclick=\"jsgClear()\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- メインペイン --\u003e\n\u003cdiv class=\"jsg-main\"\u003e\n  \u003c!-- 左: JSON入力 --\u003e\n  \u003cdiv class=\"jsg-pane\"\u003e\n    \u003cdiv class=\"jsg-pane-label\"\u003e入力 JSON\u003c/div\u003e\n    \u003ctextarea\n      id=\"jsg-input\"\n      class=\"jsg-textarea\"\n      placeholder='サンプルJSONを貼り付けてください…\u0026#10;\u0026#10;{\"name\": \"田中太郎\", \"age\": 30, \"email\": \"tanaka@example.com\"}'\n      oninput=\"jsgOnInput()\"\n      spellcheck=\"false\"\n    \u003e\u003c/textarea\u003e\n    \u003cdiv class=\"jsg-status-bar\"\u003e\n      \u003cspan id=\"jsg-in-chars\"\u003e文字数: 0\u003c/span\u003e\n      \u003cspan id=\"jsg-in-lines\"\u003e行数: 1\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv id=\"jsg-error-box\" class=\"jsg-error-box\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 右: スキーマ出力 --\u003e\n  \u003cdiv class=\"jsg-pane\"\u003e\n    \u003cdiv class=\"jsg-pane-label\"\u003e生成済み JSON スキーマ\u003c/div\u003e\n    \u003cdiv id=\"jsg-output\" class=\"jsg-output-box\"\u003e\u003cspan style=\"color:#45475a\"\u003e// 左にJSONを貼り付けて「スキーマ生成」をクリックするとここに表示されます\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"jsg-status-bar\" id=\"jsg-out-status\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- プロパティエディター（スキーマ生成後に表示） --\u003e\n\u003cdiv class=\"jsg-editor-section\" id=\"jsg-editor-section\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"jsg-editor-title\"\u003eスキーマプロパティを編集\u003c/div\u003e\n  \u003ctable class=\"jsg-prop-table\" id=\"jsg-prop-table\"\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n        \u003cth\u003eプロパティ名\u003c/th\u003e\n        \u003cth\u003e型\u003c/th\u003e\n        \u003cth\u003e説明（description）\u003c/th\u003e\n        \u003cth\u003e必須\u003c/th\u003e\n      \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody id=\"jsg-prop-tbody\"\u003e\u003c/tbody\u003e\n  \u003c/table\u003e\n  \u003cbutton class=\"jsg-apply-btn\" onclick=\"jsgApplyEdits()\"\u003e編集を適用して再生成\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"jsg-toast\" id=\"jsg-toast\"\u003eコピーしました！\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  /* ────────────────────────────────────────\n     状態管理\n  ──────────────────────────────────────── */\n  var schemaVersion = 'draft-07';\n  var lastSchema = null;\n  var lastInput  = null;\n  var propMeta   = {};\n\n  /* ────────────────────────────────────────\n     ユーティリティ\n  ──────────────────────────────────────── */\n  function esc(s) {\n    return String(s)\n      .replace(/\u0026/g, '\u0026amp;')\n      .replace(/\u003c/g, '\u0026lt;')\n      .replace(/\u003e/g, '\u0026gt;')\n      .replace(/\"/g, '\u0026quot;');\n  }\n\n  function syntaxHL(json) {\n    return esc(json).replace(\n      /(\"(\\\\u[a-fA-F0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?|[{}\\[\\],:])/g,\n      function (m) {\n        var cls = 'jst-num';\n        if (/^\"/.test(m))              cls = /:$/.test(m) ? 'jst-key' : 'jst-str';\n        else if (/true|false/.test(m)) cls = 'jst-bool';\n        else if (/null/.test(m))       cls = 'jst-null';\n        else if (/[{}\\[\\],:]/.test(m)) cls = 'jst-punc';\n        return '\u003cspan class=\"' + cls + '\"\u003e' + m + '\u003c/span\u003e';\n      }\n    );\n  }\n\n  function showToast(msg) {\n    var t = document.getElementById('jsg-toast');\n    t.textContent = msg || 'コピーしました！';\n    t.classList.add('show');\n    setTimeout(function () { t.classList.remove('show'); }, 1800);\n  }\n\n  function setError(msg) {\n    var el = document.getElementById('jsg-error-box');\n    if (msg) { el.textContent = msg; el.classList.add('visible'); }\n    else      { el.textContent = ''; el.classList.remove('visible'); }\n  }\n\n  function setInputState(state) {\n    var el = document.getElementById('jsg-input');\n    el.className = 'jsg-textarea' + (state ? ' jsg-' + state : '');\n  }\n\n  function setOutputState(state) {\n    var el = document.getElementById('jsg-output');\n    el.className = 'jsg-output-box' + (state ? ' jsg-' + state : '');\n  }\n\n  function setOutputHTML(html) {\n    document.getElementById('jsg-output').innerHTML = html;\n  }\n\n  function updateInputStats() {\n    var v = document.getElementById('jsg-input').value;\n    document.getElementById('jsg-in-chars').textContent = '文字数: ' + v.length;\n    document.getElementById('jsg-in-lines').textContent = '行数: ' + (v ? v.split('\\n').length : 1);\n  }\n\n  function setOutStatus(html) {\n    document.getElementById('jsg-out-status').innerHTML = html;\n  }\n\n  function parseInput() {\n    var raw = document.getElementById('jsg-input').value.trim();\n    if (!raw) return null;\n    try {\n      return { ok: true, value: JSON.parse(raw) };\n    } catch (e) {\n      var msg = e.message || String(e);\n      var pm = msg.match(/position (\\d+)/i);\n      var line = null;\n      if (pm) {\n        var pos = parseInt(pm[1], 10);\n        line = raw.slice(0, pos).split('\\n').length;\n      }\n      return { ok: false, error: msg, line: line };\n    }\n  }\n\n  /* ────────────────────────────────────────\n     フォーマット検出\n  ──────────────────────────────────────── */\n  var RE_DATETIME = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})?)?$/;\n  var RE_EMAIL    = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n  var RE_URI      = /^https?:\\/\\/.+/;\n  var RE_UUID     = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n  function detectStringFormat(val) {\n    if (RE_DATETIME.test(val)) return 'date-time';\n    if (RE_EMAIL.test(val))    return 'email';\n    if (RE_URI.test(val))      return 'uri';\n    if (RE_UUID.test(val))     return 'uuid';\n    return null;\n  }\n\n  function isInteger(n) {\n    return Number.isFinite(n) \u0026\u0026 Math.floor(n) === n;\n  }\n\n  /* ────────────────────────────────────────\n     スキーマ生成（再帰）\n  ──────────────────────────────────────── */\n  function inferSchema(val) {\n    if (val === null)              return { type: 'null' };\n    if (typeof val === 'boolean')  return { type: 'boolean' };\n    if (typeof val === 'number')   return { type: isInteger(val) ? 'integer' : 'number' };\n\n    if (typeof val === 'string') {\n      var fmt = detectStringFormat(val);\n      var s = { type: 'string' };\n      if (fmt) s.format = fmt;\n      return s;\n    }\n\n    if (Array.isArray(val)) {\n      var schema = { type: 'array' };\n      if (val.length \u003e 0) schema.items = inferSchema(val[0]);\n      return schema;\n    }\n\n    if (typeof val === 'object') {\n      var props  = {};\n      var reqArr = [];\n      var keys   = Object.keys(val);\n      for (var i = 0; i \u003c keys.length; i++) {\n        var k = keys[i];\n        props[k] = inferSchema(val[k]);\n        reqArr.push(k);\n      }\n      return { type: 'object', properties: props, required: reqArr };\n    }\n\n    return {};\n  }\n\n  function buildRootSchema(parsed) {\n    var $schema = schemaVersion === '2020-12'\n      ? 'https://json-schema.org/draft/2020-12/schema'\n      : 'http://json-schema.org/draft-07/schema#';\n\n    var inner = inferSchema(parsed);\n    var root  = Object.assign({ $schema: $schema }, inner);\n\n    if (root.properties) {\n      var keys    = Object.keys(root.properties);\n      var hasMeta = Object.keys(propMeta).length \u003e 0;\n\n      for (var i = 0; i \u003c keys.length; i++) {\n        var k    = keys[i];\n        var meta = propMeta[k] || {};\n        if (meta.description) root.properties[k].description = meta.description;\n      }\n\n      if (hasMeta) {\n        var newReq = [];\n        for (var j = 0; j \u003c keys.length; j++) {\n          var kk = keys[j];\n          var m  = propMeta[kk];\n          if (!m || m.required !== false) newReq.push(kk);\n        }\n        root.required = newReq;\n      }\n    }\n\n    return root;\n  }\n\n  /* ────────────────────────────────────────\n     プロパティエディター描画\n  ──────────────────────────────────────── */\n  function renderEditor(schema) {\n    var section = document.getElementById('jsg-editor-section');\n    var tbody   = document.getElementById('jsg-prop-tbody');\n\n    if (!schema || schema.type !== 'object' || !schema.properties) {\n      section.style.display = 'none';\n      return;\n    }\n\n    var keys   = Object.keys(schema.properties);\n    var reqSet = {};\n    if (schema.required) {\n      for (var i = 0; i \u003c schema.required.length; i++) reqSet[schema.required[i]] = true;\n    }\n\n    tbody.innerHTML = '';\n    for (var j = 0; j \u003c keys.length; j++) {\n      var k      = keys[j];\n      var prop   = schema.properties[k];\n      var meta   = propMeta[k] || {};\n      var typeStr = prop.type || '?';\n      if (prop.format) typeStr += ' (' + prop.format + ')';\n      var isReq  = propMeta[k] ? propMeta[k].required !== false : (reqSet[k] || false);\n      var descVal = meta.description || prop.description || '';\n\n      var tr = document.createElement('tr');\n      tr.innerHTML =\n        '\u003ctd class=\"jsg-prop-key\"\u003e' + esc(k) + '\u003c/td\u003e' +\n        '\u003ctd class=\"jsg-prop-type\"\u003e' + esc(typeStr) + '\u003c/td\u003e' +\n        '\u003ctd\u003e\u003cinput class=\"jsg-prop-desc-input\" type=\"text\" data-key=\"' + esc(k) + '\" placeholder=\"説明を追加…\" value=\"' + esc(descVal) + '\"\u003e\u003c/td\u003e' +\n        '\u003ctd style=\"text-align:center;\"\u003e\u003cinput class=\"jsg-prop-req-chk\" type=\"checkbox\" data-key=\"' + esc(k) + '\"' + (isReq ? ' checked' : '') + '\u003e\u003c/td\u003e';\n      tbody.appendChild(tr);\n    }\n    section.style.display = 'block';\n  }\n\n  /* ────────────────────────────────────────\n     公開アクション\n  ──────────────────────────────────────── */\n  window.jsgOnInput = function () {\n    updateInputStats();\n    setInputState('');\n    setError('');\n  };\n\n  window.jsgSetVersion = function (v) {\n    schemaVersion = v;\n    document.getElementById('jsg-v07').classList.toggle('active', v === 'draft-07');\n    document.getElementById('jsg-v20').classList.toggle('active', v === '2020-12');\n    if (lastInput !== null) jsgGenerate();\n  };\n\n  window.jsgGenerate = function () {\n    var r = parseInput();\n    if (!r) {\n      setOutputHTML('\u003cspan style=\"color:#45475a\"\u003e// 左にJSONを貼り付けて「スキーマ生成」をクリックしてください\u003c/span\u003e');\n      setOutputState('');\n      setOutStatus('');\n      document.getElementById('jsg-editor-section').style.display = 'none';\n      return;\n    }\n    if (!r.ok) {\n      setInputState('error');\n      setError('解析エラー' + (r.line ? '（' + r.line + '行目付近）' : '') + ': ' + r.error);\n      setOutputState('error');\n      setOutputHTML('\u003cspan style=\"color:#45475a\"\u003e// JSONエラーを修正してください\u003c/span\u003e');\n      setOutStatus('\u003cspan class=\"jsg-err\"\u003e無効なJSON — スキーマを生成できません\u003c/span\u003e');\n      document.getElementById('jsg-editor-section').style.display = 'none';\n      return;\n    }\n\n    setInputState('valid');\n    setError('');\n    lastInput = r.value;\n    propMeta  = {};\n\n    lastSchema = buildRootSchema(lastInput);\n    var pretty = JSON.stringify(lastSchema, null, 2);\n    setOutputHTML(syntaxHL(pretty));\n    setOutputState('valid');\n\n    var propCount = lastSchema.properties ? Object.keys(lastSchema.properties).length : 0;\n    setOutStatus(\n      '\u003cspan class=\"jsg-ok\"\u003eスキーマ生成完了\u003c/span\u003e' +\n      '\u003cspan class=\"jsg-info\"\u003e' + schemaVersion + '\u003c/span\u003e' +\n      '\u003cspan\u003eプロパティ数: ' + propCount + '\u003c/span\u003e' +\n      '\u003cspan\u003e文字数: ' + pretty.length + '\u003c/span\u003e'\n    );\n\n    renderEditor(lastSchema);\n  };\n\n  window.jsgApplyEdits = function () {\n    if (!lastInput) return;\n\n    var descInputs = document.querySelectorAll('#jsg-prop-tbody .jsg-prop-desc-input');\n    var reqChecks  = document.querySelectorAll('#jsg-prop-tbody .jsg-prop-req-chk');\n\n    propMeta = {};\n    for (var i = 0; i \u003c descInputs.length; i++) {\n      var k = descInputs[i].getAttribute('data-key');\n      propMeta[k] = propMeta[k] || {};\n      propMeta[k].description = descInputs[i].value.trim();\n    }\n    for (var j = 0; j \u003c reqChecks.length; j++) {\n      var kk = reqChecks[j].getAttribute('data-key');\n      propMeta[kk] = propMeta[kk] || {};\n      propMeta[kk].required = reqChecks[j].checked;\n    }\n\n    lastSchema = buildRootSchema(lastInput);\n    var pretty = JSON.stringify(lastSchema, null, 2);\n    setOutputHTML(syntaxHL(pretty));\n    setOutputState('valid');\n\n    var propCount = lastSchema.properties ? Object.keys(lastSchema.properties).length : 0;\n    setOutStatus(\n      '\u003cspan class=\"jsg-ok\"\u003eスキーマ更新完了\u003c/span\u003e' +\n      '\u003cspan class=\"jsg-info\"\u003e' + schemaVersion + '\u003c/span\u003e' +\n      '\u003cspan\u003eプロパティ数: ' + propCount + '\u003c/span\u003e' +\n      '\u003cspan\u003e文字数: ' + pretty.length + '\u003c/span\u003e'\n    );\n    showToast('スキーマを更新しました！');\n  };\n\n  window.jsgValidate = function () {\n    var r = parseInput();\n    if (!r) {\n      setError('検証するJSONを入力してください。');\n      return;\n    }\n    if (!r.ok) {\n      setInputState('error');\n      setError('解析エラー' + (r.line ? '（' + r.line + '行目付近）' : '') + ': ' + r.error);\n      setOutputState('error');\n      setOutputHTML('\u003cspan class=\"jsg-err\" style=\"font-size:15px;font-weight:700;\"\u003e無効なJSON\u003c/span\u003e');\n      setOutStatus('\u003cspan class=\"jsg-err\"\u003eJSONの構文が正しくありません\u003c/span\u003e');\n      return;\n    }\n\n    if (!lastSchema) {\n      setInputState('valid');\n      setError('');\n      setOutputHTML('\u003cspan class=\"jsg-ok\" style=\"font-size:14px;font-weight:700;\"\u003e有効なJSON\u003c/span\u003e\\n\\n\u003cspan style=\"color:#6c7086\"\u003e// まずスキーマを生成してから検証してください。\u003c/span\u003e');\n      setOutputState('valid');\n      setOutStatus('\u003cspan class=\"jsg-ok\"\u003eJSONの構文は正しいです\u003c/span\u003e');\n      return;\n    }\n\n    var errs = validateAgainstSchema(r.value, lastSchema, '$');\n    if (errs.length === 0) {\n      setInputState('valid');\n      setError('');\n      setOutputHTML('\u003cspan class=\"jsg-ok\" style=\"font-size:15px;font-weight:700;\"\u003e検証成功\u003c/span\u003e\\n\\n\u003cspan style=\"color:#6c7086\"\u003e// JSONは生成済みスキーマに準拠しています。\u003c/span\u003e');\n      setOutputState('valid');\n      setOutStatus('\u003cspan class=\"jsg-ok\"\u003eすべてのスキーマチェックを通過しました\u003c/span\u003e');\n    } else {\n      setInputState('error');\n      setError('');\n      var errLines = errs.map(function (e) { return '  ' + e; }).join('\\n');\n      setOutputHTML('\u003cspan class=\"jsg-err\" style=\"font-size:15px;font-weight:700;\"\u003e検証失敗\u003c/span\u003e\\n\\n\u003cspan style=\"color:#f38ba8\"\u003e' + esc(errLines) + '\u003c/span\u003e');\n      setOutputState('error');\n      setOutStatus('\u003cspan class=\"jsg-err\"\u003e' + errs.length + ' 件のエラーが見つかりました\u003c/span\u003e');\n    }\n  };\n\n  /* ────────────────────────────────────────\n     構造バリデーター\n  ──────────────────────────────────────── */\n  function validateAgainstSchema(val, schema, path) {\n    var errors = [];\n    if (!schema) return errors;\n\n    if (schema.type) {\n      var types      = Array.isArray(schema.type) ? schema.type : [schema.type];\n      var actualType = getType(val);\n      var matched    = false;\n      for (var i = 0; i \u003c types.length; i++) {\n        if (types[i] === actualType) { matched = true; break; }\n        if (types[i] === 'integer' \u0026\u0026 actualType === 'number' \u0026\u0026 isInteger(val)) { matched = true; break; }\n      }\n      if (!matched) {\n        errors.push(path + ': ' + types.join('|') + ' が期待されましたが ' + actualType + ' でした');\n      }\n    }\n\n    if (schema.required \u0026\u0026 typeof val === 'object' \u0026\u0026 val !== null \u0026\u0026 !Array.isArray(val)) {\n      for (var r = 0; r \u003c schema.required.length; r++) {\n        if (!Object.prototype.hasOwnProperty.call(val, schema.required[r])) {\n          errors.push(path + ': 必須プロパティ \"' + schema.required[r] + '\" がありません');\n        }\n      }\n    }\n\n    if (schema.properties \u0026\u0026 typeof val === 'object' \u0026\u0026 val !== null \u0026\u0026 !Array.isArray(val)) {\n      var pkeys = Object.keys(schema.properties);\n      for (var p = 0; p \u003c pkeys.length; p++) {\n        var pk = pkeys[p];\n        if (Object.prototype.hasOwnProperty.call(val, pk)) {\n          var subErrs = validateAgainstSchema(val[pk], schema.properties[pk], path + '.' + pk);\n          errors = errors.concat(subErrs);\n        }\n      }\n    }\n\n    if (schema.items \u0026\u0026 Array.isArray(val)) {\n      for (var ai = 0; ai \u003c val.length; ai++) {\n        var aErrs = validateAgainstSchema(val[ai], schema.items, path + '[' + ai + ']');\n        errors = errors.concat(aErrs);\n      }\n    }\n\n    return errors;\n  }\n\n  function getType(val) {\n    if (val === null)              return 'null';\n    if (typeof val === 'boolean')  return 'boolean';\n    if (typeof val === 'number')   return 'number';\n    if (typeof val === 'string')   return 'string';\n    if (Array.isArray(val))        return 'array';\n    if (typeof val === 'object')   return 'object';\n    return 'unknown';\n  }\n\n  /* ────────────────────────────────────────\n     コピー\n  ──────────────────────────────────────── */\n  window.jsgCopy = function () {\n    var el   = document.getElementById('jsg-output');\n    var text = el.innerText || el.textContent;\n    if (!text || text.trim().startsWith('//')) return;\n    if (navigator.clipboard \u0026\u0026 navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).then(function () { showToast('コピーしました！'); });\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = text;\n      ta.style.cssText = 'position:fixed;opacity:0';\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      showToast('コピーしました！');\n    }\n  };\n\n  /* ────────────────────────────────────────\n     クリア\n  ──────────────────────────────────────── */\n  window.jsgClear = function () {\n    document.getElementById('jsg-input').value = '';\n    setInputState('');\n    setError('');\n    updateInputStats();\n    setOutputHTML('\u003cspan style=\"color:#45475a\"\u003e// 左にJSONを貼り付けて「スキーマ生成」をクリックするとここに表示されます\u003c/span\u003e');\n    setOutputState('');\n    setOutStatus('');\n    lastSchema = null;\n    lastInput  = null;\n    propMeta   = {};\n    document.getElementById('jsg-editor-section').style.display = 'none';\n    document.getElementById('jsg-sample-select').value = '';\n  };\n\n  /* ────────────────────────────────────────\n     サンプルプリセット\n  ──────────────────────────────────────── */\n  var SAMPLES = {\n    user: {\n      \"id\": \"a3f8c2d1-4b7e-4f9a-8c1d-2e3f4a5b6c7d\",\n      \"username\": \"tanaka_taro\",\n      \"email\": \"tanaka@example.co.jp\",\n      \"age\": 32,\n      \"isPremium\": true,\n      \"score\": 95.5,\n      \"registeredAt\": \"2024-04-01T09:00:00Z\",\n      \"address\": {\n        \"prefecture\": \"東京都\",\n        \"city\": \"渋谷区\",\n        \"postalCode\": \"150-0001\"\n      },\n      \"roles\": [\"user\", \"editor\"],\n      \"deletedAt\": null\n    },\n    product: {\n      \"sku\": \"ITEM-00732\",\n      \"name\": \"ワイヤレスイヤホン Pro\",\n      \"description\": \"ノイズキャンセリング機能付き完全ワイヤレスイヤホン\",\n      \"price\": 19800,\n      \"currency\": \"JPY\",\n      \"inStock\": true,\n      \"quantity\": 128,\n      \"rating\": 4.6,\n      \"categories\": [\"電子機器\", \"オーディオ\", \"イヤホン\"],\n      \"images\": [\n        {\n          \"url\": \"https://example.com/images/earphone-main.jpg\",\n          \"alt\": \"正面から見た画像\",\n          \"isPrimary\": true\n        }\n      ],\n      \"createdAt\": \"2024-01-10T00:00:00Z\",\n      \"updatedAt\": \"2025-03-20T14:30:00Z\"\n    },\n    api: {\n      \"status\": \"success\",\n      \"code\": 200,\n      \"message\": \"リクエストが正常に完了しました\",\n      \"data\": {\n        \"totalCount\": 350,\n        \"page\": 1,\n        \"pageSize\": 20,\n        \"hasNextPage\": true,\n        \"items\": [\n          {\n            \"id\": 1,\n            \"title\": \"サンプルアイテム\",\n            \"active\": true,\n            \"score\": 0.88\n          }\n        ]\n      },\n      \"meta\": {\n        \"requestId\": \"req_7a3b2c1d\",\n        \"timestamp\": \"2025-05-16T10:00:00Z\",\n        \"version\": \"v3\"\n      },\n      \"errors\": null\n    }\n  };\n\n  window.jsgLoadSample = function (key) {\n    if (!key || !SAMPLES[key]) return;\n    document.getElementById('jsg-input').value = JSON.stringify(SAMPLES[key], null, 2);\n    updateInputStats();\n    setInputState('');\n    setError('');\n    propMeta = {};\n    jsgGenerate();\n  };\n\n  updateInputStats();\n\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"jsonスキーマとは\"\u003eJSONスキーマとは\u003c/h2\u003e\n\u003cp\u003eJSONスキーマ（JSON Schema）は、JSONデータの構造を記述・検証するための仕様です。「このオブジェクトはどのようなプロパティを持つか」「各フィールドの型は何か」「どのフィールドが必須か」「文字列のフォーマットはどうあるべきか」といった制約を機械可読な形式で定義できます。APIの設計・ドキュメント生成・コード自動生成・入力バリデーションなど、様々な場面で活用されています。\u003c/p\u003e","title":"JSONスキーマジェネレーター — 無料オンラインツール"},{"content":"パスワードの安全性をリアルタイムで診断。エントロピー・解読時間・パターン検出・改善提案まで、すべてブラウザ内で処理されます。入力内容はサーバーに一切送信されません。\nパスワードを入力 \u0026#128065; \u0026#9888; このパスワードはよく使われるパスワードランキング上位100件に含まれています。使用しないことを強くおすすめします。 \u0026#128274; すべての解析はブラウザ内で完結。入力内容はサーバーに一切送信されません。\n— 解析結果 文字数 — 文字セットサイズ — エントロピー — 推定解読時間（100億回/秒） — チェック項目 改善提案 セキュリティ管理に必要な経費も一元管理\nfreee会計なら、セキュリティツールのサブスク費用も経費として簡単に記録・管理。無料トライアル実施中。 freeeを無料で試す → パスワードの仕組みと安全性 すべての解析はブラウザ内のJavaScriptで完結しています。入力したパスワードはサーバーに送信されません。\nエントロピー（ビット単位）はパスワードの予測困難さを表します。計算式は 文字数 × log₂(文字セットサイズ) です。大文字・小文字・数字・記号すべてを含む20文字のパスワードは約131ビットのエントロピーを持ち、現在のコンピュータでは事実上解読不可能です。\n推定解読時間は毎秒100億回（10B/s）の総当たり攻撃を前提に計算しています。オンライン攻撃はレート制限により実際にはさらに遅くなります。\n強度レベルの目安 レベル エントロピー 典型的なパスワード例 非常に脆弱 28ビット未満 短いパスワード・よく使われるパスワード 脆弱 28〜39ビット 辞書にある単語＋小さな変更 普通 40〜59ビット 複数の文字種・中程度の長さ 強い 60〜79ビット 長くて複数の文字種を含む 非常に強い 80ビット以上 全文字種＋16文字以上 安全なパスワードのヒント 一般的なアカウントは16文字以上、重要なアカウントは24文字以上を推奨します。 全文字種（大文字・小文字・数字・記号）を使用するとエントロピーが最大になります。 実在する単語・名前・日付・キーボードパターンは避けましょう。 パスワードマネージャーを使って、サイトごとに異なるパスワードを管理しましょう。 暗記が必要なパスワードには、パスフレーズ（例: sakura-tsuki-yama-kaze）が有効です。 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n新しいパスワードを生成 → パスワード生成ツール ハッシュを生成・検証 → ハッシュ生成ツール ","permalink":"https://productivity-works.com/ja/tools/password-strength-meter/","summary":"\u003cp\u003eパスワードの安全性をリアルタイムで診断。エントロピー・解読時間・パターン検出・改善提案まで、すべてブラウザ内で処理されます。入力内容はサーバーに一切送信されません。\u003c/p\u003e\n\u003cdiv id=\"pm-app\"\u003e\n\u003cstyle\u003e\n#pm-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, \"Segoe UI\", sans-serif;\n  max-width: 680px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#pm-app * { box-sizing: border-box; }\n\n#pm-app .pm-section {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px 24px;\n  margin-bottom: 16px;\n}\n\n#pm-app h3.pm-section-title {\n  margin: 0 0 14px 0;\n  font-size: 13px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #64748b;\n}\n\n/* Input row */\n#pm-app .pm-input-wrap {\n  position: relative;\n  display: flex;\n  align-items: center;\n}\n#pm-app #pm-input-ja {\n  width: 100%;\n  padding: 13px 46px 13px 14px;\n  font-size: 16px;\n  font-family: \"Courier New\", Courier, monospace;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  outline: none;\n  color: #0f172a;\n  background: #fff;\n  transition: border-color 0.15s;\n}\n#pm-app #pm-input-ja:focus { border-color: #3b82f6; }\n#pm-app .pm-toggle-vis {\n  position: absolute;\n  right: 12px;\n  background: none;\n  border: none;\n  cursor: pointer;\n  padding: 4px;\n  color: #64748b;\n  font-size: 18px;\n  line-height: 1;\n  user-select: none;\n}\n#pm-app .pm-toggle-vis:hover { color: #1e293b; }\n\n/* Strength bar */\n#pm-app .pm-bar-wrap {\n  margin-top: 14px;\n}\n#pm-app .pm-bar-track {\n  height: 8px;\n  background: #e2e8f0;\n  border-radius: 99px;\n  overflow: hidden;\n  margin-bottom: 6px;\n}\n#pm-app .pm-bar-fill {\n  height: 100%;\n  border-radius: 99px;\n  transition: width 0.3s ease, background 0.3s ease;\n  width: 0%;\n  background: #e2e8f0;\n}\n#pm-app .pm-bar-label {\n  font-size: 14px;\n  font-weight: 700;\n  color: #475569;\n}\n\n/* Strength levels */\n#pm-app .pm-lvl-0 { width: 5%;   background: #ef4444; }\n#pm-app .pm-lvl-1 { width: 25%;  background: #f97316; }\n#pm-app .pm-lvl-2 { width: 50%;  background: #eab308; }\n#pm-app .pm-lvl-3 { width: 75%;  background: #22c55e; }\n#pm-app .pm-lvl-4 { width: 100%; background: #16a34a; }\n\n#pm-app .pm-label-0 { color: #ef4444; }\n#pm-app .pm-label-1 { color: #f97316; }\n#pm-app .pm-label-2 { color: #ca8a04; }\n#pm-app .pm-label-3 { color: #16a34a; }\n#pm-app .pm-label-4 { color: #15803d; }\n\n/* Stats grid */\n#pm-app .pm-stats {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 10px;\n  margin-top: 14px;\n}\n#pm-app .pm-stat {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 10px 14px;\n}\n#pm-app .pm-stat-label {\n  font-size: 11px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: #94a3b8;\n  margin-bottom: 2px;\n}\n#pm-app .pm-stat-value {\n  font-size: 15px;\n  font-weight: 700;\n  color: #0f172a;\n}\n\n/* Checks list */\n#pm-app .pm-checks {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n#pm-app .pm-check-item {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 13px;\n  color: #475569;\n}\n#pm-app .pm-check-icon {\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 11px;\n  flex-shrink: 0;\n  font-weight: 700;\n}\n#pm-app .pm-check-pass .pm-check-icon { background: #dcfce7; color: #16a34a; }\n#pm-app .pm-check-fail .pm-check-icon { background: #fee2e2; color: #dc2626; }\n#pm-app .pm-check-warn .pm-check-icon { background: #fef9c3; color: #ca8a04; }\n\n/* Suggestions */\n#pm-app .pm-suggestions {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n}\n#pm-app .pm-suggestion {\n  font-size: 13px;\n  color: #475569;\n  padding: 6px 10px;\n  background: #fff7ed;\n  border-left: 3px solid #f97316;\n  border-radius: 0 6px 6px 0;\n}\n#pm-app .pm-no-suggestions {\n  font-size: 13px;\n  color: #16a34a;\n  font-weight: 600;\n}\n\n/* Common password warning */\n#pm-app .pm-common-warning {\n  display: none;\n  padding: 10px 14px;\n  background: #fef2f2;\n  border: 1px solid #fecaca;\n  border-radius: 8px;\n  font-size: 13px;\n  color: #b91c1c;\n  font-weight: 600;\n  margin-top: 8px;\n}\n\n/* Privacy note */\n#pm-app .pm-privacy {\n  font-size: 11px;\n  color: #94a3b8;\n  text-align: center;\n  margin-top: 4px;\n}\n\n@media (max-width: 480px) {\n  #pm-app .pm-stats { grid-template-columns: 1fr; }\n  #pm-app .pm-section { padding: 16px; }\n}\n\u003c/style\u003e\n\u003c!-- 入力 --\u003e\n\u003cdiv class=\"pm-section\"\u003e\n  \u003ch3 class=\"pm-section-title\"\u003eパスワードを入力\u003c/h3\u003e\n  \u003cdiv class=\"pm-input-wrap\"\u003e\n    \u003cinput type=\"password\" id=\"pm-input-ja\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" placeholder=\"パスワードを入力または貼り付け…\" oninput=\"pmjaAnalyze()\"\u003e\n    \u003cbutton class=\"pm-toggle-vis\" onclick=\"pmjaToggleVis()\" id=\"pm-vis-btn-ja\" title=\"表示 / 非表示\"\u003e\u0026#128065;\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"pm-common-warning-ja\" class=\"pm-common-warning\"\u003e\u0026#9888; このパスワードはよく使われるパスワードランキング上位100件に含まれています。使用しないことを強くおすすめします。\u003c/div\u003e\n  \u003cp class=\"pm-privacy\"\u003e\u0026#128274; すべての解析はブラウザ内で完結。入力内容はサーバーに一切送信されません。\u003c/p\u003e","title":"パスワード強度チェッカー"},{"content":" フォントペアサジェスター フォントの組み合わせを選び、各種設定を調整して、CSSをコピー。外部APIなし・完全オフライン対応。\nすべて モダン クラシック ポップ プロ向け ミニマル 和文特集 ダークモード \u0026lt;div class=\u0026quot;fp-control-section\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fp-label\u0026quot;\u0026gt;見出しテキスト\u0026lt;/span\u0026gt; \u0026lt;input class=\u0026quot;fp-input-text\u0026quot; id=\u0026quot;fp-heading-text\u0026quot; type=\u0026quot;text\u0026quot; value=\u0026quot;美しい日本語タイポグラフィ\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-section\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fp-label\u0026quot;\u0026gt;本文テキスト\u0026lt;/span\u0026gt; \u0026lt;input class=\u0026quot;fp-input-text\u0026quot; id=\u0026quot;fp-body-text\u0026quot; type=\u0026quot;text\u0026quot; value=\u0026quot;適切なフォントの組み合わせは、読みやすさを高め、コンテンツの印象を決定づけます。見出しと本文のバランスを大切に。\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-section\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fp-label\u0026quot;\u0026gt;見出しサイズ\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;fp-range-row\u0026quot;\u0026gt; \u0026lt;input class=\u0026quot;fp-range\u0026quot; id=\u0026quot;fp-heading-size\u0026quot; type=\u0026quot;range\u0026quot; min=\u0026quot;18\u0026quot; max=\u0026quot;72\u0026quot; value=\u0026quot;36\u0026quot; /\u0026gt; \u0026lt;span class=\u0026quot;fp-range-val\u0026quot; id=\u0026quot;fp-heading-size-val\u0026quot;\u0026gt;36px\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-section\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fp-label\u0026quot;\u0026gt;本文サイズ\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;fp-range-row\u0026quot;\u0026gt; \u0026lt;input class=\u0026quot;fp-range\u0026quot; id=\u0026quot;fp-body-size\u0026quot; type=\u0026quot;range\u0026quot; min=\u0026quot;12\u0026quot; max=\u0026quot;28\u0026quot; value=\u0026quot;16\u0026quot; /\u0026gt; \u0026lt;span class=\u0026quot;fp-range-val\u0026quot; id=\u0026quot;fp-body-size-val\u0026quot;\u0026gt;16px\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-section\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fp-label\u0026quot;\u0026gt;行の高さ（行間）\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;fp-range-row\u0026quot;\u0026gt; \u0026lt;input class=\u0026quot;fp-range\u0026quot; id=\u0026quot;fp-line-height\u0026quot; type=\u0026quot;range\u0026quot; min=\u0026quot;120\u0026quot; max=\u0026quot;230\u0026quot; value=\u0026quot;175\u0026quot; /\u0026gt; \u0026lt;span class=\u0026quot;fp-range-val\u0026quot; id=\u0026quot;fp-line-height-val\u0026quot;\u0026gt;1.75\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-section\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fp-label\u0026quot;\u0026gt;文字間隔（本文）\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;fp-range-row\u0026quot;\u0026gt; \u0026lt;input class=\u0026quot;fp-range\u0026quot; id=\u0026quot;fp-letter-spacing\u0026quot; type=\u0026quot;range\u0026quot; min=\u0026quot;-5\u0026quot; max=\u0026quot;20\u0026quot; value=\u0026quot;2\u0026quot; /\u0026gt; \u0026lt;span class=\u0026quot;fp-range-val\u0026quot; id=\u0026quot;fp-letter-spacing-val\u0026quot;\u0026gt;0.02em\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-section\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fp-label\u0026quot;\u0026gt;文字色\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;fp-color-row\u0026quot; id=\u0026quot;fp-color-swatches\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch active\u0026quot; data-color=\u0026quot;#1a1a1a\u0026quot; style=\u0026quot;background:#1a1a1a;\u0026quot; title=\u0026quot;ほぼ黒\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch\u0026quot; data-color=\u0026quot;#2d3748\u0026quot; style=\u0026quot;background:#2d3748;\u0026quot; title=\u0026quot;スレート\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch\u0026quot; data-color=\u0026quot;#1a365d\u0026quot; style=\u0026quot;background:#1a365d;\u0026quot; title=\u0026quot;ネイビー\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch\u0026quot; data-color=\u0026quot;#4a1d2e\u0026quot; style=\u0026quot;background:#4a1d2e;\u0026quot; title=\u0026quot;バーガンディ\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch\u0026quot; data-color=\u0026quot;#065f46\u0026quot; style=\u0026quot;background:#065f46;\u0026quot; title=\u0026quot;フォレスト\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch\u0026quot; data-color=\u0026quot;#374151\u0026quot; style=\u0026quot;background:#374151;\u0026quot; title=\u0026quot;クールグレー\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch\u0026quot; data-color=\u0026quot;#f8f9fa\u0026quot; style=\u0026quot;background:#f8f9fa; border:1.5px solid #dee2e6;\u0026quot; title=\u0026quot;ほぼ白\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;fp-control-section\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;fp-label\u0026quot;\u0026gt;背景色\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;fp-color-row\u0026quot; id=\u0026quot;fp-bg-swatches\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch active\u0026quot; data-bg=\u0026quot;#ffffff\u0026quot; style=\u0026quot;background:#ffffff; border:1.5px solid #dee2e6;\u0026quot; title=\u0026quot;白\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch\u0026quot; data-bg=\u0026quot;#f8f9fa\u0026quot; style=\u0026quot;background:#f8f9fa; border:1.5px solid #dee2e6;\u0026quot; title=\u0026quot;ライトグレー\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch\u0026quot; data-bg=\u0026quot;#fefce8\u0026quot; style=\u0026quot;background:#fefce8;\u0026quot; title=\u0026quot;クリーム\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch\u0026quot; data-bg=\u0026quot;#eff6ff\u0026quot; style=\u0026quot;background:#eff6ff;\u0026quot; title=\u0026quot;ブルーティント\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch\u0026quot; data-bg=\u0026quot;#0f172a\u0026quot; style=\u0026quot;background:#0f172a;\u0026quot; title=\u0026quot;ダーク\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;fp-swatch\u0026quot; data-bg=\u0026quot;#1e293b\u0026quot; style=\u0026quot;background:#1e293b;\u0026quot; title=\u0026quot;スレートダーク\u0026quot;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; ライブプレビュー 美しい日本語タイポグラフィ 適切なフォントの組み合わせは、読みやすさを高め、コンテンツの印象を決定づけます。 CSS 出力 CSSをコピー 関連ツール CSS変数ジェネレーター CSSテキストグラデーションジェネレーター 読了時間計算機 フリーランス・個人事業主の方へ — freeeで経理を自動化 デザイン・制作業務に集中するために、請求書・確定申告・経費管理を freee でまとめて効率化。無料プランから始められます。\nfreeeを無料で試す ","permalink":"https://productivity-works.com/ja/tools/font-pair-suggester/","summary":"\u003cdiv id=\"fp-app\"\u003e\n\u003cstyle\u003e\n/* ── スコープ済みスタイル：全セレクターは #fp-app プレフィックス ── */\n#fp-app *,\n#fp-app *::before,\n#fp-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#fp-app {\n  --fp-bg: #ffffff;\n  --fp-surface: #f8f9fa;\n  --fp-border: #dee2e6;\n  --fp-text: #212529;\n  --fp-text-muted: #6c757d;\n  --fp-accent: #4f46e5;\n  --fp-accent-hover: #4338ca;\n  --fp-preview-bg: #ffffff;\n  --fp-preview-text: #1a1a1a;\n  --fp-radius: 8px;\n  --fp-shadow: 0 1px 3px rgba(0,0,0,.12);\n  font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, \"Yu Gothic\", \"MS PGothic\", system-ui, sans-serif;\n  color: var(--fp-text);\n  background: var(--fp-bg);\n  padding: 1.5rem 1rem;\n  max-width: 900px;\n  margin: 0 auto;\n  line-height: 1.7;\n}\n\n#fp-app.fp-dark {\n  --fp-bg: #0f172a;\n  --fp-surface: #1e293b;\n  --fp-border: #334155;\n  --fp-text: #e2e8f0;\n  --fp-text-muted: #94a3b8;\n  --fp-accent: #818cf8;\n  --fp-accent-hover: #a5b4fc;\n  --fp-preview-bg: #1e293b;\n  --fp-preview-text: #f1f5f9;\n}\n\n/* ヘッダー */\n#fp-app .fp-header {\n  text-align: center;\n  margin-bottom: 2rem;\n}\n#fp-app .fp-header h1 {\n  font-size: clamp(1.4rem, 4vw, 2rem);\n  font-weight: 700;\n  color: var(--fp-text);\n  margin-bottom: .4rem;\n}\n#fp-app .fp-header p {\n  color: var(--fp-text-muted);\n  font-size: .95rem;\n}\n\n/* トップバー */\n#fp-app .fp-topbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: .5rem;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 1.25rem;\n}\n#fp-app .fp-preset-group {\n  display: flex;\n  flex-wrap: wrap;\n  gap: .4rem;\n}\n#fp-app .fp-preset-btn {\n  padding: .35rem .85rem;\n  border: 1.5px solid var(--fp-border);\n  border-radius: 999px;\n  background: var(--fp-surface);\n  color: var(--fp-text);\n  font-size: .85rem;\n  cursor: pointer;\n  transition: all .18s;\n  font-family: inherit;\n}\n#fp-app .fp-preset-btn:hover,\n#fp-app .fp-preset-btn.active {\n  background: var(--fp-accent);\n  border-color: var(--fp-accent);\n  color: #fff;\n}\n#fp-app .fp-dark-toggle {\n  padding: .35rem .85rem;\n  border: 1.5px solid var(--fp-border);\n  border-radius: 999px;\n  background: var(--fp-surface);\n  color: var(--fp-text);\n  font-size: .85rem;\n  cursor: pointer;\n  transition: all .18s;\n  white-space: nowrap;\n  font-family: inherit;\n}\n#fp-app .fp-dark-toggle:hover {\n  border-color: var(--fp-accent);\n  color: var(--fp-accent);\n}\n\n/* メインレイアウト */\n#fp-app .fp-layout {\n  display: grid;\n  grid-template-columns: 280px 1fr;\n  gap: 1.25rem;\n  align-items: start;\n}\n@media (max-width: 680px) {\n  #fp-app .fp-layout {\n    grid-template-columns: 1fr;\n  }\n}\n\n/* コントロールパネル */\n#fp-app .fp-controls {\n  background: var(--fp-surface);\n  border: 1px solid var(--fp-border);\n  border-radius: var(--fp-radius);\n  padding: 1.1rem;\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\n#fp-app .fp-control-section {\n  display: flex;\n  flex-direction: column;\n  gap: .5rem;\n}\n#fp-app .fp-label {\n  font-size: .78rem;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: .06em;\n  color: var(--fp-text-muted);\n}\n#fp-app .fp-select,\n#fp-app .fp-input-text {\n  width: 100%;\n  padding: .45rem .7rem;\n  border: 1px solid var(--fp-border);\n  border-radius: 6px;\n  background: var(--fp-bg);\n  color: var(--fp-text);\n  font-size: .9rem;\n  font-family: inherit;\n  transition: border-color .15s;\n}\n#fp-app .fp-select:focus,\n#fp-app .fp-input-text:focus {\n  outline: none;\n  border-color: var(--fp-accent);\n}\n\n/* レンジコントロール */\n#fp-app .fp-range-row {\n  display: flex;\n  align-items: center;\n  gap: .6rem;\n}\n#fp-app .fp-range {\n  flex: 1;\n  accent-color: var(--fp-accent);\n  cursor: pointer;\n}\n#fp-app .fp-range-val {\n  font-size: .82rem;\n  color: var(--fp-text-muted);\n  min-width: 42px;\n  text-align: right;\n}\n\n/* カラースウォッチ */\n#fp-app .fp-color-row {\n  display: flex;\n  gap: .5rem;\n  flex-wrap: wrap;\n}\n#fp-app .fp-swatch {\n  width: 28px;\n  height: 28px;\n  border-radius: 50%;\n  border: 2px solid transparent;\n  cursor: pointer;\n  transition: transform .15s, border-color .15s;\n}\n#fp-app .fp-swatch:hover { transform: scale(1.15); }\n#fp-app .fp-swatch.active { border-color: var(--fp-accent); }\n\n/* プレビューパネル */\n#fp-app .fp-preview-panel {\n  border: 1px solid var(--fp-border);\n  border-radius: var(--fp-radius);\n  overflow: hidden;\n}\n#fp-app .fp-preview-bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: .6rem 1rem;\n  background: var(--fp-surface);\n  border-bottom: 1px solid var(--fp-border);\n  gap: .5rem;\n  flex-wrap: wrap;\n}\n#fp-app .fp-preview-label {\n  font-size: .8rem;\n  font-weight: 600;\n  color: var(--fp-text-muted);\n  text-transform: uppercase;\n  letter-spacing: .06em;\n}\n#fp-app .fp-pair-name {\n  font-size: .85rem;\n  color: var(--fp-accent);\n  font-weight: 600;\n}\n#fp-app .fp-preview-area {\n  background: var(--fp-preview-bg);\n  color: var(--fp-preview-text);\n  padding: 2rem 2rem 1.5rem;\n  min-height: 260px;\n  transition: background .2s, color .2s;\n}\n#fp-app .fp-preview-heading {\n  margin-bottom: .6rem;\n  line-height: 1.25;\n  word-break: break-word;\n}\n#fp-app .fp-preview-body {\n  line-height: inherit;\n  word-break: break-word;\n}\n\n/* CSS出力 */\n#fp-app .fp-css-section {\n  margin-top: 1.25rem;\n  background: var(--fp-surface);\n  border: 1px solid var(--fp-border);\n  border-radius: var(--fp-radius);\n  overflow: hidden;\n}\n#fp-app .fp-css-bar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: .6rem 1rem;\n  background: var(--fp-surface);\n  border-bottom: 1px solid var(--fp-border);\n}\n#fp-app .fp-css-title {\n  font-size: .8rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: .07em;\n  color: var(--fp-text-muted);\n}\n#fp-app .fp-copy-btn {\n  padding: .3rem .8rem;\n  background: var(--fp-accent);\n  color: #fff;\n  border: none;\n  border-radius: 6px;\n  font-size: .82rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background .18s;\n  font-family: inherit;\n}\n#fp-app .fp-copy-btn:hover { background: var(--fp-accent-hover); }\n#fp-app .fp-copy-btn.copied { background: #16a34a; }\n#fp-app .fp-css-output {\n  padding: 1rem;\n  font-family: \"Courier New\", Courier, monospace;\n  font-size: .8rem;\n  line-height: 1.7;\n  color: var(--fp-text);\n  white-space: pre-wrap;\n  word-break: break-all;\n  overflow-x: auto;\n}\n\n/* ペアグリッド */\n#fp-app .fp-pair-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));\n  gap: .6rem;\n  margin-top: 1.25rem;\n}\n#fp-app .fp-pair-card {\n  background: var(--fp-surface);\n  border: 1.5px solid var(--fp-border);\n  border-radius: var(--fp-radius);\n  padding: .75rem .9rem;\n  cursor: pointer;\n  transition: border-color .18s, transform .18s;\n}\n#fp-app .fp-pair-card:hover { border-color: var(--fp-accent); transform: translateY(-2px); }\n#fp-app .fp-pair-card.active { border-color: var(--fp-accent); background: color-mix(in srgb, var(--fp-accent) 8%, var(--fp-surface)); }\n#fp-app .fp-card-heading {\n  font-size: 1rem;\n  font-weight: 700;\n  line-height: 1.3;\n  margin-bottom: .25rem;\n  color: var(--fp-text);\n}\n#fp-app .fp-card-body {\n  font-size: .78rem;\n  color: var(--fp-text-muted);\n}\n#fp-app .fp-card-tag {\n  display: inline-block;\n  font-size: .68rem;\n  padding: .1rem .45rem;\n  border-radius: 999px;\n  background: color-mix(in srgb, var(--fp-accent) 12%, transparent);\n  color: var(--fp-accent);\n  margin-top: .35rem;\n  font-weight: 600;\n}\n\n/* 関連リンク */\n#fp-app .fp-related {\n  margin-top: 2rem;\n  padding-top: 1.25rem;\n  border-top: 1px solid var(--fp-border);\n}\n#fp-app .fp-related-title {\n  font-size: .85rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: .07em;\n  color: var(--fp-text-muted);\n  margin-bottom: .75rem;\n}\n#fp-app .fp-related-links {\n  display: flex;\n  flex-wrap: wrap;\n  gap: .6rem;\n}\n#fp-app .fp-related-links a {\n  color: var(--fp-accent);\n  text-decoration: none;\n  font-size: .9rem;\n  border: 1px solid var(--fp-border);\n  padding: .3rem .8rem;\n  border-radius: 6px;\n  transition: border-color .15s, background .15s;\n}\n#fp-app .fp-related-links a:hover {\n  background: color-mix(in srgb, var(--fp-accent) 8%, transparent);\n  border-color: var(--fp-accent);\n}\n\n/* freee CTA */\n#fp-app .fp-freee-cta {\n  margin-top: 2rem;\n  padding: 1.25rem 1.5rem;\n  background: linear-gradient(135deg, color-mix(in srgb, var(--fp-accent) 6%, var(--fp-surface)), var(--fp-surface));\n  border: 1px solid var(--fp-border);\n  border-radius: var(--fp-radius);\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 1rem;\n  justify-content: space-between;\n}\n#fp-app .fp-freee-cta-text h3 {\n  font-size: 1rem;\n  font-weight: 700;\n  margin-bottom: .3rem;\n  color: var(--fp-text);\n}\n#fp-app .fp-freee-cta-text p {\n  font-size: .85rem;\n  color: var(--fp-text-muted);\n  max-width: 480px;\n  line-height: 1.55;\n}\n#fp-app .fp-freee-cta-btn {\n  display: inline-block;\n  padding: .6rem 1.4rem;\n  background: var(--fp-accent);\n  color: #fff;\n  border-radius: 8px;\n  font-size: .9rem;\n  font-weight: 700;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: background .18s;\n  flex-shrink: 0;\n}\n#fp-app .fp-freee-cta-btn:hover { background: var(--fp-accent-hover); }\n\u003c/style\u003e\n\u003cdiv class=\"fp-header\"\u003e\n  \u003ch1\u003eフォントペアサジェスター\u003c/h1\u003e\n  \u003cp\u003eフォントの組み合わせを選び、各種設定を調整して、CSSをコピー。外部APIなし・完全オフライン対応。\u003c/p\u003e","title":"フォントペアサジェスター — タイポグラフィツール"},{"content":" SVGアイコン作成ツール 24×24グリッドでSVGアイコンをブラウザ上で自由に描画。SVGコードをすぐにコピー・ダウンロードできます。\nプリセットアイコン \u0026lt;div class=\u0026quot;panel\u0026quot; style=\u0026quot;margin-bottom:12px\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;描画ツール\u0026lt;/h3\u0026gt; \u0026lt;div style=\u0026quot;display:flex;flex-direction:column;gap:6px\u0026quot; id=\u0026quot;tool-buttons\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;hr class=\u0026quot;section-sep\u0026quot;\u0026gt; \u0026lt;label\u0026gt;塗りつぶし色\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;fill-color\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt; \u0026lt;label style=\u0026quot;margin-top:6px\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;no-fill\u0026quot; style=\u0026quot;width:auto;margin-right:4px\u0026quot;\u0026gt; 塗りなし \u0026lt;/label\u0026gt; \u0026lt;label\u0026gt;線の色（ストローク）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;stroke-color\u0026quot; value=\u0026quot;#4f46e5\u0026quot;\u0026gt; \u0026lt;label\u0026gt;線の太さ\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;stroke-width\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;4\u0026quot; step=\u0026quot;0.5\u0026quot; value=\u0026quot;1.5\u0026quot;\u0026gt; \u0026lt;div style=\u0026quot;font-size:.78rem;color:#6b7280;text-align:right\u0026quot; id=\u0026quot;stroke-val\u0026quot;\u0026gt;1.5\u0026lt;/div\u0026gt; \u0026lt;label\u0026gt;塗りつぶし不透明度\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;fill-opacity\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;1\u0026quot; step=\u0026quot;0.05\u0026quot; value=\u0026quot;1\u0026quot;\u0026gt; \u0026lt;div style=\u0026quot;font-size:.78rem;color:#6b7280;text-align:right\u0026quot; id=\u0026quot;opacity-val\u0026quot;\u0026gt;1.0\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;panel\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;シェイプ一覧（\u0026lt;span id=\u0026quot;shape-count\u0026quot;\u0026gt;0\u0026lt;/span\u0026gt;件）\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;shape-list\u0026quot; id=\u0026quot;shape-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;margin-top:8px;display:flex;gap:6px\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;btn btn-danger btn-sm\u0026quot; id=\u0026quot;del-selected-btn\u0026quot;\u0026gt;削除\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;btn btn-secondary btn-sm\u0026quot; id=\u0026quot;clear-btn\u0026quot;\u0026gt;全消去\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; グリッド表示 スナップ プレビュー: 16px 32px 64px クリック＆ドラッグで描画。シェイプをクリックで選択。 SVGコード出力 \u0026lt;!-- キャンバスに描画するとSVGが生成されます --\u0026gt; コピー .svgダウンロード クリップボードにコピーしました！ \u0026lt;hr class=\u0026quot;section-sep\u0026quot;\u0026gt; \u0026lt;h3 style=\u0026quot;margin-top:0\u0026quot;\u0026gt;エクスポートサイズ\u0026lt;/h3\u0026gt; \u0026lt;label\u0026gt;viewBoxサイズ\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;viewbox-size\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;24\u0026quot;\u0026gt;24×24（標準）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;16\u0026quot;\u0026gt;16×16\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;32\u0026quot;\u0026gt;32×32\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;48\u0026quot;\u0026gt;48×48\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;64\u0026quot;\u0026gt;64×64\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;hr class=\u0026quot;section-sep\u0026quot;\u0026gt; \u0026lt;h3 style=\u0026quot;margin-top:0\u0026quot;\u0026gt;最適化\u0026lt;/h3\u0026gt; \u0026lt;label class=\u0026quot;grid-toggle\u0026quot; style=\u0026quot;margin-top:4px\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;round-coords\u0026quot; checked\u0026gt; 座標を丸める（小数点2桁） \u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; デザイン業務を効率化 → freee会計でクリエイティブ業務に集中 クリエイティブ業務の請求・経費管理もラクに デザインやコーディングの案件管理・請求書発行・確定申告まで、freee会計で一元管理できます。\nfreee会計を無料で試す → 関連ツール Favicon Generator → Favicon Generatorツール Image Color Picker → Image Color Pickerツール 画像圧縮 → 画像圧縮ツール ","permalink":"https://productivity-works.com/ja/tools/svg-icon-maker/","summary":"\u003cdiv id=\"sim-app\"\u003e\n\u003cstyle\u003e\n#sim-app *,#sim-app *::before,#sim-app *::after{box-sizing:border-box;margin:0;padding:0}\n#sim-app{font-family:-apple-system,BlinkMacSystemFont,'Hiragino Sans','Yu Gothic UI','Meiryo',sans-serif;color:#1f2937;background:#f9fafb;min-height:100vh;padding:24px 16px}\n#sim-app h1{font-size:1.6rem;font-weight:700;margin-bottom:6px;color:#111827}\n#sim-app .subtitle{color:#6b7280;font-size:.95rem;margin-bottom:20px}\n#sim-app .layout{display:grid;grid-template-columns:220px 1fr 260px;gap:16px;align-items:start}\n@media(max-width:900px){#sim-app .layout{grid-template-columns:1fr}}\n#sim-app .panel{background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:14px}\n#sim-app .panel h3{font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#6b7280;margin-bottom:10px}\n#sim-app label{display:block;font-size:.82rem;color:#374151;margin-bottom:3px;margin-top:8px}\n#sim-app label:first-of-type{margin-top:0}\n#sim-app select,#sim-app input[type=number],#sim-app input[type=range]{width:100%;padding:5px 8px;border:1px solid #d1d5db;border-radius:6px;font-size:.85rem;color:#1f2937;background:#fff}\n#sim-app input[type=color]{width:100%;height:32px;border:1px solid #d1d5db;border-radius:6px;padding:2px;cursor:pointer;background:#fff}\n#sim-app .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;border-radius:7px;font-size:.85rem;font-weight:600;cursor:pointer;border:none;transition:all .15s}\n#sim-app .btn-primary{background:#4f46e5;color:#fff}\n#sim-app .btn-primary:hover{background:#4338ca}\n#sim-app .btn-secondary{background:#f3f4f6;color:#374151;border:1px solid #d1d5db}\n#sim-app .btn-secondary:hover{background:#e5e7eb}\n#sim-app .btn-danger{background:#fee2e2;color:#dc2626;border:1px solid #fca5a5}\n#sim-app .btn-danger:hover{background:#fecaca}\n#sim-app .btn-sm{padding:5px 10px;font-size:.78rem}\n#sim-app .canvas-wrap{position:relative;display:flex;flex-direction:column;align-items:center;gap:12px}\n#sim-app #drawing-svg{border:2px solid #6366f1;border-radius:8px;cursor:crosshair;background:#fff;display:block;box-shadow:0 2px 8px rgba(99,102,241,.1)}\n#sim-app .canvas-controls{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}\n#sim-app .tool-btn{padding:6px 12px;border-radius:6px;font-size:.82rem;font-weight:600;border:2px solid #e5e7eb;background:#fff;cursor:pointer;transition:all .15s;color:#374151}\n#sim-app .tool-btn.active{border-color:#4f46e5;background:#eef2ff;color:#4f46e5}\n#sim-app .tool-btn:hover:not(.active){border-color:#c7d2fe;background:#f5f3ff}\n#sim-app .preset-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-bottom:10px}\n#sim-app .preset-btn{display:flex;flex-direction:column;align-items:center;gap:3px;padding:6px 4px;border:1px solid #e5e7eb;border-radius:6px;background:#f9fafb;cursor:pointer;font-size:.7rem;color:#6b7280;transition:all .15s}\n#sim-app .preset-btn:hover{border-color:#6366f1;background:#eef2ff;color:#4f46e5}\n#sim-app .preset-btn svg{width:20px;height:20px}\n#sim-app .output-box{font-family:'Fira Mono','Consolas',monospace;font-size:.72rem;background:#0f172a;color:#a5f3fc;padding:12px;border-radius:8px;white-space:pre-wrap;word-break:break-all;max-height:220px;overflow-y:auto;line-height:1.5;border:1px solid #1e293b}\n#sim-app .btn-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}\n#sim-app .shape-list{max-height:180px;overflow-y:auto;margin-top:4px}\n#sim-app .shape-item{display:flex;align-items:center;justify-content:space-between;padding:5px 8px;border-radius:5px;font-size:.78rem;color:#374151;cursor:pointer;transition:background .1s}\n#sim-app .shape-item:hover{background:#f3f4f6}\n#sim-app .shape-item.selected{background:#eef2ff;color:#4338ca;font-weight:600}\n#sim-app .shape-dot{width:10px;height:10px;border-radius:50%;border:1px solid #9ca3af;margin-right:6px;flex-shrink:0}\n#sim-app .shape-item-left{display:flex;align-items:center}\n#sim-app .del-btn{background:none;border:none;color:#ef4444;cursor:pointer;font-size:.85rem;padding:1px 4px;border-radius:3px}\n#sim-app .del-btn:hover{background:#fee2e2}\n#sim-app .grid-toggle{display:flex;align-items:center;gap:6px;font-size:.82rem;color:#6b7280;cursor:pointer;user-select:none}\n#sim-app .grid-toggle input{margin:0}\n#sim-app .size-preview{display:flex;align-items:center;gap:8px;font-size:.8rem;color:#6b7280;margin-top:4px}\n#sim-app .size-preview canvas{border:1px solid #e5e7eb;border-radius:3px}\n#sim-app .alert-ok{background:#d1fae5;color:#065f46;border:1px solid #6ee7b7;border-radius:6px;padding:6px 12px;font-size:.82rem;display:none}\n#sim-app .section-sep{border:none;border-top:1px solid #f3f4f6;margin:10px 0}\n#sim-app .freee-cta{background:linear-gradient(135deg,#e0f2fe,#f0fdf4);border:1px solid #7dd3fc;border-radius:10px;padding:14px 16px;margin-top:20px;font-size:.9rem}\n#sim-app .freee-cta strong{color:#0369a1;display:block;margin-bottom:4px;font-size:.95rem}\n#sim-app .freee-cta a{color:#0369a1;font-weight:700;text-decoration:underline}\n\u003c/style\u003e\n\u003ch1\u003eSVGアイコン作成ツール\u003c/h1\u003e\n\u003cp class=\"subtitle\"\u003e24×24グリッドでSVGアイコンをブラウザ上で自由に描画。SVGコードをすぐにコピー・ダウンロードできます。\u003c/p\u003e","title":"SVGアイコン作成ツール - カスタムSVGアイコンを簡単作成"},{"content":"ブックマークレットとは、どのWebページでもJavaScriptを実行できるブックマークです。以下にJSコードを貼り付けて「変換」をクリック、ブックマークバーにドラッグするだけで即使えます — 拡張機能不要。\nJavaScriptコード JavaScriptをここに貼り付けてください 圧縮（コメント・空白を除去） URIエンコード IIFEでラップ（void function(){...}()） ブックマークレットに変換 クリア コンソールでテスト ブックマークレット出力 コピー 文字数: 0 サイズ: 0 B 状態: — このボタンをブックマークバーにドラッグしてください： ブックマークレット （ブックマークバーを表示: Ctrl+Shift+B / Cmd+Shift+B） すぐ使えるサンプル リンクを強調表示 ダークモード切替 文字サイズ変更 ページを印刷 トップへスクロール 文字数カウント URL＋タイトルをコピー 業務効率化なら freee会計 請求書・経費精算・確定申告をまるごと自動化。ブックマークレットで毎日の作業を時短するように、バックオフィスも自動化しましょう。 無料で試してみる 関連ツール： コード圧縮ツール URLエンコードツール ※ freeeへのリンクはアフィリエイトリンクです。 ブックマークレットの使い方 上のコード欄にJavaScriptを貼り付けます（またはサンプルを選択）。 「変換」をクリック — コードが javascript: URIに変換されます。 生成されたボタンをブラウザのブックマークバーにドラッグします。 任意のページを開いてブックマークをクリック — スクリプトが即座に実行されます。 活用のヒント 圧縮でコメントと空白を削除し、URLを短くできます。 IIFEラップでページのグローバルスコープを汚染せずに済みます。 URIエンコードはスペース・引用符・アンパサンドなど特殊文字に必須です。 ブラウザのブックマークレットURL上限はおよそ2KB。スクリプトは簡潔に。 テスト時は alert() や console.log() で出力を確認しましょう。 関連ツール コード圧縮ツール — JS・CSS・HTMLを圧縮します。 URLエンコードツール — URLコンポーネントを手動でエンコード／デコードします。 ","permalink":"https://productivity-works.com/ja/tools/bookmarklet-maker/","summary":"\u003cp\u003e\u003cstrong\u003eブックマークレット\u003c/strong\u003eとは、どのWebページでもJavaScriptを実行できるブックマークです。以下にJSコードを貼り付けて「変換」をクリック、ブックマークバーにドラッグするだけで即使えます — 拡張機能不要。\u003c/p\u003e\n\u003cdiv id=\"bm-app\"\u003e\n\u003cstyle\u003e\n#bm-app {\n  font-family: system-ui, -apple-system, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#bm-app * { box-sizing: border-box; }\n#bm-app h2 {\n  font-size: 1.15rem;\n  font-weight: 700;\n  margin: 1.6rem 0 0.5rem;\n  color: #0f3460;\n  border-left: 4px solid #e94560;\n  padding-left: 0.6rem;\n}\n#bm-app .bm-section {\n  background: #f8f9fc;\n  border: 1px solid #dde3f0;\n  border-radius: 10px;\n  padding: 1.2rem 1.4rem;\n  margin-bottom: 1.2rem;\n}\n#bm-app label {\n  display: block;\n  font-weight: 600;\n  font-size: 0.85rem;\n  margin-bottom: 0.35rem;\n  color: #333;\n}\n#bm-app textarea {\n  width: 100%;\n  min-height: 180px;\n  font-family: 'Courier New', Courier, monospace;\n  font-size: 0.88rem;\n  line-height: 1.55;\n  padding: 0.8rem 1rem;\n  border: 1.5px solid #c8d0e0;\n  border-radius: 7px;\n  background: #fff;\n  color: #1a1a2e;\n  resize: vertical;\n  transition: border-color 0.2s;\n}\n#bm-app textarea:focus {\n  outline: none;\n  border-color: #0f3460;\n}\n#bm-app .bm-options {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 1rem;\n  align-items: center;\n  margin-top: 0.8rem;\n}\n#bm-app .bm-check {\n  display: flex;\n  align-items: center;\n  gap: 0.4rem;\n  font-size: 0.88rem;\n  cursor: pointer;\n  user-select: none;\n}\n#bm-app .bm-check input { cursor: pointer; width: 16px; height: 16px; }\n#bm-app .bm-btn-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.6rem;\n  margin-top: 1rem;\n}\n#bm-app .bm-btn {\n  padding: 0.55rem 1.2rem;\n  border: none;\n  border-radius: 6px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: opacity 0.15s, transform 0.1s;\n}\n#bm-app .bm-btn:hover { opacity: 0.88; transform: translateY(-1px); }\n#bm-app .bm-btn:active { transform: translateY(0); }\n#bm-app .bm-btn-primary { background: #e94560; color: #fff; }\n#bm-app .bm-btn-secondary { background: #0f3460; color: #fff; }\n#bm-app .bm-btn-ghost {\n  background: transparent;\n  color: #0f3460;\n  border: 1.5px solid #0f3460;\n}\n#bm-app .bm-btn-sm {\n  padding: 0.35rem 0.75rem;\n  font-size: 0.8rem;\n}\n#bm-app .bm-output-wrap {\n  position: relative;\n  margin-top: 0.5rem;\n}\n#bm-app .bm-output {\n  width: 100%;\n  min-height: 80px;\n  font-family: 'Courier New', Courier, monospace;\n  font-size: 0.82rem;\n  line-height: 1.5;\n  padding: 0.75rem 3.5rem 0.75rem 1rem;\n  border: 1.5px solid #c8d0e0;\n  border-radius: 7px;\n  background: #fff;\n  color: #1a1a2e;\n  word-break: break-all;\n  white-space: pre-wrap;\n  resize: vertical;\n}\n#bm-app .bm-copy-btn {\n  position: absolute;\n  top: 0.5rem;\n  right: 0.5rem;\n  padding: 0.3rem 0.6rem;\n  font-size: 0.75rem;\n  font-weight: 600;\n  background: #0f3460;\n  color: #fff;\n  border: none;\n  border-radius: 5px;\n  cursor: pointer;\n  transition: opacity 0.15s;\n}\n#bm-app .bm-copy-btn:hover { opacity: 0.8; }\n#bm-app .bm-stats {\n  display: flex;\n  gap: 1.5rem;\n  margin-top: 0.5rem;\n  font-size: 0.8rem;\n  color: #666;\n}\n#bm-app .bm-stats span strong { color: #0f3460; }\n#bm-app .bm-drag-box {\n  margin-top: 0.8rem;\n  padding: 0.9rem 1.2rem;\n  background: #eaf0ff;\n  border: 2px dashed #7fa7e0;\n  border-radius: 8px;\n  font-size: 0.88rem;\n  color: #2a4a7f;\n  text-align: center;\n}\n#bm-app .bm-drag-link {\n  display: inline-block;\n  margin-top: 0.5rem;\n  padding: 0.4rem 1rem;\n  background: #fff;\n  border: 1.5px solid #7fa7e0;\n  border-radius: 5px;\n  font-weight: 700;\n  color: #0f3460;\n  text-decoration: none;\n  cursor: grab;\n}\n#bm-app .bm-drag-link:hover { background: #ddeaff; }\n#bm-app .bm-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin-top: 0.3rem;\n}\n#bm-app .bm-preset-btn {\n  padding: 0.38rem 0.85rem;\n  background: #fff;\n  border: 1.5px solid #c8d0e0;\n  border-radius: 20px;\n  font-size: 0.82rem;\n  cursor: pointer;\n  transition: border-color 0.15s, background 0.15s;\n  color: #333;\n}\n#bm-app .bm-preset-btn:hover {\n  border-color: #e94560;\n  background: #fff0f3;\n  color: #e94560;\n}\n#bm-app .bm-alert {\n  padding: 0.65rem 1rem;\n  border-radius: 6px;\n  font-size: 0.85rem;\n  margin-top: 0.6rem;\n  display: none;\n}\n#bm-app .bm-alert.error { background: #fff0f0; border: 1px solid #ffbaba; color: #c00; }\n#bm-app .bm-alert.success { background: #f0fff4; border: 1px solid #a0d9b0; color: #1a7a3a; }\n#bm-app .bm-divider { border: none; border-top: 1px solid #dde3f0; margin: 1.5rem 0; }\n#bm-app .bm-cta {\n  background: linear-gradient(135deg, #0f3460 0%, #16213e 100%);\n  color: #fff;\n  border-radius: 10px;\n  padding: 1.3rem 1.6rem;\n  margin: 1.5rem 0;\n  display: flex;\n  align-items: center;\n  gap: 1.2rem;\n  flex-wrap: wrap;\n}\n#bm-app .bm-cta-text { flex: 1; min-width: 200px; }\n#bm-app .bm-cta-text strong { display: block; font-size: 1rem; margin-bottom: 0.3rem; }\n#bm-app .bm-cta-text span { font-size: 0.85rem; opacity: 0.88; }\n#bm-app .bm-cta-btn {\n  display: inline-block;\n  padding: 0.6rem 1.4rem;\n  background: #e94560;\n  color: #fff;\n  border-radius: 6px;\n  font-weight: 700;\n  font-size: 0.9rem;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: opacity 0.15s;\n}\n#bm-app .bm-cta-btn:hover { opacity: 0.85; }\n#bm-app .bm-crosslinks {\n  background: #f0f4ff;\n  border-radius: 8px;\n  padding: 1rem 1.2rem;\n  font-size: 0.88rem;\n}\n#bm-app .bm-crosslinks a {\n  color: #0f3460;\n  text-decoration: underline;\n  margin-right: 1rem;\n}\n#bm-app .bm-footer-af {\n  font-size: 0.75rem;\n  color: #999;\n  margin-top: 0.5rem;\n  text-align: right;\n}\n\u003c/style\u003e\n\u003cdiv class=\"bm-section\"\u003e\n  \u003ch2\u003eJavaScriptコード\u003c/h2\u003e\n  \u003clabel for=\"bm-code\"\u003eJavaScriptをここに貼り付けてください\u003c/label\u003e\n  \u003ctextarea id=\"bm-code\" placeholder=\"// 例：トップへスクロール\u0026#10;window.scrollTo({top: 0, behavior: 'smooth'});\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"bm-options\"\u003e\n    \u003clabel class=\"bm-check\"\u003e\n      \u003cinput type=\"checkbox\" id=\"bm-minify\" checked\u003e\n      圧縮（コメント・空白を除去）\n    \u003c/label\u003e\n    \u003clabel class=\"bm-check\"\u003e\n      \u003cinput type=\"checkbox\" id=\"bm-encode\" checked\u003e\n      URIエンコード\n    \u003c/label\u003e\n    \u003clabel class=\"bm-check\"\u003e\n      \u003cinput type=\"checkbox\" id=\"bm-wrap-iife\" checked\u003e\n      IIFEでラップ（void function(){...}()）\n    \u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"bm-btn-row\"\u003e\n    \u003cbutton class=\"bm-btn bm-btn-primary\" id=\"bm-convert-btn\"\u003eブックマークレットに変換\u003c/button\u003e\n    \u003cbutton class=\"bm-btn bm-btn-ghost\" id=\"bm-clear-btn\"\u003eクリア\u003c/button\u003e\n    \u003cbutton class=\"bm-btn bm-btn-secondary\" id=\"bm-test-btn\"\u003eコンソールでテスト\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"bm-alert\" id=\"bm-alert\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"bm-section\"\u003e\n  \u003ch2\u003eブックマークレット出力\u003c/h2\u003e\n  \u003cdiv class=\"bm-output-wrap\"\u003e\n    \u003ctextarea class=\"bm-output\" id=\"bm-result\" readonly placeholder=\"ブックマークレットのURLがここに表示されます...\"\u003e\u003c/textarea\u003e\n    \u003cbutton class=\"bm-copy-btn\" id=\"bm-copy-btn\"\u003eコピー\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"bm-stats\"\u003e\n    \u003cspan\u003e文字数: \u003cstrong id=\"bm-char-count\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n    \u003cspan\u003eサイズ: \u003cstrong id=\"bm-size\"\u003e0 B\u003c/strong\u003e\u003c/span\u003e\n    \u003cspan\u003e状態: \u003cstrong id=\"bm-status\"\u003e—\u003c/strong\u003e\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"bm-drag-box\" id=\"bm-drag-box\" style=\"display:none;\"\u003e\n    \u003cdiv\u003eこのボタンをブックマークバーにドラッグしてください：\u003c/div\u003e\n    \u003ca class=\"bm-drag-link\" id=\"bm-drag-link\" href=\"#\"\u003eブックマークレット\u003c/a\u003e\n    \u003cdiv style=\"margin-top:0.5rem;font-size:0.8rem;color:#5a7aaf;\"\u003e（ブックマークバーを表示: Ctrl+Shift+B / Cmd+Shift+B）\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"bm-section\"\u003e\n  \u003ch2\u003eすぐ使えるサンプル\u003c/h2\u003e\n  \u003cdiv class=\"bm-presets\" id=\"bm-presets\"\u003e\n    \u003cbutton class=\"bm-preset-btn\" data-preset=\"highlight-links\"\u003eリンクを強調表示\u003c/button\u003e\n    \u003cbutton class=\"bm-preset-btn\" data-preset=\"dark-mode\"\u003eダークモード切替\u003c/button\u003e\n    \u003cbutton class=\"bm-preset-btn\" data-preset=\"font-size\"\u003e文字サイズ変更\u003c/button\u003e\n    \u003cbutton class=\"bm-preset-btn\" data-preset=\"print-page\"\u003eページを印刷\u003c/button\u003e\n    \u003cbutton class=\"bm-preset-btn\" data-preset=\"scroll-top\"\u003eトップへスクロール\u003c/button\u003e\n    \u003cbutton class=\"bm-preset-btn\" data-preset=\"word-count\"\u003e文字数カウント\u003c/button\u003e\n    \u003cbutton class=\"bm-preset-btn\" data-preset=\"copy-url\"\u003eURL＋タイトルをコピー\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003chr class=\"bm-divider\"\u003e\n\u003c!-- freee CTA (AF: a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP) --\u003e\n\u003cdiv class=\"bm-cta\"\u003e\n  \u003cdiv class=\"bm-cta-text\"\u003e\n    \u003cstrong\u003e業務効率化なら freee会計\u003c/strong\u003e\n    \u003cspan\u003e請求書・経費精算・確定申告をまるごと自動化。ブックマークレットで毎日の作業を時短するように、バックオフィスも自動化しましょう。\u003c/span\u003e\n  \u003c/div\u003e\n  \u003ca class=\"bm-cta-btn\" href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"nofollow noopener\"\u003e無料で試してみる\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"bm-crosslinks\"\u003e\n  \u003cstrong\u003e関連ツール：\u003c/strong\u003e\n  \u003ca href=\"/ja/tools/code-minifier/\"\u003eコード圧縮ツール\u003c/a\u003e\n  \u003ca href=\"/ja/tools/url-encoder/\"\u003eURLエンコードツール\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"bm-footer-af\"\u003e※ freeeへのリンクはアフィリエイトリンクです。\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  var PRESETS = {\n    'highlight-links': {\n      name: 'リンクを強調表示',\n      code: [\n        '// ページ上の全リンクにカラーアウトラインを付ける',\n        'var links = document.querySelectorAll(\"a\");',\n        'var colors = [\"#e94560\",\"#0f3460\",\"#f5a623\",\"#2ecc71\",\"#9b59b6\"];',\n        'links.forEach(function(el, i) {',\n        '  el.style.outline = \"3px solid \" + colors[i % colors.length];',\n        '  el.style.outlineOffset = \"2px\";',\n        '});',\n        'alert(links.length + \" 件のリンクを強調表示しました。\");'\n      ].join('\\n')\n    },\n    'dark-mode': {\n      name: 'ダークモード切替',\n      code: [\n        '// どのサイトでもダークモードオーバーレイを切り替える',\n        'var id = \"__bm_dark__\";',\n        'var existing = document.getElementById(id);',\n        'if (existing) {',\n        '  existing.remove();',\n        '} else {',\n        '  var s = document.createElement(\"style\");',\n        '  s.id = id;',\n        '  s.textContent = \"html{filter:invert(1) hue-rotate(180deg)!important} img,video,canvas{filter:invert(1) hue-rotate(180deg)!important}\";',\n        '  document.head.appendChild(s);',\n        '}'\n      ].join('\\n')\n    },\n    'font-size': {\n      name: '文字サイズ変更',\n      code: [\n        '// フォントサイズを 100% → 120% → 140% → 100% と切り替える',\n        'var sizes = [\"100%\",\"120%\",\"140%\"];',\n        'var cur = document.documentElement.style.fontSize || \"100%\";',\n        'var idx = sizes.indexOf(cur);',\n        'var next = sizes[(idx + 1) % sizes.length];',\n        'document.documentElement.style.fontSize = next;'\n      ].join('\\n')\n    },\n    'print-page': {\n      name: 'ページを印刷',\n      code: '// 現在のページを印刷する\\nwindow.print();'\n    },\n    'scroll-top': {\n      name: 'トップへスクロール',\n      code: [\n        '// ページのトップへスムーズにスクロールする',\n        'window.scrollTo({ top: 0, behavior: \"smooth\" });'\n      ].join('\\n')\n    },\n    'word-count': {\n      name: '文字数カウント',\n      code: [\n        '// ページの表示テキストの単語数をカウントする',\n        'var text = document.body.innerText || document.body.textContent || \"\";',\n        'var words = text.trim().split(/\\\\s+/).filter(function(w){ return w.length \u003e 0; });',\n        'alert(\"このページの単語数: \" + words.length + \" 語\");'\n      ].join('\\n')\n    },\n    'copy-url': {\n      name: 'URL＋タイトルをコピー',\n      code: [\n        '// ページタイトルとURLをクリップボードにコピーする',\n        'var txt = document.title + \"\\\\n\" + location.href;',\n        'navigator.clipboard.writeText(txt).then(function(){',\n        '  alert(\"コピーしました！\\\\n\" + txt);',\n        '}).catch(function(){',\n        '  prompt(\"コピーしてください:\", txt);',\n        '});'\n      ].join('\\n')\n    }\n  };\n\n  function minifyJS(code) {\n    code = code.replace(/(?\u003c![:'\"])\\/\\/[^\\n]*/g, '');\n    code = code.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n    code = code.replace(/\\s+/g, ' ').trim();\n    code = code.replace(/\\s*([{};,=+\\-*\\/\u003c\u003e!\u0026|?:])\\s*/g, '$1');\n    return code;\n  }\n\n  function buildBookmarklet(rawCode, doMinify, doEncode, doIife) {\n    var code = rawCode.trim();\n    if (!code) return null;\n    if (doMinify) { code = minifyJS(code); }\n    if (doIife) { code = 'void function(){' + code + '}()'; }\n    if (doEncode) { return 'javascript:' + encodeURIComponent(code); }\n    return 'javascript:' + code;\n  }\n\n  function byteSize(str) { return new Blob([str]).size; }\n\n  function formatBytes(n) {\n    if (n \u003c 1024) return n + ' B';\n    return (n / 1024).toFixed(1) + ' KB';\n  }\n\n  function showAlert(msg, type) {\n    var el = document.getElementById('bm-alert');\n    el.textContent = msg;\n    el.className = 'bm-alert ' + type;\n    el.style.display = 'block';\n    setTimeout(function () { el.style.display = 'none'; }, 4000);\n  }\n\n  function updateStats(url) {\n    var chars = url ? url.length : 0;\n    var bytes = url ? byteSize(url) : 0;\n    document.getElementById('bm-char-count').textContent = chars.toLocaleString();\n    document.getElementById('bm-size').textContent = formatBytes(bytes);\n  }\n\n  function convert() {\n    var code = document.getElementById('bm-code').value;\n    if (!code.trim()) {\n      showAlert('JavaScriptコードを入力してください。', 'error');\n      return;\n    }\n    var doMinify = document.getElementById('bm-minify').checked;\n    var doEncode = document.getElementById('bm-encode').checked;\n    var doIife = document.getElementById('bm-wrap-iife').checked;\n    try {\n      var url = buildBookmarklet(code, doMinify, doEncode, doIife);\n      if (!url) { showAlert('変換に失敗しました。', 'error'); return; }\n      document.getElementById('bm-result').value = url;\n      updateStats(url);\n      document.getElementById('bm-status').textContent = '完成';\n      var dragBox = document.getElementById('bm-drag-box');\n      var dragLink = document.getElementById('bm-drag-link');\n      dragLink.href = url;\n      dragBox.style.display = 'block';\n      showAlert('変換完了！ブックマークバーにドラッグするか、コピーしてください。', 'success');\n    } catch (e) {\n      showAlert('エラー: ' + e.message, 'error');\n    }\n  }\n\n  function copyResult() {\n    var val = document.getElementById('bm-result').value;\n    if (!val) { showAlert('先に変換してください。', 'error'); return; }\n    navigator.clipboard.writeText(val).then(function () {\n      var btn = document.getElementById('bm-copy-btn');\n      btn.textContent = 'コピー済み！';\n      setTimeout(function () { btn.textContent = 'コピー'; }, 2000);\n    }).catch(function () {\n      document.getElementById('bm-result').select();\n      document.execCommand('copy');\n    });\n  }\n\n  function testBookmarklet() {\n    var code = document.getElementById('bm-code').value.trim();\n    if (!code) { showAlert('テストするJavaScriptを入力してください。', 'error'); return; }\n    try {\n      var fn = new Function(code);\n      fn();\n    } catch (e) {\n      showAlert('実行エラー: ' + e.message, 'error');\n    }\n  }\n\n  function loadPreset(key) {\n    var p = PRESETS[key];\n    if (!p) return;\n    document.getElementById('bm-code').value = p.code;\n    document.getElementById('bm-status').textContent = '—';\n    document.getElementById('bm-result').value = '';\n    document.getElementById('bm-drag-box').style.display = 'none';\n    updateStats('');\n  }\n\n  document.getElementById('bm-convert-btn').addEventListener('click', convert);\n  document.getElementById('bm-copy-btn').addEventListener('click', copyResult);\n  document.getElementById('bm-test-btn').addEventListener('click', testBookmarklet);\n  document.getElementById('bm-clear-btn').addEventListener('click', function () {\n    document.getElementById('bm-code').value = '';\n    document.getElementById('bm-result').value = '';\n    document.getElementById('bm-drag-box').style.display = 'none';\n    document.getElementById('bm-status').textContent = '—';\n    updateStats('');\n  });\n  document.getElementById('bm-presets').addEventListener('click', function (e) {\n    if (e.target.classList.contains('bm-preset-btn')) {\n      loadPreset(e.target.dataset.preset);\n    }\n  });\n  document.getElementById('bm-code').addEventListener('input', function () {\n    var url = document.getElementById('bm-result').value;\n    if (url) updateStats(url);\n  });\n\n  loadPreset('scroll-top');\n}());\n\u003c/script\u003e\n\u003c/div\u003e\n\u003ch2 id=\"ブックマークレットの使い方\"\u003eブックマークレットの使い方\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e上のコード欄にJavaScriptを貼り付けます（またはサンプルを選択）。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e「変換」をクリック\u003c/strong\u003e — コードが \u003ccode\u003ejavascript:\u003c/code\u003e URIに変換されます。\u003c/li\u003e\n\u003cli\u003e生成されたボタンをブラウザのブックマークバーに\u003cstrong\u003eドラッグ\u003c/strong\u003eします。\u003c/li\u003e\n\u003cli\u003e任意のページを開いてブックマークをクリック — スクリプトが即座に実行されます。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"活用のヒント\"\u003e活用のヒント\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e圧縮\u003c/strong\u003eでコメントと空白を削除し、URLを短くできます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eIIFEラップ\u003c/strong\u003eでページのグローバルスコープを汚染せずに済みます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eURIエンコード\u003c/strong\u003eはスペース・引用符・アンパサンドなど特殊文字に必須です。\u003c/li\u003e\n\u003cli\u003eブラウザのブックマークレットURL上限はおよそ2KB。スクリプトは簡潔に。\u003c/li\u003e\n\u003cli\u003eテスト時は \u003ccode\u003ealert()\u003c/code\u003e や \u003ccode\u003econsole.log()\u003c/code\u003e で出力を確認しましょう。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/tools/code-minifier/\"\u003eコード圧縮ツール\u003c/a\u003e\n — JS・CSS・HTMLを圧縮します。\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/tools/url-encoder/\"\u003eURLエンコードツール\u003c/a\u003e\n — URLコンポーネントを手動でエンコード／デコードします。\u003c/li\u003e\n\u003c/ul\u003e","title":"ブックマークレット作成ツール"},{"content":"任意のファイルをBase64データURLに変換、またはデータURLから元のファイルを復元。すべてブラウザ内で完結し、サーバー送信なし・完全プライベート。\nファイル → データURL データURL → ファイル 📁 ファイルをここにドラッグ＆ドロップ、またはクリックして選択\n画像・SVG・フォント・JSON・PDF・音声・動画など、あらゆるファイルに対応 ファイル名 — MIMEタイプ — 元のサイズ — 変換後サイズ — サイズ増加 — \u0026lt;div id=\u0026quot;du-preview-wrap\u0026quot;\u0026gt; \u0026lt;img id=\u0026quot;du-preview-img\u0026quot; src=\u0026quot;\u0026quot; alt=\u0026quot;プレビュー\u0026quot;\u0026gt; \u0026lt;div id=\u0026quot;du-preview-label\u0026quot;\u0026gt;画像プレビュー\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;du-output-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;du-output-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;du-output-title\u0026quot;\u0026gt;データURL（data:mime;base64,...）\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;du-copy-btn\u0026quot; data-target=\u0026quot;du-out-dataurl\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;textarea id=\u0026quot;du-out-dataurl\u0026quot; readonly spellcheck=\u0026quot;false\u0026quot; placeholder=\u0026quot;データURLがここに表示されます...\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;du-output-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;du-output-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;du-output-title\u0026quot;\u0026gt;Base64文字列のみ\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;du-copy-btn\u0026quot; data-target=\u0026quot;du-out-b64\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;textarea id=\u0026quot;du-out-b64\u0026quot; readonly spellcheck=\u0026quot;false\u0026quot; placeholder=\u0026quot;Base64文字列がここに表示されます...\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;du-output-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;du-output-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;du-output-title\u0026quot;\u0026gt;CSS background-image\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;du-copy-btn\u0026quot; data-target=\u0026quot;du-out-css\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;textarea id=\u0026quot;du-out-css\u0026quot; readonly spellcheck=\u0026quot;false\u0026quot; rows=\u0026quot;2\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;du-output-block\u0026quot; id=\u0026quot;du-img-src-block\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;du-output-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;du-output-title\u0026quot;\u0026gt;HTML \u0026amp;lt;img\u0026amp;gt; src\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;du-copy-btn\u0026quot; data-target=\u0026quot;du-out-html\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;textarea id=\u0026quot;du-out-html\u0026quot; readonly spellcheck=\u0026quot;false\u0026quot; rows=\u0026quot;2\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;du-output-block\u0026quot; id=\u0026quot;du-font-block\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;du-output-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;du-output-title\u0026quot;\u0026gt;CSS @font-face src\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;du-copy-btn\u0026quot; data-target=\u0026quot;du-out-font\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;textarea id=\u0026quot;du-out-font\u0026quot; readonly spellcheck=\u0026quot;false\u0026quot; rows=\u0026quot;3\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;du-enc-actions\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;du-btn-secondary\u0026quot; id=\u0026quot;du-reset-btn\u0026quot;\u0026gt;別のファイルを変換\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; データURLまたはBase64文字列を貼り付け： デコードしてダウンロード 検出されたMIME — デコード後サイズ — デコードされた画像プレビュー ファイルをダウンロード 主な用途 CSS background-image HTML img src フォント埋め込み（@font-face） SVG埋め込み メールテンプレート JSON / APIペイロード オフラインWebアプリ ファビコン埋め込み 使い方 ファイル → データURL 変換したいファイルをドロップゾーンにドラッグ＆ドロップ、またはクリックしてファイルを選択します。 ブラウザの FileReader API を使ってローカルで処理されます。ファイルはサーバーに送信されません。 必要な形式をコピーボタンでコピーします：データURL全体・Base64文字列・CSS background-image・HTML \u0026lt;img\u0026gt; タグ・CSS @font-face（フォントファイルの場合）。 データURL → ファイル データURL → ファイル タブに切り替えます。 data:mime;base64,... 形式の文字列（またはBase64文字列のみ）を貼り付けます。 デコードしてダウンロード をクリックして元のファイルを保存します。 出力形式の説明 形式 用途 データURL src・href・url() の直接値として使用 Base64文字列 API・データベース・JSONペイロード CSS background-image スタイルシートにそのまま貼り付け HTML \u0026lt;img\u0026gt; タグ HTMLにそのまま貼り付け CSS @font-face 外部リクエストなしでWebフォントを埋め込み データURLを使う理由 ファイルをBase64データURIとして埋め込むことで、外部HTTPリクエストなしに自己完結したHTMLファイル・メールテンプレート・CSSスタイルシートを作成できます。主な用途：\nCSSのSVGアイコン — 追加のネットワーク通信なし メール内フォント — 一部クライアントは外部リソースをブロックするため オフラインWebアプリ — アプリシェルにアセットを直接埋め込み APIペイロード — バイナリデータをJSON文字列として渡す ファビコン埋め込み — 別ファイルなしで小さなアイコンをインライン化 変換後のサイズは約33%増加します（3バイトが4文字のBase64になるため）。本番環境では50KB以下のアセットに使用することをお勧めします。\nプライバシー すべての変換はブラウザの FileReader および atob/btoa API を使ってブラウザ内で完結します。ファイルデータがサーバーに送信されることはありません。\n関連ツール Base64エンコード・デコードを行う → Base64エンコーダー 画像をBase64に変換する → 画像→Base64変換ツール Base64から画像を復元する → Base64→画像変換ツール ファイル管理・経費処理をもっとスマートに\nデータURLを活用してWebサイトやシステムを効率化するように、日々の会計・確定申告もクラウドで効率化しませんか？\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/data-url-converter/","summary":"\u003cp\u003e任意のファイルをBase64データURLに変換、またはデータURLから元のファイルを復元。すべてブラウザ内で完結し、サーバー送信なし・完全プライベート。\u003c/p\u003e\n\u003cdiv id=\"du-app\"\u003e\n\u003cstyle\u003e\n  #du-app *,\n  #du-app *::before,\n  #du-app *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n  #du-app {\n    font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    color: #1a1a2e;\n    max-width: 860px;\n    margin: 0 auto;\n    padding: 0 0 48px;\n  }\n  #du-tabs {\n    display: flex;\n    gap: 8px;\n    margin-bottom: 24px;\n  }\n  .du-tab {\n    flex: 1;\n    padding: 12px 20px;\n    border: 2px solid #7c3aed;\n    border-radius: 10px;\n    background: #fff;\n    color: #7c3aed;\n    font-size: 0.97rem;\n    font-weight: 600;\n    cursor: pointer;\n    transition: background 0.18s, color 0.18s;\n    text-align: center;\n  }\n  .du-tab.du-active {\n    background: #7c3aed;\n    color: #fff;\n  }\n  .du-tab:hover:not(.du-active) {\n    background: #f5f3ff;\n  }\n  .du-panel {\n    display: none;\n  }\n  .du-panel.du-active {\n    display: block;\n  }\n  #du-drop-zone {\n    border: 2.5px dashed #7c3aed;\n    border-radius: 14px;\n    padding: 48px 24px;\n    text-align: center;\n    cursor: pointer;\n    background: #f5f3ff;\n    transition: background 0.2s, border-color 0.2s;\n    position: relative;\n  }\n  #du-drop-zone.du-dragover {\n    background: #ede9fe;\n    border-color: #5b21b6;\n  }\n  #du-drop-icon {\n    font-size: 48px;\n    line-height: 1;\n    margin-bottom: 12px;\n  }\n  #du-drop-zone p {\n    color: #6d28d9;\n    font-size: 1.05rem;\n    font-weight: 500;\n  }\n  #du-drop-zone small {\n    display: block;\n    margin-top: 6px;\n    color: #8b5cf6;\n    font-size: 0.82rem;\n  }\n  #du-file-input {\n    position: absolute;\n    inset: 0;\n    opacity: 0;\n    cursor: pointer;\n    width: 100%;\n    height: 100%;\n  }\n  #du-enc-results {\n    display: none;\n  }\n  #du-info-bar {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 12px;\n    margin-bottom: 20px;\n    padding: 14px 18px;\n    background: #f5f3ff;\n    border-radius: 10px;\n    border: 1px solid #ddd6fe;\n    font-size: 0.88rem;\n  }\n  .du-info-item {\n    display: flex;\n    flex-direction: column;\n    gap: 2px;\n  }\n  .du-info-label {\n    font-weight: 600;\n    color: #5b21b6;\n    font-size: 0.78rem;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n  }\n  .du-info-value {\n    color: #1a1a2e;\n    font-size: 0.9rem;\n  }\n  #du-preview-wrap {\n    display: none;\n    margin-bottom: 20px;\n    text-align: center;\n  }\n  #du-preview-wrap img {\n    max-width: 100%;\n    max-height: 220px;\n    border-radius: 10px;\n    border: 1px solid #ddd6fe;\n    box-shadow: 0 2px 12px rgba(124,58,237,0.10);\n  }\n  #du-preview-label {\n    font-size: 0.8rem;\n    color: #8b5cf6;\n    margin-top: 6px;\n  }\n  .du-output-block {\n    margin-bottom: 18px;\n  }\n  .du-output-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    margin-bottom: 6px;\n  }\n  .du-output-title {\n    font-size: 0.85rem;\n    font-weight: 700;\n    color: #5b21b6;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n  }\n  .du-copy-btn {\n    padding: 5px 14px;\n    background: #7c3aed;\n    color: #fff;\n    border: none;\n    border-radius: 6px;\n    font-size: 0.8rem;\n    font-weight: 600;\n    cursor: pointer;\n    transition: background 0.18s;\n  }\n  .du-copy-btn:hover {\n    background: #6d28d9;\n  }\n  .du-copy-btn.du-copied {\n    background: #16a34a;\n  }\n  .du-output-block textarea {\n    width: 100%;\n    height: 100px;\n    padding: 10px 12px;\n    border: 1.5px solid #ddd6fe;\n    border-radius: 8px;\n    font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n    font-size: 0.78rem;\n    color: #1a1a2e;\n    resize: vertical;\n    background: #fafaf9;\n    line-height: 1.5;\n  }\n  .du-output-block textarea:focus {\n    outline: none;\n    border-color: #7c3aed;\n  }\n  #du-enc-actions {\n    display: flex;\n    gap: 10px;\n    margin-top: 8px;\n  }\n  .du-btn-secondary {\n    padding: 9px 20px;\n    background: #fff;\n    color: #7c3aed;\n    border: 2px solid #7c3aed;\n    border-radius: 8px;\n    font-size: 0.9rem;\n    font-weight: 600;\n    cursor: pointer;\n    transition: background 0.18s;\n  }\n  .du-btn-secondary:hover {\n    background: #f5f3ff;\n  }\n  #du-dec-panel label {\n    display: block;\n    font-size: 0.85rem;\n    font-weight: 700;\n    color: #5b21b6;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    margin-bottom: 6px;\n  }\n  #du-paste-area {\n    width: 100%;\n    height: 130px;\n    padding: 10px 12px;\n    border: 2px solid #ddd6fe;\n    border-radius: 10px;\n    font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n    font-size: 0.8rem;\n    color: #1a1a2e;\n    resize: vertical;\n    background: #f5f3ff;\n    margin-bottom: 14px;\n    line-height: 1.5;\n    transition: border-color 0.18s;\n  }\n  #du-paste-area:focus {\n    outline: none;\n    border-color: #7c3aed;\n  }\n  #du-dec-btn {\n    padding: 10px 28px;\n    background: #7c3aed;\n    color: #fff;\n    border: none;\n    border-radius: 8px;\n    font-size: 0.97rem;\n    font-weight: 700;\n    cursor: pointer;\n    transition: background 0.18s;\n    margin-bottom: 18px;\n  }\n  #du-dec-btn:hover {\n    background: #6d28d9;\n  }\n  #du-dec-error {\n    display: none;\n    padding: 10px 16px;\n    background: #fef2f2;\n    border: 1px solid #fca5a5;\n    border-radius: 8px;\n    color: #991b1b;\n    font-size: 0.88rem;\n    font-weight: 500;\n    margin-bottom: 14px;\n  }\n  #du-dec-results {\n    display: none;\n  }\n  #du-dec-info {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 12px;\n    margin-bottom: 18px;\n    padding: 14px 18px;\n    background: #f0fdf4;\n    border-radius: 10px;\n    border: 1px solid #bbf7d0;\n    font-size: 0.88rem;\n  }\n  #du-dec-preview-wrap {\n    display: none;\n    margin-bottom: 18px;\n    text-align: center;\n  }\n  #du-dec-preview-wrap img {\n    max-width: 100%;\n    max-height: 220px;\n    border-radius: 10px;\n    border: 1px solid #ddd6fe;\n    box-shadow: 0 2px 12px rgba(124,58,237,0.10);\n  }\n  #du-dec-preview-label {\n    font-size: 0.8rem;\n    color: #16a34a;\n    margin-top: 6px;\n  }\n  #du-download-btn {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    padding: 10px 26px;\n    background: #16a34a;\n    color: #fff;\n    border: none;\n    border-radius: 8px;\n    font-size: 0.97rem;\n    font-weight: 700;\n    cursor: pointer;\n    text-decoration: none;\n    transition: background 0.18s;\n  }\n  #du-download-btn:hover {\n    background: #15803d;\n  }\n  #du-usecases {\n    margin-top: 32px;\n    padding: 18px 20px;\n    background: #f5f3ff;\n    border-radius: 12px;\n    border: 1px solid #ddd6fe;\n  }\n  #du-usecases h3 {\n    font-size: 0.95rem;\n    font-weight: 700;\n    color: #5b21b6;\n    margin-bottom: 12px;\n  }\n  #du-usecases ul {\n    list-style: none;\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n  }\n  #du-usecases li {\n    padding: 5px 12px;\n    background: #ede9fe;\n    border-radius: 20px;\n    font-size: 0.82rem;\n    color: #5b21b6;\n    font-weight: 500;\n  }\n  @media (max-width: 520px) {\n    #du-info-bar { flex-direction: column; gap: 8px; }\n    #du-tabs { flex-direction: column; }\n    #du-enc-actions { flex-direction: column; }\n  }\n\u003c/style\u003e\n\u003cdiv id=\"du-tabs\"\u003e\n  \u003cbutton class=\"du-tab du-active\" id=\"du-tab-enc\" onclick=\"(function(){document.getElementById('du-enc-panel').classList.add('du-active');document.getElementById('du-dec-panel').classList.remove('du-active');document.getElementById('du-tab-enc').classList.add('du-active');document.getElementById('du-tab-dec').classList.remove('du-active');})()\"\u003e\n    ファイル → データURL\n  \u003c/button\u003e\n  \u003cbutton class=\"du-tab\" id=\"du-tab-dec\" onclick=\"(function(){document.getElementById('du-dec-panel').classList.add('du-active');document.getElementById('du-enc-panel').classList.remove('du-active');document.getElementById('du-tab-dec').classList.add('du-active');document.getElementById('du-tab-enc').classList.remove('du-active');})()\"\u003e\n    データURL → ファイル\n  \u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- エンコードパネル --\u003e\n\u003cdiv class=\"du-panel du-active\" id=\"du-enc-panel\"\u003e\n  \u003cdiv id=\"du-drop-zone\"\u003e\n    \u003cinput type=\"file\" id=\"du-file-input\" aria-label=\"変換するファイルを選択\"\u003e\n    \u003cdiv id=\"du-drop-icon\"\u003e📁\u003c/div\u003e\n    \u003cp\u003eファイルをここにドラッグ＆ドロップ、またはクリックして選択\u003c/p\u003e","title":"データURL変換ツール"},{"content":" \u0026#43; 習慣を追加 色 毎日 平日のみ カスタム曜日 曜日: 日 月 火 水 木 金 土 追加 \u0026#9989; 今日の習慣 0/0 習慣をまだ登録していません \u0026#128197; 週間グリッド 習慣を追加すると表示されます\n\u0026#128293; 月間ヒートマップ 習慣を選択: 習慣を追加すると表示されます\n\u0026#128200; 統計 0現在の連続日数（日） 0最長連続記録（日） 0%今月の達成率 0累計達成回数 ※ 統計はヒートマップで選択中の習慣に対して計算されます\n\u0026#128190; データ管理 JSONで書き出し JSONを取り込む 全データ削除 習慣を編集 習慣名 色 頻度 毎日 平日のみ カスタム曜日 曜日を選択: 日 月 火 水 木 金 土 キャンセル 保存 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → ポモドーロで集中 → ポモドーロタイマー フラッシュカードで学習 → フラッシュカードメーカー 家計を見直す → 50/30/20 家計バランス計算 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/habit-tracker/","summary":"\u003cdiv id=\"ht-app\"\u003e\n\u003cstyle\u003e\n#ht-app {\n  font-family: 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1e293b;\n  font-size: 15px;\n}\n#ht-app *, #ht-app *::before, #ht-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\u003cp\u003e/* \u0026mdash; layout \u0026mdash; */\n#ht-app .ht-section { margin-bottom: 28px; }\n#ht-app .ht-card {\nbackground: #f8fafc;\nborder: 1px solid #e2e8f0;\nborder-radius: 12px;\npadding: 20px 22px;\n}\n#ht-app h2.ht-h2 {\nfont-size: 17px;\nfont-weight: 700;\ncolor: #0f172a;\nmargin-bottom: 14px;\ndisplay: flex;\nalign-items: center;\ngap: 8px;\n}\n#ht-app .ht-badge {\nfont-size: 11px;\nfont-weight: 700;\nbackground: #e2e8f0;\ncolor: #475569;\nborder-radius: 20px;\npadding: 2px 9px;\n}\u003c/p\u003e","title":"習慣トラッカー"},{"content":"ブラー・透明度・ボーダー半径などを調整するだけで、すりガラス風CSSが即生成されます。コピーしてそのまま使えます。\nプリセット\nフロスト オーシャン サンセット ミッドナイト フォレスト \u0026lt;hr class=\u0026quot;gm-section-divider\u0026quot;\u0026gt; \u0026lt;div\u0026gt; \u0026lt;p class=\u0026quot;gm-panel-title\u0026quot;\u0026gt;ガラスエフェクト\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;gm-field\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;gm-label\u0026quot;\u0026gt;ブラー強度 \u0026lt;span id=\u0026quot;gm-blur-val\u0026quot;\u0026gt;12px\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;gm-blur\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;30\u0026quot; value=\u0026quot;12\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;gm-field\u0026quot; style=\u0026quot;margin-top:12px;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;gm-label\u0026quot;\u0026gt;透明度 \u0026lt;span id=\u0026quot;gm-alpha-val\u0026quot;\u0026gt;0.15\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;gm-alpha\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;15\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;gm-field\u0026quot; style=\u0026quot;margin-top:12px;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;gm-label\u0026quot;\u0026gt;角丸（ボーダー半径） \u0026lt;span id=\u0026quot;gm-radius-val\u0026quot;\u0026gt;16px\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;gm-radius\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;48\u0026quot; value=\u0026quot;16\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;gm-field\u0026quot; style=\u0026quot;margin-top:12px;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;gm-label\u0026quot;\u0026gt;ボーダー幅 \u0026lt;span id=\u0026quot;gm-bw-val\u0026quot;\u0026gt;1px\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;gm-bw\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;6\u0026quot; value=\u0026quot;1\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;gm-field\u0026quot; style=\u0026quot;margin-top:12px;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;gm-label\u0026quot;\u0026gt;ボーダー透明度 \u0026lt;span id=\u0026quot;gm-bopacity-val\u0026quot;\u0026gt;0.30\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;gm-bopacity\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;30\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;hr class=\u0026quot;gm-section-divider\u0026quot;\u0026gt; \u0026lt;div\u0026gt; \u0026lt;p class=\u0026quot;gm-panel-title\u0026quot;\u0026gt;カラー\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;gm-color-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;gm-color-label\u0026quot;\u0026gt;カードの基本色\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;gm-card-color\u0026quot; value=\u0026quot;#ffffff\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;gm-color-row\u0026quot; style=\u0026quot;margin-top:10px;\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;gm-color-label\u0026quot;\u0026gt;テキスト色\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;gm-text-color\u0026quot; value=\u0026quot;#ffffff\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;hr class=\u0026quot;gm-section-divider\u0026quot;\u0026gt; \u0026lt;div\u0026gt; \u0026lt;p class=\u0026quot;gm-panel-title\u0026quot;\u0026gt;背景グラデーション\u0026lt;/p\u0026gt; \u0026lt;div class=\u0026quot;gm-color-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;gm-color-label\u0026quot;\u0026gt;カラー1\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;gm-bg1\u0026quot; value=\u0026quot;#6366f1\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;gm-color-row\u0026quot; style=\u0026quot;margin-top:10px;\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;gm-color-label\u0026quot;\u0026gt;カラー2\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;gm-bg2\u0026quot; value=\u0026quot;#8b5cf6\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;hr class=\u0026quot;gm-section-divider\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;gm-toggle-row\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;gm-toggle\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;gm-dark-toggle\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;gm-toggle-slider\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/label\u0026gt; \u0026lt;span class=\u0026quot;gm-toggle-text\u0026quot;\u0026gt;ダーク背景でプレビュー\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; backdrop-filter は Chrome 76+・Firefox 103+・Safari 9+・Edge 17+ で対応。古いSafari向けに -webkit-backdrop-filter も自動出力されます。 \u0026lt;!-- Preview --\u0026gt; \u0026lt;div class=\u0026quot;gm-preview-area\u0026quot; id=\u0026quot;gm-preview-area\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;gm-backdrop-shapes\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;gm-shape gm-shape-1\u0026quot; id=\u0026quot;gm-shape1\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;gm-shape gm-shape-2\u0026quot; id=\u0026quot;gm-shape2\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;gm-shape gm-shape-3\u0026quot; id=\u0026quot;gm-shape3\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;gm-glass-card\u0026quot; id=\u0026quot;gm-glass-card\u0026quot;\u0026gt; \u0026lt;p class=\u0026quot;gm-card-inner-title\u0026quot; id=\u0026quot;gm-card-title\u0026quot;\u0026gt;ガラスカード\u0026lt;/p\u0026gt; \u0026lt;p class=\u0026quot;gm-card-inner-sub\u0026quot; id=\u0026quot;gm-card-sub\u0026quot;\u0026gt;すりガラスエフェクト\u0026lt;/p\u0026gt; \u0026lt;span class=\u0026quot;gm-card-btn\u0026quot; id=\u0026quot;gm-card-btn\u0026quot;\u0026gt;もっと見る\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Code --\u0026gt; \u0026lt;div class=\u0026quot;gm-code-block\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;gm-code-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;gm-code-label\u0026quot;\u0026gt;CSS\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;gm-copy-btn\u0026quot; id=\u0026quot;gm-copy-btn\u0026quot; onclick=\u0026quot;gmCopyCSS()\u0026quot;\u0026gt;CSSをコピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;pre id=\u0026quot;gm-css-output\u0026quot;\u0026gt;\u0026lt;/pre\u0026gt; \u0026lt;/div\u0026gt; Web制作の経費管理もかんたんに\nfreee会計なら、デザインツール・サーバー費用の経費精算もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\nボックスシャドウを生成 → CSSボックスシャドウジェネレーター グラデーションを作成 → CSSグラデーションジェネレーター ボタンをデザイン → CSSボタンジェネレーター ","permalink":"https://productivity-works.com/ja/tools/glassmorphism-generator/","summary":"\u003cp\u003eブラー・透明度・ボーダー半径などを調整するだけで、すりガラス風CSSが即生成されます。コピーしてそのまま使えます。\u003c/p\u003e\n\u003cdiv id=\"gm-app\"\u003e\n\u003cstyle\u003e\n  #gm-app *,\n  #gm-app *::before,\n  #gm-app *::after {\n    box-sizing: border-box;\n  }\n  #gm-app {\n    font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic UI\", \"Meiryo\", \"Segoe UI\", sans-serif;\n    font-size: 14px;\n    color: #1e293b;\n    line-height: 1.5;\n  }\n  #gm-app .gm-layout {\n    display: grid;\n    grid-template-columns: 320px 1fr;\n    gap: 24px;\n    align-items: start;\n    margin-top: 20px;\n  }\n  @media (max-width: 700px) {\n    #gm-app .gm-layout {\n      grid-template-columns: 1fr;\n    }\n  }\n\u003cp\u003e/* Controls Panel */\n#gm-app .gm-panel {\nbackground: #f8fafc;\nborder: 1px solid #e2e8f0;\nborder-radius: 12px;\npadding: 20px;\ndisplay: flex;\nflex-direction: column;\ngap: 16px;\n}\n#gm-app .gm-panel-title {\nfont-size: 13px;\nfont-weight: 700;\ntext-transform: uppercase;\nletter-spacing: 0.06em;\ncolor: #64748b;\nmargin: 0 0 2px 0;\n}\n#gm-app .gm-section-divider {\nborder: none;\nborder-top: 1px solid #e2e8f0;\nmargin: 0;\n}\n#gm-app .gm-field {\ndisplay: flex;\nflex-direction: column;\ngap: 6px;\n}\n#gm-app .gm-label {\nfont-size: 13px;\nfont-weight: 600;\ncolor: #374151;\ndisplay: flex;\njustify-content: space-between;\nalign-items: center;\n}\n#gm-app .gm-label span {\nfont-weight: 400;\ncolor: #6366f1;\nfont-size: 12px;\nfont-family: monospace;\nbackground: #eef2ff;\npadding: 1px 6px;\nborder-radius: 4px;\n}\n#gm-app input[type=\u0026ldquo;range\u0026rdquo;] {\nwidth: 100%;\nheight: 4px;\naccent-color: #6366f1;\ncursor: pointer;\n}\n#gm-app input[type=\u0026ldquo;color\u0026rdquo;] {\nwidth: 36px;\nheight: 30px;\nborder: 1px solid #cbd5e1;\nborder-radius: 6px;\ncursor: pointer;\npadding: 2px;\nbackground: #fff;\n}\n#gm-app .gm-color-row {\ndisplay: flex;\nalign-items: center;\ngap: 10px;\n}\n#gm-app .gm-color-label {\nfont-size: 12px;\ncolor: #64748b;\nflex: 1;\n}\u003c/p\u003e","title":"グラスモーフィズム ジェネレーター"},{"content":" \u0026lt;!-- Shape Type --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;図形タイプ\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-shape-tabs\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;cp-tab active\u0026quot; data-type=\u0026quot;polygon\u0026quot; onclick=\u0026quot;cpjaSetType('polygon')\u0026quot;\u0026gt;ポリゴン\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-tab\u0026quot; data-type=\u0026quot;circle\u0026quot; onclick=\u0026quot;cpjaSetType('circle')\u0026quot;\u0026gt;円\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-tab\u0026quot; data-type=\u0026quot;ellipse\u0026quot; onclick=\u0026quot;cpjaSetType('ellipse')\u0026quot;\u0026gt;楕円\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-tab\u0026quot; data-type=\u0026quot;inset\u0026quot; onclick=\u0026quot;cpjaSetType('inset')\u0026quot;\u0026gt;インセット\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-tab\u0026quot; data-type=\u0026quot;custom\u0026quot; onclick=\u0026quot;cpjaSetType('custom')\u0026quot;\u0026gt;カスタム\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Polygon Presets --\u0026gt; \u0026lt;div id=\u0026quot;cpja-polygon-panel\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;プリセット図形\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-presets-grid\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;cp-preset-btn active\u0026quot; data-preset=\u0026quot;triangle\u0026quot; onclick=\u0026quot;cpjaLoadPreset('triangle')\u0026quot;\u0026gt; \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;16,4 30,28 2,28\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; 三角形 \u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;diamond\u0026quot; onclick=\u0026quot;cpjaLoadPreset('diamond')\u0026quot;\u0026gt; \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;16,2 30,16 16,30 2,16\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; 菱形 \u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;pentagon\u0026quot; onclick=\u0026quot;cpjaLoadPreset('pentagon')\u0026quot;\u0026gt; \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;16,2 29,11 24,27 8,27 3,11\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; 五角形 \u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;hexagon\u0026quot; onclick=\u0026quot;cpjaLoadPreset('hexagon')\u0026quot;\u0026gt; \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;16,2 28,9 28,23 16,30 4,23 4,9\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; 六角形 \u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;octagon\u0026quot; onclick=\u0026quot;cpjaLoadPreset('octagon')\u0026quot;\u0026gt; \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;10,2 22,2 30,10 30,22 22,30 10,30 2,22 2,10\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; 八角形 \u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;star\u0026quot; onclick=\u0026quot;cpjaLoadPreset('star')\u0026quot;\u0026gt; \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;16,2 19.5,12 30,12 21.5,18.5 24.5,29 16,22.5 7.5,29 10.5,18.5 2,12 12.5,12\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; 星形 \u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;arrow\u0026quot; onclick=\u0026quot;cpjaLoadPreset('arrow')\u0026quot;\u0026gt; \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;2,10 18,10 18,4 30,16 18,28 18,22 2,22\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; 矢印 \u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;cross\u0026quot; onclick=\u0026quot;cpjaLoadPreset('cross')\u0026quot;\u0026gt; \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;10,2 22,2 22,10 30,10 30,22 22,22 22,30 10,30 10,22 2,22 2,10 10,10\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; 十字 \u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;heart\u0026quot; onclick=\u0026quot;cpjaLoadPreset('heart')\u0026quot;\u0026gt; \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;path d=\u0026quot;M16,28 C16,28 3,18 3,10 C3,6 6,3 10,3 C12.5,3 15,5 16,7 C17,5 19.5,3 22,3 C26,3 29,6 29,10 C29,18 16,28 16,28Z\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; ハート \u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;chevron\u0026quot; onclick=\u0026quot;cpjaLoadPreset('chevron')\u0026quot;\u0026gt; \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;2,6 18,6 30,16 18,26 2,26 14,16\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; シェブロン \u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Circle controls --\u0026gt; \u0026lt;div id=\u0026quot;cpja-circle-panel\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;円の設定\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;半径\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-circle-r\u0026quot; min=\u0026quot;10\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;50\u0026quot; oninput=\u0026quot;cpjaUpdateCircle()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-circle-r-val\u0026quot;\u0026gt;50%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;中心 X\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-circle-cx\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;50\u0026quot; oninput=\u0026quot;cpjaUpdateCircle()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-circle-cx-val\u0026quot;\u0026gt;50%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;中心 Y\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-circle-cy\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;50\u0026quot; oninput=\u0026quot;cpjaUpdateCircle()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-circle-cy-val\u0026quot;\u0026gt;50%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Ellipse controls --\u0026gt; \u0026lt;div id=\u0026quot;cpja-ellipse-panel\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;楕円の設定\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;半径 X\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-ellipse-rx\u0026quot; min=\u0026quot;5\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;50\u0026quot; oninput=\u0026quot;cpjaUpdateEllipse()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-ellipse-rx-val\u0026quot;\u0026gt;50%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;半径 Y\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-ellipse-ry\u0026quot; min=\u0026quot;5\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;30\u0026quot; oninput=\u0026quot;cpjaUpdateEllipse()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-ellipse-ry-val\u0026quot;\u0026gt;30%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;中心 X\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-ellipse-cx\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;50\u0026quot; oninput=\u0026quot;cpjaUpdateEllipse()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-ellipse-cx-val\u0026quot;\u0026gt;50%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;中心 Y\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-ellipse-cy\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;50\u0026quot; oninput=\u0026quot;cpjaUpdateEllipse()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-ellipse-cy-val\u0026quot;\u0026gt;50%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Inset controls --\u0026gt; \u0026lt;div id=\u0026quot;cpja-inset-panel\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;インセット設定\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-inset-grid\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot; style=\u0026quot;flex-direction:column;align-items:flex-start;gap:0.2rem\u0026quot;\u0026gt; \u0026lt;label\u0026gt;上\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-inset-t\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;49\u0026quot; value=\u0026quot;10\u0026quot; oninput=\u0026quot;cpjaUpdateInset()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-inset-t-val\u0026quot; style=\u0026quot;min-width:auto\u0026quot;\u0026gt;10%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot; style=\u0026quot;flex-direction:column;align-items:flex-start;gap:0.2rem\u0026quot;\u0026gt; \u0026lt;label\u0026gt;右\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-inset-r\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;49\u0026quot; value=\u0026quot;10\u0026quot; oninput=\u0026quot;cpjaUpdateInset()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-inset-r-val\u0026quot; style=\u0026quot;min-width:auto\u0026quot;\u0026gt;10%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot; style=\u0026quot;flex-direction:column;align-items:flex-start;gap:0.2rem\u0026quot;\u0026gt; \u0026lt;label\u0026gt;下\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-inset-b\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;49\u0026quot; value=\u0026quot;10\u0026quot; oninput=\u0026quot;cpjaUpdateInset()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-inset-b-val\u0026quot; style=\u0026quot;min-width:auto\u0026quot;\u0026gt;10%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot; style=\u0026quot;flex-direction:column;align-items:flex-start;gap:0.2rem\u0026quot;\u0026gt; \u0026lt;label\u0026gt;左\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-inset-l\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;49\u0026quot; value=\u0026quot;10\u0026quot; oninput=\u0026quot;cpjaUpdateInset()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-inset-l-val\u0026quot; style=\u0026quot;min-width:auto\u0026quot;\u0026gt;10%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot; style=\u0026quot;margin-top:0.5rem\u0026quot;\u0026gt; \u0026lt;label\u0026gt;角丸半径\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-inset-br\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;0\u0026quot; oninput=\u0026quot;cpjaUpdateInset()\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-inset-br-val\u0026quot;\u0026gt;0%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Custom polygon panel --\u0026gt; \u0026lt;div id=\u0026quot;cpja-custom-panel\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;カスタムポリゴン\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-custom-hint\u0026quot;\u0026gt; プレビューエリアをクリックしてポイントを追加。ドラッグで移動、右クリックで削除できます。 \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-custom-actions\u0026quot; style=\u0026quot;margin-top:0.6rem\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;cp-btn cp-btn-outline\u0026quot; onclick=\u0026quot;cpjaUndoPoint()\u0026quot;\u0026gt;元に戻す\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;cp-btn cp-btn-danger\u0026quot; onclick=\u0026quot;cpjaClearPoints()\u0026quot;\u0026gt;全消去\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-points-list\u0026quot; id=\u0026quot;cpja-points-list\u0026quot;\u0026gt;ポイントなし — プレビューをクリックして開始。\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Background color --\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;プレビューオプション\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-color-row\u0026quot;\u0026gt; \u0026lt;label\u0026gt;図形の色\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;cpja-shape-color\u0026quot; value=\u0026quot;#667eea\u0026quot; oninput=\u0026quot;cpjaUpdateColor()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-preview-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cp-preview-label\u0026quot;\u0026gt;ライブプレビュー — \u0026lt;span id=\u0026quot;cpja-preview-size-label\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-canvas-wrap\u0026quot; id=\u0026quot;cpja-canvas\u0026quot; onclick=\u0026quot;cpjaCanvasClick(event)\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cp-shape-el\u0026quot; id=\u0026quot;cpja-shape\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-output-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cp-output-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cp-output-title\u0026quot;\u0026gt;CSS出力\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;cp-copy-btn\u0026quot; id=\u0026quot;cpja-copy-btn\u0026quot; onclick=\u0026quot;cpjaCopyCSS()\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cp-output-code\u0026quot; id=\u0026quot;cpja-output-code\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 🟢 フリーランス・個人事業主の方へ — freeeで経理・確定申告を自動化 ツール制作などの副業・フリーランス収入も、freeeなら帳簿付けから確定申告まで簡単に管理できます。\nfreeeを試す 関連ツール ボックスシャドウを生成 → CSS Box Shadow ジェネレーター ボーダー半径を設定 → CSS Border Radius ジェネレーター SVGパスを作成 → SVG Path エディター ","permalink":"https://productivity-works.com/ja/tools/clip-path-generator/","summary":"\u003cdiv id=\"cp-app\"\u003e\n\u003cstyle\u003e\n#cp-app *,\n#cp-app *::before,\n#cp-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#cp-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic UI\", \"Segoe UI\", sans-serif;\n  color: #1a1a2e;\n  max-width: 960px;\n  margin: 0 auto;\n  padding: 0 0 2rem 0;\n}\n#cp-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin-bottom: 0.75rem;\n  color: #16213e;\n}\n#cp-app .cp-layout {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1.5rem;\n  align-items: start;\n}\n@media (max-width: 700px) {\n  #cp-app .cp-layout {\n    grid-template-columns: 1fr;\n  }\n}\n/* Controls panel */\n#cp-app .cp-controls {\n  background: #f8f9fc;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 1.25rem;\n  display: flex;\n  flex-direction: column;\n  gap: 1.1rem;\n}\n#cp-app .cp-section-label {\n  font-size: 0.72rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #718096;\n  margin-bottom: 0.45rem;\n}\n/* Shape type tabs */\n#cp-app .cp-shape-tabs {\n  display: flex;\n  gap: 0.4rem;\n  flex-wrap: wrap;\n}\n#cp-app .cp-tab {\n  padding: 0.35rem 0.75rem;\n  border-radius: 20px;\n  border: 1.5px solid #cbd5e0;\n  background: #fff;\n  font-size: 0.82rem;\n  cursor: pointer;\n  transition: all 0.15s;\n  color: #4a5568;\n  font-weight: 500;\n}\n#cp-app .cp-tab:hover {\n  border-color: #667eea;\n  color: #667eea;\n}\n#cp-app .cp-tab.active {\n  background: #667eea;\n  border-color: #667eea;\n  color: #fff;\n}\n/* Preset grid */\n#cp-app .cp-presets-grid {\n  display: grid;\n  grid-template-columns: repeat(5, 1fr);\n  gap: 0.5rem;\n}\n@media (max-width: 400px) {\n  #cp-app .cp-presets-grid {\n    grid-template-columns: repeat(3, 1fr);\n  }\n}\n#cp-app .cp-preset-btn {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 0.3rem;\n  padding: 0.5rem 0.25rem;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  background: #fff;\n  cursor: pointer;\n  transition: all 0.15s;\n  font-size: 0.68rem;\n  color: #4a5568;\n  font-weight: 500;\n}\n#cp-app .cp-preset-btn:hover {\n  border-color: #667eea;\n  color: #667eea;\n  background: #f0f4ff;\n}\n#cp-app .cp-preset-btn.active {\n  border-color: #667eea;\n  background: #eef1ff;\n  color: #667eea;\n}\n#cp-app .cp-preset-icon {\n  width: 32px;\n  height: 32px;\n  display: block;\n}\n/* Sliders */\n#cp-app .cp-slider-row {\n  display: flex;\n  align-items: center;\n  gap: 0.6rem;\n  margin-bottom: 0.4rem;\n}\n#cp-app .cp-slider-row label {\n  font-size: 0.8rem;\n  color: #4a5568;\n  min-width: 80px;\n  flex-shrink: 0;\n}\n#cp-app .cp-slider-row input[type=range] {\n  flex: 1;\n  accent-color: #667eea;\n  height: 4px;\n  cursor: pointer;\n}\n#cp-app .cp-slider-val {\n  font-size: 0.78rem;\n  color: #667eea;\n  font-weight: 700;\n  min-width: 38px;\n  text-align: right;\n}\n/* Color picker */\n#cp-app .cp-color-row {\n  display: flex;\n  align-items: center;\n  gap: 0.7rem;\n}\n#cp-app .cp-color-row label {\n  font-size: 0.8rem;\n  color: #4a5568;\n}\n#cp-app .cp-color-row input[type=color] {\n  width: 38px;\n  height: 32px;\n  border: none;\n  border-radius: 6px;\n  cursor: pointer;\n  padding: 2px;\n  background: #fff;\n  border: 1px solid #e2e8f0;\n}\n/* Custom polygon controls */\n#cp-app .cp-custom-hint {\n  font-size: 0.78rem;\n  color: #718096;\n  background: #fff9db;\n  border: 1px solid #f6e05e;\n  border-radius: 8px;\n  padding: 0.55rem 0.75rem;\n  line-height: 1.6;\n}\n#cp-app .cp-custom-actions {\n  display: flex;\n  gap: 0.5rem;\n  flex-wrap: wrap;\n}\n#cp-app .cp-btn {\n  padding: 0.42rem 0.9rem;\n  border-radius: 8px;\n  border: 1.5px solid #667eea;\n  background: #667eea;\n  color: #fff;\n  font-size: 0.8rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#cp-app .cp-btn:hover {\n  background: #5a67d8;\n  border-color: #5a67d8;\n}\n#cp-app .cp-btn-outline {\n  background: #fff;\n  color: #667eea;\n}\n#cp-app .cp-btn-outline:hover {\n  background: #eef1ff;\n}\n#cp-app .cp-btn-danger {\n  background: #fff;\n  border-color: #fc8181;\n  color: #e53e3e;\n}\n#cp-app .cp-btn-danger:hover {\n  background: #fff5f5;\n}\n/* Inset controls */\n#cp-app .cp-inset-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 0.4rem 0.8rem;\n}\n/* Right panel */\n#cp-app .cp-right {\n  display: flex;\n  flex-direction: column;\n  gap: 1.25rem;\n}\n/* Preview box */\n#cp-app .cp-preview-wrap {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 1.25rem;\n}\n#cp-app .cp-preview-label {\n  font-size: 0.72rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #718096;\n  margin-bottom: 0.75rem;\n}\n#cp-app .cp-canvas-wrap {\n  position: relative;\n  width: 100%;\n  padding-bottom: 70%;\n  background: repeating-conic-gradient(#f0f0f0 0% 25%, #fff 0% 50%) 0 0 / 18px 18px;\n  border-radius: 8px;\n  overflow: hidden;\n  cursor: crosshair;\n}\n#cp-app .cp-shape-el {\n  position: absolute;\n  inset: 0;\n  background: #667eea;\n  transition: clip-path 0.1s;\n}\n#cp-app .cp-point-dot {\n  position: absolute;\n  width: 14px;\n  height: 14px;\n  border-radius: 50%;\n  background: #fff;\n  border: 2.5px solid #e53e3e;\n  transform: translate(-50%, -50%);\n  cursor: grab;\n  z-index: 10;\n  touch-action: none;\n}\n#cp-app .cp-point-dot:hover {\n  background: #fff5f5;\n  border-color: #c53030;\n}\n/* Output box */\n#cp-app .cp-output-wrap {\n  background: #1a1a2e;\n  border-radius: 12px;\n  padding: 1.1rem 1.25rem;\n}\n#cp-app .cp-output-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 0.6rem;\n}\n#cp-app .cp-output-title {\n  font-size: 0.72rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #a0aec0;\n}\n#cp-app .cp-copy-btn {\n  padding: 0.3rem 0.8rem;\n  border-radius: 20px;\n  border: 1.5px solid #4a5568;\n  background: transparent;\n  color: #a0aec0;\n  font-size: 0.75rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#cp-app .cp-copy-btn:hover {\n  border-color: #667eea;\n  color: #667eea;\n}\n#cp-app .cp-copy-btn.copied {\n  border-color: #48bb78;\n  color: #48bb78;\n}\n#cp-app .cp-output-code {\n  font-family: \"Fira Mono\", \"Cascadia Code\", \"Consolas\", monospace;\n  font-size: 0.82rem;\n  color: #90cdf4;\n  line-height: 1.7;\n  word-break: break-all;\n  white-space: pre-wrap;\n}\n#cp-app .cp-output-code .cp-prop {\n  color: #f6ad55;\n}\n#cp-app .cp-output-code .cp-val {\n  color: #68d391;\n}\n/* Points list */\n#cp-app .cp-points-list {\n  font-size: 0.75rem;\n  color: #718096;\n  background: #f8f9fc;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 0.6rem 0.75rem;\n  max-height: 90px;\n  overflow-y: auto;\n  line-height: 1.7;\n  font-family: monospace;\n}\n/* freee CTA */\n#cp-app .cp-freee-cta {\n  margin-top: 2rem;\n  background: linear-gradient(135deg, #eef1ff 0%, #f0fff4 100%);\n  border: 1px solid #c3dafe;\n  border-radius: 12px;\n  padding: 1.25rem 1.5rem;\n  display: flex;\n  align-items: center;\n  gap: 1rem;\n  flex-wrap: wrap;\n}\n#cp-app .cp-freee-cta-icon {\n  font-size: 2rem;\n  flex-shrink: 0;\n}\n#cp-app .cp-freee-cta-body {\n  flex: 1;\n  min-width: 180px;\n}\n#cp-app .cp-freee-cta-body strong {\n  display: block;\n  font-size: 0.95rem;\n  color: #2d3748;\n  margin-bottom: 0.2rem;\n}\n#cp-app .cp-freee-cta-body p {\n  font-size: 0.8rem;\n  color: #718096;\n  line-height: 1.5;\n}\n#cp-app .cp-freee-cta-link {\n  display: inline-block;\n  padding: 0.5rem 1.1rem;\n  background: #38a169;\n  color: #fff;\n  border-radius: 8px;\n  font-size: 0.82rem;\n  font-weight: 700;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: background 0.15s;\n}\n#cp-app .cp-freee-cta-link:hover {\n  background: #2f855a;\n  color: #fff;\n}\n\u003c/style\u003e\n\u003cdiv class=\"cp-layout\"\u003e\n  \u003c!-- LEFT: Controls --\u003e\n  \u003cdiv class=\"cp-controls\"\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;!-- Shape Type --\u0026gt;\n\u0026lt;div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;図形タイプ\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-shape-tabs\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-tab active\u0026quot; data-type=\u0026quot;polygon\u0026quot; onclick=\u0026quot;cpjaSetType('polygon')\u0026quot;\u0026gt;ポリゴン\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-tab\u0026quot; data-type=\u0026quot;circle\u0026quot; onclick=\u0026quot;cpjaSetType('circle')\u0026quot;\u0026gt;円\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-tab\u0026quot; data-type=\u0026quot;ellipse\u0026quot; onclick=\u0026quot;cpjaSetType('ellipse')\u0026quot;\u0026gt;楕円\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-tab\u0026quot; data-type=\u0026quot;inset\u0026quot; onclick=\u0026quot;cpjaSetType('inset')\u0026quot;\u0026gt;インセット\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-tab\u0026quot; data-type=\u0026quot;custom\u0026quot; onclick=\u0026quot;cpjaSetType('custom')\u0026quot;\u0026gt;カスタム\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Polygon Presets --\u0026gt;\n\u0026lt;div id=\u0026quot;cpja-polygon-panel\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;プリセット図形\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-presets-grid\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-preset-btn active\u0026quot; data-preset=\u0026quot;triangle\u0026quot; onclick=\u0026quot;cpjaLoadPreset('triangle')\u0026quot;\u0026gt;\n      \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;16,4 30,28 2,28\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n      三角形\n    \u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;diamond\u0026quot; onclick=\u0026quot;cpjaLoadPreset('diamond')\u0026quot;\u0026gt;\n      \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;16,2 30,16 16,30 2,16\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n      菱形\n    \u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;pentagon\u0026quot; onclick=\u0026quot;cpjaLoadPreset('pentagon')\u0026quot;\u0026gt;\n      \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;16,2 29,11 24,27 8,27 3,11\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n      五角形\n    \u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;hexagon\u0026quot; onclick=\u0026quot;cpjaLoadPreset('hexagon')\u0026quot;\u0026gt;\n      \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;16,2 28,9 28,23 16,30 4,23 4,9\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n      六角形\n    \u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;octagon\u0026quot; onclick=\u0026quot;cpjaLoadPreset('octagon')\u0026quot;\u0026gt;\n      \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;10,2 22,2 30,10 30,22 22,30 10,30 2,22 2,10\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n      八角形\n    \u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;star\u0026quot; onclick=\u0026quot;cpjaLoadPreset('star')\u0026quot;\u0026gt;\n      \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;16,2 19.5,12 30,12 21.5,18.5 24.5,29 16,22.5 7.5,29 10.5,18.5 2,12 12.5,12\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n      星形\n    \u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;arrow\u0026quot; onclick=\u0026quot;cpjaLoadPreset('arrow')\u0026quot;\u0026gt;\n      \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;2,10 18,10 18,4 30,16 18,28 18,22 2,22\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n      矢印\n    \u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;cross\u0026quot; onclick=\u0026quot;cpjaLoadPreset('cross')\u0026quot;\u0026gt;\n      \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;10,2 22,2 22,10 30,10 30,22 22,22 22,30 10,30 10,22 2,22 2,10 10,10\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n      十字\n    \u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;heart\u0026quot; onclick=\u0026quot;cpjaLoadPreset('heart')\u0026quot;\u0026gt;\n      \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;path d=\u0026quot;M16,28 C16,28 3,18 3,10 C3,6 6,3 10,3 C12.5,3 15,5 16,7 C17,5 19.5,3 22,3 C26,3 29,6 29,10 C29,18 16,28 16,28Z\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n      ハート\n    \u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-preset-btn\u0026quot; data-preset=\u0026quot;chevron\u0026quot; onclick=\u0026quot;cpjaLoadPreset('chevron')\u0026quot;\u0026gt;\n      \u0026lt;svg class=\u0026quot;cp-preset-icon\u0026quot; viewBox=\u0026quot;0 0 32 32\u0026quot;\u0026gt;\u0026lt;polygon points=\u0026quot;2,6 18,6 30,16 18,26 2,26 14,16\u0026quot; fill=\u0026quot;#667eea\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n      シェブロン\n    \u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Circle controls --\u0026gt;\n\u0026lt;div id=\u0026quot;cpja-circle-panel\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;円の設定\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;半径\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-circle-r\u0026quot; min=\u0026quot;10\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;50\u0026quot; oninput=\u0026quot;cpjaUpdateCircle()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-circle-r-val\u0026quot;\u0026gt;50%\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;中心 X\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-circle-cx\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;50\u0026quot; oninput=\u0026quot;cpjaUpdateCircle()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-circle-cx-val\u0026quot;\u0026gt;50%\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;中心 Y\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-circle-cy\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;50\u0026quot; oninput=\u0026quot;cpjaUpdateCircle()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-circle-cy-val\u0026quot;\u0026gt;50%\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Ellipse controls --\u0026gt;\n\u0026lt;div id=\u0026quot;cpja-ellipse-panel\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;楕円の設定\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;半径 X\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-ellipse-rx\u0026quot; min=\u0026quot;5\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;50\u0026quot; oninput=\u0026quot;cpjaUpdateEllipse()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-ellipse-rx-val\u0026quot;\u0026gt;50%\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;半径 Y\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-ellipse-ry\u0026quot; min=\u0026quot;5\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;30\u0026quot; oninput=\u0026quot;cpjaUpdateEllipse()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-ellipse-ry-val\u0026quot;\u0026gt;30%\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;中心 X\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-ellipse-cx\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;50\u0026quot; oninput=\u0026quot;cpjaUpdateEllipse()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-ellipse-cx-val\u0026quot;\u0026gt;50%\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;中心 Y\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-ellipse-cy\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;50\u0026quot; oninput=\u0026quot;cpjaUpdateEllipse()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-ellipse-cy-val\u0026quot;\u0026gt;50%\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Inset controls --\u0026gt;\n\u0026lt;div id=\u0026quot;cpja-inset-panel\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;インセット設定\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-inset-grid\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot; style=\u0026quot;flex-direction:column;align-items:flex-start;gap:0.2rem\u0026quot;\u0026gt;\n      \u0026lt;label\u0026gt;上\u0026lt;/label\u0026gt;\n      \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-inset-t\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;49\u0026quot; value=\u0026quot;10\u0026quot; oninput=\u0026quot;cpjaUpdateInset()\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-inset-t-val\u0026quot; style=\u0026quot;min-width:auto\u0026quot;\u0026gt;10%\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot; style=\u0026quot;flex-direction:column;align-items:flex-start;gap:0.2rem\u0026quot;\u0026gt;\n      \u0026lt;label\u0026gt;右\u0026lt;/label\u0026gt;\n      \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-inset-r\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;49\u0026quot; value=\u0026quot;10\u0026quot; oninput=\u0026quot;cpjaUpdateInset()\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-inset-r-val\u0026quot; style=\u0026quot;min-width:auto\u0026quot;\u0026gt;10%\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot; style=\u0026quot;flex-direction:column;align-items:flex-start;gap:0.2rem\u0026quot;\u0026gt;\n      \u0026lt;label\u0026gt;下\u0026lt;/label\u0026gt;\n      \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-inset-b\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;49\u0026quot; value=\u0026quot;10\u0026quot; oninput=\u0026quot;cpjaUpdateInset()\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-inset-b-val\u0026quot; style=\u0026quot;min-width:auto\u0026quot;\u0026gt;10%\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot; style=\u0026quot;flex-direction:column;align-items:flex-start;gap:0.2rem\u0026quot;\u0026gt;\n      \u0026lt;label\u0026gt;左\u0026lt;/label\u0026gt;\n      \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-inset-l\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;49\u0026quot; value=\u0026quot;10\u0026quot; oninput=\u0026quot;cpjaUpdateInset()\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-inset-l-val\u0026quot; style=\u0026quot;min-width:auto\u0026quot;\u0026gt;10%\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-slider-row\u0026quot; style=\u0026quot;margin-top:0.5rem\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;角丸半径\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;cpja-inset-br\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;0\u0026quot; oninput=\u0026quot;cpjaUpdateInset()\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;cp-slider-val\u0026quot; id=\u0026quot;cpja-inset-br-val\u0026quot;\u0026gt;0%\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Custom polygon panel --\u0026gt;\n\u0026lt;div id=\u0026quot;cpja-custom-panel\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;カスタムポリゴン\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-custom-hint\u0026quot;\u0026gt;\n    プレビューエリアをクリックしてポイントを追加。ドラッグで移動、右クリックで削除できます。\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-custom-actions\u0026quot; style=\u0026quot;margin-top:0.6rem\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-btn cp-btn-outline\u0026quot; onclick=\u0026quot;cpjaUndoPoint()\u0026quot;\u0026gt;元に戻す\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-btn cp-btn-danger\u0026quot; onclick=\u0026quot;cpjaClearPoints()\u0026quot;\u0026gt;全消去\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-points-list\u0026quot; id=\u0026quot;cpja-points-list\u0026quot;\u0026gt;ポイントなし — プレビューをクリックして開始。\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Background color --\u0026gt;\n\u0026lt;div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-section-label\u0026quot;\u0026gt;プレビューオプション\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-color-row\u0026quot;\u0026gt;\n    \u0026lt;label\u0026gt;図形の色\u0026lt;/label\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;cpja-shape-color\u0026quot; value=\u0026quot;#667eea\u0026quot; oninput=\u0026quot;cpjaUpdateColor()\u0026quot;\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\u003c!-- /cp-controls --\u003e\n  \u003c!-- RIGHT: Preview + Output --\u003e\n  \u003cdiv class=\"cp-right\"\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div class=\u0026quot;cp-preview-wrap\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-preview-label\u0026quot;\u0026gt;ライブプレビュー — \u0026lt;span id=\u0026quot;cpja-preview-size-label\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-canvas-wrap\u0026quot; id=\u0026quot;cpja-canvas\u0026quot; onclick=\u0026quot;cpjaCanvasClick(event)\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;cp-shape-el\u0026quot; id=\u0026quot;cpja-shape\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;cp-output-wrap\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-output-header\u0026quot;\u0026gt;\n    \u0026lt;span class=\u0026quot;cp-output-title\u0026quot;\u0026gt;CSS出力\u0026lt;/span\u0026gt;\n    \u0026lt;button class=\u0026quot;cp-copy-btn\u0026quot; id=\u0026quot;cpja-copy-btn\u0026quot; onclick=\u0026quot;cpjaCopyCSS()\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;cp-output-code\u0026quot; id=\u0026quot;cpja-output-code\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\u003c!-- /cp-right --\u003e\n\u003c/div\u003e\u003c!-- /cp-layout --\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv class=\"cp-freee-cta\"\u003e\n  \u003cdiv class=\"cp-freee-cta-icon\"\u003e🟢\u003c/div\u003e\n  \u003cdiv class=\"cp-freee-cta-body\"\u003e\n    \u003cstrong\u003eフリーランス・個人事業主の方へ — freeeで経理・確定申告を自動化\u003c/strong\u003e\n    \u003cp\u003eツール制作などの副業・フリーランス収入も、freeeなら帳簿付けから確定申告まで簡単に管理できます。\u003c/p\u003e","title":"CSS Clip-Pathジェネレーター — シェイプビルダー"},{"content":" スクリーンタイム計算ツール 1日の画面時間を入力するだけで、年間・生涯にわたる画面時間と、その時間で何ができるかを可視化します。\n1日の画面時間を入力してください 各カテゴリのスライダーを動かして、平均的な1日の時間（時間単位）を設定してください。\n💼 仕事・学業 8時間 📱 SNS・ソーシャルメディア 2時間 🎬 動画視聴・配信サービス 2時間 🎮 ゲーム 1時間 🌐 Webブラウジング 1時間 📲 その他の画面利用 0.5時間 現在の年齢（生涯予測に使用）：\n歳 スクリーンタイムを計算する\nあなたのスクリーンタイム集計 - 時間 / 1日 - 時間 / 1週間 - 時間 / 1ヶ月 - 時間 / 1年 - 日分 / 1年 - 起きている時間の割合 カテゴリ別内訳 生涯スクリーンタイム予測 - - スクリーンタイムを減らすためのヒント その時間で何ができる？ 仕事以外のスクリーンタイム年間 - 時間でできること：\n業務時間を効率化して、もっと自由な時間を\n仕事での画面時間を減らすには、バックオフィス業務の自動化が近道です。\n\u003e 業務時間を効率化 → freee会計で作業時間を短縮 リセットして最初から\n","permalink":"https://productivity-works.com/ja/tools/screen-time-calculator/","summary":"\u003cdiv id=\"st-app\"\u003e\n\u003cstyle\u003e\n#st-app {\n  font-family: \"Hiragino Sans\", \"Noto Sans JP\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  padding: 24px 16px;\n  color: #1a1a2e;\n}\n#st-app h2 {\n  font-size: 1.4rem;\n  font-weight: 700;\n  margin: 32px 0 12px;\n  color: #1a1a2e;\n}\n#st-app h3 {\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin: 20px 0 8px;\n  color: #16213e;\n}\n#st-app p {\n  margin: 0 0 12px;\n  line-height: 1.7;\n}\n#st-app .intro-box {\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n  color: #fff;\n  border-radius: 14px;\n  padding: 28px 24px;\n  margin-bottom: 32px;\n}\n#st-app .intro-box h1 {\n  font-size: 1.5rem;\n  font-weight: 800;\n  margin: 0 0 8px;\n  color: #fff;\n}\n#st-app .intro-box p {\n  margin: 0;\n  opacity: 0.9;\n  font-size: 0.95rem;\n}\n#st-app .inputs-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n  gap: 16px;\n  margin-bottom: 24px;\n}\n#st-app .input-card {\n  background: #f8f9ff;\n  border: 2px solid #e8eaf6;\n  border-radius: 12px;\n  padding: 16px 18px;\n  transition: border-color 0.2s;\n}\n#st-app .input-card:focus-within {\n  border-color: #667eea;\n}\n#st-app .input-card label {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 0.88rem;\n  font-weight: 600;\n  color: #444;\n  margin-bottom: 10px;\n}\n#st-app .input-card .icon { font-size: 1.3rem; }\n#st-app .input-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n#st-app .input-card input[type=\"range\"] {\n  flex: 1;\n  -webkit-appearance: none;\n  height: 6px;\n  border-radius: 3px;\n  background: #d1d5f0;\n  outline: none;\n  cursor: pointer;\n}\n#st-app .input-card input[type=\"range\"]::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  background: #667eea;\n  cursor: pointer;\n  box-shadow: 0 1px 4px rgba(102,126,234,0.4);\n}\n#st-app .val-badge {\n  min-width: 50px;\n  text-align: center;\n  background: #667eea;\n  color: #fff;\n  border-radius: 8px;\n  padding: 3px 8px;\n  font-size: 0.85rem;\n  font-weight: 700;\n}\n#st-app .calc-btn {\n  display: block;\n  width: 100%;\n  padding: 15px;\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n  color: #fff;\n  font-size: 1.05rem;\n  font-weight: 700;\n  border: none;\n  border-radius: 12px;\n  cursor: pointer;\n  letter-spacing: 0.5px;\n  margin-bottom: 32px;\n  transition: opacity 0.2s, transform 0.1s;\n}\n#st-app .calc-btn:hover { opacity: 0.92; transform: translateY(-1px); }\n#st-app .calc-btn:active { transform: translateY(0); }\n#st-app .results-section { display: none; }\n#st-app .results-section.visible { display: block; }\n#st-app .stats-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n  gap: 14px;\n  margin-bottom: 28px;\n}\n#st-app .stat-card {\n  background: #fff;\n  border: 2px solid #e8eaf6;\n  border-radius: 12px;\n  padding: 18px 14px;\n  text-align: center;\n}\n#st-app .stat-card .stat-val {\n  font-size: 1.8rem;\n  font-weight: 800;\n  color: #667eea;\n  line-height: 1.1;\n}\n#st-app .stat-card .stat-label {\n  font-size: 0.75rem;\n  color: #888;\n  margin-top: 4px;\n  font-weight: 500;\n  letter-spacing: 0.3px;\n}\n#st-app .stat-card.highlight {\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n  border-color: transparent;\n}\n#st-app .stat-card.highlight .stat-val,\n#st-app .stat-card.highlight .stat-label { color: #fff; }\n#st-app .chart-wrap {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 20px;\n  margin-bottom: 32px;\n}\n@media (min-width: 560px) {\n  #st-app .chart-wrap { flex-direction: row; align-items: flex-start; }\n}\n#st-app canvas#st-pie { max-width: 220px; max-height: 220px; }\n#st-app .legend {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n#st-app .legend-item {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  font-size: 0.88rem;\n}\n#st-app .legend-dot {\n  width: 13px;\n  height: 13px;\n  border-radius: 50%;\n  flex-shrink: 0;\n}\n#st-app .legend-label { flex: 1; color: #444; font-weight: 500; }\n#st-app .legend-pct { font-weight: 700; color: #222; }\n#st-app .recommend-box {\n  border-radius: 12px;\n  padding: 20px 22px;\n  margin-bottom: 24px;\n}\n#st-app .recommend-box.ok   { background: #e8f8f0; border: 2px solid #34d399; }\n#st-app .recommend-box.warn { background: #fff8e1; border: 2px solid #fbbf24; }\n#st-app .recommend-box.danger { background: #fef2f2; border: 2px solid #f87171; }\n#st-app .recommend-box .rec-title {\n  font-size: 1rem;\n  font-weight: 700;\n  margin-bottom: 6px;\n}\n#st-app .recommend-box.ok .rec-title     { color: #059669; }\n#st-app .recommend-box.warn .rec-title   { color: #d97706; }\n#st-app .recommend-box.danger .rec-title { color: #dc2626; }\n#st-app .lifetime-box {\n  background: #1a1a2e;\n  color: #fff;\n  border-radius: 14px;\n  padding: 24px 22px;\n  margin-bottom: 28px;\n}\n#st-app .lifetime-box h3 { color: #a78bfa; margin-top: 0; }\n#st-app .lifetime-box .life-stat {\n  font-size: 2rem;\n  font-weight: 800;\n  color: #c4b5fd;\n  margin: 4px 0;\n}\n#st-app .lifetime-box p { color: #ccc; font-size: 0.88rem; }\n#st-app .tips-list {\n  list-style: none;\n  padding: 0;\n  margin: 0 0 28px;\n}\n#st-app .tips-list li {\n  display: flex;\n  align-items: flex-start;\n  gap: 10px;\n  padding: 10px 14px;\n  background: #f8f9ff;\n  border-radius: 10px;\n  margin-bottom: 8px;\n  font-size: 0.91rem;\n  line-height: 1.6;\n}\n#st-app .tips-list li .tip-icon { font-size: 1.2rem; flex-shrink: 0; margin-top: 1px; }\n#st-app .instead-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(175px, 1fr));\n  gap: 12px;\n  margin-bottom: 32px;\n}\n#st-app .instead-card {\n  background: #f0f4ff;\n  border-radius: 12px;\n  padding: 16px;\n  text-align: center;\n}\n#st-app .instead-card .inst-icon { font-size: 2rem; margin-bottom: 6px; }\n#st-app .instead-card .inst-val { font-size: 1.4rem; font-weight: 800; color: #667eea; }\n#st-app .instead-card .inst-label { font-size: 0.8rem; color: #555; margin-top: 2px; }\n#st-app .freee-cta {\n  background: #fff7ed;\n  border: 2px solid #fb923c;\n  border-radius: 12px;\n  padding: 20px 22px;\n  margin: 32px 0;\n  font-size: 0.93rem;\n  line-height: 1.7;\n}\n#st-app .freee-cta strong { color: #ea580c; }\n#st-app .freee-cta a {\n  color: #ea580c;\n  font-weight: 700;\n  text-decoration: none;\n}\n#st-app .freee-cta a:hover { text-decoration: underline; }\n#st-app .reset-btn {\n  background: none;\n  border: 2px solid #667eea;\n  color: #667eea;\n  border-radius: 10px;\n  padding: 10px 24px;\n  font-size: 0.92rem;\n  font-weight: 600;\n  cursor: pointer;\n  margin-top: 8px;\n  transition: background 0.2s, color 0.2s;\n}\n#st-app .reset-btn:hover { background: #667eea; color: #fff; }\n\u003c/style\u003e\n\u003cdiv class=\"intro-box\"\u003e\n  \u003ch1\u003eスクリーンタイム計算ツール\u003c/h1\u003e\n  \u003cp\u003e1日の画面時間を入力するだけで、年間・生涯にわたる画面時間と、その時間で何ができるかを可視化します。\u003c/p\u003e","title":"スクリーンタイム計算ツール - 1日の画面時間を可視化"},{"content":" QRコード生成ツール テキスト・URL 0 / 2953 文字 出力サイズ 200 × 200 px 300 × 300 px 400 × 400 px 500 × 500 px 誤り訂正レベル L — 7% M — 15% Q — 25% H — 30% 前景色（モジュール色） 背景色 QRコードを生成 クリア 生成されたQRコード PNGでダウンロード クリップボードにコピー 生成履歴 まだQRコードが生成されていません。 履歴をクリア 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; バーコード生成 → バーコードジェネレーター 名刺作成 → 名刺ジェネレーター ","permalink":"https://productivity-works.com/ja/tools/qr-code-generator/","summary":"\u003cdiv id=\"qr-app\"\u003e\n\u003cstyle\u003e\n#qr-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Meiryo\", Roboto, sans-serif;\n  max-width: 740px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#qr-app h2.qr-section-title {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 22px 0 10px;\n  padding-bottom: 5px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#qr-app .qr-card {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 20px;\n  margin-bottom: 16px;\n}\n#qr-app label.qr-label {\n  display: block;\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 5px;\n}\n#qr-app textarea.qr-textarea,\n#qr-app input.qr-input,\n#qr-app select.qr-select {\n  width: 100%;\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 14px;\n  background: #fff;\n  color: #1e293b;\n  box-sizing: border-box;\n  margin-bottom: 12px;\n  transition: border-color 0.2s;\n  font-family: inherit;\n}\n#qr-app textarea.qr-textarea { resize: vertical; min-height: 80px; }\n#qr-app textarea.qr-textarea:focus,\n#qr-app input.qr-input:focus,\n#qr-app select.qr-select:focus {\n  outline: none;\n  border-color: #3b82f6;\n}\n#qr-app .qr-row {\n  display: flex;\n  gap: 14px;\n  flex-wrap: wrap;\n}\n#qr-app .qr-row \u003e div { flex: 1; min-width: 150px; }\n#qr-app .qr-color-row {\n  display: flex;\n  gap: 14px;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  margin-bottom: 12px;\n}\n#qr-app .qr-color-group { flex: 1; min-width: 130px; }\n#qr-app .qr-color-group label.qr-label { margin-bottom: 4px; }\n#qr-app .qr-color-input-wrap {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n#qr-app .qr-color-swatch {\n  width: 36px; height: 36px;\n  border-radius: 6px;\n  border: 1.5px solid #cbd5e1;\n  cursor: pointer;\n  padding: 0;\n  background: none;\n}\n#qr-app .qr-color-hex {\n  width: 90px;\n  padding: 6px 8px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  font-family: monospace;\n  background: #fff;\n  color: #1e293b;\n}\n#qr-app .qr-btn {\n  display: inline-block;\n  padding: 10px 22px;\n  border-radius: 7px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  border: none;\n  transition: background 0.2s, opacity 0.2s;\n}\n#qr-app .qr-btn-primary {\n  background: #3b82f6;\n  color: #fff;\n}\n#qr-app .qr-btn-primary:hover { background: #2563eb; }\n#qr-app .qr-btn-secondary {\n  background: #e2e8f0;\n  color: #1e293b;\n}\n#qr-app .qr-btn-secondary:hover { background: #cbd5e1; }\n#qr-app .qr-btn-green {\n  background: #22c55e;\n  color: #fff;\n}\n#qr-app .qr-btn-green:hover { background: #16a34a; }\n#qr-app .qr-output-area {\n  text-align: center;\n  padding: 24px 16px;\n}\n#qr-app canvas#qr-canvas {\n  display: block;\n  margin: 0 auto 16px;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  image-rendering: pixelated;\n}\n#qr-app .qr-char-count {\n  font-size: 12px;\n  color: #64748b;\n  text-align: right;\n  margin-top: -10px;\n  margin-bottom: 10px;\n}\n#qr-app .qr-error-msg {\n  background: #fef2f2;\n  border: 1px solid #fca5a5;\n  border-radius: 8px;\n  color: #dc2626;\n  padding: 10px 14px;\n  font-size: 13px;\n  margin-bottom: 12px;\n  display: none;\n}\n#qr-app .qr-info-bar {\n  font-size: 12px;\n  color: #64748b;\n  margin-bottom: 10px;\n}\n#qr-app .qr-history-list {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n#qr-app .qr-history-list li {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 8px 10px;\n  border-bottom: 1px solid #f1f5f9;\n  font-size: 13px;\n  gap: 8px;\n}\n#qr-app .qr-history-list li:last-child { border-bottom: none; }\n#qr-app .qr-history-text {\n  flex: 1;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  color: #334155;\n  cursor: pointer;\n}\n#qr-app .qr-history-text:hover { color: #3b82f6; text-decoration: underline; }\n#qr-app .qr-history-del {\n  background: none;\n  border: none;\n  color: #94a3b8;\n  cursor: pointer;\n  font-size: 16px;\n  padding: 0 4px;\n  line-height: 1;\n}\n#qr-app .qr-history-del:hover { color: #ef4444; }\n#qr-app .qr-empty-history {\n  text-align: center;\n  color: #94a3b8;\n  font-size: 13px;\n  padding: 16px 0;\n}\n#qr-app .qr-ec-info {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n  margin-bottom: 12px;\n}\n#qr-app .qr-ec-badge {\n  padding: 4px 10px;\n  border-radius: 20px;\n  font-size: 12px;\n  font-weight: 600;\n  background: #f1f5f9;\n  color: #475569;\n  border: 1.5px solid #e2e8f0;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#qr-app .qr-ec-badge.active {\n  background: #3b82f6;\n  color: #fff;\n  border-color: #3b82f6;\n}\n@media (max-width: 500px) {\n  #qr-app .qr-row \u003e div { min-width: 100%; }\n  #qr-app .qr-color-group { min-width: 100%; }\n}\n\u003c/style\u003e\n\u003ch2 class=\"qr-section-title\"\u003eQRコード生成ツール\u003c/h2\u003e\n\u003cdiv class=\"qr-card\"\u003e\n  \u003clabel class=\"qr-label\" for=\"qr-text\"\u003eテキスト・URL\u003c/label\u003e\n  \u003ctextarea class=\"qr-textarea\" id=\"qr-text\" placeholder=\"テキスト、URL、電話番号、メールアドレスなどを入力...\" maxlength=\"2953\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"qr-char-count\"\u003e\u003cspan id=\"qr-char-cur\"\u003e0\u003c/span\u003e / 2953 文字\u003c/div\u003e\n  \u003cdiv class=\"qr-row\"\u003e\n    \u003cdiv\u003e\n      \u003clabel class=\"qr-label\" for=\"qr-size\"\u003e出力サイズ\u003c/label\u003e\n      \u003cselect class=\"qr-select\" id=\"qr-size\"\u003e\n        \u003coption value=\"200\"\u003e200 × 200 px\u003c/option\u003e\n        \u003coption value=\"300\" selected\u003e300 × 300 px\u003c/option\u003e\n        \u003coption value=\"400\"\u003e400 × 400 px\u003c/option\u003e\n        \u003coption value=\"500\"\u003e500 × 500 px\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel class=\"qr-label\"\u003e誤り訂正レベル\u003c/label\u003e\n      \u003cdiv class=\"qr-ec-info\"\u003e\n        \u003cspan class=\"qr-ec-badge active\" data-ec=\"L\"\u003eL — 7%\u003c/span\u003e\n        \u003cspan class=\"qr-ec-badge\" data-ec=\"M\"\u003eM — 15%\u003c/span\u003e\n        \u003cspan class=\"qr-ec-badge\" data-ec=\"Q\"\u003eQ — 25%\u003c/span\u003e\n        \u003cspan class=\"qr-ec-badge\" data-ec=\"H\"\u003eH — 30%\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"qr-color-row\"\u003e\n    \u003cdiv class=\"qr-color-group\"\u003e\n      \u003clabel class=\"qr-label\"\u003e前景色（モジュール色）\u003c/label\u003e\n      \u003cdiv class=\"qr-color-input-wrap\"\u003e\n        \u003cinput type=\"color\" class=\"qr-color-swatch\" id=\"qr-fg-picker\" value=\"#000000\"\u003e\n        \u003cinput type=\"text\" class=\"qr-color-hex\" id=\"qr-fg-hex\" value=\"#000000\" maxlength=\"7\"\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"qr-color-group\"\u003e\n      \u003clabel class=\"qr-label\"\u003e背景色\u003c/label\u003e\n      \u003cdiv class=\"qr-color-input-wrap\"\u003e\n        \u003cinput type=\"color\" class=\"qr-color-swatch\" id=\"qr-bg-picker\" value=\"#ffffff\"\u003e\n        \u003cinput type=\"text\" class=\"qr-color-hex\" id=\"qr-bg-hex\" value=\"#ffffff\" maxlength=\"7\"\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"qr-error-msg\" id=\"qr-error\"\u003e\u003c/div\u003e\n  \u003cdiv style=\"display:flex;gap:10px;flex-wrap:wrap;\"\u003e\n    \u003cbutton class=\"qr-btn qr-btn-primary\" id=\"qr-generate-btn\"\u003eQRコードを生成\u003c/button\u003e\n    \u003cbutton class=\"qr-btn qr-btn-secondary\" id=\"qr-clear-btn\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"qr-card\" id=\"qr-output-card\" style=\"display:none;\"\u003e\n  \u003ch2 class=\"qr-section-title\" style=\"margin-top:0;\"\u003e生成されたQRコード\u003c/h2\u003e\n  \u003cdiv class=\"qr-output-area\"\u003e\n    \u003ccanvas id=\"qr-canvas\"\u003e\u003c/canvas\u003e\n    \u003cdiv class=\"qr-info-bar\" id=\"qr-info-bar\"\u003e\u003c/div\u003e\n    \u003cdiv style=\"display:flex;gap:10px;justify-content:center;flex-wrap:wrap;\"\u003e\n      \u003cbutton class=\"qr-btn qr-btn-green\" id=\"qr-download-btn\"\u003ePNGでダウンロード\u003c/button\u003e\n      \u003cbutton class=\"qr-btn qr-btn-secondary\" id=\"qr-copy-btn\"\u003eクリップボードにコピー\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"qr-card\" id=\"qr-history-card\"\u003e\n  \u003ch2 class=\"qr-section-title\" style=\"margin-top:0;\"\u003e生成履歴\u003c/h2\u003e\n  \u003cul class=\"qr-history-list\" id=\"qr-history-list\"\u003e\n    \u003cli\u003e\u003cdiv class=\"qr-empty-history\"\u003eまだQRコードが生成されていません。\u003c/div\u003e\u003c/li\u003e\n  \u003c/ul\u003e\n  \u003cdiv style=\"text-align:right;margin-top:6px;\"\u003e\n    \u003cbutton class=\"qr-btn qr-btn-secondary\" id=\"qr-clear-history-btn\" style=\"font-size:12px;padding:6px 14px;\"\u003e履歴をクリア\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n'use strict';\n\n// ─── GF(256) Arithmetic ───────────────────────────────────────────────────────\nvar GF_EXP = new Uint8Array(512);\nvar GF_LOG  = new Uint8Array(256);\n(function(){\n  var x = 1;\n  for (var i = 0; i \u003c 255; i++) {\n    GF_EXP[i] = x;\n    GF_LOG[x] = i;\n    x \u003c\u003c= 1;\n    if (x \u0026 0x100) x ^= 0x11d;\n  }\n  for (var i = 255; i \u003c 512; i++) GF_EXP[i] = GF_EXP[i - 255];\n})();\n\nfunction gfMul(a, b) {\n  if (a === 0 || b === 0) return 0;\n  return GF_EXP[(GF_LOG[a] + GF_LOG[b]) % 255];\n}\n\nfunction rsGeneratorPoly(degree) {\n  var poly = [1];\n  for (var i = 0; i \u003c degree; i++) {\n    var term = [1, GF_EXP[i]];\n    var res = new Array(poly.length + term.length - 1).fill(0);\n    for (var j = 0; j \u003c poly.length; j++)\n      for (var k = 0; k \u003c term.length; k++)\n        res[j + k] ^= gfMul(poly[j], term[k]);\n    poly = res;\n  }\n  return poly;\n}\n\nfunction rsEncode(data, ecLen) {\n  var gen = rsGeneratorPoly(ecLen);\n  var msg = data.slice();\n  for (var i = 0; i \u003c ecLen; i++) msg.push(0);\n  for (var i = 0; i \u003c data.length; i++) {\n    var coef = msg[i];\n    if (coef !== 0) {\n      for (var j = 0; j \u003c gen.length; j++)\n        msg[i + j] ^= gfMul(gen[j], coef);\n    }\n  }\n  return msg.slice(data.length);\n}\n\n// ─── QR Spec Tables ───────────────────────────────────────────────────────────\nvar EC_TABLE = {\n  L: [\n    null,\n    [7,1,19,0,0],[10,1,34,0,0],[15,1,55,0,0],[20,1,80,0,0],[26,1,108,0,0],\n    [18,2,68,0,0],[20,2,78,0,0],[24,2,97,0,0],[30,2,116,0,0],[18,2,68,2,69],\n    [20,4,81,0,0],[24,2,92,2,93],[26,4,107,0,0],[30,3,115,1,116],[22,5,87,1,88],\n    [24,5,98,1,99],[28,1,107,5,108],[30,5,120,1,121],[28,3,113,4,114],[28,3,107,5,108],\n    [28,4,116,4,117],[28,2,111,7,112],[30,4,121,5,122],[30,6,117,4,118],[26,8,106,4,107],\n    [28,10,114,2,115],[30,8,122,4,123],[30,3,117,10,118],[30,7,116,7,117],[30,5,115,10,116],\n    [30,13,115,3,116],[30,17,115,0,0],[30,17,115,1,116],[30,13,115,6,116],[30,12,121,7,122],\n    [30,6,121,14,122],[30,17,122,4,123],[30,4,122,18,123],[30,20,117,4,118],[30,19,118,6,119]\n  ],\n  M: [\n    null,\n    [10,1,16,0,0],[16,1,28,0,0],[26,1,44,0,0],[18,2,32,0,0],[24,2,43,0,0],\n    [16,4,27,0,0],[18,4,31,0,0],[22,2,38,2,39],[22,3,36,2,37],[26,4,43,1,44],\n    [30,1,50,4,51],[22,6,36,2,37],[22,8,37,1,38],[24,4,40,5,41],[24,5,41,5,42],\n    [28,7,45,3,46],[28,10,46,1,47],[26,9,43,4,44],[26,3,44,11,45],[26,3,41,13,42],\n    [26,17,42,0,0],[28,17,46,0,0],[28,4,47,14,48],[28,6,45,14,46],[28,8,46,13,47],\n    [28,19,46,4,47],[28,22,45,3,46],[28,3,45,23,46],[28,21,45,7,46],[28,19,45,10,46],\n    [28,2,45,29,46],[28,10,45,23,46],[28,14,45,21,46],[28,14,46,21,47],[28,12,45,26,46],\n    [28,6,45,34,46],[28,29,45,14,46],[28,13,45,32,46],[28,40,45,7,46],[28,18,45,31,46]\n  ],\n  Q: [\n    null,\n    [13,1,13,0,0],[22,1,22,0,0],[18,2,17,0,0],[26,2,24,0,0],[18,2,15,2,16],\n    [24,4,19,0,0],[18,2,14,4,15],[22,4,18,2,19],[20,4,16,4,17],[24,6,19,2,20],\n    [28,4,22,6,23],[26,4,20,6,21],[24,8,20,4,21],[20,11,16,5,17],[30,5,24,7,25],\n    [24,15,19,2,20],[28,1,22,15,23],[28,17,22,1,23],[26,17,21,4,22],[30,15,24,5,25],\n    [28,17,22,6,23],[30,7,24,16,25],[30,11,24,14,25],[30,11,24,16,25],[30,7,24,22,25],\n    [28,28,22,6,23],[30,8,23,26,24],[30,4,24,31,25],[30,1,23,37,24],[30,15,24,25,25],\n    [30,42,24,1,25],[30,10,24,35,25],[30,29,24,19,25],[30,44,24,7,25],[30,39,24,14,25],\n    [30,46,24,10,25],[30,49,24,10,25],[30,48,24,14,25],[30,43,24,22,25],[30,34,24,34,25]\n  ],\n  H: [\n    null,\n    [17,1,9,0,0],[28,1,16,0,0],[22,2,13,0,0],[16,4,9,0,0],[22,2,11,2,12],\n    [28,4,15,0,0],[26,4,13,1,14],[26,4,14,2,15],[24,4,12,4,13],[28,6,15,2,16],\n    [24,3,12,8,13],[28,7,14,4,15],[22,11,11,5,12],[30,11,12,5,13],[24,11,12,7,13],\n    [28,3,15,13,16],[28,2,14,17,15],[28,2,14,19,15],[26,9,13,16,14],[28,15,15,10,16],\n    [30,19,16,6,17],[24,34,13,0,0],[30,16,15,14,16],[28,30,16,2,17],[30,22,15,13,16],\n    [30,33,15,4,16],[30,12,15,28,16],[30,11,15,31,16],[30,19,15,26,16],[30,23,15,25,16],\n    [30,23,15,28,16],[30,19,15,35,16],[30,11,15,46,16],[30,59,16,1,17],[30,22,15,41,16],\n    [30,2,15,64,16],[30,24,15,46,16],[30,42,15,32,16],[30,10,15,67,16],[30,20,15,61,16]\n  ]\n};\n\nfunction getDataCapacity(ver, ecLevel) {\n  var row = EC_TABLE[ecLevel][ver];\n  return row[1] * row[2] + row[3] * row[4];\n}\n\nvar ALIGN_POS = [\n  null,[],[6,18],[6,22],[6,26],[6,30],[6,34],\n  [6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],\n  [6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],\n  [6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],\n  [6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],\n  [6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],\n  [6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],\n  [6,30,56,82,108,132],[6,34,60,86,112,136],[6,30,58,86,114,142],\n  [6,34,62,90,118,146],[6,30,54,78,102,126,150],\n  [6,24,50,76,102,128,154],[6,28,54,80,106,132,158],\n  [6,32,58,84,110,136,162],[6,26,54,82,110,138,166],\n  [6,30,58,86,114,142,170]\n];\n\nvar FORMAT_INFO = {\n  L: [0x77c4,0x72f3,0x7daa,0x789d,0x662f,0x6318,0x6c41,0x6976],\n  M: [0x5412,0x5125,0x5e7c,0x5b4b,0x45f9,0x40ce,0x4f97,0x4aa0],\n  Q: [0x355f,0x3068,0x3f31,0x3a06,0x24b4,0x2183,0x2eda,0x2bed],\n  H: [0x1689,0x13be,0x1ce7,0x19d0,0x0762,0x0255,0x0d0c,0x083b]\n};\n\nvar VERSION_INFO = [\n  null,null,null,null,null,null,null,\n  0x07c94,0x085bc,0x09a99,0x0a4d3,0x0bbf6,0x0c762,0x0d847,0x0e60d,0x0f928,\n  0x10b78,0x1145d,0x12a17,0x13532,0x149a6,0x15683,0x168c9,0x177ec,\n  0x18ec4,0x191e1,0x1afab,0x1b08e,0x1cc1a,0x1d33f,0x1ed75,0x1f250,\n  0x209d5,0x216f0,0x228ba,0x2379f,0x24b0b,0x2542e,0x26a64,0x27541,\n  0x28c69\n];\n\n// ─── QR Encoder ──────────────────────────────────────────────────────────────\nfunction QRCode(text, ecLevel) {\n  this.text = text;\n  this.ecLevel = ecLevel || 'M';\n  this.version = 1;\n  this.modules = null;\n  this.size = 0;\n  this._encode();\n}\n\nQRCode.prototype._encode = function() {\n  var data = this._encodeData();\n  this.modules = this._buildMatrix(data);\n};\n\nQRCode.prototype._encodeData = function() {\n  var text = this.text;\n  var ecLevel = this.ecLevel;\n  var mode = this._chooseMode(text);\n  var modeIndicator = { numeric: 0x1, alphanumeric: 0x2, byte: 0x4 };\n\n  var ver = 1;\n  for (ver = 1; ver \u003c= 40; ver++) {\n    var cap = getDataCapacity(ver, ecLevel);\n    var len = this._encodedLength(text, mode, ver);\n    if (Math.ceil(len / 8) \u003c= cap) break;\n  }\n  if (ver \u003e 40) throw new Error('データが長すぎます');\n  this.version = ver;\n  this.size = ver * 4 + 17;\n\n  var bits = [];\n  var push = function(val, count) {\n    for (var i = count - 1; i \u003e= 0; i--)\n      bits.push((val \u003e\u003e i) \u0026 1);\n  };\n\n  push(modeIndicator[mode], 4);\n  var ccBits = this._ccBits(mode, ver);\n  var byteData = mode === 'byte' ? this._toUTF8(text) : null;\n  var charCount = mode === 'byte' ? byteData.length : text.length;\n  push(charCount, ccBits);\n\n  if (mode === 'numeric') {\n    for (var i = 0; i \u003c text.length; ) {\n      var chunk = text.slice(i, i + 3);\n      var digits = chunk.length;\n      push(parseInt(chunk, 10), digits === 3 ? 10 : digits === 2 ? 7 : 4);\n      i += 3;\n    }\n  } else if (mode === 'alphanumeric') {\n    var ANC = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\n    for (var i = 0; i \u003c text.length; ) {\n      if (i + 1 \u003c text.length) {\n        push(ANC.indexOf(text[i]) * 45 + ANC.indexOf(text[i+1]), 11);\n        i += 2;\n      } else {\n        push(ANC.indexOf(text[i]), 6);\n        i++;\n      }\n    }\n  } else {\n    for (var i = 0; i \u003c byteData.length; i++)\n      push(byteData[i], 8);\n  }\n\n  var totalBits = getDataCapacity(ver, ecLevel) * 8;\n  for (var i = 0; i \u003c 4 \u0026\u0026 bits.length \u003c totalBits; i++) bits.push(0);\n  while (bits.length % 8 !== 0) bits.push(0);\n  var padBytes = [0xec, 0x11], pi = 0;\n  while (bits.length \u003c totalBits) { push(padBytes[pi % 2], 8); pi++; }\n\n  var dataBytes = [];\n  for (var i = 0; i \u003c bits.length; i += 8) {\n    var b = 0;\n    for (var j = 0; j \u003c 8; j++) b = (b \u003c\u003c 1) | bits[i + j];\n    dataBytes.push(b);\n  }\n\n  var row = EC_TABLE[ecLevel][ver];\n  var ecPerBlock = row[0];\n  var blocks1 = row[1], dataPerBlock1 = row[2];\n  var blocks2 = row[3], dataPerBlock2 = row[4];\n\n  var blocks = [];\n  var offset = 0;\n  for (var b = 0; b \u003c blocks1; b++) { blocks.push(dataBytes.slice(offset, offset + dataPerBlock1)); offset += dataPerBlock1; }\n  for (var b = 0; b \u003c blocks2; b++) { blocks.push(dataBytes.slice(offset, offset + dataPerBlock2)); offset += dataPerBlock2; }\n\n  var ecBlocks = blocks.map(function(blk) { return rsEncode(blk, ecPerBlock); });\n\n  var result = [];\n  var maxData = Math.max(dataPerBlock1, dataPerBlock2);\n  for (var i = 0; i \u003c maxData; i++)\n    for (var b = 0; b \u003c blocks.length; b++)\n      if (i \u003c blocks[b].length) result.push(blocks[b][i]);\n  for (var i = 0; i \u003c ecPerBlock; i++)\n    for (var b = 0; b \u003c ecBlocks.length; b++)\n      result.push(ecBlocks[b][i]);\n\n  return result;\n};\n\nQRCode.prototype._chooseMode = function(text) {\n  if (/^\\d+$/.test(text)) return 'numeric';\n  if (/^[0-9A-Z $%*+\\-./:]+$/.test(text)) return 'alphanumeric';\n  return 'byte';\n};\n\nQRCode.prototype._ccBits = function(mode, ver) {\n  var table = { numeric:[10,12,14], alphanumeric:[9,11,13], byte:[8,16,16] };\n  return table[mode][ver \u003c= 9 ? 0 : ver \u003c= 26 ? 1 : 2];\n};\n\nQRCode.prototype._encodedLength = function(text, mode, ver) {\n  var ccBits = this._ccBits(mode, ver);\n  if (mode === 'numeric') {\n    var rem = text.length % 3;\n    return 4 + ccBits + Math.floor(text.length/3)*10 + (rem===2?7:rem===1?4:0);\n  } else if (mode === 'alphanumeric') {\n    return 4 + ccBits + Math.floor(text.length/2)*11 + (text.length%2)*6;\n  } else {\n    return 4 + ccBits + this._toUTF8(text).length * 8;\n  }\n};\n\nQRCode.prototype._toUTF8 = function(str) {\n  var bytes = [];\n  for (var i = 0; i \u003c str.length; i++) {\n    var code = str.charCodeAt(i);\n    if (code \u003c 0x80) { bytes.push(code); }\n    else if (code \u003c 0x800) { bytes.push(0xc0|(code\u003e\u003e6), 0x80|(code\u00260x3f)); }\n    else if (code \u003e= 0xd800 \u0026\u0026 code \u003c= 0xdbff \u0026\u0026 i+1 \u003c str.length) {\n      var hi=code, lo=str.charCodeAt(++i);\n      var cp=0x10000+((hi-0xd800)\u003c\u003c10)+(lo-0xdc00);\n      bytes.push(0xf0|(cp\u003e\u003e18),0x80|((cp\u003e\u003e12)\u00260x3f),0x80|((cp\u003e\u003e6)\u00260x3f),0x80|(cp\u00260x3f));\n    } else { bytes.push(0xe0|(code\u003e\u003e12),0x80|((code\u003e\u003e6)\u00260x3f),0x80|(code\u00260x3f)); }\n  }\n  return bytes;\n};\n\nQRCode.prototype._buildMatrix = function(data) {\n  var ver = this.version, size = this.size, N = size;\n  var mat = [], func = [];\n  for (var r = 0; r \u003c N; r++) { mat.push(new Array(N).fill(false)); func.push(new Array(N).fill(false)); }\n\n  var setFunc = function(r, c, dark) { mat[r][c] = dark; func[r][c] = true; };\n\n  var placeFinder = function(row, col) {\n    for (var r = -1; r \u003c= 7; r++) for (var c = -1; c \u003c= 7; c++) {\n      if (row+r\u003c0||row+r\u003e=N||col+c\u003c0||col+c\u003e=N) continue;\n      var dark=(r\u003e=0\u0026\u0026r\u003c=6\u0026\u0026(c===0||c===6))||(c\u003e=0\u0026\u0026c\u003c=6\u0026\u0026(r===0||r===6))||(r\u003e=2\u0026\u0026r\u003c=4\u0026\u0026c\u003e=2\u0026\u0026c\u003c=4);\n      setFunc(row+r,col+c,dark);\n    }\n  };\n  placeFinder(0,0); placeFinder(0,N-7); placeFinder(N-7,0);\n\n  for (var i = 8; i \u003c N-8; i++) { setFunc(6,i,i%2===0); setFunc(i,6,i%2===0); }\n  setFunc(N-8,8,true);\n\n  var ap = ALIGN_POS[ver];\n  for (var ai = 0; ai \u003c ap.length; ai++) for (var aj = 0; aj \u003c ap.length; aj++) {\n    var cr=ap[ai],cc=ap[aj];\n    if (func[cr][cc]) continue;\n    for (var r=-2;r\u003c=2;r++) for (var c=-2;c\u003c=2;c++)\n      setFunc(cr+r,cc+c,r===-2||r===2||c===-2||c===2||(r===0\u0026\u0026c===0));\n  }\n\n  for (var i = 0; i \u003c= 8; i++) { if (!func[8][i]) func[8][i]=true; if (!func[i][8]) func[i][8]=true; }\n  for (var i = N-8; i \u003c N; i++) { func[8][i]=true; func[i][8]=true; }\n\n  if (ver \u003e= 7) for (var r=0;r\u003c6;r++) for (var c=N-11;c\u003cN-8;c++) { func[r][c]=true; func[c][r]=true; }\n\n  var dataBits = [];\n  for (var i = 0; i \u003c data.length; i++) for (var b=7;b\u003e=0;b--) dataBits.push((data[i]\u003e\u003eb)\u00261);\n\n  var bitIdx=0, right=N-1, goUp=true;\n  while (right \u003e= 1) {\n    if (right===6) right--;\n    for (var vert=0;vert\u003cN;vert++) {\n      var row=goUp?N-1-vert:vert;\n      for (var col=right;col\u003e=right-1;col--) {\n        if (!func[row][col]) { mat[row][col]=bitIdx\u003cdataBits.length?dataBits[bitIdx]===1:false; bitIdx++; }\n      }\n    }\n    right-=2; goUp=!goUp;\n  }\n\n  var bestMask=0, bestPenalty=Infinity;\n  for (var mask=0;mask\u003c8;mask++) {\n    var masked=applyMask(mat,func,mask,N);\n    var penalty=calcPenalty(masked,N);\n    if (penalty\u003cbestPenalty){bestPenalty=penalty;bestMask=mask;}\n  }\n\n  var final=applyMask(mat,func,bestMask,N);\n  placeFormat(final,FORMAT_INFO[this.ecLevel][bestMask],N);\n  if (ver\u003e=7) placeVersion(final,VERSION_INFO[ver],N);\n  return final;\n};\n\nfunction applyMask(mat,func,mask,N){\n  var out=[];\n  for(var r=0;r\u003cN;r++) out.push(mat[r].slice());\n  var conds=[\n    function(r,c){return(r+c)%2===0;},function(r,c){return r%2===0;},\n    function(r,c){return c%3===0;},function(r,c){return(r+c)%3===0;},\n    function(r,c){return(Math.floor(r/2)+Math.floor(c/3))%2===0;},\n    function(r,c){return(r*c)%2+(r*c)%3===0;},\n    function(r,c){return((r*c)%2+(r*c)%3)%2===0;},\n    function(r,c){return((r+c)%2+(r*c)%3)%2===0;}\n  ];\n  var cond=conds[mask];\n  for(var r=0;r\u003cN;r++) for(var c=0;c\u003cN;c++) if(!func[r][c]\u0026\u0026cond(r,c)) out[r][c]=!out[r][c];\n  return out;\n}\n\nfunction calcPenalty(mat,N){\n  var pen=0;\n  for(var r=0;r\u003cN;r++){for(var c=0;c\u003cN;){var color=mat[r][c],len=0;while(c\u003cN\u0026\u0026mat[r][c]===color){len++;c++;}if(len\u003e=5)pen+=len-2;}}\n  for(var c=0;c\u003cN;c++){for(var r=0;r\u003cN;){var color=mat[r][c],len=0;while(r\u003cN\u0026\u0026mat[r][c]===color){len++;r++;}if(len\u003e=5)pen+=len-2;}}\n  for(var r=0;r\u003cN-1;r++) for(var c=0;c\u003cN-1;c++) if(mat[r][c]===mat[r+1][c]\u0026\u0026mat[r][c]===mat[r][c+1]\u0026\u0026mat[r][c]===mat[r+1][c+1]) pen+=3;\n  var p1=[1,0,1,1,1,0,1,0,0,0,0],p2=[0,0,0,0,1,0,1,1,1,0,1];\n  for(var r=0;r\u003cN;r++) for(var c=0;c\u003c=N-11;c++){\n    var m1=true,m2=true,m3=true,m4=true;\n    for(var k=0;k\u003c11;k++){if(mat[r][c+k]!==(p1[k]===1))m1=false;if(mat[r][c+k]!==(p2[k]===1))m2=false;if(mat[c+k][r]!==(p1[k]===1))m3=false;if(mat[c+k][r]!==(p2[k]===1))m4=false;}\n    if(m1||m2)pen+=40;if(m3||m4)pen+=40;\n  }\n  var dark=0;\n  for(var r=0;r\u003cN;r++) for(var c=0;c\u003cN;c++) if(mat[r][c]) dark++;\n  pen+=Math.abs(Math.round(dark/(N*N)*20)-10)*10;\n  return pen;\n}\n\nfunction placeFormat(mat,bits,N){\n  var pos=[[8,0],[8,1],[8,2],[8,3],[8,4],[8,5],[8,7],[8,8],[7,8],[5,8],[4,8],[3,8],[2,8],[1,8],[0,8]];\n  for(var i=0;i\u003c15;i++){\n    var dark=((bits\u003e\u003e(14-i))\u00261)===1;\n    mat[pos[i][0]][pos[i][1]]=dark;\n    if(i\u003c8) mat[N-1-i][8]=dark; else mat[8][N-15+i]=dark;\n  }\n  mat[N-8][8]=true;\n}\n\nfunction placeVersion(mat,bits,N){\n  for(var i=0;i\u003c18;i++){\n    var dark=((bits\u003e\u003ei)\u00261)===1;\n    var r=Math.floor(i/3),c=N-11+(i%3);\n    mat[r][c]=dark; mat[c][r]=dark;\n  }\n}\n\n// ─── Canvas Rendering ─────────────────────────────────────────────────────────\nfunction renderQR(qr, canvas, size, fg, bg) {\n  var N=qr.size, quiet=4, total=N+quiet*2, mod=size/total;\n  canvas.width=size; canvas.height=size;\n  var ctx=canvas.getContext('2d');\n  ctx.fillStyle=bg; ctx.fillRect(0,0,size,size);\n  ctx.fillStyle=fg;\n  for(var r=0;r\u003cN;r++) for(var c=0;c\u003cN;c++)\n    if(qr.modules[r][c]) ctx.fillRect(Math.floor((c+quiet)*mod),Math.floor((r+quiet)*mod),Math.ceil(mod),Math.ceil(mod));\n}\n\n// ─── UI Logic ─────────────────────────────────────────────────────────────────\nvar currentEC='L', history=[];\n\ndocument.querySelectorAll('#qr-app .qr-ec-badge').forEach(function(badge){\n  badge.addEventListener('click',function(){\n    document.querySelectorAll('#qr-app .qr-ec-badge').forEach(function(b){b.classList.remove('active');});\n    badge.classList.add('active');\n    currentEC=badge.getAttribute('data-ec');\n  });\n});\n\nvar textArea=document.getElementById('qr-text');\nvar charCur=document.getElementById('qr-char-cur');\ntextArea.addEventListener('input',function(){charCur.textContent=textArea.value.length;});\n\nfunction syncColor(picker,hex){\n  picker.addEventListener('input',function(){hex.value=picker.value.toUpperCase();});\n  hex.addEventListener('input',function(){if(/^#[0-9A-Fa-f]{6}$/.test(hex.value))picker.value=hex.value;});\n}\nsyncColor(document.getElementById('qr-fg-picker'),document.getElementById('qr-fg-hex'));\nsyncColor(document.getElementById('qr-bg-picker'),document.getElementById('qr-bg-hex'));\n\ndocument.getElementById('qr-generate-btn').addEventListener('click',function(){\n  var text=textArea.value.trim();\n  var errEl=document.getElementById('qr-error');\n  errEl.style.display='none';\n  if(!text){errEl.textContent='テキストまたはURLを入力してください。';errEl.style.display='block';return;}\n  var size=parseInt(document.getElementById('qr-size').value,10);\n  var fg=document.getElementById('qr-fg-hex').value||'#000000';\n  var bg=document.getElementById('qr-bg-hex').value||'#ffffff';\n  try{\n    var qr=new QRCode(text,currentEC);\n    var canvas=document.getElementById('qr-canvas');\n    renderQR(qr,canvas,size,fg,bg);\n    document.getElementById('qr-output-card').style.display='block';\n    document.getElementById('qr-info-bar').textContent=\n      'バージョン '+qr.version+' · '+qr.size+'×'+qr.size+' モジュール · 誤り訂正レベル '+currentEC;\n    addHistory(text);\n  }catch(e){\n    errEl.textContent='エラー: '+e.message;\n    errEl.style.display='block';\n  }\n});\n\ndocument.getElementById('qr-clear-btn').addEventListener('click',function(){\n  textArea.value=''; charCur.textContent='0';\n  document.getElementById('qr-error').style.display='none';\n  document.getElementById('qr-output-card').style.display='none';\n});\n\ndocument.getElementById('qr-download-btn').addEventListener('click',function(){\n  var canvas=document.getElementById('qr-canvas');\n  var a=document.createElement('a');\n  a.download='qrcode.png'; a.href=canvas.toDataURL('image/png'); a.click();\n});\n\ndocument.getElementById('qr-copy-btn').addEventListener('click',function(){\n  var canvas=document.getElementById('qr-canvas');\n  canvas.toBlob(function(blob){\n    try{\n      navigator.clipboard.write([new ClipboardItem({'image/png':blob})]).then(function(){\n        var btn=document.getElementById('qr-copy-btn');\n        btn.textContent='コピーしました!';\n        setTimeout(function(){btn.textContent='クリップボードにコピー';},2000);\n      });\n    }catch(e){alert('このブラウザではクリップボードへのコピーがサポートされていません。ダウンロードをご利用ください。');}\n  });\n});\n\nfunction addHistory(text){\n  history=history.filter(function(h){return h!==text;});\n  history.unshift(text);\n  if(history.length\u003e20) history.pop();\n  renderHistory();\n}\n\nfunction renderHistory(){\n  var list=document.getElementById('qr-history-list');\n  if(history.length===0){list.innerHTML='\u003cli\u003e\u003cdiv class=\"qr-empty-history\"\u003eまだQRコードが生成されていません。\u003c/div\u003e\u003c/li\u003e';return;}\n  list.innerHTML=history.map(function(text,idx){\n    return '\u003cli\u003e\u003cspan class=\"qr-history-text\" data-idx=\"'+idx+'\" title=\"'+escHtml(text)+'\"\u003e'+escHtml(text.length\u003e60?text.slice(0,60)+'…':text)+'\u003c/span\u003e\u003cbutton class=\"qr-history-del\" data-idx=\"'+idx+'\" title=\"削除\"\u003e\u0026#215;\u003c/button\u003e\u003c/li\u003e';\n  }).join('');\n  list.querySelectorAll('.qr-history-text').forEach(function(el){\n    el.addEventListener('click',function(){\n      textArea.value=history[parseInt(el.getAttribute('data-idx'),10)];\n      charCur.textContent=textArea.value.length;\n      document.getElementById('qr-generate-btn').click();\n    });\n  });\n  list.querySelectorAll('.qr-history-del').forEach(function(el){\n    el.addEventListener('click',function(){history.splice(parseInt(el.getAttribute('data-idx'),10),1);renderHistory();});\n  });\n}\n\ndocument.getElementById('qr-clear-history-btn').addEventListener('click',function(){history=[];renderHistory();});\n\nfunction escHtml(s){return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;').replace(/\"/g,'\u0026quot;');}\n\nrenderHistory();\n})();\n\u003c/script\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e確定申告・会計をもっとラクに？\u003c/strong\u003e \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計\u003c/a\u003e\n なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\u003c/p\u003e","title":"QRコード生成ツール"},{"content":" CSSトランジションを視覚的に作成できる無料ツールです。プロパティ・継続時間・タイミング関数・遅延を設定し、複数のトランジションを組み合わせて、すぐに使えるCSSをコピーできます。\nプレビュー要素にホバーするとトランジションを確認できます。複数プロパティを組み合わせてプリセットも活用してみてください。 プリセット フェード スライド スケール カラーチェンジ 複合 トランジション設定 \u0026lt;label for=\u0026quot;tr-property\u0026quot;\u0026gt;プロパティ\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;tr-property\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;all\u0026quot;\u0026gt;all（すべて）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;opacity\u0026quot; selected\u0026gt;opacity（透明度）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;transform\u0026quot;\u0026gt;transform（変形）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;background-color\u0026quot;\u0026gt;background-color（背景色）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;color\u0026quot;\u0026gt;color（文字色）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;width\u0026quot;\u0026gt;width（幅）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;height\u0026quot;\u0026gt;height（高さ）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;border-radius\u0026quot;\u0026gt;border-radius（角丸）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;box-shadow\u0026quot;\u0026gt;box-shadow（影）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;padding\u0026quot;\u0026gt;padding（内余白）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;margin\u0026quot;\u0026gt;margin（外余白）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;font-size\u0026quot;\u0026gt;font-size（文字サイズ）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;letter-spacing\u0026quot;\u0026gt;letter-spacing（字間）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;border-color\u0026quot;\u0026gt;border-color（枠線色）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;outline\u0026quot;\u0026gt;outline（アウトライン）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;filter\u0026quot;\u0026gt;filter（フィルター）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;left\u0026quot;\u0026gt;left（左位置）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;top\u0026quot;\u0026gt;top（上位置）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;div class=\u0026quot;tr-slider-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;tr-slider-header\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;tr-duration\u0026quot;\u0026gt;継続時間\u0026lt;/label\u0026gt; \u0026lt;span class=\u0026quot;tr-slider-val\u0026quot; id=\u0026quot;tr-duration-val\u0026quot;\u0026gt;0.3s\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;tr-duration\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;300\u0026quot; value=\u0026quot;30\u0026quot; oninput=\u0026quot;trUpdateDuration(this.value)\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;tr-slider-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;tr-slider-header\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;tr-delay\u0026quot;\u0026gt;遅延\u0026lt;/label\u0026gt; \u0026lt;span class=\u0026quot;tr-slider-val\u0026quot; id=\u0026quot;tr-delay-val\u0026quot;\u0026gt;0s\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;tr-delay\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot; oninput=\u0026quot;trUpdateDelay(this.value)\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;label for=\u0026quot;tr-timing\u0026quot;\u0026gt;タイミング関数\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;tr-timing\u0026quot; onchange=\u0026quot;trTimingChanged()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;ease\u0026quot; selected\u0026gt;ease（標準）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;linear\u0026quot;\u0026gt;linear（一定）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;ease-in\u0026quot;\u0026gt;ease-in（加速）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;ease-out\u0026quot;\u0026gt;ease-out（減速）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;ease-in-out\u0026quot;\u0026gt;ease-in-out（加減速）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;step-start\u0026quot;\u0026gt;step-start（ステップ開始）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;step-end\u0026quot;\u0026gt;step-end（ステップ終了）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;cubic-bezier\u0026quot;\u0026gt;cubic-bezier（カスタム）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;div class=\u0026quot;tr-bezier-section\u0026quot; id=\u0026quot;tr-bezier-section\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;tr-bezier-labels\u0026quot;\u0026gt; \u0026lt;span\u0026gt;x1\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt;y1\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt;x2\u0026lt;/span\u0026gt;\u0026lt;span\u0026gt;y2\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;tr-bezier-inputs\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;tr-bz-x1\u0026quot; value=\u0026quot;0.25\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;1\u0026quot; step=\u0026quot;0.01\u0026quot; oninput=\u0026quot;trUpdateBezier()\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;tr-bz-y1\u0026quot; value=\u0026quot;0.1\u0026quot; min=\u0026quot;-2\u0026quot; max=\u0026quot;3\u0026quot; step=\u0026quot;0.01\u0026quot; oninput=\u0026quot;trUpdateBezier()\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;tr-bz-x2\u0026quot; value=\u0026quot;0.25\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;1\u0026quot; step=\u0026quot;0.01\u0026quot; oninput=\u0026quot;trUpdateBezier()\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;tr-bz-y2\u0026quot; value=\u0026quot;1\u0026quot; min=\u0026quot;-2\u0026quot; max=\u0026quot;3\u0026quot; step=\u0026quot;0.01\u0026quot; oninput=\u0026quot;trUpdateBezier()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;canvas id=\u0026quot;tr-bezier-canvas\u0026quot; width=\u0026quot;200\u0026quot; height=\u0026quot;160\u0026quot;\u0026gt;\u0026lt;/canvas\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;hr class=\u0026quot;tr-divider\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;tr-btn-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;tr-btn tr-btn-primary\u0026quot; onclick=\u0026quot;trAddTransition()\u0026quot;\u0026gt;+ 追加する\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;tr-btn tr-btn-secondary\u0026quot; onclick=\u0026quot;trClearAll()\u0026quot;\u0026gt;すべてクリア\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;tr-panel\u0026quot; style=\u0026quot;margin-top:16px;\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;追加済みトランジション\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;tr-transitions-list\u0026quot; id=\u0026quot;tr-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;font-size:12px;color:#94a3b8;\u0026quot; id=\u0026quot;tr-list-empty\u0026quot;\u0026gt;まだ追加されていません。設定して「追加する」をクリックしてください。\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; ライブプレビュー ホバー\nしてみて ホバーで動作確認 上の要素が生成したトランジションで動作します。 \u0026lt;div class=\u0026quot;tr-panel\u0026quot; style=\u0026quot;margin-top:16px;\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;生成されたCSS\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;tr-output-block\u0026quot; id=\u0026quot;tr-output\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;tr-copy-btn\u0026quot; id=\u0026quot;tr-copy-btn\u0026quot; onclick=\u0026quot;trCopyCSS()\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;span id=\u0026quot;tr-output-content\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div style=\u0026quot;font-size:12px;color:#64748b;\u0026quot;\u0026gt;このCSSをスタイルシートに貼り付けて使用してください。\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 使い方 プロパティを選択 — アニメーションするCSSプロパティ（opacity、transformなど）を選ぶ 継続時間を設定 — スライダーで0〜3秒の範囲で指定 遅延を設定 — 必要であれば開始を0〜2秒遅らせる タイミング関数を選択 — プリセットのイージングか、cubic-bezierでカスタム曲線を描く 「追加する」をクリック — リストにトランジションが追加される 繰り返し — 複数プロパティを重ねる場合は同じ手順を繰り返す プレビューをホバー — すべてのトランジションが同時に動くのを確認 CSSをコピー — スタイルシートに貼り付けて完成 よく使うパターン ボタンのホバーエフェクト transition: background-color 0.2s ease, box-shadow 0.2s ease, transform 0.15s ease; フェードイン（ページロード時） transition: opacity 0.5s ease-in-out; カードのリフトアップ transition: transform 0.25s ease-out, box-shadow 0.25s ease-out; スタッガード（時差付き）アニメーション transition: opacity 0.3s ease 0s, transform 0.3s ease 0.1s, background-color 0.3s ease 0.2s; パフォーマンスのヒント transform と opacity はGPUで処理されるため、ほかのプロパティより高速に動作します。width や height のレイアウトに影響するプロパティはリフロー（再レイアウト）を引き起こすため、パフォーマンスが落ちることがあります。なめらかな60fpsアニメーションを目指すなら transform を優先しましょう。\n関連ツール CSSアニメーション ジェネレーター — @keyframes を使ったキーフレームアニメーションを視覚的に作成 CSS Transform ジェネレーター — rotate・scale・skew・translateなどtransform値を視覚的に構築 \u0026#x1F4CA; 会計・経費管理もスマートに フリーランス・個人事業主のCSS作業と同じくらい、会計もシンプルにしませんか？\nfreeeなら確定申告・請求書・経費管理をすべてまとめて自動化。面倒な帳簿付けから解放されます。\nfreeeを無料で試す ※ 30日間無料トライアルあり。クレジットカード不要。 本ページはアフィリエイト広告（A8.net）を含む場合があります。掲載しているサービスの評価・内容はすべて独自の基準によるものです。\nA8.net | プライバシーポリシー ","permalink":"https://productivity-works.com/ja/tools/css-transition-generator/","summary":"\u003cdiv id=\"tr-app\"\u003e\n\u003cstyle\u003e\n#tr-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic UI\", \"Segoe UI\", sans-serif;\n  color: #1e293b;\n  line-height: 1.6;\n}\n#tr-app *, #tr-app *::before, #tr-app *::after {\n  box-sizing: border-box;\n}\n#tr-app .tr-layout {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 24px;\n  margin-top: 24px;\n}\n@media (max-width: 768px) {\n  #tr-app .tr-layout {\n    grid-template-columns: 1fr;\n  }\n}\n#tr-app .tr-panel {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n}\n#tr-app .tr-panel h3 {\n  margin: 0 0 16px 0;\n  font-size: 14px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #64748b;\n}\n#tr-app .tr-full-panel {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n  margin-top: 24px;\n}\n#tr-app .tr-full-panel h3 {\n  margin: 0 0 16px 0;\n  font-size: 14px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #64748b;\n}\n#tr-app label {\n  display: block;\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 6px;\n}\n#tr-app select {\n  width: 100%;\n  padding: 8px 12px;\n  border: 1px solid #cbd5e1;\n  border-radius: 8px;\n  background: #fff;\n  font-size: 14px;\n  color: #1e293b;\n  cursor: pointer;\n  outline: none;\n  margin-bottom: 16px;\n  appearance: none;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M6 8L1 3h10z'/%3E%3C/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: right 12px center;\n  padding-right: 36px;\n}\n#tr-app select:focus {\n  border-color: #6366f1;\n  box-shadow: 0 0 0 3px rgba(99,102,241,0.12);\n}\n#tr-app .tr-slider-row {\n  margin-bottom: 16px;\n}\n#tr-app .tr-slider-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 6px;\n}\n#tr-app .tr-slider-header label {\n  margin-bottom: 0;\n}\n#tr-app .tr-slider-val {\n  font-size: 13px;\n  font-weight: 700;\n  color: #6366f1;\n  min-width: 48px;\n  text-align: right;\n}\n#tr-app input[type=\"range\"] {\n  width: 100%;\n  accent-color: #6366f1;\n  height: 4px;\n  cursor: pointer;\n}\n#tr-app .tr-bezier-section {\n  margin-top: 4px;\n}\n#tr-app .tr-bezier-inputs {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr 1fr;\n  gap: 8px;\n  margin-bottom: 12px;\n}\n#tr-app .tr-bezier-inputs input[type=\"number\"] {\n  width: 100%;\n  padding: 6px 8px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  text-align: center;\n  color: #1e293b;\n  outline: none;\n}\n#tr-app .tr-bezier-inputs input[type=\"number\"]:focus {\n  border-color: #6366f1;\n  box-shadow: 0 0 0 3px rgba(99,102,241,0.12);\n}\n#tr-app .tr-bezier-labels {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr 1fr;\n  gap: 8px;\n  margin-bottom: 8px;\n}\n#tr-app .tr-bezier-labels span {\n  font-size: 11px;\n  color: #94a3b8;\n  text-align: center;\n}\n#tr-app canvas {\n  display: block;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  background: #fff;\n  margin: 0 auto;\n}\n#tr-app .tr-transitions-list {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  margin-bottom: 12px;\n  max-height: 240px;\n  overflow-y: auto;\n}\n#tr-app .tr-transition-item {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 8px 12px;\n  font-size: 13px;\n}\n#tr-app .tr-transition-item span {\n  flex: 1;\n  color: #334155;\n  font-family: \"Courier New\", monospace;\n  font-size: 12px;\n  word-break: break-all;\n}\n#tr-app .tr-btn-remove {\n  background: none;\n  border: none;\n  color: #ef4444;\n  cursor: pointer;\n  font-size: 16px;\n  line-height: 1;\n  padding: 0 4px;\n  flex-shrink: 0;\n}\n#tr-app .tr-btn-remove:hover { color: #b91c1c; }\n#tr-app .tr-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 9px 18px;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  border: none;\n  cursor: pointer;\n  transition: background 0.2s, transform 0.1s;\n}\n#tr-app .tr-btn:active { transform: scale(0.97); }\n#tr-app .tr-btn-primary { background: #6366f1; color: #fff; }\n#tr-app .tr-btn-primary:hover { background: #4f46e5; }\n#tr-app .tr-btn-secondary { background: #e2e8f0; color: #475569; }\n#tr-app .tr-btn-secondary:hover { background: #cbd5e1; }\n#tr-app .tr-btn-row { display: flex; gap: 8px; flex-wrap: wrap; }\n#tr-app .tr-presets { display: flex; flex-wrap: wrap; gap: 8px; }\n#tr-app .tr-preset-btn {\n  padding: 6px 14px;\n  border-radius: 20px;\n  border: 1.5px solid #6366f1;\n  background: #fff;\n  color: #6366f1;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n#tr-app .tr-preset-btn:hover { background: #6366f1; color: #fff; }\n#tr-app .tr-preview-box {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 140px;\n  background: linear-gradient(135deg, #e0e7ff 0%, #f0fdf4 100%);\n  border-radius: 10px;\n  margin-bottom: 12px;\n  position: relative;\n  overflow: hidden;\n}\n#tr-app .tr-preview-el {\n  width: 80px;\n  height: 80px;\n  border-radius: 12px;\n  background: #6366f1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #fff;\n  font-size: 11px;\n  font-weight: 700;\n  cursor: pointer;\n  user-select: none;\n  text-align: center;\n  line-height: 1.3;\n  padding: 4px;\n}\n#tr-app .tr-preview-hint {\n  position: absolute;\n  bottom: 8px;\n  right: 12px;\n  font-size: 11px;\n  color: #94a3b8;\n}\n#tr-app .tr-output-block {\n  position: relative;\n  background: #0f172a;\n  border-radius: 10px;\n  padding: 20px;\n  font-family: \"Courier New\", monospace;\n  font-size: 13px;\n  line-height: 1.8;\n  color: #e2e8f0;\n  white-space: pre-wrap;\n  word-break: break-all;\n  margin-bottom: 12px;\n  min-height: 80px;\n}\n#tr-app .tr-copy-btn {\n  position: absolute;\n  top: 12px;\n  right: 12px;\n  background: #334155;\n  border: none;\n  border-radius: 6px;\n  color: #94a3b8;\n  padding: 5px 12px;\n  font-size: 12px;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n#tr-app .tr-copy-btn:hover { background: #475569; color: #fff; }\n#tr-app .tr-copy-btn.tr-copied { background: #22c55e; color: #fff; }\n#tr-app .tr-syntax-prop { color: #93c5fd; }\n#tr-app .tr-syntax-colon { color: #94a3b8; }\n#tr-app .tr-syntax-val { color: #86efac; }\n#tr-app .tr-syntax-semi { color: #94a3b8; }\n#tr-app .tr-info-bar {\n  background: #eff6ff;\n  border: 1px solid #bfdbfe;\n  border-radius: 8px;\n  padding: 12px 16px;\n  font-size: 13px;\n  color: #1d4ed8;\n  margin-bottom: 16px;\n}\n#tr-app .tr-divider { border: none; border-top: 1px solid #e2e8f0; margin: 16px 0; }\n\n/* freee CTA */\n#tr-app .tr-freee-cta {\n  background: linear-gradient(135deg, #00b8a9 0%, #00d4c8 100%);\n  border-radius: 14px;\n  padding: 28px 24px;\n  margin-top: 40px;\n  color: #fff;\n  display: flex;\n  align-items: center;\n  gap: 20px;\n  flex-wrap: wrap;\n}\n#tr-app .tr-freee-cta-icon {\n  font-size: 48px;\n  flex-shrink: 0;\n}\n#tr-app .tr-freee-cta-body { flex: 1; min-width: 200px; }\n#tr-app .tr-freee-cta-body h4 {\n  margin: 0 0 6px 0;\n  font-size: 18px;\n  font-weight: 800;\n  color: #fff;\n}\n#tr-app .tr-freee-cta-body p {\n  margin: 0 0 14px 0;\n  font-size: 13px;\n  color: rgba(255,255,255,0.88);\n  line-height: 1.6;\n}\n#tr-app .tr-freee-btn {\n  display: inline-block;\n  background: #fff;\n  color: #00b8a9;\n  font-weight: 800;\n  font-size: 14px;\n  padding: 10px 22px;\n  border-radius: 8px;\n  text-decoration: none;\n  transition: transform 0.15s, box-shadow 0.15s;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.12);\n}\n#tr-app .tr-freee-btn:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 4px 16px rgba(0,0,0,0.18);\n  color: #00b8a9;\n  text-decoration: none;\n}\n#tr-app .tr-freee-note {\n  font-size: 11px;\n  color: rgba(255,255,255,0.7);\n  margin-top: 8px;\n  display: block;\n}\n\n/* A8 footer */\n#tr-app .tr-a8-footer {\n  margin-top: 32px;\n  padding: 16px;\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  font-size: 11px;\n  color: #94a3b8;\n  line-height: 1.6;\n  text-align: center;\n}\n#tr-app .tr-a8-footer a { color: #6366f1; text-decoration: underline; }\n\u003c/style\u003e\n\u003cp\u003eCSSトランジションを視覚的に作成できる無料ツールです。プロパティ・継続時間・タイミング関数・遅延を設定し、複数のトランジションを組み合わせて、すぐに使えるCSSをコピーできます。\u003c/p\u003e","title":"CSSトランジション ジェネレーター"},{"content":" 行数\u0026nbsp; 列数\u0026nbsp; 適用 ＋ 行追加 ＋ 列追加 － 行削除 － 列削除 マークダウン出力 マークダウンをコピー CSV / TSV インポート CSVまたはTSV形式のデータを貼り付けるか、クリップボードから取得してください。区切り文字は自動判別されます。\nインポート クリップボードから貼り付け freee で会計・経費管理を自動化しませんか？ 表でまとめた経費データも、freee なら自動で仕訳・集計。中小企業・フリーランスに最適なクラウド会計ソフトです。\nfreee を無料で試す ","permalink":"https://productivity-works.com/ja/tools/markdown-table-generator/","summary":"\u003cdiv id=\"mdtable-app\"\u003e\n\u003cstyle\u003e\n#mdtable-app *,\n#mdtable-app *::before,\n#mdtable-app *::after {\n  box-sizing: border-box;\n}\n#mdtable-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Noto Sans JP\", \"Meiryo\", sans-serif;\n  color: #1e1e2e;\n  max-width: 900px;\n  margin: 0 auto;\n}\n#mdtable-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin: 1.5rem 0 0.5rem;\n  color: #4f46e5;\n  letter-spacing: 0.01em;\n}\n#mdtable-app .toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n  align-items: center;\n}\n#mdtable-app .toolbar label {\n  font-size: 0.85rem;\n  color: #555;\n}\n#mdtable-app .toolbar input[type=\"number\"] {\n  width: 3.5rem;\n  padding: 0.3rem 0.4rem;\n  border: 1px solid #c7d2fe;\n  border-radius: 6px;\n  font-size: 0.9rem;\n  text-align: center;\n}\n#mdtable-app .btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.3rem;\n  padding: 0.4rem 0.85rem;\n  border: none;\n  border-radius: 7px;\n  font-size: 0.85rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n}\n#mdtable-app .btn:active { transform: scale(0.97); }\n#mdtable-app .btn-primary {\n  background: #4f46e5;\n  color: #fff;\n}\n#mdtable-app .btn-primary:hover { background: #4338ca; }\n#mdtable-app .btn-secondary {\n  background: #e0e7ff;\n  color: #4f46e5;\n}\n#mdtable-app .btn-secondary:hover { background: #c7d2fe; }\n#mdtable-app .btn-danger {\n  background: #fee2e2;\n  color: #b91c1c;\n}\n#mdtable-app .btn-danger:hover { background: #fecaca; }\n#mdtable-app .btn-success {\n  background: #d1fae5;\n  color: #065f46;\n}\n#mdtable-app .btn-success:hover { background: #a7f3d0; }\n#mdtable-app .table-wrap {\n  overflow-x: auto;\n  border: 1px solid #e0e7ff;\n  border-radius: 10px;\n  margin-bottom: 1rem;\n}\n#mdtable-app table.editor-table {\n  border-collapse: collapse;\n  width: 100%;\n  min-width: 400px;\n}\n#mdtable-app table.editor-table th,\n#mdtable-app table.editor-table td {\n  border: 1px solid #c7d2fe;\n  padding: 0;\n}\n#mdtable-app table.editor-table th {\n  background: #eef2ff;\n}\n#mdtable-app .cell-input {\n  width: 100%;\n  min-width: 80px;\n  padding: 0.45rem 0.55rem;\n  border: none;\n  outline: none;\n  background: transparent;\n  font-size: 0.9rem;\n  font-family: inherit;\n  color: #1e1e2e;\n  resize: none;\n  overflow: hidden;\n  line-height: 1.4;\n}\n#mdtable-app .cell-input:focus {\n  background: #f5f3ff;\n}\n#mdtable-app .align-row th {\n  background: #f5f3ff;\n  padding: 4px 6px;\n  text-align: center;\n}\n#mdtable-app .align-select {\n  padding: 2px 4px;\n  border: 1px solid #c7d2fe;\n  border-radius: 5px;\n  font-size: 0.78rem;\n  background: #fff;\n  color: #4f46e5;\n  cursor: pointer;\n}\n#mdtable-app .col-ctrl-row th {\n  background: #f5f3ff;\n  padding: 4px 6px;\n  text-align: center;\n}\n#mdtable-app .output-area {\n  position: relative;\n}\n#mdtable-app textarea#md-output {\n  width: 100%;\n  min-height: 140px;\n  padding: 0.75rem 1rem;\n  border: 1px solid #c7d2fe;\n  border-radius: 10px;\n  font-family: \"Fira Mono\", \"Courier New\", monospace;\n  font-size: 0.88rem;\n  line-height: 1.6;\n  background: #f8f7ff;\n  color: #1e1e2e;\n  resize: vertical;\n  outline: none;\n}\n#mdtable-app .copy-btn-wrap {\n  display: flex;\n  justify-content: flex-end;\n  margin-top: 0.4rem;\n}\n#mdtable-app .import-area {\n  margin-top: 1rem;\n}\n#mdtable-app textarea#csv-input {\n  width: 100%;\n  min-height: 80px;\n  padding: 0.6rem 0.8rem;\n  border: 1px solid #c7d2fe;\n  border-radius: 8px;\n  font-family: \"Fira Mono\", \"Courier New\", monospace;\n  font-size: 0.85rem;\n  color: #333;\n  resize: vertical;\n  outline: none;\n}\n#mdtable-app .import-controls {\n  display: flex;\n  gap: 0.5rem;\n  margin-top: 0.4rem;\n  flex-wrap: wrap;\n  align-items: center;\n}\n#mdtable-app .status-msg {\n  font-size: 0.82rem;\n  color: #059669;\n  font-weight: 600;\n  min-height: 1.2em;\n}\n#mdtable-app .divider {\n  border: none;\n  border-top: 1px solid #e0e7ff;\n  margin: 1.5rem 0;\n}\n#mdtable-app .freee-cta {\n  margin-top: 2rem;\n  padding: 1.2rem 1.4rem;\n  background: linear-gradient(135deg, #eef2ff 0%, #f5f3ff 100%);\n  border: 1.5px solid #c7d2fe;\n  border-radius: 12px;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 1rem;\n}\n#mdtable-app .freee-cta-text {\n  flex: 1;\n  min-width: 200px;\n}\n#mdtable-app .freee-cta-text strong {\n  display: block;\n  font-size: 1rem;\n  color: #4f46e5;\n  margin-bottom: 0.3rem;\n}\n#mdtable-app .freee-cta-text p {\n  margin: 0;\n  font-size: 0.85rem;\n  color: #555;\n  line-height: 1.5;\n}\n#mdtable-app .freee-cta-btn {\n  display: inline-block;\n  padding: 0.6rem 1.4rem;\n  background: #4f46e5;\n  color: #fff;\n  font-weight: 700;\n  font-size: 0.92rem;\n  border-radius: 8px;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: background 0.15s;\n}\n#mdtable-app .freee-cta-btn:hover { background: #4338ca; }\n\u003c/style\u003e\n\u003cdiv class=\"toolbar\"\u003e\n  \u003clabel\u003e行数\u0026nbsp;\u003cinput type=\"number\" id=\"row-count\" value=\"3\" min=\"1\" max=\"50\"\u003e\u003c/label\u003e\n  \u003clabel\u003e列数\u0026nbsp;\u003cinput type=\"number\" id=\"col-count\" value=\"3\" min=\"1\" max=\"20\"\u003e\u003c/label\u003e\n  \u003cbutton class=\"btn btn-primary\" onclick=\"mdtableApp.applyDimensions()\"\u003e適用\u003c/button\u003e\n  \u003cbutton class=\"btn btn-secondary\" onclick=\"mdtableApp.addRow()\"\u003e＋ 行追加\u003c/button\u003e\n  \u003cbutton class=\"btn btn-secondary\" onclick=\"mdtableApp.addCol()\"\u003e＋ 列追加\u003c/button\u003e\n  \u003cbutton class=\"btn btn-danger\" onclick=\"mdtableApp.removeRow()\"\u003e－ 行削除\u003c/button\u003e\n  \u003cbutton class=\"btn btn-danger\" onclick=\"mdtableApp.removeCol()\"\u003e－ 列削除\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"table-wrap\"\u003e\n  \u003ctable class=\"editor-table\" id=\"editor-table\"\u003e\n    \u003cthead id=\"editor-thead\"\u003e\u003c/thead\u003e\n    \u003ctbody id=\"editor-tbody\"\u003e\u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\u003ch2\u003eマークダウン出力\u003c/h2\u003e\n\u003cdiv class=\"output-area\"\u003e\n  \u003ctextarea id=\"md-output\" readonly\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"copy-btn-wrap\"\u003e\n    \u003cbutton class=\"btn btn-success\" onclick=\"mdtableApp.copyOutput()\"\u003eマークダウンをコピー\u003c/button\u003e\n    \u003cspan class=\"status-msg\" id=\"copy-status\" style=\"margin-left:0.6rem;line-height:2.2;\"\u003e\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003chr class=\"divider\"\u003e\n\u003ch2\u003eCSV / TSV インポート\u003c/h2\u003e\n\u003cp style=\"font-size:0.88rem;color:#555;margin:0 0 0.4rem;\"\u003eCSVまたはTSV形式のデータを貼り付けるか、クリップボードから取得してください。区切り文字は自動判別されます。\u003c/p\u003e","title":"マークダウン表作成ツール — 無料オンラインツール"},{"content":" エンコード / デコード URL解析 クエリビルダー 一括処理 モード: encodeURIComponent（推奨） encodeURI（URL全体） リアルタイム変換 入力テキスト 0 文字 エンコード デコード \u0026#8645; スワップ クリア コピー完了! 出力 0 文字 出力をコピー 解析するURLを入力 解析 クリア ベースURL（任意） パラメータ + 追加 生成されたURL / クエリ文字列 パラメータを追加すると生成されます コピー クリア コピー完了! 操作: エンコード (encodeURIComponent) エンコード (encodeURI) デコード URLリスト（1行に1つ） 一括変換 クリア 結果をコピー コピー完了! URLエンコード（パーセントエンコーディング）とは URLエンコードとは、URLに使用できない特殊文字を %XX 形式（16進数）に変換する仕組みです。日本語や空白、記号などが含まれる文字列をURLで安全に送受信するために不可欠な技術です。\nencodeURIComponent と encodeURI の違い\n関数 用途 エンコードされる文字 encodeURIComponent クエリパラメータ値など部分文字列 :/?#[]@!$\u0026amp;'()*+,;= も含む encodeURI URL全体 スキーム・ホスト・パスは保持 通常のAPI通信やフォーム送信では encodeURIComponent を使用するのが推奨です。\n使い方ガイド エンコード/デコード タブ — テキストを入力してボタンを押すだけ。リアルタイムモードをオンにすると入力と同時に変換されます。 URL解析 タブ — URLを貼り付けると、プロトコル・ホスト・パス・クエリパラメータ・フラグメントを分解表示します。 クエリビルダー タブ — キー・値ペアを追加してクエリ文字列を自動生成。ベースURLと組み合わせて完全なURLも生成できます。 一括処理 タブ — 複数のURLを一度にエンコード/デコード。改行区切りで貼り付けるだけです。 関連ツール Base64エンコーダー — バイナリデータや文字列をBase64形式に変換・デコード JSONフォーマッター — JSONの整形・圧縮・バリデーション 正規表現テスター — 正規表現のリアルタイムマッチングとデバッグ Web開発者の確定申告を効率化\nURL設計にこだわるように、経理もスマートに。クラウド会計ソフト「freee」でバックオフィス業務を自動化しませんか？\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/url-encoder/","summary":"\u003cdiv id=\"url-app\"\u003e\n\u003cstyle\u003e\n#url-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#url-app * { box-sizing: border-box; }\n#url-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin: 1.5rem 0 0.75rem;\n  padding-left: 0.6rem;\n  border-left: 4px solid #2563eb;\n  color: #1e293b;\n}\n#url-app .tab-bar {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #e2e8f0;\n  margin-bottom: 1.25rem;\n  flex-wrap: wrap;\n}\n#url-app .tab-btn {\n  background: none;\n  border: none;\n  padding: 0.6rem 1.1rem;\n  font-size: 0.92rem;\n  font-weight: 600;\n  cursor: pointer;\n  color: #64748b;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  transition: color 0.15s, border-color 0.15s;\n}\n#url-app .tab-btn.active {\n  color: #2563eb;\n  border-bottom-color: #2563eb;\n}\n#url-app .tab-btn:hover:not(.active) { color: #2563eb; }\n#url-app .tab-panel { display: none; }\n#url-app .tab-panel.active { display: block; }\n#url-app textarea {\n  width: 100%;\n  min-height: 120px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  padding: 0.75rem;\n  font-size: 0.9rem;\n  font-family: \"Fira Mono\", \"Consolas\", monospace;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.15s;\n  background: #f8fafc;\n  color: #1e293b;\n  line-height: 1.6;\n}\n#url-app textarea:focus { border-color: #2563eb; background: #fff; }\n#url-app .mode-row {\n  display: flex;\n  align-items: center;\n  gap: 0.75rem;\n  margin-bottom: 0.75rem;\n  flex-wrap: wrap;\n}\n#url-app .mode-label { font-size: 0.85rem; font-weight: 600; color: #475569; }\n#url-app .mode-select {\n  padding: 0.35rem 0.7rem;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 0.88rem;\n  color: #1e293b;\n  background: #fff;\n  cursor: pointer;\n  outline: none;\n}\n#url-app .mode-select:focus { border-color: #2563eb; }\n#url-app .realtime-row {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  font-size: 0.85rem;\n  color: #475569;\n}\n#url-app .realtime-row input[type=checkbox] { accent-color: #2563eb; width: 15px; height: 15px; cursor: pointer; }\n#url-app .btn-row {\n  display: flex;\n  gap: 0.5rem;\n  margin: 0.75rem 0;\n  flex-wrap: wrap;\n}\n#url-app .btn {\n  padding: 0.5rem 1.1rem;\n  border-radius: 7px;\n  border: none;\n  font-size: 0.88rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n}\n#url-app .btn:active { transform: scale(0.97); }\n#url-app .btn-primary { background: #2563eb; color: #fff; }\n#url-app .btn-primary:hover { background: #1d4ed8; }\n#url-app .btn-secondary { background: #e2e8f0; color: #334155; }\n#url-app .btn-secondary:hover { background: #cbd5e1; }\n#url-app .btn-success { background: #16a34a; color: #fff; }\n#url-app .btn-success:hover { background: #15803d; }\n#url-app .btn-warn { background: #dc2626; color: #fff; }\n#url-app .btn-warn:hover { background: #b91c1c; }\n#url-app .swap-btn {\n  background: none;\n  border: 1.5px solid #2563eb;\n  color: #2563eb;\n  border-radius: 7px;\n  padding: 0.5rem 0.9rem;\n  font-size: 0.88rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#url-app .swap-btn:hover { background: #eff6ff; }\n#url-app .output-label {\n  font-size: 0.82rem;\n  font-weight: 600;\n  color: #64748b;\n  margin-bottom: 0.3rem;\n}\n#url-app .char-count {\n  font-size: 0.78rem;\n  color: #94a3b8;\n  text-align: right;\n  margin-top: 0.3rem;\n}\n/* URL解析 */\n#url-app .parse-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n  margin-top: 0.75rem;\n}\n#url-app .parse-table th {\n  text-align: left;\n  padding: 0.5rem 0.75rem;\n  background: #eff6ff;\n  color: #2563eb;\n  font-weight: 700;\n  border-bottom: 2px solid #bfdbfe;\n}\n#url-app .parse-table td {\n  padding: 0.45rem 0.75rem;\n  border-bottom: 1px solid #e2e8f0;\n  vertical-align: top;\n  word-break: break-all;\n}\n#url-app .parse-table tr:last-child td { border-bottom: none; }\n#url-app .parse-table td:first-child { color: #475569; font-weight: 600; width: 130px; white-space: nowrap; }\n#url-app .parse-table td:last-child { color: #1e293b; font-family: \"Fira Mono\", monospace; }\n#url-app .badge {\n  display: inline-block;\n  background: #dbeafe;\n  color: #2563eb;\n  border-radius: 4px;\n  padding: 0.1rem 0.45rem;\n  font-size: 0.78rem;\n  font-weight: 600;\n  margin: 0.1rem;\n}\n#url-app .empty-msg { color: #94a3b8; font-style: italic; font-size: 0.85rem; }\n/* クエリビルダー */\n#url-app .qb-row {\n  display: flex;\n  gap: 0.5rem;\n  margin-bottom: 0.5rem;\n  align-items: center;\n}\n#url-app .qb-input {\n  flex: 1;\n  padding: 0.45rem 0.6rem;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 0.88rem;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#url-app .qb-input:focus { border-color: #2563eb; }\n#url-app .qb-sep { color: #94a3b8; font-weight: 700; flex-shrink: 0; }\n#url-app .qb-remove {\n  background: none;\n  border: 1.5px solid #fca5a5;\n  color: #dc2626;\n  border-radius: 5px;\n  padding: 0.3rem 0.6rem;\n  cursor: pointer;\n  font-size: 0.82rem;\n  font-weight: 700;\n  flex-shrink: 0;\n}\n#url-app .qb-remove:hover { background: #fef2f2; }\n#url-app .qb-result {\n  background: #f1f5f9;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 0.75rem;\n  font-family: \"Fira Mono\", monospace;\n  font-size: 0.88rem;\n  word-break: break-all;\n  min-height: 48px;\n  color: #1e293b;\n  margin-top: 0.75rem;\n}\n/* 一括モード */\n#url-app .bulk-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.82rem;\n  margin-top: 0.75rem;\n}\n#url-app .bulk-table th {\n  background: #eff6ff;\n  color: #2563eb;\n  padding: 0.45rem 0.6rem;\n  text-align: left;\n  font-weight: 700;\n  border-bottom: 2px solid #bfdbfe;\n}\n#url-app .bulk-table td {\n  padding: 0.4rem 0.6rem;\n  border-bottom: 1px solid #e2e8f0;\n  word-break: break-all;\n  font-family: \"Fira Mono\", monospace;\n  vertical-align: top;\n}\n#url-app .bulk-table tr:nth-child(even) td { background: #f8fafc; }\n#url-app .bulk-table .err { color: #dc2626; }\n/* コピー完了 */\n#url-app .copy-toast {\n  display: inline-block;\n  background: #16a34a;\n  color: #fff;\n  font-size: 0.78rem;\n  border-radius: 4px;\n  padding: 0.2rem 0.6rem;\n  margin-left: 0.5rem;\n  opacity: 0;\n  transition: opacity 0.3s;\n}\n#url-app .copy-toast.show { opacity: 1; }\n@media (max-width: 600px) {\n  #url-app .mode-row { gap: 0.5rem; }\n  #url-app .parse-table td:first-child { width: 90px; }\n  #url-app .qb-row { flex-wrap: wrap; }\n  #url-app .btn-row { gap: 0.4rem; }\n}\n\u003c/style\u003e\n\u003c!-- タブバー --\u003e\n\u003cdiv class=\"tab-bar\"\u003e\n  \u003cbutton class=\"tab-btn active\" onclick=\"urlApp.switchTab('encode')\"\u003eエンコード / デコード\u003c/button\u003e\n  \u003cbutton class=\"tab-btn\" onclick=\"urlApp.switchTab('parse')\"\u003eURL解析\u003c/button\u003e\n  \u003cbutton class=\"tab-btn\" onclick=\"urlApp.switchTab('builder')\"\u003eクエリビルダー\u003c/button\u003e\n  \u003cbutton class=\"tab-btn\" onclick=\"urlApp.switchTab('bulk')\"\u003e一括処理\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- タブ1: エンコード/デコード --\u003e\n\u003cdiv id=\"tab-encode\" class=\"tab-panel active\"\u003e\n  \u003cdiv class=\"mode-row\"\u003e\n    \u003cspan class=\"mode-label\"\u003eモード:\u003c/span\u003e\n    \u003cselect class=\"mode-select\" id=\"enc-mode\" onchange=\"urlApp.onModeChange()\"\u003e\n      \u003coption value=\"component\"\u003eencodeURIComponent（推奨）\u003c/option\u003e\n      \u003coption value=\"uri\"\u003eencodeURI（URL全体）\u003c/option\u003e\n    \u003c/select\u003e\n    \u003clabel class=\"realtime-row\"\u003e\n      \u003cinput type=\"checkbox\" id=\"enc-realtime\" checked onchange=\"urlApp.onRealtimeChange()\"\u003e\n      リアルタイム変換\n    \u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"output-label\"\u003e入力テキスト\u003c/div\u003e\n  \u003ctextarea id=\"enc-input\" placeholder=\"エンコードまたはデコードするテキストを入力…\" oninput=\"urlApp.onEncInput()\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"char-count\" id=\"enc-in-count\"\u003e0 文字\u003c/div\u003e\n  \u003cdiv class=\"btn-row\"\u003e\n    \u003cbutton class=\"btn btn-primary\" onclick=\"urlApp.encode()\"\u003eエンコード\u003c/button\u003e\n    \u003cbutton class=\"btn btn-primary\" onclick=\"urlApp.decode()\"\u003eデコード\u003c/button\u003e\n    \u003cbutton class=\"swap-btn\" onclick=\"urlApp.swap()\"\u003e\u0026#8645; スワップ\u003c/button\u003e\n    \u003cbutton class=\"btn btn-secondary\" onclick=\"urlApp.clearEnc()\"\u003eクリア\u003c/button\u003e\n    \u003cspan class=\"copy-toast\" id=\"enc-toast\"\u003eコピー完了!\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"output-label\"\u003e出力\u003c/div\u003e\n  \u003ctextarea id=\"enc-output\" placeholder=\"変換結果がここに表示されます…\" readonly\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"char-count\" id=\"enc-out-count\"\u003e0 文字\u003c/div\u003e\n  \u003cdiv class=\"btn-row\" style=\"margin-top:0.5rem;\"\u003e\n    \u003cbutton class=\"btn btn-success\" onclick=\"urlApp.copyEnc()\"\u003e出力をコピー\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- タブ2: URL解析 --\u003e\n\u003cdiv id=\"tab-parse\" class=\"tab-panel\"\u003e\n  \u003cdiv class=\"output-label\"\u003e解析するURLを入力\u003c/div\u003e\n  \u003ctextarea id=\"parse-input\" rows=\"3\" placeholder=\"https://example.com:8080/path/to/page?key=value\u0026foo=bar#section\" oninput=\"urlApp.parseUrl()\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"btn-row\"\u003e\n    \u003cbutton class=\"btn btn-primary\" onclick=\"urlApp.parseUrl()\"\u003e解析\u003c/button\u003e\n    \u003cbutton class=\"btn btn-secondary\" onclick=\"urlApp.clearParse()\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"parse-result\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- タブ3: クエリビルダー --\u003e\n\u003cdiv id=\"tab-builder\" class=\"tab-panel\"\u003e\n  \u003cdiv class=\"output-label\"\u003eベースURL（任意）\u003c/div\u003e\n  \u003cinput type=\"text\" class=\"qb-input\" id=\"qb-base\" placeholder=\"https://example.com/search\" oninput=\"urlApp.buildQuery()\" style=\"width:100%;margin-bottom:0.75rem;\"\u003e\n  \u003cdiv style=\"display:flex;align-items:center;gap:0.75rem;margin-bottom:0.5rem;\"\u003e\n    \u003cspan class=\"mode-label\"\u003eパラメータ\u003c/span\u003e\n    \u003cbutton class=\"btn btn-primary\" onclick=\"urlApp.addQbRow()\" style=\"padding:0.35rem 0.8rem;font-size:0.82rem;\"\u003e+ 追加\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"qb-rows\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"output-label\" style=\"margin-top:1rem;\"\u003e生成されたURL / クエリ文字列\u003c/div\u003e\n  \u003cdiv class=\"qb-result\" id=\"qb-result\"\u003eパラメータを追加すると生成されます\u003c/div\u003e\n  \u003cdiv class=\"btn-row\" style=\"margin-top:0.5rem;\"\u003e\n    \u003cbutton class=\"btn btn-success\" onclick=\"urlApp.copyQb()\"\u003eコピー\u003c/button\u003e\n    \u003cbutton class=\"btn btn-secondary\" onclick=\"urlApp.clearQb()\"\u003eクリア\u003c/button\u003e\n    \u003cspan class=\"copy-toast\" id=\"qb-toast\"\u003eコピー完了!\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- タブ4: 一括処理 --\u003e\n\u003cdiv id=\"tab-bulk\" class=\"tab-panel\"\u003e\n  \u003cdiv class=\"mode-row\"\u003e\n    \u003cspan class=\"mode-label\"\u003e操作:\u003c/span\u003e\n    \u003cselect class=\"mode-select\" id=\"bulk-op\"\u003e\n      \u003coption value=\"enc-component\"\u003eエンコード (encodeURIComponent)\u003c/option\u003e\n      \u003coption value=\"enc-uri\"\u003eエンコード (encodeURI)\u003c/option\u003e\n      \u003coption value=\"dec\"\u003eデコード\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"output-label\"\u003eURLリスト（1行に1つ）\u003c/div\u003e\n  \u003ctextarea id=\"bulk-input\" rows=\"8\" placeholder=\"https://example.com/search?q=日本語\u0026#10;hello world\u0026#10;https://example.com/path?foo=bar\u0026baz=qux\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"btn-row\"\u003e\n    \u003cbutton class=\"btn btn-primary\" onclick=\"urlApp.runBulk()\"\u003e一括変換\u003c/button\u003e\n    \u003cbutton class=\"btn btn-secondary\" onclick=\"urlApp.clearBulk()\"\u003eクリア\u003c/button\u003e\n    \u003cbutton class=\"btn btn-success\" onclick=\"urlApp.copyBulkResult()\"\u003e結果をコピー\u003c/button\u003e\n    \u003cspan class=\"copy-toast\" id=\"bulk-toast\"\u003eコピー完了!\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"bulk-result\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var urlApp = window.urlApp = {};\n\n  // --- タブ切替 ---\n  urlApp.switchTab = function(name) {\n    document.querySelectorAll('#url-app .tab-panel').forEach(function(p) { p.classList.remove('active'); });\n    document.querySelectorAll('#url-app .tab-btn').forEach(function(b) { b.classList.remove('active'); });\n    document.getElementById('tab-' + name).classList.add('active');\n    var btns = document.querySelectorAll('#url-app .tab-btn');\n    var map = { encode: 0, parse: 1, builder: 2, bulk: 3 };\n    btns[map[name]].classList.add('active');\n  };\n\n  // --- エンコード/デコード ---\n  urlApp.getMode = function() {\n    return document.getElementById('enc-mode').value;\n  };\n  urlApp.isRealtime = function() {\n    return document.getElementById('enc-realtime').checked;\n  };\n  urlApp.onEncInput = function() {\n    var el = document.getElementById('enc-input');\n    document.getElementById('enc-in-count').textContent = el.value.length + ' 文字';\n    if (urlApp.isRealtime()) urlApp.encode();\n  };\n  urlApp.onModeChange = function() {\n    var inp = document.getElementById('enc-input').value;\n    if (inp) urlApp.encode();\n  };\n  urlApp.onRealtimeChange = function() {};\n  urlApp.encode = function() {\n    var inp = document.getElementById('enc-input').value;\n    var out = '';\n    try {\n      if (urlApp.getMode() === 'component') {\n        out = encodeURIComponent(inp);\n      } else {\n        out = encodeURI(inp);\n      }\n    } catch(e) { out = 'エラー: ' + e.message; }\n    document.getElementById('enc-output').value = out;\n    document.getElementById('enc-out-count').textContent = out.length + ' 文字';\n  };\n  urlApp.decode = function() {\n    var inp = document.getElementById('enc-input').value;\n    var out = '';\n    try {\n      out = decodeURIComponent(inp.replace(/\\+/g, ' '));\n    } catch(e) {\n      try { out = decodeURI(inp); }\n      catch(e2) { out = 'デコードエラー: 不正なエンコード文字列です'; }\n    }\n    document.getElementById('enc-output').value = out;\n    document.getElementById('enc-out-count').textContent = out.length + ' 文字';\n  };\n  urlApp.swap = function() {\n    var inp = document.getElementById('enc-input');\n    var out = document.getElementById('enc-output');\n    var tmp = inp.value;\n    inp.value = out.value;\n    out.value = tmp;\n    document.getElementById('enc-in-count').textContent = inp.value.length + ' 文字';\n    document.getElementById('enc-out-count').textContent = out.value.length + ' 文字';\n  };\n  urlApp.clearEnc = function() {\n    document.getElementById('enc-input').value = '';\n    document.getElementById('enc-output').value = '';\n    document.getElementById('enc-in-count').textContent = '0 文字';\n    document.getElementById('enc-out-count').textContent = '0 文字';\n  };\n  urlApp.copyEnc = function() {\n    var val = document.getElementById('enc-output').value;\n    urlApp._copy(val, 'enc-toast');\n  };\n\n  // --- URL解析 ---\n  urlApp.parseUrl = function() {\n    var raw = document.getElementById('parse-input').value.trim();\n    var el = document.getElementById('parse-result');\n    if (!raw) { el.innerHTML = ''; return; }\n    var url;\n    try { url = new URL(raw); } catch(e) {\n      el.innerHTML = '\u003cp style=\"color:#dc2626;font-size:0.88rem;\"\u003e無効なURL: プロトコル（https://など）を含む完全なURLを入力してください。\u003c/p\u003e","title":"URLエンコーダー \u0026 デコーダー - 無料オンラインURL変換ツール"},{"content":" タイポグラフィスケールジェネレーター モジュラーな比率で統一感のある文字サイズ体系を自動生成します\nプリセット ブログ アプリUI ドキュメント ランディングページ 設定 ベースフォントサイズ（px） スケール比率 短2度（Minor Second） — 1.067 長2度（Major Second） — 1.125 短3度（Minor Third） — 1.200 長3度（Major Third） — 1.250 完全4度（Perfect Fourth） — 1.333 増4度（Augmented Fourth） — 1.414 完全5度（Perfect Fifth） — 1.500 黄金比（Golden Ratio） — 1.618 出力単位 rem px em タイプスケール プレビュー レベル サイズ 行間 プレビュー CSS 出力 CSSをコピー freeeで経理・会計をもっとスマートに デザイン作業の請求書発行・経費管理もクラウドで完結。フリーランス・個人事業主に最適な会計ソフト。\nfreeeを無料で試す 関連ツール CSS変数ジェネレーター フォントペアサジェスター 読了時間計算ツール ","permalink":"https://productivity-works.com/ja/tools/typography-scale/","summary":"\u003cdiv id=\"ts-app2\"\u003e\n\u003cstyle\u003e\n#ts-app2 *,\n#ts-app2 *::before,\n#ts-app2 *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#ts-app2 {\n  font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  color: #1a1a2e;\n  line-height: 1.7;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 16px;\n}\n\n#ts-app2 .ts-card {\n  background: #ffffff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 20px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.05);\n}\n\n#ts-app2 .ts-hero {\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n  color: #fff;\n  border-radius: 14px;\n  padding: 36px 28px 28px;\n  margin-bottom: 24px;\n  text-align: center;\n}\n\n#ts-app2 .ts-hero h2 {\n  font-size: 1.65rem;\n  font-weight: 800;\n  margin-bottom: 8px;\n  letter-spacing: -0.01em;\n}\n\n#ts-app2 .ts-hero p {\n  font-size: 0.95rem;\n  opacity: 0.88;\n}\n\n#ts-app2 .ts-section-title {\n  font-size: 0.78rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #7c3aed;\n  margin-bottom: 14px;\n}\n\n#ts-app2 .ts-controls-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  gap: 16px;\n  margin-bottom: 16px;\n}\n\n#ts-app2 .ts-field label {\n  display: block;\n  font-size: 0.8rem;\n  font-weight: 600;\n  color: #374151;\n  margin-bottom: 6px;\n}\n\n#ts-app2 .ts-field input[type=\"number\"],\n#ts-app2 .ts-field select {\n  width: 100%;\n  padding: 10px 14px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  font-size: 0.95rem;\n  background: #f9fafb;\n  color: #1a1a2e;\n  transition: border-color 0.2s;\n  appearance: none;\n  -webkit-appearance: none;\n}\n\n#ts-app2 .ts-field input[type=\"number\"]:focus,\n#ts-app2 .ts-field select:focus {\n  outline: none;\n  border-color: #7c3aed;\n  background: #fff;\n}\n\n#ts-app2 .ts-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 6px;\n}\n\n#ts-app2 .ts-preset-btn {\n  padding: 6px 14px;\n  border-radius: 20px;\n  border: 1.5px solid #d1d5db;\n  background: #f9fafb;\n  font-size: 0.8rem;\n  font-weight: 600;\n  color: #374151;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n\n#ts-app2 .ts-preset-btn:hover,\n#ts-app2 .ts-preset-btn.active {\n  background: #7c3aed;\n  border-color: #7c3aed;\n  color: #fff;\n}\n\n#ts-app2 .ts-unit-toggle {\n  display: flex;\n  gap: 6px;\n  flex-wrap: wrap;\n}\n\n#ts-app2 .ts-unit-btn {\n  padding: 6px 16px;\n  border-radius: 8px;\n  border: 1.5px solid #d1d5db;\n  background: #f9fafb;\n  font-size: 0.82rem;\n  font-weight: 700;\n  color: #374151;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n\n#ts-app2 .ts-unit-btn.active {\n  background: #7c3aed;\n  border-color: #7c3aed;\n  color: #fff;\n}\n\n#ts-app2 .ts-scale-table {\n  width: 100%;\n  border-collapse: collapse;\n  margin-bottom: 8px;\n}\n\n#ts-app2 .ts-scale-table th {\n  font-size: 0.75rem;\n  font-weight: 700;\n  color: #6b7280;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  padding: 8px 12px;\n  text-align: left;\n  border-bottom: 2px solid #e5e7eb;\n  background: #f9fafb;\n}\n\n#ts-app2 .ts-scale-table td {\n  padding: 10px 12px;\n  border-bottom: 1px solid #f0f0f0;\n  vertical-align: middle;\n}\n\n#ts-app2 .ts-scale-table tr:last-child td {\n  border-bottom: none;\n}\n\n#ts-app2 .ts-scale-table tr:hover td {\n  background: #faf5ff;\n}\n\n#ts-app2 .ts-tag-label {\n  display: inline-block;\n  background: #ede9fe;\n  color: #7c3aed;\n  font-size: 0.75rem;\n  font-weight: 700;\n  padding: 2px 8px;\n  border-radius: 5px;\n  letter-spacing: 0.04em;\n}\n\n#ts-app2 .ts-size-value {\n  font-family: \"SF Mono\", \"Fira Code\", \"Fira Mono\", monospace;\n  font-size: 0.82rem;\n  color: #374151;\n}\n\n#ts-app2 .ts-lh-value {\n  font-size: 0.78rem;\n  color: #6b7280;\n}\n\n#ts-app2 .ts-preview-col {\n  max-width: 240px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n#ts-app2 .ts-preview-text {\n  color: #1a1a2e;\n  font-weight: 600;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  display: block;\n}\n\n#ts-app2 .ts-css-output {\n  position: relative;\n  background: #1e1e2e;\n  border-radius: 10px;\n  padding: 20px;\n  overflow: auto;\n  max-height: 400px;\n}\n\n#ts-app2 .ts-css-output pre {\n  font-family: \"SF Mono\", \"Fira Code\", \"Fira Mono\", monospace;\n  font-size: 0.82rem;\n  line-height: 1.7;\n  color: #cdd6f4;\n  white-space: pre;\n  margin: 0;\n}\n\n#ts-app2 .ts-css-output .tok-prop   { color: #89b4fa; }\n#ts-app2 .ts-css-output .tok-val    { color: #a6e3a1; }\n#ts-app2 .tok-selector              { color: #cba6f7; }\n#ts-app2 .tok-comment               { color: #6c7086; font-style: italic; }\n#ts-app2 .tok-brace                 { color: #f38ba8; }\n\n#ts-app2 .ts-copy-btn {\n  position: absolute;\n  top: 14px;\n  right: 14px;\n  padding: 6px 14px;\n  background: #7c3aed;\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  font-size: 0.78rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n  letter-spacing: 0.03em;\n}\n\n#ts-app2 .ts-copy-btn:hover { background: #6d28d9; }\n#ts-app2 .ts-copy-btn.copied { background: #059669; }\n\n#ts-app2 .ts-crosslinks {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-top: 4px;\n}\n\n#ts-app2 .ts-crosslinks a {\n  color: #7c3aed;\n  text-decoration: none;\n  font-size: 0.85rem;\n  font-weight: 600;\n  padding: 5px 12px;\n  border: 1.5px solid #ddd6fe;\n  border-radius: 8px;\n  background: #faf5ff;\n  transition: all 0.15s;\n}\n\n#ts-app2 .ts-crosslinks a:hover {\n  background: #7c3aed;\n  color: #fff;\n  border-color: #7c3aed;\n}\n\n#ts-app2 .ts-info-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-top: 10px;\n}\n\n#ts-app2 .ts-info-chip {\n  background: #f0fdf4;\n  border: 1px solid #bbf7d0;\n  color: #166534;\n  font-size: 0.78rem;\n  font-weight: 600;\n  padding: 4px 12px;\n  border-radius: 20px;\n}\n\n#ts-app2 .ts-freee-cta {\n  background: linear-gradient(135deg, #1e40af 0%, #1d4ed8 100%);\n  color: #fff;\n  border-radius: 12px;\n  padding: 24px 28px;\n  margin-bottom: 20px;\n  display: flex;\n  align-items: center;\n  gap: 20px;\n  flex-wrap: wrap;\n}\n\n#ts-app2 .ts-freee-cta-text h3 {\n  font-size: 1rem;\n  font-weight: 800;\n  margin-bottom: 4px;\n}\n\n#ts-app2 .ts-freee-cta-text p {\n  font-size: 0.85rem;\n  opacity: 0.9;\n  line-height: 1.5;\n}\n\n#ts-app2 .ts-freee-btn {\n  display: inline-block;\n  padding: 10px 24px;\n  background: #fff;\n  color: #1d4ed8;\n  font-weight: 800;\n  font-size: 0.88rem;\n  border-radius: 8px;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: opacity 0.15s;\n  flex-shrink: 0;\n}\n\n#ts-app2 .ts-freee-btn:hover {\n  opacity: 0.88;\n}\n\n@media (max-width: 600px) {\n  #ts-app2 .ts-hero h2 { font-size: 1.2rem; }\n  #ts-app2 .ts-controls-grid { grid-template-columns: 1fr; }\n  #ts-app2 .ts-scale-table th:nth-child(4),\n  #ts-app2 .ts-scale-table td:nth-child(4) { display: none; }\n  #ts-app2 .ts-preview-col { max-width: 100px; }\n  #ts-app2 .ts-freee-cta { flex-direction: column; text-align: center; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"ts-hero\"\u003e\n  \u003ch2\u003eタイポグラフィスケールジェネレーター\u003c/h2\u003e\n  \u003cp\u003eモジュラーな比率で統一感のある文字サイズ体系を自動生成します\u003c/p\u003e","title":"タイポグラフィスケールジェネレーター — モジュラー書体システム"},{"content":" + 新規 \u0026#8595; DL \u0026#128438; 印刷 \u0026#128190; 保存 \u0026#9790; ダーク \u0026lt;!-- サイドバー --\u0026gt; \u0026lt;div class=\u0026quot;qn-sidebar\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;qn-search-wrap\u0026quot;\u0026gt; \u0026lt;input class=\u0026quot;qn-search\u0026quot; id=\u0026quot;qn-search\u0026quot; type=\u0026quot;search\u0026quot; placeholder=\u0026quot;メモを検索...\u0026quot; oninput=\u0026quot;QN.onSearch(this.value)\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;qn-note-list\u0026quot; id=\u0026quot;qn-note-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;qn-sidebar-footer\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;qn-new-btn\u0026quot; onclick=\u0026quot;QN.newNote()\u0026quot;\u0026gt;+ 新規メモ\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- エディター --\u0026gt; \u0026lt;div class=\u0026quot;qn-editor-pane\u0026quot; id=\u0026quot;qn-editor-pane\u0026quot;\u0026gt; \u0026lt;!-- 未選択時の空状態 --\u0026gt; \u0026lt;div class=\u0026quot;qn-empty\u0026quot; id=\u0026quot;qn-empty\u0026quot;\u0026gt; \u0026lt;svg width=\u0026quot;48\u0026quot; height=\u0026quot;48\u0026quot; viewBox=\u0026quot;0 0 24 24\u0026quot; fill=\u0026quot;none\u0026quot; stroke=\u0026quot;currentColor\u0026quot; stroke-width=\u0026quot;1.5\u0026quot;\u0026gt;\u0026lt;path d=\u0026quot;M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\u0026quot;/\u0026gt;\u0026lt;polyline points=\u0026quot;14 2 14 8 20 8\u0026quot;/\u0026gt;\u0026lt;line x1=\u0026quot;16\u0026quot; y1=\u0026quot;13\u0026quot; x2=\u0026quot;8\u0026quot; y2=\u0026quot;13\u0026quot;/\u0026gt;\u0026lt;line x1=\u0026quot;16\u0026quot; y1=\u0026quot;17\u0026quot; x2=\u0026quot;8\u0026quot; y2=\u0026quot;17\u0026quot;/\u0026gt;\u0026lt;polyline points=\u0026quot;10 9 9 9 8 9\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; \u0026lt;p\u0026gt;メモが選択されていません。\u0026lt;br\u0026gt;\u0026lt;strong\u0026gt;+ 新規\u0026lt;/strong\u0026gt;でメモを作成しましょう。\u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- タイトルバー --\u0026gt; \u0026lt;div id=\u0026quot;qn-title-bar\u0026quot; class=\u0026quot;qn-title-bar\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt; \u0026lt;input class=\u0026quot;qn-note-name-input\u0026quot; id=\u0026quot;qn-note-name\u0026quot; type=\u0026quot;text\u0026quot; placeholder=\u0026quot;メモのタイトル...\u0026quot; oninput=\u0026quot;QN.onTitleChange(this.value)\u0026quot; /\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- テキストエリア --\u0026gt; \u0026lt;textarea class=\u0026quot;qn-textarea\u0026quot; id=\u0026quot;qn-textarea\u0026quot; placeholder=\u0026quot;ここにメモを書いてください...\u0026quot; style=\u0026quot;display:none\u0026quot; oninput=\u0026quot;QN.onTextChange(this.value)\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;!-- ステータスバー --\u0026gt; \u0026lt;div class=\u0026quot;qn-status\u0026quot; id=\u0026quot;qn-status\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt; \u0026lt;span id=\u0026quot;qn-words\u0026quot;\u0026gt;0 文字\u0026lt;/span\u0026gt; \u0026lt;span id=\u0026quot;qn-chars\u0026quot;\u0026gt;0 文字（スペース込）\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;qn-saved hidden\u0026quot; id=\u0026quot;qn-saved-indicator\u0026quot;\u0026gt;保存済 \u0026amp;#10003;\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; メモ・タスク管理を整えたら、経理もクラウドでスッキリさせませんか？\nフリーランス・個人事業主の方へ。freeeなら確定申告・帳簿記帳・請求書発行がすべてひとつで完結。領収書スキャンから申告書提出まで自動化できます。\nfreeeを無料で試す \u0026#8594; 関連ツール： Markdownエディター \u0026nbsp;\u0026middot;\u0026nbsp; 文字数カウンター \u0026nbsp;\u0026middot;\u0026nbsp; テキストケース変換 クイックメモ帳の使い方 右側の大きなテキストエリアに自由に書いてください。入力した内容は 2秒ごとにブラウザのlocalStorageへ自動保存 されます。アカウント作成不要・サーバー送信なし・インターネット接続なしでも動作します。ステータスバーの「保存済 ✓」が表示されるたびに保存が完了しています。Ctrl+S（MacはCmd+S）で即時保存も可能です。\n複数のメモ： ツールバーまたはサイドバーの「+ 新規」をクリックすると新しいメモを作成できます。メモは最終更新日時の新しい順にサイドバーへ一覧表示されます。クリックするだけで瞬時に切り替えられます。\nタイトル変更： エディター上部のタイトル欄をクリックして直接編集できます。入力と同時にサイドバーの一覧にも反映されます。\n検索： サイドバー上部の検索欄に入力すると、全メモのタイトルと本文を横断検索します。一致したテキストは黄色でハイライト表示されます。\nダウンロード： 「DL」ボタンで現在のメモを .txt ファイルとして端末に保存できます。ファイル名はメモのタイトルから自動生成されます。\n削除： サイドバーのメモ項目にマウスを乗せると × ボタンが表示されます。クリック後に確認ダイアログが表示されるので、誤操作による削除を防げます。\nテーマ切替： ツールバー右端のボタンでライト／ダークモードを切り替えられます。設定はブラウザに記憶されるため、次回アクセス時にも反映されます。\n印刷： 「印刷」ボタンをクリックすると、印刷に最適化されたプレビューウィンドウが開きます。\nなぜブラウザメモ帳が便利なのか ブラウザ上で動作するメモ帳の最大のメリットは、インストール不要でどのデバイスからでもアクセスできる点です。会社のPC・自宅のMac・スマートフォンと、ブラウザさえあれば同じツールを使えます。データはすべて端末のlocalStorageに保存され、外部サーバーへは一切送信されません。\nクラウド型のメモサービスと異なり、インターネット接続が途切れても書き続けられます。会議中のメモ取り、アイデアの走り書き、一時的なテキスト置き場など、気軽に使えるのが強みです。\nなお、localStorageのデータは同じブラウザ・端末でのみ共有されます。複数デバイス間での同期は行いません。また、ブラウザのデータ消去（キャッシュ・サイトデータの削除）を行うとメモも消えます。大切なメモは定期的に「DL」ボタンでバックアップを取ることをおすすめします。\n関連ツール Markdownで文書を書く → Markdownエディター 文字数・単語数をカウント → 文字数カウンター テキストの大文字・小文字を変換 → テキストケース変換 ※ freeeへのリンクはアフィリエイト広告を含みます。\n","permalink":"https://productivity-works.com/ja/tools/quick-notes/","summary":"\u003cdiv id=\"qn-app\"\u003e\n\u003cstyle\u003e\n/* ── Reset \u0026 Root ─────────────────────────────────────── */\n#qn-app {\n  font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif;\n  max-width: 1100px;\n  margin: 0 auto;\n  color: #1e1b4b;\n  --accent: #7c3aed;\n  --accent-dk: #6d28d9;\n  --accent-lt: #ede9fe;\n  --bg: #f8f7ff;\n  --surface: #ffffff;\n  --border: #d8d3f0;\n  --text: #1e1b4b;\n  --text-muted: #6b7280;\n  --sidebar-bg: #f5f3ff;\n  --textarea-bg: #fafafe;\n  --status-bg: #f3f0ff;\n  --btn-ghost: #ede9fe;\n  --btn-ghost-text: #5b21b6;\n  --shadow: 0 2px 12px rgba(124,58,237,0.10);\n  --radius: 10px;\n  --danger: #dc2626;\n  --danger-lt: #fee2e2;\n  --success: #059669;\n}\n#qn-app * { box-sizing: border-box; }\n\n/* ── Dark theme ───────────────────────────────────────── */\n#qn-app.qn-dark {\n  --bg: #0f0e1a;\n  --surface: #1a1828;\n  --border: #3b3660;\n  --text: #e5e1ff;\n  --text-muted: #9d97c4;\n  --sidebar-bg: #13111f;\n  --textarea-bg: #15132a;\n  --status-bg: #1a1828;\n  --btn-ghost: #2a2540;\n  --btn-ghost-text: #c4b5fd;\n  --shadow: 0 2px 12px rgba(0,0,0,0.40);\n  color: var(--text);\n}\n\n/* ── Layout ───────────────────────────────────────────── */\n#qn-app .qn-wrap {\n  background: var(--bg);\n  border-radius: var(--radius);\n  border: 1px solid var(--border);\n  overflow: hidden;\n  box-shadow: var(--shadow);\n  display: flex;\n  flex-direction: column;\n  min-height: 600px;\n}\n#qn-app .qn-toolbar {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 8px 12px;\n  background: var(--surface);\n  border-bottom: 1px solid var(--border);\n  flex-wrap: wrap;\n}\n#qn-app .qn-body {\n  display: flex;\n  flex: 1;\n  min-height: 0;\n}\n#qn-app .qn-sidebar {\n  width: 220px;\n  min-width: 180px;\n  background: var(--sidebar-bg);\n  border-right: 1px solid var(--border);\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n#qn-app .qn-search-wrap {\n  padding: 8px;\n  border-bottom: 1px solid var(--border);\n}\n#qn-app .qn-search {\n  width: 100%;\n  padding: 6px 10px;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--surface);\n  color: var(--text);\n  font-size: 13px;\n  outline: none;\n}\n#qn-app .qn-search:focus { border-color: var(--accent); }\n#qn-app .qn-note-list {\n  flex: 1;\n  overflow-y: auto;\n  padding: 4px;\n}\n#qn-app .qn-note-item {\n  padding: 8px 10px;\n  border-radius: 7px;\n  cursor: pointer;\n  margin-bottom: 2px;\n  transition: background 0.15s;\n  border: 1px solid transparent;\n  position: relative;\n}\n#qn-app .qn-note-item:hover { background: var(--btn-ghost); }\n#qn-app .qn-note-item.active {\n  background: var(--accent-lt);\n  border-color: var(--accent);\n}\n#qn-app.qn-dark .qn-note-item.active { background: var(--btn-ghost); }\n#qn-app .qn-note-title {\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--text);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  max-width: 150px;\n}\n#qn-app .qn-note-preview {\n  font-size: 11px;\n  color: var(--text-muted);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  max-width: 160px;\n  margin-top: 2px;\n}\n#qn-app .qn-note-del {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  background: none;\n  border: none;\n  color: var(--text-muted);\n  cursor: pointer;\n  font-size: 14px;\n  line-height: 1;\n  padding: 2px 4px;\n  border-radius: 4px;\n  opacity: 0;\n  transition: opacity 0.15s;\n}\n#qn-app .qn-note-item:hover .qn-note-del { opacity: 1; }\n#qn-app .qn-note-del:hover { color: var(--danger); background: var(--danger-lt); }\n#qn-app .qn-sidebar-footer {\n  padding: 8px;\n  border-top: 1px solid var(--border);\n}\n#qn-app .qn-new-btn {\n  width: 100%;\n  padding: 8px;\n  background: var(--accent);\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  cursor: pointer;\n  font-size: 13px;\n  font-weight: 600;\n  transition: background 0.15s;\n}\n#qn-app .qn-new-btn:hover { background: var(--accent-dk); }\n\n/* ── Editor pane ──────────────────────────────────────── */\n#qn-app .qn-editor-pane {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  background: var(--surface);\n  min-width: 0;\n}\n#qn-app .qn-title-bar {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 8px 12px;\n  border-bottom: 1px solid var(--border);\n  background: var(--surface);\n}\n#qn-app .qn-note-name-input {\n  flex: 1;\n  border: 1px solid transparent;\n  background: transparent;\n  color: var(--text);\n  font-size: 15px;\n  font-weight: 700;\n  padding: 4px 8px;\n  border-radius: 6px;\n  outline: none;\n  transition: border-color 0.15s;\n  font-family: inherit;\n}\n#qn-app .qn-note-name-input:focus {\n  border-color: var(--accent);\n  background: var(--textarea-bg);\n}\n#qn-app .qn-textarea {\n  flex: 1;\n  width: 100%;\n  border: none;\n  outline: none;\n  resize: none;\n  padding: 16px 20px;\n  font-size: 15px;\n  line-height: 1.9;\n  background: var(--textarea-bg);\n  color: var(--text);\n  font-family: inherit;\n  min-height: 420px;\n}\n#qn-app .qn-textarea::placeholder { color: var(--text-muted); }\n\n/* ── Status bar ───────────────────────────────────────── */\n#qn-app .qn-status {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  padding: 6px 14px;\n  background: var(--status-bg);\n  border-top: 1px solid var(--border);\n  font-size: 12px;\n  color: var(--text-muted);\n  flex-wrap: wrap;\n}\n#qn-app .qn-status .qn-saved {\n  margin-left: auto;\n  color: var(--success);\n  font-weight: 600;\n  font-size: 11px;\n  transition: opacity 0.4s;\n}\n#qn-app .qn-status .qn-saved.hidden { opacity: 0; }\n\n/* ── Toolbar buttons ──────────────────────────────────── */\n#qn-app .qn-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 5px 11px;\n  border-radius: 6px;\n  border: 1px solid var(--border);\n  background: var(--btn-ghost);\n  color: var(--btn-ghost-text);\n  cursor: pointer;\n  font-size: 13px;\n  font-weight: 500;\n  transition: background 0.15s, border-color 0.15s;\n  white-space: nowrap;\n  font-family: inherit;\n}\n#qn-app .qn-btn:hover { background: var(--accent-lt); border-color: var(--accent); color: var(--accent-dk); }\n#qn-app .qn-btn-primary {\n  background: var(--accent);\n  color: #fff;\n  border-color: var(--accent);\n}\n#qn-app .qn-btn-primary:hover { background: var(--accent-dk); border-color: var(--accent-dk); color: #fff; }\n#qn-app .qn-spacer { flex: 1; }\n\n/* ── Search highlight ─────────────────────────────────── */\n#qn-app .qn-highlight { background: #fde68a; border-radius: 2px; }\n\n/* ── Empty state ──────────────────────────────────────── */\n#qn-app .qn-empty {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 12px;\n  color: var(--text-muted);\n  padding: 40px;\n  text-align: center;\n}\n#qn-app .qn-empty svg { opacity: 0.3; }\n#qn-app .qn-empty p { font-size: 15px; margin: 0; }\n\n/* ── freee CTA ────────────────────────────────────────── */\n#qn-freee-cta {\n  margin-top: 28px;\n  padding: 18px 20px;\n  background: var(--accent-lt, #ede9fe);\n  border: 1px solid var(--border, #d8d3f0);\n  border-radius: var(--radius, 10px);\n  font-size: 14px;\n  line-height: 1.7;\n  color: var(--text, #1e1b4b);\n}\n#qn-freee-cta strong { color: var(--accent, #7c3aed); }\n#qn-freee-cta a.qn-freee-link {\n  display: inline-block;\n  margin-top: 10px;\n  padding: 8px 20px;\n  background: var(--accent, #7c3aed);\n  color: #fff;\n  border-radius: 6px;\n  text-decoration: none;\n  font-weight: 600;\n  font-size: 13px;\n  transition: background 0.15s;\n}\n#qn-freee-cta a.qn-freee-link:hover { background: var(--accent-dk, #6d28d9); }\n\n/* ── Related ──────────────────────────────────────────── */\n#qn-related {\n  margin-top: 16px;\n  font-size: 13px;\n  color: var(--text-muted, #6b7280);\n}\n#qn-related a { color: var(--accent, #7c3aed); text-decoration: none; }\n#qn-related a:hover { text-decoration: underline; }\n\n/* ── Responsive ───────────────────────────────────────── */\n@media (max-width: 640px) {\n  #qn-app .qn-sidebar { width: 160px; min-width: 140px; }\n  #qn-app .qn-note-title { max-width: 110px; }\n  #qn-app .qn-note-preview { max-width: 120px; }\n  #qn-app .qn-toolbar { gap: 4px; }\n  #qn-app .qn-btn { padding: 5px 8px; font-size: 12px; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"qn-wrap\"\u003e\n  \u003c!-- ツールバー --\u003e\n  \u003cdiv class=\"qn-toolbar\"\u003e\n    \u003cbutton class=\"qn-btn qn-btn-primary\" onclick=\"QN.newNote()\" title=\"新規メモ (Ctrl+N)\"\u003e+ 新規\u003c/button\u003e\n    \u003cbutton class=\"qn-btn\" onclick=\"QN.downloadNote()\" title=\"テキストファイルでダウンロード\"\u003e\u0026#8595; DL\u003c/button\u003e\n    \u003cbutton class=\"qn-btn\" onclick=\"QN.printNote()\" title=\"印刷\"\u003e\u0026#128438; 印刷\u003c/button\u003e\n    \u003cbutton class=\"qn-btn\" onclick=\"QN.forceSave()\" title=\"今すぐ保存 (Ctrl+S)\"\u003e\u0026#128190; 保存\u003c/button\u003e\n    \u003cdiv class=\"qn-spacer\"\u003e\u003c/div\u003e\n    \u003cbutton class=\"qn-btn\" onclick=\"QN.toggleTheme()\" id=\"qn-theme-btn\" title=\"ダーク/ライト切替\"\u003e\u0026#9790; ダーク\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- 本体：サイドバー＋エディター --\u003e\n  \u003cdiv class=\"qn-body\"\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;!-- サイドバー --\u0026gt;\n\u0026lt;div class=\u0026quot;qn-sidebar\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;qn-search-wrap\u0026quot;\u0026gt;\n    \u0026lt;input class=\u0026quot;qn-search\u0026quot; id=\u0026quot;qn-search\u0026quot; type=\u0026quot;search\u0026quot; placeholder=\u0026quot;メモを検索...\u0026quot; oninput=\u0026quot;QN.onSearch(this.value)\u0026quot; /\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;qn-note-list\u0026quot; id=\u0026quot;qn-note-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;qn-sidebar-footer\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;qn-new-btn\u0026quot; onclick=\u0026quot;QN.newNote()\u0026quot;\u0026gt;+ 新規メモ\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- エディター --\u0026gt;\n\u0026lt;div class=\u0026quot;qn-editor-pane\u0026quot; id=\u0026quot;qn-editor-pane\u0026quot;\u0026gt;\n  \u0026lt;!-- 未選択時の空状態 --\u0026gt;\n  \u0026lt;div class=\u0026quot;qn-empty\u0026quot; id=\u0026quot;qn-empty\u0026quot;\u0026gt;\n    \u0026lt;svg width=\u0026quot;48\u0026quot; height=\u0026quot;48\u0026quot; viewBox=\u0026quot;0 0 24 24\u0026quot; fill=\u0026quot;none\u0026quot; stroke=\u0026quot;currentColor\u0026quot; stroke-width=\u0026quot;1.5\u0026quot;\u0026gt;\u0026lt;path d=\u0026quot;M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\u0026quot;/\u0026gt;\u0026lt;polyline points=\u0026quot;14 2 14 8 20 8\u0026quot;/\u0026gt;\u0026lt;line x1=\u0026quot;16\u0026quot; y1=\u0026quot;13\u0026quot; x2=\u0026quot;8\u0026quot; y2=\u0026quot;13\u0026quot;/\u0026gt;\u0026lt;line x1=\u0026quot;16\u0026quot; y1=\u0026quot;17\u0026quot; x2=\u0026quot;8\u0026quot; y2=\u0026quot;17\u0026quot;/\u0026gt;\u0026lt;polyline points=\u0026quot;10 9 9 9 8 9\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n    \u0026lt;p\u0026gt;メモが選択されていません。\u0026lt;br\u0026gt;\u0026lt;strong\u0026gt;+ 新規\u0026lt;/strong\u0026gt;でメモを作成しましょう。\u0026lt;/p\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;!-- タイトルバー --\u0026gt;\n  \u0026lt;div id=\u0026quot;qn-title-bar\u0026quot; class=\u0026quot;qn-title-bar\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt;\n    \u0026lt;input class=\u0026quot;qn-note-name-input\u0026quot; id=\u0026quot;qn-note-name\u0026quot; type=\u0026quot;text\u0026quot; placeholder=\u0026quot;メモのタイトル...\u0026quot; oninput=\u0026quot;QN.onTitleChange(this.value)\u0026quot; /\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;!-- テキストエリア --\u0026gt;\n  \u0026lt;textarea class=\u0026quot;qn-textarea\u0026quot; id=\u0026quot;qn-textarea\u0026quot; placeholder=\u0026quot;ここにメモを書いてください...\u0026quot; style=\u0026quot;display:none\u0026quot; oninput=\u0026quot;QN.onTextChange(this.value)\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt;\n  \u0026lt;!-- ステータスバー --\u0026gt;\n  \u0026lt;div class=\u0026quot;qn-status\u0026quot; id=\u0026quot;qn-status\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt;\n    \u0026lt;span id=\u0026quot;qn-words\u0026quot;\u0026gt;0 文字\u0026lt;/span\u0026gt;\n    \u0026lt;span id=\u0026quot;qn-chars\u0026quot;\u0026gt;0 文字（スペース込）\u0026lt;/span\u0026gt;\n    \u0026lt;span class=\u0026quot;qn-saved hidden\u0026quot; id=\u0026quot;qn-saved-indicator\u0026quot;\u0026gt;保存済 \u0026amp;#10003;\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\u003c!-- /.qn-body --\u003e\n\u003c/div\u003e\u003c!-- /.qn-wrap --\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  /* ── Storage key ──────────────────────────────────────── */\n  var STORE_KEY = 'qn_notes_v1_ja';\n  var THEME_KEY = 'qn_theme_v1_ja';\n\n  /* ── State ────────────────────────────────────────────── */\n  var state = {\n    notes: [],\n    activeId: null,\n    searchQuery: '',\n    saveTimer: null,\n    savedFlashTimer: null,\n    dark: false\n  };\n\n  /* ── Helpers ──────────────────────────────────────────── */\n  function uid() { return Date.now().toString(36) + Math.random().toString(36).slice(2, 7); }\n  function esc(s) { return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;'); }\n\n  function load() {\n    try {\n      var raw = localStorage.getItem(STORE_KEY);\n      if (raw) state.notes = JSON.parse(raw);\n    } catch(e) {}\n    if (!Array.isArray(state.notes) || state.notes.length === 0) {\n      state.notes = [{\n        id: uid(),\n        title: 'はじめのメモ',\n        body: 'クイックメモ帳へようこそ！\\n\\nここに自由にメモを書いてください。2秒ごとにブラウザへ自動保存されます。\\n\\n使い方:\\n- Ctrl+S で今すぐ保存\\n- 「+ 新規」で複数のメモを管理\\n- 検索欄でメモを横断検索\\n- 「DL」ボタンで.txtファイルとして保存',\n        updatedAt: Date.now()\n      }];\n      save();\n    }\n    try {\n      state.dark = localStorage.getItem(THEME_KEY) === 'dark';\n    } catch(e) {}\n  }\n\n  function save() {\n    try { localStorage.setItem(STORE_KEY, JSON.stringify(state.notes)); } catch(e) {}\n  }\n\n  function getNote(id) { return state.notes.find(function(n){ return n.id === id; }); }\n\n  function sortedNotes() {\n    return state.notes.slice().sort(function(a,b){ return b.updatedAt - a.updatedAt; });\n  }\n\n  function filteredNotes() {\n    var q = state.searchQuery.trim().toLowerCase();\n    if (!q) return sortedNotes();\n    return sortedNotes().filter(function(n) {\n      return n.title.toLowerCase().indexOf(q) !== -1 || n.body.toLowerCase().indexOf(q) !== -1;\n    });\n  }\n\n  /* ── Stats（日本語対応：文字数カウント）─────────────── */\n  function updateStats(body) {\n    /* 日本語は単語分割が難しいため、文字数（スペースなし）と全文字数を表示 */\n    var noSpace = body.replace(/\\s/g,'').length;\n    var total = body.length;\n    var wEl = document.getElementById('qn-words');\n    var cEl = document.getElementById('qn-chars');\n    if (wEl) wEl.textContent = noSpace + ' 文字（スペースなし）';\n    if (cEl) cEl.textContent = total + ' 文字（全体）';\n  }\n\n  /* ── Render sidebar ───────────────────────────────────── */\n  function renderList() {\n    var list = document.getElementById('qn-note-list');\n    if (!list) return;\n    var notes = filteredNotes();\n    var q = state.searchQuery.trim().toLowerCase();\n\n    if (notes.length === 0) {\n      list.innerHTML = '\u003cdiv style=\"padding:12px;font-size:12px;color:var(--text-muted);text-align:center;\"\u003eメモが見つかりません。\u003c/div\u003e';\n      return;\n    }\n\n    list.innerHTML = notes.map(function(n) {\n      var active = n.id === state.activeId ? ' active' : '';\n      var titleDisplay = q ? highlight(esc(n.title), q) : esc(n.title);\n      var preview = n.body.replace(/\\n/g, ' ').slice(0, 60);\n      var previewDisplay = q ? highlight(esc(preview), q) : esc(preview);\n      return '\u003cdiv class=\"qn-note-item' + active + '\" onclick=\"QN.selectNote(\\'' + n.id + '\\')\" title=\"' + esc(n.title) + '\"\u003e'\n        + '\u003cdiv class=\"qn-note-title\"\u003e' + titleDisplay + '\u003c/div\u003e'\n        + '\u003cdiv class=\"qn-note-preview\"\u003e' + (previewDisplay || '\u003cem\u003e空のメモ\u003c/em\u003e') + '\u003c/div\u003e'\n        + '\u003cbutton class=\"qn-note-del\" onclick=\"event.stopPropagation();QN.deleteNote(\\'' + n.id + '\\')\" title=\"削除\"\u003e\u0026times;\u003c/button\u003e'\n        + '\u003c/div\u003e';\n    }).join('');\n  }\n\n  function highlight(str, q) {\n    if (!q) return str;\n    var re = new RegExp('(' + q.replace(/[.*+?^${}()|[\\]\\\\]/g,'\\\\$\u0026') + ')', 'gi');\n    return str.replace(re, '\u003cmark class=\"qn-highlight\"\u003e$1\u003c/mark\u003e');\n  }\n\n  /* ── Show/hide editor ─────────────────────────────────── */\n  function showEditor(show) {\n    var empty = document.getElementById('qn-empty');\n    var titleBar = document.getElementById('qn-title-bar');\n    var ta = document.getElementById('qn-textarea');\n    var status = document.getElementById('qn-status');\n    if (empty)    empty.style.display    = show ? 'none'  : 'flex';\n    if (titleBar) titleBar.style.display = show ? 'flex'  : 'none';\n    if (ta)       ta.style.display       = show ? 'block' : 'none';\n    if (status)   status.style.display   = show ? 'flex'  : 'none';\n  }\n\n  /* ── Select note ──────────────────────────────────────── */\n  function selectNote(id) {\n    var note = getNote(id);\n    if (!note) return;\n    state.activeId = id;\n    showEditor(true);\n    var nameEl = document.getElementById('qn-note-name');\n    var ta = document.getElementById('qn-textarea');\n    if (nameEl) nameEl.value = note.title;\n    if (ta) ta.value = note.body;\n    updateStats(note.body);\n    renderList();\n  }\n\n  /* ── Flash saved indicator ────────────────────────────── */\n  function flashSaved() {\n    var el = document.getElementById('qn-saved-indicator');\n    if (!el) return;\n    el.classList.remove('hidden');\n    clearTimeout(state.savedFlashTimer);\n    state.savedFlashTimer = setTimeout(function() { el.classList.add('hidden'); }, 2000);\n  }\n\n  /* ── Auto-save ────────────────────────────────────────── */\n  function scheduleSave() {\n    clearTimeout(state.saveTimer);\n    state.saveTimer = setTimeout(function() { commitSave(); }, 2000);\n  }\n\n  function commitSave() {\n    if (!state.activeId) return;\n    save();\n    flashSaved();\n  }\n\n  /* ── Theme ────────────────────────────────────────────── */\n  function applyTheme() {\n    var app = document.getElementById('qn-app');\n    var btn = document.getElementById('qn-theme-btn');\n    if (state.dark) {\n      app.classList.add('qn-dark');\n      if (btn) btn.textContent = '\\u2600 ライト';\n    } else {\n      app.classList.remove('qn-dark');\n      if (btn) btn.textContent = '\\u263E ダーク';\n    }\n  }\n\n  /* ── Public API ───────────────────────────────────────── */\n  window.QN = {\n\n    newNote: function() {\n      var note = { id: uid(), title: '新規メモ', body: '', updatedAt: Date.now() };\n      state.notes.unshift(note);\n      save();\n      selectNote(note.id);\n      setTimeout(function() {\n        var el = document.getElementById('qn-note-name');\n        if (el) { el.focus(); el.select(); }\n      }, 50);\n    },\n\n    deleteNote: function(id) {\n      if (!window.confirm('このメモを削除しますか？元に戻せません。')) return;\n      state.notes = state.notes.filter(function(n){ return n.id !== id; });\n      save();\n      if (state.activeId === id) {\n        state.activeId = null;\n        showEditor(false);\n        var remaining = sortedNotes();\n        if (remaining.length \u003e 0) selectNote(remaining[0].id);\n      }\n      renderList();\n    },\n\n    selectNote: function(id) { selectNote(id); },\n\n    onTitleChange: function(val) {\n      if (!state.activeId) return;\n      var note = getNote(state.activeId);\n      if (!note) return;\n      note.title = val || '無題';\n      note.updatedAt = Date.now();\n      renderList();\n      scheduleSave();\n    },\n\n    onTextChange: function(val) {\n      if (!state.activeId) return;\n      var note = getNote(state.activeId);\n      if (!note) return;\n      note.body = val;\n      note.updatedAt = Date.now();\n      updateStats(val);\n      renderList();\n      scheduleSave();\n    },\n\n    onSearch: function(val) {\n      state.searchQuery = val;\n      renderList();\n    },\n\n    forceSave: function() {\n      clearTimeout(state.saveTimer);\n      commitSave();\n    },\n\n    downloadNote: function() {\n      if (!state.activeId) { alert('メモを選択してください。'); return; }\n      var note = getNote(state.activeId);\n      if (!note) return;\n      var content = note.title + '\\n' + new Array(note.title.length + 1).join('=') + '\\n\\n' + note.body;\n      var blob = new Blob([content], { type: 'text/plain;charset=utf-8' });\n      var url = URL.createObjectURL(blob);\n      var a = document.createElement('a');\n      a.href = url;\n      a.download = (note.title.replace(/[^\\w\\u3000-\\u9fff\\u30a0-\\u30ff\\u3041-\\u3096]/g,'_') || 'memo') + '.txt';\n      document.body.appendChild(a); a.click();\n      setTimeout(function() { document.body.removeChild(a); URL.revokeObjectURL(url); }, 100);\n    },\n\n    printNote: function() {\n      if (!state.activeId) { alert('メモを選択してください。'); return; }\n      var note = getNote(state.activeId);\n      if (!note) return;\n      var w = window.open('', '_blank');\n      w.document.write('\u003c!DOCTYPE html\u003e\u003chtml\u003e\u003chead\u003e\u003ctitle\u003e' + esc(note.title) + '\u003c/title\u003e'\n        + '\u003cmeta charset=\"UTF-8\"\u003e'\n        + '\u003cstyle\u003ebody{font-family:\"Hiragino Kaku Gothic ProN\",\"Hiragino Sans\",Meiryo,sans-serif;max-width:700px;margin:40px auto;font-size:15px;line-height:1.9;}'\n        + 'h1{font-size:20px;margin-bottom:8px;}pre{white-space:pre-wrap;word-break:break-word;}\u003c/style\u003e\u003c/head\u003e'\n\u003cpre\u003e\u003ccode\u003e    + '\u0026lt;body\u0026gt;\u0026lt;h1\u0026gt;' + esc(note.title) + '\u0026lt;/h1\u0026gt;\u0026lt;pre\u0026gt;' + esc(note.body) + '\u0026lt;/pre\u0026gt;\u0026lt;/body\u0026gt;\u0026lt;/html\u0026gt;');\n  w.document.close();\n  w.focus();\n  w.print();\n},\n\ntoggleTheme: function() {\n  state.dark = !state.dark;\n  try { localStorage.setItem(THEME_KEY, state.dark ? 'dark' : 'light'); } catch(e) {}\n  applyTheme();\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e};\u003c/p\u003e","title":"クイックメモ帳"},{"content":"氏名・職歴・学歴・スキルを入力するだけで、プロ品質の履歴書・職務経歴書が完成。アカウント登録不要、すべてブラウザ内で完結します。\nテンプレート: クラシック モダン ミニマル カラー: 保存 読込 クリア 印刷 / PDF保存 \u0026lt;!-- Personal Info --\u0026gt; \u0026lt;div class=\u0026quot;rb-section-card\u0026quot; data-section=\u0026quot;personal\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rb-section-header\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;rb-move-btn rb-move-up\u0026quot; title=\u0026quot;上へ\u0026quot;\u0026gt;↑\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;rb-move-btn rb-move-dn\u0026quot; title=\u0026quot;下へ\u0026quot;\u0026gt;↓\u0026lt;/button\u0026gt; \u0026lt;span class=\u0026quot;rb-sec-title\u0026quot;\u0026gt;基本情報\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;rb-sec-toggle\u0026quot;\u0026gt;▾\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rb-section-body\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\u0026lt;label\u0026gt;氏名\u0026lt;/label\u0026gt;\u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;rb-name\u0026quot; placeholder=\u0026quot;山田 太郎\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rb-field-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\u0026lt;label\u0026gt;メールアドレス\u0026lt;/label\u0026gt;\u0026lt;input type=\u0026quot;email\u0026quot; id=\u0026quot;rb-email\u0026quot; placeholder=\u0026quot;taro@example.com\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\u0026lt;label\u0026gt;電話番号\u0026lt;/label\u0026gt;\u0026lt;input type=\u0026quot;tel\u0026quot; id=\u0026quot;rb-phone\u0026quot; placeholder=\u0026quot;090-0000-0000\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rb-field-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\u0026lt;label\u0026gt;居住地\u0026lt;/label\u0026gt;\u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;rb-location\u0026quot; placeholder=\u0026quot;東京都渋谷区\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\u0026lt;label\u0026gt;LinkedIn / SNS\u0026lt;/label\u0026gt;\u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;rb-linkedin\u0026quot; placeholder=\u0026quot;linkedin.com/in/taro\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\u0026lt;label\u0026gt;ウェブサイト・ポートフォリオ\u0026lt;/label\u0026gt;\u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;rb-website\u0026quot; placeholder=\u0026quot;taro.example.com\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Summary --\u0026gt; \u0026lt;div class=\u0026quot;rb-section-card\u0026quot; data-section=\u0026quot;summary\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rb-section-header\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;rb-move-btn rb-move-up\u0026quot; title=\u0026quot;上へ\u0026quot;\u0026gt;↑\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;rb-move-btn rb-move-dn\u0026quot; title=\u0026quot;下へ\u0026quot;\u0026gt;↓\u0026lt;/button\u0026gt; \u0026lt;span class=\u0026quot;rb-sec-title\u0026quot;\u0026gt;自己紹介・職務概要\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;rb-sec-toggle\u0026quot;\u0026gt;▾\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rb-section-body\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt; \u0026lt;textarea id=\u0026quot;rb-summary\u0026quot; placeholder=\u0026quot;経歴・強み・キャリアビジョンを簡潔に記述してください…\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Work Experience --\u0026gt; \u0026lt;div class=\u0026quot;rb-section-card\u0026quot; data-section=\u0026quot;experience\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rb-section-header\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;rb-move-btn rb-move-up\u0026quot; title=\u0026quot;上へ\u0026quot;\u0026gt;↑\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;rb-move-btn rb-move-dn\u0026quot; title=\u0026quot;下へ\u0026quot;\u0026gt;↓\u0026lt;/button\u0026gt; \u0026lt;span class=\u0026quot;rb-sec-title\u0026quot;\u0026gt;職務経歴\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;rb-sec-toggle\u0026quot;\u0026gt;▾\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rb-section-body\u0026quot;\u0026gt; \u0026lt;div id=\u0026quot;rb-exp-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;rb-add-btn\u0026quot; id=\u0026quot;rb-add-exp\u0026quot;\u0026gt;+ 職歴を追加\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Education --\u0026gt; \u0026lt;div class=\u0026quot;rb-section-card\u0026quot; data-section=\u0026quot;education\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rb-section-header\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;rb-move-btn rb-move-up\u0026quot; title=\u0026quot;上へ\u0026quot;\u0026gt;↑\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;rb-move-btn rb-move-dn\u0026quot; title=\u0026quot;下へ\u0026quot;\u0026gt;↓\u0026lt;/button\u0026gt; \u0026lt;span class=\u0026quot;rb-sec-title\u0026quot;\u0026gt;学歴\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;rb-sec-toggle\u0026quot;\u0026gt;▾\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rb-section-body\u0026quot;\u0026gt; \u0026lt;div id=\u0026quot;rb-edu-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;rb-add-btn\u0026quot; id=\u0026quot;rb-add-edu\u0026quot;\u0026gt;+ 学歴を追加\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Skills --\u0026gt; \u0026lt;div class=\u0026quot;rb-section-card\u0026quot; data-section=\u0026quot;skills\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rb-section-header\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;rb-move-btn rb-move-up\u0026quot; title=\u0026quot;上へ\u0026quot;\u0026gt;↑\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;rb-move-btn rb-move-dn\u0026quot; title=\u0026quot;下へ\u0026quot;\u0026gt;↓\u0026lt;/button\u0026gt; \u0026lt;span class=\u0026quot;rb-sec-title\u0026quot;\u0026gt;スキル\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;rb-sec-toggle\u0026quot;\u0026gt;▾\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rb-section-body\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rb-tags-input\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;rb-skill-input\u0026quot; placeholder=\u0026quot;例: Python\u0026quot;\u0026gt; \u0026lt;button id=\u0026quot;rb-skill-add\u0026quot;\u0026gt;追加\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;rb-tags-wrap\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Languages --\u0026gt; \u0026lt;div class=\u0026quot;rb-section-card\u0026quot; data-section=\u0026quot;languages\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rb-section-header\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;rb-move-btn rb-move-up\u0026quot; title=\u0026quot;上へ\u0026quot;\u0026gt;↑\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;rb-move-btn rb-move-dn\u0026quot; title=\u0026quot;下へ\u0026quot;\u0026gt;↓\u0026lt;/button\u0026gt; \u0026lt;span class=\u0026quot;rb-sec-title\u0026quot;\u0026gt;語学\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026quot;rb-sec-toggle\u0026quot;\u0026gt;▾\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;rb-section-body\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;rb-tags-input\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;rb-lang-input\u0026quot; placeholder=\u0026quot;例: 英語（ビジネスレベル）\u0026quot;\u0026gt; \u0026lt;button id=\u0026quot;rb-lang-add\u0026quot;\u0026gt;追加\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;rb-lang-tags-wrap\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; プレビュー フリーランスの会計管理もかんたんに\nfreee会計なら、フリーランスの請求書・経費管理・確定申告もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → メール署名を作成 → メール署名ジェネレーター 請求書を作成 → 請求書ジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 50代転職 AI活用準備ガイド2026 未経験からの完全ロードマップ 50代転職 ChatGPTで職務経歴書を劇的に改善する5つのプロンプト 転職サイト おすすめ2026年版！年代・目的別に徹底比較 ","permalink":"https://productivity-works.com/ja/tools/resume-builder/","summary":"\u003cp\u003e氏名・職歴・学歴・スキルを入力するだけで、プロ品質の履歴書・職務経歴書が完成。アカウント登録不要、すべてブラウザ内で完結します。\u003c/p\u003e\n\u003cdiv id=\"rb-app\"\u003e\n\u003cstyle\u003e\n#rb-app * { box-sizing: border-box; }\n#rb-app {\n  font-family: 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Noto Sans JP', Meiryo, -apple-system, BlinkMacSystemFont, sans-serif;\n  color: #1e293b;\n  max-width: 1200px;\n  margin: 0 auto;\n}\n#rb-app h2 { font-size: 1.3rem; margin: 0 0 16px; color: #0f172a; }\n#rb-app h3 { font-size: 1rem; margin: 0 0 10px; color: #334155; }\n\n/* Layout */\n#rb-layout {\n  display: flex;\n  gap: 24px;\n  align-items: flex-start;\n}\n#rb-editor {\n  flex: 0 0 420px;\n  min-width: 0;\n}\n#rb-preview-wrap {\n  flex: 1;\n  min-width: 0;\n  position: sticky;\n  top: 20px;\n}\n@media (max-width: 900px) {\n  #rb-layout { flex-direction: column; }\n  #rb-editor { flex: none; width: 100%; }\n  #rb-preview-wrap { position: static; width: 100%; }\n}\n\n/* Controls bar */\n#rb-controls {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  align-items: center;\n  margin-bottom: 18px;\n  padding: 12px 14px;\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n}\n#rb-controls label { font-size: 13px; color: #64748b; font-weight: 500; }\n#rb-controls select, #rb-controls input[type=color] {\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  padding: 4px 8px;\n  font-size: 13px;\n  background: #fff;\n  cursor: pointer;\n}\n#rb-controls input[type=color] {\n  width: 38px; height: 30px; padding: 2px 4px;\n}\n#rb-btn-print, #rb-btn-save, #rb-btn-load, #rb-btn-clear {\n  padding: 6px 14px;\n  border-radius: 7px;\n  border: none;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: opacity .15s;\n}\n#rb-btn-print { background: #2563eb; color: #fff; }\n#rb-btn-save  { background: #059669; color: #fff; }\n#rb-btn-load  { background: #7c3aed; color: #fff; }\n#rb-btn-clear { background: #ef4444; color: #fff; }\n#rb-btn-print:hover, #rb-btn-save:hover, #rb-btn-load:hover, #rb-btn-clear:hover { opacity: .85; }\n\n/* Sections list */\n#rb-sections-list { display: flex; flex-direction: column; gap: 12px; }\n.rb-section-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  overflow: hidden;\n}\n.rb-section-header {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 10px 14px;\n  background: #f1f5f9;\n  cursor: pointer;\n  user-select: none;\n}\n.rb-section-header .rb-sec-title { font-weight: 600; font-size: 14px; flex: 1; }\n.rb-section-header .rb-sec-toggle { font-size: 11px; color: #94a3b8; }\n.rb-move-btn {\n  background: none; border: 1px solid #cbd5e1; border-radius: 5px;\n  width: 24px; height: 24px; font-size: 13px; cursor: pointer; color: #64748b;\n  display: flex; align-items: center; justify-content: center; padding: 0;\n}\n.rb-move-btn:hover { background: #e2e8f0; }\n.rb-section-body { padding: 14px; display: block; }\n.rb-section-body.hidden { display: none; }\n\n/* Form fields */\n.rb-field { margin-bottom: 10px; }\n.rb-field label { display: block; font-size: 12px; font-weight: 600; color: #64748b; margin-bottom: 4px; }\n.rb-field input, .rb-field textarea {\n  width: 100%; padding: 7px 10px; border: 1px solid #cbd5e1; border-radius: 7px;\n  font-size: 13px; font-family: inherit; color: #1e293b; background: #fff;\n  transition: border-color .15s;\n}\n.rb-field input:focus, .rb-field textarea:focus {\n  outline: none; border-color: #2563eb; box-shadow: 0 0 0 3px rgba(37,99,235,.1);\n}\n.rb-field textarea { resize: vertical; min-height: 70px; }\n.rb-field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }\n\n/* Entry cards */\n.rb-entry {\n  border: 1px solid #e2e8f0; border-radius: 8px; padding: 12px;\n  margin-bottom: 10px; background: #fafafa; position: relative;\n}\n.rb-entry-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }\n.rb-entry-label { font-size: 12px; font-weight: 700; color: #475569; }\n.rb-remove-entry {\n  background: none; border: 1px solid #fca5a5; color: #ef4444;\n  border-radius: 5px; font-size: 11px; padding: 2px 8px; cursor: pointer;\n}\n.rb-remove-entry:hover { background: #fef2f2; }\n.rb-add-btn {\n  width: 100%; padding: 8px; border: 2px dashed #cbd5e1; background: #f8fafc;\n  border-radius: 7px; font-size: 13px; color: #64748b; cursor: pointer; margin-top: 4px;\n}\n.rb-add-btn:hover { border-color: #2563eb; color: #2563eb; background: #eff6ff; }\n\n/* Tags */\n.rb-tags-input { display: flex; gap: 6px; }\n.rb-tags-input input { flex: 1; }\n.rb-tags-input button {\n  padding: 7px 12px; background: #2563eb; color: #fff; border: none;\n  border-radius: 7px; font-size: 13px; cursor: pointer; white-space: nowrap;\n}\n.rb-tag {\n  display: inline-flex; align-items: center; gap: 4px;\n  padding: 3px 10px; background: #dbeafe; color: #1d4ed8;\n  border-radius: 20px; font-size: 12px; margin: 4px 4px 0 0;\n}\n.rb-tag button {\n  background: none; border: none; cursor: pointer; color: #1d4ed8;\n  font-size: 13px; padding: 0; line-height: 1;\n}\n#rb-tags-wrap, #rb-lang-tags-wrap { margin-top: 6px; min-height: 28px; }\n\n/* Preview */\n#rb-preview-wrap h2 { font-size: 1.1rem; }\n#rb-preview-box {\n  border: 1px solid #e2e8f0; border-radius: 10px; overflow: auto;\n  background: #fff; min-height: 500px;\n}\n#rb-preview-inner { padding: 32px 36px; font-family: inherit; }\n\n/* --- Template: Classic --- */\n.rb-tpl-classic #rb-preview-inner { font-family: 'Hiragino Sans', 'Noto Sans JP', sans-serif; }\n.rb-tpl-classic .rbp-name { font-size: 26px; font-weight: 700; border-bottom: 2px solid var(--rb-accent, #2563eb); padding-bottom: 6px; margin-bottom: 6px; }\n.rb-tpl-classic .rbp-contact { font-size: 12px; color: #64748b; margin-bottom: 20px; }\n.rb-tpl-classic .rbp-section-title { font-size: 14px; font-weight: 700; letter-spacing: .05em; color: var(--rb-accent, #2563eb); border-bottom: 1px solid #e2e8f0; padding-bottom: 4px; margin: 18px 0 10px; }\n.rb-tpl-classic .rbp-entry-title { font-weight: 700; font-size: 14px; }\n.rb-tpl-classic .rbp-entry-sub { font-size: 12px; color: #64748b; }\n.rb-tpl-classic .rbp-entry-date { font-size: 11px; color: #94a3b8; }\n.rb-tpl-classic .rbp-entry-desc { font-size: 13px; margin-top: 4px; white-space: pre-wrap; }\n.rb-tpl-classic .rbp-summary { font-size: 13px; white-space: pre-wrap; }\n.rb-tpl-classic .rbp-tag { display: inline-block; padding: 2px 10px; border: 1px solid var(--rb-accent, #2563eb); color: var(--rb-accent, #2563eb); border-radius: 3px; font-size: 12px; margin: 2px 3px 0 0; }\n\n/* --- Template: Modern --- */\n.rb-tpl-modern #rb-preview-inner { font-family: 'Hiragino Sans', 'Noto Sans JP', sans-serif; display: grid; grid-template-columns: 200px 1fr; gap: 0; padding: 0; }\n.rb-tpl-modern .rbp-sidebar { background: var(--rb-accent, #2563eb); color: #fff; padding: 28px 20px; }\n.rb-tpl-modern .rbp-main { padding: 28px 28px; }\n.rb-tpl-modern .rbp-name { font-size: 22px; font-weight: 700; color: #fff; margin-bottom: 4px; }\n.rb-tpl-modern .rbp-contact { font-size: 11px; color: rgba(255,255,255,.85); line-height: 1.9; margin-bottom: 20px; }\n.rb-tpl-modern .rbp-sidebar .rbp-section-title { font-size: 12px; font-weight: 700; letter-spacing: .08em; color: rgba(255,255,255,.7); border-bottom: 1px solid rgba(255,255,255,.25); padding-bottom: 4px; margin: 16px 0 8px; }\n.rb-tpl-modern .rbp-main .rbp-section-title { font-size: 13px; font-weight: 700; letter-spacing: .05em; color: var(--rb-accent, #2563eb); border-bottom: 2px solid var(--rb-accent, #2563eb); padding-bottom: 3px; margin: 18px 0 10px; }\n.rb-tpl-modern .rbp-entry-title { font-weight: 700; font-size: 14px; }\n.rb-tpl-modern .rbp-entry-sub { font-size: 12px; color: #64748b; }\n.rb-tpl-modern .rbp-entry-date { font-size: 11px; color: #94a3b8; }\n.rb-tpl-modern .rbp-entry-desc { font-size: 13px; margin-top: 4px; white-space: pre-wrap; }\n.rb-tpl-modern .rbp-summary { font-size: 13px; white-space: pre-wrap; }\n.rb-tpl-modern .rbp-tag { display: inline-block; padding: 2px 8px; background: rgba(255,255,255,.2); color: #fff; border-radius: 3px; font-size: 11px; margin: 2px 2px 0 0; }\n.rb-tpl-modern .rbp-main .rbp-tag { background: #eff6ff; color: var(--rb-accent, #2563eb); }\n@media (max-width: 600px) {\n  .rb-tpl-modern #rb-preview-inner { grid-template-columns: 1fr; }\n  .rb-tpl-modern .rbp-sidebar { padding: 20px; }\n}\n\n/* --- Template: Minimal --- */\n.rb-tpl-minimal #rb-preview-inner { font-family: 'Hiragino Sans', 'Noto Sans JP', sans-serif; color: #1e293b; }\n.rb-tpl-minimal .rbp-name { font-size: 28px; font-weight: 300; color: #0f172a; }\n.rb-tpl-minimal .rbp-contact { font-size: 12px; color: #94a3b8; margin-bottom: 24px; }\n.rb-tpl-minimal .rbp-section-title { font-size: 11px; font-weight: 700; letter-spacing: .12em; color: var(--rb-accent, #2563eb); margin: 22px 0 10px; }\n.rb-tpl-minimal .rbp-entry-title { font-weight: 600; font-size: 14px; }\n.rb-tpl-minimal .rbp-entry-sub { font-size: 12px; color: #64748b; }\n.rb-tpl-minimal .rbp-entry-date { font-size: 11px; color: #94a3b8; }\n.rb-tpl-minimal .rbp-entry-desc { font-size: 13px; margin-top: 4px; color: #475569; white-space: pre-wrap; }\n.rb-tpl-minimal .rbp-summary { font-size: 13px; color: #475569; white-space: pre-wrap; }\n.rb-tpl-minimal .rbp-tag { display: inline-block; padding: 2px 8px; background: #f1f5f9; color: #475569; border-radius: 4px; font-size: 12px; margin: 2px 3px 0 0; }\n.rb-tpl-minimal .rbp-entry { border-left: 2px solid var(--rb-accent, #2563eb); padding-left: 12px; margin-bottom: 12px; }\n\n/* Print */\n@media print {\n  #rb-app #rb-controls, #rb-app #rb-editor, #rb-app #rb-preview-wrap \u003e h2 { display: none !important; }\n  #rb-app #rb-layout { display: block; }\n  #rb-app #rb-preview-wrap { position: static; }\n  #rb-app #rb-preview-box { border: none; }\n  body \u003e * { display: none; }\n  #rb-app { display: block !important; max-width: 100%; }\n}\n\u003c/style\u003e\n\u003c!-- Controls --\u003e\n\u003cdiv id=\"rb-controls\"\u003e\n  \u003clabel\u003eテンプレート:\n    \u003cselect id=\"rb-tpl-select\"\u003e\n      \u003coption value=\"classic\"\u003eクラシック\u003c/option\u003e\n      \u003coption value=\"modern\"\u003eモダン\u003c/option\u003e\n      \u003coption value=\"minimal\"\u003eミニマル\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/label\u003e\n  \u003clabel\u003eカラー:\n    \u003cinput type=\"color\" id=\"rb-color-pick\" value=\"#2563eb\"\u003e\n  \u003c/label\u003e\n  \u003cbutton id=\"rb-btn-save\"\u003e保存\u003c/button\u003e\n  \u003cbutton id=\"rb-btn-load\"\u003e読込\u003c/button\u003e\n  \u003cbutton id=\"rb-btn-clear\"\u003eクリア\u003c/button\u003e\n  \u003cbutton id=\"rb-btn-print\"\u003e印刷 / PDF保存\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"rb-layout\"\u003e\n  \u003c!-- Editor --\u003e\n  \u003cdiv id=\"rb-editor\"\u003e\n    \u003cdiv id=\"rb-sections-list\"\u003e\n\u003cpre\u003e\u003ccode\u003e  \u0026lt;!-- Personal Info --\u0026gt;\n  \u0026lt;div class=\u0026quot;rb-section-card\u0026quot; data-section=\u0026quot;personal\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;rb-section-header\u0026quot;\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-move-btn rb-move-up\u0026quot; title=\u0026quot;上へ\u0026quot;\u0026gt;↑\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-move-btn rb-move-dn\u0026quot; title=\u0026quot;下へ\u0026quot;\u0026gt;↓\u0026lt;/button\u0026gt;\n      \u0026lt;span class=\u0026quot;rb-sec-title\u0026quot;\u0026gt;基本情報\u0026lt;/span\u0026gt;\n      \u0026lt;span class=\u0026quot;rb-sec-toggle\u0026quot;\u0026gt;▾\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;rb-section-body\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\u0026lt;label\u0026gt;氏名\u0026lt;/label\u0026gt;\u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;rb-name\u0026quot; placeholder=\u0026quot;山田 太郎\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;rb-field-row\u0026quot;\u0026gt;\n        \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\u0026lt;label\u0026gt;メールアドレス\u0026lt;/label\u0026gt;\u0026lt;input type=\u0026quot;email\u0026quot; id=\u0026quot;rb-email\u0026quot; placeholder=\u0026quot;taro@example.com\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n        \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\u0026lt;label\u0026gt;電話番号\u0026lt;/label\u0026gt;\u0026lt;input type=\u0026quot;tel\u0026quot; id=\u0026quot;rb-phone\u0026quot; placeholder=\u0026quot;090-0000-0000\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;rb-field-row\u0026quot;\u0026gt;\n        \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\u0026lt;label\u0026gt;居住地\u0026lt;/label\u0026gt;\u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;rb-location\u0026quot; placeholder=\u0026quot;東京都渋谷区\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n        \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\u0026lt;label\u0026gt;LinkedIn / SNS\u0026lt;/label\u0026gt;\u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;rb-linkedin\u0026quot; placeholder=\u0026quot;linkedin.com/in/taro\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\u0026lt;label\u0026gt;ウェブサイト・ポートフォリオ\u0026lt;/label\u0026gt;\u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;rb-website\u0026quot; placeholder=\u0026quot;taro.example.com\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- Summary --\u0026gt;\n  \u0026lt;div class=\u0026quot;rb-section-card\u0026quot; data-section=\u0026quot;summary\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;rb-section-header\u0026quot;\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-move-btn rb-move-up\u0026quot; title=\u0026quot;上へ\u0026quot;\u0026gt;↑\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-move-btn rb-move-dn\u0026quot; title=\u0026quot;下へ\u0026quot;\u0026gt;↓\u0026lt;/button\u0026gt;\n      \u0026lt;span class=\u0026quot;rb-sec-title\u0026quot;\u0026gt;自己紹介・職務概要\u0026lt;/span\u0026gt;\n      \u0026lt;span class=\u0026quot;rb-sec-toggle\u0026quot;\u0026gt;▾\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;rb-section-body\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;rb-field\u0026quot;\u0026gt;\n        \u0026lt;textarea id=\u0026quot;rb-summary\u0026quot; placeholder=\u0026quot;経歴・強み・キャリアビジョンを簡潔に記述してください…\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt;\n      \u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- Work Experience --\u0026gt;\n  \u0026lt;div class=\u0026quot;rb-section-card\u0026quot; data-section=\u0026quot;experience\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;rb-section-header\u0026quot;\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-move-btn rb-move-up\u0026quot; title=\u0026quot;上へ\u0026quot;\u0026gt;↑\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-move-btn rb-move-dn\u0026quot; title=\u0026quot;下へ\u0026quot;\u0026gt;↓\u0026lt;/button\u0026gt;\n      \u0026lt;span class=\u0026quot;rb-sec-title\u0026quot;\u0026gt;職務経歴\u0026lt;/span\u0026gt;\n      \u0026lt;span class=\u0026quot;rb-sec-toggle\u0026quot;\u0026gt;▾\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;rb-section-body\u0026quot;\u0026gt;\n      \u0026lt;div id=\u0026quot;rb-exp-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-add-btn\u0026quot; id=\u0026quot;rb-add-exp\u0026quot;\u0026gt;+ 職歴を追加\u0026lt;/button\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- Education --\u0026gt;\n  \u0026lt;div class=\u0026quot;rb-section-card\u0026quot; data-section=\u0026quot;education\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;rb-section-header\u0026quot;\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-move-btn rb-move-up\u0026quot; title=\u0026quot;上へ\u0026quot;\u0026gt;↑\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-move-btn rb-move-dn\u0026quot; title=\u0026quot;下へ\u0026quot;\u0026gt;↓\u0026lt;/button\u0026gt;\n      \u0026lt;span class=\u0026quot;rb-sec-title\u0026quot;\u0026gt;学歴\u0026lt;/span\u0026gt;\n      \u0026lt;span class=\u0026quot;rb-sec-toggle\u0026quot;\u0026gt;▾\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;rb-section-body\u0026quot;\u0026gt;\n      \u0026lt;div id=\u0026quot;rb-edu-list\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-add-btn\u0026quot; id=\u0026quot;rb-add-edu\u0026quot;\u0026gt;+ 学歴を追加\u0026lt;/button\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- Skills --\u0026gt;\n  \u0026lt;div class=\u0026quot;rb-section-card\u0026quot; data-section=\u0026quot;skills\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;rb-section-header\u0026quot;\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-move-btn rb-move-up\u0026quot; title=\u0026quot;上へ\u0026quot;\u0026gt;↑\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-move-btn rb-move-dn\u0026quot; title=\u0026quot;下へ\u0026quot;\u0026gt;↓\u0026lt;/button\u0026gt;\n      \u0026lt;span class=\u0026quot;rb-sec-title\u0026quot;\u0026gt;スキル\u0026lt;/span\u0026gt;\n      \u0026lt;span class=\u0026quot;rb-sec-toggle\u0026quot;\u0026gt;▾\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;rb-section-body\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;rb-tags-input\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;rb-skill-input\u0026quot; placeholder=\u0026quot;例: Python\u0026quot;\u0026gt;\n        \u0026lt;button id=\u0026quot;rb-skill-add\u0026quot;\u0026gt;追加\u0026lt;/button\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div id=\u0026quot;rb-tags-wrap\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- Languages --\u0026gt;\n  \u0026lt;div class=\u0026quot;rb-section-card\u0026quot; data-section=\u0026quot;languages\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;rb-section-header\u0026quot;\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-move-btn rb-move-up\u0026quot; title=\u0026quot;上へ\u0026quot;\u0026gt;↑\u0026lt;/button\u0026gt;\n      \u0026lt;button class=\u0026quot;rb-move-btn rb-move-dn\u0026quot; title=\u0026quot;下へ\u0026quot;\u0026gt;↓\u0026lt;/button\u0026gt;\n      \u0026lt;span class=\u0026quot;rb-sec-title\u0026quot;\u0026gt;語学\u0026lt;/span\u0026gt;\n      \u0026lt;span class=\u0026quot;rb-sec-toggle\u0026quot;\u0026gt;▾\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;rb-section-body\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;rb-tags-input\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;rb-lang-input\u0026quot; placeholder=\u0026quot;例: 英語（ビジネスレベル）\u0026quot;\u0026gt;\n        \u0026lt;button id=\u0026quot;rb-lang-add\u0026quot;\u0026gt;追加\u0026lt;/button\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div id=\u0026quot;rb-lang-tags-wrap\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- Preview --\u003e\n  \u003cdiv id=\"rb-preview-wrap\"\u003e\n    \u003ch2\u003eプレビュー\u003c/h2\u003e\n    \u003cdiv id=\"rb-preview-box\"\u003e\n      \u003cdiv id=\"rb-preview-inner\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003eフリーランスの会計管理もかんたんに\u003c/p\u003e","title":"履歴書・職務経歴書ビルダー"},{"content":"本記事にはアフィリエイトリンクが含まれています。\nフリーランス単価計算ツール 収入目標と稼働時間を入力して、請求すべき最低時給と、持続可能な事業運営のための推奨時給を算出しましょう。\n収入目標 目標年収（円） 週あたり請求可能時間: 30 時間 20 40 実際にクライアントに請求できる時間のみカウント 年間稼働週数: 48 週 40 52 休暇・病欠・祝日を差し引いてください 年間事業経費（円） ソフトウェア・機材・保険・マーケティング・会計費用など 税率（個人事業主）: 25% 10% 35% 所得税・住民税・個人事業税などを含む合計税率 利益率: 15% 0% 30% 閑散期の備え・事業成長・再投資のためのバッファ あなたのフリーランス単価 収入目標別 単価比較 現在の時間・週・税率設定に基づく試算。あなたの目標に最も近い行をハイライト表示しています。 収入目標 最低時給 推奨時給 必要年間売上 実際の手取り内訳 料金設定戦略 時給提示より案件単価で見積もる — プロジェクト料金を表示 推奨時給をもとにしたプロジェクト料金目安。時間ではなく成果物の価値で提示しましょう。 このツールの使い方 目標年収を入力 — 税引き後に手元に残したい金額を入力します。 請求可能時間を設定 — 現実的に見積もりましょう。多くのフリーランサーは週25〜35時間が請求可能で、残りは管理業務・営業・クライアント対応に充てられます。 稼働週数を調整 — 休暇・祝日・病欠を差し引きます。48週が一般的な目安です。 事業経費を追加 — サブスクリプション・機材・保険・研修費・会計費用などを含めます。 税率を設定 — 所得税・住民税・個人事業税を合算した実効税率を設定します。 利益率を選択 — 閑散期の備えや事業成長のためのバッファです。 最低時給は最低限の収支を維持するための水準です。推奨時給が実際に請求すべき金額です。\nフリーランス単価の設定方法 1. 市場相場を調査する 単価を設定する前に、同じ職種・地域・業界の相場を調べましょう。クラウドワークス・ランサーズ・LinkedInなどのプラットフォームや業界団体の調査を参照してください。あなたの単価は競争力があるものでなければなりませんが、最安値を目指す必要はありません。\n2. 非請求時間を考慮する メール対応・提案書作成・請求書処理・営業・自己研鑽に費やす時間はすべて、クライアントに請求できない時間です。週40時間働いても請求できるのが25時間なら、事業のコストは40時間ベースで考える必要があります。このツールの「請求可能時間」スライダーはこの現実を反映しています。\n3. 価値ベース料金設定へ移行する 時給制は収入に上限を生みます。専門性が高まったら、時間ではなく成果物や価値で料金設定することを検討しましょう。3時間で作ったロゴがクライアントのブランド混乱を解消して大きな価値を生むなら、それは時給×3時間をはるかに超える価値があります。「案件単価で見積もる」トグルで推奨時給ベースのプロジェクト料金目安を確認できます。\nフリーランス単価の参考相場（日本市場） 職種 初級 中級 上級 ライター 1,500〜3,000円/時 3,000〜6,000円/時 6,000〜15,000円/時 グラフィックデザイナー 2,000〜4,000円/時 4,000〜8,000円/時 8,000〜20,000円/時 Webエンジニア 3,000〜5,000円/時 5,000〜10,000円/時 10,000〜30,000円/時 マーケティングコンサルタント 3,000〜6,000円/時 6,000〜12,000円/時 12,000〜30,000円/時 経営コンサルタント 5,000〜10,000円/時 10,000〜20,000円/時 20,000〜50,000円/時 UX/UIデザイナー 3,000〜6,000円/時 6,000〜12,000円/時 12,000〜25,000円/時 コピーライター 2,000〜5,000円/時 5,000〜10,000円/時 10,000〜20,000円/時 単価は案件・クライアント・専門領域によって大きく異なります。あくまで参考値です。\n関連ツール 時給を年収に換算する → 時給・年収換算計算ツール ローン返済を計算する → ローン返済計算ツール 月次予算を立てる → 予算プランナー 免責事項：本ツールは教育・参考目的の概算を提供するものであり、税務・法務・財務アドバイスを構成するものではありません。税率は収入・申告状況・居住地・控除によって異なります。詳細は税理士または専門家にご相談ください。\n資産管理を効率化 → freee会計で家計を自動管理 関連記事 フリーランスエンジニアの開業届と青色申告｜初年度にやるべき手続き全リスト AIを使った副業の始め方完全ガイド【2026年版・月3万〜10万円を目指す】 AI副業で稼ぐ方法2026年最新完全ガイド ","permalink":"https://productivity-works.com/ja/tools/freelance-rate-calculator/","summary":"\u003cp\u003e\u003cem\u003e本記事にはアフィリエイトリンクが含まれています。\u003c/em\u003e\u003c/p\u003e\n\u003ch1 id=\"フリーランス単価計算ツール\"\u003eフリーランス単価計算ツール\u003c/h1\u003e\n\u003cp\u003e収入目標と稼働時間を入力して、請求すべき\u003cstrong\u003e最低時給\u003c/strong\u003eと、持続可能な事業運営のための\u003cstrong\u003e推奨時給\u003c/strong\u003eを算出しましょう。\u003c/p\u003e\n\u003cstyle\u003e\n.fr-wrap {\n  max-width: 720px;\n  margin: 0 auto;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n  color: #1e293b;\n}\n.fr-card {\n  background: #ffffff;\n  border: 1px solid #e2e8f0;\n  border-radius: 14px;\n  padding: 28px;\n  margin-bottom: 20px;\n  box-shadow: 0 2px 8px rgba(13,148,136,0.07);\n}\n.fr-section-title {\n  font-size: 15px;\n  font-weight: 700;\n  color: #0d9488;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  margin: 0 0 18px 0;\n}\n.fr-field {\n  margin-bottom: 18px;\n}\n.fr-label {\n  display: block;\n  font-size: 14px;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 8px;\n}\n.fr-range-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n.fr-range-row input[type=\"range\"] {\n  flex: 1;\n  accent-color: #0d9488;\n  height: 6px;\n  cursor: pointer;\n}\n.fr-range-val {\n  min-width: 80px;\n  text-align: right;\n  font-weight: 700;\n  font-size: 15px;\n  color: #0d9488;\n}\n.fr-input {\n  width: 100%;\n  padding: 10px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 15px;\n  color: #1e293b;\n  box-sizing: border-box;\n  transition: border-color 0.2s;\n}\n.fr-input:focus {\n  outline: none;\n  border-color: #0d9488;\n}\n.fr-results-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 20px;\n}\n.fr-result-box {\n  background: #f0fdfa;\n  border: 2px solid #0d9488;\n  border-radius: 12px;\n  padding: 18px;\n  text-align: center;\n}\n.fr-result-box.primary {\n  background: #0d9488;\n  color: #fff;\n}\n.fr-result-label {\n  font-size: 12px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: #134e4a;\n  margin-bottom: 6px;\n}\n.fr-result-box.primary .fr-result-label {\n  color: #ccfbf1;\n}\n.fr-result-value {\n  font-size: 32px;\n  font-weight: 800;\n  color: #0d9488;\n  line-height: 1;\n}\n.fr-result-box.primary .fr-result-value {\n  color: #fff;\n  font-size: 38px;\n}\n.fr-result-sub {\n  font-size: 12px;\n  color: #5eead4;\n  margin-top: 4px;\n}\n.fr-stat-row {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 10px 0;\n  border-bottom: 1px solid #e2e8f0;\n  font-size: 14px;\n}\n.fr-stat-row:last-child { border-bottom: none; }\n.fr-stat-label { color: #64748b; }\n.fr-stat-val { font-weight: 700; color: #0d9488; }\n.fr-bar-wrap {\n  margin-top: 10px;\n}\n.fr-bar-track {\n  display: flex;\n  height: 28px;\n  border-radius: 8px;\n  overflow: hidden;\n  margin-bottom: 12px;\n}\n.fr-bar-seg {\n  transition: width 0.3s;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 11px;\n  font-weight: 700;\n  color: #fff;\n  overflow: hidden;\n  white-space: nowrap;\n}\n.fr-legend {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 8px;\n}\n.fr-legend-item {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 13px;\n}\n.fr-legend-dot {\n  width: 12px;\n  height: 12px;\n  border-radius: 3px;\n  flex-shrink: 0;\n}\n.fr-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 14px;\n}\n.fr-table th {\n  background: #0d9488;\n  color: #fff;\n  padding: 10px 12px;\n  text-align: left;\n  font-weight: 600;\n}\n.fr-table td {\n  padding: 10px 12px;\n  border-bottom: 1px solid #e2e8f0;\n}\n.fr-table tr.highlighted td {\n  background: #f0fdfa;\n  font-weight: 700;\n  color: #0d9488;\n}\n.fr-table tr:hover td { background: #f8fafc; }\n.fr-toggle-btn {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  cursor: pointer;\n  padding: 12px 16px;\n  background: #f0fdfa;\n  border: 2px solid #0d9488;\n  border-radius: 10px;\n  font-weight: 700;\n  font-size: 14px;\n  color: #134e4a;\n  margin-bottom: 16px;\n  user-select: none;\n  transition: background 0.2s;\n}\n.fr-toggle-btn:hover { background: #ccfbf1; }\n.fr-toggle-switch {\n  width: 40px;\n  height: 22px;\n  background: #cbd5e1;\n  border-radius: 11px;\n  position: relative;\n  transition: background 0.2s;\n  flex-shrink: 0;\n}\n.fr-toggle-switch.on { background: #0d9488; }\n.fr-toggle-switch::after {\n  content: '';\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  background: #fff;\n  border-radius: 50%;\n  top: 3px;\n  left: 3px;\n  transition: left 0.2s;\n}\n.fr-toggle-switch.on::after { left: 21px; }\n.fr-project-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 10px;\n}\n.fr-project-box {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 14px;\n  text-align: center;\n}\n.fr-project-hours {\n  font-size: 12px;\n  color: #64748b;\n  margin-bottom: 4px;\n}\n.fr-project-price {\n  font-size: 22px;\n  font-weight: 800;\n  color: #0d9488;\n}\n.fr-project-label {\n  font-size: 11px;\n  color: #94a3b8;\n  margin-top: 2px;\n}\n@media (max-width: 520px) {\n  .fr-results-grid { grid-template-columns: 1fr; }\n  .fr-project-grid { grid-template-columns: 1fr; }\n  .fr-legend { grid-template-columns: 1fr; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"fr-wrap\"\u003e\n\u003c!-- 入力エリア --\u003e\n\u003cdiv class=\"fr-card\"\u003e\n\u003cdiv class=\"fr-section-title\"\u003e収入目標\u003c/div\u003e\n\u003cdiv class=\"fr-field\"\u003e\n  \u003clabel class=\"fr-label\" for=\"frAnnualIncome\"\u003e目標年収（円）\u003c/label\u003e\n  \u003cinput type=\"number\" id=\"frAnnualIncome\" class=\"fr-input\" value=\"80000\" min=\"10000\" max=\"500000\" step=\"1000\" oninput=\"calcFR()\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"fr-field\"\u003e\n  \u003clabel class=\"fr-label\"\u003e週あたり請求可能時間: \u003cspan id=\"frHoursVal\" style=\"color:#0d9488;\"\u003e30\u003c/span\u003e 時間\u003c/label\u003e\n  \u003cdiv class=\"fr-range-row\"\u003e\n    \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e20\u003c/span\u003e\n    \u003cinput type=\"range\" id=\"frHours\" min=\"20\" max=\"40\" step=\"1\" value=\"30\" oninput=\"calcFR()\"\u003e\n    \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e40\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"font-size:12px;color:#94a3b8;margin-top:4px;\"\u003e実際にクライアントに請求できる時間のみカウント\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"fr-field\"\u003e\n  \u003clabel class=\"fr-label\"\u003e年間稼働週数: \u003cspan id=\"frWeeksVal\" style=\"color:#0d9488;\"\u003e48\u003c/span\u003e 週\u003c/label\u003e\n  \u003cdiv class=\"fr-range-row\"\u003e\n    \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e40\u003c/span\u003e\n    \u003cinput type=\"range\" id=\"frWeeks\" min=\"40\" max=\"52\" step=\"1\" value=\"48\" oninput=\"calcFR()\"\u003e\n    \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e52\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"font-size:12px;color:#94a3b8;margin-top:4px;\"\u003e休暇・病欠・祝日を差し引いてください\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"fr-field\"\u003e\n  \u003clabel class=\"fr-label\" for=\"frExpenses\"\u003e年間事業経費（円）\u003c/label\u003e\n  \u003cinput type=\"number\" id=\"frExpenses\" class=\"fr-input\" value=\"5000\" min=\"0\" max=\"200000\" step=\"500\" oninput=\"calcFR()\"\u003e\n  \u003cdiv style=\"font-size:12px;color:#94a3b8;margin-top:4px;\"\u003eソフトウェア・機材・保険・マーケティング・会計費用など\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"fr-field\"\u003e\n  \u003clabel class=\"fr-label\"\u003e税率（個人事業主）: \u003cspan id=\"frTaxVal\" style=\"color:#0d9488;\"\u003e25\u003c/span\u003e%\u003c/label\u003e\n  \u003cdiv class=\"fr-range-row\"\u003e\n    \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e10%\u003c/span\u003e\n    \u003cinput type=\"range\" id=\"frTax\" min=\"10\" max=\"35\" step=\"1\" value=\"25\" oninput=\"calcFR()\"\u003e\n    \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e35%\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"font-size:12px;color:#94a3b8;margin-top:4px;\"\u003e所得税・住民税・個人事業税などを含む合計税率\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"fr-field\"\u003e\n  \u003clabel class=\"fr-label\"\u003e利益率: \u003cspan id=\"frMarginVal\" style=\"color:#0d9488;\"\u003e15\u003c/span\u003e%\u003c/label\u003e\n  \u003cdiv class=\"fr-range-row\"\u003e\n    \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e0%\u003c/span\u003e\n    \u003cinput type=\"range\" id=\"frMargin\" min=\"0\" max=\"30\" step=\"1\" value=\"15\" oninput=\"calcFR()\"\u003e\n    \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e30%\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"font-size:12px;color:#94a3b8;margin-top:4px;\"\u003e閑散期の備え・事業成長・再投資のためのバッファ\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 計算結果 --\u003e\n\u003cdiv id=\"frResultsCard\" class=\"fr-card\"\u003e\n\u003cdiv class=\"fr-section-title\"\u003eあなたのフリーランス単価\u003c/div\u003e\n\u003cdiv class=\"fr-results-grid\" id=\"frRatesGrid\"\u003e\u003c/div\u003e\n\u003cdiv id=\"frStatsGrid\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 収入目標別比較表 --\u003e\n\u003cdiv class=\"fr-card\"\u003e\n\u003cdiv class=\"fr-section-title\"\u003e収入目標別 単価比較\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;color:#64748b;margin-bottom:14px;\"\u003e現在の時間・週・税率設定に基づく試算。あなたの目標に最も近い行をハイライト表示しています。\u003c/div\u003e\n\u003cdiv style=\"overflow-x:auto;\"\u003e\n\u003ctable class=\"fr-table\" id=\"frCompTable\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n  \u003cth\u003e収入目標\u003c/th\u003e\n  \u003cth\u003e最低時給\u003c/th\u003e\n  \u003cth\u003e推奨時給\u003c/th\u003e\n  \u003cth\u003e必要年間売上\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody id=\"frCompBody\"\u003e\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 収入の内訳 --\u003e\n\u003cdiv class=\"fr-card\"\u003e\n\u003cdiv class=\"fr-section-title\"\u003e実際の手取り内訳\u003c/div\u003e\n\u003cdiv class=\"fr-bar-wrap\"\u003e\n  \u003cdiv class=\"fr-bar-track\" id=\"frBarTrack\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"fr-legend\" id=\"frLegend\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- プロジェクト料金 --\u003e\n\u003cdiv class=\"fr-card\"\u003e\n\u003cdiv class=\"fr-section-title\"\u003e料金設定戦略\u003c/div\u003e\n\u003cdiv class=\"fr-toggle-btn\" onclick=\"toggleProjectView()\" id=\"frToggleBtn\"\u003e\n  \u003cdiv class=\"fr-toggle-switch\" id=\"frToggleSwitch\"\u003e\u003c/div\u003e\n  時給提示より案件単価で見積もる — プロジェクト料金を表示\n\u003c/div\u003e\n\u003cdiv id=\"frProjectPanel\" style=\"display:none;\"\u003e\n  \u003cdiv style=\"font-size:13px;color:#64748b;margin-bottom:14px;\"\u003e推奨時給をもとにしたプロジェクト料金目安。時間ではなく成果物の価値で提示しましょう。\u003c/div\u003e\n  \u003cdiv class=\"fr-project-grid\" id=\"frProjectGrid\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c!-- end fr-wrap --\u003e\n\u003cscript\u003e\nvar frProjectsOn = false;\n\nfunction fmtD(n) {\n  return '$' + Math.round(n).toLocaleString('en-US');\n}\nfunction fmtR(n) {\n  return '$' + n.toFixed(2);\n}\n\nfunction calcFRRate(income, hours, weeks, expenses, taxRate, margin) {\n  var totalHours = hours * weeks;\n  var revenueNeeded = income + expenses;\n  var revenueWithTax = revenueNeeded / (1 - taxRate / 100);\n  var minRate = revenueWithTax / totalHours;\n  var recRate = minRate / (1 - margin / 100);\n  return { minRate: minRate, recRate: recRate, revenueWithTax: revenueWithTax, totalHours: totalHours };\n}\n\nfunction calcFR() {\n  var income = parseFloat(document.getElementById('frAnnualIncome').value) || 80000;\n  var hours = parseInt(document.getElementById('frHours').value);\n  var weeks = parseInt(document.getElementById('frWeeks').value);\n  var expenses = parseFloat(document.getElementById('frExpenses').value) || 0;\n  var taxRate = parseInt(document.getElementById('frTax').value);\n  var margin = parseInt(document.getElementById('frMargin').value);\n\n  document.getElementById('frHoursVal').textContent = hours;\n  document.getElementById('frWeeksVal').textContent = weeks;\n  document.getElementById('frTaxVal').textContent = taxRate;\n  document.getElementById('frMarginVal').textContent = margin;\n\n  var r = calcFRRate(income, hours, weeks, expenses, taxRate, margin);\n  var totalHours = r.totalHours;\n  var minRate = r.minRate;\n  var recRate = r.recRate;\n  var annualRevenue = recRate * totalHours;\n  var monthlyRevenue = annualRevenue / 12;\n  var dailyRate = recRate * 8;\n  var halfDayRate = recRate * 4;\n\n  var rg = document.getElementById('frRatesGrid');\n  rg.innerHTML =\n    '\u003cdiv class=\"fr-result-box\"\u003e' +\n      '\u003cdiv class=\"fr-result-label\"\u003e最低時給\u003c/div\u003e' +\n      '\u003cdiv class=\"fr-result-value\"\u003e' + fmtR(minRate) + '\u003c/div\u003e' +\n      '\u003cdiv style=\"font-size:12px;color:#134e4a;margin-top:6px;\"\u003e収入＋経費＋税金をカバー\u003c/div\u003e' +\n    '\u003c/div\u003e' +\n    '\u003cdiv class=\"fr-result-box primary\"\u003e' +\n      '\u003cdiv class=\"fr-result-label\"\u003e推奨時給\u003c/div\u003e' +\n      '\u003cdiv class=\"fr-result-value\"\u003e' + fmtR(recRate) + '\u003c/div\u003e' +\n      '\u003cdiv class=\"fr-result-sub\"\u003e利益率 ' + margin + '% 込み\u003c/div\u003e' +\n    '\u003c/div\u003e';\n\n  var sg = document.getElementById('frStatsGrid');\n  var stats = [\n    ['必要年間売上', fmtD(annualRevenue)],\n    ['必要月間売上', fmtD(monthlyRevenue)],\n    ['実効日当（8時間）', fmtD(dailyRate)],\n    ['半日料金（4時間）', fmtD(halfDayRate)],\n    ['年間請求可能時間合計', totalHours.toLocaleString('en-US') + ' 時間']\n  ];\n  var sh = '';\n  for (var i = 0; i \u003c stats.length; i++) {\n    sh += '\u003cdiv class=\"fr-stat-row\"\u003e\u003cspan class=\"fr-stat-label\"\u003e' + stats[i][0] + '\u003c/span\u003e\u003cspan class=\"fr-stat-val\"\u003e' + stats[i][1] + '\u003c/span\u003e\u003c/div\u003e';\n  }\n  sg.innerHTML = sh;\n\n  var targets = [50000, 60000, 80000, 100000, 120000, 150000];\n  var closestIdx = 0;\n  var closestDiff = Math.abs(income - targets[0]);\n  for (var j = 1; j \u003c targets.length; j++) {\n    var diff = Math.abs(income - targets[j]);\n    if (diff \u003c closestDiff) { closestDiff = diff; closestIdx = j; }\n  }\n  var cb = document.getElementById('frCompBody');\n  var ch = '';\n  for (var k = 0; k \u003c targets.length; k++) {\n    var tr = calcFRRate(targets[k], hours, weeks, expenses, taxRate, margin);\n    var hl = k === closestIdx ? ' class=\"highlighted\"' : '';\n    var star = k === closestIdx ? ' ★' : '';\n    ch += '\u003ctr' + hl + '\u003e' +\n      '\u003ctd\u003e' + fmtD(targets[k]) + star + '\u003c/td\u003e' +\n      '\u003ctd\u003e' + fmtR(tr.minRate) + '/時\u003c/td\u003e' +\n      '\u003ctd\u003e' + fmtR(tr.recRate) + '/時\u003c/td\u003e' +\n      '\u003ctd\u003e' + fmtD(tr.recRate * tr.totalHours) + '\u003c/td\u003e' +\n    '\u003c/tr\u003e';\n  }\n  cb.innerHTML = ch;\n\n  var taxAmt = annualRevenue * (taxRate / 100);\n  var expAmt = expenses;\n  var profitAmt = annualRevenue * (margin / 100);\n  var takeHome = annualRevenue - taxAmt - expAmt - profitAmt;\n  if (takeHome \u003c 0) takeHome = 0;\n  var total = taxAmt + expAmt + profitAmt + takeHome;\n\n  function pct(v) { return total \u003e 0 ? (v / total * 100).toFixed(1) : '0'; }\n\n  var segs = [\n    { label: '手取り', val: takeHome, color: '#0d9488' },\n    { label: '税金', val: taxAmt, color: '#ef4444' },\n    { label: '経費', val: expAmt, color: '#f59e0b' },\n    { label: '利益バッファ', val: profitAmt, color: '#8b5cf6' }\n  ];\n\n  var barH = '';\n  var legH = '';\n  for (var s = 0; s \u003c segs.length; s++) {\n    var p = pct(segs[s].val);\n    barH += '\u003cdiv class=\"fr-bar-seg\" style=\"width:' + p + '%;background:' + segs[s].color + ';\"\u003e' +\n      (parseFloat(p) \u003e 8 ? p + '%' : '') + '\u003c/div\u003e';\n    legH += '\u003cdiv class=\"fr-legend-item\"\u003e' +\n      '\u003cdiv class=\"fr-legend-dot\" style=\"background:' + segs[s].color + ';\"\u003e\u003c/div\u003e' +\n      '\u003cspan\u003e\u003cstrong\u003e' + segs[s].label + '\u003c/strong\u003e: ' + fmtD(segs[s].val) + ' (' + p + '%)\u003c/span\u003e' +\n    '\u003c/div\u003e';\n  }\n  document.getElementById('frBarTrack').innerHTML = barH;\n  document.getElementById('frLegend').innerHTML = legH;\n\n  var projectHours = [2, 5, 10, 20, 40];\n  var projectLabels = ['スポット対応（2時間）', '半日案件（5時間）', '1日案件（10時間）', '2日案件（20時間）', '週次案件（40時間）'];\n  var pg = document.getElementById('frProjectGrid');\n  var ph = '';\n  for (var p2 = 0; p2 \u003c projectHours.length; p2++) {\n    var price = recRate * projectHours[p2];\n    ph += '\u003cdiv class=\"fr-project-box\"\u003e' +\n      '\u003cdiv class=\"fr-project-hours\"\u003e' + projectLabels[p2] + '\u003c/div\u003e' +\n      '\u003cdiv class=\"fr-project-price\"\u003e' + fmtD(price) + '\u003c/div\u003e' +\n      '\u003cdiv class=\"fr-project-label\"\u003e推奨時給 ' + fmtR(recRate) + '/時 基準\u003c/div\u003e' +\n    '\u003c/div\u003e';\n  }\n  pg.innerHTML = ph;\n}\n\nfunction toggleProjectView() {\n  frProjectsOn = !frProjectsOn;\n  var sw = document.getElementById('frToggleSwitch');\n  var panel = document.getElementById('frProjectPanel');\n  if (frProjectsOn) {\n    sw.classList.add('on');\n    panel.style.display = 'block';\n  } else {\n    sw.classList.remove('on');\n    panel.style.display = 'none';\n  }\n}\n\ndocument.addEventListener('DOMContentLoaded', function() { calcFR(); });\ncalcFR();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"このツールの使い方\"\u003eこのツールの使い方\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e目標年収を入力\u003c/strong\u003e — 税引き後に手元に残したい金額を入力します。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e請求可能時間を設定\u003c/strong\u003e — 現実的に見積もりましょう。多くのフリーランサーは週25〜35時間が請求可能で、残りは管理業務・営業・クライアント対応に充てられます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e稼働週数を調整\u003c/strong\u003e — 休暇・祝日・病欠を差し引きます。48週が一般的な目安です。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e事業経費を追加\u003c/strong\u003e — サブスクリプション・機材・保険・研修費・会計費用などを含めます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e税率を設定\u003c/strong\u003e — 所得税・住民税・個人事業税を合算した実効税率を設定します。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e利益率を選択\u003c/strong\u003e — 閑散期の備えや事業成長のためのバッファです。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003e最低時給\u003c/strong\u003eは最低限の収支を維持するための水準です。\u003cstrong\u003e推奨時給\u003c/strong\u003eが実際に請求すべき金額です。\u003c/p\u003e","title":"フリーランス単価計算ツール | 適正時給を無料で診断"},{"content":" 昇順 ↑ 降順 ↓ テキストモードに切り替え 重複を削除 入力 — 1行に1つ、またはカンマ区切り ソート結果 数値モード コピー 件数 — 最小値 — 最大値 — 合計 — 平均 — 中央値 — 関連ツール 乱数生成 → 乱数生成ツール 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/number-sorter/","summary":"\u003cdiv id=\"ns-app\"\u003e\n\u003cstyle\u003e\n#ns-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', 'Meiryo', system-ui, sans-serif;\n  background: #0f0f13;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin: 0 auto;\n  max-width: 900px;\n  box-sizing: border-box;\n}\n\n#ns-app * {\n  box-sizing: border-box;\n}\n\n#ns-app h2 {\n  font-size: 1.05rem;\n  font-weight: 600;\n  color: #f1f5f9;\n  margin: 0 0 10px 0;\n}\n\n#ns-app .ns-row {\n  display: flex;\n  gap: 16px;\n  margin-bottom: 20px;\n}\n\n@media (max-width: 640px) {\n  #ns-app .ns-row {\n    flex-direction: column;\n  }\n}\n\n#ns-app .ns-col {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n}\n\n#ns-app textarea {\n  width: 100%;\n  flex: 1;\n  min-height: 200px;\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  color: #e2e8f0;\n  font-size: 0.95rem;\n  padding: 12px 14px;\n  resize: vertical;\n  font-family: 'Fira Mono', 'Consolas', monospace;\n  transition: border-color 0.2s;\n  outline: none;\n  line-height: 1.6;\n}\n\n#ns-app textarea:focus {\n  border-color: #6366f1;\n}\n\n#ns-app .ns-label {\n  font-size: 0.75rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #6366f1;\n  margin-bottom: 6px;\n}\n\n#ns-app .ns-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 16px;\n  align-items: center;\n}\n\n#ns-app .ns-btn {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 6px;\n  color: #cbd5e1;\n  font-size: 0.82rem;\n  padding: 6px 14px;\n  cursor: pointer;\n  transition: all 0.18s;\n  font-family: inherit;\n  font-weight: 500;\n}\n\n#ns-app .ns-btn:hover {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n\n#ns-app .ns-btn.active {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n\n#ns-app .ns-btn.success {\n  background: #16a34a;\n  border-color: #16a34a;\n  color: #fff;\n}\n\n#ns-app .ns-separator {\n  width: 1px;\n  height: 28px;\n  background: #2d2d3d;\n  margin: 0 2px;\n}\n\n#ns-app .ns-toggle {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 0.82rem;\n  color: #94a3b8;\n  cursor: pointer;\n  user-select: none;\n  padding: 6px 10px;\n  border: 1px solid #2d2d3d;\n  border-radius: 6px;\n  background: #1a1a24;\n  transition: all 0.18s;\n}\n\n#ns-app .ns-toggle:hover {\n  border-color: #6366f1;\n  color: #e2e8f0;\n}\n\n#ns-app .ns-toggle input[type=\"checkbox\"] {\n  accent-color: #6366f1;\n  width: 14px;\n  height: 14px;\n  cursor: pointer;\n}\n\n#ns-app .ns-stats {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));\n  gap: 8px;\n  margin-bottom: 16px;\n}\n\n#ns-app .ns-stat-card {\n  background: #1a1a24;\n  border: 1px solid #2d2d3d;\n  border-radius: 8px;\n  padding: 10px 14px;\n  text-align: center;\n}\n\n#ns-app .ns-stat-label {\n  font-size: 0.7rem;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  color: #64748b;\n  margin-bottom: 4px;\n}\n\n#ns-app .ns-stat-val {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #6366f1;\n  font-family: 'Fira Mono', 'Consolas', monospace;\n  word-break: break-all;\n}\n\n#ns-app .ns-output-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 6px;\n}\n\n#ns-app .ns-mode-badge {\n  font-size: 0.7rem;\n  background: #1e1e2e;\n  border: 1px solid #2d2d3d;\n  border-radius: 4px;\n  padding: 2px 8px;\n  color: #64748b;\n  font-weight: 600;\n  letter-spacing: 0.04em;\n}\n\n#ns-app .ns-error {\n  color: #f87171;\n  font-size: 0.82rem;\n  margin-top: 6px;\n  min-height: 1.2em;\n}\n\u003c/style\u003e\n\u003cdiv class=\"ns-controls\"\u003e\n  \u003cbutton class=\"ns-btn active\" id=\"ns-asc\" onclick=\"nsSetOrder('asc')\"\u003e昇順 ↑\u003c/button\u003e\n  \u003cbutton class=\"ns-btn\" id=\"ns-desc\" onclick=\"nsSetOrder('desc')\"\u003e降順 ↓\u003c/button\u003e\n  \u003cdiv class=\"ns-separator\"\u003e\u003c/div\u003e\n  \u003cbutton class=\"ns-btn\" id=\"ns-mode-btn\" onclick=\"nsToggleMode()\"\u003eテキストモードに切り替え\u003c/button\u003e\n  \u003cdiv class=\"ns-separator\"\u003e\u003c/div\u003e\n  \u003clabel class=\"ns-toggle\"\u003e\n    \u003cinput type=\"checkbox\" id=\"ns-dedup\" onchange=\"nsProcess()\"\u003e 重複を削除\n  \u003c/label\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ns-row\"\u003e\n  \u003cdiv class=\"ns-col\"\u003e\n    \u003cdiv class=\"ns-label\"\u003e入力 — 1行に1つ、またはカンマ区切り\u003c/div\u003e\n    \u003ctextarea id=\"ns-input\" placeholder=\"数値を入力してください\u0026#10;例：\u0026#10;42\u0026#10;7\u0026#10;3.14\u0026#10;-5\u0026#10;100\u0026#10;\u0026#10;カンマ区切りも可: 5, 2, 8, 1, 9\" oninput=\"nsProcess()\"\u003e\u003c/textarea\u003e\n    \u003cdiv class=\"ns-error\" id=\"ns-error\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ns-col\"\u003e\n    \u003cdiv class=\"ns-output-header\"\u003e\n      \u003cdiv class=\"ns-label\"\u003eソート結果\u003c/div\u003e\n      \u003cdiv style=\"display:flex;gap:6px;align-items:center;\"\u003e\n        \u003cspan class=\"ns-mode-badge\" id=\"ns-mode-badge\"\u003e数値モード\u003c/span\u003e\n        \u003cbutton class=\"ns-btn\" id=\"ns-copy-btn\" onclick=\"nsCopy()\"\u003eコピー\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003ctextarea id=\"ns-output\" readonly placeholder=\"ソート結果がここに表示されます...\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ns-stats\" id=\"ns-stats\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"ns-stat-card\"\u003e\n    \u003cdiv class=\"ns-stat-label\"\u003e件数\u003c/div\u003e\n    \u003cdiv class=\"ns-stat-val\" id=\"ns-s-count\"\u003e—\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ns-stat-card\"\u003e\n    \u003cdiv class=\"ns-stat-label\"\u003e最小値\u003c/div\u003e\n    \u003cdiv class=\"ns-stat-val\" id=\"ns-s-min\"\u003e—\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ns-stat-card\"\u003e\n    \u003cdiv class=\"ns-stat-label\"\u003e最大値\u003c/div\u003e\n    \u003cdiv class=\"ns-stat-val\" id=\"ns-s-max\"\u003e—\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ns-stat-card\"\u003e\n    \u003cdiv class=\"ns-stat-label\"\u003e合計\u003c/div\u003e\n    \u003cdiv class=\"ns-stat-val\" id=\"ns-s-sum\"\u003e—\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ns-stat-card\"\u003e\n    \u003cdiv class=\"ns-stat-label\"\u003e平均\u003c/div\u003e\n    \u003cdiv class=\"ns-stat-val\" id=\"ns-s-avg\"\u003e—\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ns-stat-card\"\u003e\n    \u003cdiv class=\"ns-stat-label\"\u003e中央値\u003c/div\u003e\n    \u003cdiv class=\"ns-stat-val\" id=\"ns-s-med\"\u003e—\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var nsMode = 'number';\n  var nsOrder = 'asc';\n\n  function nsGetItems() {\n    var raw = document.getElementById('ns-input').value;\n    if (!raw.trim()) return [];\n    var parts;\n    if (raw.indexOf(',') !== -1) {\n      parts = raw.split(',');\n    } else {\n      parts = raw.split('\\n');\n    }\n    return parts.map(function(p) { return p.trim(); }).filter(function(p) { return p !== ''; });\n  }\n\n  function nsFmt(n) {\n    var s = String(n);\n    if (s.indexOf('.') !== -1) {\n      s = parseFloat(n.toFixed(10)).toString();\n    }\n    return s;\n  }\n\n  window.nsSetOrder = function(order) {\n    nsOrder = order;\n    document.getElementById('ns-asc').classList.toggle('active', order === 'asc');\n    document.getElementById('ns-desc').classList.toggle('active', order === 'desc');\n    nsProcess();\n  };\n\n  window.nsToggleMode = function() {\n    nsMode = nsMode === 'number' ? 'text' : 'number';\n    document.getElementById('ns-mode-btn').textContent = nsMode === 'number' ? 'テキストモードに切り替え' : '数値モードに切り替え';\n    document.getElementById('ns-mode-badge').textContent = nsMode === 'number' ? '数値モード' : 'テキストモード';\n    document.getElementById('ns-error').textContent = '';\n    nsProcess();\n  };\n\n  window.nsProcess = function() {\n    var items = nsGetItems();\n    var dedup = document.getElementById('ns-dedup').checked;\n    var errorEl = document.getElementById('ns-error');\n    var statsEl = document.getElementById('ns-stats');\n    var outputEl = document.getElementById('ns-output');\n\n    errorEl.textContent = '';\n\n    if (!items.length) {\n      outputEl.value = '';\n      statsEl.style.display = 'none';\n      return;\n    }\n\n    if (nsMode === 'number') {\n      var nums = [];\n      var bad = [];\n      items.forEach(function(item) {\n        var n = Number(item);\n        if (item === '' || isNaN(n)) {\n          bad.push(item);\n        } else {\n          nums.push(n);\n        }\n      });\n\n      if (bad.length) {\n        errorEl.textContent = '数値以外は無視されました: ' + bad.slice(0, 5).join(', ') + (bad.length \u003e 5 ? '...' : '');\n      }\n\n      if (dedup) {\n        nums = nums.filter(function(v, i, a) { return a.indexOf(v) === i; });\n      }\n\n      nums.sort(function(a, b) { return nsOrder === 'asc' ? a - b : b - a; });\n\n      outputEl.value = nums.map(nsFmt).join('\\n');\n\n      if (nums.length) {\n        var sum = nums.reduce(function(a, b) { return a + b; }, 0);\n        var avg = sum / nums.length;\n        var sorted = nums.slice().sort(function(a, b) { return a - b; });\n        var mid = Math.floor(sorted.length / 2);\n        var median = sorted.length % 2 === 0\n          ? (sorted[mid - 1] + sorted[mid]) / 2\n          : sorted[mid];\n\n        document.getElementById('ns-s-count').textContent = nums.length;\n        document.getElementById('ns-s-min').textContent = nsFmt(nums[nsOrder === 'asc' ? 0 : nums.length - 1]);\n        document.getElementById('ns-s-max').textContent = nsFmt(nums[nsOrder === 'asc' ? nums.length - 1 : 0]);\n        document.getElementById('ns-s-sum').textContent = nsFmt(sum);\n        document.getElementById('ns-s-avg').textContent = nsFmt(Math.round(avg * 1e10) / 1e10);\n        document.getElementById('ns-s-med').textContent = nsFmt(median);\n        statsEl.style.display = 'grid';\n      } else {\n        statsEl.style.display = 'none';\n      }\n\n    } else {\n      var texts = items.slice();\n      if (dedup) {\n        texts = texts.filter(function(v, i, a) { return a.indexOf(v) === i; });\n      }\n      texts.sort(function(a, b) {\n        var cmp = a.localeCompare(b, 'ja');\n        return nsOrder === 'asc' ? cmp : -cmp;\n      });\n      outputEl.value = texts.join('\\n');\n\n      document.getElementById('ns-s-count').textContent = texts.length;\n      document.getElementById('ns-s-min').textContent = texts[0] || '—';\n      document.getElementById('ns-s-max').textContent = texts[texts.length - 1] || '—';\n      document.getElementById('ns-s-sum').textContent = '—';\n      document.getElementById('ns-s-avg').textContent = '—';\n      document.getElementById('ns-s-med').textContent = '—';\n      statsEl.style.display = 'grid';\n    }\n  };\n\n  window.nsCopy = function() {\n    var text = document.getElementById('ns-output').value;\n    if (!text) return;\n    var btn = document.getElementById('ns-copy-btn');\n    var done = function() {\n      btn.textContent = 'コピー済み!';\n      btn.classList.add('success');\n      setTimeout(function() {\n        btn.textContent = 'コピー';\n        btn.classList.remove('success');\n      }, 1800);\n    };\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(text).then(done).catch(function() { fallbackCopy(text, done); });\n    } else {\n      fallbackCopy(text, done);\n    }\n  };\n\n  function fallbackCopy(text, cb) {\n    var ta = document.createElement('textarea');\n    ta.value = text;\n    ta.style.position = 'fixed';\n    ta.style.opacity = '0';\n    document.body.appendChild(ta);\n    ta.select();\n    document.execCommand('copy');\n    document.body.removeChild(ta);\n    cb();\n  }\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e乱数生成 → \u003ca href=\"https://productivity-works.com/ja/tools/random-number-generator/\"\u003e乱数生成ツール\u003c/a\u003e\n\u003c/p\u003e","title":"数値ソートツール - 数字を昇順・降順に並べ替え 無料オンライン"},{"content":" 年収・毎月の返済額・頭金などを入力するだけで、住宅ローンで借りられる上限額と毎月の返済シミュレーションを自動計算します。返済負担率（フラット35基準）に基づいた目安を確認できます。 あなたの財務情報を入力 年収（税込） 給与・事業収入など全収入合計 円 毎月の返済中の借入 カーローン・奨学金・カードリボ等 円/月 頭金（金額） 自己資金として用意できる額 円 頭金（割合） 購入価格に対する割合で指定も可 % 年利（固定金利想定） フラット35現行目安 1.8〜2.0% % 返済期間 最長35年まで選択可 15年 20年 25年 30年 35年 固定資産税率（年） 目安：評価額の1.4%前後 % 火災・地震保険（月額） 目安：3,000〜8,000円/月 円/月 返済負担率（フラット35基準） 住宅ローン返済負担率 — 上限目安：25〜30% 全借入合計 返済負担率 — 上限目安：35% 返済負担率とは？\n年収に占める年間返済額の割合です。フラット35では年収400万円未満は30%以内、400万円以上は35%以内が基準。他のローン返済額も合算して審査されます。 借入可能額を計算する 借入可能な住宅価格の上限（目安） 0円 返済負担率基準に基づく試算 毎月の返済額合計 — 借入金額（ローン） — 頭金 — 総支払利息 — ローン総支払額 — 適用金利 — 毎月の支払い内訳 住宅ローン管理を効率化 → freee会計で資産管理を自動化 本シミュレーターは参考目安であり、金融・不動産アドバイスではありません。\n実際の審査結果は金融機関・物件・信用状況により異なります。詳細は金融機関またはFPにご相談ください。 関連ツール 借金返済計算 → 借金返済計算ツール ローン比較 → ローン比較ツール 住宅ローン計算 → 住宅ローン計算ツール ","permalink":"https://productivity-works.com/ja/tools/mortgage-affordability-calculator/","summary":"\u003cdiv id=\"ma-app\"\u003e\n\u003cstyle\u003e\n#ma-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Meiryo', sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a202c;\n  line-height: 1.7;\n}\n#ma-app h2 {\n  font-size: 1.4rem;\n  font-weight: 700;\n  margin: 0 0 1.25rem 0;\n  color: #1a202c;\n}\n#ma-app h3 {\n  font-size: 1.05rem;\n  font-weight: 600;\n  margin: 0 0 1rem 0;\n  color: #2d3748;\n}\n#ma-app .ma-intro {\n  background: #f0f7ff;\n  border-left: 4px solid #3182ce;\n  padding: 1rem 1.25rem;\n  border-radius: 0 8px 8px 0;\n  margin-bottom: 2rem;\n  font-size: 0.93rem;\n  color: #2c5282;\n}\n#ma-app .ma-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 1.75rem;\n  margin-bottom: 1.5rem;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n}\n#ma-app .ma-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1.25rem;\n}\n@media (max-width: 600px) {\n  #ma-app .ma-grid { grid-template-columns: 1fr; }\n}\n#ma-app .ma-field {\n  display: flex;\n  flex-direction: column;\n  gap: 0.4rem;\n}\n#ma-app .ma-field label {\n  font-size: 0.83rem;\n  font-weight: 700;\n  color: #4a5568;\n  letter-spacing: 0.02em;\n}\n#ma-app .ma-field .ma-hint {\n  font-size: 0.76rem;\n  color: #718096;\n  margin-top: -0.2rem;\n}\n#ma-app .ma-input-wrap {\n  position: relative;\n  display: flex;\n  align-items: center;\n}\n#ma-app .ma-input-wrap .ma-prefix,\n#ma-app .ma-input-wrap .ma-suffix {\n  position: absolute;\n  color: #718096;\n  font-size: 0.9rem;\n  font-weight: 500;\n  pointer-events: none;\n}\n#ma-app .ma-input-wrap .ma-prefix { left: 0.75rem; }\n#ma-app .ma-input-wrap .ma-suffix { right: 0.75rem; }\n#ma-app .ma-input-wrap input,\n#ma-app .ma-input-wrap select {\n  width: 100%;\n  border: 1.5px solid #cbd5e0;\n  border-radius: 8px;\n  padding: 0.6rem 0.85rem;\n  font-size: 1rem;\n  background: #fff;\n  color: #1a202c;\n  outline: none;\n  transition: border-color 0.2s;\n  box-sizing: border-box;\n}\n#ma-app .ma-input-wrap input:focus,\n#ma-app .ma-input-wrap select:focus {\n  border-color: #3182ce;\n  box-shadow: 0 0 0 3px rgba(49,130,206,0.15);\n}\n#ma-app .ma-input-wrap.has-prefix input { padding-left: 2.2rem; }\n#ma-app .ma-input-wrap.has-suffix input { padding-right: 2.4rem; }\n#ma-app .ma-dti-row {\n  display: flex;\n  gap: 1rem;\n  margin-top: 0.5rem;\n}\n#ma-app .ma-dti-chip {\n  flex: 1;\n  background: #ebf8ff;\n  border: 1px solid #bee3f8;\n  border-radius: 8px;\n  padding: 0.7rem 0.9rem;\n  text-align: center;\n}\n#ma-app .ma-dti-chip .ma-dti-label {\n  font-size: 0.72rem;\n  color: #2b6cb0;\n  font-weight: 700;\n}\n#ma-app .ma-dti-chip .ma-dti-val {\n  font-size: 1.25rem;\n  font-weight: 700;\n  color: #2c5282;\n}\n#ma-app .ma-dti-chip.warn .ma-dti-val { color: #c05621; }\n#ma-app .ma-dti-chip.danger .ma-dti-val { color: #c53030; }\n#ma-app .ma-btn {\n  display: block;\n  width: 100%;\n  padding: 0.9rem 1.5rem;\n  background: linear-gradient(135deg, #3182ce, #2b6cb0);\n  color: #fff;\n  border: none;\n  border-radius: 10px;\n  font-size: 1.05rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.2s, transform 0.1s;\n  letter-spacing: 0.04em;\n}\n#ma-app .ma-btn:hover { opacity: 0.92; transform: translateY(-1px); }\n#ma-app .ma-btn:active { transform: translateY(0); }\n#ma-app .ma-results { display: none; }\n#ma-app .ma-results.visible { display: block; }\n#ma-app .ma-result-hero {\n  background: linear-gradient(135deg, #2b6cb0, #2c5282);\n  border-radius: 12px;\n  padding: 2rem;\n  text-align: center;\n  color: #fff;\n  margin-bottom: 1.5rem;\n}\n#ma-app .ma-result-hero .ma-hero-label {\n  font-size: 0.83rem;\n  letter-spacing: 0.06em;\n  opacity: 0.85;\n  margin-bottom: 0.4rem;\n}\n#ma-app .ma-result-hero .ma-hero-price {\n  font-size: 2.6rem;\n  font-weight: 800;\n  line-height: 1.1;\n  margin-bottom: 0.75rem;\n}\n#ma-app .ma-result-hero .ma-hero-sub {\n  font-size: 0.95rem;\n  opacity: 0.9;\n}\n#ma-app .ma-stats-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 1rem;\n  margin-bottom: 1.5rem;\n}\n@media (max-width: 600px) {\n  #ma-app .ma-stats-grid { grid-template-columns: 1fr 1fr; }\n}\n#ma-app .ma-stat {\n  background: #f7fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 1rem;\n  text-align: center;\n}\n#ma-app .ma-stat .ma-stat-label {\n  font-size: 0.72rem;\n  color: #718096;\n  font-weight: 700;\n  margin-bottom: 0.3rem;\n}\n#ma-app .ma-stat .ma-stat-value {\n  font-size: 1.2rem;\n  font-weight: 700;\n  color: #2d3748;\n}\n#ma-app .ma-stat .ma-stat-value.green { color: #276749; }\n#ma-app .ma-stat .ma-stat-value.orange { color: #c05621; }\n#ma-app .ma-chart-wrap {\n  display: flex;\n  gap: 2rem;\n  align-items: center;\n  flex-wrap: wrap;\n}\n#ma-app canvas#ma-pie {\n  width: 180px !important;\n  height: 180px !important;\n  flex-shrink: 0;\n}\n#ma-app .ma-legend {\n  flex: 1;\n  min-width: 180px;\n  display: flex;\n  flex-direction: column;\n  gap: 0.6rem;\n}\n#ma-app .ma-legend-item {\n  display: flex;\n  align-items: center;\n  gap: 0.65rem;\n  font-size: 0.88rem;\n}\n#ma-app .ma-legend-dot {\n  width: 14px;\n  height: 14px;\n  border-radius: 3px;\n  flex-shrink: 0;\n}\n#ma-app .ma-legend-name { color: #4a5568; flex: 1; }\n#ma-app .ma-legend-amt { font-weight: 700; color: #2d3748; }\n#ma-app .ma-alert {\n  border-radius: 8px;\n  padding: 0.85rem 1.1rem;\n  font-size: 0.88rem;\n  margin-top: 1rem;\n  display: flex;\n  align-items: flex-start;\n  gap: 0.6rem;\n}\n#ma-app .ma-alert.success { background: #f0fff4; border: 1px solid #9ae6b4; color: #276749; }\n#ma-app .ma-alert.warn { background: #fffbeb; border: 1px solid #fbd38d; color: #744210; }\n#ma-app .ma-alert.danger { background: #fff5f5; border: 1px solid #feb2b2; color: #742a2a; }\n#ma-app .ma-hensai-box {\n  background: #f7fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 1.1rem 1.25rem;\n  margin-top: 1rem;\n  font-size: 0.88rem;\n  color: #4a5568;\n}\n#ma-app .ma-hensai-box strong { color: #2d3748; }\n#ma-app .ma-freee-cta {\n  background: linear-gradient(135deg, #f0f7ff, #ebf8ff);\n  border: 1.5px solid #bee3f8;\n  border-radius: 12px;\n  padding: 1.25rem 1.5rem;\n  margin-top: 2rem;\n  font-size: 0.93rem;\n  color: #2c5282;\n}\n#ma-app .ma-freee-cta a {\n  color: #2b6cb0;\n  font-weight: 700;\n}\n#ma-app .ma-disclaimer {\n  font-size: 0.76rem;\n  color: #a0aec0;\n  margin-top: 1.5rem;\n  text-align: center;\n  line-height: 1.6;\n}\n\u003c/style\u003e\n\u003cdiv class=\"ma-intro\"\u003e\n  年収・毎月の返済額・頭金などを入力するだけで、住宅ローンで借りられる上限額と毎月の返済シミュレーションを自動計算します。返済負担率（フラット35基準）に基づいた目安を確認できます。\n\u003c/div\u003e\n\u003cdiv class=\"ma-card\"\u003e\n  \u003ch2\u003eあなたの財務情報を入力\u003c/h2\u003e\n  \u003cdiv class=\"ma-grid\"\u003e\n    \u003cdiv class=\"ma-field\"\u003e\n      \u003clabel\u003e年収（税込）\u003c/label\u003e\n      \u003cspan class=\"ma-hint\"\u003e給与・事業収入など全収入合計\u003c/span\u003e\n      \u003cdiv class=\"ma-input-wrap has-suffix\"\u003e\n        \u003cinput type=\"number\" id=\"ma-income\" value=\"6000000\" min=\"0\" step=\"100000\" /\u003e\n        \u003cspan class=\"ma-suffix\"\u003e円\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-field\"\u003e\n      \u003clabel\u003e毎月の返済中の借入\u003c/label\u003e\n      \u003cspan class=\"ma-hint\"\u003eカーローン・奨学金・カードリボ等\u003c/span\u003e\n      \u003cdiv class=\"ma-input-wrap has-suffix\"\u003e\n        \u003cinput type=\"number\" id=\"ma-debts\" value=\"30000\" min=\"0\" step=\"5000\" /\u003e\n        \u003cspan class=\"ma-suffix\"\u003e円/月\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-field\"\u003e\n      \u003clabel\u003e頭金（金額）\u003c/label\u003e\n      \u003cspan class=\"ma-hint\"\u003e自己資金として用意できる額\u003c/span\u003e\n      \u003cdiv class=\"ma-input-wrap has-suffix\"\u003e\n        \u003cinput type=\"number\" id=\"ma-downpayment\" value=\"5000000\" min=\"0\" step=\"100000\" /\u003e\n        \u003cspan class=\"ma-suffix\"\u003e円\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-field\"\u003e\n      \u003clabel\u003e頭金（割合）\u003c/label\u003e\n      \u003cspan class=\"ma-hint\"\u003e購入価格に対する割合で指定も可\u003c/span\u003e\n      \u003cdiv class=\"ma-input-wrap has-suffix\"\u003e\n        \u003cinput type=\"number\" id=\"ma-downpct\" value=\"\" min=\"0\" max=\"100\" step=\"0.5\" placeholder=\"例：20\" /\u003e\n        \u003cspan class=\"ma-suffix\"\u003e%\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-field\"\u003e\n      \u003clabel\u003e年利（固定金利想定）\u003c/label\u003e\n      \u003cspan class=\"ma-hint\"\u003eフラット35現行目安 1.8〜2.0%\u003c/span\u003e\n      \u003cdiv class=\"ma-input-wrap has-suffix\"\u003e\n        \u003cinput type=\"number\" id=\"ma-rate\" value=\"1.9\" min=\"0.1\" max=\"15\" step=\"0.05\" /\u003e\n        \u003cspan class=\"ma-suffix\"\u003e%\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-field\"\u003e\n      \u003clabel\u003e返済期間\u003c/label\u003e\n      \u003cspan class=\"ma-hint\"\u003e最長35年まで選択可\u003c/span\u003e\n      \u003cdiv class=\"ma-input-wrap\"\u003e\n        \u003cselect id=\"ma-term\"\u003e\n          \u003coption value=\"15\"\u003e15年\u003c/option\u003e\n          \u003coption value=\"20\"\u003e20年\u003c/option\u003e\n          \u003coption value=\"25\"\u003e25年\u003c/option\u003e\n          \u003coption value=\"30\"\u003e30年\u003c/option\u003e\n          \u003coption value=\"35\" selected\u003e35年\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-field\"\u003e\n      \u003clabel\u003e固定資産税率（年）\u003c/label\u003e\n      \u003cspan class=\"ma-hint\"\u003e目安：評価額の1.4%前後\u003c/span\u003e\n      \u003cdiv class=\"ma-input-wrap has-suffix\"\u003e\n        \u003cinput type=\"number\" id=\"ma-tax\" value=\"1.4\" min=\"0\" max=\"5\" step=\"0.05\" /\u003e\n        \u003cspan class=\"ma-suffix\"\u003e%\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-field\"\u003e\n      \u003clabel\u003e火災・地震保険（月額）\u003c/label\u003e\n      \u003cspan class=\"ma-hint\"\u003e目安：3,000〜8,000円/月\u003c/span\u003e\n      \u003cdiv class=\"ma-input-wrap has-suffix\"\u003e\n        \u003cinput type=\"number\" id=\"ma-insurance\" value=\"5000\" min=\"0\" step=\"500\" /\u003e\n        \u003cspan class=\"ma-suffix\"\u003e円/月\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"margin-top:1.25rem;\"\u003e\n    \u003cdiv style=\"font-size:0.82rem;font-weight:700;color:#4a5568;margin-bottom:0.5rem;\"\u003e返済負担率（フラット35基準）\u003c/div\u003e\n    \u003cdiv class=\"ma-dti-row\"\u003e\n      \u003cdiv class=\"ma-dti-chip\" id=\"ma-frontend-chip\"\u003e\n        \u003cdiv class=\"ma-dti-label\"\u003e住宅ローン返済負担率\u003c/div\u003e\n        \u003cdiv class=\"ma-dti-val\" id=\"ma-frontend-val\"\u003e—\u003c/div\u003e\n        \u003cdiv style=\"font-size:0.7rem;color:#4a5568;\"\u003e上限目安：25〜30%\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"ma-dti-chip\" id=\"ma-backend-chip\"\u003e\n        \u003cdiv class=\"ma-dti-label\"\u003e全借入合計 返済負担率\u003c/div\u003e\n        \u003cdiv class=\"ma-dti-val\" id=\"ma-backend-val\"\u003e—\u003c/div\u003e\n        \u003cdiv style=\"font-size:0.7rem;color:#4a5568;\"\u003e上限目安：35%\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-hensai-box\"\u003e\n      \u003cstrong\u003e返済負担率とは？\u003c/strong\u003e\u003cbr\u003e\n      年収に占める年間返済額の割合です。フラット35では年収400万円未満は30%以内、400万円以上は35%以内が基準。他のローン返済額も合算して審査されます。\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"ma-btn\" style=\"margin-top:1.5rem;\" onclick=\"maCalculateJP()\"\u003e\n    借入可能額を計算する\n  \u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ma-results\" id=\"ma-results\"\u003e\n  \u003cdiv class=\"ma-result-hero\"\u003e\n    \u003cdiv class=\"ma-hero-label\"\u003e借入可能な住宅価格の上限（目安）\u003c/div\u003e\n    \u003cdiv class=\"ma-hero-price\" id=\"ma-max-price\"\u003e0円\u003c/div\u003e\n    \u003cdiv class=\"ma-hero-sub\" id=\"ma-hero-sub\"\u003e返済負担率基準に基づく試算\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ma-stats-grid\"\u003e\n    \u003cdiv class=\"ma-stat\"\u003e\n      \u003cdiv class=\"ma-stat-label\"\u003e毎月の返済額合計\u003c/div\u003e\n      \u003cdiv class=\"ma-stat-value\" id=\"ma-max-payment\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-stat\"\u003e\n      \u003cdiv class=\"ma-stat-label\"\u003e借入金額（ローン）\u003c/div\u003e\n      \u003cdiv class=\"ma-stat-value\" id=\"ma-loan-amt\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-stat\"\u003e\n      \u003cdiv class=\"ma-stat-label\"\u003e頭金\u003c/div\u003e\n      \u003cdiv class=\"ma-stat-value green\" id=\"ma-dp-display\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-stat\"\u003e\n      \u003cdiv class=\"ma-stat-label\"\u003e総支払利息\u003c/div\u003e\n      \u003cdiv class=\"ma-stat-value orange\" id=\"ma-total-interest\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-stat\"\u003e\n      \u003cdiv class=\"ma-stat-label\"\u003eローン総支払額\u003c/div\u003e\n      \u003cdiv class=\"ma-stat-value\" id=\"ma-total-cost\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ma-stat\"\u003e\n      \u003cdiv class=\"ma-stat-label\"\u003e適用金利\u003c/div\u003e\n      \u003cdiv class=\"ma-stat-value\" id=\"ma-rate-display\"\u003e—\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ma-card\"\u003e\n    \u003ch3\u003e毎月の支払い内訳\u003c/h3\u003e\n    \u003cdiv class=\"ma-chart-wrap\"\u003e\n      \u003ccanvas id=\"ma-pie\" width=\"180\" height=\"180\"\u003e\u003c/canvas\u003e\n      \u003cdiv class=\"ma-legend\" id=\"ma-legend\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv id=\"ma-dti-alert\" class=\"ma-alert\" style=\"display:none;\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ma-freee-cta\"\u003e\n    住宅ローン管理を効率化 → \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\"\u003efreee会計で資産管理を自動化\u003c/a\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cp class=\"ma-disclaimer\"\u003e\n  本シミュレーターは参考目安であり、金融・不動産アドバイスではありません。\u003cbr\u003e\n  実際の審査結果は金融機関・物件・信用状況により異なります。詳細は金融機関またはFPにご相談ください。\n\u003c/p\u003e","title":"住宅ローン借入可能額シミュレーター - いくらまで借りられる？"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nスケール： 4.0 5.0 加重平均 GPA — / 4.0 スケール 合計単位数 0 単位 グレードポイント 0 成績 × 単位数 科目名 単位数 成績 ＋ 科目を追加\n成績スケール一覧 リセット\n学費・奨学金の管理もクラウド会計で\nfreee会計なら、収支管理・確定申告をまとめてクラウドで自動化。学生・フリーランス・社会人まで無料で試せます。\nfreeeを無料で試す \u0026rarr; パーセント計算 \u0026rarr; パーセント計算ツール\n関数電卓 \u0026rarr; 関数電卓 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/gpa-calculator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cdiv id=\"gp-app\"\u003e\n\u003cstyle\u003e\n#gp-app * { box-sizing: border-box; margin: 0; padding: 0; }\n#gp-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 680px;\n  margin: 0 auto;\n  padding: 16px;\n  color: #1e293b;\n}\n\n/* Controls bar */\n#gp-app .gp-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  align-items: center;\n  margin-bottom: 18px;\n}\n#gp-app .gp-scale-group,\n#gp-app .gp-weighted-group {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  background: #f1f5f9;\n  border-radius: 8px;\n  padding: 8px 14px;\n}\n#gp-app .gp-controls label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n}\n#gp-app .gp-scale-btn {\n  padding: 5px 14px;\n  border-radius: 6px;\n  border: 1.5px solid #cbd5e1;\n  background: #fff;\n  color: #475569;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#gp-app .gp-scale-btn.active {\n  background: #2563eb;\n  border-color: #2563eb;\n  color: #fff;\n}\n#gp-app .gp-scale-btn:hover:not(.active) {\n  border-color: #93c5fd;\n  color: #2563eb;\n}\n#gp-app .gp-toggle {\n  position: relative;\n  width: 40px;\n  height: 22px;\n  cursor: pointer;\n}\n#gp-app .gp-toggle input { opacity: 0; width: 0; height: 0; position: absolute; }\n#gp-app .gp-toggle-track {\n  position: absolute;\n  inset: 0;\n  border-radius: 22px;\n  background: #cbd5e1;\n  transition: background 0.2s;\n}\n#gp-app .gp-toggle input:checked + .gp-toggle-track { background: #2563eb; }\n#gp-app .gp-toggle-thumb {\n  position: absolute;\n  top: 3px;\n  left: 3px;\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #fff;\n  transition: left 0.2s;\n  box-shadow: 0 1px 3px rgba(0,0,0,0.2);\n}\n#gp-app .gp-toggle input:checked ~ .gp-toggle-thumb { left: 21px; }\n\n/* Course table */\n#gp-app .gp-table-wrap {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  overflow: hidden;\n  margin-bottom: 16px;\n}\n#gp-app .gp-thead {\n  display: grid;\n  grid-template-columns: 1fr 80px 110px 44px;\n  background: #f8fafc;\n  border-bottom: 1.5px solid #e2e8f0;\n  padding: 10px 14px;\n  gap: 8px;\n}\n#gp-app .gp-thead span {\n  font-size: 11px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n}\n#gp-app .gp-course-list { list-style: none; }\n#gp-app .gp-course-row {\n  display: grid;\n  grid-template-columns: 1fr 80px 110px 44px;\n  gap: 8px;\n  padding: 10px 14px;\n  border-bottom: 1px solid #f1f5f9;\n  align-items: center;\n  transition: background 0.1s;\n}\n#gp-app .gp-course-row:last-child { border-bottom: none; }\n#gp-app .gp-course-row:hover { background: #fafbff; }\n#gp-app .gp-input {\n  width: 100%;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 6px;\n  padding: 6px 10px;\n  font-size: 14px;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.15s;\n  -webkit-appearance: none;\n}\n#gp-app .gp-input:focus {\n  outline: none;\n  border-color: #3b82f6;\n  box-shadow: 0 0 0 3px rgba(59,130,246,0.12);\n}\n#gp-app select.gp-input { cursor: pointer; }\n#gp-app .gp-remove-btn {\n  width: 28px;\n  height: 28px;\n  border: none;\n  border-radius: 6px;\n  background: #fee2e2;\n  color: #dc2626;\n  font-size: 16px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: background 0.15s;\n  line-height: 1;\n  justify-self: center;\n}\n#gp-app .gp-remove-btn:hover { background: #fecaca; }\n\n/* Add course button */\n#gp-app .gp-add-btn {\n  width: 100%;\n  padding: 10px;\n  border: 1.5px dashed #93c5fd;\n  border-radius: 8px;\n  background: #eff6ff;\n  color: #2563eb;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n  margin-bottom: 20px;\n}\n#gp-app .gp-add-btn:hover {\n  background: #dbeafe;\n  border-color: #3b82f6;\n}\n\n/* Results panel */\n#gp-app .gp-results {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 12px;\n  margin-bottom: 20px;\n}\n#gp-app .gp-result-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 16px 14px;\n  text-align: center;\n}\n#gp-app .gp-result-card.highlight {\n  background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n  border-color: #93c5fd;\n}\n#gp-app .gp-result-label {\n  font-size: 11px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  margin-bottom: 6px;\n}\n#gp-app .gp-result-value {\n  font-size: 28px;\n  font-weight: 700;\n  color: #1e293b;\n  line-height: 1.1;\n}\n#gp-app .gp-result-card.highlight .gp-result-value { color: #1d4ed8; }\n#gp-app .gp-result-sub {\n  font-size: 12px;\n  color: #94a3b8;\n  margin-top: 4px;\n}\n\n/* Grade scale reference */\n#gp-app .gp-scale-ref {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 14px 16px;\n  margin-bottom: 20px;\n}\n#gp-app .gp-scale-ref h3 {\n  font-size: 12px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  margin-bottom: 10px;\n}\n#gp-app .gp-scale-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));\n  gap: 6px;\n}\n#gp-app .gp-scale-item {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 6px;\n  padding: 5px 8px;\n  text-align: center;\n  font-size: 12px;\n}\n#gp-app .gp-scale-item .si-grade { font-weight: 700; color: #1e293b; }\n#gp-app .gp-scale-item .si-points { color: #2563eb; font-weight: 600; }\n\n/* Reset btn */\n#gp-app .gp-reset-btn {\n  display: block;\n  margin: 0 auto 20px;\n  padding: 9px 24px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  background: #fff;\n  color: #64748b;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#gp-app .gp-reset-btn:hover { border-color: #94a3b8; color: #334155; }\n\n/* freee CTA */\n#gp-app .gp-freee-cta {\n  margin-top: 8px;\n  margin-bottom: 20px;\n  padding: 18px 20px;\n  background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);\n  border: 1.5px solid #bae6fd;\n  border-radius: 10px;\n}\n#gp-app .gp-freee-cta p {\n  margin: 0 0 4px;\n  font-size: 14px;\n  color: #0369a1;\n  font-weight: 600;\n}\n#gp-app .gp-freee-cta span {\n  font-size: 13px;\n  color: #0c4a6e;\n}\n#gp-app .gp-freee-cta a.gp-freee-btn {\n  display: inline-block;\n  margin-top: 10px;\n  padding: 9px 20px;\n  background: #0284c7;\n  color: #fff;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 700;\n  text-decoration: none;\n  transition: background 0.15s;\n}\n#gp-app .gp-freee-cta a.gp-freee-btn:hover { background: #0369a1; }\n\n/* Cross-links */\n#gp-app .gp-crosslinks {\n  margin-top: 20px;\n  font-size: 13px;\n  color: #6c757d;\n  line-height: 1.8;\n}\n#gp-app .gp-crosslinks a { color: #2563eb; text-decoration: none; }\n#gp-app .gp-crosslinks a:hover { text-decoration: underline; }\n\n/* Mobile */\n@media (max-width: 520px) {\n  #gp-app .gp-results { grid-template-columns: 1fr 1fr; }\n  #gp-app .gp-result-card:first-child { grid-column: span 2; }\n  #gp-app .gp-thead,\n  #gp-app .gp-course-row { grid-template-columns: 1fr 60px 90px 34px; gap: 6px; padding: 8px 10px; }\n  #gp-app .gp-result-value { font-size: 22px; }\n}\n\u003c/style\u003e\n\u003c!-- Controls --\u003e\n\u003cdiv class=\"gp-controls\"\u003e\n  \u003cdiv class=\"gp-scale-group\"\u003e\n    \u003clabel\u003eスケール：\u003c/label\u003e\n    \u003cbutton class=\"gp-scale-btn active\" id=\"gp-btn-40\" onclick=\"gpSetScale(4.0)\"\u003e4.0\u003c/button\u003e\n    \u003cbutton class=\"gp-scale-btn\" id=\"gp-btn-50\" onclick=\"gpSetScale(5.0)\"\u003e5.0\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"gp-weighted-group\"\u003e\n    \u003clabel for=\"gp-weighted-toggle\"\u003e加重平均\u003c/label\u003e\n    \u003clabel class=\"gp-toggle\"\u003e\n      \u003cinput type=\"checkbox\" id=\"gp-weighted-toggle\" onchange=\"gpRecalc()\"\u003e\n      \u003cspan class=\"gp-toggle-track\"\u003e\u003c/span\u003e\n      \u003cspan class=\"gp-toggle-thumb\"\u003e\u003c/span\u003e\n    \u003c/label\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Results --\u003e\n\u003cdiv class=\"gp-results\"\u003e\n  \u003cdiv class=\"gp-result-card highlight\"\u003e\n    \u003cdiv class=\"gp-result-label\"\u003eGPA\u003c/div\u003e\n    \u003cdiv class=\"gp-result-value\" id=\"gp-sem-gpa\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"gp-result-sub\" id=\"gp-scale-label\"\u003e/ 4.0 スケール\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"gp-result-card\"\u003e\n    \u003cdiv class=\"gp-result-label\"\u003e合計単位数\u003c/div\u003e\n    \u003cdiv class=\"gp-result-value\" id=\"gp-total-credits\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"gp-result-sub\"\u003e単位\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"gp-result-card\"\u003e\n    \u003cdiv class=\"gp-result-label\"\u003eグレードポイント\u003c/div\u003e\n    \u003cdiv class=\"gp-result-value\" id=\"gp-quality-pts\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"gp-result-sub\"\u003e成績 × 単位数\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Course table --\u003e\n\u003cdiv class=\"gp-table-wrap\"\u003e\n  \u003cdiv class=\"gp-thead\"\u003e\n    \u003cspan\u003e科目名\u003c/span\u003e\n    \u003cspan\u003e単位数\u003c/span\u003e\n    \u003cspan\u003e成績\u003c/span\u003e\n    \u003cspan\u003e\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cul class=\"gp-course-list\" id=\"gp-course-list\"\u003e\u003c/ul\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003cbutton class=\"gp-add-btn\" onclick=\"gpAddCourse()\"\u003e＋ 科目を追加\u003c/button\u003e\u003c/p\u003e","title":"GPA計算ツール"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nFX利益計算シミュレーター【2026年版】 通貨ペア・ロット数・エントリー価格・決済価格を入力するだけで、損益額・税金・必要証拠金を自動計算します。\n通貨ペア USD/JPY（ドル円） EUR/JPY（ユーロ円） GBP/JPY（ポンド円） AUD/JPY（豪ドル円） EUR/USD（ユーロドル） 売買方向 買い（ロング） 売り（ショート） 取引数量（ロット） ※1ロット=10,000通貨 1ロット10ロット100ロット エントリー価格 決済価格 スプレッド（pips） 00.2 pips5.0 損益（税引前） +100,000円 獲得pips: 100.0 pips 必要証拠金 620,000円 実質レバレッジ 25.0倍 利益にかかる税金 20,315円 税引後の手取り 79,685円 証拠金利回り +16.1% 計算条件: レバレッジ25倍（国内FX上限）。税金は申告分離課税20.315%（所得税15.315%+住民税5%）。スワップポイント・ロスカット手数料は含みません。 FXを始めるならどの口座？ シミュレーション結果を見て、FXに興味を持ちましたか？初心者におすすめのFX口座を紹介します。\nDMM FX — 初心者人気No.1 スプレッド: USD/JPY 0.2銭（業界最狭水準） 最低取引単位: 10,000通貨（1ロット） 特徴: スマホアプリが使いやすい、24時間サポート、取引ツールが充実 口座開設: 最短30分、スマホで本人確認完了 上のシミュレーターでスプレッド0.2 pipsに設定すると、DMM FXの実際のコストに近い計算ができます。\nGMOクリック証券 — 総合力No.1 スプレッド: USD/JPY 0.2銭 最低取引単位: 1,000通貨から可能 特徴: FX以外の投資（株・CFD）もワンストップ FXの税金について知っておくべきこと 申告分離課税20.315% FXの利益には**一律20.315%**の税金がかかります（所得税15.315% + 住民税5%）。給与所得とは別に計算されるため、副業の税率より有利な場合があります。\n項目 FX 副業（雑所得） 税率 一律20.315% 累進課税（5%〜45%） 損益通算 他の先物取引と可能 原則不可 損失繰越 3年間繰越可能 不可 年間利益20万円以下の場合 給与所得者（会社員）でFX利益が年間20万円以下なら、確定申告は不要です（住民税の申告は必要）。\n→ 詳しくは 副業の税金計算シミュレーター で確認\nFXのリスクと注意点 レバレッジのリスク: 25倍のレバレッジは利益も損失も25倍。証拠金以上の損失が発生する可能性があります ロスカット: 証拠金維持率が一定水準を下回ると、自動的にポジションが決済されます 初心者は少額から: まずは1〜2ロットで値動きに慣れることをおすすめします よくある質問 Q. 1ロットでどれくらいの利益が出ますか？ USD/JPYで1ロット（10,000通貨）の場合、1円動くと10,000円の損益です。10pips（0.1円）なら1,000円です。\nQ. 必要証拠金はいくらですか？ USD/JPY 155円で1ロットの場合、155円 × 10,000通貨 ÷ 25（レバレッジ）= 62,000円です。上のシミュレーターで正確に計算できます。\nQ. FXと株、どちらが初心者向きですか？ 少額から始められるのはFX（数万円〜）。長期資産形成なら株・投資信託がおすすめです → つみたてNISAシミュレーター 関連ツール・記事 つみたてNISAシミュレーター — 長期投資の資産シミュレーション 複利計算シミュレーター — 複利効果を可視化 手取り計算シミュレーター — 年収からの手取り計算 副業の税金計算シミュレーター — 確定申告の要否判定 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 DMM FXの口座開設のやり方｜初心者でも10分で完了する全手順【2026年版】 FX確定申告に必要な書類一覧と取得方法｜初心者向け完全手順 FX口座の開設審査に落ちる原因と通過率を上げる4つの対策 ","permalink":"https://productivity-works.com/ja/tools/fx-profit-calculator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"fx利益計算シミュレーター2026年版\"\u003eFX利益計算シミュレーター【2026年版】\u003c/h1\u003e\n\u003cp\u003e通貨ペア・ロット数・エントリー価格・決済価格を入力するだけで、\u003cstrong\u003e損益額\u003c/strong\u003e・\u003cstrong\u003e税金\u003c/strong\u003e・\u003cstrong\u003e必要証拠金\u003c/strong\u003eを自動計算します。\u003c/p\u003e\n\u003cdiv id=\"fx-calc\" style=\"max-width:640px;margin:0 auto;padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e通貨ペア\u003c/label\u003e\n\u003cselect id=\"pair\" onchange=\"fxCalc()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:6px;font-size:16px;\"\u003e\n\u003coption value=\"USDJPY\" data-rate=\"155.00\" data-pip=\"0.01\" data-unit=\"1\"\u003eUSD/JPY（ドル円）\u003c/option\u003e\n\u003coption value=\"EURJPY\" data-rate=\"168.00\" data-pip=\"0.01\" data-unit=\"1\"\u003eEUR/JPY（ユーロ円）\u003c/option\u003e\n\u003coption value=\"GBPJPY\" data-rate=\"196.00\" data-pip=\"0.01\" data-unit=\"1\"\u003eGBP/JPY（ポンド円）\u003c/option\u003e\n\u003coption value=\"AUDJPY\" data-rate=\"100.00\" data-pip=\"0.01\" data-unit=\"1\"\u003eAUD/JPY（豪ドル円）\u003c/option\u003e\n\u003coption value=\"EURUSD\" data-rate=\"1.0840\" data-pip=\"0.0001\" data-unit=\"155\"\u003eEUR/USD（ユーロドル）\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e売買方向\u003c/label\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:8px;\"\u003e\n\u003cbutton id=\"btnBuy\" onclick=\"setDir('buy')\" style=\"padding:12px;border:2px solid #2563eb;border-radius:8px;background:#2563eb;color:white;font-weight:bold;font-size:16px;cursor:pointer;\"\u003e買い（ロング）\u003c/button\u003e\n\u003cbutton id=\"btnSell\" onclick=\"setDir('sell')\" style=\"padding:12px;border:2px solid #cbd5e1;border-radius:8px;background:white;color:#475569;font-weight:bold;font-size:16px;cursor:pointer;\"\u003e売り（ショート）\u003c/button\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e取引数量（ロット） ※1ロット=10,000通貨\u003c/label\u003e\n\u003cinput type=\"range\" id=\"lots\" min=\"1\" max=\"100\" step=\"1\" value=\"10\" oninput=\"fxCalc()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1ロット\u003c/span\u003e\u003cspan id=\"lotsVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e10ロット\u003c/span\u003e\u003cspan\u003e100ロット\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:20px;\"\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003eエントリー価格\u003c/label\u003e\n\u003cinput type=\"number\" id=\"entryPrice\" value=\"155.00\" step=\"0.01\" oninput=\"fxCalc()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:6px;font-size:16px;box-sizing:border-box;\"\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e決済価格\u003c/label\u003e\n\u003cinput type=\"number\" id=\"exitPrice\" value=\"156.00\" step=\"0.01\" oninput=\"fxCalc()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:6px;font-size:16px;box-sizing:border-box;\"\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:24px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003eスプレッド（pips）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"spread\" min=\"0\" max=\"5\" step=\"0.1\" value=\"0.2\" oninput=\"fxCalc()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0\u003c/span\u003e\u003cspan id=\"spreadVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e0.2 pips\u003c/span\u003e\u003cspan\u003e5.0\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"plBox\" style=\"background:#16a34a;color:white;border-radius:8px;padding:20px;text-align:center;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:14px;margin-bottom:4px;\"\u003e損益（税引前）\u003c/div\u003e\n\u003cdiv id=\"plAmount\" style=\"font-size:36px;font-weight:bold;\"\u003e+100,000円\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;margin-top:4px;\"\u003e獲得pips: \u003cspan id=\"plPips\" style=\"font-weight:bold;\"\u003e100.0 pips\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"background:#e0f2fe;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e必要証拠金\u003c/div\u003e\n\u003cdiv id=\"margin\" style=\"font-size:14px;font-weight:bold;color:#0369a1;\"\u003e620,000円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#fef9c3;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e実質レバレッジ\u003c/div\u003e\n\u003cdiv id=\"leverage\" style=\"font-size:14px;font-weight:bold;color:#a16207;\"\u003e25.0倍\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#fee2e2;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e利益にかかる税金\u003c/div\u003e\n\u003cdiv id=\"taxAmount\" style=\"font-size:14px;font-weight:bold;color:#dc2626;\"\u003e20,315円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"background:#dcfce7;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e税引後の手取り\u003c/div\u003e\n\u003cdiv id=\"netProfit\" style=\"font-size:18px;font-weight:bold;color:#15803d;\"\u003e79,685円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f3e8ff;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e証拠金利回り\u003c/div\u003e\n\u003cdiv id=\"roi\" style=\"font-size:18px;font-weight:bold;color:#7c3aed;\"\u003e+16.1%\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f1f5f9;border-radius:8px;padding:12px;font-size:13px;color:#475569;\"\u003e\n\u003cstrong\u003e計算条件:\u003c/strong\u003e レバレッジ25倍（国内FX上限）。税金は申告分離課税20.315%（所得税15.315%+住民税5%）。スワップポイント・ロスカット手数料は含みません。\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nvar fxDir='buy';\nfunction setDir(d){\n  fxDir=d;\n  document.getElementById('btnBuy').style.background=d==='buy'?'#2563eb':'white';\n  document.getElementById('btnBuy').style.color=d==='buy'?'white':'#475569';\n  document.getElementById('btnBuy').style.borderColor=d==='buy'?'#2563eb':'#cbd5e1';\n  document.getElementById('btnSell').style.background=d==='sell'?'#dc2626':'white';\n  document.getElementById('btnSell').style.color=d==='sell'?'white':'#475569';\n  document.getElementById('btnSell').style.borderColor=d==='sell'?'#dc2626':'#cbd5e1';\n  fxCalc();\n}\nfunction fxCalc(){\n  var sel=document.getElementById('pair');\n  var opt=sel.options[sel.selectedIndex];\n  var pipSize=parseFloat(opt.getAttribute('data-pip'));\n  var jpyPerPip=parseFloat(opt.getAttribute('data-unit'));\n  var lots=parseInt(document.getElementById('lots').value);\n  var entry=parseFloat(document.getElementById('entryPrice').value);\n  var exit=parseFloat(document.getElementById('exitPrice').value);\n  var spreadPips=parseFloat(document.getElementById('spread').value);\n  if(isNaN(entry)||isNaN(exit)||entry\u003c=0||exit\u003c=0){return;}\n  var units=lots*10000;\n  var priceDiff=fxDir==='buy'?(exit-entry):(entry-exit);\n  var pips=priceDiff/pipSize;\n  var netPips=pips-spreadPips;\n  var plJpy=netPips*pipSize*units*jpyPerPip;\n  var plRound=Math.round(plJpy);\n  var marginRate=entry*units/25;\n  if(jpyPerPip\u003e1){marginRate=entry*units*jpyPerPip/25;}else{marginRate=entry*units/25;}\n  var marginJpy;\n  if(sel.value.endsWith('JPY')){\n    marginJpy=Math.ceil(entry*units/25);\n  }else{\n    marginJpy=Math.ceil(entry*units*jpyPerPip/25);\n  }\n  var lev=(entry*units*(sel.value.endsWith('JPY')?1:jpyPerPip))/marginJpy;\n  var tax=plRound\u003e0?Math.floor(plRound*0.20315):0;\n  var netPl=plRound-tax;\n  var roiPct=marginJpy\u003e0?((plRound/marginJpy)*100):0;\n  var plBox=document.getElementById('plBox');\n  if(plRound\u003e=0){\n    plBox.style.background='#16a34a';\n  }else{\n    plBox.style.background='#dc2626';\n  }\n  document.getElementById('lotsVal').textContent=lots+'ロット';\n  document.getElementById('spreadVal').textContent=spreadPips.toFixed(1)+' pips';\n  document.getElementById('plAmount').textContent=(plRound\u003e=0?'+':'')+plRound.toLocaleString()+'円';\n  document.getElementById('plPips').textContent=(netPips\u003e=0?'+':'')+netPips.toFixed(1)+' pips';\n  document.getElementById('margin').textContent=marginJpy.toLocaleString()+'円';\n  document.getElementById('leverage').textContent=lev.toFixed(1)+'倍';\n  document.getElementById('taxAmount').textContent=tax.toLocaleString()+'円';\n  document.getElementById('netProfit').textContent=(netPl\u003e=0?'+':'')+netPl.toLocaleString()+'円';\n  document.getElementById('roi').textContent=(roiPct\u003e=0?'+':'')+roiPct.toFixed(1)+'%';\n}\nfxCalc();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"fxを始めるならどの口座\"\u003eFXを始めるならどの口座？\u003c/h2\u003e\n\u003cp\u003eシミュレーション結果を見て、FXに興味を持ちましたか？初心者におすすめのFX口座を紹介します。\u003c/p\u003e","title":"FX利益計算シミュレーター｜損益・税金・必要証拠金を自動計算【2026年版】"},{"content":"ビジュアルで直感的にCSS border-radiusを設計できるツールです。シンプルな角丸からピル・円・ブロブ・有機的なシェイプまで、プリセットとスライダーで自由に生成。CSSコードをワンクリックでコピーできます。\nプリセット なし ピル 円 ブロブ スクワークル リーフ ドロップ 三角風 プレビュー 幅 (px) 高さ (px) カラー コントロール \u0026lt;!-- 単位切り替え --\u0026gt; \u0026lt;div class=\u0026quot;br-unit-toggle\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;br-unit-btn active\u0026quot; data-unit=\u0026quot;px\u0026quot;\u0026gt;px\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;br-unit-btn\u0026quot; data-unit=\u0026quot;%\u0026quot;\u0026gt;%\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- リンクトグル --\u0026gt; \u0026lt;div class=\u0026quot;br-link-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;br-link-btn active\u0026quot; id=\u0026quot;br-link-btn\u0026quot;\u0026gt; \u0026lt;svg viewBox=\u0026quot;0 0 20 20\u0026quot;\u0026gt;\u0026lt;path d=\u0026quot;M10.293 3.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 9H5a1 1 0 110-2h7.586l-2.293-2.293a1 1 0 010-1.414zM3 14a1 1 0 100 2h14a1 1 0 100-2H3z\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt; コーナーを連動 \u0026lt;/button\u0026gt; \u0026lt;span id=\u0026quot;br-link-label\u0026quot; style=\u0026quot;font-size:12px;color:#6b7280;\u0026quot;\u0026gt;全コーナーが同時に変わります\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- コーナースライダー --\u0026gt; \u0026lt;div class=\u0026quot;br-corner-grid\u0026quot; id=\u0026quot;br-corner-grid\u0026quot;\u0026gt; \u0026lt;!-- 左上 --\u0026gt; \u0026lt;div class=\u0026quot;br-corner-block\u0026quot; id=\u0026quot;br-block-tl\u0026quot;\u0026gt; \u0026lt;label\u0026gt;左上\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;br-slider-row\u0026quot;\u0026gt; \u0026lt;span\u0026gt;H\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-tl-h\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-tl-h-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;br-slider-row\u0026quot; id=\u0026quot;br-tl-v-row\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt; \u0026lt;span\u0026gt;V\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-tl-v\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-tl-v-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;label class=\u0026quot;br-elliptic-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;br-tl-ell\u0026quot;\u0026gt; 楕円\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- 右上 --\u0026gt; \u0026lt;div class=\u0026quot;br-corner-block\u0026quot; id=\u0026quot;br-block-tr\u0026quot;\u0026gt; \u0026lt;label\u0026gt;右上\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;br-slider-row\u0026quot;\u0026gt; \u0026lt;span\u0026gt;H\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-tr-h\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-tr-h-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;br-slider-row\u0026quot; id=\u0026quot;br-tr-v-row\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt; \u0026lt;span\u0026gt;V\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-tr-v\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-tr-v-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;label class=\u0026quot;br-elliptic-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;br-tr-ell\u0026quot;\u0026gt; 楕円\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- 右下 --\u0026gt; \u0026lt;div class=\u0026quot;br-corner-block\u0026quot; id=\u0026quot;br-block-br\u0026quot;\u0026gt; \u0026lt;label\u0026gt;右下\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;br-slider-row\u0026quot;\u0026gt; \u0026lt;span\u0026gt;H\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-br-h\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-br-h-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;br-slider-row\u0026quot; id=\u0026quot;br-br-v-row\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt; \u0026lt;span\u0026gt;V\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-br-v\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-br-v-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;label class=\u0026quot;br-elliptic-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;br-br-ell\u0026quot;\u0026gt; 楕円\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- 左下 --\u0026gt; \u0026lt;div class=\u0026quot;br-corner-block\u0026quot; id=\u0026quot;br-block-bl\u0026quot;\u0026gt; \u0026lt;label\u0026gt;左下\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;br-slider-row\u0026quot;\u0026gt; \u0026lt;span\u0026gt;H\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-bl-h\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-bl-h-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;br-slider-row\u0026quot; id=\u0026quot;br-bl-v-row\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt; \u0026lt;span\u0026gt;V\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-bl-v\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-bl-v-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;label class=\u0026quot;br-elliptic-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;br-bl-ell\u0026quot;\u0026gt; 楕円\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;!-- /.br-corner-grid --\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;!-- /.br-panel --\u0026gt; 生成されたCSS コピー border-radius: 0; 経理・会計をもっとスマートに freee会計なら、請求書・確定申告・経費精算をまとめて自動化。エンジニアやフリーランスにも選ばれています。\nfreeeを無料で試す 使い方 プリセットを選んでシェイプのベースを決める。または、スライダーをゼロから調整する。 px / % を切り替え — パーセントは要素サイズに対する相対値、ピクセルは絶対値。 コーナー連動をオフにすると、各コーナーを独立して設定可能。 楕円チェックを入れると水平・垂直の半径を個別指定でき、有機的なフォルムに。 プレビューサイズを変えてアスペクト比が変わったときの見た目を確認。 CSSをコピーしてスタイルシートに直接貼り付け。 早見表: border-radius の書き方 値 意味 border-radius: 8px 全角が同一 border-radius: 8px 16px TL+BR / TR+BL border-radius: 8px 16px 24px 32px TL TR BR BL（時計回り） border-radius: 40% 60% / 60% 40% 楕円（水平 / 垂直） 関連ツール ボックスシャドウを生成 → CSS Box Shadow ジェネレーター グラデーションを作成 → CSS グラデーションジェネレーター Flexboxレイアウトを構築 → CSS Flexbox ジェネレーター ","permalink":"https://productivity-works.com/ja/tools/border-radius-generator/","summary":"\u003cp\u003eビジュアルで直感的にCSS border-radiusを設計できるツールです。シンプルな角丸からピル・円・ブロブ・有機的なシェイプまで、プリセットとスライダーで自由に生成。CSSコードをワンクリックでコピーできます。\u003c/p\u003e\n\u003cdiv id=\"br-app\"\u003e\n\u003cstyle\u003e\n/* ── リセット \u0026 ベース ─────────────────────────────────────── */\n#br-app *,\n#br-app *::before,\n#br-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#br-app {\n  font-family: system-ui, -apple-system, sans-serif;\n  font-size: 14px;\n  color: #1a1a2e;\n  line-height: 1.5;\n}\n\n/* ── レイアウト ───────────────────────────────────────────── */\n#br-app .br-layout {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 24px;\n  margin-top: 24px;\n}\n@media (max-width: 720px) {\n  #br-app .br-layout {\n    grid-template-columns: 1fr;\n  }\n}\n\n/* ── パネル ───────────────────────────────────────────────── */\n#br-app .br-panel {\n  background: #f8f9fc;\n  border: 1px solid #e2e6f0;\n  border-radius: 12px;\n  padding: 20px;\n}\n#br-app .br-panel h3 {\n  font-size: 13px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: .06em;\n  color: #6b7280;\n  margin-bottom: 16px;\n}\n\n/* ── プレビュー ───────────────────────────────────────────── */\n#br-app .br-preview-wrap {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 260px;\n  background: repeating-conic-gradient(#e5e7eb 0% 25%, #f9fafb 0% 50%) 0 0 / 20px 20px;\n  border-radius: 8px;\n  padding: 20px;\n  margin-bottom: 16px;\n}\n#br-app #br-preview-box {\n  width: 160px;\n  height: 160px;\n  background: #6366f1;\n  transition: border-radius .15s ease, width .15s ease, height .15s ease, background .15s ease;\n}\n\n/* ── プレビュー操作 ───────────────────────────────────────── */\n#br-app .br-preview-controls {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  gap: 10px;\n  align-items: end;\n}\n#br-app .br-preview-controls label {\n  font-size: 12px;\n  color: #6b7280;\n  display: block;\n  margin-bottom: 4px;\n}\n#br-app .br-preview-controls input[type=\"number\"] {\n  width: 100%;\n  padding: 6px 8px;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  font-size: 13px;\n  background: #fff;\n}\n#br-app .br-preview-controls input[type=\"color\"] {\n  width: 100%;\n  height: 34px;\n  padding: 2px 4px;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  cursor: pointer;\n  background: #fff;\n}\n\n/* ── プリセット ───────────────────────────────────────────── */\n#br-app .br-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n#br-app .br-preset-btn {\n  padding: 6px 14px;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  background: #fff;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background .12s, border-color .12s, color .12s;\n}\n#br-app .br-preset-btn:hover,\n#br-app .br-preset-btn.active {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n\n/* ── 単位切り替え ─────────────────────────────────────────── */\n#br-app .br-unit-toggle {\n  display: flex;\n  gap: 0;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  overflow: hidden;\n  width: fit-content;\n  margin-bottom: 16px;\n}\n#br-app .br-unit-btn {\n  padding: 5px 16px;\n  border: none;\n  background: #fff;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background .12s, color .12s;\n}\n#br-app .br-unit-btn.active {\n  background: #6366f1;\n  color: #fff;\n}\n\n/* ── コーナーグリッド ─────────────────────────────────────── */\n#br-app .br-corner-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 16px;\n}\n#br-app .br-corner-block {\n  background: #fff;\n  border: 1px solid #e2e6f0;\n  border-radius: 8px;\n  padding: 12px;\n}\n#br-app .br-corner-block label {\n  font-size: 11px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: .05em;\n  color: #6366f1;\n  display: block;\n  margin-bottom: 8px;\n}\n#br-app .br-slider-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 6px;\n}\n#br-app .br-slider-row span {\n  font-size: 11px;\n  color: #9ca3af;\n  width: 10px;\n  flex-shrink: 0;\n}\n#br-app .br-slider-row input[type=\"range\"] {\n  flex: 1;\n  accent-color: #6366f1;\n  cursor: pointer;\n}\n#br-app .br-slider-row input[type=\"number\"] {\n  width: 52px;\n  padding: 3px 6px;\n  border: 1px solid #d1d5db;\n  border-radius: 5px;\n  font-size: 12px;\n  text-align: right;\n}\n#br-app .br-elliptic-toggle {\n  font-size: 11px;\n  color: #6b7280;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  margin-top: 4px;\n  user-select: none;\n}\n#br-app .br-elliptic-toggle input { accent-color: #6366f1; cursor: pointer; }\n\n/* ── リンクトグル ─────────────────────────────────────────── */\n#br-app .br-link-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 16px;\n}\n#br-app .br-link-btn {\n  padding: 6px 14px;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  background: #fff;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background .12s, border-color .12s, color .12s;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n#br-app .br-link-btn.active {\n  background: #6366f1;\n  border-color: #6366f1;\n  color: #fff;\n}\n#br-app .br-link-btn svg {\n  width: 14px; height: 14px; fill: currentColor;\n}\n\n/* ── CSS出力 ──────────────────────────────────────────────── */\n#br-app .br-output-box {\n  background: #1a1a2e;\n  border-radius: 8px;\n  padding: 16px;\n  margin-top: 8px;\n  position: relative;\n}\n#br-app .br-output-code {\n  font-family: 'Fira Mono', 'Cascadia Code', monospace;\n  font-size: 13px;\n  color: #a5f3fc;\n  word-break: break-all;\n  white-space: pre-wrap;\n  line-height: 1.7;\n}\n#br-app .br-copy-btn {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  padding: 5px 12px;\n  background: #6366f1;\n  color: #fff;\n  border: none;\n  border-radius: 5px;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background .12s;\n}\n#br-app .br-copy-btn:hover { background: #4f46e5; }\n#br-app .br-copy-btn.copied { background: #10b981; }\n\n/* ── freee CTA ────────────────────────────────────────────── */\n#br-app .br-cta-box {\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n  border-radius: 12px;\n  padding: 24px;\n  margin-top: 32px;\n  color: #fff;\n  text-align: center;\n}\n#br-app .br-cta-box h4 {\n  font-size: 18px;\n  font-weight: 700;\n  margin-bottom: 8px;\n}\n#br-app .br-cta-box p {\n  font-size: 14px;\n  opacity: .9;\n  margin-bottom: 16px;\n}\n#br-app .br-cta-btn {\n  display: inline-block;\n  padding: 10px 28px;\n  background: #fff;\n  color: #6366f1;\n  font-weight: 700;\n  font-size: 14px;\n  border-radius: 8px;\n  text-decoration: none;\n  transition: opacity .12s;\n}\n#br-app .br-cta-btn:hover { opacity: .9; }\n\u003c/style\u003e\n\u003c!-- ── プリセット ── --\u003e\n\u003cdiv class=\"br-panel\" style=\"margin-top:24px;\"\u003e\n  \u003ch3\u003eプリセット\u003c/h3\u003e\n  \u003cdiv class=\"br-presets\"\u003e\n    \u003cbutton class=\"br-preset-btn\" data-preset=\"none\"\u003eなし\u003c/button\u003e\n    \u003cbutton class=\"br-preset-btn\" data-preset=\"pill\"\u003eピル\u003c/button\u003e\n    \u003cbutton class=\"br-preset-btn\" data-preset=\"circle\"\u003e円\u003c/button\u003e\n    \u003cbutton class=\"br-preset-btn\" data-preset=\"blob\"\u003eブロブ\u003c/button\u003e\n    \u003cbutton class=\"br-preset-btn\" data-preset=\"squircle\"\u003eスクワークル\u003c/button\u003e\n    \u003cbutton class=\"br-preset-btn\" data-preset=\"leaf\"\u003eリーフ\u003c/button\u003e\n    \u003cbutton class=\"br-preset-btn\" data-preset=\"drop\"\u003eドロップ\u003c/button\u003e\n    \u003cbutton class=\"br-preset-btn\" data-preset=\"triangle\"\u003e三角風\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"br-layout\"\u003e\n  \u003c!-- 左: プレビュー --\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"br-panel\"\u003e\n      \u003ch3\u003eプレビュー\u003c/h3\u003e\n      \u003cdiv class=\"br-preview-wrap\"\u003e\n        \u003cdiv id=\"br-preview-box\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"br-preview-controls\"\u003e\n        \u003cdiv\u003e\n          \u003clabel for=\"br-pw\"\u003e幅 (px)\u003c/label\u003e\n          \u003cinput type=\"number\" id=\"br-pw\" value=\"160\" min=\"40\" max=\"400\" step=\"4\"\u003e\n        \u003c/div\u003e\n        \u003cdiv\u003e\n          \u003clabel for=\"br-ph\"\u003e高さ (px)\u003c/label\u003e\n          \u003cinput type=\"number\" id=\"br-ph\" value=\"160\" min=\"40\" max=\"400\" step=\"4\"\u003e\n        \u003c/div\u003e\n        \u003cdiv\u003e\n          \u003clabel for=\"br-pbg\"\u003eカラー\u003c/label\u003e\n          \u003cinput type=\"color\" id=\"br-pbg\" value=\"#6366f1\"\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 右: コントロール --\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"br-panel\"\u003e\n      \u003ch3\u003eコントロール\u003c/h3\u003e\n\u003cpre\u003e\u003ccode\u003e  \u0026lt;!-- 単位切り替え --\u0026gt;\n  \u0026lt;div class=\u0026quot;br-unit-toggle\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;br-unit-btn active\u0026quot; data-unit=\u0026quot;px\u0026quot;\u0026gt;px\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;br-unit-btn\u0026quot; data-unit=\u0026quot;%\u0026quot;\u0026gt;%\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- リンクトグル --\u0026gt;\n  \u0026lt;div class=\u0026quot;br-link-row\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;br-link-btn active\u0026quot; id=\u0026quot;br-link-btn\u0026quot;\u0026gt;\n      \u0026lt;svg viewBox=\u0026quot;0 0 20 20\u0026quot;\u0026gt;\u0026lt;path d=\u0026quot;M10.293 3.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L12.586 9H5a1 1 0 110-2h7.586l-2.293-2.293a1 1 0 010-1.414zM3 14a1 1 0 100 2h14a1 1 0 100-2H3z\u0026quot;/\u0026gt;\u0026lt;/svg\u0026gt;\n      コーナーを連動\n    \u0026lt;/button\u0026gt;\n    \u0026lt;span id=\u0026quot;br-link-label\u0026quot; style=\u0026quot;font-size:12px;color:#6b7280;\u0026quot;\u0026gt;全コーナーが同時に変わります\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- コーナースライダー --\u0026gt;\n  \u0026lt;div class=\u0026quot;br-corner-grid\u0026quot; id=\u0026quot;br-corner-grid\u0026quot;\u0026gt;\n\n    \u0026lt;!-- 左上 --\u0026gt;\n    \u0026lt;div class=\u0026quot;br-corner-block\u0026quot; id=\u0026quot;br-block-tl\u0026quot;\u0026gt;\n      \u0026lt;label\u0026gt;左上\u0026lt;/label\u0026gt;\n      \u0026lt;div class=\u0026quot;br-slider-row\u0026quot;\u0026gt;\n        \u0026lt;span\u0026gt;H\u0026lt;/span\u0026gt;\n        \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-tl-h\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-tl-h-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;br-slider-row\u0026quot; id=\u0026quot;br-tl-v-row\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt;\n        \u0026lt;span\u0026gt;V\u0026lt;/span\u0026gt;\n        \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-tl-v\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-tl-v-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;label class=\u0026quot;br-elliptic-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;br-tl-ell\u0026quot;\u0026gt; 楕円\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n\n    \u0026lt;!-- 右上 --\u0026gt;\n    \u0026lt;div class=\u0026quot;br-corner-block\u0026quot; id=\u0026quot;br-block-tr\u0026quot;\u0026gt;\n      \u0026lt;label\u0026gt;右上\u0026lt;/label\u0026gt;\n      \u0026lt;div class=\u0026quot;br-slider-row\u0026quot;\u0026gt;\n        \u0026lt;span\u0026gt;H\u0026lt;/span\u0026gt;\n        \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-tr-h\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-tr-h-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;br-slider-row\u0026quot; id=\u0026quot;br-tr-v-row\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt;\n        \u0026lt;span\u0026gt;V\u0026lt;/span\u0026gt;\n        \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-tr-v\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-tr-v-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;label class=\u0026quot;br-elliptic-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;br-tr-ell\u0026quot;\u0026gt; 楕円\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n\n    \u0026lt;!-- 右下 --\u0026gt;\n    \u0026lt;div class=\u0026quot;br-corner-block\u0026quot; id=\u0026quot;br-block-br\u0026quot;\u0026gt;\n      \u0026lt;label\u0026gt;右下\u0026lt;/label\u0026gt;\n      \u0026lt;div class=\u0026quot;br-slider-row\u0026quot;\u0026gt;\n        \u0026lt;span\u0026gt;H\u0026lt;/span\u0026gt;\n        \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-br-h\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-br-h-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;br-slider-row\u0026quot; id=\u0026quot;br-br-v-row\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt;\n        \u0026lt;span\u0026gt;V\u0026lt;/span\u0026gt;\n        \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-br-v\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-br-v-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;label class=\u0026quot;br-elliptic-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;br-br-ell\u0026quot;\u0026gt; 楕円\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n\n    \u0026lt;!-- 左下 --\u0026gt;\n    \u0026lt;div class=\u0026quot;br-corner-block\u0026quot; id=\u0026quot;br-block-bl\u0026quot;\u0026gt;\n      \u0026lt;label\u0026gt;左下\u0026lt;/label\u0026gt;\n      \u0026lt;div class=\u0026quot;br-slider-row\u0026quot;\u0026gt;\n        \u0026lt;span\u0026gt;H\u0026lt;/span\u0026gt;\n        \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-bl-h\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-bl-h-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;br-slider-row\u0026quot; id=\u0026quot;br-bl-v-row\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt;\n        \u0026lt;span\u0026gt;V\u0026lt;/span\u0026gt;\n        \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;br-bl-v\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;br-bl-v-n\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;200\u0026quot; value=\u0026quot;0\u0026quot;\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;label class=\u0026quot;br-elliptic-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;br-bl-ell\u0026quot;\u0026gt; 楕円\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n\n  \u0026lt;/div\u0026gt;\u0026lt;!-- /.br-corner-grid --\u0026gt;\n\u0026lt;/div\u0026gt;\u0026lt;!-- /.br-panel --\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\u003c!-- /.br-layout --\u003e\n\u003c!-- CSS出力 --\u003e\n\u003cdiv class=\"br-panel\" style=\"margin-top:0;\"\u003e\n  \u003ch3\u003e生成されたCSS\u003c/h3\u003e\n  \u003cdiv class=\"br-output-box\"\u003e\n    \u003cbutton class=\"br-copy-btn\" id=\"br-copy-btn\"\u003eコピー\u003c/button\u003e\n    \u003cpre class=\"br-output-code\" id=\"br-output-code\"\u003eborder-radius: 0;\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  /* ── 状態 ── */\n  var unit = 'px';\n  var linked = true;\n\n  var corners = {\n    tl: { h: 0, v: 0, elliptic: false },\n    tr: { h: 0, v: 0, elliptic: false },\n    br: { h: 0, v: 0, elliptic: false },\n    bl: { h: 0, v: 0, elliptic: false }\n  };\n\n  /* ── プリセット ── */\n  var PRESETS = {\n    none:     { tl:{h:0,v:0,e:false}, tr:{h:0,v:0,e:false}, br:{h:0,v:0,e:false}, bl:{h:0,v:0,e:false}, unit:'px' },\n    pill:     { tl:{h:999,v:999,e:false}, tr:{h:999,v:999,e:false}, br:{h:999,v:999,e:false}, bl:{h:999,v:999,e:false}, unit:'px' },\n    circle:   { tl:{h:50,v:50,e:false}, tr:{h:50,v:50,e:false}, br:{h:50,v:50,e:false}, bl:{h:50,v:50,e:false}, unit:'%' },\n    blob:     { tl:{h:60,v:40,e:true}, tr:{h:40,v:70,e:true}, br:{h:70,v:50,e:true}, bl:{h:50,v:60,e:true}, unit:'%' },\n    squircle: { tl:{h:30,v:30,e:false}, tr:{h:30,v:30,e:false}, br:{h:30,v:30,e:false}, bl:{h:30,v:30,e:false}, unit:'%' },\n    leaf:     { tl:{h:0,v:0,e:false}, tr:{h:50,v:50,e:false}, br:{h:0,v:0,e:false}, bl:{h:50,v:50,e:false}, unit:'%' },\n    drop:     { tl:{h:50,v:50,e:false}, tr:{h:50,v:50,e:false}, br:{h:50,v:50,e:false}, bl:{h:0,v:0,e:false}, unit:'%' },\n    triangle: { tl:{h:0,v:0,e:false}, tr:{h:100,v:0,e:true}, br:{h:100,v:100,e:true}, bl:{h:0,v:100,e:true}, unit:'%' }\n  };\n\n  /* ── DOM参照 ── */\n  var preview   = document.getElementById('br-preview-box');\n  var outputEl  = document.getElementById('br-output-code');\n  var copyBtn   = document.getElementById('br-copy-btn');\n  var linkBtn   = document.getElementById('br-link-btn');\n  var linkLabel = document.getElementById('br-link-label');\n  var pwInput   = document.getElementById('br-pw');\n  var phInput   = document.getElementById('br-ph');\n  var pbgInput  = document.getElementById('br-pbg');\n\n  var cornerKeys = ['tl','tr','br','bl'];\n\n  function el(id) { return document.getElementById(id); }\n\n  /* ── CSS生成 ── */\n  function buildCSS() {\n    var anyElliptic = cornerKeys.some(function(k){ return corners[k].elliptic; });\n    var css;\n    if (anyElliptic) {\n      var hParts = cornerKeys.map(function(k){\n        return Math.min(corners[k].h, unit === '%' ? 50 : 200) + unit;\n      });\n      var vParts = cornerKeys.map(function(k){\n        return Math.min(corners[k].v, unit === '%' ? 50 : 200) + unit;\n      });\n      css = 'border-radius: ' + hParts.join(' ') + ' / ' + vParts.join(' ') + ';';\n    } else {\n      var tl  = Math.min(corners.tl.h, unit === '%' ? 50 : 200) + unit;\n      var tr  = Math.min(corners.tr.h, unit === '%' ? 50 : 200) + unit;\n      var brv = Math.min(corners.br.h, unit === '%' ? 50 : 200) + unit;\n      var bl  = Math.min(corners.bl.h, unit === '%' ? 50 : 200) + unit;\n      if (tl === tr \u0026\u0026 tr === brv \u0026\u0026 brv === bl) {\n        css = 'border-radius: ' + tl + ';';\n      } else if (tl === brv \u0026\u0026 tr === bl) {\n        css = 'border-radius: ' + tl + ' ' + tr + ';';\n      } else if (tr === bl) {\n        css = 'border-radius: ' + tl + ' ' + tr + ' ' + brv + ';';\n      } else {\n        css = 'border-radius: ' + tl + ' ' + tr + ' ' + brv + ' ' + bl + ';';\n      }\n    }\n    return css;\n  }\n\n  function applyPreview() {\n    var hParts = cornerKeys.map(function(k){\n      return Math.min(corners[k].h, unit === '%' ? 50 : 200) + unit;\n    });\n    var vParts = cornerKeys.map(function(k){\n      return Math.min(corners[k].v, unit === '%' ? 50 : 200) + unit;\n    });\n    preview.style.borderRadius = hParts.join(' ') + ' / ' + vParts.join(' ');\n    outputEl.textContent = buildCSS();\n  }\n\n  function syncInputs() {\n    cornerKeys.forEach(function(k) {\n      var maxVal = unit === '%' ? 50 : 200;\n      el('br-' + k + '-h').max = maxVal;\n      el('br-' + k + '-h-n').max = maxVal;\n      el('br-' + k + '-v').max = maxVal;\n      el('br-' + k + '-v-n').max = maxVal;\n      el('br-' + k + '-h').value = Math.min(corners[k].h, maxVal);\n      el('br-' + k + '-h-n').value = Math.min(corners[k].h, maxVal);\n      el('br-' + k + '-v').value = Math.min(corners[k].v, maxVal);\n      el('br-' + k + '-v-n').value = Math.min(corners[k].v, maxVal);\n      el('br-' + k + '-ell').checked = corners[k].elliptic;\n      el('br-' + k + '-v-row').style.display = corners[k].elliptic ? 'flex' : 'none';\n    });\n  }\n\n  /* ── スライダー↔数値 連動 ── */\n  function wireCorner(k, axis) {\n    var sliderEl = el('br-' + k + '-' + axis);\n    var numEl    = el('br-' + k + '-' + axis + '-n');\n\n    function onChange(val) {\n      val = Math.max(0, Math.min(parseInt(val) || 0, unit === '%' ? 50 : 200));\n      corners[k][axis] = val;\n\n      if (linked \u0026\u0026 axis === 'h') {\n        cornerKeys.forEach(function(ck) {\n          corners[ck].h = val;\n          if (!corners[ck].elliptic) corners[ck].v = val;\n        });\n        syncInputs();\n      } else {\n        sliderEl.value = val;\n        numEl.value = val;\n      }\n      applyPreview();\n    }\n\n    sliderEl.addEventListener('input', function() { onChange(this.value); });\n    numEl.addEventListener('input', function() { onChange(this.value); });\n  }\n\n  cornerKeys.forEach(function(k) {\n    wireCorner(k, 'h');\n    wireCorner(k, 'v');\n    el('br-' + k + '-ell').addEventListener('change', function() {\n      corners[k].elliptic = this.checked;\n      el('br-' + k + '-v-row').style.display = this.checked ? 'flex' : 'none';\n      applyPreview();\n    });\n  });\n\n  /* ── コーナー連動ボタン ── */\n  linkBtn.addEventListener('click', function() {\n    linked = !linked;\n    linkBtn.classList.toggle('active', linked);\n    linkLabel.textContent = linked ? '全コーナーが同時に変わります' : 'コーナーは個別に設定できます';\n  });\n\n  /* ── 単位切り替え ── */\n  document.querySelectorAll('#br-app .br-unit-btn').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      document.querySelectorAll('#br-app .br-unit-btn').forEach(function(b){ b.classList.remove('active'); });\n      this.classList.add('active');\n      unit = this.dataset.unit;\n      var maxVal = unit === '%' ? 50 : 200;\n      cornerKeys.forEach(function(k) {\n        corners[k].h = Math.min(corners[k].h, maxVal);\n        corners[k].v = Math.min(corners[k].v, maxVal);\n      });\n      syncInputs();\n      applyPreview();\n    });\n  });\n\n  /* ── プリセット ── */\n  document.querySelectorAll('#br-app .br-preset-btn').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      document.querySelectorAll('#br-app .br-preset-btn').forEach(function(b){ b.classList.remove('active'); });\n      this.classList.add('active');\n\n      var p = PRESETS[this.dataset.preset];\n      if (!p) return;\n\n      unit = p.unit;\n      document.querySelectorAll('#br-app .br-unit-btn').forEach(function(b){\n        b.classList.toggle('active', b.dataset.unit === unit);\n      });\n\n      var maxVal = unit === '%' ? 50 : 200;\n      cornerKeys.forEach(function(k) {\n        corners[k].h = Math.min(p[k].h, maxVal);\n        corners[k].v = Math.min(p[k].v, maxVal);\n        corners[k].elliptic = p[k].e;\n      });\n\n      if (this.dataset.preset === 'pill') {\n        cornerKeys.forEach(function(k) { corners[k].h = 200; });\n      }\n\n      linked = false;\n      linkBtn.classList.remove('active');\n      linkLabel.textContent = 'コーナーは個別に設定できます';\n\n      syncInputs();\n      applyPreview();\n    });\n  });\n\n  /* ── プレビューサイズ/カラー ── */\n  pwInput.addEventListener('input', function() {\n    preview.style.width = Math.max(40, parseInt(this.value) || 160) + 'px';\n  });\n  phInput.addEventListener('input', function() {\n    preview.style.height = Math.max(40, parseInt(this.value) || 160) + 'px';\n  });\n  pbgInput.addEventListener('input', function() {\n    preview.style.background = this.value;\n  });\n\n  /* ── コピーボタン ── */\n  copyBtn.addEventListener('click', function() {\n    var text = outputEl.textContent;\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(text).then(function() { flash(); });\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = text;\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      flash();\n    }\n    function flash() {\n      copyBtn.textContent = 'コピー完了!';\n      copyBtn.classList.add('copied');\n      setTimeout(function() {\n        copyBtn.textContent = 'コピー';\n        copyBtn.classList.remove('copied');\n      }, 1800);\n    }\n  });\n\n  /* ── 初期化 ── */\n  syncInputs();\n  applyPreview();\n\n})();\n\u003c/script\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv class=\"br-cta-box\"\u003e\n  \u003ch4\u003e経理・会計をもっとスマートに\u003c/h4\u003e\n  \u003cp\u003efreee会計なら、請求書・確定申告・経費精算をまとめて自動化。エンジニアやフリーランスにも選ばれています。\u003c/p\u003e","title":"CSS角丸ジェネレーター — 無料ビジュアルツール"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n複利計算シミュレーター 毎月の積立額・想定利回り・投資期間を入力して、将来の資産額を計算しましょう。\n毎月の積立額（円） 1,000円30,000円300,000円 想定年利回り（%） 1%5.0%10% 投資期間（年） 1年20年40年 将来の資産総額 0円 元本（積立総額） 0円 運用益（複利効果） 0円 NISA非課税の場合 0円 運用益に課税なし 特定口座（課税20.315%） 0円 NISA節税額: 0円 年次推移表 年 元本 資産総額 運用益 前提条件：毎月末に積立、月次複利で計算。実際の投資リターンは市場環境によって変動します。過去の実績は将来の成果を保証するものではありません。 複利効果のポイント 時間が最大の味方 — 同じ利回りでも、20年と30年では運用益に2倍以上の差が生まれます 毎月の積立額が重要 — 月1万円でも30年続ければ、年利5%で約830万円に成長します NISAの非課税効果 — 運用益の20.315%が非課税になるため、長期投資ほどNISAの恩恵が大きくなります よくある質問 Q: 年利5%は現実的ですか？ 全世界株式インデックス（MSCI ACWI）の過去20年の平均リターンは年率約7〜8%です。インフレと手数料を考慮すると、5%は保守的な見積もりです。\nQ: 複利と単利の違いは？ 単利は元本にのみ利息がつきますが、複利は「元本＋利息」に対して利息がつきます。長期になるほど複利の効果は指数関数的に大きくなります。\nQ: つみたてNISAとの関係は？ 新NISAのつみたて投資枠（年120万円）で購入した投資信託の運用益は非課税です。このシミュレーターで非課税の効果を確認できます。\nNISAを始めるなら、**楽天証券**がおすすめ。つみたて投資枠でインデックスファンドを設定すれば、この複利効果を非課税で享受できます。\n関連ツール NISAシミュレーター — 新NISAの非課税効果を計算 iDeCoシミュレーター — iDeCoの節税額を年収別に計算 配当金シミュレーター — 配当投資の年間収入を計算 手取り計算シミュレーター — 年収から手取りを計算 家計簿シミュレーター — 月収から理想の支出配分を計算 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 新NISA始め方2026年版【初心者向け完全ガイド】口座開設から投資スタートまで ","permalink":"https://productivity-works.com/ja/tools/fukuri-keisan/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"複利計算シミュレーター\"\u003e複利計算シミュレーター\u003c/h1\u003e\n\u003cp\u003e毎月の積立額・想定利回り・投資期間を入力して、\u003cstrong\u003e将来の資産額\u003c/strong\u003eを計算しましょう。\u003c/p\u003e\n\u003cdiv id=\"calc-app\" style=\"max-width:640px;margin:0 auto;padding:24px;border:2px solid #1e40af;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e毎月の積立額（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"monthly\" min=\"1000\" max=\"300000\" step=\"1000\" value=\"30000\" oninput=\"calcFK()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1,000円\u003c/span\u003e\u003cspan id=\"monthlyVal\" style=\"font-weight:bold;font-size:18px;color:#1e40af;\"\u003e30,000円\u003c/span\u003e\u003cspan\u003e300,000円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e想定年利回り（%）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"rate\" min=\"1\" max=\"10\" step=\"0.5\" value=\"5\" oninput=\"calcFK()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1%\u003c/span\u003e\u003cspan id=\"rateVal\" style=\"font-weight:bold;font-size:18px;color:#1e40af;\"\u003e5.0%\u003c/span\u003e\u003cspan\u003e10%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:24px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e投資期間（年）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"years\" min=\"1\" max=\"40\" step=\"1\" value=\"20\" oninput=\"calcFK()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1年\u003c/span\u003e\u003cspan id=\"yearsVal\" style=\"font-weight:bold;font-size:18px;color:#1e40af;\"\u003e20年\u003c/span\u003e\u003cspan\u003e40年\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#1e40af;color:white;border-radius:8px;padding:20px;text-align:center;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:14px;margin-bottom:4px;\"\u003e将来の資産総額\u003c/div\u003e\n\u003cdiv id=\"totalAsset\" style=\"font-size:36px;font-weight:bold;\"\u003e0円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"background:#e0f2fe;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e元本（積立総額）\u003c/div\u003e\n\u003cdiv id=\"principal\" style=\"font-size:16px;font-weight:bold;color:#0369a1;\"\u003e0円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#dcfce7;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e運用益（複利効果）\u003c/div\u003e\n\u003cdiv id=\"profit\" style=\"font-size:16px;font-weight:bold;color:#15803d;\"\u003e0円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"background:#fef3c7;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003eNISA非課税の場合\u003c/div\u003e\n\u003cdiv id=\"nisaNet\" style=\"font-size:16px;font-weight:bold;color:#b45309;\"\u003e0円\u003c/div\u003e\n\u003cdiv style=\"font-size:11px;color:#92400e;\"\u003e運用益に課税なし\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#fce7f3;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e特定口座（課税20.315%）\u003c/div\u003e\n\u003cdiv id=\"taxedNet\" style=\"font-size:16px;font-weight:bold;color:#be185d;\"\u003e0円\u003c/div\u003e\n\u003cdiv style=\"font-size:11px;color:#9d174d;\" id=\"taxSaved\"\u003eNISA節税額: 0円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ch3 style=\"margin:20px 0 12px;font-size:16px;\"\u003e年次推移表\u003c/h3\u003e\n\u003cdiv style=\"overflow-x:auto;\"\u003e\n\u003ctable id=\"timeline\" style=\"width:100%;border-collapse:collapse;font-size:13px;\"\u003e\n\u003cthead\u003e\u003ctr style=\"background:#1e3a5f;color:white;\"\u003e\n\u003cth style=\"padding:6px 8px;text-align:center;\"\u003e年\u003c/th\u003e\n\u003cth style=\"padding:6px 8px;text-align:right;\"\u003e元本\u003c/th\u003e\n\u003cth style=\"padding:6px 8px;text-align:right;\"\u003e資産総額\u003c/th\u003e\n\u003cth style=\"padding:6px 8px;text-align:right;\"\u003e運用益\u003c/th\u003e\n\u003c/tr\u003e\u003c/thead\u003e\n\u003ctbody id=\"tbody\"\u003e\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f1f5f9;border-radius:8px;padding:12px;font-size:13px;color:#475569;margin-top:16px;\"\u003e\n\u003cstrong\u003e前提条件：\u003c/strong\u003e毎月末に積立、月次複利で計算。実際の投資リターンは市場環境によって変動します。過去の実績は将来の成果を保証するものではありません。\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction calcFK(){\n  var m=parseInt(document.getElementById('monthly').value);\n  var r=parseFloat(document.getElementById('rate').value)/100;\n  var y=parseInt(document.getElementById('years').value);\n  var mr=r/12;\n  var n=y*12;\n  var fv=m*((Math.pow(1+mr,n)-1)/mr);\n  var p=m*n;\n  var g=fv-p;\n  var tax=g*0.20315;\n  document.getElementById('monthlyVal').textContent=m.toLocaleString()+'円';\n  document.getElementById('rateVal').textContent=(r*100).toFixed(1)+'%';\n  document.getElementById('yearsVal').textContent=y+'年';\n  document.getElementById('totalAsset').textContent=Math.floor(fv).toLocaleString()+'円';\n  document.getElementById('principal').textContent=p.toLocaleString()+'円';\n  document.getElementById('profit').textContent=Math.floor(g).toLocaleString()+'円';\n  document.getElementById('nisaNet').textContent=Math.floor(fv).toLocaleString()+'円';\n  document.getElementById('taxedNet').textContent=Math.floor(fv-tax).toLocaleString()+'円';\n  document.getElementById('taxSaved').textContent='NISA節税額: '+Math.floor(tax).toLocaleString()+'円';\n  var tb=document.getElementById('tbody');\n  tb.innerHTML='';\n  var milestones=[1,3,5,10,15,20,25,30,35,40];\n  for(var i=0;i\u003cmilestones.length;i++){\n    var yr=milestones[i];\n    if(yr\u003ey)break;\n    var nm=yr*12;\n    var fvY=m*((Math.pow(1+mr,nm)-1)/mr);\n    var pY=m*nm;\n    var gY=fvY-pY;\n    var bg=i%2===0?'#f8fafc':'#ffffff';\n    tb.innerHTML+='\u003ctr style=\"background:'+bg+'\"\u003e\u003ctd style=\"padding:6px 8px;text-align:center;border-bottom:1px solid #e2e8f0;\"\u003e'+yr+'年\u003c/td\u003e\u003ctd style=\"padding:6px 8px;text-align:right;border-bottom:1px solid #e2e8f0;\"\u003e'+pY.toLocaleString()+'円\u003c/td\u003e\u003ctd style=\"padding:6px 8px;text-align:right;border-bottom:1px solid #e2e8f0;font-weight:bold;\"\u003e'+Math.floor(fvY).toLocaleString()+'円\u003c/td\u003e\u003ctd style=\"padding:6px 8px;text-align:right;border-bottom:1px solid #e2e8f0;color:#15803d;\"\u003e+'+Math.floor(gY).toLocaleString()+'円\u003c/td\u003e\u003c/tr\u003e';\n  }\n}\ncalcFK();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"複利効果のポイント\"\u003e複利効果のポイント\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e時間が最大の味方\u003c/strong\u003e — 同じ利回りでも、20年と30年では運用益に2倍以上の差が生まれます\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e毎月の積立額が重要\u003c/strong\u003e — 月1万円でも30年続ければ、年利5%で約830万円に成長します\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNISAの非課税効果\u003c/strong\u003e — 運用益の20.315%が非課税になるため、長期投資ほどNISAの恩恵が大きくなります\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"よくある質問\"\u003eよくある質問\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eQ: 年利5%は現実的ですか？\u003c/strong\u003e\n全世界株式インデックス（MSCI ACWI）の過去20年の平均リターンは年率約7〜8%です。インフレと手数料を考慮すると、5%は保守的な見積もりです。\u003c/p\u003e","title":"複利計算シミュレーター｜積立投資の将来資産を自動計算【無料】"},{"content":" 入力テキスト 繰り返し回数（1〜10000） 区切り文字 改行 スペース カンマ カスタム… プレフィックス（各繰り返しの前） サフィックス（各繰り返しの後） 変換オプション 番号付きモード（1. テキスト、2. テキスト…） テキストを逆順にする 行をシャッフル 昇順ソート（A→Z） 降順ソート（Z→A） 重複行を削除 生成する\nクリップボードにコピー コピーしました！ 業務効率化をもっと加速させたいなら freee会計・freee人事労務 なら、請求書・給与計算・確定申告をまとめてクラウドで自動化。手作業を減らして本来の業務に集中しましょう。\nfreeeを無料で試す → ","permalink":"https://productivity-works.com/ja/tools/text-repeater/","summary":"\u003cstyle\u003e\n#rep-app *,\n#rep-app *::before,\n#rep-app *::after {\n  box-sizing: border-box;\n}\n#rep-app {\n  font-family: system-ui, -apple-system, 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 780px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#rep-app h2 {\n  font-size: 1.05rem;\n  font-weight: 600;\n  margin: 1.4rem 0 0.5rem;\n  color: #0f766e;\n}\n#rep-app label {\n  display: block;\n  font-size: 0.85rem;\n  font-weight: 500;\n  margin-bottom: 0.3rem;\n  color: #374151;\n}\n#rep-app textarea,\n#rep-app input[type=\"text\"],\n#rep-app input[type=\"number\"],\n#rep-app select {\n  width: 100%;\n  padding: 0.55rem 0.75rem;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 0.95rem;\n  background: #fff;\n  color: #1e293b;\n  transition: border-color 0.15s;\n  outline: none;\n}\n#rep-app textarea:focus,\n#rep-app input[type=\"text\"]:focus,\n#rep-app input[type=\"number\"]:focus,\n#rep-app select:focus {\n  border-color: #0d9488;\n  box-shadow: 0 0 0 3px rgba(13,148,136,.15);\n}\n#rep-app textarea {\n  min-height: 110px;\n  resize: vertical;\n  font-family: inherit;\n}\n#rep-app .row {\n  display: flex;\n  gap: 1rem;\n  flex-wrap: wrap;\n}\n#rep-app .row \u003e .field {\n  flex: 1;\n  min-width: 160px;\n}\n#rep-app .field {\n  margin-bottom: 0.85rem;\n}\n#rep-app .check-group {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.6rem 1.2rem;\n  margin-bottom: 0.85rem;\n}\n#rep-app .check-group label {\n  display: flex;\n  align-items: center;\n  gap: 0.4rem;\n  font-size: 0.9rem;\n  font-weight: 400;\n  cursor: pointer;\n  color: #374151;\n  margin: 0;\n}\n#rep-app input[type=\"checkbox\"] {\n  width: 16px;\n  height: 16px;\n  accent-color: #0d9488;\n  cursor: pointer;\n}\n#rep-app .sep-custom {\n  display: none;\n  margin-top: 0.5rem;\n}\n#rep-app .sep-custom.visible {\n  display: block;\n}\n#rep-app .btn-run {\n  display: inline-block;\n  background: #0d9488;\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  padding: 0.65rem 1.8rem;\n  font-size: 1rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s;\n  margin-top: 0.3rem;\n}\n#rep-app .btn-run:hover {\n  background: #0f766e;\n}\n#rep-app .output-wrap {\n  margin-top: 1.2rem;\n}\n#rep-app .output-meta {\n  font-size: 0.82rem;\n  color: #64748b;\n  margin-bottom: 0.4rem;\n}\n#rep-app .output-box {\n  position: relative;\n}\n#rep-app #rep-output {\n  width: 100%;\n  min-height: 140px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  padding: 0.65rem 0.75rem;\n  font-size: 0.9rem;\n  background: #f8fafc;\n  color: #1e293b;\n  resize: vertical;\n  font-family: inherit;\n}\n#rep-app .btn-copy {\n  display: inline-block;\n  margin-top: 0.55rem;\n  background: #fff;\n  color: #0d9488;\n  border: 1.5px solid #0d9488;\n  border-radius: 6px;\n  padding: 0.45rem 1.2rem;\n  font-size: 0.88rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n#rep-app .btn-copy:hover {\n  background: #0d9488;\n  color: #fff;\n}\n#rep-app .copy-feedback {\n  display: inline-block;\n  margin-left: 0.7rem;\n  font-size: 0.82rem;\n  color: #0d9488;\n  opacity: 0;\n  transition: opacity 0.3s;\n}\n#rep-app .copy-feedback.show {\n  opacity: 1;\n}\n#rep-app .divider {\n  border: none;\n  border-top: 1px solid #e2e8f0;\n  margin: 1.1rem 0;\n}\n#rep-app .error {\n  color: #dc2626;\n  font-size: 0.85rem;\n  margin-top: 0.25rem;\n}\n#rep-app .freee-cta {\n  margin-top: 2rem;\n  padding: 1.1rem 1.3rem;\n  background: #f0fdfa;\n  border: 1.5px solid #99f6e4;\n  border-radius: 10px;\n  font-size: 0.9rem;\n  color: #134e4a;\n  line-height: 1.6;\n}\n#rep-app .freee-cta strong {\n  display: block;\n  font-size: 1rem;\n  margin-bottom: 0.4rem;\n  color: #0f766e;\n}\n#rep-app .freee-cta a {\n  color: #0d9488;\n  font-weight: 600;\n  text-decoration: underline;\n}\n\u003c/style\u003e\n\u003cdiv id=\"rep-app\"\u003e\n\u003cdiv class=\"field\"\u003e\n  \u003clabel for=\"rep-input\"\u003e入力テキスト\u003c/label\u003e\n  \u003ctextarea id=\"rep-input\" placeholder=\"ここにテキストを入力または貼り付けてください…\"\u003e\u003c/textarea\u003e\n\u003c/div\u003e\n\u003cdiv class=\"row\"\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"rep-count\"\u003e繰り返し回数（1〜10000）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"rep-count\" value=\"3\" min=\"1\" max=\"10000\"\u003e\n    \u003cdiv class=\"error\" id=\"rep-count-err\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"rep-sep\"\u003e区切り文字\u003c/label\u003e\n    \u003cselect id=\"rep-sep\"\u003e\n      \u003coption value=\"newline\"\u003e改行\u003c/option\u003e\n      \u003coption value=\"space\"\u003eスペース\u003c/option\u003e\n      \u003coption value=\"comma\"\u003eカンマ\u003c/option\u003e\n      \u003coption value=\"custom\"\u003eカスタム…\u003c/option\u003e\n    \u003c/select\u003e\n    \u003cdiv class=\"sep-custom\" id=\"rep-sep-custom-wrap\"\u003e\n      \u003cinput type=\"text\" id=\"rep-sep-custom\" placeholder=\"区切り文字を入力\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"row\"\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"rep-prefix\"\u003eプレフィックス（各繰り返しの前）\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"rep-prefix\" placeholder=\"例：- \"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"field\"\u003e\n    \u003clabel for=\"rep-suffix\"\u003eサフィックス（各繰り返しの後）\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"rep-suffix\" placeholder=\"例：；\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003e変換オプション\u003c/h2\u003e\n\u003cdiv class=\"check-group\"\u003e\n  \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"rep-numbered\"\u003e 番号付きモード（1. テキスト、2. テキスト…）\u003c/label\u003e\n  \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"rep-reverse\"\u003e テキストを逆順にする\u003c/label\u003e\n  \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"rep-shuffle\"\u003e 行をシャッフル\u003c/label\u003e\n  \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"rep-sort-az\"\u003e 昇順ソート（A→Z）\u003c/label\u003e\n  \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"rep-sort-za\"\u003e 降順ソート（Z→A）\u003c/label\u003e\n  \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"rep-dedup\"\u003e 重複行を削除\u003c/label\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003cbutton class=\"btn-run\" id=\"rep-run\"\u003e生成する\u003c/button\u003e\u003c/p\u003e","title":"テキストリピーター — テキストを繰り返し・変換するオンラインツール"},{"content":" シーザー ヴィジュネル XOR AES-256 シーザー暗号はアルファベットの各文字を固定シフト数だけずらします。暗号化・復号は同じシフト値を使います（復号は逆向きに適用）。英字以外の文字はそのまま保持されます。 シフト数（1〜25） 13 モード 暗号化 復号 入力テキスト \u0026#128274; 実行 クリア 結果 暗号化済み \u0026#128203; コピー ヴィジュネル暗号はキーワードを使って各文字に異なるシフトを適用します。キーワードが入力より短い場合は繰り返されます。A〜Z・a〜zのみがシフトされ、それ以外はそのまま出力されます。 キーワード（英字） モード 暗号化 復号 入力テキスト \u0026#128274; 実行 クリア 結果 暗号化済み \u0026#128203; コピー XOR暗号は各文字バイトに対してキーとのビット単位排他的論理和（XOR）を適用します。同じキーを2回適用すると元のテキストに戻るため、暗号化と復号の操作は同一です。出力はBase64エンコードされます。 キー（任意のテキスト） モード 暗号化 復号 入力テキスト \u0026#128274; 実行 クリア 結果 暗号化済み \u0026#128203; コピー ブラウザ標準の Web Crypto API を使ったAES-256-GCM暗号化。パスワードからPBKDF2（SHA-256・10万回）でキーを導出し、ランダムなIV（96ビット）とソルト（128ビット）を毎回生成します。出力は ソルト:IV:暗号文 のBase64形式。パスワードはブラウザ外に出ません。 パスワード モード 暗号化 復号 入力テキスト \u0026#128274; AES-256 実行 クリア 処理中… 結果 暗号化済み \u0026#128203; コピー 個人・法人の確定申告・会計管理をかんたんに\nfreee会計なら、クラウドで経費・請求・確定申告をワンストップ管理。無料トライアル実施中。\nfreeeを無料で試す \u0026rarr; 各暗号方式の解説 シーザー暗号 シーザー暗号は最も古い暗号のひとつで、平文の各アルファベット文字を固定シフト数だけ後方（暗号化）または前方（復号）にずらします。シフト13の場合はROT13と呼ばれ、同じ操作を2回行うと元のテキストに戻ります。数字・記号・スペースはそのまま保持されます。\n強度: 現代では非常に弱い暗号。シフト数は25通りしかなく、全探索は一瞬で完了します。\nヴィジュネル暗号 ヴィジュネル暗号はキーワードを使い、各文字に異なるシフトを適用することでシーザー暗号を改良した方式です。キーワードが入力より短い場合は繰り返して使われます。単純な頻度分析は困難になりますが、カシスキー検定などでキー長を特定されると解読可能です。\n強度: 歴史的に堅牢とされてきましたが、現代では解読されやすい方式です。学習・パズル用途に向いています。\nXOR暗号 XOR暗号は平文の各バイトとキーを繰り返しながらビット単位XOR演算します。XORは逆演算が自身と同一なので、同じキーを再度適用すれば元に戻ります。このツールでは出力をBase64でエンコードして可読性を保ちます。キーが平文と同じ長さの完全乱数（ワンタイムパッド）であれば理論上解読不可能ですが、短い繰り返しキーは既知平文攻撃に弱いです。\n強度: キーの長さとランダム性に完全依存。長くランダムなキーを使う場合のみ実用的。\nAES-256-GCM AES-256-GCMはブラウザ標準の Web Crypto API（SubtleCrypto）を用いた現代の業界標準対称暗号です。パスワードからPBKDF2（SHA-256・10万回・ランダムソルト）で256ビット鍵を導出し、暗号化ごとにランダムなIV（96ビット）を生成するため、同じ平文を2回暗号化しても異なる暗号文になります。出力はソルト・IV・暗号文をBase64コロン区切りで保存します。\n強度: 長くランダムなパスワードを使えば非常に高い安全性。パスワードと平文はブラウザ外に出ません。\nプライバシーについて 本ツールでのすべての処理はブラウザ内で完結します。AES-256-GCMはブラウザネイティブの Web Crypto API（SubtleCrypto）を使用し、シーザー・ヴィジュネル・XORは純粋なJavaScriptで実装されています。入力データ・パスワードが外部に送信されることは一切ありません。\n安全なランダムパスワードを生成 → パスワード生成ツール MD5・SHA-256・SHA-512ハッシュを生成 → ハッシュ生成ツール ROT13・シーザー暗号をワンクリック変換 → ROT13エンコーダー 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/text-encryption/","summary":"\u003cdiv id=\"te-app\"\u003e\n\u003cstyle\u003e\n#te-app {\n  font-family: \"Helvetica Neue\", \"Hiragino Sans\", \"Noto Sans JP\", Arial, sans-serif;\n  max-width: 820px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#te-app *, #te-app *::before, #te-app *::after {\n  box-sizing: border-box;\n}\n/* ---- タブバー ---- */\n#te-app .te-tab-bar {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #e2e8f0;\n  margin-bottom: 20px;\n  overflow-x: auto;\n}\n#te-app .te-tab {\n  padding: 9px 18px;\n  font-size: 13px;\n  font-weight: 700;\n  color: #64748b;\n  cursor: pointer;\n  border: none;\n  background: none;\n  border-bottom: 2.5px solid transparent;\n  margin-bottom: -2px;\n  transition: color 0.15s, border-color 0.15s;\n  white-space: nowrap;\n}\n#te-app .te-tab.active { color: #7c3aed; border-bottom-color: #7c3aed; }\n#te-app .te-tab:hover:not(.active) { color: #334155; }\n/* ---- パネル ---- */\n#te-app .te-panel { display: none; }\n#te-app .te-panel.active { display: block; }\n/* ---- カード ---- */\n#te-app .te-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 18px 20px;\n  margin-bottom: 16px;\n}\n/* ---- ラベル ---- */\n#te-app .te-label {\n  display: block;\n  font-size: 11px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 6px;\n}\n/* ---- テキストエリア ---- */\n#te-app .te-textarea {\n  width: 100%;\n  min-height: 110px;\n  padding: 11px 13px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 14px;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  resize: vertical;\n  background: #fff;\n  color: #1e293b;\n  transition: border-color 0.2s, box-shadow 0.2s;\n}\n#te-app .te-textarea:focus {\n  outline: none;\n  border-color: #7c3aed;\n  box-shadow: 0 0 0 3px rgba(124,58,237,0.12);\n}\n/* ---- セレクト ---- */\n#te-app .te-select {\n  padding: 8px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 13px;\n  background: #fff;\n  color: #1e293b;\n  cursor: pointer;\n  transition: border-color 0.2s;\n  min-width: 160px;\n}\n#te-app .te-select:focus { outline: none; border-color: #7c3aed; }\n/* ---- 入力フィールド ---- */\n#te-app .te-input {\n  padding: 8px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 13px;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  background: #fff;\n  color: #1e293b;\n  transition: border-color 0.2s, box-shadow 0.2s;\n  width: 100%;\n}\n#te-app .te-input:focus {\n  outline: none;\n  border-color: #7c3aed;\n  box-shadow: 0 0 0 3px rgba(124,58,237,0.12);\n}\n/* ---- コントロール行 ---- */\n#te-app .te-row {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  gap: 10px;\n  margin-bottom: 12px;\n}\n#te-app .te-field {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  flex: 1;\n  min-width: 140px;\n}\n/* ---- モードトグル ---- */\n#te-app .te-mode-group {\n  display: flex;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 7px;\n  overflow: hidden;\n  flex-shrink: 0;\n}\n#te-app .te-mode-btn {\n  padding: 8px 16px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  border: none;\n  background: #f1f5f9;\n  color: #64748b;\n  transition: background 0.15s, color 0.15s;\n  line-height: 1;\n}\n#te-app .te-mode-btn.active { background: #7c3aed; color: #fff; }\n#te-app .te-mode-btn:hover:not(.active) { background: #e2e8f0; }\n/* ---- ボタン ---- */\n#te-app .te-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 9px 18px;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  border: none;\n  transition: background 0.18s, transform 0.1s;\n  user-select: none;\n  line-height: 1;\n  white-space: nowrap;\n}\n#te-app .te-btn:active { transform: scale(0.97); }\n#te-app .te-btn-primary   { background: #7c3aed; color: #fff; }\n#te-app .te-btn-primary:hover { background: #6d28d9; }\n#te-app .te-btn-secondary { background: #e2e8f0; color: #374151; }\n#te-app .te-btn-secondary:hover { background: #cbd5e1; }\n/* ---- 出力エリア ---- */\n#te-app .te-output-wrap {\n  display: none;\n  margin-top: 4px;\n}\n#te-app .te-output-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 6px;\n}\n#te-app .te-output-label {\n  font-size: 11px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n#te-app .te-output-ta {\n  width: 100%;\n  min-height: 100px;\n  padding: 11px 13px;\n  border: 1.5px solid #c4b5fd;\n  border-radius: 8px;\n  font-size: 14px;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  resize: vertical;\n  background: #faf5ff;\n  color: #1e293b;\n  word-break: break-all;\n}\n/* ---- ステータス ---- */\n#te-app .te-status {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 9px 14px;\n  border-radius: 8px;\n  font-size: 13px;\n  margin-bottom: 14px;\n}\n#te-app .te-status.ok   { background:#f0fdf4; border:1px solid #bbf7d0; color:#166534; }\n#te-app .te-status.err  { background:#fef2f2; border:1px solid #fecaca; color:#991b1b; }\n#te-app .te-status.hidden { display:none; }\n/* ---- シフトスライダー ---- */\n#te-app .te-shift-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n#te-app .te-range {\n  flex: 1;\n  accent-color: #7c3aed;\n  cursor: pointer;\n}\n#te-app .te-shift-val {\n  min-width: 28px;\n  text-align: center;\n  font-weight: 700;\n  font-size: 15px;\n  color: #7c3aed;\n}\n/* ---- バッジ ---- */\n#te-app .te-badge {\n  display: inline-block;\n  padding: 3px 9px;\n  border-radius: 5px;\n  font-size: 11px;\n  font-weight: 700;\n  white-space: nowrap;\n  letter-spacing: 0.04em;\n  background: #ede9fe;\n  color: #5b21b6;\n}\n/* ---- コピーボタン ---- */\n#te-app .te-copy {\n  display: inline-flex;\n  align-items: center;\n  gap: 4px;\n  padding: 5px 12px;\n  border-radius: 6px;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  border: 1.5px solid #e2e8f0;\n  background: #fff;\n  color: #475569;\n  transition: all 0.15s;\n  white-space: nowrap;\n}\n#te-app .te-copy:hover   { border-color:#7c3aed; color:#7c3aed; background:#f5f3ff; }\n#te-app .te-copy.copied  { border-color:#10b981; color:#10b981; background:#ecfdf5; }\n/* ---- 説明ボックス ---- */\n#te-app .te-info {\n  padding: 12px 16px;\n  background: #f5f3ff;\n  border: 1px solid #ddd6fe;\n  border-radius: 8px;\n  font-size: 12.5px;\n  color: #4c1d95;\n  line-height: 1.7;\n  margin-bottom: 14px;\n}\n/* ---- AES プログレス ---- */\n#te-app .te-progress {\n  display: none;\n  align-items: center;\n  gap: 10px;\n  margin-top: 8px;\n  font-size: 12px;\n  color: #7c3aed;\n}\n#te-app .te-progress.visible { display: flex; }\n#te-app .te-progress-track {\n  flex: 1; height: 4px;\n  background: #ede9fe;\n  border-radius: 3px;\n  overflow: hidden;\n}\n#te-app .te-progress-fill {\n  height: 100%;\n  background: #7c3aed;\n  border-radius: 3px;\n  width: 0%;\n  transition: width 0.2s;\n}\n/* ---- トースト ---- */\n.te-toast {\n  position: fixed;\n  bottom: 24px; right: 24px;\n  background: #7c3aed; color: #fff;\n  padding: 10px 18px;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 700;\n  z-index: 9999;\n  box-shadow: 0 4px 16px rgba(0,0,0,0.18);\n  transition: opacity 0.3s;\n  font-family: \"Helvetica Neue\", Arial, sans-serif;\n}\n@media (max-width: 540px) {\n  #te-app .te-mode-btn { padding: 8px 10px; font-size: 12px; }\n  #te-app .te-tab { padding: 9px 12px; }\n}\n\u003c/style\u003e\n\u003c!-- タブバー --\u003e\n\u003cdiv class=\"te-tab-bar\"\u003e\n  \u003cbutton class=\"te-tab active\" onclick=\"teTab('caesar',this)\"\u003eシーザー\u003c/button\u003e\n  \u003cbutton class=\"te-tab\" onclick=\"teTab('vigenere',this)\"\u003eヴィジュネル\u003c/button\u003e\n  \u003cbutton class=\"te-tab\" onclick=\"teTab('xor',this)\"\u003eXOR\u003c/button\u003e\n  \u003cbutton class=\"te-tab\" onclick=\"teTab('aes',this)\"\u003eAES-256\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- ===== シーザー暗号パネル ===== --\u003e\n\u003cdiv id=\"te-panel-caesar\" class=\"te-panel active\"\u003e\n  \u003cdiv class=\"te-card\"\u003e\n    \u003cdiv class=\"te-info\"\u003e\n      シーザー暗号はアルファベットの各文字を固定シフト数だけずらします。暗号化・復号は同じシフト値を使います（復号は逆向きに適用）。英字以外の文字はそのまま保持されます。\n    \u003c/div\u003e\n    \u003cdiv class=\"te-row\"\u003e\n      \u003cdiv class=\"te-field\" style=\"max-width:260px\"\u003e\n        \u003cspan class=\"te-label\"\u003eシフト数（1〜25）\u003c/span\u003e\n        \u003cdiv class=\"te-shift-row\"\u003e\n          \u003cinput type=\"range\" class=\"te-range\" id=\"te-cs-range\" min=\"1\" max=\"25\" value=\"13\"\n            oninput=\"document.getElementById('te-cs-val').textContent=this.value; teCaesarRun()\"\u003e\n          \u003cspan class=\"te-shift-val\" id=\"te-cs-val\"\u003e13\u003c/span\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"te-field\"\u003e\n        \u003cspan class=\"te-label\"\u003eモード\u003c/span\u003e\n        \u003cdiv class=\"te-mode-group\"\u003e\n          \u003cbutton class=\"te-mode-btn active\" id=\"te-cs-enc-btn\" onclick=\"teSetMode('caesar','encrypt')\"\u003e暗号化\u003c/button\u003e\n          \u003cbutton class=\"te-mode-btn\" id=\"te-cs-dec-btn\" onclick=\"teSetMode('caesar','decrypt')\"\u003e復号\u003c/button\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cspan class=\"te-label\"\u003e入力テキスト\u003c/span\u003e\n    \u003ctextarea id=\"te-cs-input\" class=\"te-textarea\" placeholder=\"テキストを入力してください…\" oninput=\"teCaesarRun()\"\u003e\u003c/textarea\u003e\n    \u003cdiv style=\"display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;\"\u003e\n      \u003cbutton class=\"te-btn te-btn-primary\" onclick=\"teCaesarRun()\"\u003e\u0026#128274; 実行\u003c/button\u003e\n      \u003cbutton class=\"te-btn te-btn-secondary\" onclick=\"teClearPanel('caesar')\"\u003eクリア\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"te-status hidden\" id=\"te-cs-status\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"te-output-wrap\" id=\"te-cs-output-wrap\"\u003e\n    \u003cdiv class=\"te-output-header\"\u003e\n      \u003cspan class=\"te-output-label\"\u003e結果 \u003cspan class=\"te-badge\" id=\"te-cs-badge\"\u003e暗号化済み\u003c/span\u003e\u003c/span\u003e\n      \u003cbutton class=\"te-copy\" id=\"te-cs-copy\" onclick=\"teCopyOutput('te-cs-out',this)\"\u003e\u0026#128203; コピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003ctextarea id=\"te-cs-out\" class=\"te-output-ta\" readonly\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ===== ヴィジュネル暗号パネル ===== --\u003e\n\u003cdiv id=\"te-panel-vigenere\" class=\"te-panel\"\u003e\n  \u003cdiv class=\"te-card\"\u003e\n    \u003cdiv class=\"te-info\"\u003e\n      ヴィジュネル暗号はキーワードを使って各文字に異なるシフトを適用します。キーワードが入力より短い場合は繰り返されます。A〜Z・a〜zのみがシフトされ、それ以外はそのまま出力されます。\n    \u003c/div\u003e\n    \u003cdiv class=\"te-row\"\u003e\n      \u003cdiv class=\"te-field\"\u003e\n        \u003cspan class=\"te-label\"\u003eキーワード（英字）\u003c/span\u003e\n        \u003cinput type=\"text\" id=\"te-vig-key\" class=\"te-input\" placeholder=\"例: SECRET\" oninput=\"teVigenereRun()\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"te-field\" style=\"flex:0;min-width:auto\"\u003e\n        \u003cspan class=\"te-label\"\u003eモード\u003c/span\u003e\n        \u003cdiv class=\"te-mode-group\"\u003e\n          \u003cbutton class=\"te-mode-btn active\" id=\"te-vig-enc-btn\" onclick=\"teSetMode('vigenere','encrypt')\"\u003e暗号化\u003c/button\u003e\n          \u003cbutton class=\"te-mode-btn\" id=\"te-vig-dec-btn\" onclick=\"teSetMode('vigenere','decrypt')\"\u003e復号\u003c/button\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cspan class=\"te-label\"\u003e入力テキスト\u003c/span\u003e\n    \u003ctextarea id=\"te-vig-input\" class=\"te-textarea\" placeholder=\"テキストを入力してください…\" oninput=\"teVigenereRun()\"\u003e\u003c/textarea\u003e\n    \u003cdiv style=\"display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;\"\u003e\n      \u003cbutton class=\"te-btn te-btn-primary\" onclick=\"teVigenereRun()\"\u003e\u0026#128274; 実行\u003c/button\u003e\n      \u003cbutton class=\"te-btn te-btn-secondary\" onclick=\"teClearPanel('vigenere')\"\u003eクリア\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"te-status hidden\" id=\"te-vig-status\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"te-output-wrap\" id=\"te-vig-output-wrap\"\u003e\n    \u003cdiv class=\"te-output-header\"\u003e\n      \u003cspan class=\"te-output-label\"\u003e結果 \u003cspan class=\"te-badge\" id=\"te-vig-badge\"\u003e暗号化済み\u003c/span\u003e\u003c/span\u003e\n      \u003cbutton class=\"te-copy\" id=\"te-vig-copy\" onclick=\"teCopyOutput('te-vig-out',this)\"\u003e\u0026#128203; コピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003ctextarea id=\"te-vig-out\" class=\"te-output-ta\" readonly\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ===== XOR 暗号パネル ===== --\u003e\n\u003cdiv id=\"te-panel-xor\" class=\"te-panel\"\u003e\n  \u003cdiv class=\"te-card\"\u003e\n    \u003cdiv class=\"te-info\"\u003e\n      XOR暗号は各文字バイトに対してキーとのビット単位排他的論理和（XOR）を適用します。同じキーを2回適用すると元のテキストに戻るため、暗号化と復号の操作は同一です。出力はBase64エンコードされます。\n    \u003c/div\u003e\n    \u003cdiv class=\"te-row\"\u003e\n      \u003cdiv class=\"te-field\"\u003e\n        \u003cspan class=\"te-label\"\u003eキー（任意のテキスト）\u003c/span\u003e\n        \u003cinput type=\"text\" id=\"te-xor-key\" class=\"te-input\" placeholder=\"例: myKey123\" oninput=\"teXorRun()\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"te-field\" style=\"flex:0;min-width:auto\"\u003e\n        \u003cspan class=\"te-label\"\u003eモード\u003c/span\u003e\n        \u003cdiv class=\"te-mode-group\"\u003e\n          \u003cbutton class=\"te-mode-btn active\" id=\"te-xor-enc-btn\" onclick=\"teSetMode('xor','encrypt')\"\u003e暗号化\u003c/button\u003e\n          \u003cbutton class=\"te-mode-btn\" id=\"te-xor-dec-btn\" onclick=\"teSetMode('xor','decrypt')\"\u003e復号\u003c/button\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cspan class=\"te-label\"\u003e入力テキスト\u003c/span\u003e\n    \u003ctextarea id=\"te-xor-input\" class=\"te-textarea\" placeholder=\"暗号化するテキスト、または復号するBase64暗号文…\" oninput=\"teXorRun()\"\u003e\u003c/textarea\u003e\n    \u003cdiv style=\"display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;\"\u003e\n      \u003cbutton class=\"te-btn te-btn-primary\" onclick=\"teXorRun()\"\u003e\u0026#128274; 実行\u003c/button\u003e\n      \u003cbutton class=\"te-btn te-btn-secondary\" onclick=\"teClearPanel('xor')\"\u003eクリア\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"te-status hidden\" id=\"te-xor-status\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"te-output-wrap\" id=\"te-xor-output-wrap\"\u003e\n    \u003cdiv class=\"te-output-header\"\u003e\n      \u003cspan class=\"te-output-label\"\u003e結果 \u003cspan class=\"te-badge\" id=\"te-xor-badge\"\u003e暗号化済み\u003c/span\u003e\u003c/span\u003e\n      \u003cbutton class=\"te-copy\" id=\"te-xor-copy\" onclick=\"teCopyOutput('te-xor-out',this)\"\u003e\u0026#128203; コピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003ctextarea id=\"te-xor-out\" class=\"te-output-ta\" readonly\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ===== AES-256 パネル ===== --\u003e\n\u003cdiv id=\"te-panel-aes\" class=\"te-panel\"\u003e\n  \u003cdiv class=\"te-card\"\u003e\n    \u003cdiv class=\"te-info\"\u003e\n      ブラウザ標準の \u003cstrong\u003eWeb Crypto API\u003c/strong\u003e を使ったAES-256-GCM暗号化。パスワードからPBKDF2（SHA-256・10万回）でキーを導出し、ランダムなIV（96ビット）とソルト（128ビット）を毎回生成します。出力は \u003ccode\u003eソルト:IV:暗号文\u003c/code\u003e のBase64形式。パスワードはブラウザ外に出ません。\n    \u003c/div\u003e\n    \u003cdiv class=\"te-row\"\u003e\n      \u003cdiv class=\"te-field\"\u003e\n        \u003cspan class=\"te-label\"\u003eパスワード\u003c/span\u003e\n        \u003cinput type=\"password\" id=\"te-aes-pw\" class=\"te-input\" placeholder=\"強力なパスワードを入力…\" oninput=\"teAesRun()\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"te-field\" style=\"flex:0;min-width:auto\"\u003e\n        \u003cspan class=\"te-label\"\u003eモード\u003c/span\u003e\n        \u003cdiv class=\"te-mode-group\"\u003e\n          \u003cbutton class=\"te-mode-btn active\" id=\"te-aes-enc-btn\" onclick=\"teSetMode('aes','encrypt')\"\u003e暗号化\u003c/button\u003e\n          \u003cbutton class=\"te-mode-btn\" id=\"te-aes-dec-btn\" onclick=\"teSetMode('aes','decrypt')\"\u003e復号\u003c/button\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cspan class=\"te-label\"\u003e入力テキスト\u003c/span\u003e\n    \u003ctextarea id=\"te-aes-input\" class=\"te-textarea\" placeholder=\"暗号化するテキスト、または復号するBase64暗号文…\" oninput=\"teAesRun()\"\u003e\u003c/textarea\u003e\n    \u003cdiv style=\"display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;\"\u003e\n      \u003cbutton class=\"te-btn te-btn-primary\" onclick=\"teAesRun()\"\u003e\u0026#128274; AES-256 実行\u003c/button\u003e\n      \u003cbutton class=\"te-btn te-btn-secondary\" onclick=\"teClearPanel('aes')\"\u003eクリア\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"te-progress\" id=\"te-aes-prog\"\u003e\n      \u003cspan id=\"te-aes-prog-lbl\"\u003e処理中…\u003c/span\u003e\n      \u003cdiv class=\"te-progress-track\"\u003e\u003cdiv class=\"te-progress-fill\" id=\"te-aes-prog-fill\"\u003e\u003c/div\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"te-status hidden\" id=\"te-aes-status\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"te-output-wrap\" id=\"te-aes-output-wrap\"\u003e\n    \u003cdiv class=\"te-output-header\"\u003e\n      \u003cspan class=\"te-output-label\"\u003e結果 \u003cspan class=\"te-badge\" id=\"te-aes-badge\"\u003e暗号化済み\u003c/span\u003e\u003c/span\u003e\n      \u003cbutton class=\"te-copy\" id=\"te-aes-copy\" onclick=\"teCopyOutput('te-aes-out',this)\"\u003e\u0026#128203; コピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003ctextarea id=\"te-aes-out\" class=\"te-output-ta\" readonly\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function () {\n'use strict';\n\n/* ============================================================\n   状態管理\n   ============================================================ */\nvar teMode = { caesar: 'encrypt', vigenere: 'encrypt', xor: 'encrypt', aes: 'encrypt' };\nvar teAesDebounce = null;\n\n/* ============================================================\n   タブ切り替え\n   ============================================================ */\nwindow.teTab = function(name, btn) {\n  document.querySelectorAll('#te-app .te-tab').forEach(function(t){ t.classList.remove('active'); });\n  document.querySelectorAll('#te-app .te-panel').forEach(function(p){ p.classList.remove('active'); });\n  btn.classList.add('active');\n  document.getElementById('te-panel-'+name).classList.add('active');\n};\n\n/* ============================================================\n   モード切り替え\n   ============================================================ */\nwindow.teSetMode = function(cipher, mode) {\n  teMode[cipher] = mode;\n  var prefix = cipher === 'caesar' ? 'cs' : cipher === 'vigenere' ? 'vig' : cipher === 'xor' ? 'xor' : 'aes';\n  document.getElementById('te-'+prefix+'-enc-btn').classList.toggle('active', mode==='encrypt');\n  document.getElementById('te-'+prefix+'-dec-btn').classList.toggle('active', mode==='decrypt');\n  var badge = document.getElementById('te-'+prefix+'-badge');\n  if (badge) badge.textContent = mode === 'encrypt' ? '暗号化済み' : '復号済み';\n  if (cipher === 'caesar')   teCaesarRun();\n  if (cipher === 'vigenere') teVigenereRun();\n  if (cipher === 'xor')      teXorRun();\n  if (cipher === 'aes')      teAesRun();\n};\n\n/* ============================================================\n   ステータス・表示ヘルパー\n   ============================================================ */\nfunction teStatus(id, html, cls) {\n  var el = document.getElementById(id);\n  el.innerHTML = html;\n  el.className = 'te-status ' + cls;\n}\nfunction teShowOutput(prefix, text, mode) {\n  document.getElementById('te-'+prefix+'-out').value = text;\n  document.getElementById('te-'+prefix+'-output-wrap').style.display = 'block';\n  var badge = document.getElementById('te-'+prefix+'-badge');\n  if (badge) badge.textContent = mode === 'encrypt' ? '暗号化済み' : '復号済み';\n}\nfunction teHideOutput(prefix) {\n  document.getElementById('te-'+prefix+'-output-wrap').style.display = 'none';\n}\n\n/* ============================================================\n   クリア\n   ============================================================ */\nwindow.teClearPanel = function(cipher) {\n  var prefix = cipher === 'caesar' ? 'cs' : cipher === 'vigenere' ? 'vig' : cipher === 'xor' ? 'xor' : 'aes';\n  if (cipher === 'caesar')   document.getElementById('te-cs-input').value = '';\n  if (cipher === 'vigenere') document.getElementById('te-vig-input').value = '';\n  if (cipher === 'xor')      document.getElementById('te-xor-input').value = '';\n  if (cipher === 'aes')      document.getElementById('te-aes-input').value = '';\n  teHideOutput(prefix);\n  teStatus('te-'+prefix+'-status','','hidden');\n};\n\n/* ============================================================\n   コピーヘルパー\n   ============================================================ */\nwindow.teCopyOutput = function(taId, btn) {\n  var val = document.getElementById(taId).value;\n  if (!val) return;\n  navigator.clipboard.writeText(val).then(function() {\n    btn.innerHTML = '\u0026#10003; コピー済';\n    btn.classList.add('copied');\n    setTimeout(function(){ btn.innerHTML='\u0026#128203; コピー'; btn.classList.remove('copied'); }, 1800);\n  });\n};\n\n/* ============================================================\n   シーザー暗号\n   ============================================================ */\nfunction caesarShift(text, shift, decrypt) {\n  if (decrypt) shift = (26 - shift) % 26;\n  var result = '';\n  for (var i = 0; i \u003c text.length; i++) {\n    var c = text.charCodeAt(i);\n    if (c \u003e= 65 \u0026\u0026 c \u003c= 90) {\n      result += String.fromCharCode(((c - 65 + shift) % 26) + 65);\n    } else if (c \u003e= 97 \u0026\u0026 c \u003c= 122) {\n      result += String.fromCharCode(((c - 97 + shift) % 26) + 97);\n    } else {\n      result += text[i];\n    }\n  }\n  return result;\n}\n\nwindow.teCaesarRun = function() {\n  var text  = document.getElementById('te-cs-input').value;\n  var shift = parseInt(document.getElementById('te-cs-range').value, 10);\n  var mode  = teMode.caesar;\n  if (!text) { teHideOutput('cs'); teStatus('te-cs-status','','hidden'); return; }\n  var out = caesarShift(text, shift, mode === 'decrypt');\n  teShowOutput('cs', out, mode);\n  teStatus('te-cs-status', '\u0026#10003; シフト' + shift + 'で' + (mode==='encrypt'?'暗号化':'復号') + 'しました', 'ok');\n};\n\n/* ============================================================\n   ヴィジュネル暗号\n   ============================================================ */\nfunction vigenereProcess(text, key, decrypt) {\n  if (!key) return text;\n  key = key.toUpperCase().replace(/[^A-Z]/g, '');\n  if (!key.length) return text;\n  var result = '';\n  var ki = 0;\n  for (var i = 0; i \u003c text.length; i++) {\n    var c = text.charCodeAt(i);\n    var k = key.charCodeAt(ki % key.length) - 65;\n    if (c \u003e= 65 \u0026\u0026 c \u003c= 90) {\n      var s1 = decrypt ? ((c - 65 - k + 26) % 26) : ((c - 65 + k) % 26);\n      result += String.fromCharCode(s1 + 65);\n      ki++;\n    } else if (c \u003e= 97 \u0026\u0026 c \u003c= 122) {\n      var s2 = decrypt ? ((c - 97 - k + 26) % 26) : ((c - 97 + k) % 26);\n      result += String.fromCharCode(s2 + 97);\n      ki++;\n    } else {\n      result += text[i];\n    }\n  }\n  return result;\n}\n\nwindow.teVigenereRun = function() {\n  var text = document.getElementById('te-vig-input').value;\n  var key  = document.getElementById('te-vig-key').value;\n  var mode = teMode.vigenere;\n  if (!text) { teHideOutput('vig'); teStatus('te-vig-status','','hidden'); return; }\n  if (!key || !key.replace(/[^A-Za-z]/g,'').length) {\n    teStatus('te-vig-status','\u0026#9888; キーワードを英字で入力してください。','err');\n    teHideOutput('vig');\n    return;\n  }\n  var out = vigenereProcess(text, key, mode === 'decrypt');\n  teShowOutput('vig', out, mode);\n  teStatus('te-vig-status', '\u0026#10003; キー「' + key.toUpperCase().replace(/[^A-Z]/g,'') + '」で' + (mode==='encrypt'?'暗号化':'復号') + 'しました', 'ok');\n};\n\n/* ============================================================\n   XOR 暗号\n   ============================================================ */\nfunction xorEncrypt(text, key) {\n  if (!key) return text;\n  var bytes = new TextEncoder().encode(text);\n  var keyBytes = new TextEncoder().encode(key);\n  var out = new Uint8Array(bytes.length);\n  for (var i = 0; i \u003c bytes.length; i++) {\n    out[i] = bytes[i] ^ keyBytes[i % keyBytes.length];\n  }\n  return btoa(String.fromCharCode.apply(null, out));\n}\n\nfunction xorDecrypt(b64, key) {\n  if (!key) return b64;\n  try {\n    var raw = atob(b64);\n    var bytes = new Uint8Array(raw.length);\n    for (var i = 0; i \u003c raw.length; i++) bytes[i] = raw.charCodeAt(i);\n    var keyBytes = new TextEncoder().encode(key);\n    var out = new Uint8Array(bytes.length);\n    for (var j = 0; j \u003c bytes.length; j++) {\n      out[j] = bytes[j] ^ keyBytes[j % keyBytes.length];\n    }\n    return new TextDecoder().decode(out);\n  } catch(e) {\n    throw new Error('Base64形式が不正です。XOR暗号化の出力をそのまま貼り付けてください。');\n  }\n}\n\nwindow.teXorRun = function() {\n  var text = document.getElementById('te-xor-input').value;\n  var key  = document.getElementById('te-xor-key').value;\n  var mode = teMode.xor;\n  if (!text) { teHideOutput('xor'); teStatus('te-xor-status','','hidden'); return; }\n  if (!key) {\n    teStatus('te-xor-status','\u0026#9888; キーを入力してください。','err');\n    teHideOutput('xor');\n    return;\n  }\n  try {\n    var out = mode === 'encrypt' ? xorEncrypt(text, key) : xorDecrypt(text.trim(), key);\n    teShowOutput('xor', out, mode);\n    teStatus('te-xor-status', '\u0026#10003; ' + (mode==='encrypt'?'暗号化しました（Base64出力）':'復号しました'), 'ok');\n  } catch(e) {\n    teStatus('te-xor-status', '\u0026#10007; ' + e.message, 'err');\n    teHideOutput('xor');\n  }\n};\n\n/* ============================================================\n   AES-256-GCM（Web Crypto API）\n   ============================================================ */\nfunction teAesShowProg(pct, msg) {\n  var el = document.getElementById('te-aes-prog');\n  el.classList.add('visible');\n  document.getElementById('te-aes-prog-fill').style.width = pct + '%';\n  document.getElementById('te-aes-prog-lbl').textContent  = msg;\n}\nfunction teAesHideProg() {\n  document.getElementById('te-aes-prog').classList.remove('visible');\n}\n\nasync function aesKeyFromPassword(password, salt) {\n  var enc = new TextEncoder();\n  var keyMaterial = await crypto.subtle.importKey(\n    'raw', enc.encode(password), 'PBKDF2', false, ['deriveKey']\n  );\n  return crypto.subtle.deriveKey(\n    { name: 'PBKDF2', salt: salt, iterations: 100000, hash: 'SHA-256' },\n    keyMaterial,\n    { name: 'AES-GCM', length: 256 },\n    false,\n    ['encrypt', 'decrypt']\n  );\n}\n\nfunction buf2b64(buf) {\n  return btoa(String.fromCharCode.apply(null, new Uint8Array(buf)));\n}\nfunction b64toBuf(b64) {\n  var raw = atob(b64);\n  var buf = new Uint8Array(raw.length);\n  for (var i = 0; i \u003c raw.length; i++) buf[i] = raw.charCodeAt(i);\n  return buf;\n}\n\nasync function aesEncrypt(plaintext, password) {\n  var enc  = new TextEncoder();\n  var salt = crypto.getRandomValues(new Uint8Array(16));\n  var iv   = crypto.getRandomValues(new Uint8Array(12));\n  var key  = await aesKeyFromPassword(password, salt);\n  var cipherBuf = await crypto.subtle.encrypt(\n    { name: 'AES-GCM', iv: iv },\n    key,\n    enc.encode(plaintext)\n  );\n  return buf2b64(salt) + ':' + buf2b64(iv) + ':' + buf2b64(cipherBuf);\n}\n\nasync function aesDecrypt(encoded, password) {\n  var parts = encoded.trim().split(':');\n  if (parts.length !== 3) throw new Error('暗号文の形式が不正です。salt:iv:ciphertext 形式のBase64が必要です。');\n  var salt      = b64toBuf(parts[0]);\n  var iv        = b64toBuf(parts[1]);\n  var cipherBuf = b64toBuf(parts[2]);\n  var key = await aesKeyFromPassword(password, salt);\n  var plainBuf = await crypto.subtle.decrypt(\n    { name: 'AES-GCM', iv: iv },\n    key,\n    cipherBuf\n  );\n  return new TextDecoder().decode(plainBuf);\n}\n\nwindow.teAesRun = function() {\n  clearTimeout(teAesDebounce);\n  teAesDebounce = setTimeout(teAesRunNow, 300);\n};\n\nasync function teAesRunNow() {\n  var text = document.getElementById('te-aes-input').value;\n  var pw   = document.getElementById('te-aes-pw').value;\n  var mode = teMode.aes;\n  if (!text) { teHideOutput('aes'); teStatus('te-aes-status','','hidden'); teAesHideProg(); return; }\n  if (!pw) {\n    teStatus('te-aes-status','\u0026#9888; パスワードを入力してください。','err');\n    teHideOutput('aes');\n    return;\n  }\n  try {\n    if (mode === 'encrypt') {\n      teAesShowProg(30, 'PBKDF2 鍵導出中…');\n      var cipher = await aesEncrypt(text, pw);\n      teAesShowProg(100, '完了');\n      setTimeout(teAesHideProg, 400);\n      teShowOutput('aes', cipher, mode);\n      teStatus('te-aes-status', '\u0026#10003; AES-256-GCMで暗号化しました（PBKDF2鍵導出）', 'ok');\n    } else {\n      teAesShowProg(30, 'PBKDF2 鍵導出中…');\n      var plain = await aesDecrypt(text, pw);\n      teAesShowProg(100, '完了');\n      setTimeout(teAesHideProg, 400);\n      teShowOutput('aes', plain, mode);\n      teStatus('te-aes-status', '\u0026#10003; 復号に成功しました', 'ok');\n    }\n  } catch(e) {\n    teAesHideProg();\n    var msg = e.message || '不明なエラー';\n    if (msg.indexOf('operation-specific') !== -1 || msg.indexOf('OperationError') !== -1 || msg.toLowerCase().indexOf('decrypt') !== -1) {\n      msg = '復号に失敗しました — パスワードが違うか、暗号文が破損しています。';\n    }\n    teStatus('te-aes-status', '\u0026#10007; ' + msg, 'err');\n    teHideOutput('aes');\n  }\n}\n\n})();\n\u003c/script\u003e\n\u003c/div\u003e\u003c!-- /#te-app --\u003e\n\u003chr\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f5f3ff 0%,#ede9fe 100%);border:1.5px solid #c4b5fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#5b21b6;font-weight:700;\"\u003e個人・法人の確定申告・会計管理をかんたんに\u003c/p\u003e","title":"テキスト暗号化・復号ツール"},{"content":"CSSメディアクエリをビジュアルで作成できます。デバイスプリセットを選ぶかブレイクポイントを入力して、向き・ダークモード・アニメーション削減などの機能を追加し、生成された @media コードをそのままスタイルシートに貼り付けてください。\nアプローチ選択 モバイルファースト\nmin-width クエリ デスクトップファースト\nmax-width クエリ デバイスプリセット 📱 iPhone SE 320–480px 📱 iPhone 12/13 375–812px 📱 iPhone 14 Pro 390–844px 📟 iPad 768–1024px 📟 iPad Pro 1024–1366px 🖥️ デスクトップ HD 1280–1920px 🖥️ 4K / QHD 1920–2560px ✏️ カスタム 手動入力 幅 \u0026amp; 高さ 最小幅（Min Width） px 最大幅（Max Width） px 最小高さ（Min Height） px 最大高さ（Max Height） px メディア機能 \u0026lt;label class=\u0026quot;mq-feature-chip\u0026quot; id=\u0026quot;mqChipScreen\u0026quot; onclick=\u0026quot;mqToggleChip('mqChipScreen','mqFeatScreen')\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;mq-feature-dot\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;mqFeatScreen\u0026quot;\u0026gt; screen（画面） \u0026lt;/label\u0026gt; \u0026lt;label class=\u0026quot;mq-feature-chip\u0026quot; id=\u0026quot;mqChipPrint\u0026quot; onclick=\u0026quot;mqToggleChip('mqChipPrint','mqFeatPrint')\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;mq-feature-dot\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;mqFeatPrint\u0026quot;\u0026gt; print（印刷） \u0026lt;/label\u0026gt; \u0026lt;label class=\u0026quot;mq-feature-chip\u0026quot; id=\u0026quot;mqChipOrient\u0026quot; onclick=\u0026quot;mqToggleChip('mqChipOrient','mqFeatOrient')\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;mq-feature-dot\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;mqFeatOrient\u0026quot;\u0026gt; 向き (orientation): \u0026lt;select class=\u0026quot;mq-chip-select\u0026quot; id=\u0026quot;mqOrientVal\u0026quot; onclick=\u0026quot;event.stopPropagation()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;portrait\u0026quot;\u0026gt;縦 (portrait)\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;landscape\u0026quot;\u0026gt;横 (landscape)\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/label\u0026gt; \u0026lt;label class=\u0026quot;mq-feature-chip\u0026quot; id=\u0026quot;mqChipColor\u0026quot; onclick=\u0026quot;mqToggleChip('mqChipColor','mqFeatColor')\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;mq-feature-dot\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;mqFeatColor\u0026quot;\u0026gt; カラースキーム: \u0026lt;select class=\u0026quot;mq-chip-select\u0026quot; id=\u0026quot;mqColorVal\u0026quot; onclick=\u0026quot;event.stopPropagation()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;dark\u0026quot;\u0026gt;ダーク (dark)\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;light\u0026quot;\u0026gt;ライト (light)\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/label\u0026gt; \u0026lt;label class=\u0026quot;mq-feature-chip\u0026quot; id=\u0026quot;mqChipMotion\u0026quot; onclick=\u0026quot;mqToggleChip('mqChipMotion','mqFeatMotion')\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;mq-feature-dot\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;mqFeatMotion\u0026quot;\u0026gt; モーション削減: \u0026lt;select class=\u0026quot;mq-chip-select\u0026quot; id=\u0026quot;mqMotionVal\u0026quot; onclick=\u0026quot;event.stopPropagation()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;reduce\u0026quot;\u0026gt;reduce\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;no-preference\u0026quot;\u0026gt;no-preference\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/label\u0026gt; @media クエリを生成する\nライブ ビューポートマッチ ビューポート: — × — まだクエリが生成されていません 生成された CSS CSSをコピー /* ここに @media クエリが表示されます */ クイックリファレンス — よく使うブレイクポイント 名前 フレームワーク ブレイクポイント 対象デバイス xs Bootstrap \u0026lt; 576px 小型スマートフォン sm Bootstrap ≥ 576px スマートフォン横向き md Bootstrap ≥ 768px タブレット縦向き lg Bootstrap ≥ 992px タブレット横向き・小型ノートPC xl Bootstrap ≥ 1200px デスクトップ HD xxl Bootstrap ≥ 1400px ワイドデスクトップ sm Tailwind ≥ 640px スマートフォン横向き md Tailwind ≥ 768px タブレット lg Tailwind ≥ 1024px ノートPC・大型タブレット xl Tailwind ≥ 1280px デスクトップ 2xl Tailwind ≥ 1536px ワイド・4K モバイル カスタム \u0026lt; 768px スマートフォン全般 タブレット カスタム 768px–1199px タブレット全向き デスクトップ カスタム ≥ 1200px ノートPC・デスクトップ 4K カスタム ≥ 2560px ウルトラワイド・4Kディスプレイ 関連ツール \u0026#9633; CSS Flexboxジェネレーター \u0026#9635; CSSグリッドジェネレーター \u0026#128250; 画面解像度チェッカー フリーランス・個人事業主の方へ レスポンシブデザインの制作費を確定申告でしっかり経費処理。\nfreee会計なら銀行・クレカを自動取得してラクに帳簿が完成します。\nfreeeを無料で試す 使い方 アプローチを選択 — モバイルファーストは min-width で小さい画面から拡張、デスクトップファーストは max-width で大きい画面から縮小します。 デバイスプリセットを選ぶか、最小・最大の幅・高さを手動入力します。 メディア機能をトグル — 向き・ダークモード・モーション削減・印刷を追加できます。 **「@media クエリを生成する」**をクリックすると CSS コードとライブマッチ状況が表示されます。 **「CSSをコピー」**でクリップボードにコピーしてスタイルシートへ貼り付けます。 モバイルファースト vs デスクトップファースト モバイルファースト デスクトップファースト ベーススタイルの対象 最小画面 最大画面 クエリタイプ min-width max-width プログレッシブエンハンスメント 対応 非対応 フレームワーク対応 Tailwind、Bootstrap 4+ 旧来のフレームワーク ベストプラクティス: モバイルファーストが現代の標準です。詳細度の衝突を減らし、ベーススタイルをシンプルに保てます。\nprefers-color-scheme の活用 /* OSがダークモードのときだけダークスタイルを適用 */ @media screen and (prefers-color-scheme: dark) { body { background: #0f172a; color: #e2e8f0; } } CSS カスタムプロパティ（変数）と組み合わせると、宣言の重複を避けられます。\nprefers-reduced-motion — アクセシビリティ 前庭障害やモーション感受性のあるユーザーは OS レベルでアニメーション削減を設定できます。必ず対応しましょう:\n@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } } 関連ツール CSS Flexbox ジェネレーター — フレックスコンテナをビジュアルで構築 CSS グリッドジェネレーター — グリッドトラックとエリアをクリックで定義 画面解像度チェッカー — 正確な画面サイズとデバイスピクセル比を確認 ","permalink":"https://productivity-works.com/ja/tools/media-query-generator/","summary":"\u003cp\u003eCSSメディアクエリをビジュアルで作成できます。デバイスプリセットを選ぶかブレイクポイントを入力して、向き・ダークモード・アニメーション削減などの機能を追加し、生成された \u003ccode\u003e@media\u003c/code\u003e コードをそのままスタイルシートに貼り付けてください。\u003c/p\u003e\n\u003cdiv id=\"mq-app\"\u003e\n\u003cstyle\u003e\n  #mq-app *,\n  #mq-app *::before,\n  #mq-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\u003cp\u003e#mq-app {\nfont-family: -apple-system, BlinkMacSystemFont, \u0026ldquo;Hiragino Sans\u0026rdquo;, \u0026ldquo;Noto Sans JP\u0026rdquo;, \u0026ldquo;Yu Gothic\u0026rdquo;, sans-serif;\nfont-size: 15px;\ncolor: #1a1a2e;\nbackground: #f4f6fb;\nborder-radius: 12px;\npadding: 24px;\nmax-width: 900px;\nmargin: 0 auto;\n}\u003c/p\u003e\n\u003cp\u003e#mq-app h2.mq-section-title {\nfont-size: 13px;\nfont-weight: 700;\ntext-transform: uppercase;\nletter-spacing: .06em;\ncolor: #6b7280;\nmargin-bottom: 10px;\n}\u003c/p\u003e\n\u003cp\u003e#mq-app .mq-card {\nbackground: #fff;\nborder-radius: 10px;\npadding: 20px;\nmargin-bottom: 16px;\nborder: 1px solid #e5e7eb;\nbox-shadow: 0 1px 3px rgba(0,0,0,.06);\n}\u003c/p\u003e","title":"CSSメディアクエリジェネレーター — レスポンシブビルダー"},{"content":"気象観測で使われる単位をリアルタイムで変換。気温・風速・気圧・降水量・視程に対応し、各変換の計算式も表示します。\n単位変換 → 単位変換ツール 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 気温 風速 気圧 降水量 視程 \u0026#127777; 気温 摂氏 (°C) 華氏 (°F) ケルビン (K) 変換式 °F = °C × 9/5 + 32 K = °C + 273.15 °C = (°F − 32) × 5/9 °C = K − 273.15 リセット \u0026#127744; 風速 m/s（メートル毎秒） km/h（キロメートル毎時） mph（マイル毎時） ノット (kn) 変換式（基準: m/s） km/h = m/s × 3.6 mph = m/s × 2.23694 ノット = m/s × 1.94384 リセット \u0026#9729; 気圧 hPa（ヘクトパスカル） mmHg（水銀柱ミリメートル） inHg（水銀柱インチ） atm（標準大気圧） psi（重量ポンド毎平方インチ） 変換式（基準: hPa） mmHg = hPa × 0.750062 inHg = hPa × 0.02953 atm = hPa ÷ 1013.25 psi = hPa × 0.0145038 リセット \u0026#127783; 降水量 ミリメートル (mm) インチ (in) 変換式 インチ = mm ÷ 25.4 mm = インチ × 25.4 リセット \u0026#128065; 視程 キロメートル (km) マイル (mi) 変換式 マイル = km ÷ 1.60934 km = マイル × 1.60934 リセット 対応単位一覧：\nカテゴリ 対応単位 気温 °C（摂氏）、°F（華氏）、K（ケルビン）— 3方向すべて対応 風速 m/s、km/h、mph、ノット 気圧 hPa/mbar、mmHg/Torr、inHg、atm、psi 降水量 mm（ミリメートル）、インチ 視程 km（キロメートル）、マイル 気圧の基準単位はhPa（ヘクトパスカル）を使用。世界の多くの気象機関で標準的に使用されています。\n確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/weather-unit-converter/","summary":"\u003cp\u003e気象観測で使われる単位をリアルタイムで変換。気温・風速・気圧・降水量・視程に対応し、各変換の計算式も表示します。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e単位変換 → \u003ca href=\"https://productivity-works.com/ja/tools/unit-converter/\"\u003e単位変換ツール\u003c/a\u003e\n\u003c/p\u003e\u003c/blockquote\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e\n  \u003cspan style=\"font-size:13px;color:#0c4a6e;\"\u003efreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。\u003c/span\u003e\n  \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\" style=\"display:inline-block;margin-top:4px;padding:9px 20px;background:#0284c7;color:#fff;border-radius:7px;font-size:13px;font-weight:700;text-decoration:none;\"\u003efreeeを無料で試す →\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv id=\"wu-app\"\u003e\n\u003cstyle\u003e\n#wu-app *,#wu-app *::before,#wu-app *::after{box-sizing:border-box;margin:0;padding:0}\n#wu-app{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;font-size:14px;color:#1e293b;max-width:860px;margin-top:20px}\n#wu-app .wu-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:20px}\n#wu-app .wu-tab{padding:8px 18px;border-radius:8px;border:1.5px solid #cbd5e1;background:#fff;color:#334155;font-size:13px;font-weight:600;cursor:pointer;transition:all .15s}\n#wu-app .wu-tab:hover{border-color:#0ea5e9;color:#0ea5e9}\n#wu-app .wu-tab.active{background:#0ea5e9;border-color:#0ea5e9;color:#fff}\n#wu-app .wu-section{display:none;background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:20px}\n#wu-app .wu-section.active{display:block}\n#wu-app .wu-section-title{font-size:16px;font-weight:700;color:#0f172a;margin-bottom:16px;display:flex;align-items:center;gap:8px}\n#wu-app .wu-section-icon{font-size:20px;line-height:1}\n#wu-app .wu-temp-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}\n@media(max-width:560px){#wu-app .wu-temp-grid{grid-template-columns:1fr}}\n#wu-app .wu-conv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:12px}\n#wu-app .wu-field{display:flex;flex-direction:column;gap:4px}\n#wu-app .wu-field label{font-size:12px;font-weight:600;color:#64748b;letter-spacing:.03em}\n#wu-app .wu-field input{padding:10px 12px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:15px;font-weight:600;color:#1e293b;background:#fff;outline:none;transition:border-color .15s;width:100%}\n#wu-app .wu-field input:focus{border-color:#0ea5e9}\n#wu-app .wu-field input.source{border-color:#0ea5e9;background:#f0f9ff}\n#wu-app .wu-formula{margin-top:14px;padding:10px 14px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;font-size:12px;color:#64748b;line-height:1.7;font-family:\"SFMono-Regular\",Consolas,monospace}\n#wu-app .wu-formula-title{font-size:11px;font-weight:700;color:#94a3b8;letter-spacing:.06em;text-transform:uppercase;margin-bottom:4px}\n#wu-app .wu-formula-row{color:#475569}\n#wu-app .wu-formula-row strong{color:#0369a1}\n#wu-app .wu-reset-row{margin-top:14px;display:flex;gap:8px;align-items:center}\n#wu-app .wu-btn{padding:7px 16px;border-radius:7px;border:1.5px solid #cbd5e1;background:#f1f5f9;color:#475569;font-size:13px;font-weight:500;cursor:pointer;transition:all .15s}\n#wu-app .wu-btn:hover{border-color:#0ea5e9;color:#0ea5e9}\n\u003c/style\u003e\n\u003c!-- カテゴリタブ --\u003e\n\u003cdiv class=\"wu-tabs\"\u003e\n  \u003cbutton class=\"wu-tab active\" onclick=\"wuTab('temp')\"\u003e気温\u003c/button\u003e\n  \u003cbutton class=\"wu-tab\" onclick=\"wuTab('wind')\"\u003e風速\u003c/button\u003e\n  \u003cbutton class=\"wu-tab\" onclick=\"wuTab('pres')\"\u003e気圧\u003c/button\u003e\n  \u003cbutton class=\"wu-tab\" onclick=\"wuTab('precip')\"\u003e降水量\u003c/button\u003e\n  \u003cbutton class=\"wu-tab\" onclick=\"wuTab('vis')\"\u003e視程\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- 気温 --\u003e\n\u003cdiv class=\"wu-section active\" id=\"wu-sec-temp\"\u003e\n  \u003cdiv class=\"wu-section-title\"\u003e\u003cspan class=\"wu-section-icon\"\u003e\u0026#127777;\u003c/span\u003e 気温\u003c/div\u003e\n  \u003cdiv class=\"wu-temp-grid\"\u003e\n    \u003cdiv class=\"wu-field\"\u003e\n      \u003clabel\u003e摂氏 (°C)\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"wu-tc\" placeholder=\"0\" oninput=\"wuTempFrom('c')\" onfocus=\"wuTempFocus('c')\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"wu-field\"\u003e\n      \u003clabel\u003e華氏 (°F)\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"wu-tf\" placeholder=\"32\" oninput=\"wuTempFrom('f')\" onfocus=\"wuTempFocus('f')\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"wu-field\"\u003e\n      \u003clabel\u003eケルビン (K)\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"wu-tk\" placeholder=\"273.15\" oninput=\"wuTempFrom('k')\" onfocus=\"wuTempFocus('k')\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wu-formula\" id=\"wu-temp-formula\"\u003e\n    \u003cdiv class=\"wu-formula-title\"\u003e変換式\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003e°F = °C × 9/5 + 32\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003eK = °C + 273.15\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003e°C = (°F − 32) × 5/9\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003e°C = K − 273.15\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wu-reset-row\"\u003e\u003cbutton class=\"wu-btn\" onclick=\"wuTempReset()\"\u003eリセット\u003c/button\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 風速 --\u003e\n\u003cdiv class=\"wu-section\" id=\"wu-sec-wind\"\u003e\n  \u003cdiv class=\"wu-section-title\"\u003e\u003cspan class=\"wu-section-icon\"\u003e\u0026#127744;\u003c/span\u003e 風速\u003c/div\u003e\n  \u003cdiv class=\"wu-conv-grid\"\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003em/s（メートル毎秒）\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-wms\" placeholder=\"0\" oninput=\"wuWindFrom('ms')\" onfocus=\"wuWindFocus('ms')\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003ekm/h（キロメートル毎時）\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-wkh\" placeholder=\"0\" oninput=\"wuWindFrom('kh')\" onfocus=\"wuWindFocus('kh')\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003emph（マイル毎時）\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-wmp\" placeholder=\"0\" oninput=\"wuWindFrom('mp')\" onfocus=\"wuWindFocus('mp')\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003eノット (kn)\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-wkn\" placeholder=\"0\" oninput=\"wuWindFrom('kn')\" onfocus=\"wuWindFocus('kn')\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wu-formula\"\u003e\n    \u003cdiv class=\"wu-formula-title\"\u003e変換式（基準: m/s）\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003ekm/h = m/s × 3.6\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003emph = m/s × 2.23694\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003eノット = m/s × 1.94384\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wu-reset-row\"\u003e\u003cbutton class=\"wu-btn\" onclick=\"wuWindReset()\"\u003eリセット\u003c/button\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 気圧 --\u003e\n\u003cdiv class=\"wu-section\" id=\"wu-sec-pres\"\u003e\n  \u003cdiv class=\"wu-section-title\"\u003e\u003cspan class=\"wu-section-icon\"\u003e\u0026#9729;\u003c/span\u003e 気圧\u003c/div\u003e\n  \u003cdiv class=\"wu-conv-grid\"\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003ehPa（ヘクトパスカル）\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-phpa\" placeholder=\"1013.25\" oninput=\"wuPresFrom('hpa')\" onfocus=\"wuPresFocus('hpa')\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003emmHg（水銀柱ミリメートル）\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-pmmhg\" placeholder=\"760\" oninput=\"wuPresFrom('mmhg')\" onfocus=\"wuPresFocus('mmhg')\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003einHg（水銀柱インチ）\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-pinhg\" placeholder=\"29.92\" oninput=\"wuPresFrom('inhg')\" onfocus=\"wuPresFocus('inhg')\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003eatm（標準大気圧）\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-patm\" placeholder=\"1\" oninput=\"wuPresFrom('atm')\" onfocus=\"wuPresFocus('atm')\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003epsi（重量ポンド毎平方インチ）\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-ppsi\" placeholder=\"14.696\" oninput=\"wuPresFrom('psi')\" onfocus=\"wuPresFocus('psi')\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wu-formula\"\u003e\n    \u003cdiv class=\"wu-formula-title\"\u003e変換式（基準: hPa）\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003emmHg = hPa × 0.750062\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003einHg = hPa × 0.02953\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003eatm = hPa ÷ 1013.25\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003epsi = hPa × 0.0145038\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wu-reset-row\"\u003e\u003cbutton class=\"wu-btn\" onclick=\"wuPresReset()\"\u003eリセット\u003c/button\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 降水量 --\u003e\n\u003cdiv class=\"wu-section\" id=\"wu-sec-precip\"\u003e\n  \u003cdiv class=\"wu-section-title\"\u003e\u003cspan class=\"wu-section-icon\"\u003e\u0026#127783;\u003c/span\u003e 降水量\u003c/div\u003e\n  \u003cdiv class=\"wu-conv-grid\"\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003eミリメートル (mm)\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-pmm\" placeholder=\"0\" oninput=\"wuPrecipFrom('mm')\" onfocus=\"wuPrecipFocus('mm')\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003eインチ (in)\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-pin\" placeholder=\"0\" oninput=\"wuPrecipFrom('in')\" onfocus=\"wuPrecipFocus('in')\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wu-formula\"\u003e\n    \u003cdiv class=\"wu-formula-title\"\u003e変換式\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003eインチ = mm ÷ 25.4\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003emm = インチ × 25.4\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wu-reset-row\"\u003e\u003cbutton class=\"wu-btn\" onclick=\"wuPrecipReset()\"\u003eリセット\u003c/button\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 視程 --\u003e\n\u003cdiv class=\"wu-section\" id=\"wu-sec-vis\"\u003e\n  \u003cdiv class=\"wu-section-title\"\u003e\u003cspan class=\"wu-section-icon\"\u003e\u0026#128065;\u003c/span\u003e 視程\u003c/div\u003e\n  \u003cdiv class=\"wu-conv-grid\"\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003eキロメートル (km)\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-vkm\" placeholder=\"0\" oninput=\"wuVisFrom('km')\" onfocus=\"wuVisFocus('km')\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"wu-field\"\u003e\u003clabel\u003eマイル (mi)\u003c/label\u003e\u003cinput type=\"number\" id=\"wu-vmi\" placeholder=\"0\" oninput=\"wuVisFrom('mi')\" onfocus=\"wuVisFocus('mi')\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wu-formula\"\u003e\n    \u003cdiv class=\"wu-formula-title\"\u003e変換式\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003eマイル = km ÷ 1.60934\u003c/div\u003e\n    \u003cdiv class=\"wu-formula-row\"\u003ekm = マイル × 1.60934\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wu-reset-row\"\u003e\u003cbutton class=\"wu-btn\" onclick=\"wuVisReset()\"\u003eリセット\u003c/button\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var currentTab = 'temp';\n\n  function tab(id){\n    currentTab = id;\n    document.querySelectorAll('#wu-app .wu-tab').forEach(function(b,i){\n      var ids=['temp','wind','pres','precip','vis'];\n      b.classList.toggle('active', ids[i]===id);\n    });\n    document.querySelectorAll('#wu-app .wu-section').forEach(function(s){\n      s.classList.remove('active');\n    });\n    document.getElementById('wu-sec-'+id).classList.add('active');\n  }\n\n  function r(v, dp){ return Math.round(v * Math.pow(10,dp)) / Math.pow(10,dp); }\n  function setVal(id, v){ var el=document.getElementById(id); if(el) el.value = isNaN(v)||!isFinite(v)?'':r(v,6); }\n\n  /* 気温 */\n  function tempFrom(src){\n    var vc = parseFloat(document.getElementById('wu-tc').value);\n    var vf = parseFloat(document.getElementById('wu-tf').value);\n    var vk = parseFloat(document.getElementById('wu-tk').value);\n    var c;\n    if(src==='c'){ c = vc; }\n    else if(src==='f'){ c = (vf-32)*5/9; }\n    else { c = vk-273.15; }\n    if(isNaN(c)) return;\n    if(src!=='c') setVal('wu-tc', c);\n    if(src!=='f') setVal('wu-tf', c*9/5+32);\n    if(src!=='k') setVal('wu-tk', c+273.15);\n    updateTempFormula(src, c);\n  }\n  function tempFocus(src){\n    ['wu-tc','wu-tf','wu-tk'].forEach(function(id){ document.getElementById(id).classList.remove('source'); });\n    var map={c:'wu-tc',f:'wu-tf',k:'wu-tk'};\n    document.getElementById(map[src]).classList.add('source');\n  }\n  function updateTempFormula(src, c){\n    var el = document.getElementById('wu-temp-formula');\n    var f = r(c*9/5+32,4), k = r(c+273.15,4), cv = r(c,4);\n    var lines = [];\n    if(src==='c'){\n      lines.push('°F = '+cv+' × 9/5 + 32 = \u003cstrong\u003e'+f+' °F\u003c/strong\u003e');\n      lines.push('K = '+cv+' + 273.15 = \u003cstrong\u003e'+k+' K\u003c/strong\u003e');\n    } else if(src==='f'){\n      var fv=r(parseFloat(document.getElementById('wu-tf').value),4);\n      lines.push('°C = ('+fv+' − 32) × 5/9 = \u003cstrong\u003e'+cv+' °C\u003c/strong\u003e');\n      lines.push('K = '+cv+' + 273.15 = \u003cstrong\u003e'+k+' K\u003c/strong\u003e');\n    } else {\n      var kv=r(parseFloat(document.getElementById('wu-tk').value),4);\n      lines.push('°C = '+kv+' − 273.15 = \u003cstrong\u003e'+cv+' °C\u003c/strong\u003e');\n      lines.push('°F = '+cv+' × 9/5 + 32 = \u003cstrong\u003e'+f+' °F\u003c/strong\u003e');\n    }\n    el.innerHTML = '\u003cdiv class=\"wu-formula-title\"\u003e計算結果\u003c/div\u003e' +\n      lines.map(function(l){ return '\u003cdiv class=\"wu-formula-row\"\u003e'+l+'\u003c/div\u003e'; }).join('');\n  }\n  function tempReset(){\n    ['wu-tc','wu-tf','wu-tk'].forEach(function(id){ document.getElementById(id).value=''; document.getElementById(id).classList.remove('source'); });\n    document.getElementById('wu-temp-formula').innerHTML='\u003cdiv class=\"wu-formula-title\"\u003e変換式\u003c/div\u003e\u003cdiv class=\"wu-formula-row\"\u003e°F = °C × 9/5 + 32\u003c/div\u003e\u003cdiv class=\"wu-formula-row\"\u003eK = °C + 273.15\u003c/div\u003e\u003cdiv class=\"wu-formula-row\"\u003e°C = (°F − 32) × 5/9\u003c/div\u003e\u003cdiv class=\"wu-formula-row\"\u003e°C = K − 273.15\u003c/div\u003e';\n  }\n\n  /* 風速 */\n  var windFactors = {ms:1, kh:3.6, mp:2.23694, kn:1.94384};\n  var windIds = {ms:'wu-wms', kh:'wu-wkh', mp:'wu-wmp', kn:'wu-wkn'};\n  function windFrom(src){\n    var v = parseFloat(document.getElementById(windIds[src]).value);\n    if(isNaN(v)) return;\n    var ms = v / windFactors[src];\n    Object.keys(windIds).forEach(function(k){ if(k!==src) setVal(windIds[k], ms*windFactors[k]); });\n  }\n  function windFocus(src){ Object.keys(windIds).forEach(function(k){ document.getElementById(windIds[k]).classList.toggle('source',k===src); }); }\n  function windReset(){ Object.keys(windIds).forEach(function(k){ document.getElementById(windIds[k]).value=''; document.getElementById(windIds[k]).classList.remove('source'); }); }\n\n  /* 気圧 */\n  var presFactors = {hpa:1, mmhg:0.750062, inhg:0.02953, atm:1/1013.25, psi:0.0145038};\n  var presIds = {hpa:'wu-phpa', mmhg:'wu-pmmhg', inhg:'wu-pinhg', atm:'wu-patm', psi:'wu-ppsi'};\n  function presFrom(src){\n    var v = parseFloat(document.getElementById(presIds[src]).value);\n    if(isNaN(v)) return;\n    var hpa = v / presFactors[src];\n    Object.keys(presIds).forEach(function(k){ if(k!==src) setVal(presIds[k], hpa*presFactors[k]); });\n  }\n  function presFocus(src){ Object.keys(presIds).forEach(function(k){ document.getElementById(presIds[k]).classList.toggle('source',k===src); }); }\n  function presReset(){ Object.keys(presIds).forEach(function(k){ document.getElementById(presIds[k]).value=''; document.getElementById(presIds[k]).classList.remove('source'); }); }\n\n  /* 降水量 */\n  function precipFrom(src){\n    var v = parseFloat(document.getElementById(src==='mm'?'wu-pmm':'wu-pin').value);\n    if(isNaN(v)) return;\n    if(src==='mm') setVal('wu-pin', v/25.4);\n    else setVal('wu-pmm', v*25.4);\n  }\n  function precipFocus(src){\n    ['wu-pmm','wu-pin'].forEach(function(id){ document.getElementById(id).classList.remove('source'); });\n    document.getElementById(src==='mm'?'wu-pmm':'wu-pin').classList.add('source');\n  }\n  function precipReset(){ ['wu-pmm','wu-pin'].forEach(function(id){ document.getElementById(id).value=''; document.getElementById(id).classList.remove('source'); }); }\n\n  /* 視程 */\n  function visFrom(src){\n    var v = parseFloat(document.getElementById(src==='km'?'wu-vkm':'wu-vmi').value);\n    if(isNaN(v)) return;\n    if(src==='km') setVal('wu-vmi', v/1.60934);\n    else setVal('wu-vkm', v*1.60934);\n  }\n  function visFocus(src){\n    ['wu-vkm','wu-vmi'].forEach(function(id){ document.getElementById(id).classList.remove('source'); });\n    document.getElementById(src==='km'?'wu-vkm':'wu-vmi').classList.add('source');\n  }\n  function visReset(){ ['wu-vkm','wu-vmi'].forEach(function(id){ document.getElementById(id).value=''; document.getElementById(id).classList.remove('source'); }); }\n\n  window.wuTab = tab;\n  window.wuTempFrom = tempFrom; window.wuTempFocus = tempFocus; window.wuTempReset = tempReset;\n  window.wuWindFrom = windFrom; window.wuWindFocus = windFocus; window.wuWindReset = windReset;\n  window.wuPresFrom = presFrom; window.wuPresFocus = presFocus; window.wuPresReset = presReset;\n  window.wuPrecipFrom = precipFrom; window.wuPrecipFocus = precipFocus; window.wuPrecipReset = precipReset;\n  window.wuVisFrom = visFrom; window.wuVisFocus = visFocus; window.wuVisReset = visReset;\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e対応単位一覧：\u003c/strong\u003e\u003c/p\u003e","title":"気象単位変換ツール"},{"content":" カウントダウンタイマー カウントダウン 経過時間 イベント名（任意） 目標日付 時刻（任意） スタート + リストに追加 プリセット 2027年お正月 クリスマス2026 お盆2026 大晦日2026 GW2026 夏休み2026 ⏱ 日付を設定してカウントダウンを開始しましょう 登録済みイベント一覧 カウントダウンタイマーの使い方 日付を入力する — 「目標日付」フィールドにカウントダウンしたい日付を入力します。時刻も設定すると秒単位で精度が上がります。 イベント名を付ける — 「旅行」「資格試験」など目的を入力するとわかりやすくなります（省略可）。 スタートを押す — リアルタイムで日・時間・分・秒が表示されます。 プリセットを使う — よく使う日本の祝日・イベントをワンクリックで設定できます。 複数管理 — 「リストに追加」を使うと複数のカウントダウンを同時に管理できます。 経過時間モード — 過去の日付（記念日・入社日など）からの経過時間を表示したい場合は「経過時間」モードに切り替えます。 人気のカウントダウンイベント 日本でよくカウントダウンされるイベントの例です。\nイベント 特徴 お正月 新年まであと何日？家族や友人と共有しよう クリスマス プレゼントの準備もカウントダウンで管理 ゴールデンウィーク 連休を楽しみに仕事を乗り切る お盆 帰省や旅行の計画立てに 大晦日 年越しまでの秒読み 試験・受験 試験日まで逆算して計画的に学習 結婚記念日・誕生日 大切な人の記念日を忘れずに 旅行出発日 旅行への期待感をリアルタイムで楽しむ 関連ツール 正確な年齢を計算 → 年齢計算ツール ポモドーロテクニックで集中 → ポモドーロタイマー 時間の単位を変換 → 単位変換ツール 海外チームと時間を合わせる → タイムゾーン変換ツール — 世界中の都市間で時刻を即変換\n年末の確定申告に向けて準備を\n確定申告の期限までカウントダウン！クラウド会計ソフト「freee」なら、日々の経費入力から確定申告書の作成まで、すべてスマホで完結します。\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/countdown-timer/","summary":"\u003cdiv id=\"countdown-app\"\u003e\n\u003cstyle\u003e\n  #countdown-app {\n    font-family: 'Segoe UI', 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif;\n    max-width: 860px;\n    margin: 0 auto;\n    color: #1e1b4b;\n  }\n\n  #countdown-app * {\n    box-sizing: border-box;\n  }\n\n  /* ---- Input Panel ---- */\n  .cd-panel {\n    background: linear-gradient(135deg, #6d28d9 0%, #4c1d95 100%);\n    border-radius: 16px;\n    padding: 28px 24px;\n    color: #fff;\n    margin-bottom: 24px;\n    box-shadow: 0 8px 32px rgba(109,40,217,0.25);\n  }\n\n  .cd-panel h2 {\n    margin: 0 0 20px 0;\n    font-size: 1.25rem;\n    font-weight: 700;\n    letter-spacing: 0.03em;\n    color: #fef3c7;\n  }\n\n  .cd-form-row {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 12px;\n    margin-bottom: 14px;\n  }\n\n  .cd-form-group {\n    display: flex;\n    flex-direction: column;\n    flex: 1 1 180px;\n  }\n\n  .cd-form-group label {\n    font-size: 0.78rem;\n    font-weight: 600;\n    margin-bottom: 5px;\n    color: #ddd6fe;\n    letter-spacing: 0.04em;\n  }\n\n  .cd-form-group input[type=\"text\"],\n  .cd-form-group input[type=\"date\"],\n  .cd-form-group input[type=\"time\"] {\n    padding: 9px 12px;\n    border: none;\n    border-radius: 8px;\n    font-size: 0.95rem;\n    background: rgba(255,255,255,0.15);\n    color: #fff;\n    outline: none;\n    transition: background 0.2s;\n  }\n\n  .cd-form-group input[type=\"text\"]::placeholder {\n    color: rgba(255,255,255,0.55);\n  }\n\n  .cd-form-group input[type=\"date\"]::-webkit-calendar-picker-indicator,\n  .cd-form-group input[type=\"time\"]::-webkit-calendar-picker-indicator {\n    filter: invert(1);\n    cursor: pointer;\n  }\n\n  .cd-form-group input:focus {\n    background: rgba(255,255,255,0.25);\n  }\n\n  .cd-mode-toggle {\n    display: flex;\n    gap: 10px;\n    margin-bottom: 14px;\n    flex-wrap: wrap;\n  }\n\n  .cd-mode-btn {\n    padding: 7px 18px;\n    border-radius: 20px;\n    border: 2px solid rgba(255,255,255,0.4);\n    background: transparent;\n    color: #fff;\n    font-size: 0.85rem;\n    font-weight: 600;\n    cursor: pointer;\n    transition: all 0.2s;\n  }\n\n  .cd-mode-btn.active {\n    background: #fbbf24;\n    border-color: #fbbf24;\n    color: #1e1b4b;\n  }\n\n  .cd-btn-row {\n    display: flex;\n    gap: 10px;\n    flex-wrap: wrap;\n    margin-top: 4px;\n  }\n\n  .cd-start-btn {\n    padding: 11px 28px;\n    background: #fbbf24;\n    color: #1e1b4b;\n    border: none;\n    border-radius: 10px;\n    font-size: 1rem;\n    font-weight: 700;\n    cursor: pointer;\n    transition: background 0.2s, transform 0.1s;\n    letter-spacing: 0.03em;\n  }\n\n  .cd-start-btn:hover {\n    background: #f59e0b;\n    transform: translateY(-1px);\n  }\n\n  .cd-add-btn {\n    padding: 11px 20px;\n    background: rgba(255,255,255,0.15);\n    color: #fff;\n    border: 2px solid rgba(255,255,255,0.4);\n    border-radius: 10px;\n    font-size: 0.9rem;\n    font-weight: 600;\n    cursor: pointer;\n    transition: background 0.2s;\n  }\n\n  .cd-add-btn:hover {\n    background: rgba(255,255,255,0.25);\n  }\n\n  /* ---- Presets ---- */\n  .cd-presets {\n    margin-top: 18px;\n  }\n\n  .cd-presets-label {\n    font-size: 0.78rem;\n    font-weight: 600;\n    color: #ddd6fe;\n    margin-bottom: 8px;\n    display: block;\n    letter-spacing: 0.04em;\n  }\n\n  .cd-preset-list {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n  }\n\n  .cd-preset-chip {\n    padding: 6px 14px;\n    background: rgba(255,255,255,0.12);\n    border: 1px solid rgba(255,255,255,0.3);\n    border-radius: 20px;\n    color: #fff;\n    font-size: 0.82rem;\n    cursor: pointer;\n    transition: all 0.2s;\n    white-space: nowrap;\n  }\n\n  .cd-preset-chip:hover {\n    background: rgba(251,191,36,0.3);\n    border-color: #fbbf24;\n    color: #fef3c7;\n  }\n\n  /* ---- Main Display ---- */\n  .cd-display-card {\n    background: #fff;\n    border-radius: 16px;\n    box-shadow: 0 4px 24px rgba(109,40,217,0.12);\n    padding: 28px 20px 20px;\n    margin-bottom: 20px;\n    border: 2px solid #ede9fe;\n    position: relative;\n    overflow: hidden;\n  }\n\n  .cd-event-name {\n    text-align: center;\n    font-size: 1.15rem;\n    font-weight: 700;\n    color: #5b21b6;\n    margin-bottom: 20px;\n    letter-spacing: 0.03em;\n  }\n\n  .cd-units {\n    display: flex;\n    justify-content: center;\n    gap: 10px;\n    flex-wrap: wrap;\n    margin-bottom: 20px;\n  }\n\n  .cd-unit-card {\n    background: linear-gradient(135deg, #6d28d9 0%, #4c1d95 100%);\n    border-radius: 14px;\n    min-width: 80px;\n    padding: 16px 10px 12px;\n    text-align: center;\n    box-shadow: 0 4px 14px rgba(109,40,217,0.22);\n    transition: transform 0.15s;\n    flex: 1 1 70px;\n    max-width: 120px;\n  }\n\n  .cd-unit-card:hover {\n    transform: translateY(-2px);\n  }\n\n  .cd-unit-value {\n    font-size: 2.6rem;\n    font-weight: 900;\n    color: #fbbf24;\n    line-height: 1;\n    font-variant-numeric: tabular-nums;\n    letter-spacing: -0.02em;\n  }\n\n  .cd-unit-label {\n    font-size: 0.72rem;\n    font-weight: 700;\n    color: #ddd6fe;\n    margin-top: 6px;\n    letter-spacing: 0.08em;\n  }\n\n  .cd-separator {\n    font-size: 2rem;\n    font-weight: 900;\n    color: #7c3aed;\n    align-self: center;\n    margin-top: -10px;\n    flex: 0 0 auto;\n  }\n\n  /* ---- Progress Bar ---- */\n  .cd-progress-wrap {\n    margin: 4px 0 14px;\n  }\n\n  .cd-progress-labels {\n    display: flex;\n    justify-content: space-between;\n    font-size: 0.72rem;\n    color: #7c3aed;\n    font-weight: 600;\n    margin-bottom: 4px;\n  }\n\n  .cd-progress-bar {\n    width: 100%;\n    height: 8px;\n    background: #ede9fe;\n    border-radius: 4px;\n    overflow: hidden;\n  }\n\n  .cd-progress-fill {\n    height: 100%;\n    background: linear-gradient(90deg, #6d28d9, #fbbf24);\n    border-radius: 4px;\n    transition: width 0.5s ease;\n  }\n\n  /* ---- Trivia ---- */\n  .cd-trivia {\n    background: #faf5ff;\n    border-radius: 10px;\n    padding: 12px 16px;\n    font-size: 0.83rem;\n    color: #5b21b6;\n    margin-bottom: 14px;\n    border-left: 4px solid #7c3aed;\n    line-height: 1.6;\n  }\n\n  .cd-trivia span {\n    font-weight: 700;\n    color: #6d28d9;\n  }\n\n  /* ---- Elapsed Mode Badge ---- */\n  .cd-mode-badge {\n    display: inline-block;\n    background: #7c3aed;\n    color: #fff;\n    font-size: 0.72rem;\n    font-weight: 700;\n    padding: 3px 10px;\n    border-radius: 12px;\n    margin-bottom: 12px;\n    letter-spacing: 0.06em;\n  }\n\n  /* ---- Multi-card controls ---- */\n  .cd-card-controls {\n    display: flex;\n    justify-content: flex-end;\n    gap: 8px;\n    margin-top: 4px;\n  }\n\n  .cd-del-btn {\n    background: none;\n    border: 1px solid #d1d5db;\n    color: #6b7280;\n    border-radius: 7px;\n    padding: 4px 12px;\n    font-size: 0.78rem;\n    cursor: pointer;\n    transition: all 0.2s;\n  }\n\n  .cd-del-btn:hover {\n    background: #fee2e2;\n    border-color: #fca5a5;\n    color: #dc2626;\n  }\n\n  /* ---- Celebration Overlay ---- */\n  .cd-celebrate {\n    position: absolute;\n    inset: 0;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    background: linear-gradient(135deg, rgba(109,40,217,0.92) 0%, rgba(76,29,149,0.92) 100%);\n    border-radius: 14px;\n    z-index: 10;\n    animation: cdFadeIn 0.4s ease;\n  }\n\n  @keyframes cdFadeIn {\n    from { opacity: 0; transform: scale(0.95); }\n    to   { opacity: 1; transform: scale(1); }\n  }\n\n  .cd-celebrate-emoji {\n    font-size: 3.5rem;\n    animation: cdBounce 0.6s infinite alternate;\n  }\n\n  @keyframes cdBounce {\n    from { transform: translateY(0); }\n    to   { transform: translateY(-12px); }\n  }\n\n  .cd-celebrate-text {\n    color: #fbbf24;\n    font-size: 1.5rem;\n    font-weight: 900;\n    margin-top: 12px;\n    letter-spacing: 0.04em;\n    text-align: center;\n    padding: 0 16px;\n  }\n\n  .cd-celebrate-sub {\n    color: #ddd6fe;\n    font-size: 0.9rem;\n    margin-top: 6px;\n  }\n\n  .cd-dismiss-btn {\n    margin-top: 20px;\n    padding: 9px 24px;\n    background: #fbbf24;\n    color: #1e1b4b;\n    border: none;\n    border-radius: 8px;\n    font-weight: 700;\n    font-size: 0.9rem;\n    cursor: pointer;\n  }\n\n  /* ---- Confetti canvas ---- */\n  #cd-confetti-canvas {\n    position: fixed;\n    top: 0; left: 0;\n    width: 100%; height: 100%;\n    pointer-events: none;\n    z-index: 9999;\n  }\n\n  /* ---- Multi-list ---- */\n  .cd-list-section {\n    margin-top: 8px;\n  }\n\n  .cd-list-title {\n    font-size: 0.9rem;\n    font-weight: 700;\n    color: #5b21b6;\n    margin-bottom: 12px;\n    letter-spacing: 0.03em;\n  }\n\n  /* ---- Empty state ---- */\n  .cd-empty {\n    text-align: center;\n    padding: 40px 20px;\n    color: #9ca3af;\n    font-size: 0.95rem;\n  }\n\n  .cd-empty-icon {\n    font-size: 3rem;\n    margin-bottom: 10px;\n  }\n\n  /* ---- Responsive ---- */\n  @media (max-width: 540px) {\n    .cd-unit-value { font-size: 1.9rem; }\n    .cd-unit-card  { min-width: 58px; padding: 12px 6px 10px; }\n    .cd-separator  { font-size: 1.4rem; }\n    .cd-panel      { padding: 20px 16px; }\n    .cd-display-card { padding: 20px 14px 16px; }\n  }\n\u003c/style\u003e\n\u003c!-- Confetti canvas (fixed overlay) --\u003e\n\u003cp\u003e\u003ccanvas id=\"cd-confetti-canvas\"\u003e\u003c/canvas\u003e\u003c/p\u003e","title":"カウントダウンタイマー - 無料イベント日数カウントダウン"},{"content":" 通貨換算ツール 12の主要通貨間で金額を変換できます。参考為替レートを使用しています。\n金額 変換元通貨 \u0026#8644; 変換先通貨 — ※ レートは参考値です。実際の取引レートとは異なる場合があります。 クイック換算表 変換元の金額 換算結果 全通貨との比較（1単位あたり） 「変換元通貨」1単位で各通貨をいくら換算できるかを表示します。\n通貨 換算レート（変換元1単位） ※ 参考レートは2025年5月時点の概算値です。為替レートは市場の需給、各国の金融政策、インフレ率、地政学リスクなどによって日々変動します。実際の送金・両替・会計処理には、銀行や公式レートを必ずご確認ください。 外貨管理を効率化\n外貨建て取引が多い方は、為替差損益の自動計算が便利です。\n→ freee会計で為替差損益を自動計算（外部リンク） 関連ツール 配当金計算 → 配当金計算ツール FX利益計算 → FX利益計算ツール FX利益計算 → FX利益計算ツール 関連記事 DMM FXの口座開設のやり方｜初心者でも10分で完了する全手順【2026年版】 FX口座 おすすめ2026年版！初心者向けに比較【少額から始められる】 ","permalink":"https://productivity-works.com/ja/tools/currency-converter/","summary":"\u003cdiv id=\"crc-app\"\u003e\n\u003cstyle\u003e\n#crc-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic\", \"Segoe UI\", sans-serif;\n  max-width: 760px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#crc-app h2 {\n  font-size: 1.2rem;\n  font-weight: 700;\n  margin: 1.5rem 0 0.75rem;\n  color: #1a1a2e;\n}\n#crc-app .crc-card {\n  background: #ffffff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 1.5rem;\n  margin-bottom: 1.25rem;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n}\n#crc-app .crc-row {\n  display: flex;\n  gap: 0.75rem;\n  align-items: flex-end;\n  flex-wrap: wrap;\n}\n#crc-app .crc-field {\n  display: flex;\n  flex-direction: column;\n  gap: 0.3rem;\n  flex: 1;\n  min-width: 120px;\n}\n#crc-app .crc-field label {\n  font-size: 0.78rem;\n  font-weight: 700;\n  color: #64748b;\n  letter-spacing: 0.03em;\n}\n#crc-app .crc-field input,\n#crc-app .crc-field select {\n  padding: 0.6rem 0.75rem;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 1rem;\n  background: #f8fafc;\n  color: #1a1a2e;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#crc-app .crc-field input:focus,\n#crc-app .crc-field select:focus {\n  border-color: #3b82f6;\n  background: #fff;\n}\n#crc-app .crc-swap-btn {\n  background: #3b82f6;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  padding: 0.6rem 1rem;\n  font-size: 1.15rem;\n  cursor: pointer;\n  transition: background 0.15s;\n  align-self: flex-end;\n  height: 42px;\n}\n#crc-app .crc-swap-btn:hover {\n  background: #2563eb;\n}\n#crc-app .crc-result-box {\n  margin-top: 1rem;\n  padding: 1rem 1.25rem;\n  background: linear-gradient(135deg, #eff6ff 0%, #f0fdf4 100%);\n  border-radius: 10px;\n  border: 1px solid #bfdbfe;\n}\n#crc-app .crc-result-main {\n  font-size: 2rem;\n  font-weight: 800;\n  color: #1d4ed8;\n  line-height: 1.1;\n}\n#crc-app .crc-result-sub {\n  font-size: 0.85rem;\n  color: #64748b;\n  margin-top: 0.3rem;\n}\n#crc-app .crc-disclaimer {\n  font-size: 0.75rem;\n  color: #94a3b8;\n  margin-top: 0.5rem;\n  font-style: italic;\n}\n#crc-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.9rem;\n}\n#crc-app table th {\n  background: #f1f5f9;\n  color: #475569;\n  font-weight: 700;\n  text-align: left;\n  padding: 0.55rem 0.75rem;\n  border-bottom: 2px solid #e2e8f0;\n  font-size: 0.8rem;\n}\n#crc-app table td {\n  padding: 0.5rem 0.75rem;\n  border-bottom: 1px solid #f1f5f9;\n  color: #334155;\n}\n#crc-app table tr:last-child td {\n  border-bottom: none;\n}\n#crc-app table tr:hover td {\n  background: #f8fafc;\n}\n#crc-app .crc-flag {\n  margin-right: 0.35rem;\n}\n#crc-app .crc-highlight td {\n  font-weight: 700;\n  color: #1d4ed8;\n  background: #eff6ff !important;\n}\n#crc-app .crc-note {\n  font-size: 0.78rem;\n  color: #94a3b8;\n  padding: 0.6rem 0;\n  line-height: 1.7;\n}\n#crc-app .crc-cta {\n  background: linear-gradient(135deg, #fefce8 0%, #fff7ed 100%);\n  border: 1px solid #fde68a;\n  border-radius: 10px;\n  padding: 1rem 1.25rem;\n  margin-top: 1rem;\n  font-size: 0.9rem;\n  line-height: 1.7;\n}\n#crc-app .crc-cta strong {\n  color: #92400e;\n}\n\u003c/style\u003e\n\u003ch2 id=\"通貨換算ツール\"\u003e通貨換算ツール\u003c/h2\u003e\n\u003cp\u003e12の主要通貨間で金額を変換できます。参考為替レートを使用しています。\u003c/p\u003e","title":"通貨換算ツール - 為替レート計算機"},{"content":" コイントスシミュレーター 音 表 裏 — クリックしてコインを投げる コインを投げる\n表のラベル 裏のラベル ビジネスの意思決定をデータで\nfreee会計なら、経営判断に必要な財務データをリアルタイムで把握。無料トライアル実施中。 freeeを無料で試す → 統計 リセット 0 表の回数 0 裏の回数 — 表の割合 0 最長連続記録 投げた履歴 （直近50回） まだ投げていません 複数枚を同時に投げる 枚数（1〜100） 一斉に投げる ベストオブN（勝負） シリーズ ベストオブ3 ベストオブ5 ベストオブ7 新しいシリーズ 表: 0 裏: 0 ベストオブNで投げる 他のランダムツール：\nサイコロを振る → サイコロシミュレーター\n乱数を生成 → 乱数ジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連ツール Dice Roller → Dice Rollerツール パスワード生成 → パスワード生成ツール Random Number Generator → Random Number Generatorツール ","permalink":"https://productivity-works.com/ja/tools/coin-flipper/","summary":"\u003cdiv id=\"cf-app\"\u003e\n\u003cstyle\u003e\n#cf-app *,#cf-app *::before,#cf-app *::after{box-sizing:border-box;margin:0;padding:0}\n#cf-app{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Hiragino Kaku Gothic ProN',Meiryo,sans-serif;max-width:700px;margin:0 auto;padding:16px;color:#1e293b}\n#cf-app h2{font-size:1.1rem;font-weight:700;color:#0f172a;margin-bottom:14px}\n#cf-app .cf-section{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:20px;margin-bottom:16px}\n\u003cp\u003e/* Coin */\n#cf-app .cf-coin-wrap{display:flex;justify-content:center;align-items:center;margin:8px 0 20px;perspective:600px}\n#cf-app .cf-coin{width:130px;height:130px;position:relative;transform-style:preserve-3d;transition:transform 0.05s;cursor:pointer;user-select:none}\n#cf-app .cf-coin.spinning{animation:cfSpin 0.8s ease-out forwards}\n#cf-app .cf-coin-face{position:absolute;width:100%;height:100%;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:2.6rem;font-weight:900;backface-visibility:hidden;box-shadow:0 4px 18px rgba(0,0,0,0.18)}\n#cf-app .cf-heads{background:linear-gradient(145deg,#f5c842,#e6a817);color:#7a4800;border:4px solid #c8860a}\n#cf-app .cf-tails{background:linear-gradient(145deg,#d4d4d4,#a0a0a0);color:#3a3a3a;border:4px solid #888;transform:rotateY(180deg)}\n@keyframes cfSpin{0%{transform:rotateY(0deg)}60%{transform:rotateY(900deg)}80%{transform:rotateY(1050deg)}90%{transform:rotateY(980deg)}100%{transform:rotateY(var(\u0026ndash;cf-end-rot,1080deg))}}\u003c/p\u003e\n\u003cp\u003e/* Result badge */\n#cf-app .cf-result{text-align:center;font-size:1.5rem;font-weight:800;margin-bottom:6px;min-height:36px;transition:color 0.3s}\n#cf-app .cf-result.heads{color:#b45309}\n#cf-app .cf-result.tails{color:#475569}\n#cf-app .cf-result-label{text-align:center;font-size:0.85rem;color:#64748b;margin-bottom:16px;min-height:20px}\u003c/p\u003e\n\u003cp\u003e/* Buttons */\n#cf-app .cf-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:11px 22px;border:none;border-radius:8px;font-size:1rem;font-weight:700;cursor:pointer;transition:background 0.18s,transform 0.1s}\n#cf-app .cf-btn:active{transform:scale(0.97)}\n#cf-app .cf-btn-primary{background:#2563eb;color:#fff;font-size:1.15rem;padding:14px 36px;border-radius:10px;width:100%;margin-bottom:10px;min-height:54px}\n#cf-app .cf-btn-primary:hover{background:#1d4ed8}\n#cf-app .cf-btn-primary:disabled{background:#93c5fd;cursor:not-allowed;transform:none}\n#cf-app .cf-btn-sm{background:#f1f5f9;color:#334155;font-size:0.85rem;padding:7px 14px;border-radius:7px;border:1px solid #e2e8f0}\n#cf-app .cf-btn-sm:hover{background:#e2e8f0}\n#cf-app .cf-btn-danger{background:#fee2e2;color:#b91c1c;border:1px solid #fecaca}\n#cf-app .cf-btn-danger:hover{background:#fecaca}\u003c/p\u003e","title":"コイントスシミュレーター"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n手取り計算シミュレーター【2026年版】 年収（額面）を入力するだけで、手取り額・税金・社会保険料の内訳を自動計算します。\n年収（額面・万円） 200万円500万円2,000万円 扶養人数 0人（独身・扶養なし） 1人 2人 3人 年間手取り額（概算） 3,940,000円 月額手取り: 328,333円 所得税（年額） 139,500円 住民税（年額） 247,000円 社会保険料（年額） 735,000円 手取り率 78.8% 計算条件: 会社員（給与所得者）、40歳未満、東京都在住を想定した概算値です。実際の金額は勤務先・居住地・年齢により異なります。 年収別の手取り目安表 年収（額面） 手取り（概算） 手取り率 300万円 約240万円 約80% 400万円 約315万円 約79% 500万円 約394万円 約79% 600万円 約467万円 約78% 700万円 約535万円 約76% 800万円 約600万円 約75% 1,000万円 約722万円 約72% 1,500万円 約1,020万円 約68% ※独身・扶養なし・40歳未満の概算値\n手取りを増やす方法 手取りを増やすには、収入を上げるか控除を増やすのが基本です。\niDeCoで節税 → 掛金が全額所得控除。会社員なら月23,000円で年間約55,000円の節税効果 → iDeCo節税シミュレーター で節税額を計算 ふるさと納税 → 実質2,000円で返礼品がもらえる節税制度 副業で収入UP → 副業収入は給与所得とは別計算 → 副業の始め方ガイド 転職で年収UP → 年収交渉のコツを知る → 転職サイトおすすめ よくある質問 Q. ボーナスは含まれていますか？ 年収（額面）にボーナスを含めた金額を入力してください。計算結果はボーナス込みの年間手取りになります。\nQ. 40歳以上の場合は？ 40歳以上は介護保険料（約0.8%）が追加されるため、手取りがやや減少します。上記の計算は40歳未満を前提としています。\nQ. 副業収入がある場合は？ 副業所得は別途確定申告が必要です → 副業の確定申告やり方 おすすめサービス 手取り額がわかったら、次のアクションに進みましょう。\n貯蓄を投資で増やす → 毎月3万円を年利5%で20年運用すると約1,233万円に。つみたてNISAシミュレーター で将来の資産額を計算 老後資金を確認する → 年金だけで足りる？年金シミュレーター で将来の受給額をチェック 確定申告を楽にする → freee会計 なら銀行口座と自動連携で記帳が自動化 家計を最適化する → 家計簿シミュレーター で理想の支出配分を計算 関連ツール・記事 iDeCo節税シミュレーター — iDeCoの節税額と将来受取額を計算 つみたてNISAシミュレーター — 将来の資産額を計算 年金シミュレーター — 将来の年金受給額を確認 家計簿シミュレーター — 理想の支出配分を計算 副業の税金計算シミュレーター — 副業収入の税金を確認 FX利益計算シミュレーター — 投資の損益を計算 フリーランス確定申告ガイド 会計ソフトおすすめ比較 関連記事 フリーランスエンジニア年収相場完全ガイド2026年版 独身に生命保険は必要？｜20代・30代が本当に必要な保障額をデータで解説【2026年版】 ふるさと納税 やり方 完全ガイド【2026年版・初心者向け】 ","permalink":"https://productivity-works.com/ja/tools/salary-tedori-calculator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"手取り計算シミュレーター2026年版\"\u003e手取り計算シミュレーター【2026年版】\u003c/h1\u003e\n\u003cp\u003e年収（額面）を入力するだけで、\u003cstrong\u003e手取り額\u003c/strong\u003e・\u003cstrong\u003e税金\u003c/strong\u003e・\u003cstrong\u003e社会保険料\u003c/strong\u003eの内訳を自動計算します。\u003c/p\u003e\n\u003cdiv id=\"tedori-calc\" style=\"max-width:640px;margin:0 auto;padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e年収（額面・万円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"income\" min=\"200\" max=\"2000\" step=\"10\" value=\"500\" oninput=\"calcTedori()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e200万円\u003c/span\u003e\u003cspan id=\"incomeVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e500万円\u003c/span\u003e\u003cspan\u003e2,000万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:24px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e扶養人数\u003c/label\u003e\n\u003cselect id=\"dependents\" onchange=\"calcTedori()\" style=\"width:100%;padding:8px;border:1px solid #cbd5e1;border-radius:6px;font-size:16px;\"\u003e\n\u003coption value=\"0\"\u003e0人（独身・扶養なし）\u003c/option\u003e\n\u003coption value=\"1\"\u003e1人\u003c/option\u003e\n\u003coption value=\"2\"\u003e2人\u003c/option\u003e\n\u003coption value=\"3\"\u003e3人\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#1e40af;color:white;border-radius:8px;padding:20px;text-align:center;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:14px;margin-bottom:4px;\"\u003e年間手取り額（概算）\u003c/div\u003e\n\u003cdiv id=\"tedoriYear\" style=\"font-size:36px;font-weight:bold;\"\u003e3,940,000円\u003c/div\u003e\n\u003cdiv style=\"font-size:14px;margin-top:8px;\"\u003e月額手取り: \u003cspan id=\"tedoriMonth\" style=\"font-weight:bold;\"\u003e328,333円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px;\"\u003e\n\u003cdiv style=\"background:#fee2e2;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e所得税（年額）\u003c/div\u003e\n\u003cdiv id=\"incomeTax\" style=\"font-size:16px;font-weight:bold;color:#dc2626;\"\u003e139,500円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#fef3c7;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e住民税（年額）\u003c/div\u003e\n\u003cdiv id=\"residentTax\" style=\"font-size:16px;font-weight:bold;color:#d97706;\"\u003e247,000円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"background:#e0f2fe;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e社会保険料（年額）\u003c/div\u003e\n\u003cdiv id=\"socialIns\" style=\"font-size:16px;font-weight:bold;color:#0369a1;\"\u003e735,000円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#dcfce7;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e手取り率\u003c/div\u003e\n\u003cdiv id=\"tedoriRate\" style=\"font-size:16px;font-weight:bold;color:#15803d;\"\u003e78.8%\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f1f5f9;border-radius:8px;padding:12px;font-size:13px;color:#475569;\"\u003e\n\u003cstrong\u003e計算条件:\u003c/strong\u003e 会社員（給与所得者）、40歳未満、東京都在住を想定した概算値です。実際の金額は勤務先・居住地・年齢により異なります。\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction calcTedori(){\n  var inc=parseInt(document.getElementById('income').value);\n  var dep=parseInt(document.getElementById('dependents').value);\n  var annual=inc*10000;\n\n  // 給与所得控除\n  var deduction;\n  if(annual\u003c=1625000) deduction=550000;\n  else if(annual\u003c=1800000) deduction=annual*0.4-100000;\n  else if(annual\u003c=3600000) deduction=annual*0.3+80000;\n  else if(annual\u003c=6600000) deduction=annual*0.2+440000;\n  else if(annual\u003c=8500000) deduction=annual*0.1+1100000;\n  else deduction=1950000;\n\n  // 所得\n  var shotoku=annual-deduction;\n\n  // 基礎控除48万 + 社会保険料控除（概算15%）+ 扶養控除\n  var socialRate=0.147;\n  var socialIns=Math.floor(annual*socialRate);\n  var basicDeduction=480000;\n  var dependentDeduction=dep*380000;\n  var totalDeduction=basicDeduction+socialIns+dependentDeduction;\n\n  // 課税所得\n  var taxable=Math.max(shotoku-totalDeduction,0);\n\n  // 所得税（累進課税）\n  var incomeTax;\n  if(taxable\u003c=1950000) incomeTax=taxable*0.05;\n  else if(taxable\u003c=3300000) incomeTax=taxable*0.1-97500;\n  else if(taxable\u003c=6950000) incomeTax=taxable*0.2-427500;\n  else if(taxable\u003c=9000000) incomeTax=taxable*0.23-636000;\n  else if(taxable\u003c=18000000) incomeTax=taxable*0.33-1536000;\n  else if(taxable\u003c=40000000) incomeTax=taxable*0.40-2796000;\n  else incomeTax=taxable*0.45-4796000;\n  incomeTax=Math.floor(incomeTax*1.021); // 復興特別所得税\n\n  // 住民税（課税所得×10%+均等割5000円）\n  var residentTax=Math.floor(taxable*0.1)+5000;\n\n  // 手取り\n  var tedori=annual-incomeTax-residentTax-socialIns;\n  var tedoriMonthly=Math.floor(tedori/12);\n  var rate=(tedori/annual*100).toFixed(1);\n\n  document.getElementById('incomeVal').textContent=inc.toLocaleString()+'万円';\n  document.getElementById('tedoriYear').textContent=tedori.toLocaleString()+'円';\n  document.getElementById('tedoriMonth').textContent=tedoriMonthly.toLocaleString()+'円';\n  document.getElementById('incomeTax').textContent=incomeTax.toLocaleString()+'円';\n  document.getElementById('residentTax').textContent=residentTax.toLocaleString()+'円';\n  document.getElementById('socialIns').textContent=socialIns.toLocaleString()+'円';\n  document.getElementById('tedoriRate').textContent=rate+'%';\n}\ncalcTedori();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"年収別の手取り目安表\"\u003e年収別の手取り目安表\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e年収（額面）\u003c/th\u003e\n          \u003cth\u003e手取り（概算）\u003c/th\u003e\n          \u003cth\u003e手取り率\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e300万円\u003c/td\u003e\n          \u003ctd\u003e約240万円\u003c/td\u003e\n          \u003ctd\u003e約80%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e400万円\u003c/td\u003e\n          \u003ctd\u003e約315万円\u003c/td\u003e\n          \u003ctd\u003e約79%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e500万円\u003c/td\u003e\n          \u003ctd\u003e約394万円\u003c/td\u003e\n          \u003ctd\u003e約79%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e600万円\u003c/td\u003e\n          \u003ctd\u003e約467万円\u003c/td\u003e\n          \u003ctd\u003e約78%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e700万円\u003c/td\u003e\n          \u003ctd\u003e約535万円\u003c/td\u003e\n          \u003ctd\u003e約76%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e800万円\u003c/td\u003e\n          \u003ctd\u003e約600万円\u003c/td\u003e\n          \u003ctd\u003e約75%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1,000万円\u003c/td\u003e\n          \u003ctd\u003e約722万円\u003c/td\u003e\n          \u003ctd\u003e約72%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1,500万円\u003c/td\u003e\n          \u003ctd\u003e約1,020万円\u003c/td\u003e\n          \u003ctd\u003e約68%\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e※独身・扶養なし・40歳未満の概算値\u003c/p\u003e","title":"手取り計算シミュレーター｜年収から手取りを自動計算【2026年版】"},{"content":"ローカルネットワーク情報の検出・サブネット計算・IPv4の10進数変換・IPクラス判定・アドレス検証をブラウザ上で完結。外部へのリクエスト不要です。\n接続・ブラウザ情報 接続タイプ検出中… 実効速度— 画面解像度— 色深度— ブラウザ— OS / プラットフォーム— 言語設定— Cookie 有効— ローカルIP検出（WebRTC） WebRTC でローカルIPを検出しています… WebRTC を使用して、ルーターが割り当てたローカル（LAN）IPアドレスを取得します。外部サーバーへのアクセスは不要で、ほとんどのモダンブラウザで動作します。VPN使用時やファイアウォール環境では検出されない場合があります。\nサブネット計算（CIDR） IPv4 アドレス プレフィックス長（CIDR） サブネットを計算 ネットワークアドレス— サブネットマスク— ブロードキャストアドレス— 最初のホストアドレス— 最後のホストアドレス— 使用可能ホスト数— 総アドレス数— ワイルドカードマスク— 使用可能ホスト容量 IPクラス・範囲判定 IPv4 アドレス IPクラスを判定 IPv4 ↔ 10進数（32bit）変換 IPv4 アドレス 10進数（32ビット） IPv4 → 10進数 10進数 → IPv4 IPv4 アドレス— 10進数— 2進数（バイナリ）— 16進数（Hex）— IPv4 アドレス形式チェック 確認したい IPv4 アドレス 💼 freee 会計 — 個人事業主・フリーランスの帳簿をAIで自動化 銀行・クレカ明細を自動取込。確定申告書類をワンクリック作成。ITエンジニア・フリーランスに選ばれるクラウド会計ソフト。 freee を無料で試す 関連ツール APIリクエストビルダー → APIリクエストビルダーツール Dns Record Guide → Dns Record Guideツール Http Status Codes → Http Status Codesツール 関連記事 VPN おすすめ2026年版！用途別に比較【初心者向けガイド】 ","permalink":"https://productivity-works.com/ja/tools/ip-address-info/","summary":"\u003cp\u003eローカルネットワーク情報の検出・サブネット計算・IPv4の10進数変換・IPクラス判定・アドレス検証をブラウザ上で完結。外部へのリクエスト不要です。\u003c/p\u003e\n\u003cdiv id=\"ip-app\"\u003e\n\u003cstyle\u003e\n#ip-app {\n  font-family: system-ui, -apple-system, \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", sans-serif;\n  background: #0f172a;\n  color: #e2e8f0;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 1.5rem;\n  border-radius: 14px;\n}\n#ip-app * { box-sizing: border-box; }\n\n#ip-app h2 {\n  font-size: 1.05rem;\n  font-weight: 700;\n  color: #22c55e;\n  margin: 1.8rem 0 0.7rem;\n  border-left: 4px solid #22c55e;\n  padding-left: 0.65rem;\n  letter-spacing: 0.02em;\n}\n#ip-app h2:first-of-type { margin-top: 0; }\n\n#ip-app .ip-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n  gap: 0.75rem;\n  margin-bottom: 1rem;\n}\n\n#ip-app .ip-card {\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 10px;\n  padding: 0.85rem 1rem;\n}\n#ip-app .ip-card .ip-label {\n  font-size: 0.68rem;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  color: #64748b;\n  margin-bottom: 0.3rem;\n}\n#ip-app .ip-card .ip-value {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #22c55e;\n  word-break: break-all;\n}\n#ip-app .ip-card .ip-value.muted {\n  color: #94a3b8;\n  font-size: 0.9rem;\n  font-weight: 500;\n}\n\n#ip-app .ip-badge {\n  display: inline-block;\n  padding: 0.2rem 0.6rem;\n  border-radius: 99px;\n  font-size: 0.72rem;\n  font-weight: 600;\n  margin-top: 0.2rem;\n}\n#ip-app .ip-badge.green { background: #14532d; color: #86efac; }\n#ip-app .ip-badge.blue  { background: #1e3a5f; color: #93c5fd; }\n#ip-app .ip-badge.amber { background: #451a03; color: #fcd34d; }\n#ip-app .ip-badge.red   { background: #450a0a; color: #fca5a5; }\n\n#ip-app .ip-section {\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 12px;\n  padding: 1.2rem;\n  margin-bottom: 1.2rem;\n}\n\n#ip-app label {\n  display: block;\n  font-size: 0.8rem;\n  color: #94a3b8;\n  margin-bottom: 0.3rem;\n  margin-top: 0.8rem;\n}\n#ip-app label:first-child { margin-top: 0; }\n\n#ip-app input[type=\"text\"], #ip-app input[type=\"number\"], #ip-app select {\n  width: 100%;\n  background: #0f172a;\n  border: 1px solid #475569;\n  border-radius: 8px;\n  color: #e2e8f0;\n  padding: 0.55rem 0.8rem;\n  font-size: 0.95rem;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#ip-app input[type=\"text\"]:focus,\n#ip-app input[type=\"number\"]:focus {\n  border-color: #22c55e;\n}\n#ip-app input.error { border-color: #ef4444; }\n\n#ip-app .ip-row {\n  display: flex;\n  gap: 0.75rem;\n  flex-wrap: wrap;\n}\n#ip-app .ip-row \u003e * { flex: 1; min-width: 140px; }\n\n#ip-app button {\n  background: #22c55e;\n  color: #0f172a;\n  border: none;\n  border-radius: 8px;\n  padding: 0.6rem 1.4rem;\n  font-size: 0.9rem;\n  font-weight: 700;\n  cursor: pointer;\n  margin-top: 0.9rem;\n  transition: background 0.15s;\n}\n#ip-app button:hover { background: #16a34a; }\n\n#ip-app .ip-result-table {\n  width: 100%;\n  border-collapse: collapse;\n  margin-top: 1rem;\n  font-size: 0.88rem;\n}\n#ip-app .ip-result-table td {\n  padding: 0.5rem 0.75rem;\n  border-bottom: 1px solid #1e293b;\n}\n#ip-app .ip-result-table td:first-child {\n  color: #64748b;\n  width: 50%;\n  font-size: 0.8rem;\n}\n#ip-app .ip-result-table td:last-child {\n  color: #22c55e;\n  font-weight: 600;\n  word-break: break-all;\n}\n#ip-app .ip-result-table tr:last-child td { border-bottom: none; }\n\n#ip-app .ip-msg {\n  font-size: 0.82rem;\n  margin-top: 0.6rem;\n  padding: 0.5rem 0.75rem;\n  border-radius: 7px;\n}\n#ip-app .ip-msg.ok   { background: #14532d44; color: #86efac; border: 1px solid #14532d; }\n#ip-app .ip-msg.err  { background: #450a0a44; color: #fca5a5; border: 1px solid #450a0a; }\n#ip-app .ip-msg.info { background: #1e3a5f44; color: #93c5fd; border: 1px solid #1e3a5f; }\n\n#ip-app .webrtc-note {\n  font-size: 0.78rem;\n  color: #475569;\n  margin-top: 0.4rem;\n  line-height: 1.6;\n}\n\n#ip-app .subnet-vis {\n  margin-top: 0.9rem;\n  background: #0f172a;\n  border: 1px solid #334155;\n  border-radius: 8px;\n  padding: 0.75rem 1rem;\n}\n#ip-app .subnet-vis .sv-bar-wrap {\n  background: #334155;\n  border-radius: 4px;\n  height: 18px;\n  margin: 0.4rem 0;\n  overflow: hidden;\n}\n#ip-app .subnet-vis .sv-bar {\n  height: 18px;\n  border-radius: 4px;\n  background: linear-gradient(90deg, #22c55e 0%, #16a34a 100%);\n}\n#ip-app .subnet-vis .sv-label {\n  font-size: 0.72rem;\n  color: #64748b;\n}\n#ip-app .subnet-vis .sv-count {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #22c55e;\n}\n\n/* freee CTA */\n#ip-app .freee-cta {\n  background: linear-gradient(135deg, #1e293b 0%, #0f2027 100%);\n  border: 1px solid #22c55e44;\n  border-radius: 12px;\n  padding: 1.2rem 1.4rem;\n  margin-top: 1.8rem;\n  display: flex;\n  align-items: flex-start;\n  gap: 1rem;\n  flex-wrap: wrap;\n}\n#ip-app .freee-cta .fc-icon {\n  font-size: 2rem;\n  line-height: 1;\n  flex-shrink: 0;\n}\n#ip-app .freee-cta .fc-body { flex: 1; min-width: 200px; }\n#ip-app .freee-cta .fc-title {\n  font-size: 0.95rem;\n  font-weight: 700;\n  color: #e2e8f0;\n  margin-bottom: 0.3rem;\n}\n#ip-app .freee-cta .fc-desc {\n  font-size: 0.8rem;\n  color: #94a3b8;\n  line-height: 1.5;\n  margin-bottom: 0.7rem;\n}\n#ip-app .freee-cta a {\n  display: inline-block;\n  background: #22c55e;\n  color: #0f172a;\n  font-size: 0.85rem;\n  font-weight: 700;\n  padding: 0.45rem 1.1rem;\n  border-radius: 7px;\n  text-decoration: none;\n  transition: background 0.15s;\n}\n#ip-app .freee-cta a:hover { background: #16a34a; }\n\n@media (max-width: 520px) {\n  #ip-app { padding: 1rem; }\n  #ip-app .ip-row { flex-direction: column; }\n}\n\u003c/style\u003e\n\u003c!-- ===== SECTION 1: ブラウザ・接続情報 ===== --\u003e\n\u003ch2\u003e接続・ブラウザ情報\u003c/h2\u003e\n\u003cdiv class=\"ip-grid\" id=\"info-grid\"\u003e\n  \u003cdiv class=\"ip-card\"\u003e\u003cdiv class=\"ip-label\"\u003e接続タイプ\u003c/div\u003e\u003cdiv class=\"ip-value\" id=\"conn-type\"\u003e検出中…\u003c/div\u003e\u003c/div\u003e\n  \u003cdiv class=\"ip-card\"\u003e\u003cdiv class=\"ip-label\"\u003e実効速度\u003c/div\u003e\u003cdiv class=\"ip-value\" id=\"conn-speed\"\u003e—\u003c/div\u003e\u003c/div\u003e\n  \u003cdiv class=\"ip-card\"\u003e\u003cdiv class=\"ip-label\"\u003e画面解像度\u003c/div\u003e\u003cdiv class=\"ip-value\" id=\"screen-res\"\u003e—\u003c/div\u003e\u003c/div\u003e\n  \u003cdiv class=\"ip-card\"\u003e\u003cdiv class=\"ip-label\"\u003e色深度\u003c/div\u003e\u003cdiv class=\"ip-value\" id=\"color-depth\"\u003e—\u003c/div\u003e\u003c/div\u003e\n  \u003cdiv class=\"ip-card\"\u003e\u003cdiv class=\"ip-label\"\u003eブラウザ\u003c/div\u003e\u003cdiv class=\"ip-value muted\" id=\"browser-name\"\u003e—\u003c/div\u003e\u003c/div\u003e\n  \u003cdiv class=\"ip-card\"\u003e\u003cdiv class=\"ip-label\"\u003eOS / プラットフォーム\u003c/div\u003e\u003cdiv class=\"ip-value muted\" id=\"os-name\"\u003e—\u003c/div\u003e\u003c/div\u003e\n  \u003cdiv class=\"ip-card\"\u003e\u003cdiv class=\"ip-label\"\u003e言語設定\u003c/div\u003e\u003cdiv class=\"ip-value\" id=\"lang\"\u003e—\u003c/div\u003e\u003c/div\u003e\n  \u003cdiv class=\"ip-card\"\u003e\u003cdiv class=\"ip-label\"\u003eCookie 有効\u003c/div\u003e\u003cdiv class=\"ip-value\" id=\"cookies\"\u003e—\u003c/div\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ===== SECTION 2: WebRTC ローカルIP ===== --\u003e\n\u003ch2\u003eローカルIP検出（WebRTC）\u003c/h2\u003e\n\u003cdiv class=\"ip-section\"\u003e\n  \u003cdiv id=\"webrtc-ips\"\u003e\u003cspan style=\"color:#64748b;font-size:0.9rem;\"\u003eWebRTC でローカルIPを検出しています…\u003c/span\u003e\u003c/div\u003e\n  \u003cp class=\"webrtc-note\"\u003eWebRTC を使用して、ルーターが割り当てたローカル（LAN）IPアドレスを取得します。外部サーバーへのアクセスは不要で、ほとんどのモダンブラウザで動作します。VPN使用時やファイアウォール環境では検出されない場合があります。\u003c/p\u003e","title":"IPアドレス情報ツール — サブネット計算・IPv4変換・ネットワーク診断"},{"content":" 「犬の1年は人間の7年」という説は科学的に不正確です。犬は生後1〜2年で急激に成長し、その後の老化ペースは品種サイズによって大きく異なります。このツールは最新の研究にもとづき、体重区分ごとに正確な換算を行います。 愛犬の情報を入力 年齢（年） 月齢（月） 体型サイズ 小型犬（10kg未満） 中型犬（10〜25kg） 大型犬（25〜45kg） 超大型犬（45kg超） 換算する 年齢を正しく入力してください（0〜30年）。 🐾 -- 人間換算の年齢 -- 犬の実際の年齢 -- 体型区分 -- 平均寿命（目安） --% ライフステージ進捗 ライフステージ タイムライン 子犬 若犬 成犬 中年 シニア 老齢 犬の老化にまつわる豆知識 犬の年齢 × 人間換算 早見表 犬の年齢 小型犬 中型犬 大型犬 超大型犬 ペットの医療費・ごはん代・トリミング代など、ペット関連の出費をまとめて管理したいなら → freee会計で家計を自動管理 関連ツール 年齢計算 → 年齢計算ツール 出産予定日計算 → 出産予定日計算ツール ","permalink":"https://productivity-works.com/ja/tools/dog-age-calculator/","summary":"\u003cdiv id=\"da-app\"\u003e\n\u003cstyle\u003e\n#da-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Kaku Gothic ProN', 'Noto Sans JP', sans-serif;\n  max-width: 780px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#da-app *, #da-app *::before, #da-app *::after {\n  box-sizing: border-box;\n}\n#da-app h2 {\n  font-size: 1.3rem;\n  font-weight: 700;\n  margin: 1.6rem 0 0.8rem;\n  color: #1a1a2e;\n}\n#da-app .da-intro {\n  background: linear-gradient(135deg, #fff8f0 0%, #fff3e0 100%);\n  border-left: 4px solid #f4a226;\n  border-radius: 0 10px 10px 0;\n  padding: 14px 18px;\n  margin-bottom: 24px;\n  font-size: 0.95rem;\n  color: #5a4a2a;\n  line-height: 1.7;\n}\n#da-app .da-card {\n  background: #fff;\n  border: 1px solid #e8e8f0;\n  border-radius: 14px;\n  padding: 24px;\n  margin-bottom: 20px;\n  box-shadow: 0 2px 12px rgba(0,0,0,0.06);\n}\n#da-app .da-form-row {\n  display: flex;\n  gap: 16px;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  margin-bottom: 18px;\n}\n#da-app .da-field {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  flex: 1;\n  min-width: 130px;\n}\n#da-app .da-field label {\n  font-size: 0.83rem;\n  font-weight: 700;\n  color: #555;\n  letter-spacing: 0.02em;\n}\n#da-app .da-field input,\n#da-app .da-field select {\n  padding: 10px 14px;\n  border: 2px solid #e0e0ea;\n  border-radius: 8px;\n  font-size: 1rem;\n  color: #1a1a2e;\n  background: #fafafa;\n  transition: border-color 0.2s;\n  outline: none;\n  font-family: inherit;\n}\n#da-app .da-field input:focus,\n#da-app .da-field select:focus {\n  border-color: #f4a226;\n  background: #fff;\n}\n#da-app .da-btn {\n  padding: 12px 28px;\n  background: linear-gradient(135deg, #f4a226 0%, #e8891a 100%);\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 1rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: transform 0.15s, box-shadow 0.15s;\n  white-space: nowrap;\n  align-self: flex-end;\n  font-family: inherit;\n}\n#da-app .da-btn:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 4px 16px rgba(244,162,38,0.4);\n}\n#da-app .da-btn:active {\n  transform: translateY(0);\n}\n#da-app .da-result {\n  display: none;\n  animation: daFadeIn 0.4s ease;\n}\n#da-app .da-result.active {\n  display: block;\n}\n@keyframes daFadeIn {\n  from { opacity: 0; transform: translateY(10px); }\n  to   { opacity: 1; transform: translateY(0); }\n}\n#da-app .da-result-hero {\n  background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);\n  border-radius: 14px;\n  padding: 28px 24px;\n  text-align: center;\n  color: #fff;\n  margin-bottom: 20px;\n  position: relative;\n  overflow: hidden;\n}\n#da-app .da-result-hero::before {\n  content: '';\n  position: absolute;\n  top: -40px; right: -40px;\n  width: 160px; height: 160px;\n  background: rgba(244,162,38,0.12);\n  border-radius: 50%;\n}\n#da-app .da-result-hero .da-paw {\n  font-size: 2.4rem;\n  margin-bottom: 8px;\n}\n#da-app .da-result-hero .da-human-age {\n  font-size: 3.6rem;\n  font-weight: 800;\n  color: #f4a226;\n  line-height: 1;\n  margin-bottom: 4px;\n}\n#da-app .da-result-hero .da-human-age-label {\n  font-size: 1rem;\n  color: rgba(255,255,255,0.7);\n  margin-bottom: 16px;\n}\n#da-app .da-stage-badge {\n  display: inline-block;\n  padding: 6px 18px;\n  border-radius: 50px;\n  font-size: 0.9rem;\n  font-weight: 700;\n  letter-spacing: 0.04em;\n}\n#da-app .da-stage-puppy    { background: #4caf50; color: #fff; }\n#da-app .da-stage-junior   { background: #8bc34a; color: #fff; }\n#da-app .da-stage-adult    { background: #2196f3; color: #fff; }\n#da-app .da-stage-mature   { background: #ff9800; color: #fff; }\n#da-app .da-stage-senior   { background: #f44336; color: #fff; }\n#da-app .da-stage-geriatric{ background: #9c27b0; color: #fff; }\n#da-app .da-meta-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n  gap: 14px;\n  margin-bottom: 20px;\n}\n#da-app .da-meta-item {\n  background: #f8f8fc;\n  border-radius: 10px;\n  padding: 14px 16px;\n  text-align: center;\n}\n#da-app .da-meta-value {\n  font-size: 1.5rem;\n  font-weight: 700;\n  color: #f4a226;\n  margin-bottom: 2px;\n}\n#da-app .da-meta-label {\n  font-size: 0.78rem;\n  color: #888;\n  letter-spacing: 0.03em;\n}\n/* Timeline */\n#da-app .da-timeline {\n  position: relative;\n  padding: 10px 0;\n  margin: 8px 0 20px;\n}\n#da-app .da-timeline-track {\n  height: 10px;\n  border-radius: 5px;\n  background: linear-gradient(to right,\n    #4caf50 0%, #4caf50 8%,\n    #8bc34a 8%, #8bc34a 20%,\n    #2196f3 20%, #2196f3 55%,\n    #ff9800 55%, #ff9800 72%,\n    #f44336 72%, #f44336 88%,\n    #9c27b0 88%, #9c27b0 100%\n  );\n  position: relative;\n}\n#da-app .da-timeline-marker {\n  position: absolute;\n  top: -5px;\n  width: 20px;\n  height: 20px;\n  background: #fff;\n  border: 3px solid #1a1a2e;\n  border-radius: 50%;\n  transform: translateX(-50%);\n  transition: left 0.5s ease;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n}\n#da-app .da-timeline-labels {\n  display: flex;\n  justify-content: space-between;\n  margin-top: 8px;\n  font-size: 0.70rem;\n  color: #888;\n}\n/* Fun facts */\n#da-app .da-fact {\n  background: #f0f7ff;\n  border-radius: 10px;\n  padding: 14px 18px;\n  margin-bottom: 10px;\n  font-size: 0.92rem;\n  color: #1a3a5c;\n  line-height: 1.7;\n  border-left: 3px solid #2196f3;\n}\n#da-app .da-fact-icon {\n  font-weight: 700;\n  color: #2196f3;\n  margin-right: 6px;\n}\n/* Comparison table */\n#da-app .da-table-wrap {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n  border-radius: 10px;\n  border: 1px solid #e8e8f0;\n}\n#da-app table.da-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n}\n#da-app table.da-table thead tr {\n  background: #1a1a2e;\n  color: #fff;\n}\n#da-app table.da-table th {\n  padding: 10px 14px;\n  text-align: center;\n  font-weight: 600;\n  font-size: 0.82rem;\n  letter-spacing: 0.03em;\n}\n#da-app table.da-table th:first-child {\n  text-align: left;\n}\n#da-app table.da-table td {\n  padding: 9px 14px;\n  text-align: center;\n  border-bottom: 1px solid #f0f0f6;\n  color: #333;\n}\n#da-app table.da-table td:first-child {\n  text-align: left;\n  font-weight: 600;\n  color: #1a1a2e;\n}\n#da-app table.da-table tbody tr:nth-child(even) {\n  background: #fafafa;\n}\n#da-app table.da-table tbody tr.da-highlight {\n  background: #fff8e1 !important;\n  font-weight: 700;\n}\n#da-app table.da-table tbody tr:last-child td {\n  border-bottom: none;\n}\n/* freee CTA */\n#da-app .da-cta {\n  background: linear-gradient(135deg, #e8f5e9 0%, #f1f8e9 100%);\n  border: 1px solid #a5d6a7;\n  border-radius: 12px;\n  padding: 18px 22px;\n  margin-top: 24px;\n  font-size: 0.95rem;\n  color: #2e7d32;\n  line-height: 1.7;\n}\n#da-app .da-cta a {\n  color: #1b5e20;\n  font-weight: 700;\n  text-decoration: underline;\n}\n#da-app .da-cta a:hover {\n  color: #f4a226;\n}\n#da-app .da-error {\n  color: #e53935;\n  font-size: 0.88rem;\n  margin-top: 6px;\n  display: none;\n}\n@media (max-width: 480px) {\n  #da-app .da-result-hero .da-human-age { font-size: 2.8rem; }\n  #da-app .da-form-row { flex-direction: column; }\n  #da-app .da-btn { width: 100%; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"da-intro\"\u003e\n「犬の1年は人間の7年」という説は科学的に不正確です。犬は生後1〜2年で急激に成長し、その後の老化ペースは品種サイズによって大きく異なります。このツールは最新の研究にもとづき、体重区分ごとに正確な換算を行います。\n\u003c/div\u003e\n\u003c!-- 入力カード --\u003e\n\u003cdiv class=\"da-card\"\u003e\n  \u003ch2 style=\"margin-top:0\"\u003e愛犬の情報を入力\u003c/h2\u003e\n  \u003cdiv class=\"da-form-row\"\u003e\n    \u003cdiv class=\"da-field\"\u003e\n      \u003clabel for=\"da-years\"\u003e年齢（年）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"da-years\" min=\"0\" max=\"30\" placeholder=\"例：5\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"da-field\"\u003e\n      \u003clabel for=\"da-months\"\u003e月齢（月）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"da-months\" min=\"0\" max=\"11\" placeholder=\"0〜11\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"da-field\" style=\"min-width:190px\"\u003e\n      \u003clabel for=\"da-size\"\u003e体型サイズ\u003c/label\u003e\n      \u003cselect id=\"da-size\"\u003e\n        \u003coption value=\"small\"\u003e小型犬（10kg未満）\u003c/option\u003e\n        \u003coption value=\"medium\" selected\u003e中型犬（10〜25kg）\u003c/option\u003e\n        \u003coption value=\"large\"\u003e大型犬（25〜45kg）\u003c/option\u003e\n        \u003coption value=\"giant\"\u003e超大型犬（45kg超）\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n    \u003cbutton class=\"da-btn\" onclick=\"daCalculate()\"\u003e換算する\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"da-error\" id=\"da-error\"\u003e年齢を正しく入力してください（0〜30年）。\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 結果 --\u003e\n\u003cdiv class=\"da-result\" id=\"da-result\"\u003e\n  \u003cdiv class=\"da-result-hero\"\u003e\n    \u003cdiv class=\"da-paw\"\u003e🐾\u003c/div\u003e\n    \u003cdiv class=\"da-human-age\" id=\"da-human-age\"\u003e--\u003c/div\u003e\n    \u003cdiv class=\"da-human-age-label\"\u003e人間換算の年齢\u003c/div\u003e\n    \u003cspan class=\"da-stage-badge\" id=\"da-stage-badge\"\u003e\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"da-meta-grid\"\u003e\n    \u003cdiv class=\"da-meta-item\"\u003e\n      \u003cdiv class=\"da-meta-value\" id=\"da-dog-age-display\"\u003e--\u003c/div\u003e\n      \u003cdiv class=\"da-meta-label\"\u003e犬の実際の年齢\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"da-meta-item\"\u003e\n      \u003cdiv class=\"da-meta-value\" id=\"da-size-display\"\u003e--\u003c/div\u003e\n      \u003cdiv class=\"da-meta-label\"\u003e体型区分\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"da-meta-item\"\u003e\n      \u003cdiv class=\"da-meta-value\" id=\"da-lifespan\"\u003e--\u003c/div\u003e\n      \u003cdiv class=\"da-meta-label\"\u003e平均寿命（目安）\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"da-meta-item\"\u003e\n      \u003cdiv class=\"da-meta-value\" id=\"da-life-pct\"\u003e--%\u003c/div\u003e\n      \u003cdiv class=\"da-meta-label\"\u003eライフステージ進捗\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- ライフステージタイムライン --\u003e\n  \u003cdiv class=\"da-card\" style=\"padding:18px 20px\"\u003e\n    \u003cstrong style=\"font-size:0.88rem;color:#555;letter-spacing:0.03em\"\u003eライフステージ タイムライン\u003c/strong\u003e\n    \u003cdiv class=\"da-timeline\" style=\"margin-top:14px\"\u003e\n      \u003cdiv class=\"da-timeline-track\"\u003e\n        \u003cdiv class=\"da-timeline-marker\" id=\"da-marker\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"da-timeline-labels\"\u003e\n        \u003cspan\u003e子犬\u003c/span\u003e\n        \u003cspan\u003e若犬\u003c/span\u003e\n        \u003cspan\u003e成犬\u003c/span\u003e\n        \u003cspan\u003e中年\u003c/span\u003e\n        \u003cspan\u003eシニア\u003c/span\u003e\n        \u003cspan\u003e老齢\u003c/span\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 豆知識 --\u003e\n  \u003ch2\u003e犬の老化にまつわる豆知識\u003c/h2\u003e\n  \u003cdiv id=\"da-facts\"\u003e\u003c/div\u003e\n  \u003c!-- 比較表 --\u003e\n  \u003ch2\u003e犬の年齢 × 人間換算 早見表\u003c/h2\u003e\n  \u003cdiv class=\"da-table-wrap\"\u003e\n    \u003ctable class=\"da-table\" id=\"da-table\"\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\n          \u003cth\u003e犬の年齢\u003c/th\u003e\n          \u003cth\u003e小型犬\u003c/th\u003e\n          \u003cth\u003e中型犬\u003c/th\u003e\n          \u003cth\u003e大型犬\u003c/th\u003e\n          \u003cth\u003e超大型犬\u003c/th\u003e\n        \u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody id=\"da-tbody\"\u003e\u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n  \u003c!-- freee CTA --\u003e\n  \u003cdiv class=\"da-cta\"\u003e\n    ペットの医療費・ごはん代・トリミング代など、ペット関連の出費をまとめて管理したいなら →\n    \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\"\u003efreee会計で家計を自動管理\u003c/a\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\u003c!-- /.da-result --\u003e\n\u003cscript\u003e\n(function() {\n  // 体型別・月齢別 人間換算年齢テーブル\n  // 出典: AVMA ガイドライン \u0026 Horvath et al. (2020) Cell Systems エピジェネティック時計研究\n  // 配列順: [小型, 中型, 大型, 超大型]\n  var AGE_TABLE = {\n    1:  [1, 1, 1, 1],\n    2:  [3, 3, 3, 3],\n    3:  [5, 5, 5, 5],\n    4:  [7, 7, 7, 7],\n    5:  [9, 9, 9, 9],\n    6:  [10, 10, 10, 10],\n    8:  [11, 11, 11, 11],\n    10: [12, 12, 12, 12],\n    12: [15, 15, 15, 15],\n    18: [18, 18, 19, 20],\n    24: [22, 22, 24, 26],\n    36: [26, 28, 30, 34],\n    48: [30, 34, 36, 42],\n    60: [34, 38, 42, 50],\n    72: [38, 42, 48, 58],\n    84: [42, 46, 54, 66],\n    96: [46, 50, 60, 74],\n    108:[50, 54, 66, 82],\n    120:[56, 60, 72, 90],\n    132:[60, 65, 78, 98],\n    144:[64, 70, 84, 106],\n    156:[68, 75, 90, 114],\n    168:[72, 80, 96, 122],\n    180:[76, 85, 102, 130],\n    192:[80, 90, 108, 138],\n    204:[84, 95, 114, 145],\n    216:[88, 100, 120, 152],\n    228:[92, 105, 126, 159],\n    240:[96, 110, 132, 166]\n  };\n\n  var SIZE_INDEX  = { small: 0, medium: 1, large: 2, giant: 3 };\n  var SIZE_LABELS = { small: '小型犬', medium: '中型犬', large: '大型犬', giant: '超大型犬' };\n  var LIFESPANS   = { small: '14〜16年', medium: '12〜14年', large: '10〜12年', giant: '8〜10年' };\n  var LIFESPAN_YRS= { small: 15, medium: 13, large: 11, giant: 9 };\n\n  var STAGE_LABELS = ['子犬期', '若犬期', '成犬期', '中年期', 'シニア期', '老齢期'];\n  var STAGE_CLASSES= ['da-stage-puppy','da-stage-junior','da-stage-adult','da-stage-mature','da-stage-senior','da-stage-geriatric'];\n\n  function interpolate(totalMonths, sizeIdx) {\n    var keys = Object.keys(AGE_TABLE).map(Number).sort(function(a,b){return a-b;});\n    if (totalMonths \u003c= 0) return 0;\n    if (totalMonths \u003e= keys[keys.length-1]) return AGE_TABLE[keys[keys.length-1]][sizeIdx];\n    for (var i = 0; i \u003c keys.length - 1; i++) {\n      if (totalMonths \u003e= keys[i] \u0026\u0026 totalMonths \u003c= keys[i+1]) {\n        var lo = keys[i], hi = keys[i+1];\n        var ratio = (totalMonths - lo) / (hi - lo);\n        return Math.round(AGE_TABLE[lo][sizeIdx] + ratio * (AGE_TABLE[hi][sizeIdx] - AGE_TABLE[lo][sizeIdx]));\n      }\n    }\n    return 0;\n  }\n\n  function getStage(totalMonths, size) {\n    var lifespan = LIFESPAN_YRS[size] * 12;\n    var ratio = totalMonths / lifespan;\n    var idx;\n    if (totalMonths \u003c 12)   idx = 0;\n    else if (totalMonths \u003c 24) idx = 1;\n    else if (ratio \u003c 0.50)  idx = 2;\n    else if (ratio \u003c 0.68)  idx = 3;\n    else if (ratio \u003c 0.85)  idx = 4;\n    else                    idx = 5;\n    return { label: STAGE_LABELS[idx], cls: STAGE_CLASSES[idx], pct: ratio };\n  }\n\n  var FACTS = [\n    '\u003cspan class=\"da-fact-icon\"\u003e科学\u003c/span\u003e2020年に米国セルシステムズ誌に掲載された研究では、犬のDNAメチル化パターンを調べた結果、生後1年で人間の約15〜30歳相当まで急速に老化することが判明しました。',\n    '\u003cspan class=\"da-fact-icon\"\u003eサイズ差\u003c/span\u003e大型・超大型犬は小型犬に比べて老化が早い傾向があります。グレート・デーンの7歳は人間の約66歳相当ですが、チワワの7歳は約42歳相当にとどまります。',\n    '\u003cspan class=\"da-fact-icon\"\u003e長寿記録\u003c/span\u003e世界最長寿として認定されたポルトガル産の牧羊犬「ボビ」は31歳165日まで生きました。換算すると人間の200歳超に相当するとも言われます。',\n    '\u003cspan class=\"da-fact-icon\"\u003e最初の1年\u003c/span\u003e犬は生後1年で、人間の15年分に相当する発育を遂げます。新生児から性成熟まで、わずか12ヶ月で駆け抜けるのです。',\n    '\u003cspan class=\"da-fact-icon\"\u003eシニアケア\u003c/span\u003e多くの獣医師は7歳以上をシニア犬と定義します。この段階からは年1回から年2回の健康診断への切り替えを推奨しています。早期発見が大切です。'\n  ];\n\n  function buildFacts() {\n    document.getElementById('da-facts').innerHTML = FACTS.map(function(f){\n      return '\u003cdiv class=\"da-fact\"\u003e' + f + '\u003c/div\u003e';\n    }).join('');\n  }\n\n  function buildTable(highlightMonths, size) {\n    var rows = '';\n    for (var yr = 1; yr \u003c= 20; yr++) {\n      var m = yr * 12;\n      var isHL = (highlightMonths \u003e= (m - 6) \u0026\u0026 highlightMonths \u003c (m + 6));\n      rows += '\u003ctr' + (isHL ? ' class=\"da-highlight\"' : '') + '\u003e';\n      rows += '\u003ctd\u003e' + yr + '歳\u003c/td\u003e';\n      ['small','medium','large','giant'].forEach(function(s) {\n        rows += '\u003ctd\u003e' + interpolate(m, SIZE_INDEX[s]) + '\u003c/td\u003e';\n      });\n      rows += '\u003c/tr\u003e';\n    }\n    document.getElementById('da-tbody').innerHTML = rows;\n  }\n\n  window.daCalculate = function() {\n    var yrsEl  = document.getElementById('da-years');\n    var mosEl  = document.getElementById('da-months');\n    var sizeEl = document.getElementById('da-size');\n    var errEl  = document.getElementById('da-error');\n\n    var yrs  = parseFloat(yrsEl.value)  || 0;\n    var mos  = parseFloat(mosEl.value)  || 0;\n    var size = sizeEl.value;\n\n    if (yrs \u003c 0 || yrs \u003e 30 || mos \u003c 0 || mos \u003e 11 || (yrs === 0 \u0026\u0026 mos === 0)) {\n      errEl.style.display = 'block';\n      return;\n    }\n    errEl.style.display = 'none';\n\n    var totalMonths = Math.round(yrs * 12 + mos);\n    var humanAge    = interpolate(totalMonths, SIZE_INDEX[size]);\n    var stage       = getStage(totalMonths, size);\n    var lifePct     = Math.min(100, Math.round(stage.pct * 100));\n\n    var dogAgeStr = '';\n    if (yrs \u003e 0) dogAgeStr += yrs + '歳';\n    if (mos \u003e 0) dogAgeStr += (dogAgeStr ? '' : '') + mos + 'ヶ月';\n\n    document.getElementById('da-human-age').textContent     = humanAge;\n    document.getElementById('da-dog-age-display').textContent = dogAgeStr || '生後1ヶ月未満';\n    document.getElementById('da-size-display').textContent  = SIZE_LABELS[size];\n    document.getElementById('da-lifespan').textContent      = LIFESPANS[size];\n    document.getElementById('da-life-pct').textContent      = lifePct + '%';\n\n    var badge = document.getElementById('da-stage-badge');\n    badge.textContent = stage.label;\n    badge.className   = 'da-stage-badge ' + stage.cls;\n\n    var markerPct = Math.max(2, Math.min(96, lifePct));\n    document.getElementById('da-marker').style.left = markerPct + '%';\n\n    buildFacts();\n    buildTable(totalMonths, size);\n\n    var resultEl = document.getElementById('da-result');\n    resultEl.classList.add('active');\n    resultEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n  };\n\n  ['da-years','da-months','da-size'].forEach(function(id) {\n    var el = document.getElementById(id);\n    if (el) el.addEventListener('keydown', function(e) {\n      if (e.key === 'Enter') window.daCalculate();\n    });\n  });\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e年齢計算 → \u003ca href=\"https://productivity-works.com/ja/tools/age-calculator/\"\u003e年齢計算ツール\u003c/a\u003e\n\n出産予定日計算 → \u003ca href=\"https://productivity-works.com/ja/tools/pregnancy-due-date-calculator/\"\u003e出産予定日計算ツール\u003c/a\u003e\n\u003c/p\u003e","title":"犬年齢計算ツール - 犬の年齢を人間に換算"},{"content":" 借金返済シミュレーター 借入先ごとに残高・金利・最低返済額を入力して、スノーボール法（少額優先）とアバランチ法（高金利優先）を比較。総利息・完済日・月別スケジュールを自動計算します。\n借入一覧 ＋ 借入を追加 追加返済額（月額） 最低返済額に上乗せする金額： 円 / 月 \u0026#9654;\u0026#xFE0E; 返済プランを計算する リセット 残高推移グラフ スノーボール法 アバランチ法 最低返済のみ 月別返済スケジュール スノーボール法 アバランチ法 家計管理をもっと効率的に \u0026#8594; freee会計で収支を自動管理 関連ツール ローン比較 → ローン比較ツール 住宅ローン借入可能額 → 住宅ローン借入可能額ツール 住宅ローン計算 → 住宅ローン計算ツール ","permalink":"https://productivity-works.com/ja/tools/debt-payoff-calculator/","summary":"\u003cdiv id=\"dpcja-app\"\u003e\n\u003cstyle\u003e\n#dpcja-app *,#dpcja-app *::before,#dpcja-app *::after{box-sizing:border-box;}\n#dpcja-app{font-family:-apple-system,BlinkMacSystemFont,'Hiragino Kaku Gothic ProN','Noto Sans JP',sans-serif;max-width:920px;margin:0 auto;color:#1e293b;line-height:1.7;}\n#dpcja-app h2{font-size:1.2rem;font-weight:700;margin:0 0 1rem;color:#0f172a;}\n#dpcja-app h3{font-size:1rem;font-weight:600;margin:0 0 .75rem;color:#1e293b;}\n#dpcja-app .dpcja-hero{background:linear-gradient(135deg,#dc2626 0%,#7c3aed 100%);color:#fff;border-radius:16px;padding:1.5rem 2rem;margin-bottom:1.5rem;}\n#dpcja-app .dpcja-hero h2{color:#fff;font-size:1.45rem;margin:0 0 .5rem;}\n#dpcja-app .dpcja-hero p{margin:0;opacity:.9;font-size:.93rem;}\n#dpcja-app .dpcja-card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:1.5rem;margin-bottom:1.25rem;box-shadow:0 1px 4px rgba(0,0,0,.06);}\n#dpcja-app .dpcja-debt-row{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr auto;gap:.6rem;align-items:end;padding:.75rem;background:#f8fafc;border-radius:10px;margin-bottom:.6rem;border:1px solid #e2e8f0;}\n#dpcja-app .dpcja-field label{display:block;font-size:.72rem;font-weight:700;color:#64748b;margin-bottom:.25rem;text-transform:uppercase;letter-spacing:.04em;}\n#dpcja-app .dpcja-field input{width:100%;padding:.48rem .6rem;border:1.5px solid #cbd5e1;border-radius:8px;font-size:.9rem;background:#fff;transition:border-color .2s;}\n#dpcja-app .dpcja-field input:focus{outline:none;border-color:#dc2626;}\n#dpcja-app .dpcja-extra-row{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;}\n#dpcja-app .dpcja-extra-row label{font-weight:600;color:#374151;font-size:.9rem;white-space:nowrap;}\n#dpcja-app .dpcja-extra-row input{width:160px;padding:.5rem .75rem;border:1.5px solid #cbd5e1;border-radius:8px;font-size:.95rem;background:#f8fafc;}\n#dpcja-app .dpcja-extra-row input:focus{outline:none;border-color:#dc2626;background:#fff;}\n#dpcja-app .dpcja-extra-row .dpcja-unit{color:#64748b;font-size:.88rem;}\n#dpcja-app .dpcja-btn{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem 1.1rem;border-radius:8px;font-size:.88rem;font-weight:700;cursor:pointer;border:none;transition:all .18s;}\n#dpcja-app .dpcja-btn-primary{background:linear-gradient(135deg,#dc2626,#7c3aed);color:#fff;box-shadow:0 2px 8px rgba(220,38,38,.3);}\n#dpcja-app .dpcja-btn-primary:hover{transform:translateY(-1px);box-shadow:0 4px 14px rgba(220,38,38,.4);}\n#dpcja-app .dpcja-btn-add{background:#fef2f2;color:#dc2626;border:1.5px solid #fecaca;}\n#dpcja-app .dpcja-btn-add:hover{background:#fee2e2;}\n#dpcja-app .dpcja-btn-remove{background:#fef2f2;color:#dc2626;border:1.5px solid #fecaca;padding:.45rem .65rem;border-radius:8px;cursor:pointer;font-size:.9rem;font-weight:700;}\n#dpcja-app .dpcja-btn-remove:hover{background:#fee2e2;}\n#dpcja-app .dpcja-btn-reset{background:#f1f5f9;color:#374151;border:1.5px solid #e2e8f0;}\n#dpcja-app .dpcja-btn-reset:hover{background:#e2e8f0;}\n#dpcja-app .dpcja-actions{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center;margin-top:1rem;}\n#dpcja-app .dpcja-error{background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:.75rem 1rem;color:#dc2626;font-size:.88rem;margin-bottom:1rem;display:none;}\n#dpcja-app .dpcja-results{display:none;}\n#dpcja-app .dpcja-results.active{display:block;}\n#dpcja-app .dpcja-winner{display:flex;align-items:center;gap:.5rem;background:linear-gradient(90deg,#10b981,#059669);color:#fff;border-radius:10px;padding:.7rem 1.1rem;font-size:.9rem;font-weight:700;margin-bottom:1.25rem;}\n#dpcja-app .dpcja-compare-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.25rem;margin-bottom:1.25rem;}\n#dpcja-app .dpcja-method-card{border-radius:12px;padding:1.25rem 1.5rem;}\n#dpcja-app .dpcja-method-card.snow{background:linear-gradient(135deg,#fef2f2,#ede9fe);border:2px solid #fca5a5;}\n#dpcja-app .dpcja-method-card.aval{background:linear-gradient(135deg,#fce7f3,#fef3c7);border:2px solid #f9a8d4;}\n#dpcja-app .dpcja-badge{display:inline-block;font-size:.7rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:.2rem .65rem;border-radius:99px;margin-bottom:.75rem;}\n#dpcja-app .snow .dpcja-badge{background:#dc2626;color:#fff;}\n#dpcja-app .aval .dpcja-badge{background:#7c3aed;color:#fff;}\n#dpcja-app .dpcja-stat{margin-bottom:.55rem;}\n#dpcja-app .dpcja-stat-label{font-size:.72rem;color:#64748b;font-weight:700;text-transform:uppercase;letter-spacing:.04em;}\n#dpcja-app .dpcja-stat-value{font-size:1.35rem;font-weight:800;color:#0f172a;}\n#dpcja-app .dpcja-chart-wrap{background:#f8fafc;border-radius:12px;padding:1rem;margin-bottom:1.25rem;}\n#dpcja-app .dpcja-chart-wrap h2{margin-bottom:.75rem;}\n#dpcja-app canvas#dpcja-chart{width:100%;display:block;border-radius:8px;}\n#dpcja-app .dpcja-legend{display:flex;gap:1.5rem;margin-top:.65rem;font-size:.82rem;color:#475569;flex-wrap:wrap;}\n#dpcja-app .dpcja-legend-item{display:flex;align-items:center;gap:.4rem;}\n#dpcja-app .dpcja-legend-dot{width:14px;height:4px;border-radius:2px;flex-shrink:0;}\n#dpcja-app .dpcja-tabs{display:flex;border-bottom:2px solid #e2e8f0;margin-bottom:1rem;}\n#dpcja-app .dpcja-tab{padding:.55rem 1.2rem;font-size:.88rem;font-weight:700;color:#64748b;cursor:pointer;border:none;background:none;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .15s;}\n#dpcja-app .dpcja-tab.active{color:#dc2626;border-bottom-color:#dc2626;}\n#dpcja-app .dpcja-schedule-wrap{overflow-x:auto;}\n#dpcja-app table.dpcja-table{width:100%;border-collapse:collapse;font-size:.82rem;}\n#dpcja-app table.dpcja-table th{background:#f1f5f9;padding:.5rem .7rem;text-align:right;font-weight:700;color:#374151;font-size:.74rem;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap;}\n#dpcja-app table.dpcja-table th:first-child,#dpcja-app table.dpcja-table th:nth-child(2){text-align:left;}\n#dpcja-app table.dpcja-table td{padding:.42rem .7rem;text-align:right;border-bottom:1px solid #f1f5f9;color:#334155;}\n#dpcja-app table.dpcja-table td:first-child,#dpcja-app table.dpcja-table td:nth-child(2){text-align:left;}\n#dpcja-app table.dpcja-table tr:hover td{background:#f8fafc;}\n#dpcja-app .dpcja-paid-cell{color:#10b981;font-weight:700;}\n#dpcja-app .dpcja-show-more{text-align:center;margin-top:.75rem;}\n#dpcja-app .dpcja-cta{background:linear-gradient(135deg,#f0fdf4,#dcfce7);border:1.5px solid #86efac;border-radius:12px;padding:1rem 1.25rem;margin-top:1.5rem;font-size:.9rem;color:#166534;}\n#dpcja-app .dpcja-cta a{color:#15803d;font-weight:700;}\n#dpcja-app .dpcja-related{margin-top:2rem;padding-top:1.5rem;border-top:1px solid #e2e8f0;}\n#dpcja-app .dpcja-related h3{font-size:1rem;color:#374151;margin-bottom:.75rem;}\n#dpcja-app .dpcja-related-links{display:flex;gap:.65rem;flex-wrap:wrap;}\n#dpcja-app .dpcja-related-links a{display:inline-flex;align-items:center;background:#fef2f2;color:#dc2626;border-radius:8px;padding:.42rem .9rem;font-size:.85rem;font-weight:600;text-decoration:none;transition:background .15s;}\n#dpcja-app .dpcja-related-links a:hover{background:#fee2e2;}\n@media(max-width:640px){\n  #dpcja-app .dpcja-debt-row{grid-template-columns:1fr 1fr;}\n  #dpcja-app .dpcja-debt-row\u003ediv:last-child{grid-column:span 2;text-align:right;}\n  #dpcja-app .dpcja-compare-grid{grid-template-columns:1fr;}\n  #dpcja-app .dpcja-hero{padding:1.25rem;}\n}\n\u003c/style\u003e\n\u003cdiv class=\"dpcja-hero\"\u003e\n  \u003ch2\u003e借金返済シミュレーター\u003c/h2\u003e\n  \u003cp\u003e借入先ごとに残高・金利・最低返済額を入力して、\u003cstrong\u003eスノーボール法\u003c/strong\u003e（少額優先）と\u003cstrong\u003eアバランチ法\u003c/strong\u003e（高金利優先）を比較。総利息・完済日・月別スケジュールを自動計算します。\u003c/p\u003e","title":"借金返済シミュレーター - スノーボール＆アバランチ法"},{"content":" 生成単位 段落 文 単語 件数（1〜50） テキストスタイル クラシック Lorem Ipsum ヒップスター Ipsum コーポレート Ipsum ダミーテキスト（日本語） 生成する 「Lorem ipsum dolor sit amet...」で始める —段落 —文 —語数 —文字数 プレビュー HTML出力 \u0026#9998; 生成するボタンをクリックしてください \u0026#128203; テキストをコピー \u0026#128203; HTMLをコピー Webサイト制作の会計管理にはfreee ダミーテキストを使ってサイト制作中の方、制作費用の経理もfreeeで簡単管理。 freeeを無料で試す\n関連ツール Case Converter → Case Converterツール Character Counter → Character Counterツール Reading Time Calculator → Reading Time Calculatorツール ","permalink":"https://productivity-works.com/ja/tools/lorem-ipsum-generator/","summary":"\u003cdiv id=\"lorem-app\"\u003e\n\u003cstyle\u003e\n#lorem-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1c1917;\n}\n\n#lorem-app * {\n  box-sizing: border-box;\n}\n\n/* Controls panel */\n#lorem-app .la-controls {\n  background: #fff7ed;\n  border: 2px solid #fed7aa;\n  border-radius: 14px;\n  padding: 24px;\n  margin-bottom: 24px;\n}\n\n#lorem-app .la-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 16px;\n  align-items: flex-end;\n  margin-bottom: 16px;\n}\n\n#lorem-app .la-row:last-child {\n  margin-bottom: 0;\n}\n\n#lorem-app .la-field {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  flex: 1;\n  min-width: 140px;\n}\n\n#lorem-app .la-field label {\n  font-size: 0.8rem;\n  font-weight: 700;\n  color: #9a3412;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n\n#lorem-app select,\n#lorem-app input[type=\"number\"] {\n  height: 42px;\n  padding: 0 12px;\n  border: 2px solid #fed7aa;\n  border-radius: 8px;\n  font-size: 0.95rem;\n  background: #fff;\n  color: #1c1917;\n  outline: none;\n  transition: border-color 0.2s;\n}\n\n#lorem-app select:focus,\n#lorem-app input[type=\"number\"]:focus {\n  border-color: #ea580c;\n}\n\n#lorem-app input[type=\"number\"] {\n  width: 90px;\n}\n\n/* Checkbox row */\n#lorem-app .la-check-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n#lorem-app .la-check-row label {\n  font-size: 0.92rem;\n  color: #44403c;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n#lorem-app input[type=\"checkbox\"] {\n  width: 18px;\n  height: 18px;\n  accent-color: #ea580c;\n  cursor: pointer;\n}\n\n/* Generate button */\n#lorem-app .la-btn-generate {\n  background: #ea580c;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  padding: 0 28px;\n  height: 42px;\n  font-size: 1rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.2s, transform 0.1s;\n  white-space: nowrap;\n}\n\n#lorem-app .la-btn-generate:hover {\n  background: #c2410c;\n}\n\n#lorem-app .la-btn-generate:active {\n  transform: scale(0.97);\n}\n\n/* Stats bar */\n#lorem-app .la-stats {\n  display: flex;\n  gap: 12px;\n  flex-wrap: wrap;\n  margin-bottom: 16px;\n}\n\n#lorem-app .la-stat {\n  background: #fff7ed;\n  border: 1px solid #fed7aa;\n  border-radius: 8px;\n  padding: 8px 16px;\n  font-size: 0.85rem;\n  color: #7c2d12;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 2px;\n}\n\n#lorem-app .la-stat strong {\n  font-size: 1.3rem;\n  font-weight: 700;\n  color: #ea580c;\n}\n\n/* Output tabs */\n#lorem-app .la-tabs {\n  display: flex;\n  gap: 0;\n  margin-bottom: 0;\n  border-bottom: 2px solid #fed7aa;\n}\n\n#lorem-app .la-tab {\n  padding: 10px 20px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  cursor: pointer;\n  border: 2px solid transparent;\n  border-bottom: none;\n  border-radius: 8px 8px 0 0;\n  background: #fff7ed;\n  color: #9a3412;\n  margin-bottom: -2px;\n  transition: background 0.15s;\n}\n\n#lorem-app .la-tab.active {\n  background: #fff;\n  border-color: #fed7aa;\n  border-bottom-color: #fff;\n  color: #ea580c;\n}\n\n/* Output panels */\n#lorem-app .la-output-wrap {\n  border: 2px solid #fed7aa;\n  border-top: none;\n  border-radius: 0 0 12px 12px;\n  background: #fff;\n  padding: 20px;\n  margin-bottom: 16px;\n}\n\n#lorem-app .la-panel {\n  display: none;\n}\n\n#lorem-app .la-panel.active {\n  display: block;\n}\n\n/* Preview paragraphs */\n#lorem-app .la-preview p {\n  margin: 0 0 1.1em 0;\n  line-height: 1.9;\n  color: #44403c;\n  font-size: 0.97rem;\n}\n\n#lorem-app .la-preview p:last-child {\n  margin-bottom: 0;\n}\n\n/* HTML code area */\n#lorem-app .la-code {\n  width: 100%;\n  min-height: 180px;\n  padding: 14px;\n  font-family: \"SF Mono\", \"Fira Code\", \"Consolas\", monospace;\n  font-size: 0.82rem;\n  line-height: 1.6;\n  border: 2px solid #e7e5e4;\n  border-radius: 8px;\n  background: #fafaf9;\n  color: #1c1917;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.2s;\n}\n\n#lorem-app .la-code:focus {\n  border-color: #ea580c;\n}\n\n/* Copy buttons */\n#lorem-app .la-copy-row {\n  display: flex;\n  justify-content: flex-end;\n  margin-top: 12px;\n}\n\n#lorem-app .la-btn-copy {\n  background: #fff;\n  color: #ea580c;\n  border: 2px solid #ea580c;\n  border-radius: 8px;\n  padding: 8px 20px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n#lorem-app .la-btn-copy:hover {\n  background: #ea580c;\n  color: #fff;\n}\n\n#lorem-app .la-btn-copy.copied {\n  background: #16a34a;\n  border-color: #16a34a;\n  color: #fff;\n}\n\n/* Empty state */\n#lorem-app .la-empty {\n  text-align: center;\n  padding: 48px 20px;\n  color: #a8a29e;\n  font-size: 1rem;\n}\n\n#lorem-app .la-empty-icon {\n  font-size: 2.5rem;\n  margin-bottom: 12px;\n}\n\n/* Responsive */\n@media (max-width: 600px) {\n  #lorem-app .la-controls {\n    padding: 16px;\n  }\n  #lorem-app .la-row {\n    gap: 12px;\n  }\n  #lorem-app .la-field {\n    min-width: 120px;\n  }\n  #lorem-app input[type=\"number\"] {\n    width: 76px;\n  }\n  #lorem-app .la-tab {\n    padding: 8px 12px;\n    font-size: 0.82rem;\n  }\n}\n\u003c/style\u003e\n\u003c!-- Controls --\u003e\n\u003cdiv class=\"la-controls\"\u003e\n  \u003cdiv class=\"la-row\"\u003e\n    \u003cdiv class=\"la-field\"\u003e\n      \u003clabel for=\"la-type\"\u003e生成単位\u003c/label\u003e\n      \u003cselect id=\"la-type\"\u003e\n        \u003coption value=\"paragraphs\"\u003e段落\u003c/option\u003e\n        \u003coption value=\"sentences\"\u003e文\u003c/option\u003e\n        \u003coption value=\"words\"\u003e単語\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"la-field\"\u003e\n      \u003clabel for=\"la-count\"\u003e件数（1〜50）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"la-count\" value=\"3\" min=\"1\" max=\"50\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"la-field\"\u003e\n      \u003clabel for=\"la-style\"\u003eテキストスタイル\u003c/label\u003e\n      \u003cselect id=\"la-style\"\u003e\n        \u003coption value=\"classic\"\u003eクラシック Lorem Ipsum\u003c/option\u003e\n        \u003coption value=\"hipster\"\u003eヒップスター Ipsum\u003c/option\u003e\n        \u003coption value=\"corporate\"\u003eコーポレート Ipsum\u003c/option\u003e\n        \u003coption value=\"japanese\"\u003eダミーテキスト（日本語）\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n    \u003cbutton class=\"la-btn-generate\" onclick=\"loremGenerate()\"\u003e生成する\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"la-row\"\u003e\n    \u003cdiv class=\"la-check-row\"\u003e\n      \u003clabel\u003e\n        \u003cinput type=\"checkbox\" id=\"la-classic-start\" checked\u003e\n        「Lorem ipsum dolor sit amet...」で始める\n      \u003c/label\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Stats --\u003e\n\u003cdiv class=\"la-stats\"\u003e\n  \u003cdiv class=\"la-stat\"\u003e\u003cstrong id=\"la-stat-para\"\u003e—\u003c/strong\u003e段落\u003c/div\u003e\n  \u003cdiv class=\"la-stat\"\u003e\u003cstrong id=\"la-stat-sent\"\u003e—\u003c/strong\u003e文\u003c/div\u003e\n  \u003cdiv class=\"la-stat\"\u003e\u003cstrong id=\"la-stat-words\"\u003e—\u003c/strong\u003e語数\u003c/div\u003e\n  \u003cdiv class=\"la-stat\"\u003e\u003cstrong id=\"la-stat-chars\"\u003e—\u003c/strong\u003e文字数\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Output --\u003e\n\u003cdiv class=\"la-tabs\"\u003e\n  \u003cdiv class=\"la-tab active\" onclick=\"loremSwitchTab('preview', this)\"\u003eプレビュー\u003c/div\u003e\n  \u003cdiv class=\"la-tab\" onclick=\"loremSwitchTab('html', this)\"\u003eHTML出力\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"la-output-wrap\"\u003e\n  \u003cdiv id=\"la-panel-preview\" class=\"la-panel active\"\u003e\n    \u003cdiv class=\"la-preview\" id=\"la-preview-content\"\u003e\n      \u003cdiv class=\"la-empty\"\u003e\n        \u003cdiv class=\"la-empty-icon\"\u003e\u0026#9998;\u003c/div\u003e\n        \u003cdiv\u003e\u003cstrong\u003e生成する\u003c/strong\u003eボタンをクリックしてください\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"la-copy-row\"\u003e\n      \u003cbutton class=\"la-btn-copy\" id=\"la-copy-plain\" onclick=\"loremCopyPlain()\"\u003e\n        \u0026#128203; テキストをコピー\n      \u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"la-panel-html\" class=\"la-panel\"\u003e\n    \u003ctextarea class=\"la-code\" id=\"la-html-content\" readonly placeholder=\"HTMLがここに表示されます...\"\u003e\u003c/textarea\u003e\n    \u003cdiv class=\"la-copy-row\"\u003e\n      \u003cbutton class=\"la-btn-copy\" id=\"la-copy-html\" onclick=\"loremCopyHtml()\"\u003e\n        \u0026#128203; HTMLをコピー\n      \u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n\n// ── DATA ──────────────────────────────────────────────────────────────────────\n\nconst DATA = {\n  classic: {\n    words: [\n      \"lorem\",\"ipsum\",\"dolor\",\"sit\",\"amet\",\"consectetur\",\"adipiscing\",\"elit\",\n      \"sed\",\"do\",\"eiusmod\",\"tempor\",\"incididunt\",\"ut\",\"labore\",\"et\",\"dolore\",\n      \"magna\",\"aliqua\",\"enim\",\"ad\",\"minim\",\"veniam\",\"quis\",\"nostrud\",\"exercitation\",\n      \"ullamco\",\"laboris\",\"nisi\",\"aliquip\",\"ex\",\"ea\",\"commodo\",\"consequat\",\"duis\",\n      \"aute\",\"irure\",\"in\",\"reprehenderit\",\"voluptate\",\"velit\",\"esse\",\"cillum\",\n      \"fugiat\",\"nulla\",\"pariatur\",\"excepteur\",\"sint\",\"occaecat\",\"cupidatat\",\"non\",\n      \"proident\",\"sunt\",\"culpa\",\"qui\",\"officia\",\"deserunt\",\"mollit\",\"anim\",\"id\",\"est\",\n      \"laborum\",\"perspiciatis\",\"unde\",\"omnis\",\"iste\",\"natus\",\"error\",\"accusantium\",\n      \"doloremque\",\"laudantium\",\"totam\",\"rem\",\"aperiam\",\"eaque\",\"ipsa\",\"quae\",\"ab\",\n      \"inventore\",\"veritatis\",\"quasi\",\"architecto\",\"beatae\",\"vitae\",\"dicta\",\"explicabo\",\n      \"nemo\",\"voluptatem\",\"quia\",\"voluptas\",\"aspernatur\",\"odit\",\"aut\",\"fugit\",\"magni\",\n      \"dolores\",\"ratione\",\"sequi\",\"nesciunt\",\"neque\",\"porro\",\"quisquam\",\"dolorem\"\n    ],\n    opener: \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\",\n    isLatin: true\n  },\n  hipster: {\n    words: [\n      \"artisan\",\"craft\",\"aesthetic\",\"curated\",\"bespoke\",\"authentic\",\"sustainable\",\n      \"kombucha\",\"vinyl\",\"gastropub\",\"fixie\",\"letterpress\",\"kale\",\"synth\",\"flannel\",\n      \"activated\",\"charcoal\",\"ethical\",\"forage\",\"lo-fi\",\"normcore\",\"poke\",\"prism\",\n      \"raclette\",\"seitan\",\"shaman\",\"skateboard\",\"stumptown\",\"taiyaki\",\"taxidermy\",\n      \"tousled\",\"typewriter\",\"unicorn\",\"vaporwave\",\"venmo\",\"vexillologist\",\"wayfarers\",\n      \"williamsburg\",\"yuccie\",\"occupy\",\"heirloom\",\"gochujang\",\"gluten-free\",\"farm-to-table\",\n      \"direct\",\"trade\",\"cold-pressed\",\"single-origin\",\"pour-over\",\"cold-brew\",\"lomo\",\n      \"chicharrones\",\"microdosing\",\"pabst\",\"tattooed\",\"shoreditch\",\"poutine\",\"tbh\",\n      \"meggings\",\"ugh\",\"schlitz\",\"retro\",\"meh\",\"wolf\",\"cardigan\",\"trust-fund\",\"selfies\"\n    ],\n    opener: \"Artisan sustainable craft aesthetic curated bespoke kombucha vinyl gastropub fixie letterpress kale chips synth.\",\n    isLatin: true\n  },\n  corporate: {\n    words: [\n      \"synergy\",\"leverage\",\"paradigm\",\"pivot\",\"disruptive\",\"scalable\",\"agile\",\"robust\",\n      \"innovative\",\"streamline\",\"holistic\",\"proactive\",\"actionable\",\"deliverable\",\n      \"bandwidth\",\"ecosystem\",\"stakeholder\",\"value-add\",\"end-to-end\",\"best-practice\",\n      \"solution\",\"core-competency\",\"drill-down\",\"empower\",\"granular\",\"ideation\",\n      \"incentivize\",\"low-hanging-fruit\",\"mindshare\",\"move-the-needle\",\"onboarding\",\n      \"repurpose\",\"rightsizing\",\"ROI\",\"run-it-up-the-flagpole\",\"seamless\",\"silo\",\n      \"takeaway\",\"think-outside-the-box\",\"touch-base\",\"utilize\",\"visibility\",\"win-win\",\n      \"circle-back\",\"boil-the-ocean\",\"deep-dive\",\"double-click\",\"growth-hacking\",\n      \"hyperlocal\",\"impactful\",\"in-the-weeds\",\"key-performance\",\"milestone\",\"north-star\",\n      \"organic-growth\",\"pain-point\",\"ramp-up\",\"resourceful\",\"robust-pipeline\",\"runway\"\n    ],\n    opener: \"Synergy leverage paradigm pivot disruptive scalable agile robust innovative streamline holistic proactive actionable deliverables.\",\n    isLatin: true\n  },\n  japanese: {\n    sentences: [\n      \"このウェブサイトは現在制作中のため、仮のテキストが表示されています。\",\n      \"コンテンツが完成次第、正式な文章に差し替えられる予定です。\",\n      \"デザインの確認用として、ここに適当な日本語の文章を配置しています。\",\n      \"実際の記事や商品説明は、後ほど担当者が入力いたします。\",\n      \"このテキストはレイアウト確認のためのサンプルです。\",\n      \"フォントの可読性やデザインのバランスをご確認ください。\",\n      \"段落の長さや行間も、このダミーテキストで調整できます。\",\n      \"弊社のサービスに関するご質問は、お問い合わせページからお寄せください。\",\n      \"新しいプロジェクトに向けて、チーム一丸となって取り組んでいます。\",\n      \"ユーザーの皆様に最高の体験を提供することが私たちの使命です。\",\n      \"テクノロジーの進化に合わせて、サービスも常に改善を続けています。\",\n      \"地域社会に貢献しながら、持続可能なビジネスを目指しています。\",\n      \"お客様のニーズに応えるため、日々研究と開発を進めています。\",\n      \"グローバルな視点を持ちながら、地域に根ざした活動を大切にしています。\",\n      \"創業以来、品質とサービスの向上に真摯に取り組んでまいりました。\",\n      \"次世代を担う若者たちの可能性を引き出すことが、私たちの目標です。\",\n      \"デジタルトランスフォーメーションにより、業務効率を大幅に改善しました。\",\n      \"多様な人材が活躍できる職場環境の整備を進めています。\",\n      \"環境への配慮を最優先に考え、エコフレンドリーな製品を開発しています。\",\n      \"お客様の声に耳を傾け、サービス品質の継続的な向上を図っています。\",\n      \"革新的なアイデアと確かな技術で、業界をリードしてまいります。\",\n      \"チームワークを大切にし、全員が目標に向かって協力して進んでいます。\",\n      \"最新の技術トレンドをいち早くキャッチし、実用化に取り組んでいます。\",\n      \"お客様との長期的な信頼関係を構築することを最重視しています。\",\n      \"社会課題の解決に貢献するプロダクトとサービスの開発を続けています。\",\n      \"データに基づいた意思決定により、ビジネス成果を最大化しています。\",\n      \"世界中のパートナーと連携しながら、グローバルな事業展開を進めています。\",\n      \"ユーザビリティとアクセシビリティを両立したプロダクト設計を心がけています。\",\n      \"イノベーションを起こすため、失敗を恐れずに新しい挑戦を続けています。\",\n      \"お客様の成功が私たちの成功であるという理念を胸に、日々業務に励んでいます。\"\n    ],\n    opener: null,\n    isLatin: false\n  }\n};\n\n// ── STATE ─────────────────────────────────────────────────────────────────────\n\nlet currentParagraphs = [];\n\n// ── HELPERS ───────────────────────────────────────────────────────────────────\n\nfunction randInt(min, max) {\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nfunction pickRandom(arr) {\n  return arr[Math.floor(Math.random() * arr.length)];\n}\n\nfunction capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction buildSentence(words, minW, maxW) {\n  const len = randInt(minW, maxW);\n  let parts = [];\n  for (let i = 0; i \u003c len; i++) {\n    parts.push(pickRandom(words));\n  }\n  return capitalize(parts.join(\" \")) + \".\";\n}\n\nfunction buildParagraphLatin(words, sentMin, sentMax, wordMin, wordMax) {\n  const n = randInt(sentMin, sentMax);\n  let sentences = [];\n  for (let i = 0; i \u003c n; i++) {\n    sentences.push(buildSentence(words, wordMin, wordMax));\n  }\n  return sentences.join(\" \");\n}\n\n// Shuffle-pick N unique sentences (with repetition if needed)\nfunction pickJapaneseSentences(pool, n) {\n  let result = [];\n  // Copy and shuffle pool\n  let shuffled = pool.slice().sort(() =\u003e Math.random() - 0.5);\n  for (let i = 0; i \u003c n; i++) {\n    result.push(shuffled[i % shuffled.length]);\n  }\n  return result;\n}\n\n// ── GENERATION ────────────────────────────────────────────────────────────────\n\nfunction generateText(type, count, style, useOpener) {\n  const d = DATA[style];\n  let paragraphs = [];\n\n  if (d.isLatin) {\n    // Latin-based styles\n    const words = d.words;\n\n    if (type === \"paragraphs\") {\n      for (let i = 0; i \u003c count; i++) {\n        paragraphs.push(buildParagraphLatin(words, 4, 8, 8, 18));\n      }\n    } else if (type === \"sentences\") {\n      let sentences = [];\n      for (let i = 0; i \u003c count; i++) {\n        sentences.push(buildSentence(words, 8, 18));\n      }\n      const perPara = 3;\n      for (let i = 0; i \u003c sentences.length; i += perPara) {\n        paragraphs.push(sentences.slice(i, i + perPara).join(\" \"));\n      }\n    } else if (type === \"words\") {\n      let chosen = [];\n      for (let i = 0; i \u003c count; i++) {\n        chosen.push(pickRandom(words));\n      }\n      paragraphs.push(capitalize(chosen.join(\" \")) + \".\");\n    }\n\n    if (useOpener \u0026\u0026 paragraphs.length \u003e 0 \u0026\u0026 d.opener) {\n      paragraphs[0] = d.opener + \" \" + paragraphs[0];\n    }\n\n  } else {\n    // Japanese style\n    const pool = d.sentences;\n\n    if (type === \"paragraphs\") {\n      // Each paragraph: 3–5 sentences\n      for (let i = 0; i \u003c count; i++) {\n        const sentPerPara = randInt(3, 5);\n        const sents = pickJapaneseSentences(pool, sentPerPara);\n        paragraphs.push(sents.join(\"\"));\n      }\n    } else if (type === \"sentences\") {\n      const sents = pickJapaneseSentences(pool, count);\n      const perPara = 3;\n      for (let i = 0; i \u003c sents.length; i += perPara) {\n        paragraphs.push(sents.slice(i, i + perPara).join(\"\"));\n      }\n    } else if (type === \"words\") {\n      // For Japanese \"words\" mode: pick sentences but treat as a flat block\n      const sents = pickJapaneseSentences(pool, Math.max(1, Math.ceil(count / 10)));\n      paragraphs.push(sents.join(\"\"));\n    }\n    // opener checkbox is ignored for Japanese (no Latin opener)\n  }\n\n  return paragraphs;\n}\n\n// ── STATS ─────────────────────────────────────────────────────────────────────\n\nfunction updateStats(paragraphs) {\n  const fullText = paragraphs.join(\"\\n\\n\");\n  // Sentence count: Japanese ends with 。or Latin with . ! ?\n  const sentCount = (fullText.match(/[.!?。！？]+/g) || []).length;\n  // Word count: for Japanese count characters instead\n  const isJp = document.getElementById(\"la-style\").value === \"japanese\";\n  let wordCount;\n  if (isJp) {\n    wordCount = fullText.replace(/\\s/g, \"\").length;\n  } else {\n    wordCount = fullText.trim().split(/\\s+/).filter(Boolean).length;\n  }\n  const charCount = fullText.length;\n  const paraCount = paragraphs.length;\n\n  document.getElementById(\"la-stat-para\").textContent = paraCount;\n  document.getElementById(\"la-stat-sent\").textContent = sentCount;\n  document.getElementById(\"la-stat-words\").textContent = wordCount.toLocaleString();\n  document.getElementById(\"la-stat-chars\").textContent = charCount.toLocaleString();\n\n  // Update label for Japanese\n  const wordLabel = document.querySelector(\"#lorem-app .la-stat:nth-child(3)\");\n  if (wordLabel) {\n    wordLabel.lastChild.textContent = isJp ? \"文字数（語）\" : \"語数\";\n  }\n}\n\n// ── RENDER ────────────────────────────────────────────────────────────────────\n\nfunction renderPreview(paragraphs) {\n  const container = document.getElementById(\"la-preview-content\");\n  if (!paragraphs.length) {\n    container.innerHTML = '\u003cdiv class=\"la-empty\"\u003e\u003cdiv class=\"la-empty-icon\"\u003e\u0026#9998;\u003c/div\u003e\u003cdiv\u003e\u003cstrong\u003e生成する\u003c/strong\u003eボタンをクリックしてください\u003c/div\u003e\u003c/div\u003e';\n    return;\n  }\n  container.innerHTML = paragraphs\n    .map(p =\u003e `\u003cp\u003e${escapeHtml(p)}\u003c/p\u003e","title":"ダミーテキスト生成ツール - Lorem Ipsum 無料ジェネレーター"},{"content":" 0 DEG RAD MC MR M+ M− ⌫ sin cos tan log ln asin acos atan √ ∛ x² x³ xʸ 1/x eˣ π e n! ( ) 7 8 9 ÷ AC 4 5 6 × % 1 2 3 − = 0 . + 履歴（最新10件） まだ計算がありません。 経理計算もかんたんに\nfreee会計なら、複雑な経理計算・確定申告もクラウドで自動化。無料トライアル実施中。 freeeを無料で試す → パーセント計算 → パーセント計算ツール\n単位変換 → 単位変換ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/scientific-calculator/","summary":"\u003cdiv id=\"sc-app\"\u003e\n\u003cstyle\u003e\n#sc-app * { box-sizing: border-box; margin: 0; padding: 0; }\n#sc-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 420px;\n  margin: 0 auto;\n  padding: 16px;\n}\n#sc-app .sc-calc-wrap {\n  background: #1a1a2e;\n  border-radius: 16px;\n  padding: 20px;\n  box-shadow: 0 8px 32px rgba(0,0,0,0.3);\n}\n#sc-app .sc-display {\n  background: #0f0f1a;\n  border-radius: 10px;\n  padding: 14px 16px;\n  margin-bottom: 14px;\n  min-height: 80px;\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n  justify-content: flex-end;\n  gap: 4px;\n}\n#sc-app .sc-expr {\n  font-size: 13px;\n  color: #8888aa;\n  min-height: 18px;\n  word-break: break-all;\n  text-align: right;\n  max-width: 100%;\n  overflow-x: auto;\n  white-space: nowrap;\n}\n#sc-app .sc-result {\n  font-size: 28px;\n  color: #e8e8ff;\n  font-weight: 300;\n  word-break: break-all;\n  text-align: right;\n  max-width: 100%;\n  overflow-x: auto;\n  white-space: nowrap;\n}\n#sc-app .sc-mode-row {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 12px;\n  justify-content: flex-end;\n}\n#sc-app .sc-mode-btn {\n  padding: 4px 12px;\n  border-radius: 20px;\n  border: 1.5px solid #4444aa;\n  background: transparent;\n  color: #8888cc;\n  font-size: 12px;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#sc-app .sc-mode-btn.active {\n  background: #4444aa;\n  color: #fff;\n}\n#sc-app .sc-grid {\n  display: grid;\n  grid-template-columns: repeat(5, 1fr);\n  gap: 8px;\n}\n#sc-app .sc-btn {\n  padding: 0;\n  height: 46px;\n  border-radius: 8px;\n  border: none;\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.1s;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  user-select: none;\n  -webkit-tap-highlight-color: transparent;\n}\n#sc-app .sc-btn:active { transform: scale(0.93); }\n#sc-app .sc-btn.num { background: #2a2a4a; color: #ddeeff; }\n#sc-app .sc-btn.num:hover { background: #33336a; }\n#sc-app .sc-btn.op { background: #1e3a5f; color: #7ec8e3; }\n#sc-app .sc-btn.op:hover { background: #254e80; }\n#sc-app .sc-btn.fn { background: #1a2a3a; color: #aaccee; font-size: 12px; }\n#sc-app .sc-btn.fn:hover { background: #22384a; }\n#sc-app .sc-btn.eq { background: #0066cc; color: #fff; font-size: 18px; }\n#sc-app .sc-btn.eq:hover { background: #0077ee; }\n#sc-app .sc-btn.ac { background: #c0392b; color: #fff; }\n#sc-app .sc-btn.ac:hover { background: #e74c3c; }\n#sc-app .sc-btn.cl { background: #7f3c3c; color: #ffcccc; }\n#sc-app .sc-btn.cl:hover { background: #a04040; }\n#sc-app .sc-btn.mem { background: #1a3a2a; color: #88ddaa; font-size: 12px; }\n#sc-app .sc-btn.mem:hover { background: #224a36; }\n#sc-app .sc-btn.const { background: #2a1a3a; color: #cc88ff; }\n#sc-app .sc-btn.const:hover { background: #3a2a50; }\n#sc-app .sc-history {\n  margin-top: 20px;\n  background: #0f0f1a;\n  border-radius: 10px;\n  padding: 12px 14px;\n}\n#sc-app .sc-history h3 {\n  font-size: 13px;\n  color: #6666aa;\n  margin-bottom: 8px;\n  font-weight: 500;\n  letter-spacing: 0.04em;\n}\n#sc-app .sc-history-list {\n  list-style: none;\n  max-height: 180px;\n  overflow-y: auto;\n}\n#sc-app .sc-history-list li {\n  font-size: 13px;\n  color: #8888bb;\n  padding: 4px 0;\n  border-bottom: 1px solid #1e1e30;\n  display: flex;\n  justify-content: space-between;\n  gap: 8px;\n  cursor: pointer;\n  transition: color 0.1s;\n}\n#sc-app .sc-history-list li:last-child { border-bottom: none; }\n#sc-app .sc-history-list li:hover { color: #ccccff; }\n#sc-app .sc-history-list .hi-expr { color: #555588; }\n#sc-app .sc-history-list .hi-val { color: #aaaadd; font-weight: 600; }\n#sc-app .sc-crosslinks {\n  margin-top: 20px;\n  font-size: 13px;\n  color: #6c757d;\n  line-height: 1.7;\n}\n#sc-app .sc-crosslinks a { color: #0066cc; text-decoration: none; }\n#sc-app .sc-crosslinks a:hover { text-decoration: underline; }\n@media (max-width: 480px) {\n  #sc-app .sc-btn { height: 42px; font-size: 13px; }\n  #sc-app .sc-btn.fn { font-size: 11px; }\n  #sc-app .sc-result { font-size: 22px; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"sc-calc-wrap\"\u003e\n  \u003cdiv class=\"sc-display\"\u003e\n    \u003cdiv class=\"sc-expr\" id=\"sc-expr\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"sc-result\" id=\"sc-result\"\u003e0\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"sc-mode-row\"\u003e\n    \u003cbutton class=\"sc-mode-btn active\" id=\"sc-deg-btn\" onclick=\"scSetMode('deg')\"\u003eDEG\u003c/button\u003e\n    \u003cbutton class=\"sc-mode-btn\" id=\"sc-rad-btn\" onclick=\"scSetMode('rad')\"\u003eRAD\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"sc-grid\"\u003e\n    \u003c!-- Row 1: Memory --\u003e\n    \u003cbutton class=\"sc-btn mem\" onclick=\"scMem('mc')\"\u003eMC\u003c/button\u003e\n    \u003cbutton class=\"sc-btn mem\" onclick=\"scMem('mr')\"\u003eMR\u003c/button\u003e\n    \u003cbutton class=\"sc-btn mem\" onclick=\"scMem('mp')\"\u003eM+\u003c/button\u003e\n    \u003cbutton class=\"sc-btn mem\" onclick=\"scMem('mm')\"\u003eM−\u003c/button\u003e\n    \u003cbutton class=\"sc-btn cl\" onclick=\"scBack()\"\u003e⌫\u003c/button\u003e\n    \u003c!-- Row 2: Scientific --\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('sin')\"\u003esin\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('cos')\"\u003ecos\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('tan')\"\u003etan\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('log')\"\u003elog\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('ln')\"\u003eln\u003c/button\u003e\n    \u003c!-- Row 3: Scientific --\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('asin')\"\u003easin\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('acos')\"\u003eacos\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('atan')\"\u003eatan\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('sqrt')\"\u003e√\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('cbrt')\"\u003e∛\u003c/button\u003e\n    \u003c!-- Row 4: Power / special --\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('sq')\"\u003ex²\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('cb')\"\u003ex³\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('pow')\"\u003exʸ\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('inv')\"\u003e1/x\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('exp')\"\u003eeˣ\u003c/button\u003e\n    \u003c!-- Row 5: Constants / factorial / parens --\u003e\n    \u003cbutton class=\"sc-btn const\" onclick=\"scConst('pi')\"\u003eπ\u003c/button\u003e\n    \u003cbutton class=\"sc-btn const\" onclick=\"scConst('e')\"\u003ee\u003c/button\u003e\n    \u003cbutton class=\"sc-btn fn\" onclick=\"scFn('fact')\"\u003en!\u003c/button\u003e\n    \u003cbutton class=\"sc-btn op\" onclick=\"scOp('(')\"\u003e(\u003c/button\u003e\n    \u003cbutton class=\"sc-btn op\" onclick=\"scOp(')')\"\u003e)\u003c/button\u003e\n    \u003c!-- Row 6: Numbers + ops --\u003e\n    \u003cbutton class=\"sc-btn num\" onclick=\"scNum('7')\"\u003e7\u003c/button\u003e\n    \u003cbutton class=\"sc-btn num\" onclick=\"scNum('8')\"\u003e8\u003c/button\u003e\n    \u003cbutton class=\"sc-btn num\" onclick=\"scNum('9')\"\u003e9\u003c/button\u003e\n    \u003cbutton class=\"sc-btn op\" onclick=\"scOp('÷')\"\u003e÷\u003c/button\u003e\n    \u003cbutton class=\"sc-btn ac\" onclick=\"scAC()\"\u003eAC\u003c/button\u003e\n    \u003c!-- Row 7 --\u003e\n    \u003cbutton class=\"sc-btn num\" onclick=\"scNum('4')\"\u003e4\u003c/button\u003e\n    \u003cbutton class=\"sc-btn num\" onclick=\"scNum('5')\"\u003e5\u003c/button\u003e\n    \u003cbutton class=\"sc-btn num\" onclick=\"scNum('6')\"\u003e6\u003c/button\u003e\n    \u003cbutton class=\"sc-btn op\" onclick=\"scOp('×')\"\u003e×\u003c/button\u003e\n    \u003cbutton class=\"sc-btn op\" onclick=\"scOp('%')\"\u003e%\u003c/button\u003e\n    \u003c!-- Row 8 --\u003e\n    \u003cbutton class=\"sc-btn num\" onclick=\"scNum('1')\"\u003e1\u003c/button\u003e\n    \u003cbutton class=\"sc-btn num\" onclick=\"scNum('2')\"\u003e2\u003c/button\u003e\n    \u003cbutton class=\"sc-btn num\" onclick=\"scNum('3')\"\u003e3\u003c/button\u003e\n    \u003cbutton class=\"sc-btn op\" onclick=\"scOp('−')\"\u003e−\u003c/button\u003e\n    \u003cbutton class=\"sc-btn eq\" onclick=\"scEq()\" style=\"grid-row: span 2;\"\u003e=\u003c/button\u003e\n    \u003c!-- Row 9 --\u003e\n    \u003cbutton class=\"sc-btn num\" onclick=\"scNum('0')\" style=\"grid-column: span 2;\"\u003e0\u003c/button\u003e\n    \u003cbutton class=\"sc-btn num\" onclick=\"scNum('.')\"\u003e.\u003c/button\u003e\n    \u003cbutton class=\"sc-btn op\" onclick=\"scOp('+')\"\u003e+\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sc-history\"\u003e\n  \u003ch3\u003e履歴（最新10件）\u003c/h3\u003e\n  \u003cul class=\"sc-history-list\" id=\"sc-history-list\"\u003e\n    \u003cli style=\"color:#444466;font-style:italic;\"\u003eまだ計算がありません。\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e経理計算もかんたんに\u003c/p\u003e","title":"関数電卓"},{"content":"本記事にはアフィリエイトリンクが含まれています。紹介料が発生する場合がありますが、読者の追加費用はありません。\n緊急資金計算ツール 月の生活費と状況を入力して、**推奨される緊急資金（生活防衛資金）**の金額と、達成までの期間を確認しましょう。\n月間必要生活費（円） 10万円25万円150万円 雇用形態 安定した会社員（公務員・大手企業） 一般的な会社員 契約社員・派遣社員 フリーランス・自営業 ギグワーカー・変動収入 家族構成 独身・扶養なし 夫婦・共働き 夫婦・片働き 子ども1〜2人の家族 子ども3人以上の家族 緊急資金への月間積立額（円） 5,000円5万円30万円 積立タイムライン 緊急資金が必要な理由 緊急資金（生活防衛資金）とは、予期せぬ出費に備えた資金です。突然の失業、病気・ケガ、車の修理、住宅の修繕など、いざというときに備えておくことで、高利率のローンやカードローンへの依存を防げます。\n必要な金額の目安 「3〜6ヶ月分の生活費」が一般的な目安ですが、最適な金額は状況によって異なります：\n状況 推奨月数 安定した公務員・大手企業、共働き 3ヶ月 一般的な会社員 4ヶ月 契約社員・派遣社員 6ヶ月 フリーランス・自営業 8ヶ月 ギグワーカー・変動収入 9ヶ月以上 扶養家族がいる場合や片働き世帯は、さらに1〜2ヶ月追加することを推奨します。\n緊急資金の置き場所 緊急資金はすぐに引き出せる流動性の高い口座に置くのが鉄則です。株式投資や定期預金ではなく、普通預金口座（できれば高利回りのネット銀行）が最適です。必要なときに1〜2営業日で引き出せる環境を整えましょう。\n緊急資金の積み立てコツ 給料日に自動振替を設定 — 使う前に先取り貯蓄する まず少額から始める — 月5,000円でも継続が大切 臨時収入を活用 — ボーナス・副業収入・税金還付は一気に積み増すチャンス 生活費口座と分ける — 別口座に置くことで使い込みを防ぐ 月の予算を管理したい方は → 予算プランナー 長期的な投資の成長を確認したい方は → FIREシミュレーター 関連ツール\n予算プランナー 配当収入計算ツール FIREシミュレーター 資産管理を効率化 → freee会計で家計を自動管理 ","permalink":"https://productivity-works.com/ja/tools/emergency-fund-calculator/","summary":"\u003cp\u003e\u003cem\u003e本記事にはアフィリエイトリンクが含まれています。紹介料が発生する場合がありますが、読者の追加費用はありません。\u003c/em\u003e\u003c/p\u003e\n\u003ch1 id=\"緊急資金計算ツール\"\u003e緊急資金計算ツール\u003c/h1\u003e\n\u003cp\u003e月の生活費と状況を入力して、**推奨される緊急資金（生活防衛資金）**の金額と、達成までの期間を確認しましょう。\u003c/p\u003e\n\u003cdiv id=\"ef-calc\" style=\"max-width:680px;margin:0 auto;font-family:Inter,sans-serif;\"\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e月間必要生活費（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"expenses\" min=\"100000\" max=\"1500000\" step=\"10000\" value=\"250000\" oninput=\"calcEF()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e10万円\u003c/span\u003e\u003cspan id=\"expVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e25万円\u003c/span\u003e\u003cspan\u003e150万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e雇用形態\u003c/label\u003e\n\u003cselect id=\"employment\" onchange=\"calcEF()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#fff;\"\u003e\n\u003coption value=\"stable\"\u003e安定した会社員（公務員・大手企業）\u003c/option\u003e\n\u003coption value=\"regular\" selected\u003e一般的な会社員\u003c/option\u003e\n\u003coption value=\"contract\"\u003e契約社員・派遣社員\u003c/option\u003e\n\u003coption value=\"freelance\"\u003eフリーランス・自営業\u003c/option\u003e\n\u003coption value=\"gig\"\u003eギグワーカー・変動収入\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e家族構成\u003c/label\u003e\n\u003cselect id=\"household\" onchange=\"calcEF()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#fff;\"\u003e\n\u003coption value=\"single\"\u003e独身・扶養なし\u003c/option\u003e\n\u003coption value=\"couple\" selected\u003e夫婦・共働き\u003c/option\u003e\n\u003coption value=\"couple_single\"\u003e夫婦・片働き\u003c/option\u003e\n\u003coption value=\"family_small\"\u003e子ども1〜2人の家族\u003c/option\u003e\n\u003coption value=\"family_large\"\u003e子ども3人以上の家族\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e緊急資金への月間積立額（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"savings\" min=\"5000\" max=\"300000\" step=\"5000\" value=\"50000\" oninput=\"calcEF()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e5,000円\u003c/span\u003e\u003cspan id=\"savVal\" style=\"font-weight:bold;font-size:18px;color:#10b981;\"\u003e5万円\u003c/span\u003e\u003cspan\u003e30万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"efResult\" style=\"margin-top:24px;padding:20px;background:#fff;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:24px;padding:24px;border:2px solid #10b981;border-radius:12px;background:#f0fdf4;\"\u003e\n\u003ch3 style=\"margin:0 0 16px;color:#166534;font-size:16px;\"\u003e積立タイムライン\u003c/h3\u003e\n\u003ccanvas id=\"efChart\" width=\"640\" height=\"260\" style=\"width:100%;height:auto;\"\u003e\u003c/canvas\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction fmtJP(n){\n  if(n\u003e=10000) return Math.round(n/10000).toLocaleString('ja-JP')+'万円';\n  return Math.round(n).toLocaleString('ja-JP')+'円';\n}\nfunction fmt(n){return n.toLocaleString('ja-JP');}\n\nfunction calcEF(){\n  var exp=+document.getElementById('expenses').value;\n  var emp=document.getElementById('employment').value;\n  var hh=document.getElementById('household').value;\n  var sav=+document.getElementById('savings').value;\n\n  document.getElementById('expVal').textContent=fmtJP(exp);\n  document.getElementById('savVal').textContent=fmtJP(sav);\n\n  var baseMonths={stable:3,regular:4,contract:6,freelance:8,gig:9};\n  var hhAdj={single:0,couple:-0.5,couple_single:1,family_small:1.5,family_large:2};\n  var months=baseMonths[emp]+(hhAdj[hh]||0);\n  months=Math.max(3,Math.round(months*2)/2);\n\n  var minM=months,maxM=months+2;\n  var target=exp*months;\n  var targetMax=exp*maxM;\n  var monthsToGoal=Math.ceil(target/sav);\n\n  var html='\u003cdiv style=\"text-align:center;margin-bottom:16px;\"\u003e';\n  html+='\u003cdiv style=\"font-size:14px;color:#64748b;\"\u003e推奨される緊急資金\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:36px;font-weight:bold;color:#2563eb;\"\u003e'+fmtJP(target)+'\u003c/div\u003e';\n  html+='\u003cdiv style=\"font-size:14px;color:#64748b;\"\u003e生活費の'+minM+'ヶ月分\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n\n  html+='\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;text-align:center;\"\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#f0fdf4;border-radius:8px;\"\u003e\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e月間生活費\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;\"\u003e'+fmtJP(exp)+'\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#eff6ff;border-radius:8px;\"\u003e\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e余裕をもった目標\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;color:#1e40af;\"\u003e'+fmtJP(targetMax)+'\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003cdiv style=\"padding:12px;background:#fefce8;border-radius:8px;\"\u003e\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e達成期間\u003c/div\u003e\u003cdiv style=\"font-size:18px;font-weight:bold;color:#a16207;\"\u003e'+monthsToGoal+'ヶ月\u003c/div\u003e\u003c/div\u003e';\n  html+='\u003c/div\u003e';\n\n  var yrs=Math.floor(monthsToGoal/12);var mo=monthsToGoal%12;\n  var timeStr=yrs\u003e0?yrs+'年'+mo+'ヶ月':mo+'ヶ月';\n  html+='\u003cdiv style=\"margin-top:12px;text-align:center;font-size:13px;color:#64748b;\"\u003e月'+fmtJP(sav)+'積み立てると、\u003cstrong\u003e'+timeStr+'\u003c/strong\u003eで目標達成できます\u003c/div\u003e';\n\n  document.getElementById('efResult').innerHTML=html;\n  drawEFChart(target,targetMax,sav,monthsToGoal);\n}\n\nfunction drawEFChart(target,targetMax,sav,totalM){\n  var c=document.getElementById('efChart');\n  var ctx=c.getContext('2d');\n  var W=c.width,H=c.height;\n  ctx.clearRect(0,0,W,H);\n\n  var maxVal=Math.max(targetMax,sav*totalM*1.1);\n  var maxM=Math.ceil(totalM*1.3);\n  if(maxM\u003c12)maxM=12;\n  var pad={t:20,r:20,b:40,l:80};\n  var cw=W-pad.l-pad.r,ch=H-pad.t-pad.b;\n\n  ctx.strokeStyle='#e2e8f0';ctx.lineWidth=1;\n  for(var i=0;i\u003c=4;i++){\n    var y=pad.t+ch*(1-i/4);\n    ctx.beginPath();ctx.moveTo(pad.l,y);ctx.lineTo(W-pad.r,y);ctx.stroke();\n    var label=Math.round(maxVal*i/4/10000)+'万';\n    ctx.fillStyle='#94a3b8';ctx.font='11px sans-serif';ctx.textAlign='right';\n    ctx.fillText(label,pad.l-6,y+4);\n  }\n\n  var targetY=pad.t+ch*(1-target/maxVal);\n  ctx.setLineDash([6,4]);ctx.strokeStyle='#10b981';ctx.lineWidth=1.5;\n  ctx.beginPath();ctx.moveTo(pad.l,targetY);ctx.lineTo(W-pad.r,targetY);ctx.stroke();\n  ctx.setLineDash([]);\n  ctx.fillStyle='#10b981';ctx.font='bold 11px sans-serif';ctx.textAlign='left';\n  ctx.fillText('目標: '+Math.round(target/10000)+'万円',pad.l+4,targetY-6);\n\n  ctx.beginPath();ctx.strokeStyle='#2563eb';ctx.lineWidth=2.5;\n  for(var m=0;m\u003c=maxM;m++){\n    var bal=Math.min(sav*m,sav*totalM);\n    var x=pad.l+cw*m/maxM,yy=pad.t+ch*(1-bal/maxVal);\n    if(m===0)ctx.moveTo(x,yy);else ctx.lineTo(x,yy);\n  }\n  ctx.stroke();\n\n  ctx.fillStyle='rgba(37,99,235,0.08)';\n  ctx.beginPath();ctx.moveTo(pad.l,pad.t+ch);\n  for(var m=0;m\u003c=maxM;m++){\n    var bal=Math.min(sav*m,sav*totalM);\n    var x=pad.l+cw*m/maxM,yy=pad.t+ch*(1-bal/maxVal);\n    ctx.lineTo(x,yy);\n  }\n  ctx.lineTo(pad.l+cw,pad.t+ch);ctx.closePath();ctx.fill();\n\n  ctx.fillStyle='#64748b';ctx.font='11px sans-serif';ctx.textAlign='center';\n  var step=maxM\u003c=12?1:maxM\u003c=24?3:6;\n  for(var m=0;m\u003c=maxM;m+=step){\n    ctx.fillText(m+'ヶ月',pad.l+cw*m/maxM,H-pad.b+20);\n  }\n}\n\ndocument.addEventListener('DOMContentLoaded',function(){calcEF();});\ncalcEF();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"緊急資金が必要な理由\"\u003e緊急資金が必要な理由\u003c/h2\u003e\n\u003cp\u003e緊急資金（生活防衛資金）とは、予期せぬ出費に備えた資金です。突然の失業、病気・ケガ、車の修理、住宅の修繕など、いざというときに備えておくことで、高利率のローンやカードローンへの依存を防げます。\u003c/p\u003e","title":"緊急資金計算ツール | いくら必要？生活防衛費の目安を計算"},{"content":"HEX・RGB・HSL値を入力して、最も近いCSS名前付きカラーを即座に検索。148色のCSS色名を一覧表示・検索・コピーできます。\n最も近いCSS色名を検索 HEX RGB ピッカー HEXカラー 色名を検索 6桁のHEXコードを入力してください（例: #ff6347）\nR G B 色名を検索 カラーピッカー 色を選んでCSS名を検索 検索結果 入力した色 最も近いCSS色名 148色のCSS名前付きカラー一覧 検索 \u0026times; この色を使う デザイナーの会計管理もかんたんに\nfreee会計なら、デザインツール・素材費の経費管理もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール:\n色を選ぶ → カラーピッカー コントラスト確認 → カラーコントラストチェッカー パレット生成 → カラーパレットジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/color-name-finder/","summary":"\u003cp\u003eHEX・RGB・HSL値を入力して、最も近いCSS名前付きカラーを即座に検索。148色のCSS色名を一覧表示・検索・コピーできます。\u003c/p\u003e\n\u003cdiv id=\"cn-app\"\u003e\n\u003cstyle\u003e\n#cn-app { font-family: system-ui, -apple-system, sans-serif; color: #1e293b; }\n#cn-app *, #cn-app *::before, #cn-app *::after { box-sizing: border-box; }\n#cn-app h2 { font-size: 1.1rem; font-weight: 700; margin: 0 0 12px; color: #0f172a; }\n#cn-app .cn-card { background: #fff; border: 1px solid #e2e8f0; border-radius: 12px; padding: 20px; margin-bottom: 18px; }\n#cn-app .cn-row { display: flex; gap: 14px; flex-wrap: wrap; align-items: flex-end; }\n#cn-app .cn-field { display: flex; flex-direction: column; gap: 5px; }\n#cn-app label { font-size: 12px; font-weight: 600; color: #64748b; text-transform: uppercase; letter-spacing: .04em; }\n#cn-app input[type=text], #cn-app input[type=number] { padding: 8px 10px; border: 1.5px solid #cbd5e1; border-radius: 7px; font-size: 14px; width: 120px; outline: none; transition: border-color .2s; }\n#cn-app input[type=text]:focus, #cn-app input[type=number]:focus { border-color: #6366f1; }\n#cn-app input[type=color] { width: 44px; height: 38px; padding: 2px; border: 1.5px solid #cbd5e1; border-radius: 7px; cursor: pointer; background: #fff; }\n#cn-app input[type=range] { width: 100px; accent-color: #6366f1; }\n#cn-app .cn-btn { padding: 9px 18px; background: #6366f1; color: #fff; border: none; border-radius: 7px; font-size: 13px; font-weight: 700; cursor: pointer; transition: background .2s; white-space: nowrap; }\n#cn-app .cn-btn:hover { background: #4f46e5; }\n#cn-app .cn-btn-sm { padding: 5px 11px; font-size: 12px; background: #f1f5f9; color: #334155; border: 1px solid #cbd5e1; border-radius: 6px; cursor: pointer; font-weight: 600; transition: background .2s; }\n#cn-app .cn-btn-sm:hover { background: #e2e8f0; }\n#cn-app .cn-swatch-row { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 14px; }\n#cn-app .cn-swatch-box { flex: 1; min-width: 160px; border-radius: 10px; overflow: hidden; border: 1px solid #e2e8f0; }\n#cn-app .cn-swatch-color { height: 80px; }\n#cn-app .cn-swatch-info { padding: 10px 12px; background: #f8fafc; }\n#cn-app .cn-swatch-label { font-size: 11px; color: #64748b; font-weight: 600; text-transform: uppercase; margin-bottom: 4px; }\n#cn-app .cn-swatch-name { font-size: 15px; font-weight: 700; color: #0f172a; margin-bottom: 6px; }\n#cn-app .cn-values { display: flex; flex-direction: column; gap: 3px; }\n#cn-app .cn-val-row { display: flex; align-items: center; gap: 6px; font-size: 12px; }\n#cn-app .cn-val-label { color: #94a3b8; width: 28px; flex-shrink: 0; }\n#cn-app .cn-val-text { font-family: monospace; color: #334155; flex: 1; }\n#cn-app .cn-copy-icon { cursor: pointer; color: #94a3b8; font-size: 11px; padding: 2px 5px; border-radius: 4px; border: 1px solid #e2e8f0; background: #fff; }\n#cn-app .cn-copy-icon:hover { background: #6366f1; color: #fff; border-color: #6366f1; }\n#cn-app .cn-distance { margin-top: 10px; font-size: 12px; color: #64748b; background: #f8fafc; padding: 7px 10px; border-radius: 7px; }\n#cn-app .cn-distance span { font-weight: 700; color: #6366f1; }\n#cn-app .cn-search-row { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-bottom: 14px; }\n#cn-app .cn-search-row input[type=text] { width: 200px; }\n#cn-app .cn-filter-btns { display: flex; gap: 6px; flex-wrap: wrap; }\n#cn-app .cn-filter-btn { padding: 5px 11px; font-size: 12px; border-radius: 20px; border: 1.5px solid #cbd5e1; background: #fff; cursor: pointer; font-weight: 600; color: #475569; transition: all .15s; }\n#cn-app .cn-filter-btn.active, #cn-app .cn-filter-btn:hover { background: #6366f1; color: #fff; border-color: #6366f1; }\n#cn-app .cn-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); gap: 8px; }\n#cn-app .cn-color-card { border-radius: 8px; overflow: hidden; border: 2px solid transparent; cursor: pointer; transition: all .15s; }\n#cn-app .cn-color-card:hover, #cn-app .cn-color-card.selected { border-color: #6366f1; box-shadow: 0 0 0 2px #a5b4fc; }\n#cn-app .cn-color-card-swatch { height: 54px; }\n#cn-app .cn-color-card-name { font-size: 10px; padding: 5px 6px; background: #f8fafc; font-weight: 600; color: #334155; line-height: 1.3; word-break: break-word; }\n#cn-app .cn-modal-overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,.45); z-index: 9999; align-items: center; justify-content: center; }\n#cn-app .cn-modal-overlay.open { display: flex; }\n#cn-app .cn-modal { background: #fff; border-radius: 14px; padding: 24px; max-width: 340px; width: 90%; box-shadow: 0 20px 60px rgba(0,0,0,.2); position: relative; }\n#cn-app .cn-modal-close { position: absolute; top: 12px; right: 14px; background: none; border: none; font-size: 20px; cursor: pointer; color: #94a3b8; }\n#cn-app .cn-modal-swatch { height: 90px; border-radius: 8px; margin-bottom: 14px; }\n#cn-app .cn-modal-name { font-size: 20px; font-weight: 800; color: #0f172a; margin-bottom: 12px; }\n#cn-app .cn-modal-vals { display: flex; flex-direction: column; gap: 7px; }\n#cn-app .cn-modal-val-row { display: flex; align-items: center; gap: 8px; background: #f8fafc; padding: 7px 10px; border-radius: 7px; }\n#cn-app .cn-modal-val-label { font-size: 11px; font-weight: 700; color: #94a3b8; text-transform: uppercase; width: 30px; }\n#cn-app .cn-modal-val-text { font-family: monospace; font-size: 13px; color: #334155; flex: 1; }\n#cn-app .cn-modal-copy { padding: 4px 10px; font-size: 11px; font-weight: 700; background: #6366f1; color: #fff; border: none; border-radius: 5px; cursor: pointer; }\n#cn-app .cn-tabs { display: flex; gap: 0; border-bottom: 2px solid #e2e8f0; margin-bottom: 18px; }\n#cn-app .cn-tab { padding: 9px 18px; font-size: 13px; font-weight: 700; border: none; background: none; cursor: pointer; color: #64748b; border-bottom: 2px solid transparent; margin-bottom: -2px; transition: all .15s; }\n#cn-app .cn-tab.active { color: #6366f1; border-bottom-color: #6366f1; }\n#cn-app .cn-section { display: none; }\n#cn-app .cn-section.active { display: block; }\n#cn-app .cn-rgb-sliders { display: flex; flex-direction: column; gap: 8px; }\n#cn-app .cn-slider-row { display: flex; align-items: center; gap: 8px; }\n#cn-app .cn-slider-row label { width: 14px; font-size: 12px; font-weight: 700; }\n#cn-app .cn-slider-row span { font-size: 12px; font-family: monospace; width: 28px; text-align: right; }\n#cn-app .cn-notice { font-size: 12px; color: #64748b; margin-top: 10px; }\n#cn-app .cn-count { font-size: 12px; color: #94a3b8; margin-bottom: 8px; }\n#cn-app .cn-freee-cta { margin-top: 28px; padding: 18px 20px; background: linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%); border: 1.5px solid #bae6fd; border-radius: 10px; }\n@media (max-width: 480px) {\n  #cn-app .cn-row { flex-direction: column; }\n  #cn-app input[type=text], #cn-app input[type=number] { width: 100%; }\n  #cn-app .cn-search-row input[type=text] { width: 100%; }\n}\n\u003c/style\u003e\n\u003c!-- Input Section --\u003e\n\u003cdiv class=\"cn-card\"\u003e\n  \u003ch2\u003e最も近いCSS色名を検索\u003c/h2\u003e\n  \u003cdiv class=\"cn-tabs\"\u003e\n    \u003cbutton class=\"cn-tab active\" onclick=\"(function(){document.querySelectorAll('#cn-app .cn-tab').forEach(t=\u003et.classList.remove('active'));this.classList.add('active');document.querySelectorAll('#cn-app .cn-section').forEach(s=\u003es.classList.remove('active'));document.getElementById('cn-sec-hex').classList.add('active');}).call(this)\"\u003eHEX\u003c/button\u003e\n    \u003cbutton class=\"cn-tab\" onclick=\"(function(){document.querySelectorAll('#cn-app .cn-tab').forEach(t=\u003et.classList.remove('active'));this.classList.add('active');document.querySelectorAll('#cn-app .cn-section').forEach(s=\u003es.classList.remove('active'));document.getElementById('cn-sec-rgb').classList.add('active');}).call(this)\"\u003eRGB\u003c/button\u003e\n    \u003cbutton class=\"cn-tab\" onclick=\"(function(){document.querySelectorAll('#cn-app .cn-tab').forEach(t=\u003et.classList.remove('active'));this.classList.add('active');document.querySelectorAll('#cn-app .cn-section').forEach(s=\u003es.classList.remove('active'));document.getElementById('cn-sec-pick').classList.add('active');}).call(this)\"\u003eピッカー\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"cn-sec-hex\" class=\"cn-section active\"\u003e\n    \u003cdiv class=\"cn-row\"\u003e\n      \u003cdiv class=\"cn-field\"\u003e\n        \u003clabel\u003eHEXカラー\u003c/label\u003e\n        \u003cinput type=\"text\" id=\"cn-hex-input\" placeholder=\"#6366f1\" maxlength=\"7\" style=\"width:140px;\"\u003e\n      \u003c/div\u003e\n      \u003cbutton class=\"cn-btn\" onclick=\"cnApp.findFromHex()\"\u003e色名を検索\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cp class=\"cn-notice\"\u003e6桁のHEXコードを入力してください（例: #ff6347）\u003c/p\u003e","title":"カラーネームファインダー"},{"content":" IPサブネット可視化ツール 計算 2進数ブレークダウン ネットワークビット ホストビット アドレス空間の可視化 0.0.0.0 \u0026#9632; このサブネット 255.255.255.255 サブネット早見表（/8 〜 /32） プレフィックス サブネットマスク ホスト数 ネットワーク規模 IPアドレスとCIDRプレフィックスを入力してください（例: 192.168.1.0/24） 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → IPアドレス情報 → IPアドレス情報ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/ip-subnet-visualizer/","summary":"\u003cdiv id=\"isv-app\"\u003e\n\u003cstyle\u003e\n#isv-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n  background: #0f172a;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  max-width: 900px;\n  margin: 0 auto;\n  box-sizing: border-box;\n}\n#isv-app * { box-sizing: border-box; }\n\n#isv-app h2 {\n  color: #38bdf8;\n  font-size: 1.05rem;\n  margin: 0 0 14px;\n  font-weight: 600;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n}\n\n#isv-app .input-row {\n  display: flex;\n  gap: 10px;\n  margin-bottom: 16px;\n  flex-wrap: wrap;\n  align-items: stretch;\n}\n#isv-app .cidr-input {\n  flex: 1;\n  min-width: 200px;\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  color: #e2e8f0;\n  border-radius: 8px;\n  padding: 11px 14px;\n  font-size: 1.05rem;\n  font-family: 'Courier New', monospace;\n  transition: border-color 0.15s;\n}\n#isv-app .cidr-input:focus { outline: none; border-color: #38bdf8; }\n#isv-app .cidr-input.error { border-color: #ef4444; }\n#isv-app .calc-btn {\n  background: #0284c7;\n  border: none;\n  color: #fff;\n  border-radius: 8px;\n  padding: 11px 22px;\n  font-size: 0.95rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n  white-space: nowrap;\n}\n#isv-app .calc-btn:hover { background: #0369a1; }\n#isv-app .error-line {\n  color: #ef4444;\n  font-size: 0.83rem;\n  margin: -10px 0 12px;\n  min-height: 18px;\n}\n\n#isv-app .results-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n  gap: 10px;\n  margin-bottom: 20px;\n}\n#isv-app .res-card {\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  border-radius: 10px;\n  padding: 13px 15px;\n}\n#isv-app .res-card .rc-label {\n  font-size: 0.72rem;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.09em;\n  font-weight: 600;\n  margin-bottom: 5px;\n}\n#isv-app .res-card .rc-value {\n  font-family: 'Courier New', monospace;\n  font-size: 0.97rem;\n  color: #38bdf8;\n  word-break: break-all;\n  min-height: 20px;\n}\n#isv-app .res-card .rc-value.green { color: #4ade80; }\n#isv-app .res-card .rc-value.orange { color: #fb923c; }\n#isv-app .res-card .rc-value.yellow { color: #facc15; }\n\n#isv-app .binary-section {\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 18px;\n}\n#isv-app .bin-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 9px;\n  flex-wrap: wrap;\n}\n#isv-app .bin-row:last-child { margin-bottom: 0; }\n#isv-app .bin-label {\n  font-size: 0.75rem;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  font-weight: 600;\n  min-width: 100px;\n}\n#isv-app .bin-bits {\n  display: flex;\n  gap: 2px;\n  flex-wrap: wrap;\n  font-family: 'Courier New', monospace;\n  font-size: 0.82rem;\n}\n#isv-app .bin-octet {\n  display: flex;\n  gap: 2px;\n  margin-right: 6px;\n}\n#isv-app .bin-bit {\n  width: 18px;\n  height: 22px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 3px;\n  font-weight: 700;\n  font-size: 0.8rem;\n}\n#isv-app .bin-bit.net { background: #1d4ed8; color: #93c5fd; }\n#isv-app .bin-bit.host { background: #166534; color: #86efac; }\n#isv-app .bin-bit.zero { background: #1e3a5f; color: #93c5fd; opacity: 0.5; }\n#isv-app .bin-legend {\n  display: flex;\n  gap: 16px;\n  margin-top: 10px;\n  flex-wrap: wrap;\n}\n#isv-app .bin-legend-item {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 0.78rem;\n  color: #94a3b8;\n}\n#isv-app .bin-legend-swatch {\n  width: 14px;\n  height: 14px;\n  border-radius: 3px;\n}\n\n#isv-app .canvas-section {\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 18px;\n}\n#isv-app #isv-canvas {\n  width: 100%;\n  height: 48px;\n  border-radius: 6px;\n  display: block;\n}\n#isv-app .canvas-labels {\n  display: flex;\n  justify-content: space-between;\n  font-size: 0.72rem;\n  color: #64748b;\n  margin-top: 5px;\n  font-family: 'Courier New', monospace;\n}\n\n#isv-app .table-section {\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  border-radius: 10px;\n  padding: 16px;\n  overflow-x: auto;\n}\n#isv-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.82rem;\n  font-family: 'Courier New', monospace;\n  min-width: 480px;\n}\n#isv-app thead th {\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.07em;\n  font-size: 0.72rem;\n  font-weight: 600;\n  padding: 7px 10px;\n  text-align: left;\n  border-bottom: 1px solid #334155;\n}\n#isv-app tbody td {\n  padding: 6px 10px;\n  color: #cbd5e1;\n  border-bottom: 1px solid #1e293b;\n  white-space: nowrap;\n}\n#isv-app tbody tr:last-child td { border-bottom: none; }\n#isv-app tbody tr.current-row td {\n  background: #0c2d4a;\n  color: #38bdf8;\n  font-weight: 700;\n}\n#isv-app tbody tr:hover td { background: #263448; }\n#isv-app tbody td.hosts-col { color: #4ade80; }\n\n#isv-app .placeholder {\n  text-align: center;\n  color: #475569;\n  padding: 32px 0;\n  font-size: 0.95rem;\n}\n\n@media (max-width: 560px) {\n  #isv-app .results-grid { grid-template-columns: 1fr 1fr; }\n  #isv-app .bin-label { min-width: 80px; }\n}\n\u003c/style\u003e\n\u003ch2\u003eIPサブネット可視化ツール\u003c/h2\u003e\n\u003cdiv class=\"input-row\"\u003e\n  \u003cinput class=\"cidr-input\" id=\"isv-input\" type=\"text\" placeholder=\"例: 192.168.1.0/24 または 10.0.5.37/18\"\n    oninput=\"isvCalc()\" autocomplete=\"off\" spellcheck=\"false\" value=\"\"\u003e\n  \u003cbutton class=\"calc-btn\" onclick=\"isvCalc()\"\u003e計算\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"error-line\" id=\"isv-error\"\u003e\u003c/div\u003e\n\u003cdiv id=\"isv-results\" style=\"display:none\"\u003e\n  \u003cdiv class=\"results-grid\" id=\"isv-cards\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"binary-section\"\u003e\n    \u003ch2\u003e2進数ブレークダウン\u003c/h2\u003e\n    \u003cdiv id=\"isv-bin-rows\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"bin-legend\"\u003e\n      \u003cdiv class=\"bin-legend-item\"\u003e\n        \u003cdiv class=\"bin-legend-swatch\" style=\"background:#1d4ed8;\"\u003e\u003c/div\u003e\n        ネットワークビット\n      \u003c/div\u003e\n      \u003cdiv class=\"bin-legend-item\"\u003e\n        \u003cdiv class=\"bin-legend-swatch\" style=\"background:#166534;\"\u003e\u003c/div\u003e\n        ホストビット\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"canvas-section\"\u003e\n    \u003ch2\u003eアドレス空間の可視化\u003c/h2\u003e\n    \u003ccanvas id=\"isv-canvas\" height=\"48\"\u003e\u003c/canvas\u003e\n    \u003cdiv class=\"canvas-labels\"\u003e\n      \u003cspan id=\"isv-cv-start\"\u003e0.0.0.0\u003c/span\u003e\n      \u003cspan style=\"color:#38bdf8;\"\u003e\u0026#9632; このサブネット\u003c/span\u003e\n      \u003cspan id=\"isv-cv-end\"\u003e255.255.255.255\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"table-section\"\u003e\n    \u003ch2\u003eサブネット早見表（/8 〜 /32）\u003c/h2\u003e\n    \u003ctable\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\n          \u003cth\u003eプレフィックス\u003c/th\u003e\n          \u003cth\u003eサブネットマスク\u003c/th\u003e\n          \u003cth\u003eホスト数\u003c/th\u003e\n          \u003cth\u003eネットワーク規模\u003c/th\u003e\n        \u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody id=\"isv-tbl-body\"\u003e\u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"placeholder\" id=\"isv-placeholder\"\u003eIPアドレスとCIDRプレフィックスを入力してください（例: 192.168.1.0/24）\u003c/div\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"IPサブネット可視化ツール - 無料CIDRサブネット計算"},{"content":" 混合カラー #7B6FBD #7B6FBD\u0026#x2398; rgb(123, 111, 189)\u0026#x2398; hsl(248, 35%, 59%)\u0026#x2398; 混ぜる色 \u0026#43; 色を追加（最大5色） 合計: 100% ティント＆シェード ティント（白を混ぜる） シェード（黒を混ぜる） 補色 #8D7F3B 色相環の反対側の色 — コントラストやアクセントカラーに最適 色1として使用 カラー履歴 色を混ぜると履歴が表示されます... 履歴をクリア カラーミキサーの使い方 色を選ぶ: 各行の左にあるカラースウォッチをクリックするとブラウザのカラーピッカーが開きます。HEXコードを直接テキストボックスに入力することも可能です。最大5色まで同時に混ぜられます。\n比率を調整: スライダーをドラッグするか、数値を入力して各色の配合比率を設定します。下部の比率バーで割合を視覚的に確認できます。合計が100%でなくても自動的に正規化して混合比率を計算します。\n色を追加: 「色を追加（最大5色）」ボタンをクリックすると、3〜5色目を追加できます。\n値をコピー: 結果パネルのHEX・RGB・HSLバッジをクリックするとクリップボードにコピーされます。\nティント＆シェード: ティント（白を混ぜた明るい色）とシェード（黒を混ぜた暗い色）のバリエーションが自動生成されます。クリックすると色1として使用できます。\n補色: 混合結果の色相環で正反対の色（補色）を自動計算します。「色1として使用」ボタンで配色に取り込めます。\nカラー履歴: 混合結果が変わるたびに自動で履歴に追加されます。履歴スウォッチをクリックすると色1に再適用できます。\n配色・色混合の基礎知識 比率が配色を決める: 同じ2色でも、50:50と90:10では全く異なる色が生まれます。比率バーを見ながら微調整することで、ブランドカラーに近い中間色や、アクセントとして使えるわずかに色付いたニュートラルカラーを作ることができます。\n3色以上の混合: 2色で大まかなベースを作り、3色目を少量（10〜20%）加えると温度感・彩度感を調整できます。例えばブルーとホワイトの混合にわずかなイエローを加えると、眩しすぎない自然な明るさの青を作れます。\nティントでUIデザインに活かす: デザインシステムでは同じ色相を明度違いで複数使うことが多く、ホバー・フォーカス・無効状態などのUI状態に活用します。ティントジェネレーターから即座にバリエーションを取得して、CSS変数に設定しましょう。\n補色でコントラストを確保: 混合色をメインカラーとして使う場合、補色はアクセントボタンや罫線・アイコンカラーとして最適です。補色を使うことで視線を誘導し、情報の優先度を伝えやすくなります。\n関連ツール 色を視覚的に選んで変換 → カラーピッカー 配色パレットをまとめて生成 → カラーパレットジェネレーター 文字と背景のコントラスト比を確認 → カラーコントラストチェッカー デザイナー・クリエイターの経理を効率化\n配色やデザイン作業に集中したいのに、請求書や経費管理に時間を取られていませんか？クラウド会計ソフト「freee」なら、バックオフィス業務を大幅に効率化できます。\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/color-mixer/","summary":"\u003cdiv id=\"cm-app\"\u003e\n\u003cstyle\u003e\n#cm-app {\n  font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 0 40px 0;\n  color: #1a1a2e;\n}\n#cm-app * { box-sizing: border-box; }\n\n/* Card */\n.cm-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 14px;\n  padding: 22px 24px;\n  margin-bottom: 20px;\n}\n.cm-card h3 {\n  margin: 0 0 16px;\n  font-size: 15px;\n  font-weight: 700;\n  color: #2d3748;\n  border-bottom: 2px solid #f0f4f8;\n  padding-bottom: 8px;\n}\n\n/* Result hero */\n.cm-result-hero {\n  border-radius: 14px;\n  padding: 24px;\n  margin-bottom: 20px;\n  display: flex;\n  align-items: center;\n  gap: 24px;\n  flex-wrap: wrap;\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n}\n.cm-result-swatch {\n  width: 120px;\n  height: 120px;\n  border-radius: 14px;\n  border: 4px solid rgba(255,255,255,0.5);\n  box-shadow: 0 8px 32px rgba(0,0,0,0.25);\n  flex-shrink: 0;\n  transition: background 0.2s;\n}\n.cm-result-info { flex: 1; min-width: 220px; }\n.cm-result-label {\n  color: rgba(255,255,255,0.85);\n  font-size: 13px;\n  font-weight: 600;\n  letter-spacing: .04em;\n  text-transform: uppercase;\n  margin-bottom: 6px;\n}\n.cm-result-hex {\n  color: #fff;\n  font-size: 32px;\n  font-weight: 800;\n  letter-spacing: .02em;\n  margin-bottom: 12px;\n  font-family: 'Courier New', monospace;\n}\n.cm-codes { display: flex; flex-wrap: wrap; gap: 8px; }\n.cm-code-badge {\n  background: rgba(255,255,255,0.18);\n  border: 1px solid rgba(255,255,255,0.35);\n  border-radius: 8px;\n  padding: 6px 12px;\n  color: #fff;\n  font-size: 12px;\n  font-family: 'Courier New', monospace;\n  cursor: pointer;\n  transition: background 0.15s;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n.cm-code-badge:hover { background: rgba(255,255,255,0.3); }\n.cm-copy-icon { font-size: 11px; opacity: 0.8; }\n.cm-copied { background: rgba(72,199,142,0.5) !important; }\n\n/* Color inputs */\n.cm-colors-grid {\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n}\n.cm-color-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  flex-wrap: wrap;\n  padding: 14px;\n  background: #f8fafc;\n  border-radius: 10px;\n  border: 1px solid #e8edf2;\n  position: relative;\n}\n.cm-color-swatch-wrap {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n.cm-native-picker {\n  width: 48px;\n  height: 48px;\n  border: none;\n  border-radius: 10px;\n  padding: 2px;\n  cursor: pointer;\n  background: none;\n  flex-shrink: 0;\n}\n.cm-hex-input {\n  width: 100px;\n  padding: 8px 10px;\n  border: 1px solid #cbd5e0;\n  border-radius: 8px;\n  font-size: 13px;\n  font-family: 'Courier New', monospace;\n  color: #2d3748;\n  background: #fff;\n  transition: border-color 0.15s;\n}\n.cm-hex-input:focus { outline: none; border-color: #667eea; }\n.cm-hex-input.cm-invalid { border-color: #fc8181; background: #fff5f5; }\n\n/* Ratio */\n.cm-ratio-wrap {\n  flex: 1;\n  min-width: 160px;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n.cm-ratio-label {\n  font-size: 12px;\n  color: #718096;\n  white-space: nowrap;\n}\n.cm-ratio-slider {\n  flex: 1;\n  accent-color: #667eea;\n  height: 4px;\n  cursor: pointer;\n}\n.cm-ratio-num {\n  width: 44px;\n  padding: 4px 6px;\n  border: 1px solid #cbd5e0;\n  border-radius: 6px;\n  font-size: 12px;\n  text-align: center;\n  color: #2d3748;\n  background: #fff;\n}\n.cm-ratio-num:focus { outline: none; border-color: #667eea; }\n\n/* Remove button */\n.cm-remove-btn {\n  width: 28px;\n  height: 28px;\n  border-radius: 50%;\n  border: 1px solid #e2e8f0;\n  background: #fff;\n  color: #a0aec0;\n  cursor: pointer;\n  font-size: 16px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  transition: background 0.15s, color 0.15s;\n  line-height: 1;\n  padding: 0;\n}\n.cm-remove-btn:hover { background: #fed7d7; color: #e53e3e; border-color: #fc8181; }\n\n/* Add button */\n.cm-add-btn {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 10px 18px;\n  background: #fff;\n  border: 2px dashed #cbd5e0;\n  border-radius: 10px;\n  color: #667eea;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: border-color 0.15s, background 0.15s;\n  width: 100%;\n  justify-content: center;\n}\n.cm-add-btn:hover { border-color: #667eea; background: #f0f0ff; }\n.cm-add-btn:disabled { opacity: 0.4; cursor: not-allowed; }\n\n/* Ratio bar */\n.cm-ratio-bar {\n  display: flex;\n  height: 12px;\n  border-radius: 8px;\n  overflow: hidden;\n  margin-bottom: 6px;\n  border: 1px solid #e2e8f0;\n}\n.cm-ratio-bar-seg {\n  transition: width 0.2s, background 0.2s;\n  height: 100%;\n}\n.cm-ratio-total {\n  font-size: 12px;\n  color: #a0aec0;\n  text-align: right;\n}\n.cm-ratio-total.cm-over { color: #e53e3e; font-weight: 700; }\n\n/* Tint/Shade */\n.cm-ts-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n}\n@media (max-width: 560px) { .cm-ts-grid { grid-template-columns: 1fr; } }\n.cm-ts-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #4a5568;\n  margin-bottom: 8px;\n}\n.cm-ts-swatches {\n  display: flex;\n  gap: 4px;\n  flex-wrap: wrap;\n}\n.cm-ts-swatch {\n  width: 36px;\n  height: 36px;\n  border-radius: 6px;\n  cursor: pointer;\n  border: 2px solid transparent;\n  transition: transform 0.1s, border-color 0.15s;\n  flex-shrink: 0;\n  position: relative;\n}\n.cm-ts-swatch:hover { transform: scale(1.12); border-color: #667eea; }\n.cm-ts-swatch[title]:hover::after {\n  content: attr(title);\n  position: absolute;\n  bottom: calc(100% + 4px);\n  left: 50%;\n  transform: translateX(-50%);\n  background: #2d3748;\n  color: #fff;\n  font-size: 10px;\n  padding: 2px 6px;\n  border-radius: 4px;\n  white-space: nowrap;\n  pointer-events: none;\n  z-index: 10;\n}\n\n/* Complementary */\n.cm-comp-row {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  flex-wrap: wrap;\n}\n.cm-comp-swatch {\n  width: 56px;\n  height: 56px;\n  border-radius: 10px;\n  cursor: pointer;\n  border: 2px solid #e2e8f0;\n  transition: transform 0.1s, border-color 0.15s;\n  flex-shrink: 0;\n}\n.cm-comp-swatch:hover { transform: scale(1.08); border-color: #667eea; }\n.cm-comp-info { flex: 1; }\n.cm-comp-hex {\n  font-family: 'Courier New', monospace;\n  font-size: 14px;\n  font-weight: 700;\n  color: #2d3748;\n}\n.cm-comp-desc { font-size: 12px; color: #718096; margin-top: 2px; }\n\n/* History */\n.cm-history-row {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n  align-items: center;\n}\n.cm-history-swatch {\n  width: 36px;\n  height: 36px;\n  border-radius: 8px;\n  cursor: pointer;\n  border: 2px solid transparent;\n  transition: transform 0.1s, border-color 0.15s;\n  flex-shrink: 0;\n  position: relative;\n}\n.cm-history-swatch:hover { transform: scale(1.15); border-color: #667eea; }\n.cm-history-empty { font-size: 13px; color: #a0aec0; }\n\n/* Buttons row */\n.cm-btn-row {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  margin-top: 10px;\n}\n.cm-btn {\n  padding: 9px 18px;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  border: 1px solid transparent;\n  transition: background 0.15s, color 0.15s;\n}\n.cm-btn-primary {\n  background: #667eea;\n  color: #fff;\n  border-color: #667eea;\n}\n.cm-btn-primary:hover { background: #5a67d8; }\n.cm-btn-secondary {\n  background: #fff;\n  color: #4a5568;\n  border-color: #cbd5e0;\n}\n.cm-btn-secondary:hover { background: #f7fafc; }\n\n@media (max-width: 480px) {\n  .cm-result-hex { font-size: 24px; }\n  .cm-result-swatch { width: 80px; height: 80px; }\n}\n\u003c/style\u003e\n\u003c!-- Result Hero --\u003e\n\u003cdiv class=\"cm-result-hero\" id=\"cm-hero\"\u003e\n  \u003cdiv class=\"cm-result-swatch\" id=\"cm-result-swatch\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"cm-result-info\"\u003e\n    \u003cdiv class=\"cm-result-label\"\u003e混合カラー\u003c/div\u003e\n    \u003cdiv class=\"cm-result-hex\" id=\"cm-result-hex\"\u003e#7B6FBD\u003c/div\u003e\n    \u003cdiv class=\"cm-codes\"\u003e\n      \u003cspan class=\"cm-code-badge\" id=\"cm-badge-hex\" title=\"HEXをコピー\"\u003e\u003cspan id=\"cm-val-hex\"\u003e#7B6FBD\u003c/span\u003e\u003cspan class=\"cm-copy-icon\"\u003e\u0026#x2398;\u003c/span\u003e\u003c/span\u003e\n      \u003cspan class=\"cm-code-badge\" id=\"cm-badge-rgb\" title=\"RGBをコピー\"\u003e\u003cspan id=\"cm-val-rgb\"\u003ergb(123, 111, 189)\u003c/span\u003e\u003cspan class=\"cm-copy-icon\"\u003e\u0026#x2398;\u003c/span\u003e\u003c/span\u003e\n      \u003cspan class=\"cm-code-badge\" id=\"cm-badge-hsl\" title=\"HSLをコピー\"\u003e\u003cspan id=\"cm-val-hsl\"\u003ehsl(248, 35%, 59%)\u003c/span\u003e\u003cspan class=\"cm-copy-icon\"\u003e\u0026#x2398;\u003c/span\u003e\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Color Inputs --\u003e\n\u003cdiv class=\"cm-card\"\u003e\n  \u003ch3\u003e混ぜる色\u003c/h3\u003e\n  \u003cdiv class=\"cm-colors-grid\" id=\"cm-colors-grid\"\u003e\u003c/div\u003e\n  \u003cdiv style=\"margin-top:12px;\"\u003e\n    \u003cbutton class=\"cm-add-btn\" id=\"cm-add-btn\"\u003e\u0026#43; 色を追加（最大5色）\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"margin-top:16px;\"\u003e\n    \u003cdiv class=\"cm-ratio-bar\" id=\"cm-ratio-bar\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"cm-ratio-total\" id=\"cm-ratio-total\"\u003e合計: 100%\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Tint \u0026 Shade --\u003e\n\u003cdiv class=\"cm-card\"\u003e\n  \u003ch3\u003eティント＆シェード\u003c/h3\u003e\n  \u003cdiv class=\"cm-ts-grid\"\u003e\n    \u003cdiv\u003e\n      \u003cdiv class=\"cm-ts-label\"\u003eティント（白を混ぜる）\u003c/div\u003e\n      \u003cdiv class=\"cm-ts-swatches\" id=\"cm-tints\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003cdiv class=\"cm-ts-label\"\u003eシェード（黒を混ぜる）\u003c/div\u003e\n      \u003cdiv class=\"cm-ts-swatches\" id=\"cm-shades\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Complementary --\u003e\n\u003cdiv class=\"cm-card\"\u003e\n  \u003ch3\u003e補色\u003c/h3\u003e\n  \u003cdiv class=\"cm-comp-row\"\u003e\n    \u003cdiv class=\"cm-comp-swatch\" id=\"cm-comp-swatch\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"cm-comp-info\"\u003e\n      \u003cdiv class=\"cm-comp-hex\" id=\"cm-comp-hex\"\u003e#8D7F3B\u003c/div\u003e\n      \u003cdiv class=\"cm-comp-desc\"\u003e色相環の反対側の色 — コントラストやアクセントカラーに最適\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003cbutton class=\"cm-btn cm-btn-secondary\" id=\"cm-use-comp\"\u003e色1として使用\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- History --\u003e\n\u003cdiv class=\"cm-card\"\u003e\n  \u003ch3\u003eカラー履歴\u003c/h3\u003e\n  \u003cdiv class=\"cm-history-row\" id=\"cm-history-row\"\u003e\n    \u003cspan class=\"cm-history-empty\"\u003e色を混ぜると履歴が表示されます...\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cm-btn-row\"\u003e\n    \u003cbutton class=\"cm-btn cm-btn-secondary\" id=\"cm-clear-history\"\u003e履歴をクリア\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  // ===== State =====\n  var colors = [\n    { hex: '#667eea', ratio: 50 },\n    { hex: '#f093fb', ratio: 50 }\n  ];\n  var history = [];\n  var MAX_COLORS = 5;\n  var MAX_HISTORY = 12;\n\n  // ===== Utilities =====\n  function hexToRgb(hex) {\n    var h = hex.replace('#', '');\n    if (h.length === 3) h = h[0]+h[0]+h[1]+h[1]+h[2]+h[2];\n    if (h.length !== 6) return null;\n    var n = parseInt(h, 16);\n    if (isNaN(n)) return null;\n    return { r: (n \u003e\u003e 16) \u0026 255, g: (n \u003e\u003e 8) \u0026 255, b: n \u0026 255 };\n  }\n\n  function rgbToHex(r, g, b) {\n    return '#' + [r,g,b].map(function(v) {\n      return Math.round(v).toString(16).padStart(2,'0');\n    }).join('').toUpperCase();\n  }\n\n  function rgbToHsl(r, g, b) {\n    r /= 255; g /= 255; b /= 255;\n    var max = Math.max(r,g,b), min = Math.min(r,g,b);\n    var h, s, l = (max+min)/2;\n    if (max === min) { h = s = 0; }\n    else {\n      var d = max - min;\n      s = l \u003e 0.5 ? d/(2-max-min) : d/(max+min);\n      switch(max) {\n        case r: h = ((g-b)/d + (g\u003cb?6:0))/6; break;\n        case g: h = ((b-r)/d + 2)/6; break;\n        default: h = ((r-g)/d + 4)/6;\n      }\n    }\n    return { h: Math.round(h*360), s: Math.round(s*100), l: Math.round(l*100) };\n  }\n\n  function clamp(v, lo, hi) { return Math.max(lo, Math.min(hi, v)); }\n\n  function isValidHex(s) { return /^#?[0-9A-Fa-f]{6}$/.test(s.trim()); }\n\n  function normalizeHex(s) {\n    s = s.trim().replace(/^#/,'');\n    if (s.length === 3) s = s[0]+s[0]+s[1]+s[1]+s[2]+s[2];\n    return '#' + s.toUpperCase();\n  }\n\n  function mixColors(colorsArr) {\n    var total = colorsArr.reduce(function(a,c){ return a+c.ratio; }, 0);\n    if (total === 0) return { r:128, g:128, b:128 };\n    var r=0, g=0, b=0;\n    colorsArr.forEach(function(c) {\n      var rgb = hexToRgb(c.hex);\n      if (!rgb) return;\n      var w = c.ratio / total;\n      r += rgb.r * w;\n      g += rgb.g * w;\n      b += rgb.b * w;\n    });\n    return { r: Math.round(r), g: Math.round(g), b: Math.round(b) };\n  }\n\n  function complementaryHex(hex) {\n    var rgb = hexToRgb(hex);\n    if (!rgb) return '#888888';\n    var hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n    var ch = (hsl.h + 180) % 360;\n    return hslToHex(ch, hsl.s, hsl.l);\n  }\n\n  function hslToHex(h, s, l) {\n    s /= 100; l /= 100;\n    var c = (1 - Math.abs(2*l-1)) * s;\n    var x = c * (1 - Math.abs((h/60) % 2 - 1));\n    var m = l - c/2;\n    var r,g,b;\n    if (h\u003c60){r=c;g=x;b=0;}\n    else if(h\u003c120){r=x;g=c;b=0;}\n    else if(h\u003c180){r=0;g=c;b=x;}\n    else if(h\u003c240){r=0;g=x;b=c;}\n    else if(h\u003c300){r=x;g=0;b=c;}\n    else{r=c;g=0;b=x;}\n    return rgbToHex(Math.round((r+m)*255), Math.round((g+m)*255), Math.round((b+m)*255));\n  }\n\n  function blendWithWhite(hex, t) {\n    var rgb = hexToRgb(hex);\n    if (!rgb) return '#ffffff';\n    return rgbToHex(\n      Math.round(rgb.r + (255-rgb.r)*t),\n      Math.round(rgb.g + (255-rgb.g)*t),\n      Math.round(rgb.b + (255-rgb.b)*t)\n    );\n  }\n\n  function blendWithBlack(hex, t) {\n    var rgb = hexToRgb(hex);\n    if (!rgb) return '#000000';\n    return rgbToHex(\n      Math.round(rgb.r*(1-t)),\n      Math.round(rgb.g*(1-t)),\n      Math.round(rgb.b*(1-t))\n    );\n  }\n\n  function copyText(text, badge) {\n    navigator.clipboard.writeText(text).then(function() {\n      badge.classList.add('cm-copied');\n      setTimeout(function(){ badge.classList.remove('cm-copied'); }, 1200);\n    }).catch(function() {\n      var ta = document.createElement('textarea');\n      ta.value = text;\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      badge.classList.add('cm-copied');\n      setTimeout(function(){ badge.classList.remove('cm-copied'); }, 1200);\n    });\n  }\n\n  // ===== Render color rows =====\n  function renderColorRows() {\n    var grid = document.getElementById('cm-colors-grid');\n    grid.innerHTML = '';\n    colors.forEach(function(c, i) {\n      var row = document.createElement('div');\n      row.className = 'cm-color-row';\n      row.setAttribute('data-index', i);\n\n      // Native picker\n      var picker = document.createElement('input');\n      picker.type = 'color';\n      picker.className = 'cm-native-picker';\n      picker.value = c.hex.toLowerCase();\n      picker.title = '色' + (i+1) + 'を選択';\n\n      // Hex input\n      var hexInput = document.createElement('input');\n      hexInput.type = 'text';\n      hexInput.className = 'cm-hex-input';\n      hexInput.value = c.hex.toUpperCase();\n      hexInput.maxLength = 7;\n      hexInput.placeholder = '#RRGGBB';\n\n      picker.addEventListener('input', function() {\n        colors[i].hex = picker.value.toUpperCase();\n        hexInput.value = picker.value.toUpperCase();\n        hexInput.classList.remove('cm-invalid');\n        update();\n      });\n\n      hexInput.addEventListener('input', function() {\n        var v = hexInput.value.trim();\n        if (!v.startsWith('#')) v = '#' + v;\n        if (isValidHex(v)) {\n          colors[i].hex = normalizeHex(v);\n          picker.value = normalizeHex(v).toLowerCase();\n          hexInput.classList.remove('cm-invalid');\n          update();\n        } else {\n          hexInput.classList.add('cm-invalid');\n        }\n      });\n\n      var swatchWrap = document.createElement('div');\n      swatchWrap.className = 'cm-color-swatch-wrap';\n      swatchWrap.appendChild(picker);\n      swatchWrap.appendChild(hexInput);\n\n      // Ratio controls\n      var ratioWrap = document.createElement('div');\n      ratioWrap.className = 'cm-ratio-wrap';\n\n      var ratioLabel = document.createElement('span');\n      ratioLabel.className = 'cm-ratio-label';\n      ratioLabel.textContent = '比率:';\n\n      var ratioSlider = document.createElement('input');\n      ratioSlider.type = 'range';\n      ratioSlider.className = 'cm-ratio-slider';\n      ratioSlider.min = 0;\n      ratioSlider.max = 100;\n      ratioSlider.value = c.ratio;\n\n      var ratioNum = document.createElement('input');\n      ratioNum.type = 'number';\n      ratioNum.className = 'cm-ratio-num';\n      ratioNum.min = 0;\n      ratioNum.max = 100;\n      ratioNum.value = c.ratio;\n\n      ratioSlider.addEventListener('input', function() {\n        colors[i].ratio = parseInt(ratioSlider.value) || 0;\n        ratioNum.value = colors[i].ratio;\n        update();\n      });\n      ratioNum.addEventListener('input', function() {\n        colors[i].ratio = clamp(parseInt(ratioNum.value) || 0, 0, 100);\n        ratioSlider.value = colors[i].ratio;\n        update();\n      });\n\n      ratioWrap.appendChild(ratioLabel);\n      ratioWrap.appendChild(ratioSlider);\n      ratioWrap.appendChild(ratioNum);\n\n      row.appendChild(swatchWrap);\n      row.appendChild(ratioWrap);\n\n      // Remove button (only if \u003e 2 colors)\n      if (colors.length \u003e 2) {\n        var removeBtn = document.createElement('button');\n        removeBtn.className = 'cm-remove-btn';\n        removeBtn.title = 'この色を削除';\n        removeBtn.innerHTML = '\u0026times;';\n        removeBtn.addEventListener('click', function() {\n          colors.splice(i, 1);\n          renderColorRows();\n          update();\n        });\n        row.appendChild(removeBtn);\n      }\n\n      grid.appendChild(row);\n    });\n\n    var addBtn = document.getElementById('cm-add-btn');\n    addBtn.disabled = colors.length \u003e= MAX_COLORS;\n  }\n\n  // ===== Render ratio bar =====\n  function renderRatioBar() {\n    var bar = document.getElementById('cm-ratio-bar');\n    var totalEl = document.getElementById('cm-ratio-total');\n    var total = colors.reduce(function(a,c){ return a+c.ratio; }, 0);\n    bar.innerHTML = '';\n    colors.forEach(function(c) {\n      var seg = document.createElement('div');\n      seg.className = 'cm-ratio-bar-seg';\n      seg.style.width = (total \u003e 0 ? (c.ratio/total*100) : (100/colors.length)) + '%';\n      seg.style.background = c.hex;\n      bar.appendChild(seg);\n    });\n    totalEl.textContent = '合計: ' + total + '%';\n    totalEl.className = 'cm-ratio-total' + (total !== 100 ? ' cm-over' : '');\n  }\n\n  // ===== Render tints \u0026 shades =====\n  function renderTintsShades(resultHex) {\n    var steps = [0.1, 0.2, 0.35, 0.5, 0.65, 0.8];\n    var tintsEl = document.getElementById('cm-tints');\n    var shadesEl = document.getElementById('cm-shades');\n    tintsEl.innerHTML = '';\n    shadesEl.innerHTML = '';\n\n    steps.forEach(function(t) {\n      var tintHex = blendWithWhite(resultHex, t);\n      var ts = document.createElement('div');\n      ts.className = 'cm-ts-swatch';\n      ts.style.background = tintHex;\n      ts.title = tintHex;\n      ts.addEventListener('click', function() {\n        addToHistory(resultHex);\n        colors[0].hex = tintHex;\n        renderColorRows();\n        update();\n      });\n      tintsEl.appendChild(ts);\n    });\n\n    steps.forEach(function(t) {\n      var shadeHex = blendWithBlack(resultHex, t);\n      var ss = document.createElement('div');\n      ss.className = 'cm-ts-swatch';\n      ss.style.background = shadeHex;\n      ss.title = shadeHex;\n      ss.addEventListener('click', function() {\n        addToHistory(resultHex);\n        colors[0].hex = shadeHex;\n        renderColorRows();\n        update();\n      });\n      shadesEl.appendChild(ss);\n    });\n  }\n\n  // ===== Render complementary =====\n  function renderComplementary(resultHex) {\n    var compHex = complementaryHex(resultHex);\n    document.getElementById('cm-comp-swatch').style.background = compHex;\n    document.getElementById('cm-comp-hex').textContent = compHex;\n    document.getElementById('cm-use-comp').onclick = function() {\n      colors[0].hex = compHex;\n      renderColorRows();\n      update();\n    };\n  }\n\n  // ===== History =====\n  function addToHistory(hex) {\n    if (history.length \u0026\u0026 history[0] === hex) return;\n    history = history.filter(function(h){ return h !== hex; });\n    history.unshift(hex);\n    if (history.length \u003e MAX_HISTORY) history = history.slice(0, MAX_HISTORY);\n    renderHistory();\n  }\n\n  function renderHistory() {\n    var row = document.getElementById('cm-history-row');\n    row.innerHTML = '';\n    if (!history.length) {\n      var empty = document.createElement('span');\n      empty.className = 'cm-history-empty';\n      empty.textContent = '色を混ぜると履歴が表示されます...';\n      row.appendChild(empty);\n      return;\n    }\n    history.forEach(function(hex) {\n      var sw = document.createElement('div');\n      sw.className = 'cm-history-swatch';\n      sw.style.background = hex;\n      sw.title = hex;\n      sw.addEventListener('click', function() {\n        colors[0].hex = hex;\n        renderColorRows();\n        update();\n      });\n      row.appendChild(sw);\n    });\n  }\n\n  // ===== Main update =====\n  var lastResultHex = '';\n  function update() {\n    var validColors = colors.filter(function(c){ return hexToRgb(c.hex); });\n    var rgb = mixColors(validColors.length ? validColors : colors);\n    var hex = rgbToHex(rgb.r, rgb.g, rgb.b);\n    var hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n\n    document.getElementById('cm-result-swatch').style.background = hex;\n    document.getElementById('cm-result-hex').textContent = hex;\n    document.getElementById('cm-val-hex').textContent = hex;\n    document.getElementById('cm-val-rgb').textContent = 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')';\n    document.getElementById('cm-val-hsl').textContent = 'hsl(' + hsl.h + ', ' + hsl.s + '%, ' + hsl.l + '%)';\n\n    var heroColors = colors.map(function(c){ return c.hex; });\n    document.getElementById('cm-hero').style.background =\n      'linear-gradient(135deg, ' + heroColors.join(', ') + ')';\n\n    renderRatioBar();\n    renderTintsShades(hex);\n    renderComplementary(hex);\n\n    if (hex !== lastResultHex) {\n      addToHistory(hex);\n      lastResultHex = hex;\n    }\n  }\n\n  // ===== Copy badges =====\n  document.getElementById('cm-badge-hex').addEventListener('click', function() {\n    copyText(document.getElementById('cm-val-hex').textContent, this);\n  });\n  document.getElementById('cm-badge-rgb').addEventListener('click', function() {\n    copyText(document.getElementById('cm-val-rgb').textContent, this);\n  });\n  document.getElementById('cm-badge-hsl').addEventListener('click', function() {\n    copyText(document.getElementById('cm-val-hsl').textContent, this);\n  });\n\n  // ===== Add color =====\n  document.getElementById('cm-add-btn').addEventListener('click', function() {\n    if (colors.length \u003e= MAX_COLORS) return;\n    colors.push({ hex: '#' + Math.floor(Math.random()*0xffffff).toString(16).padStart(6,'0').toUpperCase(), ratio: 20 });\n    renderColorRows();\n    update();\n  });\n\n  // ===== Clear history =====\n  document.getElementById('cm-clear-history').addEventListener('click', function() {\n    history = [];\n    renderHistory();\n  });\n\n  // ===== Init =====\n  renderColorRows();\n  update();\n\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"カラーミキサーの使い方\"\u003eカラーミキサーの使い方\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e色を選ぶ\u003c/strong\u003e: 各行の左にあるカラースウォッチをクリックするとブラウザのカラーピッカーが開きます。HEXコードを直接テキストボックスに入力することも可能です。最大5色まで同時に混ぜられます。\u003c/p\u003e","title":"カラーミキサー"},{"content":" JSONPathテスター JSON入力 結果 JSONとJSONPath式を入力すると結果が表示されます 実行 例: $ $.store $.store.book[0] $.store.book[*].title $..title $.store.book[?(@.price\u0026lt;10)] $.store.* $..price 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → JSONを検証 → JSONバリデーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/json-path-tester/","summary":"\u003cdiv id=\"jp-app\"\u003e\n\u003cstyle\u003e\n#jp-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n  background: #0f172a;\n  color: #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  max-width: 900px;\n  margin: 0 auto;\n  box-sizing: border-box;\n}\n#jp-app * { box-sizing: border-box; }\n\n#jp-app h2 {\n  color: #a78bfa;\n  font-size: 1.05rem;\n  margin: 0 0 12px;\n  font-weight: 600;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n}\n\n#jp-app .two-col {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 14px;\n}\n@media (max-width: 640px) {\n  #jp-app .two-col { grid-template-columns: 1fr; }\n}\n\n#jp-app .panel {\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  border-radius: 10px;\n  padding: 14px;\n  display: flex;\n  flex-direction: column;\n}\n#jp-app .panel-label {\n  font-size: 0.73rem;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.09em;\n  font-weight: 600;\n  margin-bottom: 8px;\n}\n#jp-app textarea {\n  flex: 1;\n  background: #0f172a;\n  border: 1.5px solid #334155;\n  color: #e2e8f0;\n  border-radius: 7px;\n  padding: 10px 12px;\n  font-family: 'Courier New', monospace;\n  font-size: 0.88rem;\n  resize: vertical;\n  min-height: 220px;\n  line-height: 1.6;\n  transition: border-color 0.15s;\n}\n#jp-app textarea:focus { outline: none; border-color: #a78bfa; }\n#jp-app textarea.error { border-color: #ef4444; }\n\n#jp-app .path-row {\n  display: flex;\n  gap: 10px;\n  margin-bottom: 14px;\n  align-items: stretch;\n  flex-wrap: wrap;\n}\n#jp-app .path-input-wrap {\n  flex: 1;\n  min-width: 200px;\n  position: relative;\n}\n#jp-app .path-input {\n  width: 100%;\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  color: #e2e8f0;\n  border-radius: 8px;\n  padding: 11px 14px;\n  font-size: 0.97rem;\n  font-family: 'Courier New', monospace;\n  transition: border-color 0.15s;\n}\n#jp-app .path-input:focus { outline: none; border-color: #a78bfa; }\n#jp-app .path-input.error { border-color: #ef4444; }\n\n#jp-app .run-btn {\n  background: #7c3aed;\n  border: none;\n  color: #fff;\n  border-radius: 8px;\n  padding: 11px 22px;\n  font-size: 0.95rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n  white-space: nowrap;\n}\n#jp-app .run-btn:hover { background: #6d28d9; }\n\n#jp-app .suggestions {\n  display: flex;\n  gap: 6px;\n  flex-wrap: wrap;\n  margin-bottom: 14px;\n}\n#jp-app .sug-label {\n  font-size: 0.73rem;\n  color: #64748b;\n  align-self: center;\n  white-space: nowrap;\n}\n#jp-app .sug-chip {\n  background: #1e293b;\n  border: 1px solid #334155;\n  color: #a78bfa;\n  border-radius: 5px;\n  padding: 4px 10px;\n  font-size: 0.78rem;\n  font-family: 'Courier New', monospace;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#jp-app .sug-chip:hover {\n  background: #2e1065;\n  border-color: #a78bfa;\n}\n\n#jp-app .result-panel {\n  background: #1e293b;\n  border: 1.5px solid #334155;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 14px;\n}\n#jp-app .result-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 10px;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n#jp-app .result-count {\n  font-size: 0.82rem;\n  color: #64748b;\n}\n#jp-app .result-count .match-num {\n  color: #4ade80;\n  font-weight: 700;\n}\n#jp-app .copy-result-btn {\n  background: #2e1065;\n  border: 1px solid #a78bfa;\n  color: #a78bfa;\n  border-radius: 6px;\n  padding: 5px 13px;\n  font-size: 0.78rem;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#jp-app .copy-result-btn:hover { background: #a78bfa; color: #0f172a; }\n#jp-app .copy-result-btn.copied { background: #a78bfa; color: #0f172a; }\n\n#jp-app .result-items {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  max-height: 360px;\n  overflow-y: auto;\n}\n#jp-app .result-item {\n  background: #0f172a;\n  border: 1px solid #334155;\n  border-radius: 6px;\n  padding: 8px 12px;\n  font-family: 'Courier New', monospace;\n  font-size: 0.87rem;\n  line-height: 1.55;\n  color: #c4b5fd;\n  position: relative;\n}\n#jp-app .result-item .item-idx {\n  position: absolute;\n  top: 6px;\n  right: 10px;\n  font-size: 0.68rem;\n  color: #475569;\n}\n#jp-app .result-item .item-val { color: #e2e8f0; }\n#jp-app .result-item .item-val .str { color: #86efac; }\n#jp-app .result-item .item-val .num { color: #fbbf24; }\n#jp-app .result-item .item-val .bool { color: #f87171; }\n#jp-app .result-item .item-val .null { color: #94a3b8; }\n\n#jp-app .error-panel {\n  background: #1e293b;\n  border: 1.5px solid #7f1d1d;\n  border-radius: 10px;\n  padding: 13px 16px;\n  color: #fca5a5;\n  font-size: 0.87rem;\n  font-family: 'Courier New', monospace;\n  margin-bottom: 14px;\n}\n\n#jp-app .placeholder-msg {\n  text-align: center;\n  color: #475569;\n  padding: 28px 0;\n  font-size: 0.92rem;\n}\n\n#jp-app .path-err {\n  color: #ef4444;\n  font-size: 0.8rem;\n  margin-top: 4px;\n  margin-bottom: 0;\n  min-height: 16px;\n}\n\n#jp-app .json-err {\n  color: #ef4444;\n  font-size: 0.8rem;\n  margin-top: 4px;\n}\n\u003c/style\u003e\n\u003ch2\u003eJSONPathテスター\u003c/h2\u003e\n\u003cdiv class=\"two-col\"\u003e\n  \u003cdiv class=\"panel\"\u003e\n    \u003cdiv class=\"panel-label\"\u003eJSON入力\u003c/div\u003e\n    \u003ctextarea id=\"jp-json\" placeholder='{\"store\":{\"book\":[{\"title\":\"本A\",\"price\":8},{\"title\":\"本B\",\"price\":15}]}}' oninput=\"jpRun()\"\u003e\u003c/textarea\u003e\n    \u003cdiv class=\"json-err\" id=\"jp-json-err\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"panel\"\u003e\n    \u003cdiv class=\"panel-label\"\u003e結果\u003c/div\u003e\n    \u003cdiv id=\"jp-result-area\"\u003e\n      \u003cdiv class=\"placeholder-msg\"\u003eJSONとJSONPath式を入力すると結果が表示されます\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"path-row\"\u003e\n  \u003cdiv class=\"path-input-wrap\"\u003e\n    \u003cinput class=\"path-input\" id=\"jp-path\" type=\"text\" placeholder=\"$.store.book[0].title\" oninput=\"jpRun()\" autocomplete=\"off\" spellcheck=\"false\"\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"run-btn\" onclick=\"jpRun()\"\u003e実行\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"path-err\" id=\"jp-path-err\"\u003e\u003c/div\u003e\n\u003cdiv class=\"suggestions\"\u003e\n  \u003cspan class=\"sug-label\"\u003e例:\u003c/span\u003e\n  \u003cspan class=\"sug-chip\" onclick=\"jpSug('$')\"\u003e$\u003c/span\u003e\n  \u003cspan class=\"sug-chip\" onclick=\"jpSug('$.store')\"\u003e$.store\u003c/span\u003e\n  \u003cspan class=\"sug-chip\" onclick=\"jpSug('$.store.book[0]')\"\u003e$.store.book[0]\u003c/span\u003e\n  \u003cspan class=\"sug-chip\" onclick=\"jpSug('$.store.book[*].title')\"\u003e$.store.book[*].title\u003c/span\u003e\n  \u003cspan class=\"sug-chip\" onclick=\"jpSug('$..title')\"\u003e$..title\u003c/span\u003e\n  \u003cspan class=\"sug-chip\" onclick=\"jpSug('$.store.book[?(@.price\u003c10)]')\"\u003e$.store.book[?(@.price\u0026lt;10)]\u003c/span\u003e\n  \u003cspan class=\"sug-chip\" onclick=\"jpSug('$.store.*')\"\u003e$.store.*\u003c/span\u003e\n  \u003cspan class=\"sug-chip\" onclick=\"jpSug('$..price')\"\u003e$..price\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"JSONPathテスター - 無料オンラインJSONPathクエリツール"},{"content":" CSSスクロールバー スタイラー スクロールバーの幅・色・角丸・ホバー効果をカスタマイズして、即コピーできるCSSを生成します。\nミニマル ダークモード カラフル 丸型 非表示 コントロール \u0026lt;div class=\u0026quot;sb-control\u0026quot;\u0026gt; \u0026lt;label\u0026gt;スクロールバー幅モード\u0026lt;/label\u0026gt; \u0026lt;select class=\u0026quot;sb-select\u0026quot; id=\u0026quot;sb-width-mode\u0026quot; onchange=\u0026quot;sbWidthModeChange()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;auto\u0026quot;\u0026gt;auto（デフォルト）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;thin\u0026quot;\u0026gt;thin（細め）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;custom\u0026quot; selected\u0026gt;カスタム（px指定）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sb-control\u0026quot; id=\u0026quot;sb-custom-width-wrap\u0026quot;\u0026gt; \u0026lt;label\u0026gt;カスタム幅: \u0026lt;span class=\u0026quot;sb-val\u0026quot; id=\u0026quot;sb-width-val\u0026quot;\u0026gt;10px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;sb-width\u0026quot; min=\u0026quot;2\u0026quot; max=\u0026quot;32\u0026quot; value=\u0026quot;10\u0026quot; oninput=\u0026quot;sbUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sb-control\u0026quot;\u0026gt; \u0026lt;label\u0026gt;トラック色（背景）\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;sb-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;sb-track-color\u0026quot; value=\u0026quot;#f1f5f9\u0026quot; oninput=\u0026quot;sbSyncColor('sb-track-color','sb-track-color-hex')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sb-track-color-hex\u0026quot; value=\u0026quot;#f1f5f9\u0026quot; oninput=\u0026quot;sbSyncHex('sb-track-color','sb-track-color-hex')\u0026quot; maxlength=\u0026quot;9\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sb-control\u0026quot;\u0026gt; \u0026lt;label\u0026gt;サム色（つまみ）\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;sb-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;sb-thumb-color\u0026quot; value=\u0026quot;#94a3b8\u0026quot; oninput=\u0026quot;sbSyncColor('sb-thumb-color','sb-thumb-color-hex')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sb-thumb-color-hex\u0026quot; value=\u0026quot;#94a3b8\u0026quot; oninput=\u0026quot;sbSyncHex('sb-thumb-color','sb-thumb-color-hex')\u0026quot; maxlength=\u0026quot;9\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sb-control\u0026quot;\u0026gt; \u0026lt;label\u0026gt;サム ホバー色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;sb-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;sb-thumb-hover-color\u0026quot; value=\u0026quot;#6366f1\u0026quot; oninput=\u0026quot;sbSyncColor('sb-thumb-hover-color','sb-thumb-hover-hex')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;sb-thumb-hover-hex\u0026quot; value=\u0026quot;#6366f1\u0026quot; oninput=\u0026quot;sbSyncHex('sb-thumb-hover-color','sb-thumb-hover-hex')\u0026quot; maxlength=\u0026quot;9\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sb-control\u0026quot;\u0026gt; \u0026lt;label\u0026gt;サム 角丸: \u0026lt;span class=\u0026quot;sb-val\u0026quot; id=\u0026quot;sb-thumb-radius-val\u0026quot;\u0026gt;6px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;sb-thumb-radius\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;6\u0026quot; oninput=\u0026quot;sbUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sb-control\u0026quot;\u0026gt; \u0026lt;label\u0026gt;トラック 角丸: \u0026lt;span class=\u0026quot;sb-val\u0026quot; id=\u0026quot;sb-track-radius-val\u0026quot;\u0026gt;0px\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; id=\u0026quot;sb-track-radius\u0026quot; min=\u0026quot;0\u0026quot; max=\u0026quot;50\u0026quot; value=\u0026quot;0\u0026quot; oninput=\u0026quot;sbUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; ライブプレビュー スクロールしてカスタムスクロールバーを確認できます。左のコントロールで設定を変更すると、リアルタイムでプレビューに反映されます。\n幅・トラック色・サム色・ホバー色・角丸をそれぞれ細かく調整できます。プリセットを使えば素早くスタイルを適用可能です。\n「非表示」プリセットを選ぶと、スクロール機能を保ちつつスクロールバーを見えなくできます。\n生成したCSSは下のタブからコピーしてご利用ください。WebKit（Chrome・Safari・Edge）とFirefox両対応のCSSを出力します。\nセレクター指定で特定の要素だけに適用することも可能です。グローバルに適用する場合は body のままにしてください。\n現在の設定がプレビューに反映されています。\n適用先セレクター: body のままでグローバル適用。 WebKit（Chrome/Safari/Edge） Firefox まとめてコピー CSSをコピー ブラウザ互換性 プロパティ Chrome Firefox Safari Edge ::-webkit-scrollbar 対応 非対応 対応 対応 scrollbar-width 121以降 対応 16以降 121以降 scrollbar-color 121以降 対応 16以降 121以降 ホバー効果 対応（WebKit） 非対応 対応（WebKit） 対応（WebKit） ヒント:「まとめてコピー」タブで全ブラウザ対応のCSSを一括取得できます。Firefoxはホバー色の個別指定に非対応です。\nWeb制作の経費管理もかんたんに\nfreee会計なら、デザインツール・サーバー費用の経費精算もクラウドで一元管理。 freeeを無料で試す → ボタンをスタイル \u0026rarr; CSSボタンジェネレーター\nアニメーションをカスタマイズ \u0026rarr; CSSアニメーションジェネレーター\nCSS変数 \u0026rarr; CSS変数ジェネレーター\n確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/scrollbar-styler/","summary":"\u003cdiv id=\"sb-app\" style=\"font-family:-apple-system,BlinkMacSystemFont,'Hiragino Sans','Yu Gothic UI','Segoe UI',Roboto,sans-serif;max-width:900px;margin:0 auto;\"\u003e\n\u003cstyle\u003e\n#sb-app *,#sb-app *::before,#sb-app *::after{box-sizing:border-box;}\n#sb-app h2{font-size:1.1rem;font-weight:700;margin:0 0 12px;color:#1e293b;}\n#sb-app .sb-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px;}\n@media(max-width:640px){#sb-app .sb-grid{grid-template-columns:1fr;}}\n#sb-app .sb-panel{background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:18px;}\n#sb-app .sb-control{margin-bottom:14px;}\n#sb-app .sb-control label{display:block;font-size:13px;font-weight:600;color:#475569;margin-bottom:5px;}\n#sb-app .sb-control input[type=range]{width:100%;accent-color:#6366f1;}\n#sb-app .sb-control input[type=color]{width:48px;height:32px;border:1px solid #cbd5e1;border-radius:6px;cursor:pointer;padding:2px;}\n#sb-app .sb-color-row{display:flex;align-items:center;gap:10px;}\n#sb-app .sb-color-row input[type=text]{flex:1;padding:6px 10px;border:1px solid #cbd5e1;border-radius:6px;font-size:13px;font-family:monospace;}\n#sb-app .sb-select{width:100%;padding:7px 10px;border:1px solid #cbd5e1;border-radius:6px;font-size:13px;background:#fff;}\n#sb-app .sb-val{font-size:12px;color:#6366f1;font-weight:700;margin-left:6px;}\n#sb-app .sb-presets{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px;}\n#sb-app .sb-preset-btn{padding:7px 15px;border:1.5px solid #cbd5e1;border-radius:20px;font-size:13px;font-weight:600;cursor:pointer;background:#fff;color:#334155;transition:all .18s;}\n#sb-app .sb-preset-btn:hover{border-color:#6366f1;color:#6366f1;}\n#sb-app .sb-preset-btn.active{background:#6366f1;color:#fff;border-color:#6366f1;}\n#sb-app .sb-preview-wrap{margin-bottom:20px;}\n#sb-app .sb-preview-box{height:180px;overflow-y:scroll;border:1px solid #e2e8f0;border-radius:10px;padding:16px;background:#fff;font-size:14px;color:#475569;line-height:1.7;}\n#sb-app .sb-output-wrap{margin-bottom:20px;}\n#sb-app .sb-tabs{display:flex;gap:0;margin-bottom:0;}\n#sb-app .sb-tab{padding:8px 18px;font-size:13px;font-weight:600;cursor:pointer;border:1.5px solid #e2e8f0;border-bottom:none;border-radius:8px 8px 0 0;background:#f1f5f9;color:#64748b;transition:all .15s;}\n#sb-app .sb-tab.active{background:#1e293b;color:#fff;border-color:#1e293b;}\n#sb-app .sb-code-block{position:relative;background:#1e293b;border-radius:0 10px 10px 10px;padding:18px 16px;min-height:120px;overflow-x:auto;}\n#sb-app .sb-code-block pre{margin:0;font-family:'Fira Code','Cascadia Code',monospace;font-size:13px;line-height:1.7;white-space:pre-wrap;color:#e2e8f0;}\n#sb-app .sb-kw{color:#c084fc;}\n#sb-app .sb-prop{color:#67e8f9;}\n#sb-app .sb-val-c{color:#86efac;}\n#sb-app .sb-copy-btn{position:absolute;top:10px;right:10px;padding:6px 14px;background:#6366f1;color:#fff;border:none;border-radius:6px;font-size:12px;font-weight:700;cursor:pointer;transition:background .15s;}\n#sb-app .sb-copy-btn:hover{background:#4f46e5;}\n#sb-app .sb-copy-btn.copied{background:#10b981;}\n#sb-app .sb-scope-row{display:flex;align-items:center;gap:10px;margin-bottom:20px;padding:12px 16px;background:#fefce8;border:1px solid #fde68a;border-radius:8px;flex-wrap:wrap;}\n#sb-app .sb-scope-row label{font-size:13px;font-weight:600;color:#92400e;margin:0;}\n#sb-app .sb-scope-row input[type=text]{flex:1;min-width:120px;padding:6px 10px;border:1px solid #fcd34d;border-radius:6px;font-size:13px;font-family:monospace;background:#fff;}\n#sb-app .sb-compat{margin-top:20px;padding:14px 18px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:10px;}\n#sb-app .sb-compat h3{margin:0 0 8px;font-size:14px;font-weight:700;color:#166534;}\n#sb-app .sb-compat table{width:100%;border-collapse:collapse;font-size:13px;}\n#sb-app .sb-compat th{text-align:left;padding:4px 8px;color:#166534;font-weight:600;border-bottom:1px solid #bbf7d0;}\n#sb-app .sb-compat td{padding:4px 8px;color:#374151;}\n#sb-app .sb-compat .ok{color:#16a34a;font-weight:700;}\n#sb-app .sb-compat .no{color:#dc2626;font-weight:700;}\n#sb-app .sb-crosslinks{margin-top:24px;padding:14px 18px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;font-size:14px;}\n#sb-app .sb-crosslinks p{margin:4px 0;}\n#sb-app .sb-crosslinks a{color:#6366f1;text-decoration:none;font-weight:600;}\n#sb-app .sb-crosslinks a:hover{text-decoration:underline;}\n\u003c/style\u003e\n\u003c!-- ヘッダー --\u003e\n\u003cdiv style=\"margin-bottom:8px;\"\u003e\n  \u003ch2 style=\"font-size:1.25rem;margin-bottom:4px;\"\u003eCSSスクロールバー スタイラー\u003c/h2\u003e\n  \u003cp style=\"font-size:14px;color:#64748b;margin:0 0 14px;\"\u003eスクロールバーの幅・色・角丸・ホバー効果をカスタマイズして、即コピーできるCSSを生成します。\u003c/p\u003e","title":"CSSスクロールバー スタイラー"},{"content":"URLやテキスト、WiFi情報などをQRコードに変換できる無料ツールです。ブラウザ上で即座に生成でき、PNG・SVG形式でダウンロードも可能です。\nURL テキスト WiFi メール URL テキスト SSID（ネットワーク名） パスワード 暗号化方式 WPA/WPA2 WEP なし メールアドレス 件名 本文 サイズ: 300px 前景色 文字・モジュール色 背景色 背景色 QRコードを生成中... PNG ダウンロード SVG ダウンロード 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → URLをエンコード → URLエンコード・デコードツール Base64に変換 → Base64エンコーダー・デコーダー ダミー画像を作成 → プレースホルダー画像生成ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/qr-code-generator/","summary":"\u003cp\u003eURLやテキスト、WiFi情報などをQRコードに変換できる無料ツールです。ブラウザ上で即座に生成でき、PNG・SVG形式でダウンロードも可能です。\u003c/p\u003e\n\u003cdiv id=\"qr-app\"\u003e\n\u003cstyle\u003e\n#qr-app {\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  max-width: 680px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#qr-app * {\n  box-sizing: border-box;\n}\n#qr-app .qr-tabs {\n  display: flex;\n  gap: 6px;\n  margin-bottom: 18px;\n  flex-wrap: wrap;\n}\n#qr-app .qr-tab {\n  padding: 8px 18px;\n  border-radius: 7px;\n  border: 1.5px solid #cbd5e1;\n  background: #f8fafc;\n  color: #475569;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#qr-app .qr-tab:hover {\n  border-color: #94a3b8;\n  background: #f1f5f9;\n}\n#qr-app .qr-tab.active {\n  background: #0f172a;\n  color: #fff;\n  border-color: #0f172a;\n}\n#qr-app .qr-panel {\n  display: none;\n  flex-direction: column;\n  gap: 10px;\n  margin-bottom: 18px;\n}\n#qr-app .qr-panel.active {\n  display: flex;\n}\n#qr-app .qr-field-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #374151;\n  margin-bottom: 3px;\n  display: block;\n}\n#qr-app input[type=\"text\"],\n#qr-app input[type=\"email\"],\n#qr-app input[type=\"password\"],\n#qr-app textarea,\n#qr-app select {\n  width: 100%;\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 14px;\n  color: #1e293b;\n  background: #f8fafc;\n  outline: none;\n  transition: border-color 0.15s;\n  font-family: inherit;\n}\n#qr-app input[type=\"text\"]:focus,\n#qr-app input[type=\"email\"]:focus,\n#qr-app input[type=\"password\"]:focus,\n#qr-app textarea:focus,\n#qr-app select:focus {\n  border-color: #64748b;\n  background: #fff;\n}\n#qr-app textarea {\n  resize: vertical;\n  min-height: 80px;\n}\n#qr-app .qr-form-row {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n#qr-app .qr-customize {\n  background: #f1f5f9;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 18px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 18px;\n  align-items: flex-end;\n}\n#qr-app .qr-customize-group {\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n  min-width: 140px;\n  flex: 1;\n}\n#qr-app .qr-customize-group .qr-field-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #374151;\n}\n#qr-app input[type=\"range\"] {\n  width: 100%;\n  accent-color: #0f172a;\n}\n#qr-app .qr-size-val {\n  font-size: 13px;\n  color: #64748b;\n  font-weight: 600;\n}\n#qr-app .qr-color-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n#qr-app input[type=\"color\"] {\n  width: 38px;\n  height: 32px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  padding: 2px;\n  cursor: pointer;\n  background: #fff;\n}\n#qr-app .qr-preview-area {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 14px;\n  margin-bottom: 18px;\n}\n#qr-app #qr-canvas {\n  border-radius: 10px;\n  box-shadow: 0 2px 12px rgba(15,23,42,0.10);\n  display: block;\n  max-width: 100%;\n}\n#qr-app .qr-btn-row {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  justify-content: center;\n}\n#qr-app .qr-btn {\n  padding: 10px 24px;\n  border-radius: 8px;\n  border: none;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n  font-family: inherit;\n}\n#qr-app .qr-btn:active {\n  transform: scale(0.97);\n}\n#qr-app .qr-btn-secondary {\n  background: #e2e8f0;\n  color: #1e293b;\n}\n#qr-app .qr-btn-secondary:hover {\n  background: #cbd5e1;\n}\n#qr-app .qr-status {\n  font-size: 13px;\n  color: #64748b;\n  text-align: center;\n  min-height: 18px;\n}\n#qr-app .qr-error {\n  color: #dc2626;\n  font-size: 13px;\n  text-align: center;\n}\n@media (max-width: 480px) {\n  #qr-app .qr-customize {\n    flex-direction: column;\n  }\n  #qr-app .qr-btn {\n    width: 100%;\n    text-align: center;\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"qr-tabs\"\u003e\n  \u003cbutton class=\"qr-tab active\" data-tab=\"url\"\u003eURL\u003c/button\u003e\n  \u003cbutton class=\"qr-tab\" data-tab=\"text\"\u003eテキスト\u003c/button\u003e\n  \u003cbutton class=\"qr-tab\" data-tab=\"wifi\"\u003eWiFi\u003c/button\u003e\n  \u003cbutton class=\"qr-tab\" data-tab=\"email\"\u003eメール\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- URL パネル --\u003e\n\u003cdiv class=\"qr-panel active\" id=\"panel-url\"\u003e\n  \u003cdiv class=\"qr-form-row\"\u003e\n    \u003clabel class=\"qr-field-label\" for=\"qr-url\"\u003eURL\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"qr-url\" placeholder=\"https://example.com\" value=\"https://productivity-works.com\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- テキスト パネル --\u003e\n\u003cdiv class=\"qr-panel\" id=\"panel-text\"\u003e\n  \u003cdiv class=\"qr-form-row\"\u003e\n    \u003clabel class=\"qr-field-label\" for=\"qr-text\"\u003eテキスト\u003c/label\u003e\n    \u003ctextarea id=\"qr-text\" placeholder=\"ここにテキストを入力してください\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- WiFi パネル --\u003e\n\u003cdiv class=\"qr-panel\" id=\"panel-wifi\"\u003e\n  \u003cdiv class=\"qr-form-row\"\u003e\n    \u003clabel class=\"qr-field-label\" for=\"qr-wifi-ssid\"\u003eSSID（ネットワーク名）\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"qr-wifi-ssid\" placeholder=\"MyNetwork\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"qr-form-row\"\u003e\n    \u003clabel class=\"qr-field-label\" for=\"qr-wifi-pass\"\u003eパスワード\u003c/label\u003e\n    \u003cinput type=\"password\" id=\"qr-wifi-pass\" placeholder=\"パスワード\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"qr-form-row\"\u003e\n    \u003clabel class=\"qr-field-label\" for=\"qr-wifi-enc\"\u003e暗号化方式\u003c/label\u003e\n    \u003cselect id=\"qr-wifi-enc\"\u003e\n      \u003coption value=\"WPA\"\u003eWPA/WPA2\u003c/option\u003e\n      \u003coption value=\"WEP\"\u003eWEP\u003c/option\u003e\n      \u003coption value=\"nopass\"\u003eなし\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- メール パネル --\u003e\n\u003cdiv class=\"qr-panel\" id=\"panel-email\"\u003e\n  \u003cdiv class=\"qr-form-row\"\u003e\n    \u003clabel class=\"qr-field-label\" for=\"qr-email-to\"\u003eメールアドレス\u003c/label\u003e\n    \u003cinput type=\"email\" id=\"qr-email-to\" placeholder=\"example@example.com\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"qr-form-row\"\u003e\n    \u003clabel class=\"qr-field-label\" for=\"qr-email-subj\"\u003e件名\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"qr-email-subj\" placeholder=\"件名\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"qr-form-row\"\u003e\n    \u003clabel class=\"qr-field-label\" for=\"qr-email-body\"\u003e本文\u003c/label\u003e\n    \u003ctextarea id=\"qr-email-body\" placeholder=\"メール本文\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- カスタマイズ --\u003e\n\u003cdiv class=\"qr-customize\"\u003e\n  \u003cdiv class=\"qr-customize-group\"\u003e\n    \u003clabel class=\"qr-field-label\"\u003eサイズ: \u003cspan class=\"qr-size-val\" id=\"qr-size-label\"\u003e300px\u003c/span\u003e\u003c/label\u003e\n    \u003cinput type=\"range\" id=\"qr-size\" min=\"200\" max=\"600\" step=\"10\" value=\"300\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"qr-customize-group\"\u003e\n    \u003clabel class=\"qr-field-label\"\u003e前景色\u003c/label\u003e\n    \u003cdiv class=\"qr-color-row\"\u003e\n      \u003cinput type=\"color\" id=\"qr-fg\" value=\"#000000\"\u003e\n      \u003cspan style=\"font-size:13px;color:#64748b;\"\u003e文字・モジュール色\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"qr-customize-group\"\u003e\n    \u003clabel class=\"qr-field-label\"\u003e背景色\u003c/label\u003e\n    \u003cdiv class=\"qr-color-row\"\u003e\n      \u003cinput type=\"color\" id=\"qr-bg\" value=\"#ffffff\"\u003e\n      \u003cspan style=\"font-size:13px;color:#64748b;\"\u003e背景色\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- プレビュー --\u003e\n\u003cdiv class=\"qr-preview-area\"\u003e\n  \u003ccanvas id=\"qr-canvas\" width=\"300\" height=\"300\"\u003e\u003c/canvas\u003e\n  \u003cdiv class=\"qr-status\" id=\"qr-status\"\u003eQRコードを生成中...\u003c/div\u003e\n  \u003cdiv class=\"qr-btn-row\"\u003e\n    \u003cbutton class=\"qr-btn qr-btn-secondary\" id=\"btn-png\"\u003ePNG ダウンロード\u003c/button\u003e\n    \u003cbutton class=\"qr-btn qr-btn-secondary\" id=\"btn-svg\"\u003eSVG ダウンロード\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"QRコードジェネレーター｜URL・テキストからQRコードを無料作成"},{"content":"ウェブサイト用のファビコンを数秒で作成できます。テキスト・絵文字・画像アップロードから選んで、すぐにPNGファイルをダウンロード。HTMLスニペットもコピーできます。\nテキスト / 図形 絵文字 画像アップロード 文字（1〜2文字） フォントサイズ 36 フォントウェイト ボールド ブラック（900） レギュラー 形状 円形 角丸 正方形 背景色 文字色 絵文字を選択 または入力： 背景色 形状 円形 角丸 正方形 \u0026#128444; クリックまたはドラッグ＆ドロップで画像を追加\nPNG・JPG・GIF・SVG・WebP 対応\n切り抜き / スケール調整 100% 横位置 (X) 縦位置 (Y) リアルタイムプレビュー 64×64（編集用） 32×32 16×16 \u0026#8615; 32×32 PNG をダウンロード \u0026#8615; 16×16 PNG をダウンロード \u0026#8615; 64×64 PNG をダウンロード \u0026lt;head\u0026gt; に貼り付けるHTMLタグ\nコピー クリップボードにコピーしました！\n\u0026#128176; スモールビジネスの会計・請求書管理はfreeeで ファビコンができたら次はサイトのビジネス基盤を整えましょう。freeeなら請求書の発行・経費管理・確定申告まで一括管理。はじめての方も安心のサポート付き。\nfreeeを無料で試してみる \u0026rarr; 関連ツール Image Color Picker → Image Color Pickerツール 画像圧縮 → 画像圧縮ツール Image Cropper → Image Cropperツール ","permalink":"https://productivity-works.com/ja/tools/favicon-generator/","summary":"\u003cp\u003eウェブサイト用のファビコンを数秒で作成できます。テキスト・絵文字・画像アップロードから選んで、すぐにPNGファイルをダウンロード。HTMLスニペットもコピーできます。\u003c/p\u003e\n\u003cdiv id=\"fav-app\"\u003e\n\u003cstyle\u003e\n#fav-app *,\n#fav-app *::before,\n#fav-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n#fav-app {\n  font-family: system-ui, -apple-system, 'Hiragino Kaku Gothic ProN', 'Meiryo', sans-serif;\n  max-width: 780px;\n  color: #1e1b2e;\n}\n\n#fav-app .fav-tabs {\n  display: flex;\n  gap: 4px;\n  margin-bottom: 24px;\n  background: #f3f0ff;\n  padding: 4px;\n  border-radius: 10px;\n}\n\n#fav-app .fav-tab {\n  flex: 1;\n  padding: 9px 12px;\n  border: none;\n  background: transparent;\n  border-radius: 7px;\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  color: #6b6b8a;\n  transition: background 0.15s, color 0.15s;\n}\n\n#fav-app .fav-tab.active {\n  background: #7c3aed;\n  color: #fff;\n}\n\n#fav-app .fav-panel { display: none; }\n#fav-app .fav-panel.active { display: block; }\n\n#fav-app .fav-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 16px;\n}\n\n@media (max-width: 540px) {\n  #fav-app .fav-grid { grid-template-columns: 1fr; }\n  #fav-app .fav-tabs { flex-direction: column; }\n}\n\n#fav-app label {\n  display: block;\n  font-size: 13px;\n  font-weight: 600;\n  color: #4b4569;\n  margin-bottom: 6px;\n}\n\n#fav-app input[type=\"text\"],\n#fav-app input[type=\"number\"],\n#fav-app select,\n#fav-app textarea {\n  width: 100%;\n  padding: 9px 11px;\n  border: 1.5px solid #d4c9f8;\n  border-radius: 8px;\n  font-size: 15px;\n  background: #faf9ff;\n  color: #1e1b2e;\n  outline: none;\n  transition: border-color 0.15s;\n}\n\n#fav-app input[type=\"text\"]:focus,\n#fav-app input[type=\"number\"]:focus,\n#fav-app select:focus,\n#fav-app textarea:focus {\n  border-color: #7c3aed;\n}\n\n#fav-app input[type=\"color\"] {\n  width: 48px;\n  height: 38px;\n  border: 1.5px solid #d4c9f8;\n  border-radius: 8px;\n  padding: 2px;\n  cursor: pointer;\n  background: #faf9ff;\n}\n\n#fav-app .color-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n#fav-app .color-row input[type=\"text\"] {\n  flex: 1;\n  font-family: monospace;\n}\n\n#fav-app .shape-row {\n  display: flex;\n  gap: 8px;\n}\n\n#fav-app .shape-btn {\n  flex: 1;\n  padding: 8px 4px;\n  border: 1.5px solid #d4c9f8;\n  border-radius: 8px;\n  background: #faf9ff;\n  font-size: 13px;\n  cursor: pointer;\n  color: #4b4569;\n  font-weight: 500;\n  transition: border-color 0.15s, background 0.15s, color 0.15s;\n}\n\n#fav-app .shape-btn.active {\n  border-color: #7c3aed;\n  background: #ede9fe;\n  color: #7c3aed;\n}\n\n#fav-app .preview-section {\n  background: #f8f6ff;\n  border: 1.5px solid #e0d8fc;\n  border-radius: 12px;\n  padding: 20px;\n  margin-bottom: 20px;\n  text-align: center;\n}\n\n#fav-app .preview-section h3 {\n  font-size: 13px;\n  font-weight: 600;\n  color: #6b6b8a;\n  margin-bottom: 16px;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n\n#fav-app .preview-canvases {\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  gap: 24px;\n  flex-wrap: wrap;\n}\n\n#fav-app .preview-item {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 6px;\n}\n\n#fav-app .preview-item span {\n  font-size: 12px;\n  color: #9490b2;\n}\n\n#fav-app canvas {\n  image-rendering: pixelated;\n  border-radius: 4px;\n  box-shadow: 0 1px 4px rgba(124,58,237,0.12);\n  background: transparent;\n}\n\n#fav-app .fav-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 10px 20px;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: opacity 0.15s, transform 0.1s;\n  text-decoration: none;\n}\n\n#fav-app .fav-btn:active { transform: scale(0.97); }\n\n#fav-app .btn-primary {\n  background: #7c3aed;\n  color: #fff;\n}\n\n#fav-app .btn-secondary {\n  background: #ede9fe;\n  color: #7c3aed;\n}\n\n#fav-app .btn-primary:hover { opacity: 0.88; }\n#fav-app .btn-secondary:hover { opacity: 0.80; }\n\n#fav-app .download-row {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  margin-bottom: 20px;\n}\n\n#fav-app .meta-section {\n  background: #1e1b2e;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 8px;\n  position: relative;\n}\n\n#fav-app .meta-section pre {\n  color: #c4b5fd;\n  font-size: 13px;\n  line-height: 1.6;\n  white-space: pre-wrap;\n  word-break: break-all;\n  font-family: 'Menlo', 'Consolas', monospace;\n}\n\n#fav-app .copy-btn {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  padding: 5px 12px;\n  background: #7c3aed;\n  color: #fff;\n  border: none;\n  border-radius: 6px;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n}\n\n#fav-app .copy-btn:hover { opacity: 0.85; }\n\n#fav-app .upload-zone {\n  border: 2px dashed #c4b5fd;\n  border-radius: 10px;\n  padding: 32px 16px;\n  text-align: center;\n  cursor: pointer;\n  background: #faf9ff;\n  margin-bottom: 16px;\n  transition: background 0.15s, border-color 0.15s;\n}\n\n#fav-app .upload-zone:hover,\n#fav-app .upload-zone.dragover {\n  background: #ede9fe;\n  border-color: #7c3aed;\n}\n\n#fav-app .upload-zone p {\n  font-size: 14px;\n  color: #6b6b8a;\n  margin-top: 8px;\n}\n\n#fav-app .upload-icon {\n  font-size: 36px;\n  line-height: 1;\n}\n\n#fav-app .emoji-grid {\n  display: grid;\n  grid-template-columns: repeat(8, 1fr);\n  gap: 6px;\n  margin-bottom: 12px;\n  max-height: 200px;\n  overflow-y: auto;\n  padding: 4px;\n}\n\n#fav-app .emoji-btn {\n  font-size: 22px;\n  background: #faf9ff;\n  border: 1.5px solid #e0d8fc;\n  border-radius: 7px;\n  padding: 4px;\n  cursor: pointer;\n  text-align: center;\n  line-height: 1.4;\n  transition: background 0.1s, border-color 0.1s;\n}\n\n#fav-app .emoji-btn:hover { background: #ede9fe; border-color: #7c3aed; }\n#fav-app .emoji-btn.active { background: #7c3aed; border-color: #7c3aed; }\n\n#fav-app .emoji-custom {\n  display: flex;\n  gap: 10px;\n  align-items: center;\n  margin-bottom: 16px;\n}\n\n#fav-app .emoji-custom input {\n  font-size: 22px;\n  width: 60px;\n  text-align: center;\n}\n\n#fav-app .section-divider {\n  border: none;\n  border-top: 1.5px solid #e0d8fc;\n  margin: 20px 0;\n}\n\n#fav-app .info-text {\n  font-size: 13px;\n  color: #9490b2;\n  margin-bottom: 14px;\n}\n\n#fav-app .fav-field { margin-bottom: 14px; }\n\n#fav-app .range-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n#fav-app .range-row input[type=\"range\"] {\n  flex: 1;\n  accent-color: #7c3aed;\n}\n\n#fav-app .range-val {\n  font-size: 14px;\n  font-weight: 600;\n  color: #7c3aed;\n  min-width: 28px;\n  text-align: right;\n}\n\n#fav-app .freee-cta {\n  margin-top: 28px;\n  background: linear-gradient(135deg, #f0edff 0%, #e8f4ff 100%);\n  border: 1.5px solid #c4b5fd;\n  border-radius: 12px;\n  padding: 20px 24px;\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  flex-wrap: wrap;\n}\n\n#fav-app .freee-cta-text h4 {\n  font-size: 15px;\n  font-weight: 700;\n  color: #1e1b2e;\n  margin-bottom: 4px;\n}\n\n#fav-app .freee-cta-text p {\n  font-size: 13px;\n  color: #4b4569;\n  line-height: 1.5;\n}\n\n#fav-app .freee-cta-icon {\n  font-size: 32px;\n  flex-shrink: 0;\n}\n\n#fav-app .freee-btn {\n  display: inline-block;\n  margin-top: 10px;\n  padding: 9px 20px;\n  background: #7c3aed;\n  color: #fff;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 700;\n  text-decoration: none;\n  transition: opacity 0.15s;\n}\n\n#fav-app .freee-btn:hover { opacity: 0.85; }\n\u003c/style\u003e\n\u003cdiv class=\"fav-tabs\"\u003e\n  \u003cbutton class=\"fav-tab active\" onclick=\"favJaSwitchTab('text', this)\"\u003eテキスト / 図形\u003c/button\u003e\n  \u003cbutton class=\"fav-tab\" onclick=\"favJaSwitchTab('emoji', this)\"\u003e絵文字\u003c/button\u003e\n  \u003cbutton class=\"fav-tab\" onclick=\"favJaSwitchTab('upload', this)\"\u003e画像アップロード\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- テキストタブ --\u003e\n\u003cdiv id=\"favja-panel-text\" class=\"fav-panel active\"\u003e\n  \u003cdiv class=\"fav-grid\"\u003e\n    \u003cdiv\u003e\n      \u003cdiv class=\"fav-field\"\u003e\n        \u003clabel for=\"favja-text\"\u003e文字（1〜2文字）\u003c/label\u003e\n        \u003cinput type=\"text\" id=\"favja-text\" maxlength=\"2\" value=\"FV\" oninput=\"favJaRender()\"\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"fav-field\"\u003e\n        \u003clabel\u003eフォントサイズ\u003c/label\u003e\n        \u003cdiv class=\"range-row\"\u003e\n          \u003cinput type=\"range\" id=\"favja-fontsize\" min=\"14\" max=\"52\" value=\"36\" oninput=\"favJaRender(); document.getElementById('favja-fontsize-val').textContent=this.value\"\u003e\n          \u003cspan class=\"range-val\" id=\"favja-fontsize-val\"\u003e36\u003c/span\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"fav-field\"\u003e\n        \u003clabel\u003eフォントウェイト\u003c/label\u003e\n        \u003cselect id=\"favja-fontweight\" onchange=\"favJaRender()\"\u003e\n          \u003coption value=\"700\" selected\u003eボールド\u003c/option\u003e\n          \u003coption value=\"900\"\u003eブラック（900）\u003c/option\u003e\n          \u003coption value=\"400\"\u003eレギュラー\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003cdiv class=\"fav-field\"\u003e\n        \u003clabel\u003e形状\u003c/label\u003e\n        \u003cdiv class=\"shape-row\"\u003e\n          \u003cbutton class=\"shape-btn active\" onclick=\"favJaSetShape('circle', this)\"\u003e円形\u003c/button\u003e\n          \u003cbutton class=\"shape-btn\" onclick=\"favJaSetShape('rounded', this)\"\u003e角丸\u003c/button\u003e\n          \u003cbutton class=\"shape-btn\" onclick=\"favJaSetShape('square', this)\"\u003e正方形\u003c/button\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"fav-field\"\u003e\n        \u003clabel\u003e背景色\u003c/label\u003e\n        \u003cdiv class=\"color-row\"\u003e\n          \u003cinput type=\"color\" id=\"favja-bg\" value=\"#7c3aed\" oninput=\"favJaSyncColor('bg')\"\u003e\n          \u003cinput type=\"text\" id=\"favja-bg-hex\" value=\"#7c3aed\" maxlength=\"7\" oninput=\"favJaSyncHex('bg')\"\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"fav-field\"\u003e\n        \u003clabel\u003e文字色\u003c/label\u003e\n        \u003cdiv class=\"color-row\"\u003e\n          \u003cinput type=\"color\" id=\"favja-fg\" value=\"#ffffff\" oninput=\"favJaSyncColor('fg')\"\u003e\n          \u003cinput type=\"text\" id=\"favja-fg-hex\" value=\"#ffffff\" maxlength=\"7\" oninput=\"favJaSyncHex('fg')\"\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 絵文字タブ --\u003e\n\u003cdiv id=\"favja-panel-emoji\" class=\"fav-panel\"\u003e\n  \u003cdiv class=\"fav-field\"\u003e\n    \u003clabel\u003e絵文字を選択\u003c/label\u003e\n    \u003cdiv class=\"emoji-grid\" id=\"favja-emoji-grid\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"emoji-custom\"\u003e\n    \u003clabel style=\"white-space:nowrap; margin:0;\"\u003eまたは入力：\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"favja-emoji-custom\" maxlength=\"4\" placeholder=\"例: 🚀\" style=\"width:70px; font-size:22px; text-align:center;\" oninput=\"favJaSetEmojiCustom(this.value)\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"fav-field\"\u003e\n    \u003clabel\u003e背景色\u003c/label\u003e\n    \u003cdiv class=\"color-row\"\u003e\n      \u003cinput type=\"color\" id=\"favja-emoji-bg\" value=\"#7c3aed\" oninput=\"favJaSyncEmojiColor()\"\u003e\n      \u003cinput type=\"text\" id=\"favja-emoji-bg-hex\" value=\"#7c3aed\" maxlength=\"7\" oninput=\"favJaSyncEmojiHex()\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"fav-field\"\u003e\n    \u003clabel\u003e形状\u003c/label\u003e\n    \u003cdiv class=\"shape-row\"\u003e\n      \u003cbutton class=\"shape-btn active\" id=\"favja-emoji-shape-circle\" onclick=\"favJaSetEmojiShape('circle', this)\"\u003e円形\u003c/button\u003e\n      \u003cbutton class=\"shape-btn\" id=\"favja-emoji-shape-rounded\" onclick=\"favJaSetEmojiShape('rounded', this)\"\u003e角丸\u003c/button\u003e\n      \u003cbutton class=\"shape-btn\" id=\"favja-emoji-shape-square\" onclick=\"favJaSetEmojiShape('square', this)\"\u003e正方形\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- アップロードタブ --\u003e\n\u003cdiv id=\"favja-panel-upload\" class=\"fav-panel\"\u003e\n  \u003cdiv class=\"upload-zone\" id=\"favja-upload-zone\" onclick=\"document.getElementById('favja-file-input').click()\" ondragover=\"favJaDragOver(event)\" ondragleave=\"favJaDragLeave(event)\" ondrop=\"favJaDrop(event)\"\u003e\n    \u003cdiv class=\"upload-icon\"\u003e\u0026#128444;\u003c/div\u003e\n    \u003cp\u003eクリックまたはドラッグ＆ドロップで画像を追加\u003c/p\u003e","title":"ファビコンジェネレーター — 無料オンラインツール"},{"content":" ローン返済 → ローン返済シミュレーター 貯金目標 → 貯金目標計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\nローン比較計算ツール ローン A ローン名 借入金額（円） 年利（%） 返済期間（年） ローン B ローン名 借入金額（円） 年利（%） 返済期間（年） ローン C（任意） ローン名 借入金額（円） 年利（%） 返済期間（年） 比較する リセット 比較結果 コスト比較グラフ 返済スケジュール 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。 freeeを無料で試す \u0026rarr; 関連ツール 借金返済計算 → 借金返済計算ツール 住宅ローン借入可能額 → 住宅ローン借入可能額ツール 住宅ローン計算 → 住宅ローン計算ツール ","permalink":"https://productivity-works.com/ja/tools/loan-comparison/","summary":"\u003cblockquote\u003e\n\u003cp\u003eローン返済 → \u003ca href=\"https://productivity-works.com/ja/tools/loan-emi-calculator/\"\u003eローン返済シミュレーター\u003c/a\u003e\n\n貯金目標 → \u003ca href=\"https://productivity-works.com/ja/tools/savings-goal-calculator/\"\u003e貯金目標計算ツール\u003c/a\u003e\n\u003c/p\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e確定申告・会計をもっとラクに？\u003c/strong\u003e \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計\u003c/a\u003e\n なら、フリーランスの経費管理もクラウドで簡単。\u003c/p\u003e\u003c/blockquote\u003e\n\u003cdiv id=\"lc-app\"\u003e\n\u003cstyle\u003e\n#lc-app *,#lc-app *::before,#lc-app *::after{box-sizing:border-box;margin:0;padding:0}\n#lc-app{font-family:-apple-system,BlinkMacSystemFont,'Hiragino Kaku Gothic ProN','Yu Gothic',Meiryo,sans-serif;font-size:15px;color:#1e293b;max-width:900px;margin:0 auto;padding:16px}\n#lc-app h2{font-size:1.25rem;font-weight:700;margin-bottom:16px;color:#0f172a}\n#lc-app h3{font-size:1rem;font-weight:700;margin-bottom:10px;color:#0f172a}\n#lc-app .lc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-bottom:20px}\n#lc-app .lc-card{background:#f8fafc;border:1.5px solid #e2e8f0;border-radius:10px;padding:16px}\n#lc-app .lc-card.winner{border-color:#22c55e;background:#f0fdf4}\n#lc-app .lc-card-title{font-size:0.9rem;font-weight:700;margin-bottom:12px;color:#475569;display:flex;align-items:center;gap:6px}\n#lc-app .lc-badge{font-size:11px;padding:2px 8px;border-radius:20px;font-weight:700;background:#22c55e;color:#fff}\n#lc-app label{display:block;font-size:12px;font-weight:600;color:#64748b;margin-bottom:4px;margin-top:10px}\n#lc-app label:first-of-type{margin-top:0}\n#lc-app input[type=number],#lc-app input[type=text]{width:100%;padding:8px 10px;border:1.5px solid #cbd5e1;border-radius:7px;font-size:14px;color:#1e293b;background:#fff;transition:border-color .2s}\n#lc-app input[type=number]:focus,#lc-app input[type=text]:focus{outline:none;border-color:#3b82f6}\n#lc-app .lc-btn{display:inline-block;padding:10px 28px;background:#3b82f6;color:#fff;border:none;border-radius:8px;font-size:15px;font-weight:700;cursor:pointer;transition:background .2s;margin-right:8px}\n#lc-app .lc-btn:hover{background:#2563eb}\n#lc-app .lc-btn-reset{background:#94a3b8}\n#lc-app .lc-btn-reset:hover{background:#64748b}\n#lc-app .lc-actions{margin-bottom:24px}\n#lc-app .lc-results{margin-top:8px}\n#lc-app .lc-compare-table{width:100%;border-collapse:collapse;font-size:14px;margin-bottom:24px}\n#lc-app .lc-compare-table th{background:#1e293b;color:#fff;padding:10px 12px;text-align:left;font-weight:600;font-size:13px}\n#lc-app .lc-compare-table td{padding:9px 12px;border-bottom:1px solid #e2e8f0}\n#lc-app .lc-compare-table tr:nth-child(even) td{background:#f8fafc}\n#lc-app .lc-compare-table .winner-col{background:#f0fdf4!important;font-weight:700;color:#15803d}\n#lc-app .lc-chart-wrap{margin-bottom:24px}\n#lc-app canvas{display:block;max-width:100%;border-radius:10px;background:#f8fafc;border:1.5px solid #e2e8f0;padding:12px}\n#lc-app .lc-amort-wrap{margin-bottom:20px}\n#lc-app .lc-amort-wrap details{margin-bottom:10px}\n#lc-app .lc-amort-wrap summary{cursor:pointer;font-weight:700;font-size:13px;padding:8px 12px;background:#f1f5f9;border:1.5px solid #e2e8f0;border-radius:8px;list-style:none;display:flex;align-items:center;justify-content:space-between}\n#lc-app .lc-amort-wrap summary::-webkit-details-marker{display:none}\n#lc-app .lc-amort-wrap summary::after{content:'▼';font-size:11px;color:#94a3b8}\n#lc-app details[open] summary::after{content:'▲'}\n#lc-app .lc-amort-table{width:100%;border-collapse:collapse;font-size:13px;margin-top:8px}\n#lc-app .lc-amort-table th{background:#475569;color:#fff;padding:7px 10px;text-align:right;font-size:12px}\n#lc-app .lc-amort-table th:first-child{text-align:center}\n#lc-app .lc-amort-table td{padding:6px 10px;border-bottom:1px solid #f1f5f9;text-align:right}\n#lc-app .lc-amort-table td:first-child{text-align:center;font-weight:600;color:#64748b}\n#lc-app .lc-amort-table tr:nth-child(even) td{background:#f8fafc}\n#lc-app .lc-hidden{display:none}\n#lc-app .lc-loan-toggle{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:13px;font-weight:600;color:#64748b}\n#lc-app .lc-loan-toggle input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:#3b82f6}\n#lc-app .lc-num{font-variant-numeric:tabular-nums}\n@media(max-width:600px){\n  #lc-app .lc-compare-table{font-size:12px}\n  #lc-app .lc-compare-table th,#lc-app .lc-compare-table td{padding:7px 8px}\n  #lc-app .lc-btn{padding:9px 18px;font-size:14px}\n}\n\u003c/style\u003e\n\u003ch2\u003eローン比較計算ツール\u003c/h2\u003e\n\u003cdiv class=\"lc-grid\" id=\"lc-inputs\"\u003e\n  \u003cdiv class=\"lc-card\" id=\"card-0\"\u003e\n    \u003cdiv class=\"lc-card-title\"\u003eローン A\u003c/div\u003e\n    \u003clabel\u003eローン名\u003c/label\u003e\n    \u003cinput type=\"text\" class=\"lc-name\" data-i=\"0\" value=\"ローン A\" placeholder=\"例：A銀行\"\u003e\n    \u003clabel\u003e借入金額（円）\u003c/label\u003e\n    \u003cinput type=\"number\" class=\"lc-principal\" data-i=\"0\" value=\"20000000\" min=\"0\" step=\"100000\"\u003e\n    \u003clabel\u003e年利（%）\u003c/label\u003e\n    \u003cinput type=\"number\" class=\"lc-rate\" data-i=\"0\" value=\"1.5\" min=\"0\" step=\"0.01\"\u003e\n    \u003clabel\u003e返済期間（年）\u003c/label\u003e\n    \u003cinput type=\"number\" class=\"lc-term\" data-i=\"0\" value=\"35\" min=\"1\" max=\"50\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"lc-card\" id=\"card-1\"\u003e\n    \u003cdiv class=\"lc-card-title\"\u003eローン B\u003c/div\u003e\n    \u003clabel\u003eローン名\u003c/label\u003e\n    \u003cinput type=\"text\" class=\"lc-name\" data-i=\"1\" value=\"ローン B\" placeholder=\"例：B銀行\"\u003e\n    \u003clabel\u003e借入金額（円）\u003c/label\u003e\n    \u003cinput type=\"number\" class=\"lc-principal\" data-i=\"1\" value=\"20000000\" min=\"0\" step=\"100000\"\u003e\n    \u003clabel\u003e年利（%）\u003c/label\u003e\n    \u003cinput type=\"number\" class=\"lc-rate\" data-i=\"1\" value=\"1.2\" min=\"0\" step=\"0.01\"\u003e\n    \u003clabel\u003e返済期間（年）\u003c/label\u003e\n    \u003cinput type=\"number\" class=\"lc-term\" data-i=\"1\" value=\"35\" min=\"1\" max=\"50\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"lc-card\" id=\"card-2\"\u003e\n    \u003cdiv class=\"lc-card-title\"\u003e\n      \u003clabel class=\"lc-loan-toggle\" style=\"margin:0\"\u003e\n        \u003cinput type=\"checkbox\" id=\"lc-enable2\"\u003e ローン C（任意）\n      \u003c/label\u003e\n    \u003c/div\u003e\n    \u003cdiv id=\"lc-inputs2\"\u003e\n      \u003clabel\u003eローン名\u003c/label\u003e\n      \u003cinput type=\"text\" class=\"lc-name\" data-i=\"2\" value=\"ローン C\" placeholder=\"例：C銀行\"\u003e\n      \u003clabel\u003e借入金額（円）\u003c/label\u003e\n      \u003cinput type=\"number\" class=\"lc-principal\" data-i=\"2\" value=\"20000000\" min=\"0\" step=\"100000\"\u003e\n      \u003clabel\u003e年利（%）\u003c/label\u003e\n      \u003cinput type=\"number\" class=\"lc-rate\" data-i=\"2\" value=\"1.8\" min=\"0\" step=\"0.01\"\u003e\n      \u003clabel\u003e返済期間（年）\u003c/label\u003e\n      \u003cinput type=\"number\" class=\"lc-term\" data-i=\"2\" value=\"30\" min=\"1\" max=\"50\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"lc-actions\"\u003e\n  \u003cbutton class=\"lc-btn\" id=\"lc-calc-btn\"\u003e比較する\u003c/button\u003e\n  \u003cbutton class=\"lc-btn lc-btn-reset\" id=\"lc-reset-btn\"\u003eリセット\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"lc-results lc-hidden\" id=\"lc-results\"\u003e\n  \u003ch3\u003e比較結果\u003c/h3\u003e\n  \u003cdiv style=\"overflow-x:auto;margin-bottom:24px\"\u003e\n    \u003ctable class=\"lc-compare-table\" id=\"lc-compare-table\"\u003e\u003c/table\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"lc-chart-wrap\"\u003e\n    \u003ch3\u003eコスト比較グラフ\u003c/h3\u003e\n    \u003ccanvas id=\"lc-chart\" height=\"260\"\u003e\u003c/canvas\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"lc-amort-wrap\" id=\"lc-amort-wrap\"\u003e\n    \u003ch3\u003e返済スケジュール\u003c/h3\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  var CURRENCY = '¥';\n  var enable2 = document.getElementById('lc-enable2');\n  var inputs2 = document.getElementById('lc-inputs2');\n  inputs2.style.opacity = '0.4';\n  inputs2.style.pointerEvents = 'none';\n  enable2.addEventListener('change', function(){\n    inputs2.style.opacity = enable2.checked ? '1' : '0.4';\n    inputs2.style.pointerEvents = enable2.checked ? '' : 'none';\n  });\n\n  function fmt(n){\n    return CURRENCY + Math.round(n).toLocaleString('ja-JP');\n  }\n  function fmtN(n){\n    return n.toLocaleString('ja-JP', {minimumFractionDigits:2, maximumFractionDigits:2});\n  }\n\n  function calcLoan(principal, annualRate, years){\n    var n = years * 12;\n    var r = annualRate / 100 / 12;\n    var monthly;\n    if(r === 0){\n      monthly = principal / n;\n    } else {\n      monthly = principal * r * Math.pow(1+r, n) / (Math.pow(1+r, n) - 1);\n    }\n    var totalPaid = monthly * n;\n    var totalInterest = totalPaid - principal;\n    return {monthly: monthly, totalPaid: totalPaid, totalInterest: totalInterest, n: n, r: r, principal: principal};\n  }\n\n  function buildAmortization(loan){\n    var rows = [];\n    var balance = loan.principal;\n    var n = loan.n;\n    var r = loan.r;\n    var monthly = loan.monthly;\n    for(var i = 1; i \u003c= n; i++){\n      var interest = balance * r;\n      var princ = monthly - interest;\n      balance -= princ;\n      if(balance \u003c 0) balance = 0;\n      rows.push({month: i, payment: monthly, principal: princ, interest: interest, balance: balance});\n    }\n    return rows;\n  }\n\n  function renderAmortTable(rows, name, id){\n    var html = '\u003cdetails id=\"amort-'+id+'\"\u003e\u003csummary\u003e'+name+' — 返済スケジュール（全'+rows.length+'回払い）\u003c/summary\u003e';\n    html += '\u003cdiv style=\"overflow-x:auto\"\u003e\u003ctable class=\"lc-amort-table\"\u003e\u003cthead\u003e\u003ctr\u003e';\n    html += '\u003cth\u003e回数\u003c/th\u003e\u003cth\u003e月額返済\u003c/th\u003e\u003cth\u003e元金\u003c/th\u003e\u003cth\u003e利息\u003c/th\u003e\u003cth\u003e残高\u003c/th\u003e';\n    html += '\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e';\n    var showAll = rows.length \u003c= 60;\n    var limit = showAll ? rows.length : 24;\n    for(var i = 0; i \u003c limit; i++){\n      var row = rows[i];\n      html += '\u003ctr\u003e\u003ctd\u003e'+row.month+'回\u003c/td\u003e\u003ctd\u003e'+fmt(row.payment)+'\u003c/td\u003e\u003ctd\u003e'+fmt(row.principal)+'\u003c/td\u003e\u003ctd\u003e'+fmt(row.interest)+'\u003c/td\u003e\u003ctd\u003e'+fmt(row.balance)+'\u003c/td\u003e\u003c/tr\u003e';\n    }\n    if(!showAll){\n      html += '\u003ctr\u003e\u003ctd colspan=\"5\" style=\"text-align:center;color:#94a3b8;font-style:italic;padding:10px\"\u003e… 残り'+(rows.length - 24)+'回分（全'+rows.length+'回中、最初の24回を表示）\u003c/td\u003e\u003c/tr\u003e';\n      var last = rows[rows.length-1];\n      html += '\u003ctr\u003e\u003ctd\u003e'+last.month+'回\u003c/td\u003e\u003ctd\u003e'+fmt(last.payment)+'\u003c/td\u003e\u003ctd\u003e'+fmt(last.principal)+'\u003c/td\u003e\u003ctd\u003e'+fmt(last.interest)+'\u003c/td\u003e\u003ctd\u003e'+fmt(last.balance)+'\u003c/td\u003e\u003c/tr\u003e';\n    }\n    html += '\u003c/tbody\u003e\u003c/table\u003e\u003c/div\u003e\u003c/details\u003e';\n    return html;\n  }\n\n  function drawChart(results){\n    var canvas = document.getElementById('lc-chart');\n    var dpr = window.devicePixelRatio || 1;\n    var W = canvas.parentElement.clientWidth - 24;\n    var H = 260;\n    canvas.width = W * dpr;\n    canvas.height = H * dpr;\n    canvas.style.width = W + 'px';\n    canvas.style.height = H + 'px';\n    var ctx = canvas.getContext('2d');\n    ctx.scale(dpr, dpr);\n\n    var pad = {top: 30, right: 20, bottom: 50, left: 90};\n    var n = results.length;\n    var maxVal = 0;\n    results.forEach(function(r){ if(r.totalPaid \u003e maxVal) maxVal = r.totalPaid; });\n    maxVal = maxVal * 1.1;\n\n    var colors = {principal: '#3b82f6', interest: '#f59e0b'};\n    var barW = Math.floor(((W - pad.left - pad.right) / n) * 0.55);\n    var gap = (W - pad.left - pad.right - barW * n) / (n + 1);\n    var chartH = H - pad.top - pad.bottom;\n\n    ctx.clearRect(0, 0, W, H);\n    ctx.fillStyle = '#f8fafc';\n    ctx.fillRect(0, 0, W, H);\n\n    var steps = 4;\n    ctx.strokeStyle = '#e2e8f0';\n    ctx.lineWidth = 1;\n    for(var s = 0; s \u003c= steps; s++){\n      var y = pad.top + chartH - (s / steps) * chartH;\n      ctx.beginPath(); ctx.moveTo(pad.left, y); ctx.lineTo(W - pad.right, y); ctx.stroke();\n      ctx.fillStyle = '#94a3b8';\n      ctx.font = '11px sans-serif';\n      ctx.textAlign = 'right';\n      var labelVal = maxVal * s / steps;\n      var labelStr = labelVal \u003e= 10000000 ? (labelVal/10000).toFixed(0)+'万円' : CURRENCY + Math.round(labelVal).toLocaleString('ja-JP');\n      ctx.fillText(labelStr, pad.left - 4, y + 4);\n    }\n\n    results.forEach(function(r, i){\n      var x = pad.left + gap + i * (barW + gap);\n      var pxH = (r.principal / maxVal) * chartH;\n      var inH = (r.totalInterest / maxVal) * chartH;\n      var totalH = pxH + inH;\n      var baseY = pad.top + chartH;\n\n      ctx.fillStyle = colors.principal;\n      ctx.fillRect(x, baseY - pxH, barW, pxH);\n      ctx.fillStyle = colors.interest;\n      ctx.fillRect(x, baseY - totalH, barW, inH);\n\n      ctx.fillStyle = '#1e293b';\n      ctx.font = 'bold 12px sans-serif';\n      ctx.textAlign = 'center';\n      ctx.fillText(r.name, x + barW/2, H - 10);\n    });\n\n    var lx = pad.left;\n    var ly = 12;\n    ctx.fillStyle = colors.principal; ctx.fillRect(lx, ly - 9, 14, 10);\n    ctx.fillStyle = '#475569'; ctx.font = '12px sans-serif'; ctx.textAlign = 'left';\n    ctx.fillText('元金', lx + 18, ly);\n    ctx.fillStyle = colors.interest; ctx.fillRect(lx + 60, ly - 9, 14, 10);\n    ctx.fillStyle = '#475569';\n    ctx.fillText('利息', lx + 78, ly);\n  }\n\n  document.getElementById('lc-calc-btn').addEventListener('click', calculate);\n  document.getElementById('lc-reset-btn').addEventListener('click', function(){\n    document.getElementById('lc-results').classList.add('lc-hidden');\n    document.querySelectorAll('#lc-inputs .lc-name').forEach(function(el,i){ el.value = ['ローン A','ローン B','ローン C'][i]; });\n    document.querySelectorAll('#lc-inputs .lc-principal').forEach(function(el){ el.value = 20000000; });\n    document.querySelectorAll('#lc-inputs .lc-rate').forEach(function(el,i){ el.value = [1.5,1.2,1.8][i]; });\n    document.querySelectorAll('#lc-inputs .lc-term').forEach(function(el,i){ el.value = [35,35,30][i]; });\n    enable2.checked = false;\n    inputs2.style.opacity = '0.4';\n    inputs2.style.pointerEvents = 'none';\n  });\n\n  function getLoans(){\n    var loans = [];\n    for(var i = 0; i \u003c 3; i++){\n      if(i === 2 \u0026\u0026 !enable2.checked) continue;\n      var name = document.querySelector('.lc-name[data-i=\"'+i+'\"]').value.trim() || 'ローン '+(i+1);\n      var principal = parseFloat(document.querySelector('.lc-principal[data-i=\"'+i+'\"]').value) || 0;\n      var rate = parseFloat(document.querySelector('.lc-rate[data-i=\"'+i+'\"]').value) || 0;\n      var term = parseInt(document.querySelector('.lc-term[data-i=\"'+i+'\"]').value) || 1;\n      loans.push({name: name, principal: principal, rate: rate, term: term, idx: i});\n    }\n    return loans;\n  }\n\n  function calculate(){\n    var loans = getLoans();\n    if(!loans.length) return;\n\n    var results = loans.map(function(l){\n      return Object.assign({}, l, calcLoan(l.principal, l.rate, l.term));\n    });\n\n    var winnerIdx = 0;\n    results.forEach(function(r, i){ if(r.totalPaid \u003c results[winnerIdx].totalPaid) winnerIdx = i; });\n\n    var rows = [\n      {label: '月額返済額', key: 'monthly', format: fmt},\n      {label: '総返済額', key: 'totalPaid', format: fmt},\n      {label: '総利息', key: 'totalInterest', format: fmt},\n      {label: '借入元金', key: 'principal', format: fmt},\n      {label: '年利', fn: function(r){ return fmtN(r.rate) + '%'; }},\n      {label: '返済期間', fn: function(r){ return r.term + '年（' + r.n + 'ヶ月）'; }},\n    ];\n\n    var thead = '\u003cthead\u003e\u003ctr\u003e\u003cth\u003e項目\u003c/th\u003e';\n    results.forEach(function(r, i){ thead += '\u003cth\u003e'+(i === winnerIdx ? '★ ' : '')+r.name+(i === winnerIdx ? '（最安）' : '')+'\u003c/th\u003e'; });\n    thead += '\u003c/tr\u003e\u003c/thead\u003e';\n\n    var tbody = '\u003ctbody\u003e';\n    rows.forEach(function(row){\n      tbody += '\u003ctr\u003e\u003ctd style=\"font-weight:600;color:#475569\"\u003e'+row.label+'\u003c/td\u003e';\n      results.forEach(function(r, i){\n        var val = row.fn ? row.fn(r) : row.format(r[row.key]);\n        tbody += '\u003ctd class=\"lc-num'+(i === winnerIdx ? ' winner-col' : '')+'\"\u003e'+val+'\u003c/td\u003e';\n      });\n      tbody += '\u003c/tr\u003e';\n    });\n    tbody += '\u003c/tbody\u003e';\n\n    document.getElementById('lc-compare-table').innerHTML = thead + tbody;\n\n    var amortWrap = document.getElementById('lc-amort-wrap');\n    var amortHtml = '\u003ch3\u003e返済スケジュール\u003c/h3\u003e';\n    results.forEach(function(r, i){\n      var amRows = buildAmortization(r);\n      amortHtml += renderAmortTable(amRows, r.name, i);\n    });\n    amortWrap.innerHTML = amortHtml;\n\n    document.getElementById('lc-results').classList.remove('lc-hidden');\n\n    setTimeout(function(){ drawChart(results); }, 50);\n\n    window.addEventListener('resize', function(){ drawChart(results); });\n  }\n})();\n\u003c/script\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"ローン比較計算ツール"},{"content":" 支払い情報を入力 合計金額（税込） ¥ チップ割合（日本では通常0%） 0% なし 10% 15% 20% 25% 日本ではチップ文化がないため、通常は0%のまま割り勘計算できます。\n人数 オプション 一人あたりを切り上げ（100円単位） チップを税抜金額に対して計算する 税額（円） ¥ 個別精算モード（金額を個人ごとに設定） 割り勘を計算する\n計算結果 チップ額 ¥0 チップ込み合計 ¥0 一人あたりの支払い ¥0 個別精算モード 各自が注文した金額（税抜・税込どちらでも可）を入力してください。合計に対する比率で自動按分します。 入力合計： ¥0 入力合計と請求金額に差があります。金額を調整してください。 経費精算を効率化 飲み会・接待費の精算は手間がかかりますよね。\nfreee会計で交際費を自動管理 すれば、レシート撮影だけで仕訳・申告まで完結します。 ※ このツールはブラウザ上で完結します。入力データは外部に送信されません。\n","permalink":"https://productivity-works.com/ja/tools/tip-splitter/","summary":"\u003cdiv id=\"ts-app\"\u003e\n\u003cstyle\u003e\n#ts-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Noto Sans JP\", \"游ゴシック\", sans-serif;\n  max-width: 680px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#ts-app * {\n  box-sizing: border-box;\n}\n#ts-app h2 {\n  font-size: 1.35rem;\n  font-weight: 700;\n  margin: 0 0 1.2rem 0;\n  color: #1a1a2e;\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n#ts-app .ts-card {\n  background: #fff;\n  border: 1.5px solid #e5e7eb;\n  border-radius: 14px;\n  padding: 1.5rem;\n  margin-bottom: 1.2rem;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.05);\n}\n#ts-app label {\n  display: block;\n  font-size: 0.85rem;\n  font-weight: 700;\n  color: #374151;\n  margin-bottom: 0.4rem;\n}\n#ts-app input[type=\"number\"] {\n  width: 100%;\n  padding: 0.7rem 1rem;\n  font-size: 1.1rem;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  outline: none;\n  transition: border-color 0.2s;\n  color: #1a1a2e;\n  background: #f9fafb;\n  font-family: inherit;\n}\n#ts-app input[type=\"number\"]:focus {\n  border-color: #f97316;\n  background: #fff;\n}\n#ts-app .ts-input-prefix {\n  position: relative;\n}\n#ts-app .ts-input-prefix span {\n  position: absolute;\n  left: 0.9rem;\n  top: 50%;\n  transform: translateY(-50%);\n  font-size: 1rem;\n  color: #6b7280;\n  font-weight: 700;\n  pointer-events: none;\n}\n#ts-app .ts-input-prefix input {\n  padding-left: 2.2rem;\n}\n#ts-app .ts-tip-row {\n  display: flex;\n  align-items: center;\n  gap: 1rem;\n  margin-bottom: 0.8rem;\n}\n#ts-app .ts-tip-row input[type=\"range\"] {\n  flex: 1;\n  -webkit-appearance: none;\n  height: 6px;\n  background: #e5e7eb;\n  border-radius: 3px;\n  outline: none;\n  cursor: pointer;\n}\n#ts-app input[type=\"range\"]::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 22px;\n  height: 22px;\n  border-radius: 50%;\n  background: #f97316;\n  cursor: pointer;\n  box-shadow: 0 1px 4px rgba(249,115,22,0.4);\n}\n#ts-app .ts-tip-pct-display {\n  min-width: 3.5rem;\n  text-align: center;\n  font-size: 1.3rem;\n  font-weight: 800;\n  color: #f97316;\n}\n#ts-app .ts-quick-btns {\n  display: flex;\n  gap: 0.5rem;\n  flex-wrap: wrap;\n}\n#ts-app .ts-quick-btn {\n  padding: 0.4rem 0.9rem;\n  border: 1.5px solid #f97316;\n  border-radius: 20px;\n  background: transparent;\n  color: #f97316;\n  font-size: 0.9rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: all 0.15s;\n  font-family: inherit;\n}\n#ts-app .ts-quick-btn:hover,\n#ts-app .ts-quick-btn.active {\n  background: #f97316;\n  color: #fff;\n}\n#ts-app .ts-toggle-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 0.65rem 0;\n  border-bottom: 1px solid #f3f4f6;\n  font-size: 0.93rem;\n  color: #374151;\n  gap: 0.8rem;\n}\n#ts-app .ts-toggle-row:last-child {\n  border-bottom: none;\n}\n#ts-app .ts-toggle {\n  position: relative;\n  width: 44px;\n  height: 24px;\n  flex-shrink: 0;\n}\n#ts-app .ts-toggle input {\n  opacity: 0;\n  width: 0;\n  height: 0;\n  position: absolute;\n}\n#ts-app .ts-toggle-slider {\n  position: absolute;\n  inset: 0;\n  background: #d1d5db;\n  border-radius: 24px;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n#ts-app .ts-toggle-slider::before {\n  content: \"\";\n  position: absolute;\n  width: 18px;\n  height: 18px;\n  left: 3px;\n  top: 3px;\n  background: #fff;\n  border-radius: 50%;\n  transition: transform 0.2s;\n  box-shadow: 0 1px 3px rgba(0,0,0,0.2);\n}\n#ts-app .ts-toggle input:checked + .ts-toggle-slider {\n  background: #f97316;\n}\n#ts-app .ts-toggle input:checked + .ts-toggle-slider::before {\n  transform: translateX(20px);\n}\n#ts-app .ts-results {\n  background: linear-gradient(135deg, #f97316 0%, #ef4444 100%);\n  border-radius: 14px;\n  padding: 1.5rem;\n  color: #fff;\n  margin-bottom: 1.2rem;\n}\n#ts-app .ts-results h2 {\n  color: #fff;\n  margin-bottom: 1rem;\n}\n#ts-app .ts-result-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 0.8rem;\n  margin-bottom: 1rem;\n}\n#ts-app .ts-result-item {\n  background: rgba(255,255,255,0.18);\n  border-radius: 10px;\n  padding: 0.9rem 1rem;\n}\n#ts-app .ts-result-item .label {\n  font-size: 0.8rem;\n  opacity: 0.9;\n  margin-bottom: 0.3rem;\n  font-weight: 600;\n}\n#ts-app .ts-result-item .value {\n  font-size: 1.5rem;\n  font-weight: 800;\n}\n#ts-app .ts-result-highlight {\n  background: rgba(255,255,255,0.28);\n  border-radius: 10px;\n  padding: 1rem;\n  text-align: center;\n}\n#ts-app .ts-result-highlight .label {\n  font-size: 0.88rem;\n  opacity: 0.95;\n  margin-bottom: 0.3rem;\n  font-weight: 700;\n}\n#ts-app .ts-result-highlight .value {\n  font-size: 2.2rem;\n  font-weight: 800;\n}\n#ts-app .ts-custom-split {\n  margin-top: 1rem;\n}\n#ts-app .ts-person-row {\n  display: flex;\n  align-items: center;\n  gap: 0.7rem;\n  margin-bottom: 0.6rem;\n}\n#ts-app .ts-person-row label {\n  margin: 0;\n  font-size: 0.9rem;\n  font-weight: 700;\n  min-width: 70px;\n  color: #374151;\n}\n#ts-app .ts-person-row input[type=\"number\"] {\n  flex: 1;\n  font-size: 1rem;\n  padding: 0.55rem 0.8rem;\n}\n#ts-app .ts-person-share {\n  min-width: 90px;\n  text-align: right;\n  font-weight: 800;\n  color: #f97316;\n  font-size: 1rem;\n}\n#ts-app .ts-custom-total-row {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 0.7rem 0.2rem 0;\n  border-top: 2px dashed #e5e7eb;\n  margin-top: 0.4rem;\n  font-weight: 700;\n  font-size: 0.95rem;\n  color: #374151;\n}\n#ts-app .ts-custom-total-row span:last-child {\n  color: #ef4444;\n}\n#ts-app .ts-calc-btn {\n  width: 100%;\n  padding: 0.95rem;\n  background: #f97316;\n  color: #fff;\n  font-size: 1.1rem;\n  font-weight: 700;\n  border: none;\n  border-radius: 10px;\n  cursor: pointer;\n  transition: background 0.2s, transform 0.1s;\n  margin-bottom: 1rem;\n  font-family: inherit;\n  letter-spacing: 0.04em;\n}\n#ts-app .ts-calc-btn:hover {\n  background: #ea6c06;\n}\n#ts-app .ts-calc-btn:active {\n  transform: scale(0.98);\n}\n#ts-app .ts-warning {\n  font-size: 0.82rem;\n  color: #ef4444;\n  font-weight: 700;\n  margin-top: 0.3rem;\n  display: none;\n}\n#ts-app .ts-warning.visible {\n  display: block;\n}\n#ts-app .ts-cta-box {\n  background: #fff7ed;\n  border: 1.5px solid #fed7aa;\n  border-radius: 12px;\n  padding: 1.1rem 1.3rem;\n  margin-top: 0.5rem;\n  font-size: 0.93rem;\n  color: #374151;\n  line-height: 1.7;\n}\n#ts-app .ts-cta-box a {\n  color: #f97316;\n  font-weight: 700;\n  text-decoration: none;\n}\n#ts-app .ts-cta-box a:hover {\n  text-decoration: underline;\n}\n#ts-app .ts-cta-box .ts-cta-title {\n  font-weight: 700;\n  color: #c2410c;\n  margin-bottom: 0.4rem;\n  font-size: 0.88rem;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n#ts-app .ts-note {\n  font-size: 0.82rem;\n  color: #9ca3af;\n  margin-top: 0.8rem;\n  text-align: center;\n}\n@media (max-width: 480px) {\n  #ts-app .ts-result-grid {\n    grid-template-columns: 1fr;\n  }\n  #ts-app .ts-result-item .value {\n    font-size: 1.3rem;\n  }\n}\n\u003c/style\u003e\n\u003c!-- INPUTS --\u003e\n\u003cdiv class=\"ts-card\"\u003e\n  \u003ch2\u003e支払い情報を入力\u003c/h2\u003e\n  \u003cdiv style=\"margin-bottom:1.2rem;\"\u003e\n    \u003clabel for=\"ts-bill\"\u003e合計金額（税込）\u003c/label\u003e\n    \u003cdiv class=\"ts-input-prefix\"\u003e\n      \u003cspan\u003e¥\u003c/span\u003e\n      \u003cinput type=\"number\" id=\"ts-bill\" min=\"0\" step=\"1\" placeholder=\"0\" value=\"\" /\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"margin-bottom:1.2rem;\"\u003e\n    \u003clabel\u003eチップ割合（日本では通常0%）\u003c/label\u003e\n    \u003cdiv class=\"ts-tip-row\"\u003e\n      \u003cinput type=\"range\" id=\"ts-tip-slider\" min=\"0\" max=\"30\" step=\"1\" value=\"0\" /\u003e\n      \u003cdiv class=\"ts-tip-pct-display\"\u003e\u003cspan id=\"ts-tip-pct-val\"\u003e0\u003c/span\u003e%\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ts-quick-btns\"\u003e\n      \u003cbutton class=\"ts-quick-btn active\" data-pct=\"0\"\u003eなし\u003c/button\u003e\n      \u003cbutton class=\"ts-quick-btn\" data-pct=\"10\"\u003e10%\u003c/button\u003e\n      \u003cbutton class=\"ts-quick-btn\" data-pct=\"15\"\u003e15%\u003c/button\u003e\n      \u003cbutton class=\"ts-quick-btn\" data-pct=\"20\"\u003e20%\u003c/button\u003e\n      \u003cbutton class=\"ts-quick-btn\" data-pct=\"25\"\u003e25%\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cp style=\"font-size:0.8rem; color:#9ca3af; margin: 0.5rem 0 0 0;\"\u003e日本ではチップ文化がないため、通常は0%のまま割り勘計算できます。\u003c/p\u003e","title":"割り勘計算ツール - 飲み会の精算を簡単に"},{"content":"投資の収益性を素早く把握したいときに使える、無料のROI（投資利益率）計算ツールです。シンプルな計算から、NPV・IRR・回収期間を含む詳細分析、さらに複数投資の比較まで、グラフ付きで直感的にシミュレーションできます。\nシンプルROI 詳細ROI 投資比較 初期投資額（万円） 計算モード 最終価値で入力 損益額で入力 最終価値（万円） 損益額（万円、損失はマイナス） 投資期間 期間の単位 月 年 計算する 年別：投資額 vs 累積価値 損益分岐タイムライン 初期投資額（万円） 年間収益（万円） 年間コスト（複数行追加可）（万円） ＋ コスト行を追加 投資期間（年） 割引率（NPV用、%） 計算する 年別：投資vs累積収益 損益分岐タイムライン 比較する 投資比較：ROI% 事業の経費・投資管理もかんたんに\nfreee会計なら、事業の収支・経費・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 複利を計算 → 複利計算ツール\n年金をシミュレーション → 年金シミュレーター\n家計を見直す → 50/30/20 家計バランス計算 複利を計算 → 複利計算ツール 年金をシミュレーション → 年金シミュレーター 家計を見直す → 50/30/20 家計バランス計算 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 AI副業で稼ぐ方法2026年最新完全ガイド 会社員が不動産投資を始めるならRENOSY？｜NISAやiDeCoとの使い分けガイド RENOSYの利回りは本当？｜評判・口コミを徹底検証【2026年版データ分析】 ","permalink":"https://productivity-works.com/ja/tools/roi-calculator/","summary":"\u003cp\u003e投資の収益性を素早く把握したいときに使える、無料のROI（投資利益率）計算ツールです。シンプルな計算から、NPV・IRR・回収期間を含む詳細分析、さらに複数投資の比較まで、グラフ付きで直感的にシミュレーションできます。\u003c/p\u003e\n\u003cdiv id=\"roi-app\"\u003e\n\u003cstyle\u003e\n#roi-app {\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  max-width: 820px;\n  margin: 0 auto;\n  color: #1e293b;\n  font-size: 15px;\n}\n\n/* Tab Navigation */\n#roi-app .tab-nav {\n  display: flex;\n  gap: 4px;\n  border-bottom: 2px solid #cbd5e1;\n  margin-bottom: 24px;\n  flex-wrap: wrap;\n}\n#roi-app .tab-btn {\n  padding: 10px 18px;\n  border: none;\n  background: transparent;\n  color: #64748b;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  border-radius: 6px 6px 0 0;\n  transition: color 0.15s, border-color 0.15s, background 0.15s;\n}\n#roi-app .tab-btn:hover {\n  color: #334155;\n  background: #f1f5f9;\n}\n#roi-app .tab-btn.active {\n  color: #0f172a;\n  border-bottom-color: #0284c7;\n  background: #f8fafc;\n}\n\n/* Tab panels */\n#roi-app .tab-panel { display: none; }\n#roi-app .tab-panel.active { display: block; }\n\n/* Form grid */\n#roi-app .form-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n}\n@media (max-width: 560px) {\n  #roi-app .form-grid { grid-template-columns: 1fr; }\n}\n\n#roi-app .form-group {\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n}\n#roi-app .form-group.full { grid-column: 1 / -1; }\n\n#roi-app label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n}\n#roi-app input[type=\"number\"],\n#roi-app select {\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 15px;\n  color: #0f172a;\n  background: #f8fafc;\n  outline: none;\n  transition: border-color 0.15s;\n  width: 100%;\n  box-sizing: border-box;\n}\n#roi-app input[type=\"number\"]:focus,\n#roi-app select:focus {\n  border-color: #38bdf8;\n  background: #fff;\n}\n\n/* Toggle group: \"最終価値 / 損益額\" */\n#roi-app .toggle-group {\n  display: flex;\n  gap: 0;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  overflow: hidden;\n  margin-bottom: 4px;\n}\n#roi-app .toggle-group button {\n  flex: 1;\n  padding: 8px;\n  border: none;\n  background: #f1f5f9;\n  color: #64748b;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n#roi-app .toggle-group button.active {\n  background: #0284c7;\n  color: #fff;\n}\n\n/* Calc button */\n#roi-app .calc-btn {\n  display: inline-block;\n  margin-top: 20px;\n  padding: 11px 32px;\n  background: #0284c7;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#roi-app .calc-btn:hover { background: #0369a1; }\n\n/* Dynamic cost rows */\n#roi-app .cost-row {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n  margin-bottom: 8px;\n}\n#roi-app .cost-row input { flex: 1; margin-bottom: 0; }\n#roi-app .remove-btn {\n  padding: 7px 12px;\n  background: #fee2e2;\n  color: #dc2626;\n  border: none;\n  border-radius: 6px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n}\n#roi-app .add-btn {\n  padding: 7px 16px;\n  background: #e0f2fe;\n  color: #0369a1;\n  border: none;\n  border-radius: 6px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  margin-top: 4px;\n}\n\n/* Results section */\n#roi-app .results-section {\n  margin-top: 28px;\n  display: none;\n}\n#roi-app .results-section.visible { display: block; }\n\n#roi-app .result-cards {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n  gap: 14px;\n  margin-bottom: 24px;\n}\n#roi-app .result-card {\n  padding: 16px 14px;\n  border-radius: 10px;\n  border: 1.5px solid #e2e8f0;\n  text-align: center;\n}\n#roi-app .result-card.positive {\n  background: linear-gradient(135deg, #f0fdf4, #dcfce7);\n  border-color: #86efac;\n}\n#roi-app .result-card.negative {\n  background: linear-gradient(135deg, #fff1f2, #fee2e2);\n  border-color: #fca5a5;\n}\n#roi-app .result-card.neutral {\n  background: linear-gradient(135deg, #f8fafc, #f1f5f9);\n  border-color: #cbd5e1;\n}\n#roi-app .result-card .card-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  margin-bottom: 6px;\n}\n#roi-app .result-card .card-value {\n  font-size: 22px;\n  font-weight: 800;\n  color: #0f172a;\n  letter-spacing: -0.5px;\n}\n#roi-app .result-card.positive .card-value { color: #16a34a; }\n#roi-app .result-card.negative .card-value { color: #dc2626; }\n\n/* Chart area */\n#roi-app .chart-container {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 20px 16px 12px;\n  margin-bottom: 20px;\n}\n#roi-app .chart-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #475569;\n  margin-bottom: 12px;\n  text-align: center;\n}\n#roi-app canvas { display: block; max-width: 100%; }\n\n/* Breakeven timeline */\n#roi-app .timeline {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 16px 18px;\n  margin-bottom: 20px;\n}\n#roi-app .timeline-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #475569;\n  margin-bottom: 10px;\n}\n#roi-app .timeline-bar-wrap {\n  position: relative;\n  height: 22px;\n  background: #e2e8f0;\n  border-radius: 999px;\n  overflow: hidden;\n}\n#roi-app .timeline-bar-fill {\n  position: absolute;\n  left: 0; top: 0; bottom: 0;\n  border-radius: 999px;\n  transition: width 0.5s;\n}\n#roi-app .timeline-label {\n  font-size: 12px;\n  color: #64748b;\n  margin-top: 6px;\n  text-align: right;\n}\n\n/* Compare tab */\n#roi-app .compare-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n  gap: 16px;\n}\n#roi-app .compare-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 16px;\n}\n#roi-app .compare-card h4 {\n  margin: 0 0 12px;\n  font-size: 14px;\n  color: #334155;\n  font-weight: 700;\n}\n#roi-app .compare-result {\n  margin-top: 14px;\n  padding-top: 12px;\n  border-top: 1px solid #e2e8f0;\n}\n#roi-app .compare-result .cr-row {\n  display: flex;\n  justify-content: space-between;\n  font-size: 13px;\n  margin-bottom: 5px;\n}\n#roi-app .compare-result .cr-label { color: #64748b; }\n#roi-app .compare-result .cr-value { font-weight: 700; color: #0f172a; }\n#roi-app .compare-result .cr-value.pos { color: #16a34a; }\n#roi-app .compare-result .cr-value.neg { color: #dc2626; }\n\n#roi-app .section-divider {\n  border: none;\n  border-top: 1.5px solid #e2e8f0;\n  margin: 24px 0;\n}\n\n/* Cross-links */\n#roi-app .cross-links {\n  margin-top: 24px;\n  padding: 14px 18px;\n  background: #f1f5f9;\n  border-radius: 8px;\n  font-size: 13px;\n  color: #475569;\n  line-height: 2;\n}\n#roi-app .cross-links a { color: #0284c7; font-weight: 600; text-decoration: none; }\n#roi-app .cross-links a:hover { text-decoration: underline; }\n\u003c/style\u003e\n\u003c!-- Tab Navigation --\u003e\n\u003cnav class=\"tab-nav\"\u003e\n  \u003cbutton class=\"tab-btn active\" onclick=\"roiShowTab('simple', this)\"\u003eシンプルROI\u003c/button\u003e\n  \u003cbutton class=\"tab-btn\" onclick=\"roiShowTab('detail', this)\"\u003e詳細ROI\u003c/button\u003e\n  \u003cbutton class=\"tab-btn\" onclick=\"roiShowTab('compare', this)\"\u003e投資比較\u003c/button\u003e\n\u003c/nav\u003e\n\u003c!-- ========== TAB 1: シンプルROI ========== --\u003e\n\u003cdiv id=\"roi-tab-simple\" class=\"tab-panel active\"\u003e\n  \u003cdiv class=\"form-grid\"\u003e\n    \u003cdiv class=\"form-group\"\u003e\n      \u003clabel for=\"s-initial\"\u003e初期投資額（万円）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"s-initial\" min=\"0\" step=\"0.1\" placeholder=\"例: 100\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"form-group\"\u003e\n      \u003clabel\u003e計算モード\u003c/label\u003e\n      \u003cdiv class=\"toggle-group\"\u003e\n        \u003cbutton id=\"s-mode-final\" class=\"active\" onclick=\"roiSimpleMode('final')\"\u003e最終価値で入力\u003c/button\u003e\n        \u003cbutton id=\"s-mode-gain\" onclick=\"roiSimpleMode('gain')\"\u003e損益額で入力\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"form-group\" id=\"s-final-group\"\u003e\n      \u003clabel for=\"s-final\"\u003e最終価値（万円）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"s-final\" min=\"0\" step=\"0.1\" placeholder=\"例: 150\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"form-group\" id=\"s-gain-group\" style=\"display:none;\"\u003e\n      \u003clabel for=\"s-gain\"\u003e損益額（万円、損失はマイナス）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"s-gain\" step=\"0.1\" placeholder=\"例: 50\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"form-group\"\u003e\n      \u003clabel for=\"s-period\"\u003e投資期間\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"s-period\" min=\"1\" step=\"1\" placeholder=\"例: 12\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"form-group\"\u003e\n      \u003clabel for=\"s-period-unit\"\u003e期間の単位\u003c/label\u003e\n      \u003cselect id=\"s-period-unit\"\u003e\n        \u003coption value=\"month\"\u003e月\u003c/option\u003e\n        \u003coption value=\"year\"\u003e年\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"calc-btn\" onclick=\"roiCalcSimple()\"\u003e計算する\u003c/button\u003e\n  \u003cdiv id=\"s-results\" class=\"results-section\"\u003e\n    \u003chr class=\"section-divider\" /\u003e\n    \u003cdiv class=\"result-cards\" id=\"s-cards\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"chart-container\"\u003e\n      \u003cdiv class=\"chart-title\"\u003e年別：投資額 vs 累積価値\u003c/div\u003e\n      \u003ccanvas id=\"s-chart\" height=\"220\"\u003e\u003c/canvas\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"timeline\"\u003e\n      \u003cdiv class=\"timeline-title\"\u003e損益分岐タイムライン\u003c/div\u003e\n      \u003cdiv class=\"timeline-bar-wrap\"\u003e\n        \u003cdiv class=\"timeline-bar-fill\" id=\"s-timeline-fill\" style=\"width:0%;background:#22c55e;\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"timeline-label\" id=\"s-timeline-label\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ========== TAB 2: 詳細ROI ========== --\u003e\n\u003cdiv id=\"roi-tab-detail\" class=\"tab-panel\"\u003e\n  \u003cdiv class=\"form-grid\"\u003e\n    \u003cdiv class=\"form-group\"\u003e\n      \u003clabel for=\"d-initial\"\u003e初期投資額（万円）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"d-initial\" min=\"0\" step=\"0.1\" placeholder=\"例: 500\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"form-group\"\u003e\n      \u003clabel for=\"d-revenue\"\u003e年間収益（万円）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"d-revenue\" min=\"0\" step=\"0.1\" placeholder=\"例: 200\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"form-group full\"\u003e\n      \u003clabel\u003e年間コスト（複数行追加可）（万円）\u003c/label\u003e\n      \u003cdiv id=\"d-cost-rows\"\u003e\u003c/div\u003e\n      \u003cbutton class=\"add-btn\" onclick=\"roiAddCostRow()\"\u003e＋ コスト行を追加\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"form-group\"\u003e\n      \u003clabel for=\"d-years\"\u003e投資期間（年）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"d-years\" min=\"1\" max=\"50\" step=\"1\" placeholder=\"例: 5\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"form-group\"\u003e\n      \u003clabel for=\"d-discount\"\u003e割引率（NPV用、%）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"d-discount\" min=\"0\" max=\"100\" step=\"0.1\" placeholder=\"例: 5\" /\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"calc-btn\" onclick=\"roiCalcDetail()\"\u003e計算する\u003c/button\u003e\n  \u003cdiv id=\"d-results\" class=\"results-section\"\u003e\n    \u003chr class=\"section-divider\" /\u003e\n    \u003cdiv class=\"result-cards\" id=\"d-cards\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"chart-container\"\u003e\n      \u003cdiv class=\"chart-title\"\u003e年別：投資vs累積収益\u003c/div\u003e\n      \u003ccanvas id=\"d-chart\" height=\"220\"\u003e\u003c/canvas\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"timeline\"\u003e\n      \u003cdiv class=\"timeline-title\"\u003e損益分岐タイムライン\u003c/div\u003e\n      \u003cdiv class=\"timeline-bar-wrap\"\u003e\n        \u003cdiv class=\"timeline-bar-fill\" id=\"d-timeline-fill\" style=\"width:0%;background:#22c55e;\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"timeline-label\" id=\"d-timeline-label\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ========== TAB 3: 投資比較 ========== --\u003e\n\u003cdiv id=\"roi-tab-compare\" class=\"tab-panel\"\u003e\n  \u003cdiv class=\"compare-grid\" id=\"compare-grid\"\u003e\n    \u003c!-- Cards rendered by JS --\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"calc-btn\" onclick=\"roiCalcCompare()\"\u003e比較する\u003c/button\u003e\n  \u003cdiv id=\"c-results\" class=\"results-section\"\u003e\n    \u003chr class=\"section-divider\" /\u003e\n    \u003cdiv class=\"chart-container\"\u003e\n      \u003cdiv class=\"chart-title\"\u003e投資比較：ROI%\u003c/div\u003e\n      \u003ccanvas id=\"c-chart\" height=\"220\"\u003e\u003c/canvas\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の経費・投資管理もかんたんに\u003c/p\u003e","title":"ROI計算ツール｜投資利益率・回収期間をシミュレーション【無料】"},{"content":"テキストを貼り付けるだけで単語の出現頻度を即座に分析。上位N件の棒グラフ表示、ストップワード除去、CSV出力に対応。\n文字数を数える → 文字数カウンター テキスト入力 上位 10 25 50 100 語 ストップワードを除外 大文字小文字を区別しない 最小文字数 分析する クリア 結果をコピー CSVで出力 テキストを入力して「分析する」をクリックしてください。 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/word-frequency/","summary":"\u003cp\u003eテキストを貼り付けるだけで単語の出現頻度を即座に分析。上位N件の棒グラフ表示、ストップワード除去、CSV出力に対応。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e文字数を数える → \u003ca href=\"https://productivity-works.com/ja/tools/word-counter/\"\u003e文字数カウンター\u003c/a\u003e\n\u003c/p\u003e\u003c/blockquote\u003e\n\u003cdiv id=\"wf-app\"\u003e\n\u003cstyle\u003e\n#wf-app *,\n#wf-app *::before,\n#wf-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#wf-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Yu Gothic\", Roboto, sans-serif;\n  color: #1e293b;\n  max-width: 820px;\n}\n#wf-app h2 {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 10px;\n}\n#wf-app textarea {\n  width: 100%;\n  height: 160px;\n  padding: 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 14px;\n  line-height: 1.6;\n  resize: vertical;\n  font-family: inherit;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.2s;\n}\n#wf-app textarea:focus {\n  outline: none;\n  border-color: #6366f1;\n}\n#wf-app .wf-options {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  margin: 14px 0;\n  align-items: center;\n}\n#wf-app .wf-option-group {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 13px;\n  color: #475569;\n}\n#wf-app .wf-option-group label {\n  cursor: pointer;\n  user-select: none;\n}\n#wf-app .wf-option-group input[type=\"checkbox\"] {\n  width: 15px;\n  height: 15px;\n  accent-color: #6366f1;\n  cursor: pointer;\n}\n#wf-app .wf-option-group select,\n#wf-app .wf-option-group input[type=\"number\"] {\n  padding: 4px 8px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  color: #1e293b;\n  background: #fff;\n  cursor: pointer;\n}\n#wf-app .wf-option-group input[type=\"number\"] {\n  width: 64px;\n}\n#wf-app .wf-btn-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 20px;\n}\n#wf-app button {\n  padding: 9px 20px;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: opacity 0.15s, background 0.15s;\n}\n#wf-app button:hover { opacity: 0.88; }\n#wf-app .wf-btn-analyze {\n  background: #6366f1;\n  color: #fff;\n}\n#wf-app .wf-btn-clear {\n  background: #f1f5f9;\n  color: #475569;\n}\n#wf-app .wf-btn-copy {\n  background: #f1f5f9;\n  color: #475569;\n}\n#wf-app .wf-btn-csv {\n  background: #ecfdf5;\n  color: #065f46;\n  border: 1px solid #a7f3d0;\n}\n#wf-app .wf-stats-bar {\n  display: flex;\n  gap: 18px;\n  flex-wrap: wrap;\n  margin-bottom: 18px;\n  padding: 12px 16px;\n  background: #f8fafc;\n  border-radius: 8px;\n  font-size: 13px;\n  color: #475569;\n}\n#wf-app .wf-stats-bar span strong {\n  color: #1e293b;\n  font-size: 15px;\n}\n#wf-app .wf-canvas-wrap {\n  margin-bottom: 20px;\n  overflow-x: auto;\n}\n#wf-app canvas {\n  display: block;\n  max-width: 100%;\n  border-radius: 8px;\n  background: #fff;\n  border: 1px solid #e2e8f0;\n}\n#wf-app .wf-table-wrap {\n  overflow-x: auto;\n  border-radius: 8px;\n  border: 1px solid #e2e8f0;\n}\n#wf-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n#wf-app thead th {\n  background: #f8fafc;\n  padding: 10px 14px;\n  text-align: left;\n  font-weight: 700;\n  color: #475569;\n  border-bottom: 1.5px solid #e2e8f0;\n}\n#wf-app tbody tr:hover { background: #f8fafc; }\n#wf-app tbody td {\n  padding: 8px 14px;\n  border-bottom: 1px solid #f1f5f9;\n  color: #1e293b;\n}\n#wf-app tbody tr:last-child td { border-bottom: none; }\n#wf-app .wf-rank { color: #94a3b8; font-size: 12px; }\n#wf-app .wf-bar-cell { width: 160px; }\n#wf-app .wf-inline-bar {\n  height: 8px;\n  border-radius: 4px;\n  background: #6366f1;\n  min-width: 2px;\n  transition: width 0.3s;\n}\n#wf-app .wf-pct { color: #64748b; font-size: 12px; }\n#wf-app .wf-empty {\n  text-align: center;\n  padding: 40px 20px;\n  color: #94a3b8;\n  font-size: 14px;\n}\n\u003c/style\u003e\n\u003ch2\u003eテキスト入力\u003c/h2\u003e\n\u003ctextarea id=\"wf-input\" placeholder=\"ここにテキストを貼り付けてください...\"\u003e\u003c/textarea\u003e\n\u003cdiv class=\"wf-options\"\u003e\n  \u003cdiv class=\"wf-option-group\"\u003e\n    \u003clabel for=\"wf-top-n\"\u003e上位\u003c/label\u003e\n    \u003cselect id=\"wf-top-n\"\u003e\n      \u003coption value=\"10\"\u003e10\u003c/option\u003e\n      \u003coption value=\"25\" selected\u003e25\u003c/option\u003e\n      \u003coption value=\"50\"\u003e50\u003c/option\u003e\n      \u003coption value=\"100\"\u003e100\u003c/option\u003e\n    \u003c/select\u003e\n    \u003clabel for=\"wf-top-n\"\u003e語\u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wf-option-group\"\u003e\n    \u003cinput type=\"checkbox\" id=\"wf-stop\" checked\u003e\n    \u003clabel for=\"wf-stop\"\u003eストップワードを除外\u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wf-option-group\"\u003e\n    \u003cinput type=\"checkbox\" id=\"wf-case\" checked\u003e\n    \u003clabel for=\"wf-case\"\u003e大文字小文字を区別しない\u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"wf-option-group\"\u003e\n    \u003clabel for=\"wf-minlen\"\u003e最小文字数\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"wf-minlen\" value=\"2\" min=\"1\" max=\"20\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"wf-btn-row\"\u003e\n  \u003cbutton class=\"wf-btn-analyze\" id=\"wf-analyze-btn\"\u003e分析する\u003c/button\u003e\n  \u003cbutton class=\"wf-btn-clear\" id=\"wf-clear-btn\"\u003eクリア\u003c/button\u003e\n  \u003cbutton class=\"wf-btn-copy\" id=\"wf-copy-btn\"\u003e結果をコピー\u003c/button\u003e\n  \u003cbutton class=\"wf-btn-csv\" id=\"wf-csv-btn\"\u003eCSVで出力\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"wf-stats\" class=\"wf-stats-bar\" style=\"display:none\"\u003e\u003c/div\u003e\n\u003cdiv class=\"wf-canvas-wrap\"\u003e\u003ccanvas id=\"wf-canvas\" style=\"display:none\"\u003e\u003c/canvas\u003e\u003c/div\u003e\n\u003cdiv id=\"wf-table-container\"\u003e\n  \u003cdiv class=\"wf-empty\"\u003eテキストを入力して「分析する」をクリックしてください。\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"単語頻度分析ツール"},{"content":"マークダウンテキストを貼り付けると、含まれるリンクをすべて抽出・分類し、重複や不正な形式を検出。結果はCSVまたはJSONでエクスポートできます。\nマークダウンを貼り付け リンクを抽出 クリア # リンクテキスト URL 種類 フラグ CSVでエクスポート JSONでエクスポート 全URLをコピー 関連ツール：\nマークダウンプレビュー マークダウン表ジェネレーター URLエンコーダー フリーランス・中小企業の方へ リンク管理や文書作成だけでなく、請求書・経費・確定申告もまとめて効率化しませんか？\nクラウド会計ソフト freee なら、面倒な経理作業をシンプルに。\nfreeeを無料で試す 使い方 マークダウンテキストを上のボックスに貼り付けます。 リンクを抽出 をクリック（または Ctrl+Enter / Cmd+Enter）。 フィルタタブで種類別に絞り込みます。 CSVでエクスポート / JSONでエクスポート でダウンロード、または 全URLをコピー でクリップボードに一括コピー。 抽出されるリンクの種類 種類 マークダウン記法 例 外部リンク [テキスト](https://...) [Google](https://google.com) 内部リンク [テキスト](/パス) [概要ページ](/about) アンカー [テキスト](#id) [トップへ](#top) 画像 ![alt](url) ![ロゴ](logo.png) 参照リンク [テキスト][ref] [ドキュメント][docs] 自動リンク \u0026lt;https://...\u0026gt; \u0026lt;https://example.com\u0026gt; 不正形式の検出 以下のパターンをフラグとして検出します：\nプロトコル欠落 — www. で始まり https:// がないURL URLにスペース — レンダリングに失敗する空白を含むURL ベアドメイン — https:// なしのドメイン形式の文字列 関連ツール マークダウンプレビュー — マークダウンをリアルタイムでHTMLに変換 マークダウン表ジェネレーター — マークダウンの表をビジュアルで作成 URLエンコーダー — URLおよびクエリ文字列のエンコード・デコード ","permalink":"https://productivity-works.com/ja/tools/markdown-link-checker/","summary":"\u003cp\u003eマークダウンテキストを貼り付けると、含まれるリンクをすべて抽出・分類し、重複や不正な形式を検出。結果はCSVまたはJSONでエクスポートできます。\u003c/p\u003e\n\u003cdiv id=\"mlc-app\"\u003e\n\u003cstyle\u003e\n#mlc-app *,\n#mlc-app *::before,\n#mlc-app *::after {\n  box-sizing: border-box;\n}\n\n#mlc-app {\n  font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  font-size: 15px;\n  color: #1a1a2e;\n  max-width: 860px;\n  margin: 0 auto;\n  padding: 0;\n}\n\n#mlc-app h2.mlc-section-title {\n  font-size: 1.05rem;\n  font-weight: 700;\n  margin: 0 0 10px 0;\n  color: #0f3460;\n  letter-spacing: 0.03em;\n}\n\n/* Input area */\n#mlc-app .mlc-input-wrap {\n  background: #f8f9ff;\n  border: 1.5px solid #d0d7f7;\n  border-radius: 10px;\n  padding: 18px;\n  margin-bottom: 14px;\n}\n\n#mlc-app textarea#mlc-input {\n  width: 100%;\n  min-height: 180px;\n  border: 1.5px solid #c3cde8;\n  border-radius: 7px;\n  padding: 12px 14px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 13px;\n  line-height: 1.6;\n  resize: vertical;\n  outline: none;\n  background: #fff;\n  color: #1a1a2e;\n  transition: border-color 0.2s;\n}\n#mlc-app textarea#mlc-input:focus {\n  border-color: #4361ee;\n}\n#mlc-app textarea#mlc-input::placeholder {\n  color: #9aa5c4;\n}\n\n/* Buttons */\n#mlc-app .mlc-btn-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 12px;\n  align-items: center;\n}\n\n#mlc-app button.mlc-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 8px 18px;\n  border: none;\n  border-radius: 6px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.18s, transform 0.1s;\n  white-space: nowrap;\n  letter-spacing: 0.02em;\n}\n#mlc-app button.mlc-btn:active {\n  transform: scale(0.97);\n}\n\n#mlc-app button#mlc-analyze-btn {\n  background: #4361ee;\n  color: #fff;\n}\n#mlc-app button#mlc-analyze-btn:hover {\n  background: #3451d1;\n}\n\n#mlc-app button#mlc-clear-btn {\n  background: #eef0fb;\n  color: #4361ee;\n  border: 1.5px solid #c3cde8;\n}\n#mlc-app button#mlc-clear-btn:hover {\n  background: #dde1f6;\n}\n\n#mlc-app button.mlc-btn-export {\n  background: #16213e;\n  color: #fff;\n}\n#mlc-app button.mlc-btn-export:hover {\n  background: #0f3460;\n}\n\n#mlc-app button#mlc-copy-urls-btn {\n  background: #e8f5e9;\n  color: #2e7d32;\n  border: 1.5px solid #a5d6a7;\n}\n#mlc-app button#mlc-copy-urls-btn:hover {\n  background: #c8e6c9;\n}\n\n/* Stats bar */\n#mlc-app .mlc-stats-bar {\n  display: none;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-bottom: 14px;\n}\n\n#mlc-app .mlc-stat-chip {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 5px 13px;\n  border-radius: 20px;\n  font-size: 13px;\n  font-weight: 700;\n  background: #eef0fb;\n  color: #0f3460;\n  border: 1px solid #d0d7f7;\n}\n\n#mlc-app .mlc-stat-chip.chip-total  { background: #e8eaf6; border-color: #9fa8da; color: #283593; }\n#mlc-app .mlc-stat-chip.chip-ext    { background: #e3f2fd; border-color: #90caf9; color: #1565c0; }\n#mlc-app .mlc-stat-chip.chip-int    { background: #e8f5e9; border-color: #a5d6a7; color: #2e7d32; }\n#mlc-app .mlc-stat-chip.chip-img    { background: #fff3e0; border-color: #ffcc80; color: #e65100; }\n#mlc-app .mlc-stat-chip.chip-anchor { background: #f3e5f5; border-color: #ce93d8; color: #6a1b9a; }\n#mlc-app .mlc-stat-chip.chip-dup    { background: #fce4ec; border-color: #f48fb1; color: #880e4f; }\n#mlc-app .mlc-stat-chip.chip-broken { background: #ffebee; border-color: #ef9a9a; color: #b71c1c; }\n\n/* Filter tabs */\n#mlc-app .mlc-filter-row {\n  display: none;\n  flex-wrap: wrap;\n  gap: 6px;\n  margin-bottom: 12px;\n}\n\n#mlc-app button.mlc-filter-tab {\n  padding: 5px 14px;\n  border-radius: 20px;\n  border: 1.5px solid #c3cde8;\n  background: #fff;\n  color: #4361ee;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n#mlc-app button.mlc-filter-tab:hover,\n#mlc-app button.mlc-filter-tab.active {\n  background: #4361ee;\n  color: #fff;\n  border-color: #4361ee;\n}\n\n/* Table */\n#mlc-app .mlc-results-wrap {\n  display: none;\n  overflow-x: auto;\n  border: 1.5px solid #d0d7f7;\n  border-radius: 10px;\n  margin-bottom: 14px;\n}\n\n#mlc-app table.mlc-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n  min-width: 580px;\n}\n\n#mlc-app table.mlc-table thead tr {\n  background: #0f3460;\n  color: #fff;\n}\n\n#mlc-app table.mlc-table thead th {\n  padding: 10px 13px;\n  text-align: left;\n  font-weight: 700;\n  white-space: nowrap;\n}\n\n#mlc-app table.mlc-table tbody tr {\n  border-bottom: 1px solid #e8edf7;\n  transition: background 0.1s;\n}\n#mlc-app table.mlc-table tbody tr:last-child {\n  border-bottom: none;\n}\n#mlc-app table.mlc-table tbody tr:hover {\n  background: #f0f3ff;\n}\n\n#mlc-app table.mlc-table td {\n  padding: 9px 13px;\n  vertical-align: top;\n  word-break: break-word;\n}\n\n#mlc-app .mlc-badge {\n  display: inline-block;\n  padding: 2px 8px;\n  border-radius: 10px;\n  font-size: 11px;\n  font-weight: 700;\n  white-space: nowrap;\n  letter-spacing: 0.02em;\n}\n#mlc-app .badge-external { background: #e3f2fd; color: #1565c0; }\n#mlc-app .badge-internal { background: #e8f5e9; color: #2e7d32; }\n#mlc-app .badge-image    { background: #fff3e0; color: #e65100; }\n#mlc-app .badge-anchor   { background: #f3e5f5; color: #6a1b9a; }\n#mlc-app .badge-dup      { background: #fce4ec; color: #880e4f; margin-left: 4px; }\n#mlc-app .badge-broken   { background: #ffebee; color: #b71c1c; margin-left: 4px; }\n\n#mlc-app .mlc-url-cell {\n  max-width: 300px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n#mlc-app .mlc-url-cell a {\n  color: #4361ee;\n  text-decoration: none;\n}\n#mlc-app .mlc-url-cell a:hover {\n  text-decoration: underline;\n}\n\n/* Toast */\n#mlc-app .mlc-toast {\n  display: none;\n  position: fixed;\n  bottom: 28px;\n  right: 28px;\n  background: #1a1a2e;\n  color: #fff;\n  padding: 10px 22px;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 700;\n  z-index: 9999;\n  box-shadow: 0 4px 16px rgba(0,0,0,0.25);\n  pointer-events: none;\n}\n\n#mlc-app .mlc-empty {\n  text-align: center;\n  padding: 40px 20px;\n  color: #9aa5c4;\n  font-size: 14px;\n}\n\n/* Action row */\n#mlc-app .mlc-action-row {\n  display: none;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 18px;\n}\n\n/* Cross-links */\n#mlc-app .mlc-crosslinks {\n  border-top: 1.5px solid #e0e4f7;\n  padding-top: 16px;\n  margin-top: 8px;\n}\n#mlc-app .mlc-crosslinks p {\n  margin: 0 0 8px 0;\n  font-size: 13px;\n  color: #555e7a;\n}\n#mlc-app .mlc-crosslinks a {\n  color: #4361ee;\n  text-decoration: none;\n  font-weight: 600;\n  margin-right: 10px;\n}\n#mlc-app .mlc-crosslinks a:hover {\n  text-decoration: underline;\n}\n\n/* freee CTA */\n#mlc-app .mlc-freee-cta {\n  margin-top: 20px;\n  background: linear-gradient(135deg, #e8f4fd 0%, #f0f8ff 100%);\n  border: 1.5px solid #90caf9;\n  border-radius: 12px;\n  padding: 18px 20px;\n}\n#mlc-app .mlc-freee-cta h3 {\n  margin: 0 0 8px 0;\n  font-size: 1rem;\n  font-weight: 700;\n  color: #0f3460;\n}\n#mlc-app .mlc-freee-cta p {\n  margin: 0 0 14px 0;\n  font-size: 13px;\n  color: #374151;\n  line-height: 1.65;\n}\n#mlc-app .mlc-freee-cta a.mlc-freee-btn {\n  display: inline-block;\n  background: #1a73e8;\n  color: #fff;\n  padding: 9px 22px;\n  border-radius: 7px;\n  font-size: 14px;\n  font-weight: 700;\n  text-decoration: none;\n  transition: background 0.18s;\n}\n#mlc-app .mlc-freee-cta a.mlc-freee-btn:hover {\n  background: #1557b0;\n}\n\n/* Responsive */\n@media (max-width: 600px) {\n  #mlc-app .mlc-btn-row { flex-direction: column; }\n  #mlc-app button.mlc-btn { width: 100%; justify-content: center; }\n  #mlc-app .mlc-action-row { flex-direction: column; }\n  #mlc-app .mlc-url-cell { max-width: 160px; }\n}\n\u003c/style\u003e\n\u003c!-- 入力エリア --\u003e\n\u003cdiv class=\"mlc-input-wrap\"\u003e\n  \u003ch2 class=\"mlc-section-title\"\u003eマークダウンを貼り付け\u003c/h2\u003e\n  \u003ctextarea id=\"mlc-input\" placeholder=\"マークダウンをここに貼り付けてください...\u0026#10;\u0026#10;例：\u0026#10;[Google](https://google.com)\u0026#10;![ロゴ](https://example.com/logo.png)\u0026#10;[概要](#about)\u0026#10;[内部ページ](/blog/post)\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"mlc-btn-row\"\u003e\n    \u003cbutton class=\"mlc-btn\" id=\"mlc-analyze-btn\" onclick=\"mlcAnalyze()\"\u003eリンクを抽出\u003c/button\u003e\n    \u003cbutton class=\"mlc-btn\" id=\"mlc-clear-btn\" onclick=\"mlcClear()\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 統計バー --\u003e\n\u003cdiv class=\"mlc-stats-bar\" id=\"mlc-stats-bar\"\u003e\u003c/div\u003e\n\u003c!-- フィルタタブ --\u003e\n\u003cdiv class=\"mlc-filter-row\" id=\"mlc-filter-row\"\u003e\u003c/div\u003e\n\u003c!-- テーブル --\u003e\n\u003cdiv class=\"mlc-results-wrap\" id=\"mlc-results-wrap\"\u003e\n  \u003ctable class=\"mlc-table\" id=\"mlc-table\"\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n        \u003cth\u003e#\u003c/th\u003e\n        \u003cth\u003eリンクテキスト\u003c/th\u003e\n        \u003cth\u003eURL\u003c/th\u003e\n        \u003cth\u003e種類\u003c/th\u003e\n        \u003cth\u003eフラグ\u003c/th\u003e\n      \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody id=\"mlc-tbody\"\u003e\u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\u003c!-- アクションボタン --\u003e\n\u003cdiv class=\"mlc-action-row\" id=\"mlc-action-row\"\u003e\n  \u003cbutton class=\"mlc-btn mlc-btn-export\" onclick=\"mlcExportCSV()\"\u003eCSVでエクスポート\u003c/button\u003e\n  \u003cbutton class=\"mlc-btn mlc-btn-export\" onclick=\"mlcExportJSON()\"\u003eJSONでエクスポート\u003c/button\u003e\n  \u003cbutton class=\"mlc-btn\" id=\"mlc-copy-urls-btn\" onclick=\"mlcCopyAllURLs()\"\u003e全URLをコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- トースト通知 --\u003e\n\u003cdiv class=\"mlc-toast\" id=\"mlc-toast\"\u003e\u003c/div\u003e\n\u003c!-- 関連ツール --\u003e\n\u003cdiv class=\"mlc-crosslinks\"\u003e\n  \u003cp\u003e関連ツール：\u003c/p\u003e","title":"マークダウンリンクチェッカー — リンク抽出・検証"},{"content":" 通常計算 ローン比較 プリセット： 住宅ローン 自動車ローン 教育ローン ローン情報を入力 \u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;field-label\u0026quot;\u0026gt;借入金額\u0026lt;/span\u0026gt; \u0026lt;input class=\u0026quot;field-input\u0026quot; id=\u0026quot;loanAmount\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;3000\u0026quot; min=\u0026quot;1\u0026quot; step=\u0026quot;1\u0026quot; placeholder=\u0026quot;3000\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;unit-toggle\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;unit-btn active\u0026quot; id=\u0026quot;unitMan\u0026quot; onclick=\u0026quot;setAmountUnit('man')\u0026quot;\u0026gt;万円\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;unit-btn\u0026quot; id=\u0026quot;unitYen\u0026quot; onclick=\u0026quot;setAmountUnit('yen')\u0026quot;\u0026gt;円\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;field-label\u0026quot;\u0026gt;年利（%）\u0026lt;/span\u0026gt; \u0026lt;input class=\u0026quot;field-input\u0026quot; id=\u0026quot;annualRate\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;1.5\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;0.01\u0026quot; placeholder=\u0026quot;1.5\u0026quot;\u0026gt; \u0026lt;span style=\u0026quot;font-size:13px;color:#6b7280;\u0026quot;\u0026gt;%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;field-label\u0026quot;\u0026gt;借入期間\u0026lt;/span\u0026gt; \u0026lt;input class=\u0026quot;field-input\u0026quot; id=\u0026quot;loanTerm\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;35\u0026quot; min=\u0026quot;1\u0026quot; step=\u0026quot;1\u0026quot; placeholder=\u0026quot;35\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;unit-toggle\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;unit-btn active\u0026quot; id=\u0026quot;termYear\u0026quot; onclick=\u0026quot;setTermUnit('year')\u0026quot;\u0026gt;年\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;unit-btn\u0026quot; id=\u0026quot;termMonth\u0026quot; onclick=\u0026quot;setTermUnit('month')\u0026quot;\u0026gt;ヶ月\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;calc-btn\u0026quot; onclick=\u0026quot;calculate()\u0026quot;\u0026gt;計算する\u0026lt;/button\u0026gt; 毎月の返済額 - 総返済額 - 総利息 - 返済終了 - 元金 vs 利息の内訳 元金 - 利息 - 繰上返済シミュレーション 毎月追加返済額 円 一括繰上返済額 円 繰上返済効果を計算 短縮期間 - 節約利息額 - 新・毎月返済額 - 返済スケジュール表 年月 返済額 元金 利息 残高 全期間を表示する ▼ ローン A 借入金額 万円 年利（%） 期間（年） \u0026lt;div class=\u0026quot;compare-col\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;input-card\u0026quot; style=\u0026quot;border-color:#fde68a;background:#fffbeb;\u0026quot;\u0026gt; \u0026lt;h3 style=\u0026quot;color:#d97706;\u0026quot;\u0026gt;ローン B\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;field-label\u0026quot;\u0026gt;借入金額\u0026lt;/span\u0026gt; \u0026lt;input class=\u0026quot;field-input\u0026quot; id=\u0026quot;cB_amount\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;3000\u0026quot; placeholder=\u0026quot;3000\u0026quot;\u0026gt; \u0026lt;span style=\u0026quot;font-size:13px;color:#6b7280;\u0026quot;\u0026gt;万円\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;field-label\u0026quot;\u0026gt;年利（%）\u0026lt;/span\u0026gt; \u0026lt;input class=\u0026quot;field-input\u0026quot; id=\u0026quot;cB_rate\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;1.5\u0026quot; step=\u0026quot;0.01\u0026quot; placeholder=\u0026quot;1.5\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;field-label\u0026quot;\u0026gt;期間（年）\u0026lt;/span\u0026gt; \u0026lt;input class=\u0026quot;field-input\u0026quot; id=\u0026quot;cB_term\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;35\u0026quot; placeholder=\u0026quot;35\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 2つを比較する\nローン A 毎月返済額- 総返済額- 総利息- 年利- 期間- ローン B 毎月返済額- 総返済額- 総利息- 年利- 期間- ローン計算ツールの使い方 このツールは3ステップで使えます。\n借入金額・金利・期間を入力する — 万円・円の単位は切り替え可能です。住宅ローン・自動車ローン・教育ローンのプリセットボタンを使えば、代表的な金利が自動入力されます。 「計算する」を押す — 毎月返済額が大きく表示され、総返済額・総利息・返済終了月のサマリーと、元金・利息の割合を示す円グラフが表示されます。 繰上返済や比較も試す — 毎月の追加返済額や一括繰上返済を入力すると、何ヶ月短縮できるか・利息をいくら節約できるかがわかります。「ローン比較」タブでは2つのローン条件を並べて比較できます。 ローンを早く返すコツ 毎月少額でも繰上返済を続ける 元金が減ると次月以降の利息も減るため、複利効果が逆方向に働きます。月1万円の上乗せでも、35年ローンなら数年短縮できることがあります。\nボーナス時に一括繰上返済する 残高が多い初期ほど利息削減効果が大きくなります。ローン開始から5年以内の一括返済は特に効率的です。\n金利の低いローンへの借換えを検討する 変動金利が上昇傾向にある場合や、固定期間終了時には借換えで総返済額を大幅に下げられることがあります。手数料と節約額を必ず比較してください。\n返済期間を短く設定し直す 借換えや条件変更の際に期間を短縮すると、金利コストを抑えながら完済を早められます。毎月の返済額が増える点は、このツールの比較モードで事前に確認しましょう。\n関連ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール インフレが資産に与える影響を確認 → インフレ計算ツール サブスクの年間コストを把握 → サブスク管理計算ツール 住宅ローン控除の確定申告をもっと簡単に\n住宅ローン控除の初年度は確定申告が必要です。クラウド会計ソフト「freee」なら、必要書類をガイドに沿って入力するだけで申告書が完成します。\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/loan-calculator/","summary":"\u003cdiv id=\"loan-app\"\u003e\n\u003cstyle\u003e\n#loan-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a1a1a;\n}\n#loan-app * { box-sizing: border-box; }\n\n/* preset buttons */\n.preset-bar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 20px;\n}\n.preset-btn {\n  background: #f0fdf4;\n  border: 1.5px solid #059669;\n  color: #059669;\n  border-radius: 20px;\n  padding: 6px 16px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n.preset-btn:hover, .preset-btn.active {\n  background: #059669;\n  color: #fff;\n}\n\n/* tab */\n.tab-bar {\n  display: flex;\n  border-bottom: 2px solid #d1fae5;\n  margin-bottom: 24px;\n  gap: 4px;\n}\n.tab-btn {\n  background: none;\n  border: none;\n  padding: 10px 20px;\n  font-size: 14px;\n  font-weight: 600;\n  color: #6b7280;\n  cursor: pointer;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  border-radius: 6px 6px 0 0;\n  transition: color 0.15s;\n}\n.tab-btn.active {\n  color: #059669;\n  border-bottom-color: #059669;\n  background: #f0fdf4;\n}\n\n/* input card */\n.input-card {\n  background: #f0fdf4;\n  border: 1px solid #a7f3d0;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 24px;\n}\n.input-card h3 {\n  margin: 0 0 16px;\n  font-size: 15px;\n  color: #059669;\n  font-weight: 700;\n}\n.field-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 14px;\n  flex-wrap: wrap;\n}\n.field-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #374151;\n  min-width: 130px;\n}\n.field-input {\n  flex: 1;\n  min-width: 100px;\n  padding: 9px 12px;\n  border: 1.5px solid #a7f3d0;\n  border-radius: 8px;\n  font-size: 15px;\n  color: #1a1a1a;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.15s;\n}\n.field-input:focus { border-color: #059669; }\n.unit-toggle {\n  display: flex;\n  border: 1.5px solid #a7f3d0;\n  border-radius: 8px;\n  overflow: hidden;\n  background: #fff;\n}\n.unit-btn {\n  padding: 9px 14px;\n  background: none;\n  border: none;\n  font-size: 13px;\n  font-weight: 600;\n  color: #6b7280;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n.unit-btn.active {\n  background: #059669;\n  color: #fff;\n}\n.calc-btn {\n  width: 100%;\n  background: #059669;\n  color: #fff;\n  border: none;\n  border-radius: 10px;\n  padding: 14px;\n  font-size: 16px;\n  font-weight: 700;\n  cursor: pointer;\n  margin-top: 8px;\n  transition: background 0.15s;\n}\n.calc-btn:hover { background: #047857; }\n\n/* result */\n.result-hero {\n  background: linear-gradient(135deg, #059669 0%, #047857 100%);\n  color: #fff;\n  border-radius: 14px;\n  padding: 28px 24px;\n  text-align: center;\n  margin-bottom: 20px;\n}\n.result-hero .label { font-size: 14px; opacity: 0.85; margin-bottom: 6px; }\n.result-hero .amount { font-size: 42px; font-weight: 800; letter-spacing: -1px; }\n.result-hero .sub { font-size: 18px; font-weight: 600; opacity: 0.9; margin-top: 2px; }\n\n.summary-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 12px;\n  margin-bottom: 24px;\n}\n.summary-card {\n  background: #fff;\n  border: 1px solid #d1fae5;\n  border-radius: 10px;\n  padding: 16px;\n  text-align: center;\n}\n.summary-card .s-label { font-size: 12px; color: #6b7280; margin-bottom: 6px; font-weight: 600; }\n.summary-card .s-value { font-size: 20px; font-weight: 800; color: #059669; }\n.summary-card .s-sub { font-size: 11px; color: #9ca3af; margin-top: 2px; }\n\n/* pie chart */\n.pie-section {\n  display: flex;\n  align-items: center;\n  gap: 32px;\n  background: #fff;\n  border: 1px solid #d1fae5;\n  border-radius: 12px;\n  padding: 20px 24px;\n  margin-bottom: 24px;\n  flex-wrap: wrap;\n}\n.pie-title { font-size: 14px; font-weight: 700; color: #374151; margin-bottom: 14px; }\n.pie-wrap { position: relative; width: 110px; height: 110px; flex-shrink: 0; }\n.pie-chart {\n  width: 110px;\n  height: 110px;\n  border-radius: 50%;\n  background: conic-gradient(#059669 0deg var(--principal-deg), #fbbf24 var(--principal-deg) 360deg);\n}\n.pie-inner {\n  position: absolute;\n  top: 50%; left: 50%;\n  transform: translate(-50%, -50%);\n  width: 54px; height: 54px;\n  background: #fff;\n  border-radius: 50%;\n}\n.pie-legend { flex: 1; min-width: 160px; }\n.legend-item {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 10px;\n  font-size: 13px;\n}\n.legend-dot {\n  width: 12px; height: 12px;\n  border-radius: 3px;\n  flex-shrink: 0;\n}\n.legend-dot.principal { background: #059669; }\n.legend-dot.interest { background: #fbbf24; }\n.legend-info { line-height: 1.3; }\n.legend-name { font-weight: 600; color: #374151; }\n.legend-pct { color: #6b7280; font-size: 12px; }\n\n/* prepayment */\n.prepay-card {\n  background: #fffbeb;\n  border: 1px solid #fde68a;\n  border-radius: 12px;\n  padding: 20px 24px;\n  margin-bottom: 24px;\n}\n.prepay-card h3 { margin: 0 0 14px; font-size: 15px; color: #d97706; font-weight: 700; }\n.prepay-result {\n  display: flex;\n  gap: 12px;\n  margin-top: 14px;\n  flex-wrap: wrap;\n}\n.prepay-box {\n  flex: 1;\n  min-width: 120px;\n  background: #fff;\n  border: 1px solid #fde68a;\n  border-radius: 8px;\n  padding: 12px;\n  text-align: center;\n}\n.prepay-box .p-label { font-size: 11px; color: #92400e; font-weight: 600; margin-bottom: 4px; }\n.prepay-box .p-value { font-size: 18px; font-weight: 800; color: #d97706; }\n\n/* schedule table */\n.schedule-section { margin-bottom: 24px; }\n.schedule-section h3 { font-size: 15px; font-weight: 700; color: #374151; margin-bottom: 12px; }\n.table-wrap {\n  overflow-x: auto;\n  border: 1px solid #d1fae5;\n  border-radius: 10px;\n}\ntable {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\nthead th {\n  background: #059669;\n  color: #fff;\n  padding: 10px 12px;\n  text-align: right;\n  font-weight: 700;\n  white-space: nowrap;\n}\nthead th:first-child { text-align: left; }\ntbody tr:nth-child(even) { background: #f0fdf4; }\ntbody td {\n  padding: 8px 12px;\n  text-align: right;\n  border-bottom: 1px solid #d1fae5;\n  white-space: nowrap;\n}\ntbody td:first-child { text-align: left; color: #6b7280; font-size: 12px; }\n.show-more-btn {\n  display: block;\n  width: 100%;\n  margin-top: 10px;\n  padding: 10px;\n  background: #fff;\n  border: 1.5px solid #059669;\n  color: #059669;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n.show-more-btn:hover { background: #f0fdf4; }\n\n/* compare mode */\n.compare-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 20px;\n}\n.compare-col { }\n.compare-vs {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 20px;\n  font-weight: 800;\n  color: #9ca3af;\n  padding-top: 40px;\n}\n.compare-result-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n  margin-bottom: 20px;\n}\n.compare-result-card {\n  background: #f0fdf4;\n  border: 1px solid #a7f3d0;\n  border-radius: 10px;\n  padding: 16px;\n}\n.compare-result-card h4 { margin: 0 0 12px; font-size: 14px; color: #059669; font-weight: 700; }\n.compare-row { display: flex; justify-content: space-between; font-size: 13px; margin-bottom: 6px; }\n.compare-row .cr-label { color: #6b7280; }\n.compare-row .cr-value { font-weight: 700; color: #1a1a1a; }\n\n.hidden { display: none !important; }\n.section-divider { border: none; border-top: 1px solid #d1fae5; margin: 24px 0; }\n\n@media (max-width: 600px) {\n  .summary-grid { grid-template-columns: 1fr 1fr; }\n  .result-hero .amount { font-size: 32px; }\n  .compare-grid { grid-template-columns: 1fr; }\n  .compare-result-grid { grid-template-columns: 1fr; }\n  .field-label { min-width: 100px; }\n  .tab-btn { padding: 8px 12px; font-size: 13px; }\n}\n\u003c/style\u003e\n\u003c!-- TAB BAR --\u003e\n\u003cdiv class=\"tab-bar\"\u003e\n  \u003cbutton class=\"tab-btn active\" onclick=\"switchTab('single')\"\u003e通常計算\u003c/button\u003e\n  \u003cbutton class=\"tab-btn\" onclick=\"switchTab('compare')\"\u003eローン比較\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- ===== SINGLE MODE ===== --\u003e\n\u003cdiv id=\"tab-single\"\u003e\n  \u003c!-- Preset --\u003e\n  \u003cdiv class=\"preset-bar\"\u003e\n    \u003cspan style=\"font-size:13px;font-weight:600;color:#6b7280;align-self:center;\"\u003eプリセット：\u003c/span\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"applyPreset('housing')\"\u003e住宅ローン\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"applyPreset('car')\"\u003e自動車ローン\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"applyPreset('edu')\"\u003e教育ローン\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- Input --\u003e\n  \u003cdiv class=\"input-card\"\u003e\n    \u003ch3\u003eローン情報を入力\u003c/h3\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt;\n  \u0026lt;span class=\u0026quot;field-label\u0026quot;\u0026gt;借入金額\u0026lt;/span\u0026gt;\n  \u0026lt;input class=\u0026quot;field-input\u0026quot; id=\u0026quot;loanAmount\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;3000\u0026quot; min=\u0026quot;1\u0026quot; step=\u0026quot;1\u0026quot; placeholder=\u0026quot;3000\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;unit-toggle\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;unit-btn active\u0026quot; id=\u0026quot;unitMan\u0026quot; onclick=\u0026quot;setAmountUnit('man')\u0026quot;\u0026gt;万円\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;unit-btn\u0026quot; id=\u0026quot;unitYen\u0026quot; onclick=\u0026quot;setAmountUnit('yen')\u0026quot;\u0026gt;円\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt;\n  \u0026lt;span class=\u0026quot;field-label\u0026quot;\u0026gt;年利（%）\u0026lt;/span\u0026gt;\n  \u0026lt;input class=\u0026quot;field-input\u0026quot; id=\u0026quot;annualRate\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;1.5\u0026quot; min=\u0026quot;0\u0026quot; step=\u0026quot;0.01\u0026quot; placeholder=\u0026quot;1.5\u0026quot;\u0026gt;\n  \u0026lt;span style=\u0026quot;font-size:13px;color:#6b7280;\u0026quot;\u0026gt;%\u0026lt;/span\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt;\n  \u0026lt;span class=\u0026quot;field-label\u0026quot;\u0026gt;借入期間\u0026lt;/span\u0026gt;\n  \u0026lt;input class=\u0026quot;field-input\u0026quot; id=\u0026quot;loanTerm\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;35\u0026quot; min=\u0026quot;1\u0026quot; step=\u0026quot;1\u0026quot; placeholder=\u0026quot;35\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;unit-toggle\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;unit-btn active\u0026quot; id=\u0026quot;termYear\u0026quot; onclick=\u0026quot;setTermUnit('year')\u0026quot;\u0026gt;年\u0026lt;/button\u0026gt;\n    \u0026lt;button class=\u0026quot;unit-btn\u0026quot; id=\u0026quot;termMonth\u0026quot; onclick=\u0026quot;setTermUnit('month')\u0026quot;\u0026gt;ヶ月\u0026lt;/button\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;button class=\u0026quot;calc-btn\u0026quot; onclick=\u0026quot;calculate()\u0026quot;\u0026gt;計算する\u0026lt;/button\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003c!-- Result hero --\u003e\n  \u003cdiv class=\"result-hero\" id=\"resultHero\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"label\"\u003e毎月の返済額\u003c/div\u003e\n    \u003cdiv class=\"amount\" id=\"monthlyPaymentDisplay\"\u003e-\u003c/div\u003e\n    \u003cdiv class=\"sub\" id=\"monthlyPaymentSub\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Summary --\u003e\n  \u003cdiv class=\"summary-grid\" id=\"summaryGrid\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"summary-card\"\u003e\n      \u003cdiv class=\"s-label\"\u003e総返済額\u003c/div\u003e\n      \u003cdiv class=\"s-value\" id=\"totalPayment\"\u003e-\u003c/div\u003e\n      \u003cdiv class=\"s-sub\" id=\"totalPaymentSub\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"summary-card\"\u003e\n      \u003cdiv class=\"s-label\"\u003e総利息\u003c/div\u003e\n      \u003cdiv class=\"s-value\" id=\"totalInterest\"\u003e-\u003c/div\u003e\n      \u003cdiv class=\"s-sub\" id=\"totalInterestSub\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"summary-card\"\u003e\n      \u003cdiv class=\"s-label\"\u003e返済終了\u003c/div\u003e\n      \u003cdiv class=\"s-value\" id=\"endDate\"\u003e-\u003c/div\u003e\n      \u003cdiv class=\"s-sub\" id=\"endDateSub\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Pie chart --\u003e\n  \u003cdiv class=\"pie-section\" id=\"pieSection\" style=\"display:none;\"\u003e\n    \u003cdiv\u003e\n      \u003cdiv class=\"pie-title\"\u003e元金 vs 利息の内訳\u003c/div\u003e\n      \u003cdiv class=\"pie-wrap\"\u003e\n        \u003cdiv class=\"pie-chart\" id=\"pieChart\"\u003e\u003c/div\u003e\n        \u003cdiv class=\"pie-inner\"\u003e\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"pie-legend\"\u003e\n      \u003cdiv class=\"legend-item\"\u003e\n        \u003cdiv class=\"legend-dot principal\"\u003e\u003c/div\u003e\n        \u003cdiv class=\"legend-info\"\u003e\n          \u003cdiv class=\"legend-name\"\u003e元金\u003c/div\u003e\n          \u003cdiv class=\"legend-pct\" id=\"principalPct\"\u003e-\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"legend-item\"\u003e\n        \u003cdiv class=\"legend-dot interest\"\u003e\u003c/div\u003e\n        \u003cdiv class=\"legend-info\"\u003e\n          \u003cdiv class=\"legend-name\"\u003e利息\u003c/div\u003e\n          \u003cdiv class=\"legend-pct\" id=\"interestPct\"\u003e-\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Prepayment --\u003e\n  \u003cdiv class=\"prepay-card\" id=\"prepayCard\" style=\"display:none;\"\u003e\n    \u003ch3\u003e繰上返済シミュレーション\u003c/h3\u003e\n    \u003cdiv class=\"field-row\"\u003e\n      \u003cspan class=\"field-label\"\u003e毎月追加返済額\u003c/span\u003e\n      \u003cinput class=\"field-input\" id=\"extraMonthly\" type=\"number\" value=\"0\" min=\"0\" step=\"1000\" placeholder=\"0\"\u003e\n      \u003cspan style=\"font-size:13px;color:#6b7280;\"\u003e円\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"field-row\"\u003e\n      \u003cspan class=\"field-label\"\u003e一括繰上返済額\u003c/span\u003e\n      \u003cinput class=\"field-input\" id=\"lumpSum\" type=\"number\" value=\"0\" min=\"0\" step=\"10000\" placeholder=\"0\"\u003e\n      \u003cspan style=\"font-size:13px;color:#6b7280;\"\u003e円\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cbutton class=\"calc-btn\" style=\"background:#d97706;\" onclick=\"calcPrepay()\"\u003e繰上返済効果を計算\u003c/button\u003e\n    \u003cdiv class=\"prepay-result\" id=\"prepayResult\" style=\"display:none;\"\u003e\n      \u003cdiv class=\"prepay-box\"\u003e\n        \u003cdiv class=\"p-label\"\u003e短縮期間\u003c/div\u003e\n        \u003cdiv class=\"p-value\" id=\"savedMonths\"\u003e-\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"prepay-box\"\u003e\n        \u003cdiv class=\"p-label\"\u003e節約利息額\u003c/div\u003e\n        \u003cdiv class=\"p-value\" id=\"savedInterest\"\u003e-\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"prepay-box\"\u003e\n        \u003cdiv class=\"p-label\"\u003e新・毎月返済額\u003c/div\u003e\n        \u003cdiv class=\"p-value\" id=\"newMonthly\"\u003e-\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Schedule table --\u003e\n  \u003cdiv class=\"schedule-section\" id=\"scheduleSection\" style=\"display:none;\"\u003e\n    \u003ch3\u003e返済スケジュール表\u003c/h3\u003e\n    \u003cdiv class=\"table-wrap\"\u003e\n      \u003ctable\u003e\n        \u003cthead\u003e\n          \u003ctr\u003e\n            \u003cth style=\"text-align:left;\"\u003e年月\u003c/th\u003e\n            \u003cth\u003e返済額\u003c/th\u003e\n            \u003cth\u003e元金\u003c/th\u003e\n            \u003cth\u003e利息\u003c/th\u003e\n            \u003cth\u003e残高\u003c/th\u003e\n          \u003c/tr\u003e\n        \u003c/thead\u003e\n        \u003ctbody id=\"scheduleBody\"\u003e\u003c/tbody\u003e\n      \u003c/table\u003e\n    \u003c/div\u003e\n    \u003cbutton class=\"show-more-btn\" id=\"showMoreBtn\" onclick=\"toggleSchedule()\"\u003e全期間を表示する ▼\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\u003c!-- /tab-single --\u003e\n\u003c!-- ===== COMPARE MODE ===== --\u003e\n\u003cdiv id=\"tab-compare\" class=\"hidden\"\u003e\n  \u003cdiv class=\"compare-grid\"\u003e\n    \u003cdiv class=\"compare-col\"\u003e\n      \u003cdiv class=\"input-card\"\u003e\n        \u003ch3\u003eローン A\u003c/h3\u003e\n        \u003cdiv class=\"field-row\"\u003e\n          \u003cspan class=\"field-label\"\u003e借入金額\u003c/span\u003e\n          \u003cinput class=\"field-input\" id=\"cA_amount\" type=\"number\" value=\"3000\" placeholder=\"3000\"\u003e\n          \u003cspan style=\"font-size:13px;color:#6b7280;\"\u003e万円\u003c/span\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"field-row\"\u003e\n          \u003cspan class=\"field-label\"\u003e年利（%）\u003c/span\u003e\n          \u003cinput class=\"field-input\" id=\"cA_rate\" type=\"number\" value=\"0.5\" step=\"0.01\" placeholder=\"0.5\"\u003e\n        \u003c/div\u003e\n        \u003cdiv class=\"field-row\"\u003e\n          \u003cspan class=\"field-label\"\u003e期間（年）\u003c/span\u003e\n          \u003cinput class=\"field-input\" id=\"cA_term\" type=\"number\" value=\"35\" placeholder=\"35\"\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;div class=\u0026quot;compare-col\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;input-card\u0026quot; style=\u0026quot;border-color:#fde68a;background:#fffbeb;\u0026quot;\u0026gt;\n    \u0026lt;h3 style=\u0026quot;color:#d97706;\u0026quot;\u0026gt;ローン B\u0026lt;/h3\u0026gt;\n    \u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;field-label\u0026quot;\u0026gt;借入金額\u0026lt;/span\u0026gt;\n      \u0026lt;input class=\u0026quot;field-input\u0026quot; id=\u0026quot;cB_amount\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;3000\u0026quot; placeholder=\u0026quot;3000\u0026quot;\u0026gt;\n      \u0026lt;span style=\u0026quot;font-size:13px;color:#6b7280;\u0026quot;\u0026gt;万円\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;field-label\u0026quot;\u0026gt;年利（%）\u0026lt;/span\u0026gt;\n      \u0026lt;input class=\u0026quot;field-input\u0026quot; id=\u0026quot;cB_rate\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;1.5\u0026quot; step=\u0026quot;0.01\u0026quot; placeholder=\u0026quot;1.5\u0026quot;\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;field-row\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;field-label\u0026quot;\u0026gt;期間（年）\u0026lt;/span\u0026gt;\n      \u0026lt;input class=\u0026quot;field-input\u0026quot; id=\u0026quot;cB_term\u0026quot; type=\u0026quot;number\u0026quot; value=\u0026quot;35\u0026quot; placeholder=\u0026quot;35\u0026quot;\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003cp\u003e\u003cbutton class=\"calc-btn\" onclick=\"calcCompare()\"\u003e2つを比較する\u003c/button\u003e\u003c/p\u003e","title":"ローン計算ツール - 返済額・利息シミュレーション"},{"content":"シナリオを選ぶだけで、正確な git コマンドとフラグの解説をすぐに確認できます。ワンクリックでコピー。登録不要・無料。\n\u0026#9881; 左のパネルからシナリオを選ぶと、コマンドと解説が表示されます。\n\u0026#9889; よくあるワークフロー \u0026#128200; 開発チームの経費・請求書・給与計算もまとめて効率化 freee なら経費精算・請求書発行・給与計算をクラウドで自動化。エンジニアチームのバックオフィス業務をスリムにできます。無料プランから始められます。\nfreee を無料で試す 関連ツール cron 式を作成 → Cron式ジェネレーター 変更履歴を生成 → 変更履歴ジェネレーター .htaccess を作成 → .htaccessジェネレーター ","permalink":"https://productivity-works.com/ja/tools/git-command-generator/","summary":"\u003cp\u003eシナリオを選ぶだけで、正確な git コマンドとフラグの解説をすぐに確認できます。ワンクリックでコピー。登録不要・無料。\u003c/p\u003e\n\u003cdiv id=\"git-app\"\u003e\n\u003cstyle\u003e\n  #git-app *,\n  #git-app *::before,\n  #git-app *::after {\n    box-sizing: border-box;\n  }\n  #git-app {\n    font-family: \"Hiragino Kaku Gothic ProN\", \"Hiragino Sans\", Meiryo, -apple-system, BlinkMacSystemFont, sans-serif;\n    font-size: 15px;\n    color: #1a1a2e;\n    margin: 0 auto;\n    max-width: 960px;\n  }\n\u003cp\u003e/* Search */\n#git-app .git-search-wrap {\nmargin-bottom: 20px;\n}\n#git-app #git-search {\nwidth: 100%;\npadding: 11px 16px;\nborder: 2px solid #e2e8f0;\nborder-radius: 10px;\nfont-size: 1rem;\nfont-family: inherit;\nbackground: #fff;\ncolor: #1a1a2e;\noutline: none;\ntransition: border-color 0.18s;\n}\n#git-app #git-search:focus {\nborder-color: #f05033;\n}\n#git-app .git-search-count {\nmargin-top: 6px;\nfont-size: 0.82rem;\ncolor: #718096;\n}\u003c/p\u003e","title":"Gitコマンドジェネレーター — クイックリファレンス"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nフリーランス報酬計算ツール【2026年版】 目標年収・稼働時間・経費を入力するだけで、適正な時給単価・日単価・必要月間売上を自動計算します。値下げ交渉に負けない「根拠ある単価」を把握しましょう。\n入力項目 目標年収（万円） 万円 週の稼働時間（時間） 20h30時間/週40h 年間稼働週数 40週48週/年52週 年間経費（万円） 万円（PC・通信費・書籍など） 税金・社会保険料率（%） 15%30%40% 利益マージン（%） 0%10%30% 手元に残る金額の内訳 案件単価変換（推奨時給単価 × 稼働時間） 年収別 単価比較テーブル（現在の稼働条件で試算） フリーランスの適正単価の決め方 1. 「手取り目標」から逆算する 会社員と違い、フリーランスは税金・社会保険料・経費をすべて売上から負担します。目標年収500万円の場合、実際には700〜800万円規模の売上が必要なケースが多いです。上のツールで「必要年間売上」を確認し、そこから時給に落とし込むのが正攻法です。\n2. 「最低単価」を死守する 値下げ交渉を受けた際、根拠なく応じると赤字になります。このツールで算出した最低時給単価は「これ以下では受けられない」ラインです。提案時は推奨単価を提示し、交渉余地として最低単価との差を保持しておきましょう。\n3. 稼働時間に「ノンビラブル時間」を含めない 実際に請求できる稼働時間は、総稼働時間の70〜80%程度です。営業・事務・スキルアップの時間は収益を生みません。週30時間稼働でも請求できるのは実質20〜24時間、と考えて設定すると安全です。\n職種別 フリーランス単価の相場 職種 時給相場 月単価（20日×8h） 備考 Webライター 2,000〜5,000円 32〜80万円 専門領域・文字単価で大きく変動 Webデザイナー 3,000〜8,000円 48〜128万円 UI/UXスキルで上振れ エンジニア（Web） 5,000〜15,000円 80〜240万円 言語・フレームワーク次第 コンサルタント 8,000〜30,000円 128〜480万円 業界経験・実績が直結 動画編集者 2,000〜6,000円 32〜96万円 案件単価は1本3〜10万円が多い マーケター 4,000〜12,000円 64〜192万円 広告運用・SEO等で差異 ※上記は2026年時点の市場相場の目安です。スキル・実績・クライアントにより大きく異なります。\n関連ツール 副業の税金を計算 → 副業税金計算ツール 手取り額を計算 → 手取り計算シミュレーター 所得税を計算 → 所得税シミュレーター 家計を見直す → 家計簿シミュレーター FIRE達成年数を計算 → FIREシミュレーター 転職後の年収を比較 → 転職年収シミュレーター 関連記事 フリーランス確定申告のやり方と必要書類まとめ 開業届の出し方とメリット・デメリット フリーランスにおすすめの会計ソフト比較2026年版 副業から独立するタイミングの見極め方 フリーランスが節税できる経費一覧【2026年】 フリーランスの経理なら**freee会計（無料トライアルあり） **\n本ツールの計算結果は概算です。実際の税額・社会保険料は個人の状況により異なります。正確な数値は税理士・社会保険労務士にご相談ください。\n","permalink":"https://productivity-works.com/ja/tools/freelance-hoshu-calculator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"フリーランス報酬計算ツール2026年版\"\u003eフリーランス報酬計算ツール【2026年版】\u003c/h1\u003e\n\u003cp\u003e目標年収・稼働時間・経費を入力するだけで、\u003cstrong\u003e適正な時給単価\u003c/strong\u003e・\u003cstrong\u003e日単価\u003c/strong\u003e・\u003cstrong\u003e必要月間売上\u003c/strong\u003eを自動計算します。値下げ交渉に負けない「根拠ある単価」を把握しましょう。\u003c/p\u003e\n\u003cdiv id=\"fh-calc\" style=\"max-width:680px;margin:0 auto;font-family:'Noto Sans JP',sans-serif;\"\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #0d9488;border-radius:12px;background:#f0fdfa;\"\u003e\n\u003ch3 style=\"margin:0 0 16px;color:#0f766e;font-size:17px;\"\u003e入力項目\u003c/h3\u003e\n\u003cdiv style=\"margin-bottom:18px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e目標年収（万円）\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:12px;\"\u003e\n\u003cinput type=\"number\" id=\"targetNenshu\" min=\"100\" max=\"3000\" step=\"10\" value=\"500\" oninput=\"calcFH()\" style=\"width:120px;padding:8px 10px;border:2px solid #0d9488;border-radius:6px;font-size:18px;font-weight:bold;color:#0f766e;text-align:center;\"\u003e\n\u003cspan style=\"font-size:14px;color:#64748b;\"\u003e万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:18px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e週の稼働時間（時間）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"weeklyHours\" min=\"20\" max=\"40\" step=\"1\" value=\"30\" oninput=\"calcFH()\" style=\"width:100%;accent-color:#0d9488;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e20h\u003c/span\u003e\u003cspan id=\"weeklyHoursVal\" style=\"font-weight:bold;font-size:17px;color:#0d9488;\"\u003e30時間/週\u003c/span\u003e\u003cspan\u003e40h\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:18px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e年間稼働週数\u003c/label\u003e\n\u003cinput type=\"range\" id=\"workWeeks\" min=\"40\" max=\"52\" step=\"1\" value=\"48\" oninput=\"calcFH()\" style=\"width:100%;accent-color:#0d9488;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e40週\u003c/span\u003e\u003cspan id=\"workWeeksVal\" style=\"font-weight:bold;font-size:17px;color:#0d9488;\"\u003e48週/年\u003c/span\u003e\u003cspan\u003e52週\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:18px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e年間経費（万円）\u003c/label\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:12px;\"\u003e\n\u003cinput type=\"number\" id=\"annualExpense\" min=\"0\" max=\"500\" step=\"5\" value=\"50\" oninput=\"calcFH()\" style=\"width:120px;padding:8px 10px;border:2px solid #0d9488;border-radius:6px;font-size:18px;font-weight:bold;color:#0f766e;text-align:center;\"\u003e\n\u003cspan style=\"font-size:14px;color:#64748b;\"\u003e万円（PC・通信費・書籍など）\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:18px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e税金・社会保険料率（%）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"taxRate\" min=\"15\" max=\"40\" step=\"1\" value=\"30\" oninput=\"calcFH()\" style=\"width:100%;accent-color:#0d9488;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e15%\u003c/span\u003e\u003cspan id=\"taxRateVal\" style=\"font-weight:bold;font-size:17px;color:#0d9488;\"\u003e30%\u003c/span\u003e\u003cspan\u003e40%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:4px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e利益マージン（%）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"marginRate\" min=\"0\" max=\"30\" step=\"1\" value=\"10\" oninput=\"calcFH()\" style=\"width:100%;accent-color:#0d9488;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0%\u003c/span\u003e\u003cspan id=\"marginRateVal\" style=\"font-weight:bold;font-size:17px;color:#0d9488;\"\u003e10%\u003c/span\u003e\u003cspan\u003e30%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 主要結果 --\u003e\n\u003cdiv id=\"fh-result-main\" style=\"margin-top:20px;\"\u003e\n\u003c/div\u003e\n\u003c!-- 内訳グリッド --\u003e\n\u003cdiv id=\"fh-result-grid\" style=\"margin-top:16px;display:grid;grid-template-columns:repeat(2,1fr);gap:12px;\"\u003e\n\u003c/div\u003e\n\u003c!-- 売上内訳バー --\u003e\n\u003cdiv id=\"fh-breakdown\" style=\"margin-top:20px;padding:20px;border:2px solid #0d9488;border-radius:12px;background:#fff;\"\u003e\n\u003ch3 style=\"margin:0 0 14px;color:#0f766e;font-size:16px;\"\u003e手元に残る金額の内訳\u003c/h3\u003e\n\u003cdiv id=\"fh-bar-labels\" style=\"display:flex;justify-content:space-between;font-size:12px;color:#64748b;margin-bottom:4px;\"\u003e\u003c/div\u003e\n\u003cdiv id=\"fh-bar\" style=\"display:flex;height:32px;border-radius:8px;overflow:hidden;\"\u003e\u003c/div\u003e\n\u003cdiv id=\"fh-bar-legend\" style=\"display:flex;flex-wrap:wrap;gap:12px;margin-top:10px;font-size:13px;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 案件単価変換 --\u003e\n\u003cdiv style=\"margin-top:20px;padding:20px;border:2px solid #0d9488;border-radius:12px;background:#fff;\"\u003e\n\u003ch3 style=\"margin:0 0 14px;color:#0f766e;font-size:16px;\"\u003e案件単価変換（推奨時給単価 × 稼働時間）\u003c/h3\u003e\n\u003cdiv id=\"fh-project-rates\" style=\"display:grid;grid-template-columns:repeat(2,1fr);gap:10px;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 年収別比較テーブル --\u003e\n\u003cdiv style=\"margin-top:20px;padding:20px;border:2px solid #0d9488;border-radius:12px;background:#fff;\"\u003e\n\u003ch3 style=\"margin:0 0 14px;color:#0f766e;font-size:16px;\"\u003e年収別 単価比較テーブル（現在の稼働条件で試算）\u003c/h3\u003e\n\u003cdiv style=\"overflow-x:auto;\"\u003e\n\u003ctable id=\"fh-table\" style=\"width:100%;border-collapse:collapse;font-size:14px;min-width:360px;\"\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction fmt(n){return Math.round(n).toLocaleString('ja-JP');}\nfunction fmtMan(n){return (Math.round(n/1000)/10).toFixed(1);}\n\nfunction calcFH(){\n  var targetMan=parseFloat(document.getElementById('targetNenshu').value)||500;\n  var weekH=parseInt(document.getElementById('weeklyHours').value);\n  var weeks=parseInt(document.getElementById('workWeeks').value);\n  var expenseMan=parseFloat(document.getElementById('annualExpense').value)||0;\n  var taxPct=parseInt(document.getElementById('taxRate').value);\n  var marginPct=parseInt(document.getElementById('marginRate').value);\n\n  // ラベル更新\n  document.getElementById('weeklyHoursVal').textContent=weekH+'時間/週';\n  document.getElementById('workWeeksVal').textContent=weeks+'週/年';\n  document.getElementById('taxRateVal').textContent=taxPct+'%';\n  document.getElementById('marginRateVal').textContent=marginPct+'%';\n\n  // 計算\n  var totalHours=weekH*weeks;                     // 年間総稼働時間\n  var targetYen=targetMan*10000;                  // 目標年収（円）\n  var expenseYen=expenseMan*10000;                // 年間経費（円）\n  var taxRate=taxPct/100;\n  var marginRate=marginPct/100;\n\n  // 必要年間売上 = (目標年収 + 経費) / (1 - 税率)\n  var requiredSalesYen=(targetYen+expenseYen)/(1-taxRate);\n\n  // 最低時給単価（マージンなし）\n  var minHourlyRate=Math.ceil(requiredSalesYen/totalHours/10)*10;\n\n  // 推奨時給単価（マージン込み）\n  var recHourlyRate=Math.ceil(minHourlyRate/(1-marginRate)/10)*10;\n\n  // 推奨ベースの必要年間売上\n  var recAnnualSales=recHourlyRate*totalHours;\n\n  // 月間売上\n  var recMonthlySales=recAnnualSales/12;\n\n  // 日単価・半日単価（8時間換算）\n  var dayRate=recHourlyRate*8;\n  var halfDayRate=recHourlyRate*4;\n\n  // 内訳（推奨売上ベース）\n  var taxAmt=recAnnualSales*taxRate;\n  var marginAmt=recAnnualSales*marginRate;\n  var tedoriAmt=recAnnualSales-taxAmt-expenseYen-marginAmt;\n\n  // 主要結果描画\n  var rhtml='\u003cdiv style=\"padding:24px;border:2px solid #0d9488;border-radius:12px;background:#0d9488;color:#fff;text-align:center;\"\u003e';\n  rhtml+='\u003cdiv style=\"font-size:13px;opacity:0.85;margin-bottom:4px;\"\u003e最低時給単価\u003c/div\u003e';\n  rhtml+='\u003cdiv style=\"font-size:28px;font-weight:bold;opacity:0.9;\"\u003e'+fmt(minHourlyRate)+'\u003cspan style=\"font-size:16px;font-weight:normal;\"\u003e円/時\u003c/span\u003e\u003c/div\u003e';\n  rhtml+='\u003cdiv style=\"margin-top:12px;font-size:13px;opacity:0.85;\"\u003e推奨時給単価（マージン'+marginPct+'%込み）\u003c/div\u003e';\n  rhtml+='\u003cdiv style=\"font-size:42px;font-weight:bold;letter-spacing:-1px;\"\u003e'+fmt(recHourlyRate)+'\u003cspan style=\"font-size:20px;font-weight:normal;\"\u003e円/時\u003c/span\u003e\u003c/div\u003e';\n  rhtml+='\u003c/div\u003e';\n  document.getElementById('fh-result-main').innerHTML=rhtml;\n\n  // グリッド\n  var ghtml='';\n  var cells=[\n    {label:'必要年間売上',val:fmt(Math.round(recAnnualSales/10000))+'万円',bg:'#f0fdfa',tc:'#0f766e'},\n    {label:'必要月間売上',val:fmt(Math.round(recMonthlySales/10000))+'万円',bg:'#f0fdfa',tc:'#0f766e'},\n    {label:'日単価（8時間）',val:fmt(dayRate)+'円',bg:'#fef3c7',tc:'#b45309'},\n    {label:'半日単価（4時間）',val:fmt(halfDayRate)+'円',bg:'#fef3c7',tc:'#b45309'},\n  ];\n  cells.forEach(function(c){\n    ghtml+='\u003cdiv style=\"background:'+c.bg+';border-radius:10px;padding:14px;text-align:center;\"\u003e';\n    ghtml+='\u003cdiv style=\"font-size:12px;color:#64748b;margin-bottom:4px;\"\u003e'+c.label+'\u003c/div\u003e';\n    ghtml+='\u003cdiv style=\"font-size:20px;font-weight:bold;color:'+c.tc+';\"\u003e'+c.val+'\u003c/div\u003e';\n    ghtml+='\u003c/div\u003e';\n  });\n  document.getElementById('fh-result-grid').innerHTML=ghtml;\n\n  // 内訳バー\n  var total=recAnnualSales;\n  var segs=[\n    {label:'手取り',amt:Math.max(tedoriAmt,0),color:'#0d9488'},\n    {label:'税金・社保',amt:taxAmt,color:'#f59e0b'},\n    {label:'経費',amt:expenseYen,color:'#94a3b8'},\n    {label:'マージン',amt:marginAmt,color:'#6366f1'},\n  ];\n  var barHtml='';\n  var legendHtml='';\n  var labelHtml='';\n  segs.forEach(function(s){\n    var pct=(s.amt/total*100).toFixed(1);\n    if(parseFloat(pct)\u003c=0)return;\n    barHtml+='\u003cdiv style=\"width:'+pct+'%;background:'+s.color+';\"\u003e\u003c/div\u003e';\n    legendHtml+='\u003cspan\u003e\u003cspan style=\"display:inline-block;width:12px;height:12px;background:'+s.color+';border-radius:2px;vertical-align:middle;margin-right:4px;\"\u003e\u003c/span\u003e'+s.label+' '+fmt(Math.round(s.amt/10000))+'万円 ('+pct+'%)\u003c/span\u003e';\n  });\n  document.getElementById('fh-bar').innerHTML=barHtml;\n  document.getElementById('fh-bar-legend').innerHTML=legendHtml;\n  document.getElementById('fh-bar-labels').innerHTML='\u003cspan\u003e売上合計 '+fmt(Math.round(total/10000))+'万円/年\u003c/span\u003e';\n\n  // 案件単価変換\n  var projectHours=[2,5,10,20,40];\n  var projectLabels=['2時間案件','5時間案件','10時間案件','20時間案件','40時間（月1件）'];\n  var prHtml='';\n  projectHours.forEach(function(h,i){\n    var rate=fmt(recHourlyRate*h);\n    var bg=i%2===0?'#f0fdfa':'#fff';\n    prHtml+='\u003cdiv style=\"background:'+bg+';border:1px solid #ccfbf1;border-radius:8px;padding:12px;text-align:center;\"\u003e';\n    prHtml+='\u003cdiv style=\"font-size:12px;color:#64748b;margin-bottom:4px;\"\u003e'+projectLabels[i]+'\u003c/div\u003e';\n    prHtml+='\u003cdiv style=\"font-size:18px;font-weight:bold;color:#0d9488;\"\u003e'+rate+'\u003cspan style=\"font-size:12px;font-weight:normal;\"\u003e円\u003c/span\u003e\u003c/div\u003e';\n    prHtml+='\u003c/div\u003e';\n  });\n  document.getElementById('fh-project-rates').innerHTML=prHtml;\n\n  // 年収別テーブル\n  var nenshuList=[300,400,500,600,800,1000];\n  var thtml='\u003cthead\u003e\u003ctr style=\"background:#0d9488;color:#fff;\"\u003e';\n  thtml+='\u003cth style=\"padding:10px 8px;text-align:left;\"\u003e目標年収\u003c/th\u003e';\n  thtml+='\u003cth style=\"padding:10px 8px;text-align:right;\"\u003e最低時給\u003c/th\u003e';\n  thtml+='\u003cth style=\"padding:10px 8px;text-align:right;\"\u003e推奨時給\u003c/th\u003e';\n  thtml+='\u003cth style=\"padding:10px 8px;text-align:right;\"\u003e日単価\u003c/th\u003e';\n  thtml+='\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e';\n  nenshuList.forEach(function(n,i){\n    var ty=n*10000;\n    var rs=(ty+expenseYen)/(1-taxRate);\n    var mh=Math.ceil(rs/totalHours/10)*10;\n    var rh=Math.ceil(mh/(1-marginRate)/10)*10;\n    var dr=rh*8;\n    var bg=i%2===0?'#fff':'#f0fdfa';\n    var bold=n===Math.round(targetMan/100)*100?'font-weight:bold;':'';\n    var highlight=n===targetMan?'background:#ccfbf1;':('background:'+bg+';');\n    thtml+='\u003ctr style=\"'+highlight+bold+'\"\u003e';\n    thtml+='\u003ctd style=\"padding:9px 8px;\"\u003e'+n+'万円'+(n===targetMan?' ✓':'')+'\u003c/td\u003e';\n    thtml+='\u003ctd style=\"padding:9px 8px;text-align:right;\"\u003e'+fmt(mh)+'円\u003c/td\u003e';\n    thtml+='\u003ctd style=\"padding:9px 8px;text-align:right;color:#0d9488;font-weight:bold;\"\u003e'+fmt(rh)+'円\u003c/td\u003e';\n    thtml+='\u003ctd style=\"padding:9px 8px;text-align:right;\"\u003e'+fmt(dr)+'円\u003c/td\u003e';\n    thtml+='\u003c/tr\u003e';\n  });\n  thtml+='\u003c/tbody\u003e';\n  document.getElementById('fh-table').innerHTML=thtml;\n}\n\ndocument.addEventListener('DOMContentLoaded',function(){calcFH();});\ncalcFH();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"フリーランスの適正単価の決め方\"\u003eフリーランスの適正単価の決め方\u003c/h2\u003e\n\u003ch3 id=\"1-手取り目標から逆算する\"\u003e1. 「手取り目標」から逆算する\u003c/h3\u003e\n\u003cp\u003e会社員と違い、フリーランスは\u003cstrong\u003e税金・社会保険料・経費\u003c/strong\u003eをすべて売上から負担します。目標年収500万円の場合、実際には700〜800万円規模の売上が必要なケースが多いです。上のツールで「必要年間売上」を確認し、そこから時給に落とし込むのが正攻法です。\u003c/p\u003e","title":"フリーランス報酬計算ツール｜適正な時給・単価を自動計算【2026年版】"},{"content":" 参加者を追加 名前： タイムゾーン： + 追加 主要都市から選ぶ： ビジュアルタイムライン — セルをクリックして会議時間を選択 参加者がいません。上から追加してください。 全員重複（9〜17時） 営業時間内（9〜17時） 早朝・夕方（7〜9時 / 17〜20時） 夜間 選択中のスロット 最適な会議時間 参加者を追加すると候補時間が表示されます。 会議招待文を作成 上のタイムラインまたは候補時間をクリックして選択すると、参加者全員向けの招待文が自動生成されます。 クリップボードにコピー コピーしました！ 関連ツール： ワールドクロック | タイムゾーン変換ツール 海外取引の会計管理にはfreee 海外クライアントや外国人メンバーとの取引がある方、freeeなら外貨取引・請求書発行も簡単に管理できます。 freeeを無料で試す\n※本リンクはアフィリエイトリンクです。\n","permalink":"https://productivity-works.com/ja/tools/meeting-planner/","summary":"\u003cdiv id=\"mp-app\"\u003e\n\u003cstyle\u003e\n  #mp-app {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', Roboto, sans-serif;\n    max-width: 860px;\n    margin: 0 auto;\n    padding: 16px;\n    color: #1e1b4b;\n  }\n\n  #mp-app * { box-sizing: border-box; }\n\n  #mp-app h2 {\n    font-size: 1.05rem;\n    font-weight: 700;\n    margin: 0 0 10px;\n    color: #1e1b4b;\n  }\n\n  #mp-app .mp-section {\n    background: #f8f7ff;\n    border: 1px solid #e0e7ff;\n    border-radius: 10px;\n    padding: 16px;\n    margin-bottom: 16px;\n  }\n\n  #mp-app .mp-row {\n    display: flex;\n    gap: 8px;\n    align-items: center;\n    flex-wrap: wrap;\n    margin-bottom: 8px;\n  }\n\n  #mp-app label {\n    font-size: 0.82rem;\n    font-weight: 600;\n    color: #4b5563;\n    white-space: nowrap;\n  }\n\n  #mp-app input[type=\"text\"],\n  #mp-app select {\n    border: 1px solid #c7d2fe;\n    border-radius: 6px;\n    padding: 6px 10px;\n    font-size: 0.85rem;\n    background: #fff;\n    color: #1e1b4b;\n    outline: none;\n  }\n\n  #mp-app input[type=\"text\"]:focus,\n  #mp-app select:focus {\n    border-color: #6366f1;\n    box-shadow: 0 0 0 2px #e0e7ff;\n  }\n\n  #mp-app input[type=\"text\"] { width: 140px; }\n  #mp-app select { width: 260px; }\n\n  #mp-app .mp-btn {\n    background: #6366f1;\n    color: #fff;\n    border: none;\n    border-radius: 6px;\n    padding: 7px 14px;\n    font-size: 0.82rem;\n    font-weight: 600;\n    cursor: pointer;\n    white-space: nowrap;\n  }\n\n  #mp-app .mp-btn:hover { background: #4f46e5; }\n\n  #mp-app .mp-btn-sm {\n    background: transparent;\n    color: #6366f1;\n    border: 1px solid #6366f1;\n    border-radius: 5px;\n    padding: 3px 9px;\n    font-size: 0.75rem;\n    cursor: pointer;\n    font-weight: 600;\n  }\n\n  #mp-app .mp-btn-sm:hover { background: #e0e7ff; }\n\n  #mp-app .mp-btn-danger {\n    background: transparent;\n    color: #ef4444;\n    border: 1px solid #fca5a5;\n    border-radius: 5px;\n    padding: 3px 9px;\n    font-size: 0.75rem;\n    cursor: pointer;\n  }\n\n  #mp-app .mp-btn-danger:hover { background: #fef2f2; }\n\n  #mp-app .mp-presets {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    margin-top: 8px;\n  }\n\n  #mp-app .mp-preset-btn {\n    background: #e0e7ff;\n    color: #3730a3;\n    border: none;\n    border-radius: 5px;\n    padding: 4px 10px;\n    font-size: 0.75rem;\n    cursor: pointer;\n    font-weight: 600;\n  }\n\n  #mp-app .mp-preset-btn:hover { background: #c7d2fe; }\n\n  #mp-app .mp-participant-list {\n    display: flex;\n    flex-direction: column;\n    gap: 6px;\n    margin-bottom: 10px;\n  }\n\n  #mp-app .mp-participant {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    background: #fff;\n    border: 1px solid #e0e7ff;\n    border-radius: 7px;\n    padding: 7px 10px;\n  }\n\n  #mp-app .mp-color-dot {\n    width: 12px;\n    height: 12px;\n    border-radius: 50%;\n    flex-shrink: 0;\n  }\n\n  #mp-app .mp-p-name {\n    font-size: 0.85rem;\n    font-weight: 600;\n    flex: 1;\n  }\n\n  #mp-app .mp-p-tz {\n    font-size: 0.75rem;\n    color: #6b7280;\n    flex: 1;\n  }\n\n  #mp-app .mp-p-time {\n    font-size: 0.78rem;\n    color: #374151;\n    font-family: monospace;\n    min-width: 60px;\n    text-align: right;\n  }\n\n  /* Timeline */\n  #mp-app .mp-timeline-wrap {\n    overflow-x: auto;\n  }\n\n  #mp-app .mp-timeline {\n    min-width: 600px;\n  }\n\n  #mp-app .mp-tl-header {\n    display: grid;\n    grid-template-columns: 110px repeat(24, 1fr);\n    margin-bottom: 2px;\n  }\n\n  #mp-app .mp-tl-hcell {\n    font-size: 0.62rem;\n    color: #9ca3af;\n    text-align: center;\n    padding: 1px 0;\n  }\n\n  #mp-app .mp-tl-row {\n    display: grid;\n    grid-template-columns: 110px repeat(24, 1fr);\n    margin-bottom: 3px;\n    align-items: center;\n  }\n\n  #mp-app .mp-tl-label {\n    font-size: 0.72rem;\n    font-weight: 600;\n    color: #374151;\n    padding-right: 6px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    line-height: 1.3;\n  }\n\n  #mp-app .mp-tl-label span {\n    display: block;\n    font-size: 0.62rem;\n    font-weight: 400;\n    color: #9ca3af;\n  }\n\n  #mp-app .mp-tl-cell {\n    height: 28px;\n    border-radius: 2px;\n    cursor: pointer;\n    position: relative;\n    transition: filter 0.1s;\n  }\n\n  #mp-app .mp-tl-cell:hover { filter: brightness(0.88); }\n\n  #mp-app .mp-tl-cell.cell-work    { background: #22c55e; }\n  #mp-app .mp-tl-cell.cell-early   { background: #facc15; }\n  #mp-app .mp-tl-cell.cell-night   { background: #6366f1; opacity: 0.25; }\n  #mp-app .mp-tl-cell.cell-overlap { background: #10b981; border: 2px solid #059669; }\n  #mp-app .mp-tl-cell.cell-selected { outline: 3px solid #f59e0b; outline-offset: -1px; }\n\n  /* Overlap row */\n  #mp-app .mp-tl-row.overlap-row .mp-tl-label {\n    font-size: 0.7rem;\n    color: #065f46;\n    font-weight: 700;\n  }\n\n  #mp-app .mp-tl-row.overlap-row .mp-tl-cell.cell-overlap {\n    height: 20px;\n    border-radius: 3px;\n  }\n\n  #mp-app .mp-tl-row.overlap-row .mp-tl-cell.cell-no-overlap {\n    background: #f3f4f6;\n    height: 20px;\n    border-radius: 3px;\n  }\n\n  /* Legend */\n  #mp-app .mp-legend {\n    display: flex;\n    gap: 14px;\n    flex-wrap: wrap;\n    font-size: 0.75rem;\n    color: #6b7280;\n    margin-top: 10px;\n  }\n\n  #mp-app .mp-legend-item {\n    display: flex;\n    align-items: center;\n    gap: 4px;\n  }\n\n  #mp-app .mp-legend-swatch {\n    width: 14px;\n    height: 14px;\n    border-radius: 3px;\n  }\n\n  /* Suggestions */\n  #mp-app .mp-suggestions {\n    margin-top: 14px;\n  }\n\n  #mp-app .mp-suggestion-title {\n    font-size: 0.85rem;\n    font-weight: 700;\n    color: #065f46;\n    margin-bottom: 8px;\n  }\n\n  #mp-app .mp-suggestion-none {\n    font-size: 0.82rem;\n    color: #9ca3af;\n    font-style: italic;\n  }\n\n  #mp-app .mp-slot {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    flex-wrap: wrap;\n    background: #ecfdf5;\n    border: 1px solid #6ee7b7;\n    border-radius: 7px;\n    padding: 8px 12px;\n    margin-bottom: 6px;\n    font-size: 0.82rem;\n  }\n\n  #mp-app .mp-slot-utc {\n    font-weight: 700;\n    color: #065f46;\n    white-space: nowrap;\n  }\n\n  #mp-app .mp-slot-times {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    flex: 1;\n  }\n\n  #mp-app .mp-slot-ptime {\n    background: #fff;\n    border: 1px solid #a7f3d0;\n    border-radius: 5px;\n    padding: 2px 8px;\n    font-size: 0.78rem;\n    white-space: nowrap;\n  }\n\n  /* Copy invite */\n  #mp-app .mp-copy-wrap {\n    margin-top: 14px;\n  }\n\n  #mp-app .mp-copy-area {\n    width: 100%;\n    border: 1px solid #c7d2fe;\n    border-radius: 7px;\n    padding: 10px;\n    font-size: 0.8rem;\n    font-family: monospace;\n    background: #fff;\n    color: #374151;\n    resize: vertical;\n    min-height: 80px;\n  }\n\n  #mp-app .mp-copy-row {\n    display: flex;\n    gap: 8px;\n    align-items: center;\n    margin-top: 6px;\n    flex-wrap: wrap;\n  }\n\n  #mp-app .mp-copy-status {\n    font-size: 0.78rem;\n    color: #22c55e;\n    display: none;\n  }\n\n  #mp-app .mp-tip {\n    font-size: 0.78rem;\n    color: #6b7280;\n    margin-top: 6px;\n    line-height: 1.5;\n  }\n\n  #mp-app .mp-no-p {\n    font-size: 0.82rem;\n    color: #9ca3af;\n    font-style: italic;\n    padding: 8px 0;\n  }\n\n  /* freee CTA */\n  #mp-app .mp-freee-cta {\n    background: #f0fdf4;\n    border: 1px solid #bbf7d0;\n    border-radius: 8px;\n    padding: 14px 16px;\n    font-size: 0.82rem;\n    color: #166534;\n    line-height: 1.6;\n  }\n\n  #mp-app .mp-freee-cta strong { color: #166534; }\n\n  #mp-app .mp-freee-cta a {\n    color: #15803d;\n    font-weight: 700;\n    text-decoration: underline;\n  }\n\n  @media (max-width: 540px) {\n    #mp-app input[type=\"text\"] { width: 110px; }\n    #mp-app select { width: 200px; }\n  }\n\u003c/style\u003e\n\u003c!-- Section 1: 参加者追加 --\u003e\n\u003cdiv class=\"mp-section\"\u003e\n  \u003ch2\u003e参加者を追加\u003c/h2\u003e\n  \u003cdiv class=\"mp-row\"\u003e\n    \u003clabel\u003e名前：\u003c/label\u003e\n    \u003cinput type=\"text\" id=\"mp-name\" placeholder=\"例：田中さん\" maxlength=\"24\" /\u003e\n    \u003clabel\u003eタイムゾーン：\u003c/label\u003e\n    \u003cselect id=\"mp-tz\"\u003e\u003c/select\u003e\n    \u003cbutton class=\"mp-btn\" id=\"mp-add-btn\"\u003e+ 追加\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003clabel style=\"font-size:0.78rem; color:#6b7280;\"\u003e主要都市から選ぶ：\u003c/label\u003e\n    \u003cdiv class=\"mp-presets\" id=\"mp-presets\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Section 2: 参加者一覧 \u0026 タイムライン --\u003e\n\u003cdiv class=\"mp-section\"\u003e\n  \u003ch2\u003eビジュアルタイムライン \u003cspan style=\"font-weight:400; font-size:0.8rem; color:#6b7280;\"\u003e— セルをクリックして会議時間を選択\u003c/span\u003e\u003c/h2\u003e\n  \u003cdiv id=\"mp-participant-list\" class=\"mp-participant-list\"\u003e\n    \u003cdiv class=\"mp-no-p\"\u003e参加者がいません。上から追加してください。\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mp-timeline-wrap\"\u003e\n    \u003cdiv class=\"mp-timeline\" id=\"mp-timeline\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mp-legend\"\u003e\n    \u003cdiv class=\"mp-legend-item\"\u003e\n      \u003cdiv class=\"mp-legend-swatch\" style=\"background:#10b981; border:2px solid #059669;\"\u003e\u003c/div\u003e\n      \u003cspan\u003e全員重複（9〜17時）\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"mp-legend-item\"\u003e\n      \u003cdiv class=\"mp-legend-swatch\" style=\"background:#22c55e;\"\u003e\u003c/div\u003e\n      \u003cspan\u003e営業時間内（9〜17時）\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"mp-legend-item\"\u003e\n      \u003cdiv class=\"mp-legend-swatch\" style=\"background:#facc15;\"\u003e\u003c/div\u003e\n      \u003cspan\u003e早朝・夕方（7〜9時 / 17〜20時）\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"mp-legend-item\"\u003e\n      \u003cdiv class=\"mp-legend-swatch\" style=\"background:#6366f1; opacity:0.4;\"\u003e\u003c/div\u003e\n      \u003cspan\u003e夜間\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"mp-legend-item\"\u003e\n      \u003cdiv class=\"mp-legend-swatch\" style=\"background:#f59e0b;\"\u003e\u003c/div\u003e\n      \u003cspan\u003e選択中のスロット\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Section 3: 最適な会議時間 --\u003e\n\u003cdiv class=\"mp-section\" id=\"mp-suggest-section\"\u003e\n  \u003ch2\u003e最適な会議時間\u003c/h2\u003e\n  \u003cdiv class=\"mp-suggestions\" id=\"mp-suggestions\"\u003e\n    \u003cdiv class=\"mp-suggestion-none\"\u003e参加者を追加すると候補時間が表示されます。\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Section 4: 招待文コピー --\u003e\n\u003cdiv class=\"mp-section\" id=\"mp-invite-section\"\u003e\n  \u003ch2\u003e会議招待文を作成\u003c/h2\u003e\n  \u003cdiv class=\"mp-tip\"\u003e上のタイムラインまたは候補時間をクリックして選択すると、参加者全員向けの招待文が自動生成されます。\u003c/div\u003e\n  \u003cdiv class=\"mp-copy-wrap\"\u003e\n    \u003ctextarea class=\"mp-copy-area\" id=\"mp-invite-text\" readonly placeholder=\"会議スロットを選択すると招待文が生成されます...\"\u003e\u003c/textarea\u003e\n    \u003cdiv class=\"mp-copy-row\"\u003e\n      \u003cbutton class=\"mp-btn\" id=\"mp-copy-btn\"\u003eクリップボードにコピー\u003c/button\u003e\n      \u003cspan class=\"mp-copy-status\" id=\"mp-copy-status\"\u003eコピーしました！\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  const ZONES = [\n    { value: 'UTC',                  label: 'UTC — 協定世界時', city: null },\n    { value: 'America/Los_Angeles',  label: 'PST/PDT — ロサンゼルス / サンフランシスコ', city: 'ロサンゼルス' },\n    { value: 'America/Denver',       label: 'MST/MDT — デンバー', city: null },\n    { value: 'America/Chicago',      label: 'CST/CDT — シカゴ / ダラス', city: 'シカゴ' },\n    { value: 'America/New_York',     label: 'EST/EDT — ニューヨーク / トロント', city: 'ニューヨーク' },\n    { value: 'America/Sao_Paulo',    label: 'BRT — サンパウロ', city: 'サンパウロ' },\n    { value: 'Europe/London',        label: 'GMT/BST — ロンドン', city: 'ロンドン' },\n    { value: 'Europe/Paris',         label: 'CET/CEST — パリ / ベルリン', city: 'パリ' },\n    { value: 'Europe/Helsinki',      label: 'EET/EEST — ヘルシンキ / キーウ', city: null },\n    { value: 'Europe/Moscow',        label: 'MSK — モスクワ', city: 'モスクワ' },\n    { value: 'Asia/Dubai',           label: 'GST — ドバイ', city: 'ドバイ' },\n    { value: 'Asia/Karachi',         label: 'PKT — カラチ / イスラマバード', city: null },\n    { value: 'Asia/Kolkata',         label: 'IST — ムンバイ / ニューデリー', city: 'ムンバイ' },\n    { value: 'Asia/Dhaka',           label: 'BST — ダッカ', city: null },\n    { value: 'Asia/Bangkok',         label: 'ICT — バンコク / ジャカルタ', city: 'バンコク' },\n    { value: 'Asia/Singapore',       label: 'SGT — シンガポール / クアラルンプール', city: 'シンガポール' },\n    { value: 'Asia/Shanghai',        label: 'CST — 北京 / 上海 / 台北', city: '北京' },\n    { value: 'Asia/Tokyo',           label: 'JST — 東京 / 大阪', city: '東京' },\n    { value: 'Asia/Seoul',           label: 'KST — ソウル', city: 'ソウル' },\n    { value: 'Australia/Sydney',     label: 'AEST/AEDT — シドニー / メルボルン', city: 'シドニー' },\n    { value: 'Pacific/Auckland',     label: 'NZST/NZDT — オークランド', city: 'オークランド' },\n    { value: 'Pacific/Honolulu',     label: 'HST — ホノルル', city: 'ホノルル' },\n  ];\n\n  const COLORS = [\n    '#6366f1','#f59e0b','#ef4444','#3b82f6','#8b5cf6',\n    '#06b6d4','#ec4899','#14b8a6','#f97316','#84cc16'\n  ];\n\n  let participants = [];\n  let selectedSlot = null;\n  let clockTick = null;\n\n  // --- タイムゾーン選択肢を構築 ---\n  const tzSel = document.getElementById('mp-tz');\n  ZONES.forEach(z =\u003e {\n    const opt = document.createElement('option');\n    opt.value = z.value;\n    opt.textContent = z.label;\n    tzSel.appendChild(opt);\n  });\n  // デフォルトをローカルTZに\n  try {\n    const local = Intl.DateTimeFormat().resolvedOptions().timeZone;\n    if (ZONES.find(z =\u003e z.value === local)) tzSel.value = local;\n    else tzSel.value = 'Asia/Tokyo';\n  } catch(e) { tzSel.value = 'Asia/Tokyo'; }\n\n  // --- 都市プリセット ---\n  const presetsEl = document.getElementById('mp-presets');\n  ZONES.filter(z =\u003e z.city).forEach(z =\u003e {\n    const btn = document.createElement('button');\n    btn.className = 'mp-preset-btn';\n    btn.textContent = z.city;\n    btn.addEventListener('click', () =\u003e {\n      const nameEl = document.getElementById('mp-name');\n      if (!nameEl.value.trim()) nameEl.value = z.city;\n      tzSel.value = z.value;\n    });\n    presetsEl.appendChild(btn);\n  });\n\n  // --- 参加者追加 ---\n  document.getElementById('mp-add-btn').addEventListener('click', addParticipant);\n  document.getElementById('mp-name').addEventListener('keydown', e =\u003e {\n    if (e.key === 'Enter') addParticipant();\n  });\n\n  function addParticipant() {\n    const nameEl = document.getElementById('mp-name');\n    const name = nameEl.value.trim() || tzSel.options[tzSel.selectedIndex].text.split('—')[1]?.trim().split('/')[0].trim() || '参加者';\n    const tz = tzSel.value;\n    if (participants.length \u003e= 10) {\n      alert('参加者は最大10名です。');\n      return;\n    }\n    participants.push({\n      id: Date.now(),\n      name,\n      tz,\n      color: COLORS[participants.length % COLORS.length]\n    });\n    nameEl.value = '';\n    render();\n  }\n\n  function removeParticipant(id) {\n    participants = participants.filter(p =\u003e p.id !== id);\n    selectedSlot = null;\n    render();\n  }\n\n  // --- 時刻フォーマット ---\n  function fmtTime(tz, date) {\n    return date.toLocaleString('ja-JP', {\n      timeZone: tz,\n      hour: '2-digit',\n      minute: '2-digit',\n      hour12: false\n    });\n  }\n\n  function fmtDateTime(tz, date) {\n    return date.toLocaleString('ja-JP', {\n      timeZone: tz,\n      month: 'numeric',\n      day: 'numeric',\n      weekday: 'short',\n      hour: '2-digit',\n      minute: '2-digit',\n      hour12: false\n    });\n  }\n\n  function getLocalHour(tz, utcHour) {\n    const now = new Date();\n    now.setUTCHours(utcHour, 0, 0, 0);\n    const hStr = now.toLocaleString('en-US', { timeZone: tz, hour: 'numeric', hour12: false });\n    return parseInt(hStr);\n  }\n\n  function getShortLabel(tz) {\n    const z = ZONES.find(z =\u003e z.value === tz);\n    if (!z) return tz;\n    return z.label.split('—')[0].trim();\n  }\n\n  function getLocationLabel(tz) {\n    const z = ZONES.find(z =\u003e z.value === tz);\n    if (!z) return '';\n    const parts = z.label.split('—');\n    return parts.slice(1).join('—').trim();\n  }\n\n  function cellClass(localH) {\n    if (localH \u003e= 9 \u0026\u0026 localH \u003c 17) return 'cell-work';\n    if ((localH \u003e= 7 \u0026\u0026 localH \u003c 9) || (localH \u003e= 17 \u0026\u0026 localH \u003c 20)) return 'cell-early';\n    return 'cell-night';\n  }\n\n  // --- 描画 ---\n  function render() {\n    renderParticipantList();\n    renderTimeline();\n    renderSuggestions();\n    renderInvite();\n  }\n\n  function renderParticipantList() {\n    const el = document.getElementById('mp-participant-list');\n    if (participants.length === 0) {\n      el.innerHTML = '\u003cdiv class=\"mp-no-p\"\u003e参加者がいません。上から追加してください。\u003c/div\u003e';\n      return;\n    }\n    const now = new Date();\n    el.innerHTML = participants.map(p =\u003e `\n      \u003cdiv class=\"mp-participant\"\u003e\n        \u003cdiv class=\"mp-color-dot\" style=\"background:${p.color};\"\u003e\u003c/div\u003e\n        \u003cdiv class=\"mp-p-name\"\u003e${escHtml(p.name)}\u003c/div\u003e\n        \u003cdiv class=\"mp-p-tz\"\u003e${escHtml(getShortLabel(p.tz))} — ${escHtml(getLocationLabel(p.tz))}\u003c/div\u003e\n        \u003cdiv class=\"mp-p-time\" id=\"mp-ptime-${p.id}\"\u003e${fmtTime(p.tz, now)}\u003c/div\u003e\n        \u003cbutton class=\"mp-btn-danger\" onclick=\"window._mpRemove(${p.id})\"\u003e削除\u003c/button\u003e\n      \u003c/div\u003e\n    `).join('');\n  }\n\n  function renderTimeline() {\n    const el = document.getElementById('mp-timeline');\n    if (participants.length === 0) {\n      el.innerHTML = '';\n      return;\n    }\n\n    // 時間軸ヘッダー\n    let html = '\u003cdiv class=\"mp-tl-header\"\u003e\u003cdiv class=\"mp-tl-hcell\"\u003e\u003c/div\u003e';\n    for (let h = 0; h \u003c 24; h++) {\n      html += `\u003cdiv class=\"mp-tl-hcell\"\u003e${String(h).padStart(2,'0')}\u003c/div\u003e`;\n    }\n    html += '\u003c/div\u003e';\n\n    // 全員の営業時間重複を計算\n    const overlapHours = [];\n    for (let h = 0; h \u003c 24; h++) {\n      const allWork = participants.every(p =\u003e {\n        const lh = getLocalHour(p.tz, h);\n        return lh \u003e= 9 \u0026\u0026 lh \u003c 17;\n      });\n      overlapHours.push(allWork);\n    }\n\n    // 参加者ごとの行\n    participants.forEach(p =\u003e {\n      html += `\u003cdiv class=\"mp-tl-row\"\u003e`;\n      html += `\u003cdiv class=\"mp-tl-label\"\u003e${escHtml(p.name)}\u003cspan\u003e${escHtml(getShortLabel(p.tz))}\u003c/span\u003e\u003c/div\u003e`;\n      for (let h = 0; h \u003c 24; h++) {\n        const lh = getLocalHour(p.tz, h);\n        let cls = overlapHours[h] ? 'cell-overlap' : cellClass(lh);\n        if (selectedSlot === h) cls += ' cell-selected';\n        const lhFmt = String(lh).padStart(2,'0') + ':00';\n        html += `\u003cdiv class=\"mp-tl-cell ${cls}\" title=\"${escHtml(p.name)}: ${lhFmt}\" data-hour=\"${h}\" onclick=\"window._mpSelectSlot(${h})\"\u003e\u003c/div\u003e`;\n      }\n      html += '\u003c/div\u003e';\n    });\n\n    // 重複まとめ行\n    html += `\u003cdiv class=\"mp-tl-row overlap-row\"\u003e`;\n    html += `\u003cdiv class=\"mp-tl-label\" style=\"color:#065f46;\"\u003e全員重複\u003cspan\u003eベスト時間\u003c/span\u003e\u003c/div\u003e`;\n    for (let h = 0; h \u003c 24; h++) {\n      let cls = overlapHours[h] ? 'cell-overlap' : 'cell-no-overlap';\n      if (selectedSlot === h) cls += ' cell-selected';\n      html += `\u003cdiv class=\"mp-tl-cell ${cls}\" title=\"UTC ${String(h).padStart(2,'0')}:00${overlapHours[h] ? ' ✓ 全員営業時間内' : ''}\" data-hour=\"${h}\" onclick=\"window._mpSelectSlot(${h})\"\u003e\u003c/div\u003e`;\n    }\n    html += '\u003c/div\u003e';\n\n    el.innerHTML = html;\n  }\n\n  function renderSuggestions() {\n    const el = document.getElementById('mp-suggestions');\n    if (participants.length === 0) {\n      el.innerHTML = '\u003cdiv class=\"mp-suggestion-none\"\u003e参加者を追加すると候補時間が表示されます。\u003c/div\u003e';\n      return;\n    }\n\n    // 全員9〜17時の重複\n    const overlapHours = [];\n    for (let h = 0; h \u003c 24; h++) {\n      const allWork = participants.every(p =\u003e {\n        const lh = getLocalHour(p.tz, h);\n        return lh \u003e= 9 \u0026\u0026 lh \u003c 17;\n      });\n      if (allWork) overlapHours.push(h);\n    }\n\n    // 緩和条件（7〜20時）\n    const relaxedHours = [];\n    if (overlapHours.length === 0) {\n      for (let h = 0; h \u003c 24; h++) {\n        const allOk = participants.every(p =\u003e {\n          const lh = getLocalHour(p.tz, h);\n          return lh \u003e= 7 \u0026\u0026 lh \u003c 20;\n        });\n        if (allOk) relaxedHours.push(h);\n      }\n    }\n\n    const hours = overlapHours.length \u003e 0 ? overlapHours : relaxedHours;\n\n    if (hours.length === 0) {\n      el.innerHTML = `\n        \u003cdiv class=\"mp-suggestion-none\"\u003e\n          全参加者の営業時間が重複する時間帯が見つかりませんでした。\u003cbr\u003e\n          タイムゾーンの組み合わせを見直すか、非同期コミュニケーションをご検討ください。\n        \u003c/div\u003e`;\n      return;\n    }\n\n    // 連続した時間帯をスロットにまとめる\n    const slots = [];\n    let start = hours[0], end = hours[0];\n    for (let i = 1; i \u003c hours.length; i++) {\n      if (hours[i] === hours[i-1] + 1) {\n        end = hours[i];\n      } else {\n        slots.push({ start, end });\n        start = hours[i]; end = hours[i];\n      }\n    }\n    slots.push({ start, end });\n\n    const quality = overlapHours.length \u003e 0\n      ? `最適な重複時間帯（全員9〜17時） — ${hours.length}時間`\n      : `拡張重複時間帯（7〜20時、一部早朝・夕方） — ${hours.length}時間`;\n\n    let html = `\u003cdiv class=\"mp-suggestion-title\"\u003e${quality}\u003c/div\u003e`;\n\n    slots.forEach(slot =\u003e {\n      const now = new Date();\n      now.setUTCHours(slot.start, 0, 0, 0);\n      const endDate = new Date(now);\n      endDate.setUTCHours(slot.end + 1, 0, 0, 0);\n\n      html += `\u003cdiv class=\"mp-slot\" onclick=\"window._mpSelectSlot(${slot.start})\" style=\"cursor:pointer;\"\u003e`;\n      html += `\u003cdiv class=\"mp-slot-utc\"\u003eUTC ${String(slot.start).padStart(2,'0')}:00〜${String(slot.end+1).padStart(2,'0')}:00\u003c/div\u003e`;\n      html += `\u003cdiv class=\"mp-slot-times\"\u003e`;\n      participants.forEach(p =\u003e {\n        html += `\u003cdiv class=\"mp-slot-ptime\" style=\"border-color:${p.color};\"\u003e\n          \u003cstrong\u003e${escHtml(p.name)}\u003c/strong\u003e: ${fmtTime(p.tz, now)}〜${fmtTime(p.tz, endDate)}\n        \u003c/div\u003e`;\n      });\n      html += `\u003c/div\u003e\u003c/div\u003e`;\n    });\n\n    el.innerHTML = html;\n  }\n\n  function renderInvite() {\n    const el = document.getElementById('mp-invite-text');\n    if (participants.length === 0 || selectedSlot === null) {\n      el.value = '';\n      return;\n    }\n    const h = selectedSlot;\n    const now = new Date();\n    now.setUTCHours(h, 0, 0, 0);\n    const endDate = new Date(now);\n    endDate.setUTCHours(h + 1, 0, 0, 0);\n\n    let text = `会議のご案内\\n`;\n    text += `============\\n`;\n    text += `UTC: ${String(h).padStart(2,'0')}:00 〜 ${String(h+1).padStart(2,'0')}:00\\n\\n`;\n    text += `参加者ごとの現地時間：\\n`;\n    participants.forEach(p =\u003e {\n      text += `  ${p.name}（${getShortLabel(p.tz)}）: ${fmtDateTime(p.tz, now)}\\n`;\n    });\n    text += `\\nタイムゾーン会議プランナーで作成\\nhttps://productivity.works/ja/tools/meeting-planner/`;\n    el.value = text;\n  }\n\n  // --- 現在時刻の更新 ---\n  function startClock() {\n    if (clockTick) clearInterval(clockTick);\n    clockTick = setInterval(() =\u003e {\n      if (participants.length === 0) return;\n      const now = new Date();\n      participants.forEach(p =\u003e {\n        const el = document.getElementById(`mp-ptime-${p.id}`);\n        if (el) el.textContent = fmtTime(p.tz, now);\n      });\n    }, 10000);\n  }\n\n  // --- スロット選択 ---\n  window._mpSelectSlot = function(h) {\n    selectedSlot = (selectedSlot === h) ? null : h;\n    renderTimeline();\n    renderInvite();\n  };\n\n  window._mpRemove = function(id) {\n    removeParticipant(id);\n  };\n\n  // --- コピー ---\n  document.getElementById('mp-copy-btn').addEventListener('click', () =\u003e {\n    const ta = document.getElementById('mp-invite-text');\n    if (!ta.value) return;\n    navigator.clipboard.writeText(ta.value).then(() =\u003e {\n      const st = document.getElementById('mp-copy-status');\n      st.style.display = 'inline';\n      setTimeout(() =\u003e { st.style.display = 'none'; }, 2000);\n    }).catch(() =\u003e {\n      ta.select();\n      document.execCommand('copy');\n    });\n  });\n\n  function escHtml(s) {\n    return String(s).replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;').replace(/\"/g,'\u0026quot;');\n  }\n\n  // --- 初期化：ローカルTZの参加者を自動追加 ---\n  (function init() {\n    try {\n      const local = Intl.DateTimeFormat().resolvedOptions().timeZone;\n      const z = ZONES.find(z =\u003e z.value === local) || ZONES.find(z =\u003e z.value === 'Asia/Tokyo');\n      if (z) {\n        participants.push({\n          id: Date.now(),\n          name: z.city || '自分',\n          tz: z.value,\n          color: COLORS[0]\n        });\n      }\n    } catch(e) {}\n    render();\n    startClock();\n  })();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e関連ツール：\u003c/strong\u003e \u003ca href=\"https://productivity-works.com/ja/tools/world-clock/\"\u003eワールドクロック\u003c/a\u003e\n | \u003ca href=\"https://productivity-works.com/ja/tools/timezone-converter/\"\u003eタイムゾーン変換ツール\u003c/a\u003e\n\u003c/p\u003e","title":"タイムゾーン会議プランナー"},{"content":"画像をアップロードしてクリックするだけ。ピクセル単位で正確に色を抽出し、HEX・RGB・HSL形式でコピーできます。登録不要、データは一切送信されません。\n関連ツール: カラーピッカー · カラーパレットジェネレーター · カラーコンバーター ここに画像をドロップ、または ファイルを選択 PNG・JPG・GIF・WebP・SVG対応 — ブラウザ内で完結 画像の任意の場所をクリックして色を抽出。ホバーで拡大ルーペが表示されます。 まだ色を選択していません — 上の画像をクリックしてください。 HEX — コピー RGB — コピー HSL — コピー 最近似CSSカラー名: — 抽出した色 CSS変数でエクスポート JSONでエクスポート コピー デザイン業務の経費管理もかんたんに\nfreee会計なら、デザインツール費用の経費精算もクラウドで一元管理。 freeeを無料で試す → 使い方 アップロード — 画像をドロップするか「ファイルを選択」をクリック。 ホバー — 拡大ルーペが表示され、ピクセル単位で正確な位置を確認できます。 クリック — HEX・RGB・HSLと最近似CSSカラー名を即座に表示。 カラー履歴 — 最大12色のスウォッチを保存。クリックで再読み込み。 エクスポート — CSS変数またはJSONとしてパレットをコピー。 すべてブラウザ内で動作します。画像データは外部に送信されません。\nヒント ブラウザズームを活用 — Ctrl/Cmd + で拡大してからクリックするとより精密に選択できます。 SVG画像 — ブラウザが Canvas にレンダリングできる SVG（同一オリジン・インライン）に対応しています。 透明ピクセル — Canvas は黒背景に合成するため、完全透明な領域は rgb(0, 0, 0) を返します。 CSS変数エクスポート — :root {} ブロックに貼り付けて var(--color-1) として参照できます。 関連ツール: カラーピッカー · カラーパレットジェネレーター · カラーコンバーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n","permalink":"https://productivity-works.com/ja/tools/image-color-picker/","summary":"\u003cp\u003e画像をアップロードしてクリックするだけ。ピクセル単位で正確に色を抽出し、HEX・RGB・HSL形式でコピーできます。登録不要、データは一切送信されません。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e関連ツール:\u003c/strong\u003e \u003ca href=\"https://productivity-works.com/ja/tools/color-picker/\"\u003eカラーピッカー\u003c/a\u003e\n · \u003ca href=\"https://productivity-works.com/ja/tools/color-palette-generator/\"\u003eカラーパレットジェネレーター\u003c/a\u003e\n · \u003ca href=\"https://productivity-works.com/ja/tools/color-converter/\"\u003eカラーコンバーター\u003c/a\u003e\n\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv id=\"icp-app\"\u003e\n\u003cstyle\u003e\n#icp-app *,#icp-app *::before,#icp-app *::after{box-sizing:border-box;margin:0;padding:0}\n#icp-app{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Noto Sans JP',sans-serif;color:#1e293b;background:#f8fafc;border-radius:14px;padding:24px;max-width:860px;margin:0 auto}\n#icp-drop-zone{border:2.5px dashed #94a3b8;border-radius:12px;background:#fff;min-height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;transition:border-color .2s,background .2s;position:relative;overflow:hidden;margin-bottom:16px}\n#icp-drop-zone.drag-over{border-color:#6366f1;background:#eef2ff}\n#icp-drop-zone.has-image{min-height:unset;cursor:crosshair}\n#icp-drop-label{display:flex;flex-direction:column;align-items:center;gap:10px;color:#64748b;pointer-events:none;user-select:none}\n#icp-drop-label svg{width:48px;height:48px;opacity:.5}\n#icp-drop-label span{font-size:15px}\n#icp-drop-label small{font-size:12px;color:#94a3b8}\n#icp-file-input{display:none}\n#icp-browse-btn{pointer-events:auto;padding:8px 20px;background:#6366f1;color:#fff;border:none;border-radius:7px;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s}\n#icp-browse-btn:hover{background:#4f46e5}\n#icp-canvas-wrap{position:relative;display:inline-block;width:100%;line-height:0}\n#icp-canvas{display:block;width:100%;height:auto;cursor:crosshair;border-radius:8px}\n#icp-magnifier{position:absolute;width:96px;height:96px;border-radius:50%;border:3px solid #6366f1;box-shadow:0 4px 20px rgba(0,0,0,.35);pointer-events:none;overflow:hidden;display:none;background:#000;z-index:10}\n#icp-mag-canvas{position:absolute;top:0;left:0}\n#icp-mag-crosshair{position:absolute;top:50%;left:50%;width:12px;height:12px;transform:translate(-50%,-50%);pointer-events:none}\n#icp-mag-crosshair::before,#icp-mag-crosshair::after{content:'';position:absolute;background:rgba(255,255,255,.9)}\n#icp-mag-crosshair::before{width:1.5px;height:100%;left:50%;transform:translateX(-50%)}\n#icp-mag-crosshair::after{height:1.5px;width:100%;top:50%;transform:translateY(-50%)}\n#icp-result-row{display:flex;gap:14px;margin-bottom:16px;flex-wrap:wrap;align-items:stretch}\n#icp-color-preview{width:90px;min-height:90px;border-radius:10px;border:2px solid #e2e8f0;flex-shrink:0;background:#e2e8f0;transition:background .15s}\n#icp-formats{flex:1;display:flex;flex-direction:column;gap:8px;min-width:200px}\n.icp-format-row{display:flex;align-items:center;gap:8px}\n.icp-format-label{font-size:11px;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.05em;width:34px;flex-shrink:0}\n.icp-format-val{flex:1;font-size:13px;font-family:'SFMono-Regular',Consolas,monospace;background:#f1f5f9;padding:6px 10px;border-radius:6px;border:1px solid #e2e8f0;color:#1e293b;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n.icp-copy-btn{padding:5px 12px;font-size:12px;font-weight:600;background:#6366f1;color:#fff;border:none;border-radius:5px;cursor:pointer;transition:background .15s,transform .1s;white-space:nowrap;flex-shrink:0}\n.icp-copy-btn:hover{background:#4f46e5}\n.icp-copy-btn.copied{background:#22c55e;transform:scale(1.05)}\n#icp-name-row{font-size:13px;color:#64748b;margin-top:4px}\n#icp-name-row span{font-weight:600;color:#1e293b}\n#icp-history-section{margin-top:4px}\n#icp-history-section h3{font-size:14px;font-weight:700;color:#475569;margin-bottom:8px}\n#icp-swatches{display:flex;flex-wrap:wrap;gap:8px}\n.icp-swatch{width:36px;height:36px;border-radius:7px;border:2px solid #e2e8f0;cursor:pointer;transition:transform .15s,box-shadow .15s;flex-shrink:0;position:relative}\n.icp-swatch:hover{transform:scale(1.18);box-shadow:0 4px 12px rgba(0,0,0,.2);z-index:5}\n.icp-swatch-tip{display:none;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);background:#1e293b;color:#fff;font-size:11px;padding:3px 7px;border-radius:4px;white-space:nowrap;pointer-events:none;z-index:20}\n.icp-swatch:hover .icp-swatch-tip{display:block}\n#icp-export-row{display:flex;gap:10px;margin-top:16px;flex-wrap:wrap}\n.icp-export-btn{padding:8px 18px;font-size:13px;font-weight:600;border-radius:7px;cursor:pointer;border:1.5px solid #6366f1;transition:background .15s,color .15s}\n#icp-export-css{background:#6366f1;color:#fff}\n#icp-export-css:hover{background:#4f46e5}\n#icp-export-json{background:#fff;color:#6366f1}\n#icp-export-json:hover{background:#eef2ff}\n#icp-export-out{display:none;margin-top:12px;background:#1e293b;color:#e2e8f0;border-radius:8px;padding:14px 16px;font-family:'SFMono-Regular',Consolas,monospace;font-size:12px;white-space:pre-wrap;word-break:break-all;position:relative;max-height:220px;overflow-y:auto}\n#icp-export-copy{position:absolute;top:8px;right:8px;padding:4px 10px;font-size:11px;font-weight:600;background:#6366f1;color:#fff;border:none;border-radius:4px;cursor:pointer}\n#icp-export-copy:hover{background:#4f46e5}\n#icp-instructions{font-size:13px;color:#64748b;margin-bottom:10px;display:none}\n#icp-no-pick-msg{font-size:13px;color:#94a3b8;font-style:italic;margin-top:6px}\n@media(max-width:520px){\n  #icp-result-row{flex-direction:column}\n  #icp-color-preview{width:100%;min-height:60px}\n  #icp-magnifier{width:72px;height:72px}\n}\n\u003c/style\u003e\n\u003cdiv style=\"margin-bottom:12px\"\u003e\n  \u003cinput type=\"file\" id=\"icp-file-input\" accept=\"image/*\"\u003e\n  \u003cdiv id=\"icp-drop-zone\"\u003e\n    \u003cdiv id=\"icp-drop-label\"\u003e\n      \u003csvg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\u003e\u003crect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"3\"/\u003e\u003ccircle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/\u003e\u003cpath d=\"M21 15l-5-5L5 21\"/\u003e\u003c/svg\u003e\n      \u003cspan\u003eここに画像をドロップ、または\u003c/span\u003e\n      \u003cbutton id=\"icp-browse-btn\" type=\"button\"\u003eファイルを選択\u003c/button\u003e\n      \u003csmall\u003ePNG・JPG・GIF・WebP・SVG対応 — ブラウザ内で完結\u003c/small\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"icp-instructions\"\u003e画像の任意の場所をクリックして色を抽出。ホバーで拡大ルーペが表示されます。\u003c/div\u003e\n\u003cdiv id=\"icp-canvas-wrap\" style=\"display:none\"\u003e\n  \u003ccanvas id=\"icp-canvas\"\u003e\u003c/canvas\u003e\n  \u003cdiv id=\"icp-magnifier\"\u003e\n    \u003ccanvas id=\"icp-mag-canvas\"\u003e\u003c/canvas\u003e\n    \u003cdiv id=\"icp-mag-crosshair\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"icp-no-pick-msg\" style=\"display:none\"\u003eまだ色を選択していません — 上の画像をクリックしてください。\u003c/div\u003e\n\u003cdiv id=\"icp-result-row\" style=\"display:none\"\u003e\n  \u003cdiv id=\"icp-color-preview\"\u003e\u003c/div\u003e\n  \u003cdiv id=\"icp-formats\"\u003e\n    \u003cdiv class=\"icp-format-row\"\u003e\n      \u003cspan class=\"icp-format-label\"\u003eHEX\u003c/span\u003e\n      \u003cspan class=\"icp-format-val\" id=\"icp-hex\"\u003e—\u003c/span\u003e\n      \u003cbutton class=\"icp-copy-btn\" data-target=\"icp-hex\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"icp-format-row\"\u003e\n      \u003cspan class=\"icp-format-label\"\u003eRGB\u003c/span\u003e\n      \u003cspan class=\"icp-format-val\" id=\"icp-rgb\"\u003e—\u003c/span\u003e\n      \u003cbutton class=\"icp-copy-btn\" data-target=\"icp-rgb\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"icp-format-row\"\u003e\n      \u003cspan class=\"icp-format-label\"\u003eHSL\u003c/span\u003e\n      \u003cspan class=\"icp-format-val\" id=\"icp-hsl\"\u003e—\u003c/span\u003e\n      \u003cbutton class=\"icp-copy-btn\" data-target=\"icp-hsl\"\u003eコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv id=\"icp-name-row\"\u003e最近似CSSカラー名: \u003cspan id=\"icp-name\"\u003e—\u003c/span\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"icp-history-section\" style=\"display:none\"\u003e\n  \u003ch3\u003e抽出した色 \u003cspan id=\"icp-count\" style=\"font-weight:400;color:#94a3b8;font-size:12px\"\u003e\u003c/span\u003e\u003c/h3\u003e\n  \u003cdiv id=\"icp-swatches\"\u003e\u003c/div\u003e\n  \u003cdiv id=\"icp-export-row\"\u003e\n    \u003cbutton class=\"icp-export-btn\" id=\"icp-export-css\" type=\"button\"\u003eCSS変数でエクスポート\u003c/button\u003e\n    \u003cbutton class=\"icp-export-btn\" id=\"icp-export-json\" type=\"button\"\u003eJSONでエクスポート\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"icp-export-out\"\u003e\u003cbutton id=\"icp-export-copy\" type=\"button\"\u003eコピー\u003c/button\u003e\u003cspan id=\"icp-export-text\"\u003e\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n'use strict';\nvar dropZone=document.getElementById('icp-drop-zone');\nvar fileInput=document.getElementById('icp-file-input');\nvar browseBtn=document.getElementById('icp-browse-btn');\nvar canvasWrap=document.getElementById('icp-canvas-wrap');\nvar canvas=document.getElementById('icp-canvas');\nvar ctx=canvas.getContext('2d',{willReadFrequently:true});\nvar mag=document.getElementById('icp-magnifier');\nvar magCanvas=document.getElementById('icp-mag-canvas');\nvar magCtx=magCanvas.getContext('2d',{willReadFrequently:true});\nvar instructions=document.getElementById('icp-instructions');\nvar nopick=document.getElementById('icp-no-pick-msg');\nvar resultRow=document.getElementById('icp-result-row');\nvar preview=document.getElementById('icp-color-preview');\nvar hexEl=document.getElementById('icp-hex');\nvar rgbEl=document.getElementById('icp-rgb');\nvar hslEl=document.getElementById('icp-hsl');\nvar nameEl=document.getElementById('icp-name');\nvar historySec=document.getElementById('icp-history-section');\nvar swatchesEl=document.getElementById('icp-swatches');\nvar countEl=document.getElementById('icp-count');\nvar exportOut=document.getElementById('icp-export-out');\nvar exportText=document.getElementById('icp-export-text');\nvar exportCopy=document.getElementById('icp-export-copy');\n\nvar MAG_SIZE=96,MAG_ZOOM=6,MAX_HISTORY=12;\nvar history=[];\nvar imgObj=null;\nvar naturalW=0,naturalH=0;\nvar hasPicked=false;\n\nmagCanvas.width=MAG_SIZE;magCanvas.height=MAG_SIZE;\n\nvar CSS_COLORS=[\n  ['aliceblue',[240,248,255]],['antiquewhite',[250,235,215]],['aqua',[0,255,255]],\n  ['aquamarine',[127,255,212]],['azure',[240,255,255]],['beige',[245,245,220]],\n  ['bisque',[255,228,196]],['black',[0,0,0]],['blanchedalmond',[255,235,205]],\n  ['blue',[0,0,255]],['blueviolet',[138,43,226]],['brown',[165,42,42]],\n  ['burlywood',[222,184,135]],['cadetblue',[95,158,160]],['chartreuse',[127,255,0]],\n  ['chocolate',[210,105,30]],['coral',[255,127,80]],['cornflowerblue',[100,149,237]],\n  ['cornsilk',[255,248,220]],['crimson',[220,20,60]],['cyan',[0,255,255]],\n  ['darkblue',[0,0,139]],['darkcyan',[0,139,139]],['darkgoldenrod',[184,134,11]],\n  ['darkgray',[169,169,169]],['darkgreen',[0,100,0]],['darkkhaki',[189,183,107]],\n  ['darkmagenta',[139,0,139]],['darkolivegreen',[85,107,47]],['darkorange',[255,140,0]],\n  ['darkorchid',[153,50,204]],['darkred',[139,0,0]],['darksalmon',[233,150,122]],\n  ['darkseagreen',[143,188,143]],['darkslateblue',[72,61,139]],['darkslategray',[47,79,79]],\n  ['darkturquoise',[0,206,209]],['darkviolet',[148,0,211]],['deeppink',[255,20,147]],\n  ['deepskyblue',[0,191,255]],['dimgray',[105,105,105]],['dodgerblue',[30,144,255]],\n  ['firebrick',[178,34,34]],['floralwhite',[255,250,240]],['forestgreen',[34,139,34]],\n  ['fuchsia',[255,0,255]],['gainsboro',[220,220,220]],['ghostwhite',[248,248,255]],\n  ['gold',[255,215,0]],['goldenrod',[218,165,32]],['gray',[128,128,128]],\n  ['green',[0,128,0]],['greenyellow',[173,255,47]],['honeydew',[240,255,240]],\n  ['hotpink',[255,105,180]],['indianred',[205,92,92]],['indigo',[75,0,130]],\n  ['ivory',[255,255,240]],['khaki',[240,230,140]],['lavender',[230,230,250]],\n  ['lavenderblush',[255,240,245]],['lawngreen',[124,252,0]],['lemonchiffon',[255,250,205]],\n  ['lightblue',[173,216,230]],['lightcoral',[240,128,128]],['lightcyan',[224,255,255]],\n  ['lightgoldenrodyellow',[250,250,210]],['lightgray',[211,211,211]],['lightgreen',[144,238,144]],\n  ['lightpink',[255,182,193]],['lightsalmon',[255,160,122]],['lightseagreen',[32,178,170]],\n  ['lightskyblue',[135,206,250]],['lightslategray',[119,136,153]],['lightsteelblue',[176,196,222]],\n  ['lightyellow',[255,255,224]],['lime',[0,255,0]],['limegreen',[50,205,50]],\n  ['linen',[250,240,230]],['magenta',[255,0,255]],['maroon',[128,0,0]],\n  ['mediumaquamarine',[102,205,170]],['mediumblue',[0,0,205]],['mediumorchid',[186,85,211]],\n  ['mediumpurple',[147,112,219]],['mediumseagreen',[60,179,113]],['mediumslateblue',[123,104,238]],\n  ['mediumspringgreen',[0,250,154]],['mediumturquoise',[72,209,204]],['mediumvioletred',[199,21,133]],\n  ['midnightblue',[25,25,112]],['mintcream',[245,255,250]],['mistyrose',[255,228,225]],\n  ['moccasin',[255,228,181]],['navajowhite',[255,222,173]],['navy',[0,0,128]],\n  ['oldlace',[253,245,230]],['olive',[128,128,0]],['olivedrab',[107,142,35]],\n  ['orange',[255,165,0]],['orangered',[255,69,0]],['orchid',[218,112,214]],\n  ['palegoldenrod',[238,232,170]],['palegreen',[152,251,152]],['paleturquoise',[175,238,238]],\n  ['palevioletred',[219,112,147]],['papayawhip',[255,239,213]],['peachpuff',[255,218,185]],\n  ['peru',[205,133,63]],['pink',[255,192,203]],['plum',[221,160,221]],\n  ['powderblue',[176,224,230]],['purple',[128,0,128]],['rebeccapurple',[102,51,153]],\n  ['red',[255,0,0]],['rosybrown',[188,143,143]],['royalblue',[65,105,225]],\n  ['saddlebrown',[139,69,19]],['salmon',[250,128,114]],['sandybrown',[244,164,96]],\n  ['seagreen',[46,139,87]],['seashell',[255,245,238]],['sienna',[160,82,45]],\n  ['silver',[192,192,192]],['skyblue',[135,206,235]],['slateblue',[106,90,205]],\n  ['slategray',[112,128,144]],['snow',[255,250,250]],['springgreen',[0,255,127]],\n  ['steelblue',[70,130,180]],['tan',[210,180,140]],['teal',[0,128,128]],\n  ['thistle',[216,191,216]],['tomato',[255,99,71]],['turquoise',[64,224,208]],\n  ['violet',[238,130,238]],['wheat',[245,222,179]],['white',[255,255,255]],\n  ['whitesmoke',[245,245,245]],['yellow',[255,255,0]],['yellowgreen',[154,205,50]]\n];\n\nfunction colorDist(a,b){var dr=a[0]-b[0],dg=a[1]-b[1],db=a[2]-b[2];return dr*dr+dg*dg+db*db;}\nfunction nearestName(r,g,b){var best=CSS_COLORS[0][0],bd=Infinity;for(var i=0;i\u003cCSS_COLORS.length;i++){var d=colorDist([r,g,b],CSS_COLORS[i][1]);if(d\u003cbd){bd=d;best=CSS_COLORS[i][0];}}return best;}\n\nfunction toHex(r,g,b){return '#'+[r,g,b].map(function(v){return v.toString(16).padStart(2,'0');}).join('');}\nfunction toRgb(r,g,b){return 'rgb('+r+', '+g+', '+b+')';}\nfunction toHsl(r,g,b){\n  var rn=r/255,gn=g/255,bn=b/255;\n  var max=Math.max(rn,gn,bn),min=Math.min(rn,gn,bn),h,s,l=(max+min)/2;\n  if(max===min){h=s=0;}else{\n    var d=max-min;s=l\u003e0.5?d/(2-max-min):d/(max+min);\n    if(max===rn)h=((gn-bn)/d+(gn\u003cbn?6:0))/6;\n    else if(max===gn)h=((bn-rn)/d+2)/6;\n    else h=((rn-gn)/d+4)/6;\n  }\n  return 'hsl('+Math.round(h*360)+', '+Math.round(s*100)+'%, '+Math.round(l*100)+'%)';\n}\n\nfunction loadImage(file){\n  var url=URL.createObjectURL(file);\n  var img=new Image();\n  img.onload=function(){\n    imgObj=img;naturalW=img.naturalWidth;naturalH=img.naturalHeight;\n    canvas.width=naturalW;canvas.height=naturalH;\n    ctx.drawImage(img,0,0);\n    dropZone.style.display='none';\n    canvasWrap.style.display='block';\n    instructions.style.display='block';\n    nopick.style.display='block';\n    URL.revokeObjectURL(url);\n  };\n  img.src=url;\n}\n\nbrowseBtn.addEventListener('click',function(){fileInput.click();});\nfileInput.addEventListener('change',function(){if(fileInput.files[0])loadImage(fileInput.files[0]);});\n\ndropZone.addEventListener('dragover',function(e){e.preventDefault();dropZone.classList.add('drag-over');});\ndropZone.addEventListener('dragleave',function(){dropZone.classList.remove('drag-over');});\ndropZone.addEventListener('drop',function(e){\n  e.preventDefault();dropZone.classList.remove('drag-over');\n  var f=e.dataTransfer.files[0];if(f\u0026\u0026f.type.startsWith('image/'))loadImage(f);\n});\n\nfunction getPixel(e){\n  var rect=canvas.getBoundingClientRect();\n  var scaleX=naturalW/rect.width,scaleY=naturalH/rect.height;\n  var cx=Math.round((e.clientX-rect.left)*scaleX);\n  var cy=Math.round((e.clientY-rect.top)*scaleY);\n  cx=Math.max(0,Math.min(naturalW-1,cx));\n  cy=Math.max(0,Math.min(naturalH-1,cy));\n  return {x:cx,y:cy,rect:rect,scaleX:scaleX,scaleY:scaleY};\n}\n\nfunction updateMag(e){\n  if(!imgObj)return;\n  var p=getPixel(e);\n  var half=MAG_SIZE/2;\n  var srcX=p.x-Math.round(half/MAG_ZOOM),srcY=p.y-Math.round(half/MAG_ZOOM);\n  var srcW=Math.round(MAG_SIZE/MAG_ZOOM),srcH=Math.round(MAG_SIZE/MAG_ZOOM);\n  magCtx.clearRect(0,0,MAG_SIZE,MAG_SIZE);\n  magCtx.imageSmoothingEnabled=false;\n  magCtx.drawImage(canvas,srcX,srcY,srcW,srcH,0,0,MAG_SIZE,MAG_SIZE);\n\n  var relX=e.clientX-canvasWrap.getBoundingClientRect().left;\n  var relY=e.clientY-canvasWrap.getBoundingClientRect().top;\n  var offX=relX+20,offY=relY-MAG_SIZE-12;\n  if(offX+MAG_SIZE\u003ecanvasWrap.offsetWidth-4)offX=relX-MAG_SIZE-20;\n  if(offY\u003c4)offY=relY+20;\n  mag.style.left=offX+'px';\n  mag.style.top=offY+'px';\n  mag.style.display='block';\n}\n\ncanvas.addEventListener('mousemove',function(e){if(!imgObj)return;updateMag(e);});\ncanvas.addEventListener('mouseleave',function(){mag.style.display='none';});\n\ncanvas.addEventListener('click',function(e){\n  if(!imgObj)return;\n  var p=getPixel(e);\n  var data=ctx.getImageData(p.x,p.y,1,1).data;\n  var r=data[0],g=data[1],b=data[2];\n  var hex=toHex(r,g,b);\n  var rgb=toRgb(r,g,b);\n  var hsl=toHsl(r,g,b);\n  var name=nearestName(r,g,b);\n\n  preview.style.background=hex;\n  hexEl.textContent=hex;\n  rgbEl.textContent=rgb;\n  hslEl.textContent=hsl;\n  nameEl.textContent=name;\n\n  if(!hasPicked){\n    nopick.style.display='none';\n    resultRow.style.display='flex';\n    historySec.style.display='block';\n    hasPicked=true;\n  }\n\n  if(history.length===0||history[0]!==hex){\n    history.unshift(hex);\n    if(history.length\u003eMAX_HISTORY)history.pop();\n    renderSwatches();\n  }\n});\n\nfunction renderSwatches(){\n  swatchesEl.innerHTML='';\n  countEl.textContent='('+history.length+'件)';\n  history.forEach(function(h){\n    var sw=document.createElement('div');\n    sw.className='icp-swatch';\n    sw.style.background=h;\n    sw.title=h;\n    var tip=document.createElement('div');\n    tip.className='icp-swatch-tip';\n    tip.textContent=h;\n    sw.appendChild(tip);\n    sw.addEventListener('click',function(){\n      preview.style.background=h;\n      var rgb2=hexToRgb(h);\n      hexEl.textContent=h;\n      rgbEl.textContent=toRgb(rgb2[0],rgb2[1],rgb2[2]);\n      hslEl.textContent=toHsl(rgb2[0],rgb2[1],rgb2[2]);\n      nameEl.textContent=nearestName(rgb2[0],rgb2[1],rgb2[2]);\n    });\n    swatchesEl.appendChild(sw);\n  });\n}\n\nfunction hexToRgb(h){\n  return [parseInt(h.slice(1,3),16),parseInt(h.slice(3,5),16),parseInt(h.slice(5,7),16)];\n}\n\ndocument.querySelectorAll('.icp-copy-btn').forEach(function(btn){\n  btn.addEventListener('click',function(){\n    var val=document.getElementById(btn.dataset.target).textContent;\n    navigator.clipboard.writeText(val).then(function(){\n      btn.textContent='コピー完了';btn.classList.add('copied');\n      setTimeout(function(){btn.textContent='コピー';btn.classList.remove('copied');},1400);\n    });\n  });\n});\n\ndocument.getElementById('icp-export-css').addEventListener('click',function(){\n  if(!history.length)return;\n  var lines=history.map(function(h,i){return '  --color-'+(i+1)+': '+h+';';});\n  var out=':root {\\n'+lines.join('\\n')+'\\n}';\n  exportText.textContent=out;\n  exportOut.style.display='block';\n});\ndocument.getElementById('icp-export-json').addEventListener('click',function(){\n  if(!history.length)return;\n  var obj=Object.fromEntries(history.map(function(h,i){return ['color'+(i+1),h];}));\n  exportText.textContent=JSON.stringify(obj,null,2);\n  exportOut.style.display='block';\n});\nexportCopy.addEventListener('click',function(){\n  navigator.clipboard.writeText(exportText.textContent).then(function(){\n    exportCopy.textContent='コピー完了';\n    setTimeout(function(){exportCopy.textContent='コピー';},1400);\n  });\n});\n\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003eデザイン業務の経費管理もかんたんに\u003c/p\u003e","title":"画像カラーピッカー"},{"content":"正規表現をブラウザ上でリアルタイムに検証。パターンを入力してフラグを選ぶだけで、マッチ箇所がハイライト表示されます。登録不要、外部ライブラリなし。\n正規表現パターン / / g i m s u クイック挿入 — よく使うパターン メールアドレス URL 携帯電話番号 郵便番号 IPv4アドレス 日付 YYYY-MM-DD ひらがな カタカナ 漢字 カラーコード テスト文字列 田中さんのメールはtanaka@example.co.jpです。 電話番号: 090-1234-5678 郵便番号: 〒100-0001 ウェブサイト: https://www.example.com IPアドレス: 192.168.1.1 日付: 2025-05-16 マッチハイライト マッチ数: — 実行時間: — マッチ詳細 置換モード パターン解説 パターンを入力するとマッチ結果が表示されます。 置換文字列: 結果をコピー パターンを入力するとトークンごとの解説が表示されます。 開発業務の経費管理もかんたんに\nfreee会計なら、開発ツール・クラウドサービスの経費精算もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\nクイックリファレンス → 正規表現チートシート 文字列をエスケープ → 文字列エスケープツール 関連記事 無料で使えるAIツールおすすめ15選【2026年版・目的別に厳選】 プログラミングスクール おすすめ2026年版！目的別に比較【未経験〜転職まで】 ","permalink":"https://productivity-works.com/ja/tools/regex-tester/","summary":"\u003cp\u003e正規表現をブラウザ上でリアルタイムに検証。パターンを入力してフラグを選ぶだけで、マッチ箇所がハイライト表示されます。登録不要、外部ライブラリなし。\u003c/p\u003e\n\u003cdiv id=\"rx-app\"\u003e\n\u003cstyle\u003e\n  #rx-app *,\n  #rx-app *::before,\n  #rx-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\u003cp\u003e#rx-app {\nfont-family: -apple-system, BlinkMacSystemFont, \u0026ldquo;Hiragino Sans\u0026rdquo;, \u0026ldquo;Meiryo\u0026rdquo;, \u0026ldquo;Segoe UI\u0026rdquo;, sans-serif;\nfont-size: 14px;\ncolor: #1e293b;\nmax-width: 860px;\nmargin: 0 auto;\n}\u003c/p\u003e\n\u003cp\u003e#rx-app .rx-card {\nbackground: #fff;\nborder: 1px solid #e2e8f0;\nborder-radius: 10px;\npadding: 18px 20px;\nmargin-bottom: 14px;\n}\n#rx-app .rx-card-title {\nfont-size: 11px;\nfont-weight: 700;\nletter-spacing: .06em;\ntext-transform: uppercase;\ncolor: #64748b;\nmargin-bottom: 10px;\n}\u003c/p\u003e\n\u003cp\u003e/* Pattern row */\n#rx-app .rx-pattern-row {\ndisplay: flex;\nalign-items: center;\ngap: 8px;\nflex-wrap: wrap;\n}\n#rx-app .rx-slash {\nfont-size: 22px;\ncolor: #94a3b8;\nline-height: 1;\nflex-shrink: 0;\nfont-family: \u0026ldquo;Fira Mono\u0026rdquo;, \u0026ldquo;Consolas\u0026rdquo;, monospace;\n}\n#rx-app #rx-pattern {\nflex: 1;\nmin-width: 180px;\nfont-family: \u0026ldquo;Fira Mono\u0026rdquo;, \u0026ldquo;Consolas\u0026rdquo;, monospace;\nfont-size: 15px;\npadding: 9px 12px;\nborder: 2px solid #e2e8f0;\nborder-radius: 7px;\noutline: none;\ntransition: border-color .15s;\nbackground: #f8fafc;\ncolor: #1e293b;\n}\n#rx-app #rx-pattern:focus { border-color: #6366f1; background: #fff; }\n#rx-app #rx-pattern.rx-invalid { border-color: #ef4444; background: #fff5f5; }\u003c/p\u003e","title":"正規表現テスター｜リアルタイムマッチ確認＆置換テスト【無料】"},{"content":"ブラウザの表示領域（ビューポート）サイズをリアルタイムで確認し、どのCSSブレイクポイントが適用されているかを即座に把握できます。デバイスプリセット一覧との比較機能付き。登録・インストール不要。\n関連ツール: 画面解像度 → 画面解像度チェッカー | メディアクエリ → CSSメディアクエリジェネレーター — 幅 (px) × — 高さ (px) — ブレイクポイント — — DPR — ブレイクポイントインジケーター 0640768102412801536+ xs\u0026lt;640px sm640–767 md768–1023 lg1024–1279 xl1280–1535 2xl1536px+ window.innerWidth — スクロールバーを含む表示幅 window.innerHeight — スクロールバーを含む表示高さ document.documentElement — × — clientWidth × clientHeight screen.width × screen.height — 物理画面の解像度 devicePixelRatio — CSS px と物理 px の比率 向き（Orientation） — 縦向き / 横向き 情報をコピー クリップボードにコピーしました！ 主要デバイスのビューポート参考値 デバイス ビューポート (CSS px) Tailwind BP 備考 iPhone 15 Pro 393 × 852 xs 縦向き、@3x iPhone 15 / 14 390 × 844 xs 縦向き、@3x iPhone SE（第3世代） 375 × 667 xs 縦向き、@2x iPad（第10世代） 820 × 1180 md 縦向き、@2x iPad Pro 12.9\" 1024 × 1366 lg 縦向き、@2x Pixel 7 412 × 915 xs 縦向き、@2.625x Galaxy S24 360 × 780 xs 縦向き、@3x MacBook Air 13\" 1280 × 800 xl Retina @2x MacBook Pro 14\" 1512 × 982 xl Retina @2x MacBook Pro 16\" 1728 × 1117 2xl Retina @2x デスクトップ 1080p 1920 × 1080 2xl @1x 標準 使い方 上部の数値を確認 — ブラウザのウィンドウをリサイズするとリアルタイムで更新されます。 ブレイクポイントバーをチェック — 現在の幅がTailwind CSSのどのブレイクポイント（xs / sm / md / lg / xl / 2xl）に該当するかが一目でわかります。 デバイスプリセット一覧で比較 — 実機でどのように表示されるかの参考として活用してください。 「情報をコピー」ボタン — バグ報告やデザイン確認のためにスナップショットをテキストでコピーできます。 各プロパティの意味 プロパティ 計測対象 window.innerWidth/Height スクロールバーを含む表示領域のサイズ clientWidth/Height スクロールバーを除いた表示領域（CSSメディアクエリと一致） screen.width/Height デバイスの物理画面解像度（ズームに影響されない） devicePixelRatio CSS 1px が物理何ピクセルに対応するか（Retinaは2以上） Tailwind CSS ブレイクポイント一覧 プレフィックス 最小幅 CSSルール (なし — xs) 0 px デフォルトスタイル sm 640 px @media (min-width: 640px) md 768 px @media (min-width: 768px) lg 1024 px @media (min-width: 1024px) xl 1280 px @media (min-width: 1280px) 2xl 1536 px @media (min-width: 1536px) Web制作の経費管理もかんたんに\nfreee会計なら、開発ツール費用の経費精算もクラウドで一元管理。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n関連ツール: 画面解像度 → 画面解像度チェッカー | メディアクエリ → CSSメディアクエリジェネレーター ","permalink":"https://productivity-works.com/ja/tools/viewport-tester/","summary":"\u003cp\u003eブラウザの表示領域（ビューポート）サイズをリアルタイムで確認し、どのCSSブレイクポイントが適用されているかを即座に把握できます。デバイスプリセット一覧との比較機能付き。登録・インストール不要。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e関連ツール:\u003c/strong\u003e 画面解像度 → \u003ca href=\"https://productivity-works.com/ja/tools/screen-resolution/\"\u003e画面解像度チェッカー\u003c/a\u003e\n | メディアクエリ → \u003ca href=\"https://productivity-works.com/ja/tools/media-query-generator/\"\u003eCSSメディアクエリジェネレーター\u003c/a\u003e\n\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv id=\"vt-app\"\u003e\n\u003cstyle\u003e\n#vt-app * {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#vt-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", \"Yu Gothic\", Meiryo, sans-serif;\n  font-size: 15px;\n  color: #1e293b;\n  line-height: 1.6;\n  max-width: 860px;\n}\n#vt-app h2 {\n  font-size: 17px;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 12px;\n  padding-bottom: 6px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#vt-app .vt-card {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px 22px;\n  margin-bottom: 20px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.05);\n}\n#vt-app .vt-hero {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 24px;\n  background: linear-gradient(135deg, #0f172a 0%, #1e3a5f 100%);\n  border-radius: 14px;\n  padding: 28px 24px;\n  margin-bottom: 20px;\n  flex-wrap: wrap;\n}\n#vt-app .vt-big-dim {\n  text-align: center;\n}\n#vt-app .vt-big-dim .vt-num {\n  font-size: 52px;\n  font-weight: 800;\n  color: #38bdf8;\n  letter-spacing: -2px;\n  line-height: 1;\n}\n#vt-app .vt-big-dim .vt-label {\n  font-size: 12px;\n  color: #94a3b8;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  margin-top: 4px;\n}\n#vt-app .vt-sep {\n  font-size: 36px;\n  color: #475569;\n  font-weight: 300;\n  padding: 0 4px;\n}\n#vt-app .vt-bp-badge {\n  background: #0284c7;\n  color: #fff;\n  font-size: 22px;\n  font-weight: 800;\n  border-radius: 10px;\n  padding: 10px 22px;\n  letter-spacing: 1px;\n  text-align: center;\n}\n#vt-app .vt-bp-name {\n  font-size: 11px;\n  color: #bae6fd;\n  margin-top: 4px;\n  text-align: center;\n  letter-spacing: 0.5px;\n}\n#vt-app .vt-meta-row {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 16px;\n  flex-wrap: wrap;\n  margin-top: 10px;\n}\n#vt-app .vt-pill {\n  background: rgba(255,255,255,0.08);\n  border: 1px solid rgba(255,255,255,0.15);\n  border-radius: 20px;\n  padding: 4px 14px;\n  font-size: 12px;\n  color: #cbd5e1;\n}\n#vt-app .vt-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 10px;\n  margin-bottom: 20px;\n}\n@media (max-width: 560px) {\n  #vt-app .vt-grid { grid-template-columns: 1fr; }\n}\n#vt-app .vt-stat-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 14px 16px;\n}\n#vt-app .vt-stat-card .vt-stat-title {\n  font-size: 11px;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  color: #64748b;\n  margin-bottom: 4px;\n}\n#vt-app .vt-stat-card .vt-stat-val {\n  font-size: 17px;\n  font-weight: 700;\n  color: #0f172a;\n  font-variant-numeric: tabular-nums;\n}\n#vt-app .vt-stat-card .vt-stat-sub {\n  font-size: 12px;\n  color: #94a3b8;\n  margin-top: 2px;\n}\n/* Breakpoint bar */\n#vt-app .vt-bpbar-wrap {\n  margin-bottom: 20px;\n}\n#vt-app .vt-bpbar-track {\n  position: relative;\n  height: 36px;\n  background: #e2e8f0;\n  border-radius: 8px;\n  overflow: hidden;\n  margin-bottom: 6px;\n}\n#vt-app .vt-bpbar-fill {\n  position: absolute;\n  left: 0; top: 0; bottom: 0;\n  background: linear-gradient(90deg, #0284c7, #38bdf8);\n  border-radius: 8px;\n  transition: width 0.2s ease;\n  min-width: 4px;\n}\n#vt-app .vt-bpbar-label {\n  position: absolute;\n  right: 8px; top: 0; bottom: 0;\n  display: flex;\n  align-items: center;\n  font-size: 12px;\n  font-weight: 600;\n  color: #fff;\n  text-shadow: 0 1px 2px rgba(0,0,0,0.3);\n}\n#vt-app .vt-bpbar-ticks {\n  display: flex;\n  justify-content: space-between;\n  font-size: 10px;\n  color: #94a3b8;\n  padding: 0 2px;\n}\n#vt-app .vt-bp-segments {\n  display: flex;\n  gap: 6px;\n  flex-wrap: wrap;\n  margin-top: 10px;\n}\n#vt-app .vt-bp-seg {\n  flex: 1;\n  min-width: 60px;\n  text-align: center;\n  padding: 6px 4px;\n  border-radius: 7px;\n  border: 1.5px solid #e2e8f0;\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  background: #f8fafc;\n  transition: all 0.15s;\n}\n#vt-app .vt-bp-seg.active {\n  background: #0284c7;\n  border-color: #0284c7;\n  color: #fff;\n  box-shadow: 0 2px 8px rgba(2,132,199,0.25);\n}\n#vt-app .vt-bp-seg .vt-seg-range {\n  display: block;\n  font-size: 10px;\n  font-weight: 400;\n  opacity: 0.8;\n  margin-top: 2px;\n}\n/* Device presets table */\n#vt-app .vt-preset-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n#vt-app .vt-preset-table th {\n  text-align: left;\n  padding: 8px 10px;\n  background: #f1f5f9;\n  color: #475569;\n  font-size: 11px;\n  letter-spacing: 0.4px;\n  border-bottom: 1.5px solid #e2e8f0;\n}\n#vt-app .vt-preset-table td {\n  padding: 9px 10px;\n  border-bottom: 1px solid #f1f5f9;\n  color: #334155;\n}\n#vt-app .vt-preset-table tr:last-child td {\n  border-bottom: none;\n}\n#vt-app .vt-preset-table tr:hover td {\n  background: #f8fafc;\n}\n#vt-app .vt-preset-table .vt-device-name {\n  font-weight: 600;\n  color: #0f172a;\n}\n#vt-app .vt-preset-table .vt-bp-chip {\n  display: inline-block;\n  padding: 2px 8px;\n  border-radius: 10px;\n  font-size: 11px;\n  font-weight: 700;\n  background: #e0f2fe;\n  color: #0369a1;\n}\n/* Copy button */\n#vt-app .vt-actions {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  margin-bottom: 20px;\n}\n#vt-app .vt-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 7px;\n  padding: 10px 20px;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  border: none;\n  transition: all 0.15s;\n  font-family: inherit;\n}\n#vt-app .vt-btn-primary {\n  background: #0284c7;\n  color: #fff;\n}\n#vt-app .vt-btn-primary:hover {\n  background: #0369a1;\n}\n#vt-app .vt-btn-secondary {\n  background: #f1f5f9;\n  color: #334155;\n  border: 1.5px solid #e2e8f0;\n}\n#vt-app .vt-btn-secondary:hover {\n  background: #e2e8f0;\n}\n#vt-app .vt-copy-msg {\n  display: none;\n  font-size: 13px;\n  color: #16a34a;\n  align-items: center;\n  gap: 5px;\n  padding: 10px 16px;\n  background: #f0fdf4;\n  border-radius: 8px;\n  border: 1px solid #bbf7d0;\n}\n#vt-app .vt-copy-msg.show { display: flex; }\n\u003c/style\u003e\n\u003c!-- HERO: ライブ寸法表示 --\u003e\n\u003cdiv class=\"vt-hero\" id=\"vt-hero\"\u003e\n  \u003cdiv class=\"vt-big-dim\"\u003e\n    \u003cdiv class=\"vt-num\" id=\"vt-width\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"vt-label\"\u003e幅 (px)\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"vt-sep\"\u003e×\u003c/div\u003e\n  \u003cdiv class=\"vt-big-dim\"\u003e\n    \u003cdiv class=\"vt-num\" id=\"vt-height\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"vt-label\"\u003e高さ (px)\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"vt-bp-badge\" id=\"vt-bp-badge\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"vt-bp-name\" id=\"vt-bp-name\"\u003eブレイクポイント\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"width:100%;\"\u003e\n    \u003cdiv class=\"vt-meta-row\"\u003e\n      \u003cspan class=\"vt-pill\" id=\"vt-orientation\"\u003e—\u003c/span\u003e\n      \u003cspan class=\"vt-pill\" id=\"vt-touch\"\u003e—\u003c/span\u003e\n      \u003cspan class=\"vt-pill\" id=\"vt-dpr\"\u003eDPR —\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ブレイクポイントビジュアルバー --\u003e\n\u003cdiv class=\"vt-card vt-bpbar-wrap\"\u003e\n  \u003ch2\u003eブレイクポイントインジケーター\u003c/h2\u003e\n  \u003cdiv class=\"vt-bpbar-track\"\u003e\n    \u003cdiv class=\"vt-bpbar-fill\" id=\"vt-bar-fill\" style=\"width:50%;\"\u003e\n      \u003cspan class=\"vt-bpbar-label\" id=\"vt-bar-label\"\u003e\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"vt-bpbar-ticks\"\u003e\n    \u003cspan\u003e0\u003c/span\u003e\u003cspan\u003e640\u003c/span\u003e\u003cspan\u003e768\u003c/span\u003e\u003cspan\u003e1024\u003c/span\u003e\u003cspan\u003e1280\u003c/span\u003e\u003cspan\u003e1536+\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"vt-bp-segments\"\u003e\n    \u003cdiv class=\"vt-bp-seg\" id=\"seg-xs\"\u003exs\u003cspan class=\"vt-seg-range\"\u003e\u0026lt;640px\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"vt-bp-seg\" id=\"seg-sm\"\u003esm\u003cspan class=\"vt-seg-range\"\u003e640–767\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"vt-bp-seg\" id=\"seg-md\"\u003emd\u003cspan class=\"vt-seg-range\"\u003e768–1023\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"vt-bp-seg\" id=\"seg-lg\"\u003elg\u003cspan class=\"vt-seg-range\"\u003e1024–1279\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"vt-bp-seg\" id=\"seg-xl\"\u003exl\u003cspan class=\"vt-seg-range\"\u003e1280–1535\u003c/span\u003e\u003c/div\u003e\n    \u003cdiv class=\"vt-bp-seg\" id=\"seg-2xl\"\u003e2xl\u003cspan class=\"vt-seg-range\"\u003e1536px+\u003c/span\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 詳細ステータスグリッド --\u003e\n\u003cdiv class=\"vt-grid\"\u003e\n  \u003cdiv class=\"vt-stat-card\"\u003e\n    \u003cdiv class=\"vt-stat-title\"\u003ewindow.innerWidth\u003c/div\u003e\n    \u003cdiv class=\"vt-stat-val\" id=\"stat-iw\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"vt-stat-sub\"\u003eスクロールバーを含む表示幅\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"vt-stat-card\"\u003e\n    \u003cdiv class=\"vt-stat-title\"\u003ewindow.innerHeight\u003c/div\u003e\n    \u003cdiv class=\"vt-stat-val\" id=\"stat-ih\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"vt-stat-sub\"\u003eスクロールバーを含む表示高さ\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"vt-stat-card\"\u003e\n    \u003cdiv class=\"vt-stat-title\"\u003edocument.documentElement\u003c/div\u003e\n    \u003cdiv class=\"vt-stat-val\" id=\"stat-doc\"\u003e— × —\u003c/div\u003e\n    \u003cdiv class=\"vt-stat-sub\"\u003eclientWidth × clientHeight\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"vt-stat-card\"\u003e\n    \u003cdiv class=\"vt-stat-title\"\u003escreen.width × screen.height\u003c/div\u003e\n    \u003cdiv class=\"vt-stat-val\" id=\"stat-scr\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"vt-stat-sub\"\u003e物理画面の解像度\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"vt-stat-card\"\u003e\n    \u003cdiv class=\"vt-stat-title\"\u003edevicePixelRatio\u003c/div\u003e\n    \u003cdiv class=\"vt-stat-val\" id=\"stat-dpr\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"vt-stat-sub\"\u003eCSS px と物理 px の比率\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"vt-stat-card\"\u003e\n    \u003cdiv class=\"vt-stat-title\"\u003e向き（Orientation）\u003c/div\u003e\n    \u003cdiv class=\"vt-stat-val\" id=\"stat-orient\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"vt-stat-sub\"\u003e縦向き / 横向き\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- アクションボタン --\u003e\n\u003cdiv class=\"vt-actions\"\u003e\n  \u003cbutton class=\"vt-btn vt-btn-primary\" onclick=\"vtCopyAll()\"\u003e\n    \u003csvg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003crect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/\u003e\u003cpath d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/\u003e\u003c/svg\u003e\n    情報をコピー\n  \u003c/button\u003e\n  \u003cdiv class=\"vt-copy-msg\" id=\"vt-copy-msg\"\u003e\n    \u003csvg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003cpolyline points=\"20 6 9 17 4 12\"/\u003e\u003c/svg\u003e\n    クリップボードにコピーしました！\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- デバイスプリセット一覧 --\u003e\n\u003cdiv class=\"vt-card\"\u003e\n  \u003ch2\u003e主要デバイスのビューポート参考値\u003c/h2\u003e\n  \u003cdiv style=\"overflow-x:auto;\"\u003e\n    \u003ctable class=\"vt-preset-table\"\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\n          \u003cth\u003eデバイス\u003c/th\u003e\n          \u003cth\u003eビューポート (CSS px)\u003c/th\u003e\n          \u003cth\u003eTailwind BP\u003c/th\u003e\n          \u003cth\u003e備考\u003c/th\u003e\n        \u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"vt-device-name\"\u003eiPhone 15 Pro\u003c/td\u003e\n          \u003ctd\u003e393 × 852\u003c/td\u003e\n          \u003ctd\u003e\u003cspan class=\"vt-bp-chip\"\u003exs\u003c/span\u003e\u003c/td\u003e\n          \u003ctd\u003e縦向き、@3x\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"vt-device-name\"\u003eiPhone 15 / 14\u003c/td\u003e\n          \u003ctd\u003e390 × 844\u003c/td\u003e\n          \u003ctd\u003e\u003cspan class=\"vt-bp-chip\"\u003exs\u003c/span\u003e\u003c/td\u003e\n          \u003ctd\u003e縦向き、@3x\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"vt-device-name\"\u003eiPhone SE（第3世代）\u003c/td\u003e\n          \u003ctd\u003e375 × 667\u003c/td\u003e\n          \u003ctd\u003e\u003cspan class=\"vt-bp-chip\"\u003exs\u003c/span\u003e\u003c/td\u003e\n          \u003ctd\u003e縦向き、@2x\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"vt-device-name\"\u003eiPad（第10世代）\u003c/td\u003e\n          \u003ctd\u003e820 × 1180\u003c/td\u003e\n          \u003ctd\u003e\u003cspan class=\"vt-bp-chip\"\u003emd\u003c/span\u003e\u003c/td\u003e\n          \u003ctd\u003e縦向き、@2x\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"vt-device-name\"\u003eiPad Pro 12.9\"\u003c/td\u003e\n          \u003ctd\u003e1024 × 1366\u003c/td\u003e\n          \u003ctd\u003e\u003cspan class=\"vt-bp-chip\"\u003elg\u003c/span\u003e\u003c/td\u003e\n          \u003ctd\u003e縦向き、@2x\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"vt-device-name\"\u003ePixel 7\u003c/td\u003e\n          \u003ctd\u003e412 × 915\u003c/td\u003e\n          \u003ctd\u003e\u003cspan class=\"vt-bp-chip\"\u003exs\u003c/span\u003e\u003c/td\u003e\n          \u003ctd\u003e縦向き、@2.625x\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"vt-device-name\"\u003eGalaxy S24\u003c/td\u003e\n          \u003ctd\u003e360 × 780\u003c/td\u003e\n          \u003ctd\u003e\u003cspan class=\"vt-bp-chip\"\u003exs\u003c/span\u003e\u003c/td\u003e\n          \u003ctd\u003e縦向き、@3x\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"vt-device-name\"\u003eMacBook Air 13\"\u003c/td\u003e\n          \u003ctd\u003e1280 × 800\u003c/td\u003e\n          \u003ctd\u003e\u003cspan class=\"vt-bp-chip\"\u003exl\u003c/span\u003e\u003c/td\u003e\n          \u003ctd\u003eRetina @2x\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"vt-device-name\"\u003eMacBook Pro 14\"\u003c/td\u003e\n          \u003ctd\u003e1512 × 982\u003c/td\u003e\n          \u003ctd\u003e\u003cspan class=\"vt-bp-chip\"\u003exl\u003c/span\u003e\u003c/td\u003e\n          \u003ctd\u003eRetina @2x\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"vt-device-name\"\u003eMacBook Pro 16\"\u003c/td\u003e\n          \u003ctd\u003e1728 × 1117\u003c/td\u003e\n          \u003ctd\u003e\u003cspan class=\"vt-bp-chip\"\u003e2xl\u003c/span\u003e\u003c/td\u003e\n          \u003ctd\u003eRetina @2x\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"vt-device-name\"\u003eデスクトップ 1080p\u003c/td\u003e\n          \u003ctd\u003e1920 × 1080\u003c/td\u003e\n          \u003ctd\u003e\u003cspan class=\"vt-bp-chip\"\u003e2xl\u003c/span\u003e\u003c/td\u003e\n          \u003ctd\u003e@1x 標準\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var BP_BREAKS = [\n    { id: 'xs',  name: 'xs (640px未満)',   min: 0,    max: 639  },\n    { id: 'sm',  name: 'sm (640〜767px)',  min: 640,  max: 767  },\n    { id: 'md',  name: 'md (768〜1023px)', min: 768,  max: 1023 },\n    { id: 'lg',  name: 'lg (1024〜1279px)',min: 1024, max: 1279 },\n    { id: 'xl',  name: 'xl (1280〜1535px)',min: 1280, max: 1535 },\n    { id: '2xl', name: '2xl (1536px以上)', min: 1536, max: Infinity }\n  ];\n\n  var MAX_BAR_W = 1536;\n\n  function getBP(w) {\n    for (var i = BP_BREAKS.length - 1; i \u003e= 0; i--) {\n      if (w \u003e= BP_BREAKS[i].min) return BP_BREAKS[i];\n    }\n    return BP_BREAKS[0];\n  }\n\n  function update() {\n    var iw = window.innerWidth;\n    var ih = window.innerHeight;\n    var dw = document.documentElement.clientWidth;\n    var dh = document.documentElement.clientHeight;\n    var sw = screen.width;\n    var sh = screen.height;\n    var dpr = window.devicePixelRatio || 1;\n    var isTouch = ('ontouchstart' in window) || navigator.maxTouchPoints \u003e 0;\n    var orient = iw \u003e= ih ? '横向き (Landscape)' : '縦向き (Portrait)';\n    var bp = getBP(iw);\n\n    document.getElementById('vt-width').textContent = iw;\n    document.getElementById('vt-height').textContent = ih;\n    document.getElementById('vt-bp-badge').textContent = bp.id;\n    document.getElementById('vt-bp-name').textContent = bp.name;\n    document.getElementById('vt-orientation').textContent = orient;\n    document.getElementById('vt-touch').textContent = isTouch ? 'タッチデバイス' : '非タッチデバイス';\n    document.getElementById('vt-dpr').textContent = 'DPR ' + dpr.toFixed(2);\n\n    var pct = Math.min(100, (iw / MAX_BAR_W) * 100);\n    document.getElementById('vt-bar-fill').style.width = pct + '%';\n    document.getElementById('vt-bar-label').textContent = iw + 'px';\n\n    BP_BREAKS.forEach(function(b) {\n      var el = document.getElementById('seg-' + b.id);\n      if (el) el.classList.toggle('active', b.id === bp.id);\n    });\n\n    document.getElementById('stat-iw').textContent = iw + ' px';\n    document.getElementById('stat-ih').textContent = ih + ' px';\n    document.getElementById('stat-doc').textContent = dw + ' × ' + dh + ' px';\n    document.getElementById('stat-scr').textContent = sw + ' × ' + sh + ' px';\n    document.getElementById('stat-dpr').textContent = dpr.toFixed(3);\n    document.getElementById('stat-orient').textContent = orient;\n  }\n\n  window.vtCopyAll = function() {\n    var iw = window.innerWidth;\n    var ih = window.innerHeight;\n    var dw = document.documentElement.clientWidth;\n    var dh = document.documentElement.clientHeight;\n    var dpr = (window.devicePixelRatio || 1).toFixed(3);\n    var isTouch = ('ontouchstart' in window) || navigator.maxTouchPoints \u003e 0;\n    var orient = iw \u003e= ih ? '横向き (Landscape)' : '縦向き (Portrait)';\n    var bp = getBP(iw);\n\n    var text = [\n      '=== ビューポート情報 ===',\n      'ビューポート (innerWidth x innerHeight): ' + iw + ' x ' + ih + ' px',\n      'ドキュメント (clientWidth x clientHeight): ' + dw + ' x ' + dh + ' px',\n      '画面解像度: ' + screen.width + ' x ' + screen.height + ' px',\n      'devicePixelRatio: ' + dpr,\n      'Tailwind ブレイクポイント: ' + bp.id + ' (' + bp.name + ')',\n      '向き: ' + orient,\n      'タッチデバイス: ' + (isTouch ? 'はい' : 'いいえ'),\n      '取得日時: ' + new Date().toISOString()\n    ].join('\\n');\n\n    if (navigator.clipboard \u0026\u0026 navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).then(function() { vtShowCopied(); });\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = text;\n      ta.style.position = 'fixed';\n      ta.style.opacity = '0';\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      vtShowCopied();\n    }\n  };\n\n  window.vtShowCopied = function() {\n    var msg = document.getElementById('vt-copy-msg');\n    msg.classList.add('show');\n    setTimeout(function() { msg.classList.remove('show'); }, 2500);\n  };\n\n  update();\n  window.addEventListener('resize', update);\n  if (window.screen \u0026\u0026 window.screen.orientation) {\n    screen.orientation.addEventListener('change', update);\n  }\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e上部の数値を確認\u003c/strong\u003e — ブラウザのウィンドウをリサイズするとリアルタイムで更新されます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eブレイクポイントバーをチェック\u003c/strong\u003e — 現在の幅がTailwind CSSのどのブレイクポイント（xs / sm / md / lg / xl / 2xl）に該当するかが一目でわかります。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eデバイスプリセット一覧で比較\u003c/strong\u003e — 実機でどのように表示されるかの参考として活用してください。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e「情報をコピー」ボタン\u003c/strong\u003e — バグ報告やデザイン確認のためにスナップショットをテキストでコピーできます。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"各プロパティの意味\"\u003e各プロパティの意味\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eプロパティ\u003c/th\u003e\n          \u003cth\u003e計測対象\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003ewindow.innerWidth/Height\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eスクロールバーを含む表示領域のサイズ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003eclientWidth/Height\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eスクロールバーを除いた表示領域（CSSメディアクエリと一致）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003escreen.width/Height\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eデバイスの物理画面解像度（ズームに影響されない）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003edevicePixelRatio\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003eCSS 1px が物理何ピクセルに対応するか（Retinaは2以上）\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"tailwind-css-ブレイクポイント一覧\"\u003eTailwind CSS ブレイクポイント一覧\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eプレフィックス\u003c/th\u003e\n          \u003cth\u003e最小幅\u003c/th\u003e\n          \u003cth\u003eCSSルール\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cem\u003e(なし — xs)\u003c/em\u003e\u003c/td\u003e\n          \u003ctd\u003e0 px\u003c/td\u003e\n          \u003ctd\u003eデフォルトスタイル\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003esm\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e640 px\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e@media (min-width: 640px)\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003emd\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e768 px\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e@media (min-width: 768px)\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003elg\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e1024 px\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e@media (min-width: 1024px)\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003exl\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e1280 px\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e@media (min-width: 1280px)\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ccode\u003e2xl\u003c/code\u003e\u003c/td\u003e\n          \u003ctd\u003e1536 px\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003e@media (min-width: 1536px)\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003eWeb制作の経費管理もかんたんに\u003c/p\u003e","title":"ビューポートサイズテスター"},{"content":" ストップウォッチ カウントダウン 時 分 秒 00:00:00.000 スタート ラップ リセット \u0026#x26F6; Space スタート / ストップ \u0026nbsp;\u0026nbsp; L ラップ \u0026nbsp;\u0026nbsp; R リセット \u0026nbsp;\u0026nbsp; F フルスクリーン ラップタイム クリア ラップ ラップタイム 経過時間 関連ツール ポモドーロテクニックで集中力アップ → ポモドーロタイマー イベントや締め切りまでカウントダウン → カウントダウンタイマー ランダムな数字・サイコロ・コインを生成 → 乱数生成ツール 時間管理の効率化にはfreee 業務の時間計測をしている方、freeeの工数管理機能で時間と経費を一元管理。 freeeを無料で試す\n","permalink":"https://productivity-works.com/ja/tools/stopwatch/","summary":"\u003cdiv id=\"sw-app\"\u003e\n\u003cstyle\u003e\n  #sw-app {\n    font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic\", \"Meiryo\", sans-serif;\n    max-width: 720px;\n    margin: 0 auto;\n    padding: 16px;\n    color: #1a2e2a;\n  }\n\n  /* モードタブ */\n  #sw-app .sw-mode-tabs {\n    display: flex;\n    justify-content: center;\n    gap: 8px;\n    margin-bottom: 32px;\n    flex-wrap: wrap;\n  }\n  #sw-app .sw-mode-tab {\n    padding: 8px 24px;\n    border: 2px solid #10b981;\n    border-radius: 24px;\n    background: transparent;\n    color: #10b981;\n    font-size: 14px;\n    font-weight: 700;\n    cursor: pointer;\n    transition: all 0.2s;\n  }\n  #sw-app .sw-mode-tab:hover {\n    background: #d1fae5;\n  }\n  #sw-app .sw-mode-tab.active {\n    background: #10b981;\n    color: #fff;\n  }\n\n  /* ディスプレイ */\n  #sw-app .sw-display-wrap {\n    text-align: center;\n    margin-bottom: 32px;\n  }\n  #sw-app .sw-display {\n    font-size: clamp(48px, 10vw, 96px);\n    font-variant-numeric: tabular-nums;\n    font-weight: 700;\n    letter-spacing: 2px;\n    color: #065f46;\n    line-height: 1;\n    font-family: 'Courier New', 'Roboto Mono', monospace;\n  }\n  #sw-app .sw-display .sw-ms {\n    font-size: 0.45em;\n    color: #10b981;\n    vertical-align: baseline;\n  }\n\n  /* カウントダウン入力 */\n  #sw-app .sw-countdown-setup {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 24px;\n    flex-wrap: wrap;\n  }\n  #sw-app .sw-cd-field {\n    display: flex;\n    align-items: center;\n    gap: 4px;\n  }\n  #sw-app .sw-cd-input {\n    width: 64px;\n    padding: 8px 10px;\n    border: 2px solid #10b981;\n    border-radius: 8px;\n    font-size: 18px;\n    font-weight: 700;\n    text-align: center;\n    color: #065f46;\n    outline: none;\n    font-family: monospace;\n  }\n  #sw-app .sw-cd-input:focus {\n    border-color: #059669;\n    box-shadow: 0 0 0 3px rgba(16,185,129,0.15);\n  }\n  #sw-app .sw-cd-sep {\n    font-size: 18px;\n    font-weight: 700;\n    color: #10b981;\n  }\n\n  /* ボタン */\n  #sw-app .sw-buttons {\n    display: flex;\n    justify-content: center;\n    gap: 12px;\n    flex-wrap: wrap;\n    margin-bottom: 28px;\n  }\n  #sw-app .sw-btn {\n    padding: 13px 32px;\n    border: none;\n    border-radius: 12px;\n    font-size: 16px;\n    font-weight: 700;\n    cursor: pointer;\n    transition: transform 0.1s, box-shadow 0.1s;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.12);\n    letter-spacing: 0.5px;\n  }\n  #sw-app .sw-btn:active {\n    transform: scale(0.96);\n    box-shadow: 0 1px 4px rgba(0,0,0,0.1);\n  }\n  #sw-app .sw-btn-start {\n    background: #10b981;\n    color: #fff;\n    min-width: 120px;\n  }\n  #sw-app .sw-btn-start:hover {\n    background: #059669;\n  }\n  #sw-app .sw-btn-stop {\n    background: #ef4444;\n    color: #fff;\n    min-width: 120px;\n  }\n  #sw-app .sw-btn-stop:hover {\n    background: #dc2626;\n  }\n  #sw-app .sw-btn-lap {\n    background: #f0fdf4;\n    color: #065f46;\n    border: 2px solid #10b981;\n  }\n  #sw-app .sw-btn-lap:hover {\n    background: #d1fae5;\n  }\n  #sw-app .sw-btn-reset {\n    background: #f3f4f6;\n    color: #374151;\n    border: 2px solid #d1d5db;\n  }\n  #sw-app .sw-btn-reset:hover {\n    background: #e5e7eb;\n  }\n  #sw-app .sw-btn-fs {\n    background: #f0fdf4;\n    color: #065f46;\n    border: 2px solid #10b981;\n    padding: 13px 18px;\n    font-size: 18px;\n  }\n  #sw-app .sw-btn-fs:hover {\n    background: #d1fae5;\n  }\n  #sw-app .sw-btn:disabled {\n    opacity: 0.4;\n    cursor: not-allowed;\n    transform: none;\n  }\n\n  /* キーボードショートカット */\n  #sw-app .sw-shortcuts {\n    text-align: center;\n    font-size: 12px;\n    color: #9ca3af;\n    margin-bottom: 28px;\n  }\n  #sw-app .sw-shortcuts kbd {\n    display: inline-block;\n    padding: 2px 6px;\n    background: #f3f4f6;\n    border: 1px solid #d1d5db;\n    border-radius: 4px;\n    font-family: monospace;\n    font-size: 11px;\n    color: #374151;\n  }\n\n  /* ラップテーブル */\n  #sw-app .sw-lap-section {\n    margin-top: 8px;\n  }\n  #sw-app .sw-lap-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 10px;\n  }\n  #sw-app .sw-lap-title {\n    font-size: 15px;\n    font-weight: 700;\n    color: #065f46;\n  }\n  #sw-app .sw-lap-clear {\n    font-size: 12px;\n    color: #10b981;\n    background: none;\n    border: none;\n    cursor: pointer;\n    padding: 4px 8px;\n    border-radius: 6px;\n    transition: background 0.15s;\n  }\n  #sw-app .sw-lap-clear:hover {\n    background: #d1fae5;\n  }\n  #sw-app .sw-lap-table {\n    width: 100%;\n    border-collapse: collapse;\n    font-size: 14px;\n  }\n  #sw-app .sw-lap-table thead th {\n    padding: 10px 12px;\n    background: #ecfdf5;\n    color: #065f46;\n    font-weight: 700;\n    text-align: left;\n    border-bottom: 2px solid #10b981;\n    font-size: 12px;\n    letter-spacing: 0.5px;\n  }\n  #sw-app .sw-lap-table tbody tr {\n    border-bottom: 1px solid #f0fdf4;\n    transition: background 0.12s;\n  }\n  #sw-app .sw-lap-table tbody tr:hover {\n    background: #f0fdf4;\n  }\n  #sw-app .sw-lap-table td {\n    padding: 10px 12px;\n    font-variant-numeric: tabular-nums;\n    font-family: monospace;\n    font-size: 14px;\n  }\n  #sw-app .sw-lap-table td:first-child {\n    font-family: inherit;\n    font-weight: 600;\n    color: #374151;\n    font-size: 13px;\n  }\n  #sw-app .sw-lap-best {\n    background: #dcfce7 !important;\n    color: #166534;\n    font-weight: 700;\n  }\n  #sw-app .sw-lap-worst {\n    background: #fee2e2 !important;\n    color: #991b1b;\n    font-weight: 700;\n  }\n  #sw-app .sw-lap-best td,\n  #sw-app .sw-lap-worst td {\n    font-weight: 700;\n  }\n  #sw-app .sw-lap-badge {\n    display: inline-block;\n    padding: 1px 7px;\n    border-radius: 10px;\n    font-size: 10px;\n    font-family: sans-serif;\n    letter-spacing: 0.5px;\n    vertical-align: middle;\n    margin-left: 6px;\n  }\n  #sw-app .sw-badge-best {\n    background: #10b981;\n    color: #fff;\n  }\n  #sw-app .sw-badge-worst {\n    background: #ef4444;\n    color: #fff;\n  }\n\n  /* カウントダウン終了 */\n  #sw-app .sw-cd-done {\n    color: #ef4444 !important;\n    animation: sw-pulse 0.6s ease-in-out infinite alternate;\n  }\n  @keyframes sw-pulse {\n    from { opacity: 1; }\n    to { opacity: 0.5; }\n  }\n\n  /* フルスクリーン */\n  #sw-app.sw-fullscreen {\n    position: fixed;\n    inset: 0;\n    z-index: 99999;\n    max-width: 100%;\n    background: #fff;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    padding: 32px;\n    overflow-y: auto;\n  }\n  #sw-app.sw-fullscreen .sw-display {\n    font-size: clamp(72px, 18vw, 160px);\n  }\n  #sw-app.sw-fullscreen .sw-lap-section {\n    width: 100%;\n    max-width: 700px;\n  }\n\n  /* レスポンシブ */\n  @media (max-width: 480px) {\n    #sw-app .sw-btn {\n      padding: 11px 18px;\n      font-size: 14px;\n    }\n    #sw-app .sw-lap-table {\n      font-size: 12px;\n    }\n  }\n\u003c/style\u003e\n\u003c!-- モードタブ --\u003e\n\u003cdiv class=\"sw-mode-tabs\"\u003e\n  \u003cbutton class=\"sw-mode-tab active\" data-mode=\"stopwatch\" onclick=\"swSetMode('stopwatch')\"\u003eストップウォッチ\u003c/button\u003e\n  \u003cbutton class=\"sw-mode-tab\" data-mode=\"countdown\" onclick=\"swSetMode('countdown')\"\u003eカウントダウン\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- カウントダウン設定（ストップウォッチモード時は非表示） --\u003e\n\u003cdiv class=\"sw-countdown-setup\" id=\"sw-cd-setup\" style=\"display:none;\"\u003e\n  \u003cspan class=\"sw-cd-field\"\u003e\n    \u003cinput class=\"sw-cd-input\" id=\"sw-cd-h\" type=\"number\" min=\"0\" max=\"99\" value=\"0\" placeholder=\"時\"\u003e\n    \u003cspan class=\"sw-cd-sep\"\u003e時\u003c/span\u003e\n  \u003c/span\u003e\n  \u003cspan class=\"sw-cd-field\"\u003e\n    \u003cinput class=\"sw-cd-input\" id=\"sw-cd-m\" type=\"number\" min=\"0\" max=\"59\" value=\"5\" placeholder=\"分\"\u003e\n    \u003cspan class=\"sw-cd-sep\"\u003e分\u003c/span\u003e\n  \u003c/span\u003e\n  \u003cspan class=\"sw-cd-field\"\u003e\n    \u003cinput class=\"sw-cd-input\" id=\"sw-cd-s\" type=\"number\" min=\"0\" max=\"59\" value=\"0\" placeholder=\"秒\"\u003e\n    \u003cspan class=\"sw-cd-sep\"\u003e秒\u003c/span\u003e\n  \u003c/span\u003e\n\u003c/div\u003e\n\u003c!-- メインディスプレイ --\u003e\n\u003cdiv class=\"sw-display-wrap\"\u003e\n  \u003cdiv class=\"sw-display\" id=\"sw-display\"\u003e\n    \u003cspan id=\"sw-hms\"\u003e00:00:00\u003c/span\u003e\u003cspan class=\"sw-ms\"\u003e.\u003cspan id=\"sw-ms\"\u003e000\u003c/span\u003e\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ボタン --\u003e\n\u003cdiv class=\"sw-buttons\"\u003e\n  \u003cbutton class=\"sw-btn sw-btn-start\" id=\"sw-btn-startstop\" onclick=\"swToggle()\"\u003eスタート\u003c/button\u003e\n  \u003cbutton class=\"sw-btn sw-btn-lap\" id=\"sw-btn-lap\" onclick=\"swLap()\" disabled\u003eラップ\u003c/button\u003e\n  \u003cbutton class=\"sw-btn sw-btn-reset\" onclick=\"swReset()\"\u003eリセット\u003c/button\u003e\n  \u003cbutton class=\"sw-btn sw-btn-fs\" id=\"sw-btn-fs\" onclick=\"swToggleFs()\" title=\"フルスクリーン\"\u003e\u0026#x26F6;\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- キーボードショートカット --\u003e\n\u003cdiv class=\"sw-shortcuts\"\u003e\n  \u003ckbd\u003eSpace\u003c/kbd\u003e スタート / ストップ \u0026nbsp;\u0026nbsp;\n  \u003ckbd\u003eL\u003c/kbd\u003e ラップ \u0026nbsp;\u0026nbsp;\n  \u003ckbd\u003eR\u003c/kbd\u003e リセット \u0026nbsp;\u0026nbsp;\n  \u003ckbd\u003eF\u003c/kbd\u003e フルスクリーン\n\u003c/div\u003e\n\u003c!-- ラップセクション --\u003e\n\u003cdiv class=\"sw-lap-section\" id=\"sw-lap-section\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"sw-lap-header\"\u003e\n    \u003cspan class=\"sw-lap-title\"\u003eラップタイム\u003c/span\u003e\n    \u003cbutton class=\"sw-lap-clear\" onclick=\"swClearLaps()\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n  \u003ctable class=\"sw-lap-table\"\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n        \u003cth\u003eラップ\u003c/th\u003e\n        \u003cth\u003eラップタイム\u003c/th\u003e\n        \u003cth\u003e経過時間\u003c/th\u003e\n      \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody id=\"sw-lap-tbody\"\u003e\u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  // 状態\n  var SW = {\n    mode: 'stopwatch',\n    running: false,\n    startTime: 0,\n    elapsed: 0,\n    lapOffset: 0,\n    laps: [],\n    cdTotal: 0,\n    cdDone: false,\n    raf: null,\n    fs: false\n  };\n\n  // 要素\n  var elHMS   = document.getElementById('sw-hms');\n  var elMS    = document.getElementById('sw-ms');\n  var elDisp  = document.getElementById('sw-display');\n  var elBtn   = document.getElementById('sw-btn-startstop');\n  var elLapBtn= document.getElementById('sw-btn-lap');\n  var elLapSec= document.getElementById('sw-lap-section');\n  var elTbody = document.getElementById('sw-lap-tbody');\n  var elCdSet = document.getElementById('sw-cd-setup');\n  var elApp   = document.getElementById('sw-app');\n  var elCdH   = document.getElementById('sw-cd-h');\n  var elCdM   = document.getElementById('sw-cd-m');\n  var elCdS   = document.getElementById('sw-cd-s');\n\n  // フォーマット\n  function pad2(n) { return n \u003c 10 ? '0' + n : '' + n; }\n  function pad3(n) { return n \u003c 10 ? '00' + n : n \u003c 100 ? '0' + n : '' + n; }\n\n  function msToDisplay(ms) {\n    ms = Math.max(0, Math.floor(ms));\n    var mil = ms % 1000;\n    var s   = Math.floor(ms / 1000) % 60;\n    var m   = Math.floor(ms / 60000) % 60;\n    var h   = Math.floor(ms / 3600000);\n    return { hms: pad2(h) + ':' + pad2(m) + ':' + pad2(s), ms: pad3(mil) };\n  }\n\n  function msToString(ms) {\n    var d = msToDisplay(ms);\n    return d.hms + '.' + d.ms;\n  }\n\n  // 描画\n  function render() {\n    var now = SW.running ? (performance.now() - SW.startTime + SW.elapsed) : SW.elapsed;\n    if (SW.mode === 'countdown') {\n      var remaining = SW.cdTotal - now;\n      if (remaining \u003c= 0) {\n        remaining = 0;\n        if (!SW.cdDone) {\n          SW.cdDone = true;\n          swStop();\n          elDisp.classList.add('sw-cd-done');\n          try {\n            var ctx = new (window.AudioContext || window.webkitAudioContext)();\n            for (var i = 0; i \u003c 3; i++) {\n              (function(delay) {\n                var osc = ctx.createOscillator();\n                var gain = ctx.createGain();\n                osc.connect(gain); gain.connect(ctx.destination);\n                osc.frequency.value = 880;\n                osc.type = 'sine';\n                gain.gain.setValueAtTime(0.5, ctx.currentTime + delay);\n                gain.gain.exponentialRampToValueAtTime(0.001, ctx.currentTime + delay + 0.3);\n                osc.start(ctx.currentTime + delay);\n                osc.stop(ctx.currentTime + delay + 0.35);\n              })(i * 0.4);\n            }\n          } catch(e) {}\n        }\n      }\n      var d = msToDisplay(remaining);\n      elHMS.textContent = d.hms;\n      elMS.textContent  = d.ms;\n    } else {\n      var d2 = msToDisplay(now);\n      elHMS.textContent = d2.hms;\n      elMS.textContent  = d2.ms;\n    }\n  }\n\n  function loop() {\n    render();\n    SW.raf = requestAnimationFrame(loop);\n  }\n\n  // コントロール\n  function swStart() {\n    if (SW.mode === 'countdown' \u0026\u0026 !SW.running \u0026\u0026 SW.elapsed === 0) {\n      var h = parseInt(elCdH.value) || 0;\n      var m = parseInt(elCdM.value) || 0;\n      var s = parseInt(elCdS.value) || 0;\n      SW.cdTotal = (h * 3600 + m * 60 + s) * 1000;\n      if (SW.cdTotal \u003c= 0) return;\n      SW.cdDone = false;\n      elDisp.classList.remove('sw-cd-done');\n    }\n    SW.running = true;\n    SW.startTime = performance.now();\n    elBtn.textContent = 'ストップ';\n    elBtn.className = 'sw-btn sw-btn-stop';\n    elLapBtn.disabled = (SW.mode === 'countdown');\n    SW.raf = requestAnimationFrame(loop);\n  }\n\n  function swStop() {\n    if (!SW.running) return;\n    SW.elapsed += performance.now() - SW.startTime;\n    SW.running = false;\n    cancelAnimationFrame(SW.raf);\n    render();\n    elBtn.textContent = 'スタート';\n    elBtn.className = 'sw-btn sw-btn-start';\n    elLapBtn.disabled = true;\n  }\n\n  window.swToggle = function() {\n    if (SW.running) swStop(); else swStart();\n  };\n\n  window.swLap = function() {\n    if (!SW.running || SW.mode === 'countdown') return;\n    var total = SW.elapsed + (performance.now() - SW.startTime);\n    var lap   = total - SW.lapOffset;\n    SW.lapOffset = total;\n    SW.laps.unshift({ lap: lap, total: total, num: SW.laps.length + 1 });\n    renderLaps();\n    elLapSec.style.display = '';\n  };\n\n  window.swReset = function() {\n    swStop();\n    SW.elapsed   = 0;\n    SW.lapOffset = 0;\n    SW.laps      = [];\n    SW.cdDone    = false;\n    elDisp.classList.remove('sw-cd-done');\n    elBtn.textContent = 'スタート';\n    elBtn.className = 'sw-btn sw-btn-start';\n    elLapBtn.disabled = true;\n    render();\n    elTbody.innerHTML = '';\n    elLapSec.style.display = 'none';\n  };\n\n  window.swClearLaps = function() {\n    SW.laps = [];\n    SW.lapOffset = SW.elapsed + (SW.running ? (performance.now() - SW.startTime) : 0);\n    elTbody.innerHTML = '';\n    elLapSec.style.display = 'none';\n  };\n\n  window.swSetMode = function(mode) {\n    swReset();\n    SW.mode = mode;\n    document.querySelectorAll('#sw-app .sw-mode-tab').forEach(function(t) {\n      t.classList.toggle('active', t.dataset.mode === mode);\n    });\n    elCdSet.style.display = mode === 'countdown' ? 'flex' : 'none';\n    elLapBtn.style.display = mode === 'countdown' ? 'none' : '';\n    elLapSec.style.display = 'none';\n    render();\n  };\n\n  window.swToggleFs = function() {\n    SW.fs = !SW.fs;\n    elApp.classList.toggle('sw-fullscreen', SW.fs);\n    document.getElementById('sw-btn-fs').title = SW.fs ? 'フルスクリーン終了' : 'フルスクリーン';\n    document.getElementById('sw-btn-fs').innerHTML = SW.fs ? '\u0026#x2715;' : '\u0026#x26F6;';\n  };\n\n  // ラップテーブル描画\n  function renderLaps() {\n    if (SW.laps.length === 0) return;\n    var lapTimes = SW.laps.map(function(l){ return l.lap; });\n    var minLap = Math.min.apply(null, lapTimes);\n    var maxLap = Math.max.apply(null, lapTimes);\n    var onlyOne = SW.laps.length === 1;\n\n    elTbody.innerHTML = SW.laps.map(function(l, i) {\n      var isBest  = !onlyOne \u0026\u0026 l.lap === minLap;\n      var isWorst = !onlyOne \u0026\u0026 l.lap === maxLap;\n      var rowCls  = isBest ? 'sw-lap-best' : isWorst ? 'sw-lap-worst' : '';\n      var badge   = isBest\n        ? '\u003cspan class=\"sw-lap-badge sw-badge-best\"\u003eベスト\u003c/span\u003e'\n        : isWorst\n        ? '\u003cspan class=\"sw-lap-badge sw-badge-worst\"\u003eワースト\u003c/span\u003e'\n        : '';\n      var lapNum  = SW.laps.length - i;\n      return '\u003ctr class=\"' + rowCls + '\"\u003e'\n        + '\u003ctd\u003eラップ ' + lapNum + badge + '\u003c/td\u003e'\n        + '\u003ctd\u003e' + msToString(l.lap) + '\u003c/td\u003e'\n        + '\u003ctd\u003e' + msToString(l.total) + '\u003c/td\u003e'\n        + '\u003c/tr\u003e';\n    }).join('');\n  }\n\n  // キーボードショートカット\n  document.addEventListener('keydown', function(e) {\n    if (document.activeElement \u0026\u0026 (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA')) return;\n    if (!document.getElementById('sw-app')) return;\n    if (e.code === 'Space' || e.key === ' ') {\n      e.preventDefault();\n      swToggle();\n    } else if (e.key === 'l' || e.key === 'L') {\n      swLap();\n    } else if (e.key === 'r' || e.key === 'R') {\n      swReset();\n    } else if (e.key === 'f' || e.key === 'F') {\n      swToggleFs();\n    }\n  });\n\n  document.addEventListener('keydown', function(e) {\n    if (e.key === 'Escape' \u0026\u0026 SW.fs) swToggleFs();\n  });\n\n  // 初期描画\n  render();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003eポモドーロテクニックで集中力アップ → \u003ca href=\"https://productivity-works.com/ja/tools/pomodoro-timer/\"\u003eポモドーロタイマー\u003c/a\u003e\n\u003c/p\u003e","title":"ストップウォッチ - 無料オンラインストップウォッチ・ラップタイム計測"},{"content":" ファイルサイズ・速度の入力 よく使うファイルサイズのプリセット： MP3（5 MB） 写真（10 MB） 書類（25 MB） CD（700 MB） HD映画（5 GB） 4K映画（25 GB） PCゲーム（50 GB） 大型ゲーム（100 GB） ファイルサイズ 単位 KB（キロバイト） MB（メガバイト） GB（ギガバイト） TB（テラバイト） 通信速度のプリセット： 3G — 1 Mbps 3G — 5 Mbps 4G LTE — 25 Mbps 4G+ — 50 Mbps Wi-Fi — 100 Mbps Wi-Fi — 300 Mbps 光回線 — 500 Mbps 光回線 — 1 Gbps インターネット速度（Mbps） ファイルサイズと通信速度に0より大きい値を入力してください。 ダウンロード時間を計算する 速度単位コンバーター いずれかの欄に値を入力すると、他の欄が自動で変換されます。 Mbps MBps（MB/s） Kbps KBps（KB/s） Gbps 速度別ダウンロード時間比較 回線種別 速度 — — — 上でファイルサイズを計算すると、表が自動的に更新されます。 IT環境の管理を効率化 → freee会計でIT経費を自動管理 IT機器・回線・クラウドサービスなどのIT経費を毎月手入力していませんか？\nfreee会計なら、銀行・カード明細を自動取込してIT経費を一括管理できます。 関連記事 光回線 おすすめ2026年版！速度・料金・キャッシュバックで比較 WiFiルーター おすすめ2026年版！速度・範囲・価格で選ぶ最強機種 ","permalink":"https://productivity-works.com/ja/tools/download-time-calculator/","summary":"\u003cdiv id=\"dt-app\"\u003e\n\u003cstyle\u003e\n#dt-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Noto Sans JP', 'Yu Gothic', sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a202c;\n}\n#dt-app * { box-sizing: border-box; }\n#dt-app h2 {\n  font-size: 1.2rem;\n  font-weight: 700;\n  margin: 1.6rem 0 0.8rem;\n  color: #2d3748;\n  border-left: 4px solid #4299e1;\n  padding-left: 0.6rem;\n}\n#dt-app .card {\n  background: #f7fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 1.4rem 1.6rem;\n  margin-bottom: 1.4rem;\n}\n#dt-app .row {\n  display: flex;\n  gap: 1rem;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  margin-bottom: 1rem;\n}\n#dt-app .field {\n  display: flex;\n  flex-direction: column;\n  gap: 0.3rem;\n}\n#dt-app label {\n  font-size: 0.8rem;\n  font-weight: 700;\n  color: #4a5568;\n  letter-spacing: 0.02em;\n}\n#dt-app input[type=\"number\"] {\n  padding: 0.55rem 0.75rem;\n  border: 1.5px solid #cbd5e0;\n  border-radius: 7px;\n  font-size: 1rem;\n  width: 160px;\n  background: #fff;\n  transition: border-color 0.2s;\n}\n#dt-app input[type=\"number\"]:focus {\n  outline: none;\n  border-color: #4299e1;\n  box-shadow: 0 0 0 3px rgba(66,153,225,0.15);\n}\n#dt-app select {\n  padding: 0.55rem 0.75rem;\n  border: 1.5px solid #cbd5e0;\n  border-radius: 7px;\n  font-size: 0.95rem;\n  background: #fff;\n  cursor: pointer;\n  transition: border-color 0.2s;\n}\n#dt-app select:focus {\n  outline: none;\n  border-color: #4299e1;\n}\n#dt-app .presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin-bottom: 0.8rem;\n}\n#dt-app .preset-btn {\n  padding: 0.38rem 0.85rem;\n  border: 1.5px solid #bee3f8;\n  border-radius: 20px;\n  background: #ebf8ff;\n  color: #2b6cb0;\n  font-size: 0.82rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: all 0.18s;\n  white-space: nowrap;\n}\n#dt-app .preset-btn:hover {\n  background: #4299e1;\n  color: #fff;\n  border-color: #4299e1;\n}\n#dt-app .preset-btn.active {\n  background: #2b6cb0;\n  color: #fff;\n  border-color: #2b6cb0;\n}\n#dt-app .calc-btn {\n  padding: 0.65rem 2rem;\n  background: linear-gradient(135deg, #4299e1, #2b6cb0);\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 1rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.2s, transform 0.1s;\n  margin-top: 0.5rem;\n}\n#dt-app .calc-btn:hover { opacity: 0.9; transform: translateY(-1px); }\n#dt-app .calc-btn:active { transform: translateY(0); }\n#dt-app .result-box {\n  background: linear-gradient(135deg, #ebf8ff, #e6fffa);\n  border: 2px solid #4299e1;\n  border-radius: 10px;\n  padding: 1.2rem 1.6rem;\n  margin-top: 1rem;\n  display: none;\n}\n#dt-app .result-box.show { display: block; }\n#dt-app .result-time {\n  font-size: 2rem;\n  font-weight: 800;\n  color: #2b6cb0;\n  margin-bottom: 0.3rem;\n}\n#dt-app .result-detail {\n  font-size: 0.88rem;\n  color: #4a5568;\n  line-height: 1.7;\n}\n#dt-app .converter-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(155px, 1fr));\n  gap: 0.8rem;\n}\n#dt-app .conv-field {\n  display: flex;\n  flex-direction: column;\n  gap: 0.3rem;\n}\n#dt-app .conv-field input { width: 100%; }\n#dt-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n}\n#dt-app th {\n  background: #4299e1;\n  color: #fff;\n  padding: 0.6rem 0.8rem;\n  text-align: left;\n  font-weight: 700;\n  font-size: 0.83rem;\n}\n#dt-app th:first-child { border-radius: 6px 0 0 0; }\n#dt-app th:last-child { border-radius: 0 6px 0 0; }\n#dt-app td {\n  padding: 0.55rem 0.8rem;\n  border-bottom: 1px solid #e2e8f0;\n}\n#dt-app tr:nth-child(even) td { background: #f7fafc; }\n#dt-app tr:hover td { background: #ebf8ff; }\n#dt-app .highlight-row td { font-weight: 700; color: #2b6cb0; }\n#dt-app .section-label {\n  font-size: 0.78rem;\n  color: #718096;\n  margin-bottom: 0.5rem;\n}\n#dt-app .error-msg {\n  color: #e53e3e;\n  font-size: 0.85rem;\n  margin-top: 0.4rem;\n  display: none;\n}\n#dt-app .freee-cta {\n  background: #fffbeb;\n  border: 1px solid #f6e05e;\n  border-left: 4px solid #d69e2e;\n  border-radius: 8px;\n  padding: 1rem 1.4rem;\n  margin-top: 1.4rem;\n  font-size: 0.92rem;\n  color: #744210;\n  line-height: 1.7;\n}\n#dt-app .freee-cta a {\n  color: #b7791f;\n  font-weight: 700;\n}\n#dt-app .freee-cta a:hover { color: #975a16; }\n@media (max-width: 600px) {\n  #dt-app input[type=\"number\"] { width: 120px; }\n  #dt-app .result-time { font-size: 1.5rem; }\n  #dt-app table { font-size: 0.8rem; }\n  #dt-app td, #dt-app th { padding: 0.4rem 0.5rem; }\n}\n\u003c/style\u003e\n\u003ch2\u003eファイルサイズ・速度の入力\u003c/h2\u003e\n\u003cdiv class=\"card\"\u003e\n  \u003cdiv class=\"section-label\"\u003eよく使うファイルサイズのプリセット：\u003c/div\u003e\n  \u003cdiv class=\"presets\" id=\"size-presets\"\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSize(5,'MB','MP3')\"\u003eMP3（5 MB）\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSize(10,'MB','写真')\"\u003e写真（10 MB）\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSize(25,'MB','書類')\"\u003e書類（25 MB）\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSize(700,'MB','CD')\"\u003eCD（700 MB）\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSize(5,'GB','HD映画')\"\u003eHD映画（5 GB）\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSize(25,'GB','4K映画')\"\u003e4K映画（25 GB）\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSize(50,'GB','PCゲーム')\"\u003ePCゲーム（50 GB）\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSize(100,'GB','大型ゲーム')\"\u003e大型ゲーム（100 GB）\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"row\"\u003e\n    \u003cdiv class=\"field\"\u003e\n      \u003clabel\u003eファイルサイズ\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"dt-filesize\" min=\"0\" step=\"any\" placeholder=\"例: 1.5\" value=\"\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"field\"\u003e\n      \u003clabel\u003e単位\u003c/label\u003e\n      \u003cselect id=\"dt-sizeunit\"\u003e\n        \u003coption value=\"KB\"\u003eKB（キロバイト）\u003c/option\u003e\n        \u003coption value=\"MB\" selected\u003eMB（メガバイト）\u003c/option\u003e\n        \u003coption value=\"GB\"\u003eGB（ギガバイト）\u003c/option\u003e\n        \u003coption value=\"TB\"\u003eTB（テラバイト）\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"section-label\" style=\"margin-top:0.8rem;\"\u003e通信速度のプリセット：\u003c/div\u003e\n  \u003cdiv class=\"presets\" id=\"speed-presets\"\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSpeed(1,'3G（低速）')\"\u003e3G — 1 Mbps\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSpeed(5,'3G（標準）')\"\u003e3G — 5 Mbps\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSpeed(25,'4G LTE')\"\u003e4G LTE — 25 Mbps\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSpeed(50,'4G+')\"\u003e4G+ — 50 Mbps\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSpeed(100,'Wi-Fi 100')\"\u003eWi-Fi — 100 Mbps\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSpeed(300,'Wi-Fi 300')\"\u003eWi-Fi — 300 Mbps\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSpeed(500,'光回線 500')\"\u003e光回線 — 500 Mbps\u003c/button\u003e\n    \u003cbutton class=\"preset-btn\" onclick=\"dtSetSpeed(1000,'光回線 1Gbps')\"\u003e光回線 — 1 Gbps\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"row\"\u003e\n    \u003cdiv class=\"field\"\u003e\n      \u003clabel\u003eインターネット速度（Mbps）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"dt-speed\" min=\"0.01\" step=\"any\" placeholder=\"例: 100\" value=\"\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"error-msg\" id=\"dt-error\"\u003eファイルサイズと通信速度に0より大きい値を入力してください。\u003c/div\u003e\n  \u003cbutton class=\"calc-btn\" onclick=\"dtCalculate()\"\u003eダウンロード時間を計算する\u003c/button\u003e\n  \u003cdiv class=\"result-box\" id=\"dt-result\"\u003e\n    \u003cdiv class=\"result-time\" id=\"dt-result-time\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"result-detail\" id=\"dt-result-detail\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003e速度単位コンバーター\u003c/h2\u003e\n\u003cdiv class=\"card\"\u003e\n  \u003cdiv class=\"section-label\"\u003eいずれかの欄に値を入力すると、他の欄が自動で変換されます。\u003c/div\u003e\n  \u003cdiv class=\"converter-grid\"\u003e\n    \u003cdiv class=\"conv-field\"\u003e\n      \u003clabel\u003eMbps\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"cv-mbps\" min=\"0\" step=\"any\" placeholder=\"例: 100\" oninput=\"dtConvert('mbps')\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"conv-field\"\u003e\n      \u003clabel\u003eMBps（MB/s）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"cv-mbps2\" min=\"0\" step=\"any\" placeholder=\"\" oninput=\"dtConvert('mbps2')\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"conv-field\"\u003e\n      \u003clabel\u003eKbps\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"cv-kbps\" min=\"0\" step=\"any\" placeholder=\"\" oninput=\"dtConvert('kbps')\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"conv-field\"\u003e\n      \u003clabel\u003eKBps（KB/s）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"cv-kbps2\" min=\"0\" step=\"any\" placeholder=\"\" oninput=\"dtConvert('kbps2')\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"conv-field\"\u003e\n      \u003clabel\u003eGbps\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"cv-gbps\" min=\"0\" step=\"any\" placeholder=\"\" oninput=\"dtConvert('gbps')\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003e速度別ダウンロード時間比較\u003c/h2\u003e\n\u003cdiv class=\"card\" style=\"padding: 0.6rem 0; overflow-x:auto;\"\u003e\n  \u003ctable id=\"dt-table\"\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n        \u003cth\u003e回線種別\u003c/th\u003e\n        \u003cth\u003e速度\u003c/th\u003e\n        \u003cth id=\"th-col1\"\u003e—\u003c/th\u003e\n        \u003cth id=\"th-col2\"\u003e—\u003c/th\u003e\n        \u003cth id=\"th-col3\"\u003e—\u003c/th\u003e\n      \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody id=\"dt-tbody\"\u003e\u003c/tbody\u003e\n  \u003c/table\u003e\n  \u003cdiv style=\"font-size:0.78rem;color:#718096;padding:0.5rem 0.8rem 0;\"\u003e\n    上でファイルサイズを計算すると、表が自動的に更新されます。\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIT環境の管理を効率化 → \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計でIT経費を自動管理\u003c/a\u003e\n\u003c/p\u003e","title":"ダウンロード時間計算ツール - ファイル転送時間を推定"},{"content":"CSSを圧縮してファイルサイズを削減、または圧縮済みCSSを整形して読みやすくします。圧縮率を即座に表示。すべてブラウザ内で処理されるため、ファイルのアップロード不要。\nHTMLを整形 → HTML整形ツール 圧縮（Minify） 整形（Beautify） インデント: スペース2つ スペース4つ タブ CSSを圧縮する クリア ファイルを開く 入力 CSS 出力 出力をコピー 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/css-minifier/","summary":"\u003cp\u003eCSSを圧縮してファイルサイズを削減、または圧縮済みCSSを整形して読みやすくします。圧縮率を即座に表示。すべてブラウザ内で処理されるため、ファイルのアップロード不要。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eHTMLを整形 → \u003ca href=\"https://productivity-works.com/ja/tools/html-beautifier/\"\u003eHTML整形ツール\u003c/a\u003e\n\u003c/p\u003e\u003c/blockquote\u003e\n\u003cdiv id=\"cm2-app\"\u003e\n\u003cstyle\u003e\n#cm2-app *,\n#cm2-app *::before,\n#cm2-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#cm2-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Yu Gothic\", Roboto, sans-serif;\n  color: #1e293b;\n  max-width: 820px;\n}\n#cm2-app h2 {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 10px;\n}\n#cm2-app .cm2-mode-tabs {\n  display: flex;\n  gap: 6px;\n  margin-bottom: 16px;\n}\n#cm2-app .cm2-tab {\n  padding: 8px 20px;\n  border-radius: 7px;\n  border: 1.5px solid #e2e8f0;\n  background: #f8fafc;\n  color: #475569;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n#cm2-app .cm2-tab.active {\n  background: #6366f1;\n  color: #fff;\n  border-color: #6366f1;\n}\n#cm2-app .cm2-tab:hover:not(.active) {\n  background: #f1f5f9;\n  border-color: #cbd5e1;\n}\n#cm2-app .cm2-panels {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 14px;\n}\n@media (max-width: 600px) {\n  #cm2-app .cm2-panels { grid-template-columns: 1fr; }\n}\n#cm2-app .cm2-panel-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 6px;\n}\n#cm2-app textarea {\n  width: 100%;\n  height: 240px;\n  padding: 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 13px;\n  line-height: 1.6;\n  resize: vertical;\n  font-family: \"SFMono-Regular\", \"Consolas\", \"Menlo\", monospace;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.2s;\n}\n#cm2-app textarea:focus {\n  outline: none;\n  border-color: #6366f1;\n}\n#cm2-app textarea[readonly] {\n  background: #f8fafc;\n  color: #334155;\n}\n#cm2-app .cm2-options {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  margin-bottom: 14px;\n  align-items: center;\n}\n#cm2-app .cm2-option-group {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 13px;\n  color: #475569;\n}\n#cm2-app .cm2-option-group label { cursor: pointer; user-select: none; }\n#cm2-app .cm2-option-group select {\n  padding: 4px 8px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  color: #1e293b;\n  background: #fff;\n  cursor: pointer;\n}\n#cm2-app .cm2-btn-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 16px;\n}\n#cm2-app button {\n  padding: 9px 20px;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: opacity 0.15s;\n}\n#cm2-app button:hover { opacity: 0.88; }\n#cm2-app .cm2-btn-go {\n  background: #6366f1;\n  color: #fff;\n}\n#cm2-app .cm2-btn-clear {\n  background: #f1f5f9;\n  color: #475569;\n}\n#cm2-app .cm2-btn-copy {\n  background: #f1f5f9;\n  color: #475569;\n}\n#cm2-app .cm2-btn-upload {\n  background: #f0fdf4;\n  color: #166534;\n  border: 1px solid #bbf7d0;\n}\n#cm2-app input[type=\"file\"] { display: none; }\n#cm2-app .cm2-stats {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 18px;\n  padding: 12px 16px;\n  background: #f8fafc;\n  border-radius: 8px;\n  font-size: 13px;\n  color: #475569;\n  margin-bottom: 8px;\n}\n#cm2-app .cm2-stats span strong {\n  color: #1e293b;\n  font-size: 15px;\n}\n#cm2-app .cm2-ratio-pill {\n  display: inline-block;\n  padding: 2px 10px;\n  border-radius: 999px;\n  font-size: 12px;\n  font-weight: 700;\n  background: #ecfdf5;\n  color: #065f46;\n}\n#cm2-app .cm2-ratio-pill.good { background: #ecfdf5; color: #065f46; }\n#cm2-app .cm2-ratio-pill.mid { background: #fef9c3; color: #854d0e; }\n#cm2-app .cm2-ratio-pill.bad { background: #fef2f2; color: #991b1b; }\n\u003c/style\u003e\n\u003cdiv class=\"cm2-mode-tabs\"\u003e\n  \u003cbutton class=\"cm2-tab active\" id=\"cm2-tab-minify\"\u003e圧縮（Minify）\u003c/button\u003e\n  \u003cbutton class=\"cm2-tab\" id=\"cm2-tab-beautify\"\u003e整形（Beautify）\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"cm2-beautify-opts\" class=\"cm2-options\" style=\"display:none\"\u003e\n  \u003cdiv class=\"cm2-option-group\"\u003e\n    \u003clabel for=\"cm2-indent\"\u003eインデント:\u003c/label\u003e\n    \u003cselect id=\"cm2-indent\"\u003e\n      \u003coption value=\"2\"\u003eスペース2つ\u003c/option\u003e\n      \u003coption value=\"4\"\u003eスペース4つ\u003c/option\u003e\n      \u003coption value=\"tab\"\u003eタブ\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"cm2-btn-row\"\u003e\n  \u003cbutton class=\"cm2-btn-go\" id=\"cm2-go-btn\"\u003eCSSを圧縮する\u003c/button\u003e\n  \u003cbutton class=\"cm2-btn-clear\" id=\"cm2-clear-btn\"\u003eクリア\u003c/button\u003e\n  \u003cbutton class=\"cm2-btn-upload\" id=\"cm2-upload-btn\"\u003eファイルを開く\u003c/button\u003e\n  \u003cinput type=\"file\" id=\"cm2-file-input\" accept=\".css,text/css\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"cm2-panels\"\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"cm2-panel-label\"\u003e入力 CSS\u003c/div\u003e\n    \u003ctextarea id=\"cm2-input\" placeholder=\"CSSをここに貼り付けてください...\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"cm2-panel-label\"\u003e出力\u003c/div\u003e\n    \u003ctextarea id=\"cm2-output\" readonly placeholder=\"処理結果がここに表示されます...\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"cm2-stats\" class=\"cm2-stats\" style=\"display:none\"\u003e\u003c/div\u003e\n\u003cdiv class=\"cm2-btn-row\" style=\"margin-top:8px\"\u003e\n  \u003cbutton class=\"cm2-btn-copy\" id=\"cm2-copy-btn\"\u003e出力をコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"CSS圧縮ツール"},{"content":" 成績計算ツール 課題ごとの配点比率（ウェイト）を考慮した加重平均・成績グレード・GPAをリアルタイムで計算。期末試験で必要なスコアも一発表示。\n📋 課題・試験の成績入力 課題名 得点 満点 配点比率(%) 成績 得点率 + 課題を追加 リセット 合計: 0% 📊 現在の成績サマリー 加重平均 — 100点満点換算 成績グレード — GPA（4.0スケール） — 4.0スケール換算 合計得点 — 得点 / 満点 🎯 期末試験で必要なスコアを逆算 期末試験の配点比率（%） % の配点 目標の最終成績 A+ (97%) A (93%) A- (90%) B+ (87%) B (83%) B- (80%) C+ (77%) C (73%) C- (70%) D+ (67%) D (60%) 学費・教育費の管理に\n奨学金・授業料・教材費などの教育費を自動で帳簿管理。確定申告の教育費控除もスムーズに。\n学費管理を効率化 → freee会計で教育費を自動管理 ","permalink":"https://productivity-works.com/ja/tools/grade-calculator/","summary":"\u003cdiv id=\"gc-app\"\u003e\n\u003cstyle\u003e\n#gc-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  padding: 16px;\n  color: #1a1a2e;\n  box-sizing: border-box;\n}\n#gc-app *, #gc-app *::before, #gc-app *::after { box-sizing: inherit; }\n#gc-app h2 {\n  font-size: 1.4rem;\n  font-weight: 700;\n  margin: 0 0 4px;\n  color: #1a1a2e;\n}\n#gc-app .gc-subtitle {\n  font-size: 0.9rem;\n  color: #666;\n  margin: 0 0 20px;\n}\n#gc-app .gc-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n  margin-bottom: 16px;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.05);\n}\n#gc-app .gc-card-title {\n  font-size: 1rem;\n  font-weight: 600;\n  margin: 0 0 14px;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n#gc-app .gc-card-title span.icon { font-size: 1.1rem; }\n#gc-app table.gc-table {\n  width: 100%;\n  border-collapse: collapse;\n}\n#gc-app table.gc-table th {\n  text-align: left;\n  font-size: 0.72rem;\n  font-weight: 600;\n  color: #888;\n  padding: 0 6px 8px;\n  border-bottom: 2px solid #f0f0f0;\n}\n#gc-app table.gc-table td {\n  padding: 6px 6px;\n  vertical-align: middle;\n}\n#gc-app table.gc-table td input {\n  width: 100%;\n  padding: 7px 9px;\n  border: 1px solid #dde1e7;\n  border-radius: 7px;\n  font-size: 0.875rem;\n  color: #1a1a2e;\n  background: #fafbfc;\n  transition: border-color 0.15s;\n  outline: none;\n}\n#gc-app table.gc-table td input:focus {\n  border-color: #6366f1;\n  background: #fff;\n}\n#gc-app table.gc-table td.gc-pct {\n  font-size: 0.85rem;\n  color: #6366f1;\n  font-weight: 600;\n  text-align: right;\n  white-space: nowrap;\n}\n#gc-app table.gc-table td.gc-grade-cell {\n  text-align: center;\n  font-size: 0.9rem;\n  font-weight: 700;\n}\n#gc-app .gc-btn-remove {\n  background: none;\n  border: none;\n  cursor: pointer;\n  color: #cbd5e1;\n  font-size: 1.1rem;\n  padding: 4px 6px;\n  border-radius: 5px;\n  line-height: 1;\n  transition: color 0.15s, background 0.15s;\n}\n#gc-app .gc-btn-remove:hover { color: #ef4444; background: #fef2f2; }\n#gc-app .gc-add-row {\n  margin-top: 12px;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n#gc-app .gc-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 8px 16px;\n  border-radius: 8px;\n  font-size: 0.875rem;\n  font-weight: 600;\n  cursor: pointer;\n  border: none;\n  transition: background 0.15s, transform 0.1s;\n}\n#gc-app .gc-btn:active { transform: scale(0.97); }\n#gc-app .gc-btn-primary { background: #6366f1; color: #fff; }\n#gc-app .gc-btn-primary:hover { background: #4f46e5; }\n#gc-app .gc-btn-secondary {\n  background: #f1f5f9;\n  color: #475569;\n  border: 1px solid #e2e8f0;\n}\n#gc-app .gc-btn-secondary:hover { background: #e2e8f0; }\n#gc-app .gc-weight-bar-wrap {\n  margin-top: 10px;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n#gc-app .gc-weight-bar-bg {\n  flex: 1;\n  height: 8px;\n  background: #f0f0f0;\n  border-radius: 99px;\n  overflow: hidden;\n}\n#gc-app .gc-weight-bar-fill {\n  height: 100%;\n  border-radius: 99px;\n  transition: width 0.3s, background 0.3s;\n}\n#gc-app .gc-weight-label {\n  font-size: 0.82rem;\n  font-weight: 600;\n  min-width: 90px;\n  text-align: right;\n}\n#gc-app .gc-summary-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n  gap: 12px;\n}\n#gc-app .gc-stat {\n  background: #f8faff;\n  border: 1px solid #e8edf5;\n  border-radius: 10px;\n  padding: 14px 16px;\n  text-align: center;\n}\n#gc-app .gc-stat-label {\n  font-size: 0.7rem;\n  font-weight: 600;\n  color: #888;\n  margin-bottom: 6px;\n}\n#gc-app .gc-stat-value {\n  font-size: 1.7rem;\n  font-weight: 800;\n  line-height: 1.1;\n}\n#gc-app .gc-stat-sub {\n  font-size: 0.75rem;\n  color: #888;\n  margin-top: 3px;\n}\n#gc-app .gc-grade-badge {\n  display: inline-block;\n  padding: 2px 9px;\n  border-radius: 99px;\n  font-size: 0.8rem;\n  font-weight: 700;\n}\n#gc-app .grade-Aplus  { color: #16a34a; background: #dcfce7; }\n#gc-app .grade-A      { color: #16a34a; background: #dcfce7; }\n#gc-app .grade-Aminus { color: #16a34a; background: #dcfce7; }\n#gc-app .grade-Bplus  { color: #2563eb; background: #dbeafe; }\n#gc-app .grade-B      { color: #2563eb; background: #dbeafe; }\n#gc-app .grade-Bminus { color: #2563eb; background: #dbeafe; }\n#gc-app .grade-Cplus  { color: #d97706; background: #fef3c7; }\n#gc-app .grade-C      { color: #d97706; background: #fef3c7; }\n#gc-app .grade-Cminus { color: #d97706; background: #fef3c7; }\n#gc-app .grade-Dplus  { color: #ea580c; background: #ffedd5; }\n#gc-app .grade-D      { color: #ea580c; background: #ffedd5; }\n#gc-app .grade-F      { color: #dc2626; background: #fee2e2; }\n#gc-app .grade-NA     { color: #94a3b8; background: #f1f5f9; }\n#gc-app .gc-final-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n  gap: 12px;\n}\n#gc-app .gc-final-input-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-top: 8px;\n  flex-wrap: wrap;\n}\n#gc-app .gc-final-input-row input,\n#gc-app .gc-final-input-row select {\n  padding: 7px 10px;\n  border: 1px solid #dde1e7;\n  border-radius: 7px;\n  font-size: 0.9rem;\n  width: 90px;\n  background: #fafbfc;\n  outline: none;\n  color: #1a1a2e;\n}\n#gc-app .gc-final-input-row input:focus,\n#gc-app .gc-final-input-row select:focus {\n  border-color: #6366f1;\n  background: #fff;\n}\n#gc-app .gc-final-result {\n  margin-top: 14px;\n  padding: 14px 16px;\n  background: #f0f4ff;\n  border-radius: 10px;\n  border-left: 4px solid #6366f1;\n  font-size: 0.95rem;\n  color: #1a1a2e;\n  line-height: 1.6;\n}\n#gc-app .gc-final-result strong { color: #4f46e5; }\n#gc-app .gc-alert {\n  padding: 10px 14px;\n  border-radius: 8px;\n  font-size: 0.85rem;\n  margin-top: 10px;\n}\n#gc-app .gc-alert-warn { background: #fef3c7; color: #92400e; border: 1px solid #fde68a; }\n#gc-app .gc-alert-ok   { background: #dcfce7; color: #166534; border: 1px solid #bbf7d0; }\n#gc-app .gc-alert-err  { background: #fee2e2; color: #991b1b; border: 1px solid #fecaca; }\n#gc-app .gc-gpa-scale {\n  display: flex;\n  gap: 4px;\n  flex-wrap: wrap;\n  margin-top: 10px;\n}\n#gc-app .gc-gpa-chip {\n  font-size: 0.72rem;\n  padding: 3px 8px;\n  border-radius: 99px;\n  background: #f1f5f9;\n  color: #475569;\n  border: 1px solid #e2e8f0;\n}\n#gc-app .gc-gpa-chip.active {\n  background: #6366f1;\n  color: #fff;\n  border-color: #6366f1;\n}\n#gc-app .gc-cta {\n  margin-top: 6px;\n  padding: 16px 18px;\n  background: linear-gradient(135deg, #f0f4ff 0%, #faf5ff 100%);\n  border-radius: 10px;\n  border: 1px solid #ddd6fe;\n  font-size: 0.9rem;\n  line-height: 1.6;\n}\n#gc-app .gc-cta strong { color: #4f46e5; }\n#gc-app .gc-cta a { color: #6366f1; font-weight: 600; }\n#gc-app .gc-cta a:hover { text-decoration: underline; }\n#gc-app .gc-empty-row td {\n  text-align: center;\n  color: #aaa;\n  font-size: 0.85rem;\n  padding: 20px;\n}\n@media (max-width: 600px) {\n  #gc-app table.gc-table th:nth-child(5),\n  #gc-app table.gc-table td:nth-child(5) { display: none; }\n}\n\u003c/style\u003e\n\u003ch2\u003e成績計算ツール\u003c/h2\u003e\n\u003cp class=\"gc-subtitle\"\u003e課題ごとの配点比率（ウェイト）を考慮した加重平均・成績グレード・GPAをリアルタイムで計算。期末試験で必要なスコアも一発表示。\u003c/p\u003e","title":"成績計算ツール - 加重平均＆最終成績計算"},{"content":"HEX・RGB・HSL・HSV/HSB・CMYKおよびCSS名前付きカラー間を即座に相互変換。カラーピッカーで選ぶか、任意のフォーマットで入力するだけで、すべての形式がリアルタイムに更新されます。補色の表示、ライター・ダーカーシェードの生成、各フォーマットのワンクリックコピーにも対応しています。\nカラー変換ツール カラーピッカー 任意のフォーマットで入力（HEX・RGB・HSL・HSV・CMYK・CSS名） 選択中のカラー 補色 HEXコピー RGBコピー HSLコピー HSVコピー CMYKコピー CSS名—コピー 明るい・暗いシェード （クリックで適用） 使い方 カラーピッカーをクリックして色を選択するか、テキストボックスに任意のフォーマットで入力します。 対応入力フォーマット: #rrggbb、#rgb、rgb(r, g, b)、hsl(h, s%, l%)、hsv(h, s%, v%)、cmyk(c%, m%, y%, k%)、または CSS名（例: coral、steelblue） すべての出力フォーマットがリアルタイムに更新されます。 明るい・暗いシェードのブロックをクリックすると、そのシェードに切り替わります。 各フォーマットの右側にある コピー ボタンを押すと、クリップボードにコピーされます。 フォーマット一覧 フォーマット 例 主な用途 HEX #5B6AF0 Web開発・デザインツール全般 RGB rgb(91, 106, 240) CSS・Canvas・画像処理 HSL hsl(235, 82%, 65%) CSSテーマ・直感的な色調整 HSV/HSB hsv(235, 62%, 94%) Photoshop・Illustratorのカラーピッカー CMYK cmyk(62%, 56%, 0%, 6%) 印刷デザイン・入稿データ作成 CSS名 cornflowerblue CSSの省略記法 関連ツール カラーピッカー — スポイト機能とパレットビルダー カラーパレットジェネレーター — 調和の取れたカラーパレットを自動生成 カラーコントラストチェッカー — WCAGアクセシビリティのコントラスト比を確認 freee会計との連携でデザイン業務をもっとスムーズに デザイン制作の請求書・経費管理でお困りではありませんか？ freee会計 を使えば、クライアントごとの請求書発行・経費の自動仕訳・確定申告まで一括管理できます。フリーランスのデザイナーや小規模事務所にも最適です。\nfreee会計を無料で試してみる → ","permalink":"https://productivity-works.com/ja/tools/color-converter/","summary":"\u003cp\u003e\u003cstrong\u003eHEX・RGB・HSL・HSV/HSB・CMYK\u003c/strong\u003eおよびCSS名前付きカラー間を即座に相互変換。カラーピッカーで選ぶか、任意のフォーマットで入力するだけで、すべての形式がリアルタイムに更新されます。補色の表示、ライター・ダーカーシェードの生成、各フォーマットのワンクリックコピーにも対応しています。\u003c/p\u003e\n\u003cdiv id=\"colconv-app\"\u003e\n\u003cstyle\u003e\n#colconv-app *,\n#colconv-app *::before,\n#colconv-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#colconv-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic UI\", \"Meiryo\", sans-serif;\n  font-size: 15px;\n  color: #1a1a2e;\n  background: #f7f8fc;\n  border-radius: 12px;\n  padding: 24px;\n  max-width: 720px;\n  margin: 0 auto;\n}\n#colconv-app h2 {\n  font-size: 1.3rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #12122a;\n}\n#colconv-app h3 {\n  font-size: 1rem;\n  font-weight: 600;\n  margin-bottom: 10px;\n  color: #12122a;\n}\n\u003cp\u003e/* 入力エリア */\n#colconv-input-row {\ndisplay: flex;\nflex-wrap: wrap;\ngap: 12px;\nalign-items: center;\nmargin-bottom: 20px;\nbackground: #fff;\nborder-radius: 10px;\npadding: 16px;\nbox-shadow: 0 1px 4px rgba(0,0,0,0.07);\n}\n#colconv-picker-wrap {\ndisplay: flex;\nflex-direction: column;\nalign-items: center;\ngap: 6px;\n}\n#colconv-picker-wrap label {\nfont-size: 0.75rem;\ncolor: #666;\ntext-transform: uppercase;\nletter-spacing: 0.05em;\n}\n#colconv-picker {\nwidth: 56px;\nheight: 56px;\nborder: none;\nborder-radius: 8px;\ncursor: pointer;\npadding: 2px;\nbackground: none;\n}\n#colconv-picker::-webkit-color-swatch-wrapper { padding: 0; border-radius: 6px; }\n#colconv-picker::-webkit-color-swatch { border: none; border-radius: 6px; }\n#colconv-text-input-wrap {\nflex: 1;\nmin-width: 200px;\ndisplay: flex;\nflex-direction: column;\ngap: 4px;\n}\n#colconv-text-input-wrap label {\nfont-size: 0.75rem;\ncolor: #666;\n}\n#colconv-raw-input {\nwidth: 100%;\npadding: 10px 14px;\nborder: 1.5px solid #d0d4e8;\nborder-radius: 8px;\nfont-size: 1rem;\noutline: none;\ntransition: border-color 0.2s;\nbackground: #fafbff;\n}\n#colconv-raw-input:focus { border-color: #5b6af0; }\n#colconv-error {\nfont-size: 0.8rem;\ncolor: #e53e3e;\nmin-height: 18px;\n}\u003c/p\u003e","title":"カラー変換ツール — HEX RGB HSL CMYK"},{"content":" 用紙サイズ早見表 — ISO A判・ISO B判・JIS B判・US判のサイズを一覧表示。mm・cm・インチに切り替えてすぐ確認。行をクリックするとビジュアル比較と詳細が表示されます。 JIS B判について：JIS（日本産業規格）のB判はISO B判と異なります。日本国内ではJIS B判が主に流通しており、B5ノートやB4コピー用紙はJIS規格です。ISO B判は国際規格です。 単位： mm cm インチ シリーズ： すべて ISO A判 ISO B判 JIS B判 US判 行をクリックするとビジュアル比較でそのサイズをハイライト表示します サイズ 規格 横幅 縦幅 面積 縦横比 主な用途 書類管理を効率化 \u0026rarr; freee会計で帳票を自動作成 用紙サイズの基礎知識 ISO A判：世界で最も広く使われる規格。A0の面積はちょうど1m²で、縦横比は1:√2（≈1:1.414）。A1はA0の半分、A2はA1の半分、と続く。A4が世界標準の書類サイズ。\nJIS B判（日本のB判）：日本独自の規格。ISO B判とは寸法が異なる。B0=1030×1456mm。B5ノート・B4コピー用紙など日本国内で広く流通。面積はA判の1.5倍に設定されている。\nISO B判：国際規格のB判。B0=1000×1414mm。パスポート（B7）やポスターなどに使用。日本国内ではJIS B判の方が一般的。\nUS判（レター等）：レター（8.5×11インチ）は米国・カナダの標準書類サイズ。リーガルは法律文書用に縦が長い。タブロイドは新聞・大判印刷に使用。\n","permalink":"https://productivity-works.com/ja/tools/paper-size-guide/","summary":"\u003cdiv id=\"ps-app\"\u003e\n\u003cstyle\u003e\n#ps-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Yu Gothic\", Meiryo, sans-serif;\n  max-width: 960px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#ps-app h2 {\n  font-size: 1.4rem;\n  font-weight: 700;\n  margin: 1.5rem 0 0.75rem;\n  color: #16213e;\n  border-left: 4px solid #0f3460;\n  padding-left: 0.6rem;\n}\n#ps-app .ps-intro {\n  background: #f0f4ff;\n  border-radius: 8px;\n  padding: 1rem 1.2rem;\n  margin-bottom: 1.2rem;\n  font-size: 0.95rem;\n  color: #333;\n  line-height: 1.7;\n}\n#ps-app .ps-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  align-items: center;\n  margin-bottom: 1rem;\n}\n#ps-app .ps-controls label {\n  font-size: 0.88rem;\n  font-weight: 600;\n  color: #555;\n  margin-right: 0.25rem;\n}\n#ps-app .ps-unit-btn {\n  padding: 0.35rem 0.9rem;\n  border: 2px solid #0f3460;\n  background: #fff;\n  color: #0f3460;\n  border-radius: 20px;\n  cursor: pointer;\n  font-size: 0.85rem;\n  font-weight: 600;\n  transition: all 0.18s;\n}\n#ps-app .ps-unit-btn.active {\n  background: #0f3460;\n  color: #fff;\n}\n#ps-app .ps-unit-btn:hover:not(.active) {\n  background: #e8edf7;\n}\n#ps-app .ps-filter-btn {\n  padding: 0.3rem 0.8rem;\n  border: 1px solid #bbb;\n  background: #fff;\n  color: #444;\n  border-radius: 20px;\n  cursor: pointer;\n  font-size: 0.82rem;\n  transition: all 0.18s;\n  margin-left: 0.5rem;\n}\n#ps-app .ps-filter-btn.active {\n  background: #0f3460;\n  color: #fff;\n  border-color: #0f3460;\n}\n#ps-app .ps-table-wrap {\n  overflow-x: auto;\n  border-radius: 8px;\n  box-shadow: 0 1px 6px rgba(0,0,0,0.08);\n  margin-bottom: 1.5rem;\n}\n#ps-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n  background: #fff;\n}\n#ps-app thead th {\n  background: #0f3460;\n  color: #fff;\n  padding: 0.6rem 0.75rem;\n  text-align: left;\n  font-weight: 600;\n  white-space: nowrap;\n}\n#ps-app tbody tr {\n  border-bottom: 1px solid #e8ecf0;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#ps-app tbody tr:hover {\n  background: #f0f4ff;\n}\n#ps-app tbody tr.highlighted {\n  background: #dce8ff;\n  font-weight: 600;\n}\n#ps-app tbody td {\n  padding: 0.5rem 0.75rem;\n  white-space: nowrap;\n}\n#ps-app tbody td:first-child {\n  font-weight: 700;\n  color: #0f3460;\n}\n#ps-app .ps-badge {\n  display: inline-block;\n  font-size: 0.72rem;\n  padding: 0.1rem 0.45rem;\n  border-radius: 10px;\n  font-weight: 600;\n  vertical-align: middle;\n  margin-left: 0.3rem;\n}\n#ps-app .badge-iso  { background: #d4edda; color: #155724; }\n#ps-app .badge-jis  { background: #cce5ff; color: #004085; }\n#ps-app .badge-us   { background: #fff3cd; color: #856404; }\n#ps-app .ps-canvas-wrap {\n  background: #f8f9fc;\n  border: 1px solid #dde3ee;\n  border-radius: 8px;\n  padding: 1rem;\n  margin-bottom: 1.5rem;\n  text-align: center;\n}\n#ps-app .ps-canvas-wrap canvas {\n  max-width: 100%;\n  border-radius: 4px;\n}\n#ps-app .ps-canvas-label {\n  font-size: 0.82rem;\n  color: #666;\n  margin-top: 0.5rem;\n}\n#ps-app .ps-detail-panel {\n  background: #fff;\n  border: 1px solid #c8d6f0;\n  border-radius: 8px;\n  padding: 1rem 1.2rem;\n  margin-bottom: 1.5rem;\n  display: none;\n}\n#ps-app .ps-detail-panel.visible {\n  display: block;\n}\n#ps-app .ps-detail-panel h3 {\n  margin: 0 0 0.6rem;\n  font-size: 1.15rem;\n  color: #0f3460;\n}\n#ps-app .ps-detail-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n  gap: 0.6rem;\n}\n#ps-app .ps-detail-item {\n  background: #f0f4ff;\n  border-radius: 6px;\n  padding: 0.5rem 0.75rem;\n}\n#ps-app .ps-detail-item .di-label {\n  font-size: 0.75rem;\n  color: #666;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#ps-app .ps-detail-item .di-value {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #0f3460;\n}\n#ps-app .ps-usage {\n  font-size: 0.88rem;\n  color: #444;\n  margin-top: 0.6rem;\n  background: #fffbe6;\n  border-left: 3px solid #f0b429;\n  padding: 0.4rem 0.7rem;\n  border-radius: 0 4px 4px 0;\n}\n#ps-app .ps-cta {\n  background: linear-gradient(135deg, #e8f4fd 0%, #f0f8e8 100%);\n  border: 1px solid #b8d8f0;\n  border-radius: 8px;\n  padding: 1rem 1.2rem;\n  margin: 1.5rem 0;\n  font-size: 0.92rem;\n}\n#ps-app .ps-cta a {\n  color: #0f3460;\n  font-weight: 700;\n  text-decoration: underline;\n}\n#ps-app .ps-section-sep {\n  border: none;\n  border-top: 2px solid #e8ecf0;\n  margin: 1.5rem 0;\n}\n#ps-app .ps-note {\n  font-size: 0.82rem;\n  color: #777;\n  background: #f8f8f8;\n  border-radius: 6px;\n  padding: 0.6rem 0.9rem;\n  margin-bottom: 1rem;\n  line-height: 1.6;\n}\n\u003c/style\u003e\n\u003cdiv class=\"ps-intro\"\u003e\n  \u003cstrong\u003e用紙サイズ早見表\u003c/strong\u003e — ISO A判・ISO B判・JIS B判・US判のサイズを一覧表示。mm・cm・インチに切り替えてすぐ確認。行をクリックするとビジュアル比較と詳細が表示されます。\n\u003c/div\u003e\n\u003cdiv class=\"ps-note\"\u003e\n  \u003cstrong\u003eJIS B判について：\u003c/strong\u003eJIS（日本産業規格）のB判はISO B判と異なります。日本国内ではJIS B判が主に流通しており、B5ノートやB4コピー用紙はJIS規格です。ISO B判は国際規格です。\n\u003c/div\u003e\n\u003cdiv class=\"ps-controls\"\u003e\n  \u003clabel\u003e単位：\u003c/label\u003e\n  \u003cbutton class=\"ps-unit-btn active\" onclick=\"psSetUnit('mm')\"\u003emm\u003c/button\u003e\n  \u003cbutton class=\"ps-unit-btn\" onclick=\"psSetUnit('cm')\"\u003ecm\u003c/button\u003e\n  \u003cbutton class=\"ps-unit-btn\" onclick=\"psSetUnit('in')\"\u003eインチ\u003c/button\u003e\n  \u003cspan style=\"display:inline-block;width:1rem;\"\u003e\u003c/span\u003e\n  \u003clabel\u003eシリーズ：\u003c/label\u003e\n  \u003cbutton class=\"ps-filter-btn active\" onclick=\"psSetFilter('all')\"\u003eすべて\u003c/button\u003e\n  \u003cbutton class=\"ps-filter-btn\" onclick=\"psSetFilter('A')\"\u003eISO A判\u003c/button\u003e\n  \u003cbutton class=\"ps-filter-btn\" onclick=\"psSetFilter('ISOB')\"\u003eISO B判\u003c/button\u003e\n  \u003cbutton class=\"ps-filter-btn\" onclick=\"psSetFilter('JISB')\"\u003eJIS B判\u003c/button\u003e\n  \u003cbutton class=\"ps-filter-btn\" onclick=\"psSetFilter('US')\"\u003eUS判\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"ps-detail\" class=\"ps-detail-panel\"\u003e\n  \u003ch3 id=\"ps-detail-name\"\u003e\u003c/h3\u003e\n  \u003cdiv class=\"ps-detail-grid\" id=\"ps-detail-grid\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"ps-usage\" id=\"ps-detail-usage\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ps-canvas-wrap\"\u003e\n  \u003ccanvas id=\"ps-canvas\" width=\"780\" height=\"240\"\u003e\u003c/canvas\u003e\n  \u003cdiv class=\"ps-canvas-label\" id=\"ps-canvas-label\"\u003e行をクリックするとビジュアル比較でそのサイズをハイライト表示します\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ps-table-wrap\"\u003e\n  \u003ctable id=\"ps-table\"\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n        \u003cth\u003eサイズ\u003c/th\u003e\n        \u003cth\u003e規格\u003c/th\u003e\n        \u003cth\u003e横幅\u003c/th\u003e\n        \u003cth\u003e縦幅\u003c/th\u003e\n        \u003cth\u003e面積\u003c/th\u003e\n        \u003cth\u003e縦横比\u003c/th\u003e\n        \u003cth\u003e主な用途\u003c/th\u003e\n      \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody id=\"ps-tbody\"\u003e\u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\u003chr class=\"ps-section-sep\"\u003e\n\u003cdiv class=\"ps-cta\"\u003e\n  書類管理を効率化 \u0026rarr; \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\"\u003efreee会計で帳票を自動作成\u003c/a\u003e\n\u003c/div\u003e\n\u003ch2\u003e用紙サイズの基礎知識\u003c/h2\u003e\n\u003cdiv class=\"ps-intro\" style=\"background:#fff;border:1px solid #dde3ee;\"\u003e\n  \u003cp\u003e\u003cstrong\u003eISO A判\u003c/strong\u003e：世界で最も広く使われる規格。A0の面積はちょうど1m²で、縦横比は1:√2（≈1:1.414）。A1はA0の半分、A2はA1の半分、と続く。A4が世界標準の書類サイズ。\u003c/p\u003e","title":"用紙サイズガイド - A判・B判・レターサイズ一覧"},{"content":" ✂️ 画像トリミングツール 画像をアップロードしてドラッグで切り抜き範囲を指定。アスペクト比固定・回転・反転にも対応。ブラウザ内で完結し、サーバーへの送信は一切ありません。\n🖼️ 画像をここにドロップ、またはクリックして選択 JPG・PNG・WebP・GIF・BMP対応（最大20MB） 比率 自由 1:1 4:3 16:9 3:2 変換 ↻ 90°回転 ↔ 左右反転 ↕ 上下反転 ズーム 100% 🔄 画像を変更 ファイル: — サイズ: — 解像度: — 画像上をドラッグしてトリミング範囲を選択 \u0026mdash; 選択範囲: なし トリミングプレビュー 上で範囲を選択するとプレビューが表示されます \u0026lt;div class=\u0026quot;ic-dl-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ic-dl-title\u0026quot;\u0026gt;ダウンロード\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div style=\u0026quot;font-size:12px;font-weight:600;color:#6b7280;margin-bottom:6px;\u0026quot;\u0026gt;フォーマット\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ic-fmt-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;ic-fmt-btn active\u0026quot; data-fmt=\u0026quot;image/png\u0026quot;\u0026gt;PNG\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;ic-fmt-btn\u0026quot; data-fmt=\u0026quot;image/jpeg\u0026quot;\u0026gt;JPEG\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;ic-quality-row\u0026quot; id=\u0026quot;ic-quality-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;ic-quality-label\u0026quot;\u0026gt; \u0026lt;span\u0026gt;画質（JPEG）\u0026lt;/span\u0026gt; \u0026lt;span id=\u0026quot;ic-quality-val\u0026quot;\u0026gt;90%\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;range\u0026quot; class=\u0026quot;ic-quality-slider\u0026quot; id=\u0026quot;ic-quality-slider\u0026quot; min=\u0026quot;10\u0026quot; max=\u0026quot;100\u0026quot; value=\u0026quot;90\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;ic-dl-btn\u0026quot; id=\u0026quot;ic-dl-btn\u0026quot; disabled\u0026gt;トリミング画像をダウンロード\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; 💡 使い方のコツ: キャンバス上をドラッグして切り抜き範囲を描きます。四隅・辺中央のハンドルをドラッグしてサイズを調整、範囲内をドラッグして移動できます。比率ボタンで縦横比を固定し、回転・反転でトリミング前に画像を整えましょう。 💼 画像編集の費用もfreeeで経費管理 freee会計なら、デザインツール費用・サブスク・外注費もクラウドで一元管理。確定申告もかんたん。\nfreeeを無料で試す → 使い方 STEP 1 — 画像をアップロード: ドラッグ＆ドロップするか、「ファイルを選択」から画像を開きます。JPG・PNG・WebP・GIF・BMP（最大20MB）に対応。\nSTEP 2 — トリミング範囲を指定: キャンバス上をドラッグして切り抜きたい範囲を選択します。紫色の破線と三分割グリッドが表示されます。\nSTEP 3 — 範囲を調整: 四隅・辺中央の白いハンドルをドラッグしてサイズを変更できます。選択範囲の内側をドラッグすると位置を移動できます。\nSTEP 4 — アスペクト比を固定（任意）: 比率ボタン（1:1、4:3、16:9、3:2）をクリックすると、ドラッグ中に縦横比が自動で固定されます。\nSTEP 5 — 回転・反転（任意）: 「90°回転」「左右反転」「上下反転」でトリミング前に画像を整えられます。\nSTEP 6 — プレビューとダウンロード: 右側のプレビューでリアルタイム確認。PNG/JPEGを選びダウンロードします。\nアスペクト比の使い分け 比率 用途の目安 自由 制約なし、任意のサイズに切り抜き 1:1 Instagram正方形投稿、プロフィール画像 4:3 一般的な写真、プレゼンスライド 16:9 YouTubeサムネイル、ワイドスクリーン 3:2 カメラの標準比率、プリント ブラウザだけで完結する理由 このツールはHTML5 Canvas APIを使ってブラウザ内で完全動作します。画像はサーバーに送信されず、アカウント登録も不要。インターネット接続がなくても（ページ読み込み後は）動作します。\n関連ツール 画像を指定サイズにリサイズ → 画像リサイザー フィルター・エフェクトで写真加工 → フォトフィルター SNS向けに画像サイズを最適化 → SNS画像リサイザー 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/image-cropper/","summary":"\u003cdiv id=\"ic-app\"\u003e\n\u003cstyle\u003e\n#ic-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Yu Gothic UI', Roboto, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 0 48px 0;\n  color: #1a202c;\n}\n\n#ic-app * {\n  box-sizing: border-box;\n}\n\n/* Hero */\n#ic-app .ic-hero {\n  background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 50%, #4c1d95 100%);\n  border-radius: 16px;\n  padding: 32px 28px;\n  margin-bottom: 24px;\n  color: #fff;\n}\n\n#ic-app .ic-hero h2 {\n  margin: 0 0 6px 0;\n  font-size: 22px;\n  font-weight: 800;\n}\n\n#ic-app .ic-hero p {\n  margin: 0;\n  font-size: 14px;\n  opacity: 0.88;\n  line-height: 1.7;\n}\n\n/* Drop Zone */\n#ic-app .ic-dropzone {\n  border: 3px dashed #7c3aed;\n  border-radius: 14px;\n  padding: 44px 24px;\n  text-align: center;\n  background: #f5f3ff;\n  cursor: pointer;\n  transition: background 0.2s, border-color 0.2s;\n  margin-bottom: 20px;\n  position: relative;\n}\n\n#ic-app .ic-dropzone.drag-over {\n  background: #ede9fe;\n  border-color: #6d28d9;\n}\n\n#ic-app .ic-dropzone-icon {\n  font-size: 48px;\n  line-height: 1;\n  margin-bottom: 12px;\n  display: block;\n}\n\n#ic-app .ic-dropzone-title {\n  font-size: 17px;\n  font-weight: 700;\n  color: #4c1d95;\n  margin-bottom: 6px;\n}\n\n#ic-app .ic-dropzone-sub {\n  font-size: 13px;\n  color: #6b7280;\n}\n\n#ic-app .ic-dropzone input[type=\"file\"] {\n  position: absolute;\n  inset: 0;\n  opacity: 0;\n  cursor: pointer;\n  width: 100%;\n  height: 100%;\n}\n\n/* Main layout */\n#ic-app .ic-main {\n  display: none;\n  gap: 20px;\n  flex-direction: column;\n}\n\n#ic-app .ic-main.visible {\n  display: flex;\n}\n\n/* Toolbar */\n#ic-app .ic-toolbar {\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 16px 18px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  align-items: center;\n}\n\n#ic-app .ic-toolbar-group {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n\n#ic-app .ic-toolbar-label {\n  font-size: 12px;\n  font-weight: 700;\n  color: #6b7280;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  white-space: nowrap;\n}\n\n#ic-app .ic-toolbar-sep {\n  width: 1px;\n  height: 28px;\n  background: #e5e7eb;\n}\n\n#ic-app .ic-ratio-btn {\n  padding: 5px 12px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 7px;\n  background: #fff;\n  font-size: 13px;\n  font-weight: 600;\n  color: #374151;\n  cursor: pointer;\n  transition: all 0.15s;\n  white-space: nowrap;\n}\n\n#ic-app .ic-ratio-btn:hover {\n  border-color: #7c3aed;\n  color: #7c3aed;\n}\n\n#ic-app .ic-ratio-btn.active {\n  background: #7c3aed;\n  border-color: #7c3aed;\n  color: #fff;\n}\n\n#ic-app .ic-tool-btn {\n  padding: 6px 14px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 7px;\n  background: #fff;\n  font-size: 13px;\n  font-weight: 600;\n  color: #374151;\n  cursor: pointer;\n  transition: all 0.15s;\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  white-space: nowrap;\n}\n\n#ic-app .ic-tool-btn:hover {\n  border-color: #7c3aed;\n  color: #7c3aed;\n}\n\n/* Zoom */\n#ic-app .ic-zoom-wrap {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n#ic-app .ic-zoom-slider {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 100px;\n  height: 4px;\n  border-radius: 2px;\n  background: #e5e7eb;\n  outline: none;\n  cursor: pointer;\n}\n\n#ic-app .ic-zoom-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #7c3aed;\n  cursor: pointer;\n}\n\n#ic-app .ic-zoom-val {\n  font-size: 12px;\n  font-weight: 700;\n  color: #374151;\n  min-width: 36px;\n  text-align: right;\n}\n\n/* Canvas wrapper */\n#ic-app .ic-canvas-wrap {\n  background: #111827;\n  border-radius: 12px;\n  overflow: hidden;\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 300px;\n  max-height: 560px;\n}\n\n#ic-app #ic-canvas {\n  display: block;\n  cursor: crosshair;\n  max-width: 100%;\n  max-height: 560px;\n  user-select: none;\n  -webkit-user-select: none;\n}\n\n/* File info */\n#ic-app .ic-info-bar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  font-size: 12px;\n  color: #6b7280;\n  padding: 0 2px;\n}\n\n#ic-app .ic-info-item {\n  background: #f3f4f6;\n  border-radius: 6px;\n  padding: 4px 10px;\n  font-weight: 600;\n}\n\n#ic-app .ic-info-item span {\n  color: #374151;\n}\n\n/* Preview + Download */\n#ic-app .ic-bottom {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n}\n\n@media (max-width: 600px) {\n  #ic-app .ic-bottom {\n    grid-template-columns: 1fr;\n  }\n}\n\n#ic-app .ic-preview-box {\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 16px;\n}\n\n#ic-app .ic-preview-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #374151;\n  margin-bottom: 10px;\n}\n\n#ic-app .ic-preview-canvas-wrap {\n  background: repeating-conic-gradient(#e5e7eb 0% 25%, #fff 0% 50%) 0 0 / 16px 16px;\n  border-radius: 8px;\n  min-height: 100px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  overflow: hidden;\n}\n\n#ic-app #ic-preview-canvas {\n  display: block;\n  max-width: 100%;\n  max-height: 220px;\n  border-radius: 4px;\n}\n\n#ic-app .ic-preview-dims {\n  font-size: 11px;\n  color: #9ca3af;\n  margin-top: 8px;\n  text-align: center;\n}\n\n/* Download panel */\n#ic-app .ic-dl-box {\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 16px;\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n\n#ic-app .ic-dl-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #374151;\n}\n\n#ic-app .ic-fmt-row {\n  display: flex;\n  gap: 8px;\n}\n\n#ic-app .ic-fmt-btn {\n  flex: 1;\n  padding: 7px 0;\n  border: 1.5px solid #d1d5db;\n  border-radius: 7px;\n  background: #fff;\n  font-size: 13px;\n  font-weight: 700;\n  color: #374151;\n  cursor: pointer;\n  transition: all 0.15s;\n  text-align: center;\n}\n\n#ic-app .ic-fmt-btn.active {\n  background: #7c3aed;\n  border-color: #7c3aed;\n  color: #fff;\n}\n\n#ic-app .ic-fmt-btn:hover:not(.active) {\n  border-color: #7c3aed;\n  color: #7c3aed;\n}\n\n#ic-app .ic-quality-row {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n\n#ic-app .ic-quality-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #6b7280;\n  display: flex;\n  justify-content: space-between;\n}\n\n#ic-app .ic-quality-slider {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 100%;\n  height: 4px;\n  border-radius: 2px;\n  background: #e5e7eb;\n  outline: none;\n  cursor: pointer;\n}\n\n#ic-app .ic-quality-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #7c3aed;\n  cursor: pointer;\n}\n\n#ic-app .ic-dl-btn {\n  display: block;\n  width: 100%;\n  padding: 13px 0;\n  background: linear-gradient(135deg, #7c3aed, #6d28d9);\n  color: #fff;\n  border: none;\n  border-radius: 10px;\n  font-size: 15px;\n  font-weight: 800;\n  cursor: pointer;\n  transition: opacity 0.15s;\n  text-align: center;\n}\n\n#ic-app .ic-dl-btn:hover {\n  opacity: 0.88;\n}\n\n#ic-app .ic-dl-btn:disabled {\n  opacity: 0.4;\n  cursor: not-allowed;\n}\n\n/* Selection info */\n#ic-app .ic-sel-info {\n  font-size: 12px;\n  color: #6b7280;\n  text-align: center;\n  padding: 6px 0 0;\n}\n\n#ic-app .ic-sel-info span {\n  font-weight: 700;\n  color: #4c1d95;\n}\n\n/* Hint */\n#ic-app .ic-hint {\n  background: #f5f3ff;\n  border-left: 4px solid #7c3aed;\n  border-radius: 0 8px 8px 0;\n  padding: 10px 14px;\n  font-size: 13px;\n  color: #4c1d95;\n  line-height: 1.7;\n}\n\n/* freee CTA */\n#ic-app .ic-freee-cta {\n  background: linear-gradient(135deg, #dbeafe 0%, #eff6ff 100%);\n  border: 1.5px solid #93c5fd;\n  border-radius: 12px;\n  padding: 18px 20px;\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  flex-wrap: wrap;\n}\n\n#ic-app .ic-freee-cta-icon {\n  font-size: 32px;\n  flex-shrink: 0;\n}\n\n#ic-app .ic-freee-cta-body {\n  flex: 1;\n  min-width: 200px;\n}\n\n#ic-app .ic-freee-cta-body h3 {\n  margin: 0 0 4px 0;\n  font-size: 14px;\n  font-weight: 800;\n  color: #1e40af;\n}\n\n#ic-app .ic-freee-cta-body p {\n  margin: 0;\n  font-size: 13px;\n  color: #1e3a8a;\n  line-height: 1.6;\n}\n\n#ic-app .ic-freee-cta-btn {\n  display: inline-block;\n  padding: 10px 22px;\n  background: #2563eb;\n  color: #fff;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 800;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: opacity 0.15s;\n  flex-shrink: 0;\n}\n\n#ic-app .ic-freee-cta-btn:hover {\n  opacity: 0.85;\n}\n\u003c/style\u003e\n\u003c!-- Hero --\u003e\n\u003cdiv class=\"ic-hero\"\u003e\n  \u003ch2\u003e✂️ 画像トリミングツール\u003c/h2\u003e\n  \u003cp\u003e画像をアップロードしてドラッグで切り抜き範囲を指定。アスペクト比固定・回転・反転にも対応。ブラウザ内で完結し、サーバーへの送信は一切ありません。\u003c/p\u003e","title":"画像トリミングツール"},{"content":" \u0026#10024; 整形する \u0026#9889; 圧縮する \u0026#10005; クリア インデント： スペース2 スペース4 タブ 長い行を折り返す 表示： 左右並べて 上下に表示 0文字数 0行数 –出力文字数 –出力行数 –タグ数 \u0026#8635; 左にHTMLを貼り付けて「整形する」または「圧縮する」をクリックしてください。 入力 HTML 0 文字 1 出力結果 – // 整形結果がここに表示されます \u0026#128203; コピー クリップボードにコピーしました！ 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; HTML変換 → HTML→Markdown変換 XML整形 → XML整形ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 プログラミングスクール おすすめ2026年版！目的別に比較【未経験〜転職まで】 ","permalink":"https://productivity-works.com/ja/tools/html-beautifier/","summary":"\u003cdiv id=\"hb-app\"\u003e\n\u003cstyle\u003e\n#hb-app *,\n#hb-app *::before,\n#hb-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n#hb-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Hiragino Sans\", \"Yu Gothic UI\", sans-serif;\n  font-size: 14px;\n  color: #1e293b;\n  line-height: 1.5;\n}\n\n#hb-app .hb-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n  margin-bottom: 12px;\n}\n\n#hb-app .hb-toolbar-group {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  flex-wrap: wrap;\n}\n\n#hb-app .hb-toolbar-sep {\n  width: 1px;\n  height: 28px;\n  background: #e2e8f0;\n  margin: 0 2px;\n}\n\n#hb-app .hb-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 7px 14px;\n  border: none;\n  border-radius: 6px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n  white-space: nowrap;\n  line-height: 1;\n}\n#hb-app .hb-btn:active { transform: scale(0.97); }\n#hb-app .hb-btn-primary   { background: #2563eb; color: #fff; }\n#hb-app .hb-btn-primary:hover   { background: #1d4ed8; }\n#hb-app .hb-btn-secondary { background: #f1f5f9; color: #334155; border: 1px solid #cbd5e1; }\n#hb-app .hb-btn-secondary:hover { background: #e2e8f0; }\n#hb-app .hb-btn-success   { background: #16a34a; color: #fff; }\n#hb-app .hb-btn-success:hover   { background: #15803d; }\n#hb-app .hb-btn-orange    { background: #d97706; color: #fff; }\n#hb-app .hb-btn-orange:hover    { background: #b45309; }\n#hb-app .hb-btn-danger    { background: #dc2626; color: #fff; }\n#hb-app .hb-btn-danger:hover    { background: #b91c1c; }\n\n#hb-app .hb-select {\n  padding: 7px 10px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  background: #fff;\n  color: #334155;\n  cursor: pointer;\n}\n\n#hb-app .hb-label {\n  font-size: 12px;\n  font-weight: 700;\n  color: #64748b;\n  white-space: nowrap;\n}\n\n#hb-app .hb-toggle-wrap {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  cursor: pointer;\n  user-select: none;\n}\n#hb-app .hb-toggle-wrap input[type=\"checkbox\"] {\n  width: 16px;\n  height: 16px;\n  cursor: pointer;\n  accent-color: #2563eb;\n}\n\n/* View toggle */\n#hb-app .hb-view-toggle {\n  display: flex;\n  gap: 0;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  overflow: hidden;\n}\n#hb-app .hb-view-btn {\n  padding: 6px 12px;\n  border: none;\n  background: #f8fafc;\n  color: #64748b;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n#hb-app .hb-view-btn.active {\n  background: #2563eb;\n  color: #fff;\n}\n#hb-app .hb-view-btn:not(.active):hover { background: #e2e8f0; }\n\n/* Panels */\n#hb-app .hb-panels {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n  margin-bottom: 12px;\n}\n#hb-app .hb-panels.stacked {\n  grid-template-columns: 1fr;\n}\n@media (max-width: 700px) {\n  #hb-app .hb-panels { grid-template-columns: 1fr; }\n  #hb-app .hb-toolbar-sep { display: none; }\n}\n\n#hb-app .hb-panel {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n\n#hb-app .hb-panel-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n#hb-app .hb-panel-label {\n  font-size: 12px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n\n#hb-app .hb-count {\n  font-size: 11px;\n  color: #94a3b8;\n  font-weight: 500;\n}\n\n/* Editor wrapper */\n#hb-app .hb-editor-wrap {\n  position: relative;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  overflow: hidden;\n  background: #fafafa;\n}\n\n#hb-app .hb-with-lines {\n  display: flex;\n}\n\n#hb-app .hb-line-nums {\n  width: 36px;\n  min-width: 36px;\n  background: #f1f5f9;\n  color: #94a3b8;\n  font-family: \"JetBrains Mono\", \"Fira Code\", \"Cascadia Code\", monospace;\n  font-size: 12px;\n  line-height: 1.6;\n  padding: 10px 0;\n  text-align: right;\n  padding-right: 6px;\n  user-select: none;\n  overflow: hidden;\n  border-right: 1px solid #e2e8f0;\n}\n#hb-app .hb-line-nums span { display: block; }\n\n#hb-app .hb-textarea {\n  width: 100%;\n  min-height: 300px;\n  padding: 10px 12px;\n  border: none;\n  background: transparent;\n  font-family: \"JetBrains Mono\", \"Fira Code\", \"Cascadia Code\", monospace;\n  font-size: 13px;\n  line-height: 1.6;\n  color: #1e293b;\n  resize: vertical;\n  outline: none;\n}\n\n/* Output / syntax highlighted */\n#hb-app .hb-output-wrap {\n  position: relative;\n  min-height: 300px;\n  overflow: auto;\n  background: #0f172a;\n  border-radius: 6px;\n  padding: 10px 12px;\n}\n\n#hb-app .hb-output-pre {\n  font-family: \"JetBrains Mono\", \"Fira Code\", \"Cascadia Code\", monospace;\n  font-size: 13px;\n  line-height: 1.6;\n  white-space: pre;\n  color: #e2e8f0;\n  margin: 0;\n}\n\n/* Syntax colors */\n#hb-app .hl-tag    { color: #7dd3fc; }\n#hb-app .hl-attr   { color: #fbbf24; }\n#hb-app .hl-val    { color: #86efac; }\n#hb-app .hl-cmt    { color: #64748b; font-style: italic; }\n#hb-app .hl-entity { color: #f9a8d4; }\n#hb-app .hl-doctype{ color: #a78bfa; }\n#hb-app .hl-punct  { color: #94a3b8; }\n#hb-app .hl-text   { color: #e2e8f0; }\n\n/* Status bar */\n#hb-app .hb-status {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 9px 14px;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  min-height: 40px;\n  margin-bottom: 10px;\n}\n#hb-app .hb-status.hb-idle  { background: #f8fafc; color: #64748b; border: 1px solid #e2e8f0; }\n#hb-app .hb-status.hb-ok    { background: #f0fdf4; color: #16a34a; border: 1px solid #bbf7d0; }\n#hb-app .hb-status.hb-err   { background: #fef2f2; color: #dc2626; border: 1px solid #fecaca; }\n\n#hb-app .hb-stats {\n  display: flex;\n  gap: 16px;\n  flex-wrap: wrap;\n  margin-bottom: 12px;\n}\n#hb-app .hb-stat-item {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 8px 16px;\n  min-width: 80px;\n}\n#hb-app .hb-stat-val {\n  font-size: 20px;\n  font-weight: 700;\n  color: #2563eb;\n  line-height: 1.2;\n}\n#hb-app .hb-stat-lbl {\n  font-size: 11px;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-top: 2px;\n}\n\n/* Copy toast */\n#hb-app .hb-toast {\n  position: fixed;\n  bottom: 28px;\n  left: 50%;\n  transform: translateX(-50%) translateY(20px);\n  background: #1e293b;\n  color: #fff;\n  padding: 10px 22px;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 0.2s, transform 0.2s;\n  z-index: 9999;\n  white-space: nowrap;\n}\n#hb-app .hb-toast.show {\n  opacity: 1;\n  transform: translateX(-50%) translateY(0);\n}\n\n/* Copy btn inside output */\n#hb-app .hb-copy-overlay {\n  position: absolute;\n  top: 8px;\n  right: 8px;\n}\n#hb-app .hb-copy-overlay .hb-btn {\n  font-size: 12px;\n  padding: 5px 11px;\n  opacity: 0.85;\n}\n#hb-app .hb-copy-overlay .hb-btn:hover { opacity: 1; }\n\u003c/style\u003e\n\u003c!-- ツールバー --\u003e\n\u003cdiv class=\"hb-toolbar\"\u003e\n  \u003cdiv class=\"hb-toolbar-group\"\u003e\n    \u003cbutton class=\"hb-btn hb-btn-primary\" id=\"hb-beautify-btn\"\u003e\u0026#10024; 整形する\u003c/button\u003e\n    \u003cbutton class=\"hb-btn hb-btn-orange\"  id=\"hb-minify-btn\"\u003e\u0026#9889; 圧縮する\u003c/button\u003e\n    \u003cbutton class=\"hb-btn hb-btn-danger\"  id=\"hb-clear-btn\"\u003e\u0026#10005; クリア\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"hb-toolbar-sep\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"hb-toolbar-group\"\u003e\n    \u003cspan class=\"hb-label\"\u003eインデント：\u003c/span\u003e\n    \u003cselect class=\"hb-select\" id=\"hb-indent-sel\"\u003e\n      \u003coption value=\"2\"\u003eスペース2\u003c/option\u003e\n      \u003coption value=\"4\" selected\u003eスペース4\u003c/option\u003e\n      \u003coption value=\"tab\"\u003eタブ\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"hb-toolbar-sep\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"hb-toolbar-group\"\u003e\n    \u003clabel class=\"hb-toggle-wrap\"\u003e\n      \u003cinput type=\"checkbox\" id=\"hb-wrap-chk\"\u003e\n      \u003cspan class=\"hb-label\"\u003e長い行を折り返す\u003c/span\u003e\n    \u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"hb-toolbar-sep\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"hb-toolbar-group\"\u003e\n    \u003cspan class=\"hb-label\"\u003e表示：\u003c/span\u003e\n    \u003cdiv class=\"hb-view-toggle\"\u003e\n      \u003cbutton class=\"hb-view-btn active\" id=\"hb-view-side\"\u003e左右並べて\u003c/button\u003e\n      \u003cbutton class=\"hb-view-btn\" id=\"hb-view-stack\"\u003e上下に表示\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 統計 --\u003e\n\u003cdiv class=\"hb-stats\" id=\"hb-stats-bar\"\u003e\n  \u003cdiv class=\"hb-stat-item\"\u003e\u003cspan class=\"hb-stat-val\" id=\"hb-stat-chars\"\u003e0\u003c/span\u003e\u003cspan class=\"hb-stat-lbl\"\u003e文字数\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"hb-stat-item\"\u003e\u003cspan class=\"hb-stat-val\" id=\"hb-stat-lines\"\u003e0\u003c/span\u003e\u003cspan class=\"hb-stat-lbl\"\u003e行数\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"hb-stat-item\"\u003e\u003cspan class=\"hb-stat-val\" id=\"hb-stat-out-chars\"\u003e–\u003c/span\u003e\u003cspan class=\"hb-stat-lbl\"\u003e出力文字数\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"hb-stat-item\"\u003e\u003cspan class=\"hb-stat-val\" id=\"hb-stat-out-lines\"\u003e–\u003c/span\u003e\u003cspan class=\"hb-stat-lbl\"\u003e出力行数\u003c/span\u003e\u003c/div\u003e\n  \u003cdiv class=\"hb-stat-item\"\u003e\u003cspan class=\"hb-stat-val\" id=\"hb-stat-tags\"\u003e–\u003c/span\u003e\u003cspan class=\"hb-stat-lbl\"\u003eタグ数\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ステータス --\u003e\n\u003cdiv class=\"hb-status hb-idle\" id=\"hb-status\"\u003e\n  \u0026#8635; 左にHTMLを貼り付けて「整形する」または「圧縮する」をクリックしてください。\n\u003c/div\u003e\n\u003c!-- パネル --\u003e\n\u003cdiv class=\"hb-panels\" id=\"hb-panels\"\u003e\n  \u003c!-- 入力 --\u003e\n  \u003cdiv class=\"hb-panel\"\u003e\n    \u003cdiv class=\"hb-panel-header\"\u003e\n      \u003cspan class=\"hb-panel-label\"\u003e入力 HTML\u003c/span\u003e\n      \u003cspan class=\"hb-count\" id=\"hb-in-count\"\u003e0 文字\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"hb-editor-wrap\"\u003e\n      \u003cdiv class=\"hb-with-lines\"\u003e\n        \u003cdiv class=\"hb-line-nums\" id=\"hb-in-lines\"\u003e\u003cspan\u003e1\u003c/span\u003e\u003c/div\u003e\n        \u003ctextarea class=\"hb-textarea\" id=\"hb-input\" placeholder=\"ここにHTMLを貼り付けてください…\" spellcheck=\"false\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\"\u003e\u003c/textarea\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 出力 --\u003e\n  \u003cdiv class=\"hb-panel\"\u003e\n    \u003cdiv class=\"hb-panel-header\"\u003e\n      \u003cspan class=\"hb-panel-label\"\u003e出力結果\u003c/span\u003e\n      \u003cspan class=\"hb-count\" id=\"hb-out-count\"\u003e–\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"hb-editor-wrap\" style=\"background:#0f172a;\"\u003e\n      \u003cdiv class=\"hb-output-wrap\" id=\"hb-output-wrap\"\u003e\n        \u003cpre class=\"hb-output-pre\" id=\"hb-output\"\u003e\u003cspan style=\"color:#475569;\"\u003e// 整形結果がここに表示されます\u003c/span\u003e\u003c/pre\u003e\n        \u003cdiv class=\"hb-copy-overlay\"\u003e\n          \u003cbutton class=\"hb-btn hb-btn-success\" id=\"hb-copy-btn\"\u003e\u0026#128203; コピー\u003c/button\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- トースト通知 --\u003e\n\u003cdiv class=\"hb-toast\" id=\"hb-toast\"\u003eクリップボードにコピーしました！\u003c/div\u003e\n\u003cscript\u003e\n(function(){\n  'use strict';\n\n  var input      = document.getElementById('hb-input');\n  var output     = document.getElementById('hb-output');\n  var outWrap    = document.getElementById('hb-output-wrap');\n  var statusEl   = document.getElementById('hb-status');\n  var inCount    = document.getElementById('hb-in-count');\n  var outCount   = document.getElementById('hb-out-count');\n  var inLines    = document.getElementById('hb-in-lines');\n  var indentSel  = document.getElementById('hb-indent-sel');\n  var wrapChk    = document.getElementById('hb-wrap-chk');\n  var panels     = document.getElementById('hb-panels');\n  var toast      = document.getElementById('hb-toast');\n\n  var statChars    = document.getElementById('hb-stat-chars');\n  var statLines    = document.getElementById('hb-stat-lines');\n  var statOutChars = document.getElementById('hb-stat-out-chars');\n  var statOutLines = document.getElementById('hb-stat-out-lines');\n  var statTags     = document.getElementById('hb-stat-tags');\n\n  var lastOutput = '';\n  var toastTimer = null;\n\n  /* ── インデント取得 ── */\n  function getIndent() {\n    var v = indentSel.value;\n    if (v === 'tab') return '\\t';\n    return ' '.repeat(parseInt(v, 10));\n  }\n\n  /* ── シンタックスハイライター ── */\n  function escape(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;').replace(/\"/g,'\u0026quot;');\n  }\n\n  function highlight(code) {\n    var result = '';\n    var i = 0;\n    var len = code.length;\n\n    while (i \u003c len) {\n      // コメント\n      if (code.slice(i, i+4) === '\u003c!--') {\n        var end = code.indexOf('--\u003e', i+4);\n        if (end === -1) end = len - 3;\n        var cmt = code.slice(i, end+3);\n        result += '\u003cspan class=\"hl-cmt\"\u003e' + escape(cmt) + '\u003c/span\u003e';\n        i = end + 3;\n        continue;\n      }\n      // DOCTYPE\n      if (code.slice(i, i+2) === '\u003c!' \u0026\u0026 code.slice(i,i+9).toLowerCase() !== '\u003c!--') {\n        var end2 = code.indexOf('\u003e', i);\n        if (end2 === -1) end2 = len - 1;\n        result += '\u003cspan class=\"hl-doctype\"\u003e' + escape(code.slice(i, end2+1)) + '\u003c/span\u003e';\n        i = end2 + 1;\n        continue;\n      }\n      // タグ\n      if (code[i] === '\u003c') {\n        var end3 = code.indexOf('\u003e', i);\n        if (end3 === -1) { result += escape(code.slice(i)); i = len; continue; }\n        var tagContent = code.slice(i, end3+1);\n        result += highlightTag(tagContent);\n        i = end3 + 1;\n        continue;\n      }\n      // テキストノード\n      var next = code.indexOf('\u003c', i);\n      if (next === -1) next = len;\n      var txt = code.slice(i, next);\n      result += '\u003cspan class=\"hl-text\"\u003e' + escape(txt).replace(/\u0026amp;[a-zA-Z0-9#]+;/g, function(m){ return '\u003cspan class=\"hl-entity\"\u003e'+m+'\u003c/span\u003e'; }) + '\u003c/span\u003e';\n      i = next;\n    }\n    return result;\n  }\n\n  function highlightTag(tag) {\n    var out = '';\n    var inner = tag.slice(1, tag.endsWith('/\u003e') ? -2 : (tag.endsWith('\u003e') ? -1 : tag.length));\n    var isClose = inner.startsWith('/');\n    if (isClose) inner = inner.slice(1);\n\n    var nameMatch = inner.match(/^([a-zA-Z0-9:\\-_]+)([\\s\\S]*)?$/);\n    if (!nameMatch) return '\u003cspan class=\"hl-punct\"\u003e' + escape(tag) + '\u003c/span\u003e';\n\n    var tagName = nameMatch[1];\n    var rest = nameMatch[2] || '';\n\n    out += '\u003cspan class=\"hl-punct\"\u003e\u0026lt;\u003c/span\u003e';\n    if (isClose) out += '\u003cspan class=\"hl-punct\"\u003e/\u003c/span\u003e';\n    out += '\u003cspan class=\"hl-tag\"\u003e' + escape(tagName) + '\u003c/span\u003e';\n\n    var attrReg = /\\s+([a-zA-Z0-9\\-_:@.]+)(?:\\s*=\\s*(?:\"([^\"]*?)\"|'([^']*?)'|([^\\s\u003e]+)))?/g;\n    var m;\n    var lastIdx = 0;\n    while ((m = attrReg.exec(rest)) !== null) {\n      var spaceLen = (m[0].match(/^\\s+/) || [''])[0].length;\n      out += escape(rest.slice(m.index, m.index + spaceLen));\n      out += '\u003cspan class=\"hl-attr\"\u003e' + escape(m[1]) + '\u003c/span\u003e';\n      if (m[2] !== undefined || m[3] !== undefined || m[4] !== undefined) {\n        var val = m[2] !== undefined ? '\"'+m[2]+'\"' : (m[3] !== undefined ? \"'\"+m[3]+\"'\" : m[4]);\n        out += '\u003cspan class=\"hl-punct\"\u003e=\u003c/span\u003e';\n        out += '\u003cspan class=\"hl-val\"\u003e' + escape(val) + '\u003c/span\u003e';\n      }\n      lastIdx = m.index + m[0].length;\n    }\n    var rem = rest.slice(lastIdx);\n    if (rem) out += escape(rem);\n\n    if (tag.endsWith('/\u003e')) out += '\u003cspan class=\"hl-punct\"\u003e/\u0026gt;\u003c/span\u003e';\n    else out += '\u003cspan class=\"hl-punct\"\u003e\u0026gt;\u003c/span\u003e';\n\n    return out;\n  }\n\n  /* ── HTML整形 ── */\n  function beautifyHTML(html, indent) {\n    var INLINE = 'a abbr acronym b bdo big br cite code dfn em i img input kbd label map object output q samp select small span strong sub sup textarea time tt var button'.split(' ');\n    var VOID   = 'area base br col embed hr img input link meta param source track wbr'.split(' ');\n\n    var lines = [];\n    var level = 0;\n    var tokens = [];\n    var re = /(\u003c!--[\\s\\S]*?--\u003e|\u003c!DOCTYPE[^\u003e]*\u003e|\u003c\\/[a-zA-Z0-9:\\-]+\\s*\u003e|\u003c[a-zA-Z0-9:\\-]+(?:\\s[^\u003e]*?)?\\s*\\/?\u003e|[^\u003c]+)/gi;\n    var m;\n    while ((m = re.exec(html)) !== null) {\n      var tok = m[0];\n      if (tok.trim()) tokens.push(tok);\n    }\n\n    tokens.forEach(function(tok) {\n      var trimmed = tok.trim();\n      if (!trimmed) return;\n\n      if (trimmed.startsWith('\u003c!--') || trimmed.startsWith('\u003c!')) {\n        lines.push(indent.repeat(level) + trimmed);\n        return;\n      }\n      if (trimmed.startsWith('\u003c/')) {\n        level = Math.max(0, level - 1);\n        lines.push(indent.repeat(level) + trimmed);\n        return;\n      }\n      if (trimmed.startsWith('\u003c')) {\n        var nameM = trimmed.match(/^\u003c([a-zA-Z0-9:\\-]+)/i);\n        var name = nameM ? nameM[1].toLowerCase() : '';\n        var isVoid = VOID.indexOf(name) !== -1;\n        var isSelfClose = trimmed.endsWith('/\u003e');\n\n        lines.push(indent.repeat(level) + trimmed);\n\n        if (!isVoid \u0026\u0026 !isSelfClose) {\n          level++;\n        }\n        return;\n      }\n      lines.push(indent.repeat(level) + trimmed);\n    });\n\n    return lines.join('\\n');\n  }\n\n  /* ── HTML圧縮 ── */\n  function minifyHTML(html) {\n    return html\n      .replace(/\u003c!--[\\s\\S]*?--\u003e/g, '')\n      .replace(/\\s+/g, ' ')\n      .replace(/\u003e\\s+\u003c/g, '\u003e\u003c')\n      .replace(/\\s*=\\s*/g, '=')\n      .replace(/\"\\s+\u003e/g, '\"\u003e')\n      .trim();\n  }\n\n  /* ── タグ数カウント ── */\n  function countTags(html) {\n    var m = html.match(/\u003c[a-zA-Z][a-zA-Z0-9:\\-]*/g);\n    return m ? m.length : 0;\n  }\n\n  /* ── 行番号更新 ── */\n  function updateLineNums() {\n    var val = input.value;\n    var count = (val.match(/\\n/g) || []).length + 1;\n    var html = '';\n    for (var i = 1; i \u003c= count; i++) html += '\u003cspan\u003e' + i + '\u003c/span\u003e';\n    inLines.innerHTML = html;\n    inLines.scrollTop = input.scrollTop;\n  }\n\n  /* ── 入力統計更新 ── */\n  function updateInputStats() {\n    var val = input.value;\n    var chars = val.length;\n    var lines = val ? val.split('\\n').length : 0;\n    inCount.textContent = chars + ' 文字';\n    statChars.textContent = chars.toLocaleString();\n    statLines.textContent = lines.toLocaleString();\n    updateLineNums();\n  }\n\n  /* ── ステータス設定 ── */\n  function setStatus(type, msg) {\n    statusEl.className = 'hb-status hb-' + type;\n    statusEl.innerHTML = msg;\n  }\n\n  /* ── 出力レンダリング ── */\n  function renderOutput(text, mode) {\n    lastOutput = text;\n    var chars = text.length;\n    var lines = text ? text.split('\\n').length : 0;\n    outCount.textContent = chars + ' 文字';\n    statOutChars.textContent = chars.toLocaleString();\n    statOutLines.textContent = lines.toLocaleString();\n    statTags.textContent = countTags(text).toLocaleString();\n\n    output.innerHTML = highlight(text);\n\n    if (wrapChk.checked) {\n      outWrap.style.whiteSpace = 'pre-wrap';\n      output.style.whiteSpace = 'pre-wrap';\n    } else {\n      outWrap.style.whiteSpace = '';\n      output.style.whiteSpace = 'pre';\n    }\n\n    var label = mode === 'minify' ? '圧縮完了' : '整形完了';\n    setStatus('ok', '\u0026#10003; ' + label + ' \u0026mdash; ' + chars.toLocaleString() + ' 文字・' + lines.toLocaleString() + ' 行');\n  }\n\n  /* ── 整形ボタン ── */\n  document.getElementById('hb-beautify-btn').addEventListener('click', function() {\n    var val = input.value.trim();\n    if (!val) { setStatus('err', '\u0026#9888; HTMLを入力してください。'); return; }\n    var indent = getIndent();\n    try {\n      var result = beautifyHTML(val, indent);\n      renderOutput(result, 'beautify');\n    } catch(e) {\n      setStatus('err', '\u0026#9888; エラー: ' + e.message);\n    }\n  });\n\n  /* ── 圧縮ボタン ── */\n  document.getElementById('hb-minify-btn').addEventListener('click', function() {\n    var val = input.value.trim();\n    if (!val) { setStatus('err', '\u0026#9888; HTMLを入力してください。'); return; }\n    try {\n      var result = minifyHTML(val);\n      renderOutput(result, 'minify');\n    } catch(e) {\n      setStatus('err', '\u0026#9888; エラー: ' + e.message);\n    }\n  });\n\n  /* ── クリアボタン ── */\n  document.getElementById('hb-clear-btn').addEventListener('click', function() {\n    input.value = '';\n    output.innerHTML = '\u003cspan style=\"color:#475569;\"\u003e// 整形結果がここに表示されます\u003c/span\u003e';\n    lastOutput = '';\n    outCount.textContent = '–';\n    statOutChars.textContent = '–';\n    statOutLines.textContent = '–';\n    statTags.textContent = '–';\n    setStatus('idle', '\u0026#8635; 左にHTMLを貼り付けて「整形する」または「圧縮する」をクリックしてください。');\n    updateInputStats();\n  });\n\n  /* ── コピーボタン ── */\n  document.getElementById('hb-copy-btn').addEventListener('click', function() {\n    if (!lastOutput) return;\n    if (navigator.clipboard \u0026\u0026 navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(lastOutput).then(showToast);\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = lastOutput;\n      ta.style.position = 'fixed';\n      ta.style.opacity = '0';\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      showToast();\n    }\n  });\n\n  function showToast() {\n    toast.classList.add('show');\n    clearTimeout(toastTimer);\n    toastTimer = setTimeout(function(){ toast.classList.remove('show'); }, 2000);\n  }\n\n  /* ── 折り返し切り替え ── */\n  wrapChk.addEventListener('change', function() {\n    if (lastOutput) {\n      if (this.checked) {\n        outWrap.style.whiteSpace = 'pre-wrap';\n        output.style.whiteSpace = 'pre-wrap';\n      } else {\n        outWrap.style.whiteSpace = '';\n        output.style.whiteSpace = 'pre';\n      }\n    }\n  });\n\n  /* ── 表示切り替え ── */\n  document.getElementById('hb-view-side').addEventListener('click', function() {\n    panels.classList.remove('stacked');\n    this.classList.add('active');\n    document.getElementById('hb-view-stack').classList.remove('active');\n  });\n  document.getElementById('hb-view-stack').addEventListener('click', function() {\n    panels.classList.add('stacked');\n    this.classList.add('active');\n    document.getElementById('hb-view-side').classList.remove('active');\n  });\n\n  /* ── 入力イベント ── */\n  input.addEventListener('input', updateInputStats);\n  input.addEventListener('scroll', function() { inLines.scrollTop = this.scrollTop; });\n  input.addEventListener('keydown', function(e) {\n    if (e.key === 'Tab') {\n      e.preventDefault();\n      var start = this.selectionStart;\n      var end = this.selectionEnd;\n      var indent = getIndent();\n      this.value = this.value.slice(0, start) + indent + this.value.slice(end);\n      this.selectionStart = this.selectionEnd = start + indent.length;\n      updateInputStats();\n    }\n  });\n\n  /* ── 初期化 ── */\n  updateInputStats();\n\n  /* ── サンプルHTML ── */\n  var sample = '\u003c!DOCTYPE html\u003e\\n\u003chtml lang=\"ja\"\u003e\\n\u003chead\u003e\\n\u003cmeta charset=\"UTF-8\"\u003e\\n\u003ctitle\u003eサンプルページ\u003c/title\u003e\\n\u003clink rel=\"stylesheet\" href=\"style.css\"\u003e\\n\u003c/head\u003e\\n\u003cbody\u003e\\n\u003cheader\u003e\\n\u003ch1\u003eこんにちは、世界！\u003c/h1\u003e\\n\u003cnav\u003e\\n\u003ca href=\"/\"\u003eホーム\u003c/a\u003e\\n\u003ca href=\"/about\"\u003e会社概要\u003c/a\u003e\\n\u003c/nav\u003e\\n\u003c/header\u003e\\n\u003cmain\u003e\\n\u003cp\u003eこれは\u003cstrong\u003eHTMLフォーマッター\u003c/strong\u003eの\u003cem\u003eサンプル\u003c/em\u003eコードです。\u003c/p\u003e","title":"HTML整形・フォーマッター"},{"content":" テキスト入力\n出力形式： バイナリ 01 16進数 0x 8進数 0o スペース区切り テキスト 0 文字 \u0026#x21D3; テキスト → エンコード バイナリ出力 コピー デコード（エンコード → テキスト）\nバイナリ / 16進数 / 8進数 を入力 結果をコピー \u0026#x21D1; エンコード → テキスト デコード結果 文字ごとの詳細内訳\n文字 コードポイント 10進数 バイナリ（UTF-8バイト列） 16進数 8進数 上にテキストを入力すると、文字ごとの内訳が表示されます。 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール 進数変換 → 進数変換ツール Base64エンコード → Base64エンコーダー モールス信号 → モールス信号変換 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/binary-text-converter/","summary":"\u003cdiv id=\"btc-app\"\u003e\n\u003cstyle\u003e\n#btc-app {\n  font-family: ui-sans-serif, system-ui, -apple-system, sans-serif;\n  color: #e2e8f0;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0;\n}\n#btc-app * { box-sizing: border-box; }\n\n.btc-card {\n  background: #1e293b;\n  border: 1px solid #334155;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 16px;\n}\n\n.btc-row {\n  display: flex;\n  gap: 12px;\n  flex-wrap: wrap;\n  align-items: center;\n  margin-bottom: 16px;\n}\n\n.btc-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #94a3b8;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 8px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n.btc-label-text { color: #94a3b8; }\n\n.btc-char-count {\n  font-size: 12px;\n  font-weight: 400;\n  color: #64748b;\n  text-transform: none;\n  letter-spacing: 0;\n}\n\n.btc-textarea {\n  width: 100%;\n  min-height: 120px;\n  background: #0f172a;\n  border: 1px solid #334155;\n  border-radius: 8px;\n  color: #e2e8f0;\n  font-family: 'Courier New', Courier, monospace;\n  font-size: 14px;\n  padding: 12px;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.2s;\n  line-height: 1.6;\n}\n.btc-textarea:focus { border-color: #6366f1; }\n.btc-textarea::placeholder { color: #475569; }\n\n.btc-btn {\n  padding: 9px 18px;\n  border-radius: 7px;\n  border: none;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.2s, transform 0.1s;\n  white-space: nowrap;\n}\n.btc-btn:active { transform: scale(0.97); }\n\n.btc-btn-primary {\n  background: #6366f1;\n  color: #fff;\n}\n.btc-btn-primary:hover { background: #4f46e5; }\n\n.btc-btn-secondary {\n  background: #334155;\n  color: #cbd5e1;\n}\n.btc-btn-secondary:hover { background: #475569; }\n\n.btc-btn-copy {\n  background: #0f4c81;\n  color: #93c5fd;\n  padding: 5px 12px;\n  font-size: 12px;\n  border-radius: 6px;\n}\n.btc-btn-copy:hover { background: #1d4ed8; color: #fff; }\n.btc-btn-copy.copied { background: #065f46; color: #6ee7b7; }\n\n.btc-mode-group {\n  display: flex;\n  gap: 6px;\n  flex-wrap: wrap;\n}\n\n.btc-mode-btn {\n  padding: 7px 14px;\n  border-radius: 6px;\n  border: 1.5px solid #334155;\n  background: #0f172a;\n  color: #94a3b8;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n}\n.btc-mode-btn.active {\n  border-color: #6366f1;\n  background: #312e81;\n  color: #a5b4fc;\n}\n.btc-mode-btn:hover:not(.active) { border-color: #6366f1; color: #e2e8f0; }\n\n.btc-toggle-group {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 13px;\n  color: #94a3b8;\n}\n\n.btc-toggle {\n  position: relative;\n  width: 40px;\n  height: 22px;\n  flex-shrink: 0;\n}\n.btc-toggle input { opacity: 0; width: 0; height: 0; }\n.btc-toggle-slider {\n  position: absolute;\n  inset: 0;\n  background: #334155;\n  border-radius: 22px;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n.btc-toggle-slider::before {\n  content: '';\n  position: absolute;\n  width: 16px; height: 16px;\n  left: 3px; top: 3px;\n  background: #94a3b8;\n  border-radius: 50%;\n  transition: transform 0.2s, background 0.2s;\n}\n.btc-toggle input:checked + .btc-toggle-slider { background: #4f46e5; }\n.btc-toggle input:checked + .btc-toggle-slider::before {\n  transform: translateX(18px);\n  background: #fff;\n}\n\n.btc-output-box {\n  position: relative;\n  background: #0f172a;\n  border: 1px solid #334155;\n  border-radius: 8px;\n  padding: 14px;\n  min-height: 100px;\n  font-family: 'Courier New', Courier, monospace;\n  font-size: 13px;\n  color: #a5b4fc;\n  word-break: break-all;\n  line-height: 1.7;\n  white-space: pre-wrap;\n}\n\n.btc-error {\n  color: #f87171;\n  font-size: 13px;\n  margin-top: 6px;\n  min-height: 18px;\n}\n\n.btc-section-title {\n  font-size: 15px;\n  font-weight: 700;\n  color: #c7d2fe;\n  margin: 0 0 14px 0;\n}\n\n.btc-dir-arrows {\n  display: flex;\n  justify-content: center;\n  gap: 10px;\n  margin: 4px 0 4px;\n}\n.btc-dir-btn {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 10px 22px;\n  border-radius: 8px;\n  border: none;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.2s, transform 0.1s;\n}\n.btc-dir-btn:active { transform: scale(0.97); }\n.btc-dir-btn-encode {\n  background: #6366f1;\n  color: #fff;\n}\n.btc-dir-btn-encode:hover { background: #4f46e5; }\n.btc-dir-btn-decode {\n  background: #0891b2;\n  color: #fff;\n}\n.btc-dir-btn-decode:hover { background: #0e7490; }\n\n/* Breakdown table */\n.btc-table-wrap {\n  overflow-x: auto;\n  margin-top: 8px;\n}\n.btc-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 13px;\n}\n.btc-table th {\n  background: #0f172a;\n  color: #94a3b8;\n  font-size: 11px;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  padding: 8px 10px;\n  text-align: left;\n  border-bottom: 1px solid #334155;\n}\n.btc-table td {\n  padding: 7px 10px;\n  border-bottom: 1px solid #1e293b;\n  font-family: 'Courier New', Courier, monospace;\n  color: #e2e8f0;\n  vertical-align: middle;\n}\n.btc-table tr:hover td { background: #1e2d3d; }\n.btc-table .td-char {\n  font-size: 15px;\n  font-weight: 700;\n  color: #fbbf24;\n  min-width: 32px;\n}\n.btc-table .td-cp { color: #94a3b8; font-size: 12px; }\n.btc-table .td-bin { color: #a5b4fc; }\n.btc-table .td-hex { color: #34d399; }\n.btc-table .td-oct { color: #fb923c; }\n.btc-table .td-dec { color: #e2e8f0; }\n\n.btc-empty-msg {\n  text-align: center;\n  color: #475569;\n  font-size: 13px;\n  padding: 20px 0;\n}\n\n.btc-options-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n  gap: 10px;\n  margin-bottom: 16px;\n}\n\n.btc-badge {\n  display: inline-block;\n  padding: 2px 8px;\n  border-radius: 4px;\n  font-size: 11px;\n  font-weight: 700;\n  margin-left: 6px;\n  vertical-align: middle;\n}\n.btc-badge-bin { background: #312e81; color: #a5b4fc; }\n.btc-badge-hex { background: #064e3b; color: #34d399; }\n.btc-badge-oct { background: #431407; color: #fb923c; }\n\n@media (max-width: 600px) {\n  .btc-dir-arrows { flex-direction: column; align-items: stretch; }\n  .btc-dir-btn { justify-content: center; }\n  .btc-row { flex-direction: column; align-items: flex-start; }\n  .btc-options-grid { grid-template-columns: 1fr; }\n}\n\u003c/style\u003e\n\u003c!-- ===== 入力カード ===== --\u003e\n\u003cdiv class=\"btc-card\"\u003e\n  \u003cp class=\"btc-section-title\"\u003eテキスト入力\u003c/p\u003e","title":"バイナリ⇔テキスト変換ツール"},{"content":" ROT13 / シーザー暗号 ROT13 暗号モード ROT13 ROT5 ROT47 シーザー 方向 エンコード デコード 表示 通常 総当たり シフト量 13 入力テキスト 出力テキスト 出力をコピー 総当たり — シーザー暗号 全25シフト一覧 シフト出力 会計・経費管理を自動化しませんか？ freeeなら請求書・領収書・確定申告をまとめてスマートに管理。業務効率化ツールと組み合わせて、時間を本業に集中させましょう。\nfreeeを無料で試す 使い方・仕組み ROT13 は各アルファベットを13文字ずらす暗号です。英字アルファベットは26文字なので、ROT13を2回適用すると元のテキストに戻ります。ネット掲示板などでネタバレやパズルの答えを隠すときによく使われます。\nシーザー暗号 はROT13の一般化で、シフト量を1〜25の間で自由に設定できます。古代ローマのユリウス・カエサルがシフト3で使ったとされる暗号です。デコード を選択すると、シフトが自動的に逆方向に適用されます。\nROT5 は数字（0〜9）に対してシフト5を適用します。ROT13と組み合わせた「ROT18」として使われることもあります。\nROT47 は印刷可能なASCII文字（!〜~、94文字）すべてを対象にシフト47を適用します。アルファベットだけでなく記号や数字も変換されます。\n総当たりモード は25通りのシーザー暗号シフトをすべて一覧表示します。シフト量が不明な暗号文を解読したいときに便利です。\nアルファベット対応表（ROT13） 平文 A B C D E F G H I J K L M 暗号 N O P Q R S T U V W X Y Z 平文 N O P Q R S T U V W X Y Z 暗号 A B C D E F G H I J K L M 関連ツール Base64エンコーダー → Base64エンコーダーツール Base64 To Image → Base64 To Imageツール Encoder Decoder → Encoder Decoderツール ","permalink":"https://productivity-works.com/ja/tools/rot13-encoder/","summary":"\u003cstyle\u003e\n#rot-app *,\n#rot-app *::before,\n#rot-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#rot-app {\n  font-family: 'Courier New', Courier, monospace;\n  background: #1a2e1a;\n  color: #ffb300;\n  border-radius: 8px;\n  padding: 24px;\n  max-width: 820px;\n  margin: 0 auto 2rem auto;\n  border: 1px solid #2e4d2e;\n}\n\n#rot-app h2 {\n  font-size: 1.1rem;\n  letter-spacing: 0.08em;\n  text-transform: none;\n  color: #ffd54f;\n  margin-bottom: 18px;\n  border-bottom: 1px solid #2e4d2e;\n  padding-bottom: 10px;\n}\n\n#rot-app .row {\n  display: flex;\n  gap: 12px;\n  flex-wrap: wrap;\n  margin-bottom: 14px;\n  align-items: center;\n}\n\n#rot-app label {\n  font-size: 0.78rem;\n  letter-spacing: 0.05em;\n  color: #ffd54f;\n  display: block;\n  margin-bottom: 5px;\n}\n\n#rot-app select,\n#rot-app button {\n  background: #0f1f0f;\n  color: #ffb300;\n  border: 1px solid #3a5c3a;\n  border-radius: 4px;\n  padding: 7px 14px;\n  font-family: inherit;\n  font-size: 0.88rem;\n  cursor: pointer;\n  transition: border-color 0.15s, background 0.15s;\n}\n\n#rot-app select:focus,\n#rot-app button:focus {\n  outline: 2px solid #ffb300;\n  outline-offset: 2px;\n}\n\n#rot-app button:hover {\n  background: #1e3d1e;\n  border-color: #ffb300;\n}\n\n#rot-app button[data-active=\"true\"] {\n  background: #ffb300;\n  color: #0f1f0f;\n  border-color: #ffb300;\n  font-weight: 700;\n}\n\n#rot-app .btn-group {\n  display: flex;\n  gap: 6px;\n  flex-wrap: wrap;\n}\n\n#rot-app textarea {\n  width: 100%;\n  background: #0f1f0f;\n  color: #ffb300;\n  border: 1px solid #3a5c3a;\n  border-radius: 4px;\n  padding: 12px;\n  font-family: inherit;\n  font-size: 0.92rem;\n  resize: vertical;\n  min-height: 110px;\n  line-height: 1.55;\n  transition: border-color 0.15s;\n}\n\n#rot-app textarea:focus {\n  outline: none;\n  border-color: #ffb300;\n}\n\n#rot-app textarea[readonly] {\n  color: #ffd54f;\n  cursor: default;\n}\n\n#rot-app .slider-wrap {\n  width: 100%;\n  margin-bottom: 14px;\n}\n\n#rot-app .slider-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 8px;\n}\n\n#rot-app input[type=range] {\n  -webkit-appearance: none;\n  appearance: none;\n  flex: 1;\n  height: 6px;\n  background: #2e4d2e;\n  border-radius: 3px;\n  outline: none;\n  cursor: pointer;\n}\n\n#rot-app input[type=range]::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  background: #ffb300;\n  cursor: pointer;\n  border: 2px solid #0f1f0f;\n}\n\n#rot-app input[type=range]::-moz-range-thumb {\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  background: #ffb300;\n  cursor: pointer;\n  border: 2px solid #0f1f0f;\n}\n\n#rot-app .shift-badge {\n  background: #ffb300;\n  color: #0f1f0f;\n  font-weight: 700;\n  border-radius: 4px;\n  padding: 2px 10px;\n  font-size: 1rem;\n  min-width: 38px;\n  text-align: center;\n}\n\n#rot-app .alpha-map {\n  font-size: 0.72rem;\n  letter-spacing: 0.04em;\n  color: #8fbc8f;\n  background: #0f1f0f;\n  border: 1px solid #2e4d2e;\n  border-radius: 4px;\n  padding: 7px 10px;\n  overflow-x: auto;\n  white-space: nowrap;\n  line-height: 1.8;\n}\n\n#rot-app .alpha-map span.hi {\n  color: #ffb300;\n  font-weight: 700;\n}\n\n#rot-app .section-label {\n  font-size: 0.72rem;\n  letter-spacing: 0.08em;\n  color: #8fbc8f;\n  margin-bottom: 4px;\n}\n\n#rot-app .copy-btn {\n  margin-top: 8px;\n  padding: 6px 18px;\n  font-size: 0.82rem;\n}\n\n#rot-app .copy-btn.copied {\n  background: #388e3c;\n  color: #fff;\n  border-color: #388e3c;\n}\n\n#rot-app .brute-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.8rem;\n  margin-top: 8px;\n}\n\n#rot-app .brute-table th {\n  background: #2e4d2e;\n  color: #ffd54f;\n  text-align: left;\n  padding: 5px 8px;\n  font-weight: 700;\n  letter-spacing: 0.06em;\n}\n\n#rot-app .brute-table td {\n  padding: 4px 8px;\n  border-bottom: 1px solid #1e3d1e;\n  color: #ffb300;\n  word-break: break-all;\n}\n\n#rot-app .brute-table tr:hover td {\n  background: #1e3d1e;\n}\n\n#rot-app .brute-table td:first-child {\n  color: #8fbc8f;\n  font-weight: 700;\n  width: 50px;\n  white-space: nowrap;\n}\n\n#rot-app .hidden {\n  display: none;\n}\n\n#rot-app .divider {\n  border: none;\n  border-top: 1px solid #2e4d2e;\n  margin: 18px 0;\n}\n\n#rot-app .mode-tag {\n  font-size: 0.7rem;\n  letter-spacing: 0.08em;\n  color: #8fbc8f;\n  background: #1e3d1e;\n  border-radius: 3px;\n  padding: 2px 8px;\n  margin-left: 6px;\n  vertical-align: middle;\n}\n\n#rot-app .freee-cta {\n  margin-top: 20px;\n  border: 1px solid #3a5c3a;\n  border-radius: 6px;\n  padding: 14px 18px;\n  background: #0f1f0f;\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  flex-wrap: wrap;\n}\n\n#rot-app .freee-cta-text {\n  flex: 1;\n  min-width: 200px;\n}\n\n#rot-app .freee-cta-text strong {\n  color: #ffd54f;\n  display: block;\n  margin-bottom: 4px;\n  font-size: 0.92rem;\n}\n\n#rot-app .freee-cta-text p {\n  font-size: 0.78rem;\n  color: #8fbc8f;\n  line-height: 1.5;\n}\n\n#rot-app .freee-cta a.freee-btn {\n  display: inline-block;\n  background: #ffb300;\n  color: #0f1f0f;\n  font-weight: 700;\n  border-radius: 4px;\n  padding: 9px 20px;\n  text-decoration: none;\n  font-size: 0.85rem;\n  white-space: nowrap;\n  border: none;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n\n#rot-app .freee-cta a.freee-btn:hover {\n  background: #ffd54f;\n}\n\u003c/style\u003e\n\u003cdiv id=\"rot-app\"\u003e\n\u003ch2\u003eROT13 / シーザー暗号 \u003cspan class=\"mode-tag\" id=\"modeTag\"\u003eROT13\u003c/span\u003e\u003c/h2\u003e\n\u003c!-- モード選択 --\u003e\n\u003cdiv class=\"row\"\u003e\n  \u003cdiv\u003e\n    \u003clabel\u003e暗号モード\u003c/label\u003e\n    \u003cdiv class=\"btn-group\"\u003e\n      \u003cbutton id=\"btnRot13\" data-active=\"true\" onclick=\"rotSetMode('rot13')\"\u003eROT13\u003c/button\u003e\n      \u003cbutton id=\"btnRot5\" onclick=\"rotSetMode('rot5')\"\u003eROT5\u003c/button\u003e\n      \u003cbutton id=\"btnRot47\" onclick=\"rotSetMode('rot47')\"\u003eROT47\u003c/button\u003e\n      \u003cbutton id=\"btnCaesar\" onclick=\"rotSetMode('caesar')\"\u003eシーザー\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003clabel\u003e方向\u003c/label\u003e\n    \u003cdiv class=\"btn-group\"\u003e\n      \u003cbutton id=\"btnEncode\" data-active=\"true\" onclick=\"rotSetDir('encode')\"\u003eエンコード\u003c/button\u003e\n      \u003cbutton id=\"btnDecode\" onclick=\"rotSetDir('decode')\"\u003eデコード\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv\u003e\n    \u003clabel\u003e表示\u003c/label\u003e\n    \u003cdiv class=\"btn-group\"\u003e\n      \u003cbutton id=\"btnNormal\" data-active=\"true\" onclick=\"rotSetView('normal')\"\u003e通常\u003c/button\u003e\n      \u003cbutton id=\"btnBrute\" onclick=\"rotSetView('brute')\"\u003e総当たり\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- シーザーシフトスライダー --\u003e\n\u003cdiv class=\"slider-wrap\" id=\"sliderWrap\" style=\"display:none\"\u003e\n  \u003cdiv class=\"slider-row\"\u003e\n    \u003clabel style=\"margin:0;white-space:nowrap\"\u003eシフト量\u003c/label\u003e\n    \u003cinput type=\"range\" id=\"shiftSlider\" min=\"1\" max=\"25\" value=\"13\" oninput=\"rotUpdateShift(this.value)\"\u003e\n    \u003cspan class=\"shift-badge\" id=\"shiftBadge\"\u003e13\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"alpha-map\" id=\"alphaMap\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 入力 --\u003e\n\u003cdiv class=\"section-label\"\u003e入力テキスト\u003c/div\u003e\n\u003ctextarea id=\"rotInput\" placeholder=\"ここにテキストを入力または貼り付けてください...\" oninput=\"rotProcess()\"\u003e\u003c/textarea\u003e\n\u003chr class=\"divider\"\u003e\n\u003c!-- 通常出力 --\u003e\n\u003cdiv id=\"normalView\"\u003e\n  \u003cdiv class=\"section-label\"\u003e出力テキスト\u003c/div\u003e\n  \u003ctextarea id=\"rotOutput\" readonly placeholder=\"変換結果がここに表示されます...\"\u003e\u003c/textarea\u003e\n  \u003cbutton class=\"copy-btn\" id=\"copyBtn\" onclick=\"rotCopy()\"\u003e出力をコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- 総当たり出力 --\u003e\n\u003cdiv id=\"bruteView\" class=\"hidden\"\u003e\n  \u003cdiv class=\"section-label\"\u003e総当たり — シーザー暗号 全25シフト一覧\u003c/div\u003e\n  \u003cdiv style=\"overflow-x:auto\"\u003e\n    \u003ctable class=\"brute-table\" id=\"bruteTable\"\u003e\n      \u003cthead\u003e\u003ctr\u003e\u003cth\u003eシフト\u003c/th\u003e\u003cth\u003e出力\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n      \u003ctbody id=\"bruteTbody\"\u003e\u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv class=\"freee-cta\"\u003e\n  \u003cdiv class=\"freee-cta-text\"\u003e\n    \u003cstrong\u003e会計・経費管理を自動化しませんか？\u003c/strong\u003e\n    \u003cp\u003efreeeなら請求書・領収書・確定申告をまとめてスマートに管理。業務効率化ツールと組み合わせて、時間を本業に集中させましょう。\u003c/p\u003e","title":"ROT13 / シーザー暗号 エンコーダー \u0026 デコーダー"},{"content":"※本ページにはアフィリエイト広告が含まれています。\n確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n年収・条件を入力してください 額面年収（円） 500万円 ボーナス月数（月分） 年齢（社会保険区分） 40歳未満（介護保険なし） 40〜64歳（介護保険あり） 65歳以上 扶養家族人数 0人（独身・扶養なし） 1人 2人 3人 4人以上 手取りを計算する 手取り年収（概算） — 月収手取り: — 賞与月手取り: — 手取り年収 — 控除合計 — 実質負担率 — 所得税 — 住民税 — 社会保険料計 — 内訳一覧 項目 年額 月額（概算） 年収の内訳 控除の内訳グラフ 確定申告・経費管理をもっとラクに\nfreee会計なら、手取り計算はもちろん、確定申告・経費精算までクラウドで一元管理。 freeeを無料で試す → 本ツールはあくまで目安の計算です。実際の手取り額は企業の給与規程・標準報酬月額の等級・各種控除・扶養控除の詳細等により異なります。正確な計算は給与明細や税理士にご確認ください。社会保険料率は協会けんぽ（東京・2024年度）を基準にしています。所得税は源泉徴収税額表の簡易計算を使用。住民税は前年所得ベースのため、転職初年度等は異なる場合があります。\n複利計算 → 複利計算ツール 住宅ローン → 住宅ローン計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 AIを使った副業の始め方完全ガイド【2026年版・月3万〜10万円を目指す】 フリーランスエンジニア年収相場完全ガイド2026年版 50代転職 AI活用準備ガイド2026 未経験からの完全ロードマップ ","permalink":"https://productivity-works.com/ja/tools/salary-calculator/","summary":"\u003cp\u003e※本ページにはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e確定申告・会計をもっとラクに？\u003c/strong\u003e \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計\u003c/a\u003e\n なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\u003c/p\u003e\n\u003cstyle\u003e\n#sc-app-ja,#sc-app-ja *,#sc-app-ja *::before,#sc-app-ja *::after{box-sizing:border-box}\n#sc-app-ja{font-family:-apple-system,BlinkMacSystemFont,'Hiragino Sans','Yu Gothic UI','Segoe UI',Roboto,sans-serif;max-width:700px;margin:0 auto;color:#1e293b;padding:4px 0}\n#sc-app-ja h2{font-size:1.05rem;font-weight:700;color:#0f172a;margin:0 0 16px}\n#sc-app-ja .sc-card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:22px 24px;margin-bottom:18px;box-shadow:0 1px 4px rgba(0,0,0,.06)}\n#sc-app-ja label{display:block;font-size:13px;font-weight:600;color:#475569;margin-bottom:6px;margin-top:14px}\n#sc-app-ja label:first-child{margin-top:0}\n#sc-app-ja input[type=number],#sc-app-ja input[type=range],#sc-app-ja select{font-family:inherit}\n#sc-app-ja input[type=number],#sc-app-ja select{width:100%;padding:9px 12px;border:1.5px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#f8fafc;transition:border-color .2s;-webkit-appearance:none;appearance:none}\n#sc-app-ja input[type=number]:focus,#sc-app-ja select:focus{outline:none;border-color:#3b82f6;background:#fff;box-shadow:0 0 0 3px rgba(59,130,246,.12)}\n#sc-app-ja input[type=range]{width:100%;accent-color:#3b82f6;cursor:pointer;margin-top:4px}\n#sc-app-ja .sc-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n@media(max-width:520px){#sc-app-ja .sc-row{grid-template-columns:1fr}}\n#sc-app-ja .sc-range-val{display:inline-block;font-size:20px;font-weight:800;color:#1d4ed8}\n#sc-app-ja .sc-btn{display:block;width:100%;margin-top:20px;padding:13px;background:linear-gradient(135deg,#1d4ed8 0%,#3b82f6 100%);color:#fff;font-size:15px;font-weight:700;border:none;border-radius:9px;cursor:pointer;transition:opacity .2s;letter-spacing:.02em}\n#sc-app-ja .sc-btn:hover{opacity:.88}\n#sc-app-ja .sc-hero{background:linear-gradient(135deg,#1d4ed8 0%,#3b82f6 100%);border-radius:12px;padding:28px 20px;color:#fff;text-align:center;margin-bottom:18px}\n#sc-app-ja .sc-hero-label{font-size:13px;opacity:.85;margin-bottom:6px;letter-spacing:.04em;font-weight:500}\n#sc-app-ja .sc-hero-amount{font-size:52px;font-weight:800;letter-spacing:-1px;line-height:1}\n#sc-app-ja .sc-hero-sub{margin-top:16px;display:flex;justify-content:center;gap:22px;flex-wrap:wrap;font-size:14px;opacity:.92}\n#sc-app-ja .sc-hero-sub span{font-weight:700}\n#sc-app-ja .sc-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:18px}\n@media(max-width:520px){#sc-app-ja .sc-stats{grid-template-columns:1fr 1fr}}\n#sc-app-ja .sc-stat{border-radius:10px;padding:14px 10px;text-align:center}\n#sc-app-ja .sc-stat-label{font-size:11px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.3px;margin-bottom:4px}\n#sc-app-ja .sc-stat-val{font-size:1.15rem;font-weight:800;color:#0f172a}\n#sc-app-ja table{width:100%;border-collapse:collapse;font-size:14px}\n#sc-app-ja th{background:#f1f5f9;text-align:left;padding:9px 12px;font-size:11px;font-weight:700;color:#64748b;letter-spacing:.3px}\n#sc-app-ja th:not(:first-child){text-align:right}\n#sc-app-ja td{padding:9px 12px;border-bottom:1px solid #f1f5f9;color:#334155}\n#sc-app-ja td:not(:first-child){text-align:right;font-weight:600}\n#sc-app-ja tr:last-child td{border-bottom:none}\n#sc-app-ja tr.sc-subtotal td{font-weight:700;color:#dc2626;background:#fff1f2}\n#sc-app-ja tr.sc-net td{font-weight:800;color:#15803d;background:#f0fdf4;font-size:15px}\n#sc-app-ja .sc-chart-wrap{display:flex;align-items:center;gap:20px;flex-wrap:wrap}\n#sc-app-ja canvas{flex-shrink:0}\n#sc-app-ja .sc-legend{flex:1;min-width:180px}\n#sc-app-ja .sc-legend-item{display:flex;align-items:center;gap:8px;margin-bottom:7px;font-size:13px;color:#334155}\n#sc-app-ja .sc-legend-swatch{width:12px;height:12px;border-radius:3px;flex-shrink:0}\n#sc-app-ja .sc-bar-wrap{display:flex;height:18px;border-radius:6px;overflow:hidden;margin:10px 0 8px}\n#sc-app-ja .sc-bar-legend{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;color:#475569}\n#sc-app-ja .sc-dot{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:middle}\n#sc-app-ja .sc-note{font-size:12px;color:#94a3b8;line-height:1.65;margin-top:14px;border-left:3px solid #e2e8f0;padding-left:12px}\n\u003c/style\u003e\n\u003cdiv id=\"sc-app-ja\"\u003e\n\u003cdiv class=\"sc-card\"\u003e\n  \u003ch2\u003e年収・条件を入力してください\u003c/h2\u003e\n\u003cp\u003e\u003clabel for=\"ja-gross-num\"\u003e額面年収（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"ja-gross-range\" min=\"1000000\" max=\"30000000\" step=\"100000\" value=\"5000000\"\u003e\u003c/p\u003e","title":"手取り計算ツール - 額面から手取りを即計算"},{"content":" 絵文字ピッカー 絵文字をクリックするだけでコピー。カテゴリー別・キーワード検索に対応。\n名前 Unicode HTML エンティティ カテゴリー 絵文字をコピー 肌の色: \u0026#x270B; \u0026#x270B; \u0026#x270B; \u0026#x270B; \u0026#x270B; すべて 顔・表情 人・体 動物・自然 食べ物・飲み物 旅行・乗り物 物・道具 記号・マーク 旗 最近使った絵文字 まだ使った絵文字はありません すべての絵文字 ビジネスの効率化にはfreee freeeを無料で試す\n","permalink":"https://productivity-works.com/ja/tools/emoji-picker/","summary":"\u003cdiv id=\"emoji-app\"\u003e\n\u003cstyle\u003e\n#emoji-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Noto Sans JP', Roboto, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 0 40px 0;\n  color: #f1f5f9;\n}\n\n#emoji-app * {\n  box-sizing: border-box;\n}\n\n.ep-hero {\n  background: linear-gradient(135deg, #78350f 0%, #92400e 40%, #b45309 100%);\n  border-radius: 16px;\n  padding: 36px 32px;\n  margin-bottom: 28px;\n  text-align: center;\n}\n\n.ep-hero h1 {\n  font-size: 2rem;\n  font-weight: 800;\n  color: #fef9c3;\n  margin: 0 0 8px 0;\n}\n\n.ep-hero p {\n  color: #fde68a;\n  margin: 0;\n  font-size: 1rem;\n}\n\n.ep-controls {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  margin-bottom: 20px;\n}\n\n.ep-search-row {\n  display: flex;\n  gap: 12px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n\n.ep-search {\n  flex: 1;\n  min-width: 200px;\n  padding: 10px 16px;\n  border-radius: 10px;\n  border: 2px solid #eab308;\n  background: #1e293b;\n  color: #f1f5f9;\n  font-size: 1rem;\n  outline: none;\n  transition: border-color 0.2s;\n}\n\n.ep-search::placeholder {\n  color: #64748b;\n}\n\n.ep-search:focus {\n  border-color: #fbbf24;\n}\n\n.ep-tone-label {\n  color: #fde68a;\n  font-size: 0.85rem;\n  font-weight: 600;\n  white-space: nowrap;\n}\n\n.ep-tone-buttons {\n  display: flex;\n  gap: 6px;\n}\n\n.ep-tone-btn {\n  width: 30px;\n  height: 30px;\n  border-radius: 50%;\n  border: 2px solid transparent;\n  cursor: pointer;\n  font-size: 1.1rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: #1e293b;\n  transition: border-color 0.2s, transform 0.1s;\n}\n\n.ep-tone-btn:hover {\n  transform: scale(1.15);\n}\n\n.ep-tone-btn.active {\n  border-color: #eab308;\n}\n\n.ep-tabs {\n  display: flex;\n  gap: 6px;\n  flex-wrap: wrap;\n  margin-bottom: 16px;\n}\n\n.ep-tab {\n  padding: 6px 14px;\n  border-radius: 20px;\n  border: 2px solid #334155;\n  background: #1e293b;\n  color: #94a3b8;\n  cursor: pointer;\n  font-size: 0.85rem;\n  font-weight: 600;\n  transition: all 0.2s;\n  white-space: nowrap;\n}\n\n.ep-tab:hover {\n  border-color: #eab308;\n  color: #fde68a;\n}\n\n.ep-tab.active {\n  background: #eab308;\n  border-color: #eab308;\n  color: #1e293b;\n}\n\n.ep-section-title {\n  font-size: 0.8rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #eab308;\n  margin: 0 0 10px 0;\n}\n\n.ep-recent {\n  background: #1e293b;\n  border-radius: 12px;\n  padding: 14px 16px;\n  margin-bottom: 16px;\n  border: 1px solid #334155;\n}\n\n.ep-recent-grid {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 4px;\n}\n\n.ep-grid {\n  background: #1e293b;\n  border-radius: 12px;\n  padding: 14px 16px;\n  border: 1px solid #334155;\n  margin-bottom: 16px;\n}\n\n.ep-emoji-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(44px, 1fr));\n  gap: 4px;\n}\n\n.ep-emoji-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 8px;\n  border: none;\n  background: transparent;\n  font-size: 1.5rem;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: background 0.15s, transform 0.1s;\n  line-height: 1;\n}\n\n.ep-emoji-btn:hover {\n  background: #334155;\n  transform: scale(1.2);\n}\n\n.ep-emoji-btn:active {\n  transform: scale(0.95);\n}\n\n.ep-info-panel {\n  background: #1e293b;\n  border-radius: 12px;\n  padding: 16px 20px;\n  border: 1px solid #eab308;\n  margin-bottom: 16px;\n  display: none;\n}\n\n.ep-info-panel.visible {\n  display: block;\n}\n\n.ep-info-emoji {\n  font-size: 3rem;\n  line-height: 1;\n  margin-bottom: 10px;\n  text-align: center;\n}\n\n.ep-info-rows {\n  display: grid;\n  grid-template-columns: auto 1fr;\n  gap: 6px 12px;\n  font-size: 0.875rem;\n}\n\n.ep-info-label {\n  color: #eab308;\n  font-weight: 700;\n}\n\n.ep-info-value {\n  color: #cbd5e1;\n  font-family: monospace;\n  word-break: break-all;\n}\n\n.ep-copy-btn {\n  display: block;\n  width: 100%;\n  margin-top: 12px;\n  padding: 10px;\n  background: #eab308;\n  color: #1e293b;\n  border: none;\n  border-radius: 8px;\n  font-size: 1rem;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n\n.ep-copy-btn:hover {\n  background: #fbbf24;\n}\n\n.ep-empty {\n  text-align: center;\n  color: #475569;\n  padding: 32px 0;\n  font-size: 1rem;\n}\n\n.ep-toast {\n  position: fixed;\n  bottom: 32px;\n  left: 50%;\n  transform: translateX(-50%) translateY(20px);\n  background: #eab308;\n  color: #1e293b;\n  padding: 10px 24px;\n  border-radius: 50px;\n  font-weight: 700;\n  font-size: 0.95rem;\n  opacity: 0;\n  transition: opacity 0.3s, transform 0.3s;\n  pointer-events: none;\n  z-index: 9999;\n  white-space: nowrap;\n}\n\n.ep-toast.show {\n  opacity: 1;\n  transform: translateX(-50%) translateY(0);\n}\n\n.ep-no-recent {\n  color: #475569;\n  font-size: 0.85rem;\n  font-style: italic;\n}\n\n@media (max-width: 600px) {\n  .ep-hero h1 { font-size: 1.4rem; }\n  .ep-emoji-grid { grid-template-columns: repeat(auto-fill, minmax(40px, 1fr)); }\n  .ep-emoji-btn { width: 40px; height: 40px; font-size: 1.3rem; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"ep-hero\"\u003e\n  \u003ch1\u003e絵文字ピッカー\u003c/h1\u003e\n  \u003cp\u003e絵文字をクリックするだけでコピー。カテゴリー別・キーワード検索に対応。\u003c/p\u003e","title":"絵文字ピッカー - 無料で絵文字をコピー・検索"},{"content":" ウォーターマークジェネレーター 画像をアップロードし、テキスト透かし（フォント・サイズ・色・透明度・位置・角度）をカスタマイズしてPNGでダウンロード。登録不要・サーバー送信なし。ブラウザ完結で安心。\n🖼️ 画像をここにドロップ またはクリックして選択 \u0026mdash; JPG / PNG / GIF / WebP 対応\n透かしテキスト設定 透かしテキスト フォントサイズ (px) 36 フォント Arial Georgia Times New Roman Courier New Verdana Impact Trebuchet MS Palatino テキストカラー 不透明度 (%) 50% 回転角度 (deg) -30° 位置・タイル設定 表示位置（単体） 左上 上中央 右上 左中 中央 右中 左下 下中央 右下 繰り返し（タイル） 画像全体にタイル表示 タイル間隔 (px) 150 \u0026#8595; PNGでダウンロード 別の画像を使う 関連ツール 画像を指定サイズにリサイズ → 画像リサイザー Instagram風フィルターを適用 → 写真フィルター プレースホルダー画像を生成 → プレースホルダー画像 個人事業主・フリーランスの会計をもっとかんたんに\n写真・デザイン素材の販売や制作を仕事にされている方。freee会計で帳簿・確定申告をまるっと効率化しませんか？\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/watermark-generator/","summary":"\u003cdiv id=\"wm-app\"\u003e\n\u003cstyle\u003e\n#wm-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Yu Gothic UI', Roboto, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 0 48px 0;\n  color: #1a202c;\n}\n\n#wm-app * {\n  box-sizing: border-box;\n}\n\n/* Hero */\n.wm-hero {\n  background: linear-gradient(135deg, #0369a1 0%, #0284c7 50%, #0ea5e9 100%);\n  border-radius: 16px;\n  padding: 32px 28px;\n  margin-bottom: 24px;\n  color: #fff;\n}\n\n.wm-hero h2 {\n  margin: 0 0 6px 0;\n  font-size: 22px;\n  font-weight: 800;\n}\n\n.wm-hero p {\n  margin: 0;\n  font-size: 14px;\n  opacity: 0.88;\n  line-height: 1.7;\n}\n\n/* Drop Zone */\n.wm-dropzone {\n  border: 3px dashed #0369a1;\n  border-radius: 14px;\n  padding: 48px 24px;\n  text-align: center;\n  background: #f0f9ff;\n  cursor: pointer;\n  transition: background 0.2s, border-color 0.2s;\n  margin-bottom: 24px;\n}\n\n.wm-dropzone:hover,\n.wm-dropzone.wm-drag-over {\n  background: #e0f2fe;\n  border-color: #0284c7;\n}\n\n.wm-dropzone-icon {\n  font-size: 48px;\n  margin-bottom: 12px;\n}\n\n.wm-dropzone h3 {\n  margin: 0 0 6px 0;\n  font-size: 17px;\n  font-weight: 700;\n  color: #0c4a6e;\n}\n\n.wm-dropzone p {\n  margin: 0;\n  font-size: 13px;\n  color: #0369a1;\n}\n\n/* Editor layout */\n.wm-editor {\n  display: none;\n}\n\n.wm-editor.wm-visible {\n  display: block;\n}\n\n.wm-canvas-wrap {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 14px;\n  padding: 16px;\n  margin-bottom: 20px;\n  text-align: center;\n  overflow: auto;\n}\n\n#wm-canvas {\n  max-width: 100%;\n  border-radius: 8px;\n  box-shadow: 0 4px 20px rgba(0,0,0,0.12);\n  display: block;\n  margin: 0 auto;\n}\n\n/* Controls panel */\n.wm-panel {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 14px;\n  padding: 24px;\n  margin-bottom: 20px;\n}\n\n.wm-panel h3 {\n  margin: 0 0 16px 0;\n  font-size: 15px;\n  font-weight: 700;\n  color: #0c4a6e;\n  border-bottom: 2px solid #e0f2fe;\n  padding-bottom: 8px;\n}\n\n.wm-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n}\n\n@media (max-width: 600px) {\n  .wm-grid {\n    grid-template-columns: 1fr;\n  }\n}\n\n.wm-field {\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n}\n\n.wm-field.wm-full {\n  grid-column: 1 / -1;\n}\n\n.wm-field label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #374151;\n  letter-spacing: 0.02em;\n}\n\n.wm-field input[type=\"text\"],\n.wm-field input[type=\"number\"],\n.wm-field select {\n  padding: 8px 10px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  font-size: 14px;\n  color: #1a202c;\n  background: #fff;\n  transition: border-color 0.2s;\n  width: 100%;\n  font-family: inherit;\n}\n\n.wm-field input[type=\"text\"]:focus,\n.wm-field input[type=\"number\"]:focus,\n.wm-field select:focus {\n  outline: none;\n  border-color: #0369a1;\n}\n\n.wm-range-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n.wm-range-row input[type=\"range\"] {\n  flex: 1;\n  accent-color: #0369a1;\n}\n\n.wm-range-val {\n  font-size: 13px;\n  font-weight: 700;\n  color: #0369a1;\n  min-width: 40px;\n  text-align: right;\n}\n\n.wm-color-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n.wm-color-row input[type=\"color\"] {\n  width: 42px;\n  height: 36px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  padding: 2px;\n  cursor: pointer;\n  background: #fff;\n}\n\n.wm-color-row input[type=\"text\"] {\n  flex: 1;\n  padding: 8px 10px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  font-size: 14px;\n  color: #1a202c;\n}\n\n/* Position grid */\n.wm-pos-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 6px;\n}\n\n.wm-pos-btn {\n  padding: 8px 4px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 8px;\n  background: #fff;\n  font-size: 11px;\n  color: #374151;\n  cursor: pointer;\n  transition: all 0.15s;\n  text-align: center;\n  font-weight: 600;\n  font-family: inherit;\n}\n\n.wm-pos-btn:hover {\n  border-color: #0369a1;\n  background: #f0f9ff;\n  color: #0369a1;\n}\n\n.wm-pos-btn.wm-pos-active {\n  border-color: #0369a1;\n  background: #0369a1;\n  color: #fff;\n}\n\n/* Toggle */\n.wm-toggle-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n.wm-toggle {\n  position: relative;\n  width: 44px;\n  height: 24px;\n  flex-shrink: 0;\n}\n\n.wm-toggle input {\n  opacity: 0;\n  width: 0;\n  height: 0;\n}\n\n.wm-toggle-slider {\n  position: absolute;\n  inset: 0;\n  background: #d1d5db;\n  border-radius: 24px;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n\n.wm-toggle-slider::before {\n  content: '';\n  position: absolute;\n  width: 18px;\n  height: 18px;\n  left: 3px;\n  top: 3px;\n  background: #fff;\n  border-radius: 50%;\n  transition: transform 0.2s;\n}\n\n.wm-toggle input:checked + .wm-toggle-slider {\n  background: #0369a1;\n}\n\n.wm-toggle input:checked + .wm-toggle-slider::before {\n  transform: translateX(20px);\n}\n\n.wm-toggle-label {\n  font-size: 13px;\n  color: #374151;\n  font-weight: 600;\n}\n\n/* Actions */\n.wm-actions {\n  display: flex;\n  gap: 12px;\n  flex-wrap: wrap;\n}\n\n.wm-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 11px 22px;\n  border-radius: 10px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  border: none;\n  transition: all 0.18s;\n  text-decoration: none;\n  font-family: inherit;\n}\n\n.wm-btn-primary {\n  background: #0369a1;\n  color: #fff;\n}\n\n.wm-btn-primary:hover {\n  background: #0284c7;\n  transform: translateY(-1px);\n  box-shadow: 0 4px 12px rgba(3,105,161,0.3);\n}\n\n.wm-btn-secondary {\n  background: #f1f5f9;\n  color: #374151;\n  border: 1.5px solid #d1d5db;\n}\n\n.wm-btn-secondary:hover {\n  background: #e2e8f0;\n}\n\u003c/style\u003e\n\u003cdiv class=\"wm-hero\"\u003e\n  \u003ch2\u003eウォーターマークジェネレーター\u003c/h2\u003e\n  \u003cp\u003e画像をアップロードし、テキスト透かし（フォント・サイズ・色・透明度・位置・角度）をカスタマイズしてPNGでダウンロード。登録不要・サーバー送信なし。ブラウザ完結で安心。\u003c/p\u003e","title":"ウォーターマークジェネレーター"},{"content":"※本記事にはアフィリエイト広告が含まれています。\nつみたてNISA / 新NISA 資産シミュレーター 毎月の積立額・想定利回り・運用年数を入力するだけで、将来の資産額と非課税メリットを自動計算します。\n毎月の積立額（円） 1,000円30,000円100,000円 想定年利回り（%） 1%5.0%10% 運用年数 1年20年30年 将来の資産額（税引前） 12,331,010円 元本合計 7,200,000円 運用益 5,131,010円 非課税メリット 1,041,878円 計算条件: 毎月定額積立、年利複利計算。NISA非課税枠で運用した場合の節税額は運用益の20.315%。実際の投資成果は市場状況により変動します。 この結果から次のアクションへ シミュレーション結果を見て、NISAを始めたくなりましたか？\n証券口座をまだお持ちでない方 → 楽天証券で口座開設する SBI証券と楽天証券で迷っている方 → SBI証券 vs 楽天証券 徹底比較2026 NISAの始め方を知りたい方 → 新NISA始め方 初心者向け完全ガイド おすすめ銘柄を知りたい方 → NISAおすすめ銘柄2026 よくある質問 Q. このシミュレーターの計算は正確ですか？ 月次複利計算に基づく理論値です。実際の投資では市場変動があるため、これはあくまで参考値です。\nQ. 年利5%は現実的ですか？ S\u0026amp;P500の過去30年平均リターンは年約10%、全世界株式は年約7-8%です。手数料を引いて5-7%が保守的な想定です。\nQ. NISAの非課税枠はいくらまでですか？ 新NISAでは年間360万円（つみたて投資枠120万円 + 成長投資枠240万円）、生涯非課税保有限度額は1,800万円です。\n関連ツール・記事 FIREシミュレーター — FIRE（経済的自立）までの年数を計算 iDeCo節税シミュレーター — iDeCoの節税額と将来受取額を計算 年金シミュレーター — 将来の年金受給額を確認 手取り計算シミュレーター — 年収から手取りを計算 教育費シミュレーター — 子供の教育費総額を自動計算 積立NISAは毎月いくら？平均と最適額 NISAとiDeCo、どちらを先に始めるべき？ 投資信託おすすめ2026年版 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 NISAで運用しながらFXもできる？税金の仕組みを比較してわかりやすく解説 新NISA始め方2026年版【初心者向け完全ガイド】口座開設から投資スタートまで 新NISA おすすめ銘柄 初心者向け完全ガイド【2026年最新版】 ","permalink":"https://productivity-works.com/ja/tools/nisa-simulator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"つみたてnisa--新nisa-資産シミュレーター\"\u003eつみたてNISA / 新NISA 資産シミュレーター\u003c/h1\u003e\n\u003cp\u003e毎月の積立額・想定利回り・運用年数を入力するだけで、\u003cstrong\u003e将来の資産額\u003c/strong\u003eと\u003cstrong\u003e非課税メリット\u003c/strong\u003eを自動計算します。\u003c/p\u003e\n\u003cdiv id=\"nisa-simulator\" style=\"max-width:640px;margin:0 auto;padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e毎月の積立額（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"monthly\" min=\"1000\" max=\"100000\" step=\"1000\" value=\"30000\" oninput=\"calc()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1,000円\u003c/span\u003e\u003cspan id=\"monthlyVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e30,000円\u003c/span\u003e\u003cspan\u003e100,000円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e想定年利回り（%）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"rate\" min=\"1\" max=\"10\" step=\"0.5\" value=\"5\" oninput=\"calc()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1%\u003c/span\u003e\u003cspan id=\"rateVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e5.0%\u003c/span\u003e\u003cspan\u003e10%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:24px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e運用年数\u003c/label\u003e\n\u003cinput type=\"range\" id=\"years\" min=\"1\" max=\"30\" step=\"1\" value=\"20\" oninput=\"calc()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1年\u003c/span\u003e\u003cspan id=\"yearsVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e20年\u003c/span\u003e\u003cspan\u003e30年\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#1e40af;color:white;border-radius:8px;padding:20px;text-align:center;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:14px;margin-bottom:4px;\"\u003e将来の資産額（税引前）\u003c/div\u003e\n\u003cdiv id=\"totalAsset\" style=\"font-size:36px;font-weight:bold;\"\u003e12,331,010円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"background:#e0f2fe;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e元本合計\u003c/div\u003e\n\u003cdiv id=\"principal\" style=\"font-size:16px;font-weight:bold;color:#0369a1;\"\u003e7,200,000円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#dcfce7;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e運用益\u003c/div\u003e\n\u003cdiv id=\"profit\" style=\"font-size:16px;font-weight:bold;color:#15803d;\"\u003e5,131,010円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#fef9c3;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e非課税メリット\u003c/div\u003e\n\u003cdiv id=\"taxSaved\" style=\"font-size:16px;font-weight:bold;color:#a16207;\"\u003e1,041,878円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f1f5f9;border-radius:8px;padding:12px;font-size:13px;color:#475569;\"\u003e\n\u003cstrong\u003e計算条件:\u003c/strong\u003e 毎月定額積立、年利複利計算。NISA非課税枠で運用した場合の節税額は運用益の20.315%。実際の投資成果は市場状況により変動します。\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction calc(){\n  var m=parseInt(document.getElementById('monthly').value);\n  var r=parseFloat(document.getElementById('rate').value)/100;\n  var y=parseInt(document.getElementById('years').value);\n  var mr=r/12;\n  var n=y*12;\n  var fv=m*((Math.pow(1+mr,n)-1)/mr);\n  var p=m*n;\n  var g=fv-p;\n  var tax=Math.floor(g*0.20315);\n  document.getElementById('monthlyVal').textContent=m.toLocaleString()+'円';\n  document.getElementById('rateVal').textContent=(r*100).toFixed(1)+'%';\n  document.getElementById('yearsVal').textContent=y+'年';\n  document.getElementById('totalAsset').textContent=Math.floor(fv).toLocaleString()+'円';\n  document.getElementById('principal').textContent=p.toLocaleString()+'円';\n  document.getElementById('profit').textContent=Math.floor(g).toLocaleString()+'円';\n  document.getElementById('taxSaved').textContent=tax.toLocaleString()+'円';\n}\ncalc();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"この結果から次のアクションへ\"\u003eこの結果から次のアクションへ\u003c/h2\u003e\n\u003cp\u003eシミュレーション結果を見て、NISAを始めたくなりましたか？\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e証券口座をまだお持ちでない方\u003c/strong\u003e → \u003ca href=\"https://hb.afl.rakuten.co.jp/hsc/41ab8a31.8f450617.41ab8a32.86e006c4/?link_type=hybrid_url\u0026amp;ut=eyJwYWdlIjoic2hvcCIsInR5cGUiOiJoeWJyaWRfdXJsIiwiY29sIjoxLCJjYXQiOiIxIiwiYmFuIjoiMTI0NjkzOSIsImFtcCI6ZmFsc2V9\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e楽天証券で口座開設する\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSBI証券と楽天証券で迷っている方\u003c/strong\u003e → \u003ca href=\"https://productivity-works.com/ja/posts/sbi-rakuten-hikaku-2026/\"\u003eSBI証券 vs 楽天証券 徹底比較2026\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNISAの始め方を知りたい方\u003c/strong\u003e → \u003ca href=\"https://productivity-works.com/ja/posts/shin-nisa-hajimekata-shoshinsha-2026/\"\u003e新NISA始め方 初心者向け完全ガイド\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eおすすめ銘柄を知りたい方\u003c/strong\u003e → \u003ca href=\"https://productivity-works.com/ja/posts/nisa-osusume-meigara-2026/\"\u003eNISAおすすめ銘柄2026\u003c/a\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"よくある質問\"\u003eよくある質問\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eQ. このシミュレーターの計算は正確ですか？\u003c/strong\u003e\n月次複利計算に基づく理論値です。実際の投資では市場変動があるため、これはあくまで参考値です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eQ. 年利5%は現実的ですか？\u003c/strong\u003e\nS\u0026amp;P500の過去30年平均リターンは年約10%、全世界株式は年約7-8%です。手数料を引いて5-7%が保守的な想定です。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eQ. NISAの非課税枠はいくらまでですか？\u003c/strong\u003e\n新NISAでは年間360万円（つみたて投資枠120万円 + 成長投資枠240万円）、生涯非課税保有限度額は1,800万円です。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール記事\"\u003e関連ツール・記事\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/tools/fire-simulator/\"\u003eFIREシミュレーター\u003c/a\u003e\n — FIRE（経済的自立）までの年数を計算\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/tools/ideco-simulator/\"\u003eiDeCo節税シミュレーター\u003c/a\u003e\n — iDeCoの節税額と将来受取額を計算\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/tools/nenkin-simulator/\"\u003e年金シミュレーター\u003c/a\u003e\n — 将来の年金受給額を確認\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/tools/salary-tedori-calculator/\"\u003e手取り計算シミュレーター\u003c/a\u003e\n — 年収から手取りを計算\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/tools/kyouikuhi-simulator/\"\u003e教育費シミュレーター\u003c/a\u003e\n — 子供の教育費総額を自動計算\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/posts/%e7%a9%8d%e7%ab%8bnisa-%e6%af%8e%e6%9c%88%e3%81%84%e3%81%8f%e3%82%89-%e5%b9%b3%e5%9d%87/\"\u003e積立NISAは毎月いくら？平均と最適額\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/posts/nisa-ideco-docchi-saki/\"\u003eNISAとiDeCo、どちらを先に始めるべき？\u003c/a\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://productivity-works.com/ja/posts/toushishintaku-osusume-2026/\"\u003e投資信託おすすめ2026年版\u003c/a\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e確定申告・会計をもっとラクに？\u003c/strong\u003e \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ\u0026#43;7YYYCY\u0026#43;3SPO\u0026#43;9FHKUP\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efreee会計\u003c/a\u003e\n なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\u003c/p\u003e","title":"つみたてNISAシミュレーター｜将来の資産額を無料で計算"},{"content":" SVG\u0026#x2192;PNG 変換ツール SVGファイルをアップロードするか、SVGコードを貼り付けて、スケールや背景を設定し、高解像度のPNGをダウンロードできます。すべてブラウザ上で処理されるため、ファイルがサーバーに送信されることはありません。\nSVGを入力\n\u0026lt;div class=\u0026quot;sp-dropzone\u0026quot; id=\u0026quot;sp-dropzone\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sp-dropzone-icon\u0026quot;\u0026gt;\u0026amp;#9653;\u0026lt;/div\u0026gt; \u0026lt;p class=\u0026quot;sp-dropzone-text\u0026quot;\u0026gt;SVGファイルをドロップ\u0026lt;/p\u0026gt; \u0026lt;p class=\u0026quot;sp-dropzone-sub\u0026quot;\u0026gt;またはクリックして選択\u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;file\u0026quot; id=\u0026quot;sp-file-input\u0026quot; accept=\u0026quot;.svg,image/svg+xml\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sp-field\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;sp-label\u0026quot; for=\u0026quot;sp-code\u0026quot;\u0026gt;またはSVGコードを貼り付け\u0026lt;/label\u0026gt; \u0026lt;textarea id=\u0026quot;sp-code\u0026quot; class=\u0026quot;sp-textarea\u0026quot; placeholder=\u0026quot;\u0026lt;svg xmlns=\u0026amp;quot;http://www.w3.org/2000/svg\u0026amp;quot; ...\u0026gt;\u0026amp;#10; ...\u0026amp;#10;\u0026lt;/svg\u0026gt;\u0026quot;\u0026gt;\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;sp-btn-secondary\u0026quot; id=\u0026quot;sp-load-sample\u0026quot; style=\u0026quot;margin-top:10px;\u0026quot;\u0026gt;サンプルSVGを読み込む\u0026lt;/button\u0026gt; 設定\n\u0026lt;div class=\u0026quot;sp-field\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;sp-label\u0026quot;\u0026gt;スケール（Retina対応）\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;sp-scale-row\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;sp-scale-btn active\u0026quot; data-scale=\u0026quot;1\u0026quot;\u0026gt;1x\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;sp-scale-btn\u0026quot; data-scale=\u0026quot;2\u0026quot;\u0026gt;2x\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;sp-scale-btn\u0026quot; data-scale=\u0026quot;3\u0026quot;\u0026gt;3x\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;sp-scale-btn\u0026quot; data-scale=\u0026quot;4\u0026quot;\u0026gt;4x\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sp-field\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;sp-label\u0026quot;\u0026gt;出力サイズ（px）\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;sp-dim-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;sp-width\u0026quot; class=\u0026quot;sp-input\u0026quot; placeholder=\u0026quot;幅\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;8000\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;sp-lock-btn locked\u0026quot; id=\u0026quot;sp-lock-btn\u0026quot; title=\u0026quot;アスペクト比を固定\u0026quot;\u0026gt;\u0026amp;#128274;\u0026lt;/button\u0026gt; \u0026lt;input type=\u0026quot;number\u0026quot; id=\u0026quot;sp-height\u0026quot; class=\u0026quot;sp-input\u0026quot; placeholder=\u0026quot;高さ\u0026quot; min=\u0026quot;1\u0026quot; max=\u0026quot;8000\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p style=\u0026quot;font-size:11px;color:#9ca3af;margin:2px 0 0 0;\u0026quot;\u0026gt;空欄の場合はSVGの元サイズ×スケールで出力\u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sp-field\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;sp-label\u0026quot;\u0026gt;背景\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;sp-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;sp-bg-color\u0026quot; class=\u0026quot;sp-color-input\u0026quot; value=\u0026quot;#ffffff\u0026quot; title=\u0026quot;背景色\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;sp-transparent-btn active\u0026quot; id=\u0026quot;sp-transparent-btn\u0026quot;\u0026gt;透明\u0026lt;/button\u0026gt; \u0026lt;span style=\u0026quot;font-size:12px;color:#6b7280;flex:1;\u0026quot; id=\u0026quot;sp-bg-label\u0026quot;\u0026gt;透明PNG\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; プレビュー \u0026amp; ダウンロード\nここにSVGのプレビューが表示されます\n出力サイズ: — \u0026times; — px 推定ファイルサイズ: — スケール: 1x 変換してPNGをダウンロード\n使い方 SVGファイルをアップロードするか、SVGコードをテキストエリアに貼り付けます。 スケール倍率を選択します（高解像度出力には2x・3xがおすすめです）。 必要に応じて幅・高さを指定できます。鍵マークでアスペクト比を固定できます。 背景色を指定するか、「透明」のままにします。 「変換してPNGをダウンロード」をクリックすると、CanvasでSVGをレンダリングしてPNG保存します。 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; プレースホルダー画像 → プレースホルダー画像生成 画像リサイズ → 画像リサイズツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 無料AI画像生成ツール比較2026年版【目的別おすすめランキング】 ","permalink":"https://productivity-works.com/ja/tools/svg-to-png/","summary":"\u003cdiv id=\"sp-app\"\u003e\n\u003cstyle\u003e\n#sp-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Yu Gothic UI', Meiryo, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 0 48px 0;\n  color: #1a202c;\n}\n\n#sp-app * {\n  box-sizing: border-box;\n}\n\n/* Hero */\n.sp-hero {\n  background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 50%, #4c1d95 100%);\n  border-radius: 16px;\n  padding: 32px 28px;\n  margin-bottom: 24px;\n  color: #fff;\n}\n\n.sp-hero h2 {\n  margin: 0 0 6px 0;\n  font-size: 24px;\n  font-weight: 800;\n}\n\n.sp-hero p {\n  margin: 0;\n  font-size: 14px;\n  opacity: 0.88;\n  line-height: 1.7;\n}\n\n/* Layout */\n.sp-layout {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n  margin-bottom: 20px;\n}\n\n@media (max-width: 640px) {\n  .sp-layout {\n    grid-template-columns: 1fr;\n  }\n}\n\n/* Panels */\n.sp-panel {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n}\n\n.sp-panel-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #6d28d9;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin: 0 0 14px 0;\n}\n\n/* Drop Zone */\n.sp-dropzone {\n  border: 3px dashed #7c3aed;\n  border-radius: 12px;\n  padding: 36px 20px;\n  text-align: center;\n  background: #faf5ff;\n  cursor: pointer;\n  transition: background 0.2s, border-color 0.2s;\n  margin-bottom: 14px;\n}\n\n.sp-dropzone:hover,\n.sp-dropzone.sp-drag-over {\n  background: #ede9fe;\n  border-color: #6d28d9;\n}\n\n.sp-dropzone-icon {\n  font-size: 36px;\n  margin-bottom: 10px;\n}\n\n.sp-dropzone-text {\n  font-size: 15px;\n  font-weight: 600;\n  color: #4c1d95;\n  margin: 0 0 4px 0;\n}\n\n.sp-dropzone-sub {\n  font-size: 12px;\n  color: #7c3aed;\n  margin: 0;\n}\n\n/* Textarea */\n.sp-textarea {\n  width: 100%;\n  min-height: 140px;\n  border: 1.5px solid #d8b4fe;\n  border-radius: 8px;\n  padding: 10px 12px;\n  font-family: 'Menlo', 'Monaco', 'Courier New', monospace;\n  font-size: 12px;\n  color: #1a202c;\n  background: #fdfbff;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.2s;\n}\n\n.sp-textarea:focus {\n  border-color: #7c3aed;\n}\n\n/* Controls */\n.sp-controls {\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n}\n\n.sp-field {\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n}\n\n.sp-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #374151;\n}\n\n.sp-select,\n.sp-input {\n  border: 1.5px solid #d1d5db;\n  border-radius: 7px;\n  padding: 8px 10px;\n  font-size: 13px;\n  color: #1a202c;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.2s;\n  width: 100%;\n}\n\n.sp-select:focus,\n.sp-input:focus {\n  border-color: #7c3aed;\n}\n\n.sp-dim-row {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n}\n\n.sp-dim-row .sp-input {\n  flex: 1;\n}\n\n.sp-lock-btn {\n  background: #ede9fe;\n  border: 1.5px solid #c4b5fd;\n  border-radius: 7px;\n  width: 34px;\n  height: 34px;\n  cursor: pointer;\n  font-size: 16px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  transition: background 0.15s;\n}\n\n.sp-lock-btn:hover {\n  background: #ddd6fe;\n}\n\n.sp-lock-btn.locked {\n  background: #7c3aed;\n  border-color: #7c3aed;\n  color: #fff;\n}\n\n.sp-color-row {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n}\n\n.sp-color-input {\n  width: 40px;\n  height: 34px;\n  padding: 2px 3px;\n  border: 1.5px solid #d1d5db;\n  border-radius: 7px;\n  cursor: pointer;\n  flex-shrink: 0;\n}\n\n.sp-transparent-btn {\n  padding: 6px 12px;\n  font-size: 12px;\n  font-weight: 600;\n  border: 1.5px solid #d1d5db;\n  border-radius: 7px;\n  background: #fff;\n  cursor: pointer;\n  color: #374151;\n  transition: all 0.15s;\n}\n\n.sp-transparent-btn.active {\n  background: #7c3aed;\n  border-color: #7c3aed;\n  color: #fff;\n}\n\n/* Scale pills */\n.sp-scale-row {\n  display: flex;\n  gap: 6px;\n}\n\n.sp-scale-btn {\n  flex: 1;\n  padding: 7px 0;\n  border: 1.5px solid #d1d5db;\n  border-radius: 7px;\n  background: #fff;\n  font-size: 12px;\n  font-weight: 700;\n  color: #374151;\n  cursor: pointer;\n  transition: all 0.15s;\n  text-align: center;\n}\n\n.sp-scale-btn:hover {\n  border-color: #7c3aed;\n  color: #7c3aed;\n}\n\n.sp-scale-btn.active {\n  background: #7c3aed;\n  border-color: #7c3aed;\n  color: #fff;\n}\n\n/* Preview */\n.sp-preview-wrap {\n  background: repeating-conic-gradient(#e5e7eb 0% 25%, #fff 0% 50%) 0 0 / 16px 16px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  min-height: 200px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  overflow: hidden;\n  margin-bottom: 16px;\n  position: relative;\n}\n\n.sp-preview-wrap img {\n  max-width: 100%;\n  max-height: 300px;\n  display: block;\n}\n\n.sp-preview-placeholder {\n  text-align: center;\n  color: #9ca3af;\n  padding: 40px 20px;\n}\n\n.sp-preview-placeholder svg {\n  opacity: 0.3;\n  margin-bottom: 10px;\n}\n\n.sp-preview-placeholder p {\n  margin: 0;\n  font-size: 13px;\n}\n\n/* Info bar */\n.sp-info-bar {\n  display: flex;\n  gap: 12px;\n  flex-wrap: wrap;\n  margin-bottom: 16px;\n}\n\n.sp-info-chip {\n  background: #f3f4f6;\n  border-radius: 6px;\n  padding: 4px 10px;\n  font-size: 12px;\n  color: #374151;\n  font-weight: 500;\n}\n\n.sp-info-chip span {\n  color: #7c3aed;\n  font-weight: 700;\n}\n\n/* Buttons */\n.sp-btn-primary {\n  display: block;\n  width: 100%;\n  padding: 13px;\n  background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%);\n  color: #fff;\n  font-size: 15px;\n  font-weight: 700;\n  border: none;\n  border-radius: 10px;\n  cursor: pointer;\n  transition: opacity 0.15s, transform 0.1s;\n  text-align: center;\n}\n\n.sp-btn-primary:hover {\n  opacity: 0.9;\n}\n\n.sp-btn-primary:active {\n  transform: scale(0.98);\n}\n\n.sp-btn-primary:disabled {\n  background: #9ca3af;\n  cursor: not-allowed;\n  transform: none;\n}\n\n.sp-btn-secondary {\n  display: block;\n  width: 100%;\n  padding: 10px;\n  background: #fff;\n  color: #7c3aed;\n  font-size: 13px;\n  font-weight: 600;\n  border: 1.5px solid #7c3aed;\n  border-radius: 10px;\n  cursor: pointer;\n  transition: background 0.15s;\n  text-align: center;\n  margin-top: 8px;\n}\n\n.sp-btn-secondary:hover {\n  background: #faf5ff;\n}\n\n/* Error */\n.sp-error {\n  background: #fef2f2;\n  border: 1.5px solid #fca5a5;\n  border-radius: 8px;\n  padding: 10px 14px;\n  font-size: 13px;\n  color: #dc2626;\n  margin-bottom: 14px;\n  display: none;\n}\n\n/* File name */\n.sp-filename {\n  font-size: 12px;\n  color: #6b7280;\n  text-align: center;\n  margin-bottom: 8px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n/* Canvas (hidden) */\n#sp-canvas {\n  display: none;\n}\n\n/* How it works */\n.sp-how {\n  background: #faf5ff;\n  border: 1.5px solid #e9d5ff;\n  border-radius: 12px;\n  padding: 20px 24px;\n  margin-top: 24px;\n}\n\n.sp-how h3 {\n  margin: 0 0 12px 0;\n  font-size: 15px;\n  font-weight: 700;\n  color: #4c1d95;\n}\n\n.sp-how ol {\n  margin: 0;\n  padding-left: 20px;\n}\n\n.sp-how li {\n  font-size: 13px;\n  color: #374151;\n  line-height: 1.8;\n}\n\u003c/style\u003e\n\u003cdiv class=\"sp-hero\"\u003e\n  \u003ch2\u003eSVG\u0026#x2192;PNG 変換ツール\u003c/h2\u003e\n  \u003cp\u003eSVGファイルをアップロードするか、SVGコードを貼り付けて、スケールや背景を設定し、高解像度のPNGをダウンロードできます。すべてブラウザ上で処理されるため、ファイルがサーバーに送信されることはありません。\u003c/p\u003e","title":"SVG→PNG変換ツール"},{"content":" カンバンボード \u0026#8599; 取込 \u0026#8600; 書き出し ＋ カラム追加 カードを追加 タイトル 説明（任意） 優先度（色ラベル） キャンセル 保存 削除しますか？ キャンセル 削除 事業のタスク・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 習慣を記録 → 習慣トラッカー ポモドーロで集中 → ポモドーロタイマー 変更履歴を作成 → 変更履歴ジェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 Notion使い方完全ガイド2026年版【初心者向けセットアップ解説】 Notion 使い方 完全ガイド【2026年版・初心者向け】セットアップから活用術まで ","permalink":"https://productivity-works.com/ja/tools/kanban-board/","summary":"\u003cdiv id=\"kb-app\"\u003e\n\u003cstyle\u003e\n#kb-app *,\n#kb-app *::before,\n#kb-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#kb-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  font-size: 14px;\n  color: #1e293b;\n  background: #f1f5f9;\n  border-radius: 12px;\n  padding: 20px;\n  min-height: 520px;\n  user-select: none;\n}\n\n/* ---- toolbar ---- */\n#kb-app .kb-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n  margin-bottom: 16px;\n}\n\n#kb-app .kb-toolbar h2 {\n  font-size: 18px;\n  font-weight: 700;\n  color: #0f172a;\n  flex: 1 1 auto;\n}\n\n#kb-app .kb-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 4px;\n  padding: 7px 14px;\n  border-radius: 7px;\n  border: none;\n  cursor: pointer;\n  font-size: 13px;\n  font-weight: 600;\n  transition: background 0.15s, opacity 0.15s;\n  white-space: nowrap;\n}\n\n#kb-app .kb-btn:hover { opacity: 0.85; }\n\n#kb-app .kb-btn-primary {\n  background: #0284c7;\n  color: #fff;\n}\n\n#kb-app .kb-btn-secondary {\n  background: #e2e8f0;\n  color: #334155;\n}\n\n#kb-app .kb-btn-success {\n  background: #16a34a;\n  color: #fff;\n}\n\n#kb-app .kb-btn-danger {\n  background: #dc2626;\n  color: #fff;\n}\n\n#kb-app .kb-btn-sm {\n  padding: 4px 10px;\n  font-size: 12px;\n}\n\n/* ---- board ---- */\n#kb-app .kb-board {\n  display: flex;\n  gap: 14px;\n  overflow-x: auto;\n  padding-bottom: 8px;\n  align-items: flex-start;\n}\n\n/* ---- column ---- */\n#kb-app .kb-col {\n  background: #e2e8f0;\n  border-radius: 10px;\n  min-width: 240px;\n  max-width: 280px;\n  flex: 0 0 260px;\n  display: flex;\n  flex-direction: column;\n  gap: 0;\n  transition: outline 0.1s;\n}\n\n#kb-app .kb-col.drag-over {\n  outline: 2px dashed #0284c7;\n  background: #dbeafe;\n}\n\n#kb-app .kb-col-header {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 10px 12px 8px;\n  border-bottom: 1px solid #cbd5e1;\n}\n\n#kb-app .kb-col-title {\n  flex: 1;\n  font-size: 13px;\n  font-weight: 700;\n  color: #0f172a;\n  cursor: pointer;\n  padding: 2px 4px;\n  border-radius: 4px;\n  word-break: break-all;\n}\n\n#kb-app .kb-col-title:hover {\n  background: #cbd5e1;\n}\n\n#kb-app .kb-col-title-input {\n  flex: 1;\n  font-size: 13px;\n  font-weight: 700;\n  color: #0f172a;\n  border: 1.5px solid #0284c7;\n  border-radius: 4px;\n  padding: 2px 4px;\n  outline: none;\n  background: #fff;\n  width: 100%;\n}\n\n#kb-app .kb-col-count {\n  background: #94a3b8;\n  color: #fff;\n  font-size: 11px;\n  font-weight: 700;\n  border-radius: 999px;\n  padding: 1px 7px;\n  min-width: 22px;\n  text-align: center;\n}\n\n#kb-app .kb-col-del {\n  background: none;\n  border: none;\n  cursor: pointer;\n  color: #94a3b8;\n  font-size: 16px;\n  line-height: 1;\n  padding: 0 2px;\n  border-radius: 4px;\n}\n\n#kb-app .kb-col-del:hover { color: #dc2626; background: #fee2e2; }\n\n/* ---- cards list ---- */\n#kb-app .kb-cards {\n  padding: 8px;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  min-height: 60px;\n}\n\n/* ---- card ---- */\n#kb-app .kb-card {\n  background: #fff;\n  border-radius: 8px;\n  padding: 10px 12px;\n  cursor: grab;\n  box-shadow: 0 1px 3px rgba(0,0,0,0.08);\n  border-left: 4px solid transparent;\n  transition: box-shadow 0.15s, opacity 0.15s;\n  position: relative;\n}\n\n#kb-app .kb-card:active { cursor: grabbing; }\n\n#kb-app .kb-card.dragging {\n  opacity: 0.4;\n  box-shadow: none;\n}\n\n#kb-app .kb-card-title {\n  font-size: 13px;\n  font-weight: 600;\n  color: #0f172a;\n  word-break: break-all;\n  line-height: 1.4;\n}\n\n#kb-app .kb-card-desc {\n  font-size: 12px;\n  color: #64748b;\n  margin-top: 4px;\n  word-break: break-all;\n  line-height: 1.4;\n  white-space: pre-wrap;\n}\n\n#kb-app .kb-card-footer {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-top: 8px;\n  gap: 6px;\n}\n\n#kb-app .kb-card-label {\n  font-size: 10px;\n  font-weight: 700;\n  padding: 2px 8px;\n  border-radius: 999px;\n  letter-spacing: 0.02em;\n}\n\n#kb-app .kb-card-actions {\n  display: flex;\n  gap: 4px;\n  opacity: 0;\n  transition: opacity 0.15s;\n}\n\n#kb-app .kb-card:hover .kb-card-actions { opacity: 1; }\n\n#kb-app .kb-card-btn {\n  background: none;\n  border: none;\n  cursor: pointer;\n  font-size: 13px;\n  padding: 2px 5px;\n  border-radius: 4px;\n  color: #64748b;\n}\n\n#kb-app .kb-card-btn:hover { background: #f1f5f9; color: #0f172a; }\n\n/* ---- add card button ---- */\n#kb-app .kb-add-card-btn {\n  margin: 4px 8px 10px;\n  background: none;\n  border: 1.5px dashed #94a3b8;\n  border-radius: 7px;\n  padding: 7px;\n  width: calc(100% - 16px);\n  cursor: pointer;\n  font-size: 12px;\n  color: #64748b;\n  font-weight: 600;\n  transition: background 0.15s, border-color 0.15s;\n  text-align: center;\n}\n\n#kb-app .kb-add-card-btn:hover {\n  background: #f8fafc;\n  border-color: #0284c7;\n  color: #0284c7;\n}\n\n/* ---- modal overlay ---- */\n#kb-app .kb-overlay {\n  display: none;\n  position: fixed;\n  inset: 0;\n  background: rgba(15,23,42,0.45);\n  z-index: 9999;\n  align-items: center;\n  justify-content: center;\n  padding: 20px;\n}\n\n#kb-app .kb-overlay.open {\n  display: flex;\n}\n\n#kb-app .kb-modal {\n  background: #fff;\n  border-radius: 12px;\n  padding: 24px;\n  width: 100%;\n  max-width: 420px;\n  box-shadow: 0 20px 60px rgba(0,0,0,0.2);\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n}\n\n#kb-app .kb-modal h3 {\n  font-size: 16px;\n  font-weight: 700;\n  color: #0f172a;\n}\n\n#kb-app .kb-modal label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #475569;\n  display: block;\n  margin-bottom: 4px;\n}\n\n#kb-app .kb-modal input[type=\"text\"],\n#kb-app .kb-modal textarea,\n#kb-app .kb-modal select {\n  width: 100%;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  padding: 8px 10px;\n  font-size: 13px;\n  color: #0f172a;\n  outline: none;\n  font-family: inherit;\n  transition: border-color 0.15s;\n  background: #f8fafc;\n}\n\n#kb-app .kb-modal input[type=\"text\"]:focus,\n#kb-app .kb-modal textarea:focus,\n#kb-app .kb-modal select:focus {\n  border-color: #0284c7;\n  background: #fff;\n}\n\n#kb-app .kb-modal textarea {\n  resize: vertical;\n  min-height: 80px;\n}\n\n#kb-app .kb-modal-actions {\n  display: flex;\n  gap: 8px;\n  justify-content: flex-end;\n}\n\n/* ---- mobile move select ---- */\n#kb-app .kb-move-select {\n  display: none;\n  margin-top: 6px;\n  width: 100%;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  padding: 5px 8px;\n  font-size: 12px;\n  color: #334155;\n  background: #f8fafc;\n  font-family: inherit;\n  cursor: pointer;\n}\n\n/* ---- color label palette ---- */\n#kb-app .kb-priority-row {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n\n#kb-app .kb-priority-swatch {\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  cursor: pointer;\n}\n\n#kb-app .kb-priority-swatch input[type=\"radio\"] {\n  accent-color: #0284c7;\n  width: 14px;\n  height: 14px;\n  cursor: pointer;\n}\n\n#kb-app .kb-priority-dot {\n  width: 12px;\n  height: 12px;\n  border-radius: 50%;\n  display: inline-block;\n}\n\n#kb-app .kb-priority-swatch span {\n  font-size: 12px;\n  color: #334155;\n}\n\n/* ---- empty state ---- */\n#kb-app .kb-empty {\n  text-align: center;\n  color: #94a3b8;\n  font-size: 12px;\n  padding: 12px 0 4px;\n}\n\n/* ---- responsive ---- */\n@media (max-width: 600px) {\n  #kb-app .kb-board {\n    flex-direction: column;\n    overflow-x: unset;\n  }\n  #kb-app .kb-col {\n    min-width: unset;\n    max-width: unset;\n    flex: none;\n    width: 100%;\n  }\n  #kb-app .kb-card-actions {\n    opacity: 1;\n  }\n  #kb-app .kb-move-select {\n    display: block;\n  }\n}\n\u003c/style\u003e\n\u003c!-- toolbar --\u003e\n\u003cdiv class=\"kb-toolbar\"\u003e\n  \u003ch2\u003eカンバンボード\u003c/h2\u003e\n  \u003cbutton class=\"kb-btn kb-btn-secondary\" id=\"kb-import-btn\" title=\"JSONから取込\"\u003e\u0026#8599; 取込\u003c/button\u003e\n  \u003cbutton class=\"kb-btn kb-btn-secondary\" id=\"kb-export-btn\" title=\"JSONで書き出し\"\u003e\u0026#8600; 書き出し\u003c/button\u003e\n  \u003cbutton class=\"kb-btn kb-btn-primary\" id=\"kb-add-col-btn\"\u003e＋ カラム追加\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- board --\u003e\n\u003cdiv class=\"kb-board\" id=\"kb-board\"\u003e\u003c/div\u003e\n\u003c!-- card edit modal --\u003e\n\u003cdiv class=\"kb-overlay\" id=\"kb-modal-overlay\"\u003e\n  \u003cdiv class=\"kb-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"kb-modal-title\"\u003e\n    \u003ch3 id=\"kb-modal-title\"\u003eカードを追加\u003c/h3\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"kb-input-title\"\u003eタイトル\u003c/label\u003e\n      \u003cinput type=\"text\" id=\"kb-input-title\" placeholder=\"タスクのタイトルを入力\" maxlength=\"120\" /\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"kb-input-desc\"\u003e説明（任意）\u003c/label\u003e\n      \u003ctextarea id=\"kb-input-desc\" placeholder=\"詳細メモ...\" maxlength=\"500\"\u003e\u003c/textarea\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel\u003e優先度（色ラベル）\u003c/label\u003e\n      \u003cdiv class=\"kb-priority-row\" id=\"kb-priority-row\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"kb-modal-actions\"\u003e\n      \u003cbutton class=\"kb-btn kb-btn-secondary\" id=\"kb-modal-cancel\"\u003eキャンセル\u003c/button\u003e\n      \u003cbutton class=\"kb-btn kb-btn-primary\" id=\"kb-modal-save\"\u003e保存\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- confirm modal --\u003e\n\u003cdiv class=\"kb-overlay\" id=\"kb-confirm-overlay\"\u003e\n  \u003cdiv class=\"kb-modal\" role=\"dialog\" aria-modal=\"true\"\u003e\n    \u003ch3 id=\"kb-confirm-msg\"\u003e削除しますか？\u003c/h3\u003e\n    \u003cdiv class=\"kb-modal-actions\"\u003e\n      \u003cbutton class=\"kb-btn kb-btn-secondary\" id=\"kb-confirm-cancel\"\u003eキャンセル\u003c/button\u003e\n      \u003cbutton class=\"kb-btn kb-btn-danger\" id=\"kb-confirm-ok\"\u003e削除\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- hidden file input for import --\u003e\n\u003cinput type=\"file\" id=\"kb-file-input\" accept=\".json\" style=\"display:none\" /\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  /* ---- constants ---- */\n  const LS_KEY = 'kb_data_v2';\n\n  const PRIORITIES = [\n    { key: 'none',   label: 'なし',    color: '#94a3b8', bg: '#f1f5f9', text: '#475569' },\n    { key: 'low',    label: '低',      color: '#22c55e', bg: '#dcfce7', text: '#166534' },\n    { key: 'mid',    label: '中',      color: '#f59e0b', bg: '#fef3c7', text: '#92400e' },\n    { key: 'high',   label: '高',      color: '#ef4444', bg: '#fee2e2', text: '#991b1b' },\n    { key: 'urgent', label: '緊急',    color: '#7c3aed', bg: '#ede9fe', text: '#4c1d95' },\n  ];\n\n  const DEFAULT_COLS = [\n    { id: uid(), title: 'やること',  cards: [\n      { id: uid(), title: 'サンプルタスク', desc: 'カードをドラッグして移動できます', priority: 'mid' }\n    ]},\n    { id: uid(), title: '進行中',    cards: [] },\n    { id: uid(), title: '完了',      cards: [] },\n  ];\n\n  /* ---- state ---- */\n  let state = load();\n\n  /* ---- util ---- */\n  function uid() {\n    return Math.random().toString(36).slice(2, 10) + Date.now().toString(36);\n  }\n\n  function load() {\n    try {\n      const raw = localStorage.getItem(LS_KEY);\n      if (raw) return JSON.parse(raw);\n    } catch (_) {}\n    return { cols: DEFAULT_COLS };\n  }\n\n  function save() {\n    try { localStorage.setItem(LS_KEY, JSON.stringify(state)); } catch (_) {}\n  }\n\n  function getPriority(key) {\n    return PRIORITIES.find(p =\u003e p.key === key) || PRIORITIES[0];\n  }\n\n  /* ---- drag state ---- */\n  let dragCard = null;   // { cardId, srcColId }\n  let dragEl = null;\n\n  /* ---- render ---- */\n  function render() {\n    const board = document.getElementById('kb-board');\n    board.innerHTML = '';\n    state.cols.forEach(col =\u003e {\n      board.appendChild(makeColEl(col));\n    });\n    save();\n  }\n\n  function makeColEl(col) {\n    const el = document.createElement('div');\n    el.className = 'kb-col';\n    el.dataset.colId = col.id;\n\n    /* header */\n    const header = document.createElement('div');\n    header.className = 'kb-col-header';\n\n    const titleEl = document.createElement('span');\n    titleEl.className = 'kb-col-title';\n    titleEl.textContent = col.title;\n    titleEl.title = 'クリックして名前変更';\n    titleEl.addEventListener('click', () =\u003e startRenameCol(col.id, titleEl, countEl));\n\n    const countEl = document.createElement('span');\n    countEl.className = 'kb-col-count';\n    countEl.textContent = col.cards.length;\n\n    const delBtn = document.createElement('button');\n    delBtn.className = 'kb-col-del';\n    delBtn.title = 'カラムを削除';\n    delBtn.textContent = '×';\n    delBtn.addEventListener('click', () =\u003e confirmDeleteCol(col.id, col.title));\n\n    header.appendChild(titleEl);\n    header.appendChild(countEl);\n    header.appendChild(delBtn);\n    el.appendChild(header);\n\n    /* cards */\n    const cardsEl = document.createElement('div');\n    cardsEl.className = 'kb-cards';\n    cardsEl.dataset.colId = col.id;\n\n    if (col.cards.length === 0) {\n      const empty = document.createElement('p');\n      empty.className = 'kb-empty';\n      empty.textContent = 'タスクをここにドロップ';\n      cardsEl.appendChild(empty);\n    } else {\n      col.cards.forEach(card =\u003e {\n        cardsEl.appendChild(makeCardEl(card, col.id));\n      });\n    }\n\n    /* drop target */\n    cardsEl.addEventListener('dragover', e =\u003e {\n      e.preventDefault();\n      el.classList.add('drag-over');\n    });\n    cardsEl.addEventListener('dragleave', e =\u003e {\n      if (!el.contains(e.relatedTarget)) el.classList.remove('drag-over');\n    });\n    cardsEl.addEventListener('drop', e =\u003e {\n      e.preventDefault();\n      el.classList.remove('drag-over');\n      if (!dragCard) return;\n      moveCard(dragCard.cardId, dragCard.srcColId, col.id);\n    });\n\n    el.appendChild(cardsEl);\n\n    /* add card button */\n    const addBtn = document.createElement('button');\n    addBtn.className = 'kb-add-card-btn';\n    addBtn.textContent = '＋ カードを追加';\n    addBtn.addEventListener('click', () =\u003e openCardModal(col.id, null));\n    el.appendChild(addBtn);\n\n    return el;\n  }\n\n  function makeCardEl(card, colId) {\n    const pri = getPriority(card.priority);\n    const el = document.createElement('div');\n    el.className = 'kb-card';\n    el.style.borderLeftColor = pri.color;\n    el.draggable = true;\n    el.dataset.cardId = card.id;\n\n    el.addEventListener('dragstart', e =\u003e {\n      dragCard = { cardId: card.id, srcColId: colId };\n      dragEl = el;\n      setTimeout(() =\u003e el.classList.add('dragging'), 0);\n    });\n    el.addEventListener('dragend', () =\u003e {\n      el.classList.remove('dragging');\n      dragCard = null;\n      dragEl = null;\n    });\n\n    /* title */\n    const titleEl = document.createElement('div');\n    titleEl.className = 'kb-card-title';\n    titleEl.textContent = card.title;\n    el.appendChild(titleEl);\n\n    /* desc */\n    if (card.desc) {\n      const descEl = document.createElement('div');\n      descEl.className = 'kb-card-desc';\n      descEl.textContent = card.desc;\n      el.appendChild(descEl);\n    }\n\n    /* footer */\n    const footer = document.createElement('div');\n    footer.className = 'kb-card-footer';\n\n    /* label */\n    const labelEl = document.createElement('span');\n    labelEl.className = 'kb-card-label';\n    labelEl.textContent = pri.label;\n    labelEl.style.background = pri.bg;\n    labelEl.style.color = pri.text;\n    footer.appendChild(labelEl);\n\n    /* actions */\n    const actions = document.createElement('div');\n    actions.className = 'kb-card-actions';\n\n    const editBtn = document.createElement('button');\n    editBtn.className = 'kb-card-btn';\n    editBtn.title = '編集';\n    editBtn.textContent = '✏️';\n    editBtn.addEventListener('click', e =\u003e { e.stopPropagation(); openCardModal(colId, card.id); });\n\n    const delBtn = document.createElement('button');\n    delBtn.className = 'kb-card-btn';\n    delBtn.title = '削除';\n    delBtn.textContent = '🗑️';\n    delBtn.addEventListener('click', e =\u003e { e.stopPropagation(); confirmDeleteCard(colId, card.id, card.title); });\n\n    actions.appendChild(editBtn);\n    actions.appendChild(delBtn);\n    footer.appendChild(actions);\n    el.appendChild(footer);\n\n    /* mobile: move dropdown */\n    const moveSelect = document.createElement('select');\n    moveSelect.className = 'kb-move-select';\n    const placeholderOpt = document.createElement('option');\n    placeholderOpt.value = '';\n    placeholderOpt.textContent = '移動先カラムを選択...';\n    moveSelect.appendChild(placeholderOpt);\n    state.cols.forEach(c =\u003e {\n      if (c.id === colId) return;\n      const opt = document.createElement('option');\n      opt.value = c.id;\n      opt.textContent = c.title;\n      moveSelect.appendChild(opt);\n    });\n    moveSelect.addEventListener('change', () =\u003e {\n      if (moveSelect.value) {\n        moveCard(card.id, colId, moveSelect.value);\n      }\n    });\n    el.appendChild(moveSelect);\n\n    return el;\n  }\n\n  /* ---- card CRUD ---- */\n  let modalMode = null; // { colId, cardId|null }\n\n  function openCardModal(colId, cardId) {\n    modalMode = { colId, cardId };\n    const overlay = document.getElementById('kb-modal-overlay');\n    const titleInput = document.getElementById('kb-input-title');\n    const descInput = document.getElementById('kb-input-desc');\n    const modalTitle = document.getElementById('kb-modal-title');\n\n    /* build priority radios */\n    const row = document.getElementById('kb-priority-row');\n    row.innerHTML = '';\n    PRIORITIES.forEach(p =\u003e {\n      const label = document.createElement('label');\n      label.className = 'kb-priority-swatch';\n      const radio = document.createElement('input');\n      radio.type = 'radio';\n      radio.name = 'kb-priority';\n      radio.value = p.key;\n      const dot = document.createElement('span');\n      dot.className = 'kb-priority-dot';\n      dot.style.background = p.color;\n      const txt = document.createElement('span');\n      txt.textContent = p.label;\n      label.appendChild(radio);\n      label.appendChild(dot);\n      label.appendChild(txt);\n      row.appendChild(label);\n    });\n\n    if (cardId) {\n      modalTitle.textContent = 'カードを編集';\n      const col = state.cols.find(c =\u003e c.id === colId);\n      const card = col \u0026\u0026 col.cards.find(cd =\u003e cd.id === cardId);\n      if (card) {\n        titleInput.value = card.title;\n        descInput.value = card.desc || '';\n        const radio = row.querySelector(`input[value=\"${card.priority || 'none'}\"]`);\n        if (radio) radio.checked = true;\n      }\n    } else {\n      modalTitle.textContent = 'カードを追加';\n      titleInput.value = '';\n      descInput.value = '';\n      const noneRadio = row.querySelector('input[value=\"none\"]');\n      if (noneRadio) noneRadio.checked = true;\n    }\n\n    overlay.classList.add('open');\n    titleInput.focus();\n  }\n\n  function closeCardModal() {\n    document.getElementById('kb-modal-overlay').classList.remove('open');\n    modalMode = null;\n  }\n\n  function saveCard() {\n    if (!modalMode) return;\n    const title = document.getElementById('kb-input-title').value.trim();\n    if (!title) { document.getElementById('kb-input-title').focus(); return; }\n    const desc = document.getElementById('kb-input-desc').value.trim();\n    const checkedRadio = document.querySelector('#kb-priority-row input[name=\"kb-priority\"]:checked');\n    const priority = checkedRadio ? checkedRadio.value : 'none';\n\n    const col = state.cols.find(c =\u003e c.id === modalMode.colId);\n    if (!col) return;\n\n    if (modalMode.cardId) {\n      const card = col.cards.find(cd =\u003e cd.id === modalMode.cardId);\n      if (card) { card.title = title; card.desc = desc; card.priority = priority; }\n    } else {\n      col.cards.push({ id: uid(), title, desc, priority });\n    }\n    closeCardModal();\n    render();\n  }\n\n  function moveCard(cardId, srcColId, dstColId) {\n    if (srcColId === dstColId) return;\n    const src = state.cols.find(c =\u003e c.id === srcColId);\n    const dst = state.cols.find(c =\u003e c.id === dstColId);\n    if (!src || !dst) return;\n    const idx = src.cards.findIndex(cd =\u003e cd.id === cardId);\n    if (idx === -1) return;\n    const [card] = src.cards.splice(idx, 1);\n    dst.cards.push(card);\n    render();\n  }\n\n  /* ---- column CRUD ---- */\n  function addCol() {\n    const title = prompt('新しいカラム名を入力してください:', '新カラム');\n    if (!title || !title.trim()) return;\n    state.cols.push({ id: uid(), title: title.trim(), cards: [] });\n    render();\n  }\n\n  function startRenameCol(colId, titleEl, countEl) {\n    const col = state.cols.find(c =\u003e c.id === colId);\n    if (!col) return;\n    const input = document.createElement('input');\n    input.type = 'text';\n    input.className = 'kb-col-title-input';\n    input.value = col.title;\n    titleEl.replaceWith(input);\n    input.focus();\n    input.select();\n\n    function commit() {\n      const newTitle = input.value.trim();\n      if (newTitle) col.title = newTitle;\n      render();\n    }\n    input.addEventListener('blur', commit);\n    input.addEventListener('keydown', e =\u003e {\n      if (e.key === 'Enter') { e.preventDefault(); commit(); }\n      if (e.key === 'Escape') render();\n    });\n  }\n\n  /* ---- confirm helpers ---- */\n  let confirmCb = null;\n\n  function showConfirm(msg, cb) {\n    document.getElementById('kb-confirm-msg').textContent = msg;\n    document.getElementById('kb-confirm-overlay').classList.add('open');\n    confirmCb = cb;\n  }\n\n  function closeConfirm() {\n    document.getElementById('kb-confirm-overlay').classList.remove('open');\n    confirmCb = null;\n  }\n\n  function confirmDeleteCard(colId, cardId, title) {\n    showConfirm(`「${title}」を削除しますか？`, () =\u003e {\n      const col = state.cols.find(c =\u003e c.id === colId);\n      if (col) col.cards = col.cards.filter(cd =\u003e cd.id !== cardId);\n      render();\n    });\n  }\n\n  function confirmDeleteCol(colId, title) {\n    showConfirm(`カラム「${title}」とそのすべてのカードを削除しますか？`, () =\u003e {\n      state.cols = state.cols.filter(c =\u003e c.id !== colId);\n      render();\n    });\n  }\n\n  /* ---- export / import ---- */\n  function exportJSON() {\n    const json = JSON.stringify(state, null, 2);\n    const blob = new Blob([json], { type: 'application/json' });\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = 'kanban-board.json';\n    a.click();\n    URL.revokeObjectURL(url);\n  }\n\n  function importJSON(file) {\n    if (!file) return;\n    const reader = new FileReader();\n    reader.onload = e =\u003e {\n      try {\n        const parsed = JSON.parse(e.target.result);\n        if (!parsed.cols || !Array.isArray(parsed.cols)) throw new Error('invalid');\n        state = parsed;\n        render();\n      } catch (_) {\n        alert('JSONの読み込みに失敗しました。正しいカンバンボードのJSONファイルを選択してください。');\n      }\n    };\n    reader.readAsText(file);\n  }\n\n  /* ---- touch support ---- */\n  let touchCard = null;\n  let touchSrcColId = null;\n  let touchGhost = null;\n\n  function setupTouchDrag(cardEl, cardId, colId) {\n    cardEl.addEventListener('touchstart', e =\u003e {\n      touchCard = { cardId, colId };\n      touchSrcColId = colId;\n      const touch = e.touches[0];\n      touchGhost = cardEl.cloneNode(true);\n      touchGhost.style.cssText = `\n        position:fixed;opacity:0.7;pointer-events:none;z-index:99999;\n        width:${cardEl.offsetWidth}px;left:${touch.clientX - cardEl.offsetWidth/2}px;\n        top:${touch.clientY - 20}px;background:#fff;border-radius:8px;\n        box-shadow:0 8px 24px rgba(0,0,0,0.18);padding:10px 12px;\n      `;\n      document.body.appendChild(touchGhost);\n    }, { passive: true });\n\n    cardEl.addEventListener('touchmove', e =\u003e {\n      if (!touchGhost) return;\n      const touch = e.touches[0];\n      touchGhost.style.left = (touch.clientX - parseInt(touchGhost.style.width)/2) + 'px';\n      touchGhost.style.top = (touch.clientY - 20) + 'px';\n    }, { passive: true });\n\n    cardEl.addEventListener('touchend', e =\u003e {\n      if (touchGhost) { document.body.removeChild(touchGhost); touchGhost = null; }\n      if (!touchCard) return;\n      const touch = e.changedTouches[0];\n      const target = document.elementFromPoint(touch.clientX, touch.clientY);\n      if (target) {\n        const colEl = target.closest('[data-col-id]');\n        if (colEl \u0026\u0026 colEl.dataset.colId !== touchSrcColId) {\n          moveCard(touchCard.cardId, touchSrcColId, colEl.dataset.colId);\n        }\n      }\n      touchCard = null;\n    });\n  }\n\n  /* override makeCardEl to also wire touch */\n  const _origMakeCardEl = makeCardEl;\n\n  /* ---- event wiring ---- */\n  document.getElementById('kb-add-col-btn').addEventListener('click', addCol);\n  document.getElementById('kb-export-btn').addEventListener('click', exportJSON);\n  document.getElementById('kb-import-btn').addEventListener('click', () =\u003e {\n    document.getElementById('kb-file-input').click();\n  });\n  document.getElementById('kb-file-input').addEventListener('change', e =\u003e {\n    importJSON(e.target.files[0]);\n    e.target.value = '';\n  });\n  document.getElementById('kb-modal-cancel').addEventListener('click', closeCardModal);\n  document.getElementById('kb-modal-save').addEventListener('click', saveCard);\n  document.getElementById('kb-modal-overlay').addEventListener('click', e =\u003e {\n    if (e.target === document.getElementById('kb-modal-overlay')) closeCardModal();\n  });\n  document.getElementById('kb-input-title').addEventListener('keydown', e =\u003e {\n    if (e.key === 'Enter') saveCard();\n  });\n  document.getElementById('kb-confirm-cancel').addEventListener('click', closeConfirm);\n  document.getElementById('kb-confirm-ok').addEventListener('click', () =\u003e {\n    if (confirmCb) confirmCb();\n    closeConfirm();\n  });\n  document.getElementById('kb-confirm-overlay').addEventListener('click', e =\u003e {\n    if (e.target === document.getElementById('kb-confirm-overlay')) closeConfirm();\n  });\n\n  /* ---- init ---- */\n  render();\n\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業のタスク・経費管理もかんたんに\u003c/p\u003e","title":"カンバンボード"},{"content":" テキスト入力 ファイルハッシュ ハッシュ比較 ハッシュを生成 クリア 大文字表示 リアルタイム更新 計算中… 全てコピー アルゴリズムハッシュ値情報 \u0026#128196; ここにファイルをドロップ、またはクリックして選択 全ファイル形式対応 \u0026bull; ブラウザ内で処理 \u0026bull; サーバーへの送信なし \u0026#128196; | ハッシュ計算中… 全てコピー アルゴリズムハッシュ値情報 2つのハッシュ値を貼り付けて一致するか確認します。ダウンロードしたファイルの整合性チェックや、パスワードダイジェストの照合に便利です。 ハッシュ A ハッシュ B クリア 開発業務の経費管理もかんたんに\nfreee会計なら、開発ツール・サーバー費用の経費精算もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; ハッシュ関数とは？ 暗号学的ハッシュ関数とは、任意の長さのデータを固定長のビット列（ダイジェスト）に変換する一方向性の演算です。同じ入力からは常に同じハッシュ値が得られますが、1ビットでも変化すると出力の約半分が変わります（雪崩効果）。ハッシュ値から元データを復元することは計算上不可能です。\nアルゴリズム 出力長 現状 主な用途 MD5 128 bits / 32 hex 廃止推奨 チェックサム・非セキュリティ用途 SHA-1 160 bits / 40 hex 廃止推奨 (SHAttered 2017) レガシーシステム・Git SHA-256 256 bits / 64 hex 現行標準 TLS証明書・ビットコイン・コード署名 SHA-512 512 bits / 128 hex 現行標準 高セキュリティ用途・64bit最適化 使い方 テキスト入力 — テキストを入力するとリアルタイムでハッシュが生成されます。「大文字表示」で16進数の大文字/小文字を切り替えられます。「全てコピー」でラベル付きのテキストとして一括コピーも可能です。\nファイルハッシュ — ファイルをドロップゾーンにドラッグ＆ドロップするか、クリックしてファイルを選択します。ブラウザの FileReader API と SubtleCrypto でローカル処理するため、ファイルがサーバーに送信されることは一切ありません。ダウンロードしたファイルの公式チェックサムとの照合に最適です。\nハッシュ比較 — 2つのダイジェスト文字列を貼り付けて、一致するか即座に確認できます。不一致の場合は最初の差異が何文字目かも表示されます。\nプライバシーについて 本ツールでの計算はすべてブラウザ内で完結します。SHA-1/SHA-256/SHA-512 はブラウザネイティブの Web Crypto API（SubtleCrypto）を使用し、MD5 は純粋な JavaScript で実装されています。入力データが外部に送信されることはありません。\nテキストのエンコード/デコード → 万能エンコーダー/デコーダー JWTトークンを解析してヘッダーとクレームを確認 → JWTデコーダー 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/hash-generator/","summary":"\u003cdiv id=\"hg-app\"\u003e\n\u003cstyle\u003e\n#hg-app {\n  font-family: \"Helvetica Neue\", \"Hiragino Sans\", \"Noto Sans JP\", Arial, sans-serif;\n  max-width: 800px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#hg-app *, #hg-app *::before, #hg-app *::after {\n  box-sizing: border-box;\n}\n/* ---- タブバー ---- */\n#hg-app .hg-tab-bar {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #e2e8f0;\n  margin-bottom: 20px;\n  overflow-x: auto;\n}\n#hg-app .hg-tab {\n  padding: 9px 18px;\n  font-size: 13px;\n  font-weight: 700;\n  color: #64748b;\n  cursor: pointer;\n  border: none;\n  background: none;\n  border-bottom: 2.5px solid transparent;\n  margin-bottom: -2px;\n  transition: color 0.15s, border-color 0.15s;\n  white-space: nowrap;\n}\n#hg-app .hg-tab.active { color: #6366f1; border-bottom-color: #6366f1; }\n#hg-app .hg-tab:hover:not(.active) { color: #334155; }\n/* ---- パネル ---- */\n#hg-app .hg-panel { display: none; }\n#hg-app .hg-panel.active { display: block; }\n/* ---- カード ---- */\n#hg-app .hg-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 18px 20px;\n  margin-bottom: 16px;\n}\n/* ---- テキストエリア ---- */\n#hg-app .hg-textarea {\n  width: 100%;\n  min-height: 110px;\n  padding: 11px 13px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 14px;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  resize: vertical;\n  background: #fff;\n  color: #1e293b;\n  transition: border-color 0.2s, box-shadow 0.2s;\n}\n#hg-app .hg-textarea:focus {\n  outline: none;\n  border-color: #6366f1;\n  box-shadow: 0 0 0 3px rgba(99,102,241,0.13);\n}\n/* ---- コントロール行 ---- */\n#hg-app .hg-row {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 10px;\n  margin-top: 12px;\n}\n/* ---- ボタン ---- */\n#hg-app .hg-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 8px 16px;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  border: none;\n  transition: background 0.18s, transform 0.1s;\n  user-select: none;\n  line-height: 1;\n}\n#hg-app .hg-btn:active { transform: scale(0.97); }\n#hg-app .hg-btn-primary   { background: #6366f1; color: #fff; }\n#hg-app .hg-btn-primary:hover { background: #4f46e5; }\n#hg-app .hg-btn-secondary { background: #e2e8f0; color: #374151; }\n#hg-app .hg-btn-secondary:hover { background: #cbd5e1; }\n/* ---- トグル ---- */\n#hg-app .hg-toggle {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 13px;\n  color: #475569;\n  cursor: pointer;\n  user-select: none;\n}\n#hg-app .hg-toggle input[type=checkbox] {\n  width: 15px; height: 15px;\n  accent-color: #6366f1;\n  cursor: pointer;\n}\n/* ---- プログレス ---- */\n#hg-app .hg-progress {\n  display: none;\n  align-items: center;\n  gap: 10px;\n  margin-top: 10px;\n  font-size: 12px;\n  color: #6366f1;\n}\n#hg-app .hg-progress.visible { display: flex; }\n#hg-app .hg-progress-track {\n  flex: 1; height: 5px;\n  background: #e0e7ff;\n  border-radius: 3px;\n  overflow: hidden;\n}\n#hg-app .hg-progress-fill {\n  height: 100%;\n  background: #6366f1;\n  border-radius: 3px;\n  width: 0%;\n  transition: width 0.15s;\n}\n/* ---- ステータスバー ---- */\n#hg-app .hg-status {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 9px 14px;\n  border-radius: 8px;\n  font-size: 13px;\n  margin-bottom: 12px;\n}\n#hg-app .hg-status.ok  { background:#f0fdf4; border:1px solid #bbf7d0; color:#166534; }\n#hg-app .hg-status.err { background:#fef2f2; border:1px solid #fecaca; color:#991b1b; }\n#hg-app .hg-status.hidden { display: none; }\n/* ---- ハッシュ結果テーブル ---- */\n#hg-app .hg-results-header {\n  display: flex;\n  justify-content: flex-end;\n  margin-bottom: 8px;\n}\n#hg-app .hg-table-wrap {\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  overflow: hidden;\n}\n#hg-app .hg-table {\n  width: 100%;\n  border-collapse: collapse;\n}\n#hg-app .hg-table th {\n  text-align: left;\n  padding: 8px 12px;\n  background: #f1f5f9;\n  font-size: 11px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  border-bottom: 1.5px solid #e2e8f0;\n}\n#hg-app .hg-table td {\n  padding: 11px 12px;\n  border-bottom: 1px solid #f1f5f9;\n  vertical-align: middle;\n  font-size: 13px;\n}\n#hg-app .hg-table tr:last-child td { border-bottom: none; }\n#hg-app .hg-table tr:hover td { background: #f8fafc; }\n/* ---- アルゴリズムバッジ ---- */\n#hg-app .hg-badge {\n  display: inline-block;\n  padding: 3px 9px;\n  border-radius: 5px;\n  font-size: 11px;\n  font-weight: 700;\n  white-space: nowrap;\n  letter-spacing: 0.04em;\n}\n#hg-app .hg-badge-md5    { background:#fef3c7; color:#92400e; }\n#hg-app .hg-badge-sha1   { background:#ede9fe; color:#5b21b6; }\n#hg-app .hg-badge-sha256 { background:#d1fae5; color:#065f46; }\n#hg-app .hg-badge-sha512 { background:#dbeafe; color:#1e40af; }\n/* ---- ハッシュ値セル ---- */\n#hg-app .hg-hash-val {\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 12px;\n  color: #334155;\n  word-break: break-all;\n  max-width: 420px;\n}\n#hg-app .hg-hash-meta {\n  font-size: 11px;\n  color: #94a3b8;\n  white-space: nowrap;\n}\n/* ---- コピーボタン ---- */\n#hg-app .hg-copy {\n  display: inline-flex;\n  align-items: center;\n  gap: 4px;\n  padding: 4px 10px;\n  border-radius: 5px;\n  font-size: 11px;\n  font-weight: 600;\n  cursor: pointer;\n  border: 1.5px solid #e2e8f0;\n  background: #fff;\n  color: #475569;\n  transition: all 0.15s;\n  white-space: nowrap;\n}\n#hg-app .hg-copy:hover  { border-color:#6366f1; color:#6366f1; background:#eef2ff; }\n#hg-app .hg-copy.copied { border-color:#10b981; color:#10b981; background:#ecfdf5; }\n/* ---- ファイルドロップゾーン ---- */\n#hg-app .hg-dropzone {\n  border: 2.5px dashed #c7d2fe;\n  border-radius: 10px;\n  padding: 32px 20px;\n  text-align: center;\n  cursor: pointer;\n  transition: all 0.2s;\n  background: #fafbff;\n  color: #6366f1;\n  font-size: 14px;\n  font-weight: 500;\n}\n#hg-app .hg-dropzone:hover,\n#hg-app .hg-dropzone.over { border-color:#6366f1; background:#eef2ff; }\n#hg-app .hg-dropzone .hg-drop-icon { font-size: 34px; display: block; margin-bottom: 8px; }\n#hg-app .hg-file-info {\n  display: none;\n  align-items: center;\n  gap: 10px;\n  padding: 9px 14px;\n  background: #eff6ff;\n  border: 1px solid #bfdbfe;\n  border-radius: 8px;\n  font-size: 13px;\n  color: #1e40af;\n  margin-top: 10px;\n}\n/* ---- ハッシュ比較 ---- */\n#hg-app .hg-compare-label {\n  display: block;\n  font-size: 11px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-bottom: 5px;\n}\n#hg-app .hg-compare-ta {\n  width: 100%;\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 12px;\n  min-height: 58px;\n  resize: vertical;\n  background: #fff;\n  color: #1e293b;\n  transition: border-color 0.2s;\n}\n#hg-app .hg-compare-ta:focus { outline:none; border-color:#6366f1; }\n#hg-app .hg-compare-result {\n  padding: 10px 14px;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  margin-top: 12px;\n  display: none;\n}\n#hg-app .hg-compare-result.match    { background:#d1fae5; color:#065f46; border:1px solid #6ee7b7; }\n#hg-app .hg-compare-result.no-match { background:#fee2e2; color:#991b1b; border:1px solid #fca5a5; }\n/* ---- トースト ---- */\n.hg-toast {\n  position: fixed;\n  bottom: 24px; right: 24px;\n  background: #6366f1; color: #fff;\n  padding: 10px 18px;\n  border-radius: 8px;\n  font-size: 13px;\n  font-weight: 700;\n  z-index: 9999;\n  box-shadow: 0 4px 16px rgba(0,0,0,0.18);\n  transition: opacity 0.3s;\n  font-family: \"Helvetica Neue\", Arial, sans-serif;\n}\n@media (max-width: 580px) {\n  #hg-app .hg-hash-val  { max-width: 150px; font-size: 10px; }\n  #hg-app .hg-hash-meta { display: none; }\n  #hg-app .hg-table th:nth-child(3),\n  #hg-app .hg-table td:nth-child(3) { display: none; }\n}\n\u003c/style\u003e\n\u003c!-- タブバー --\u003e\n\u003cdiv class=\"hg-tab-bar\"\u003e\n  \u003cbutton class=\"hg-tab active\" onclick=\"hgTab('text',this)\"\u003eテキスト入力\u003c/button\u003e\n  \u003cbutton class=\"hg-tab\" onclick=\"hgTab('file',this)\"\u003eファイルハッシュ\u003c/button\u003e\n  \u003cbutton class=\"hg-tab\" onclick=\"hgTab('compare',this)\"\u003eハッシュ比較\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- ===== テキスト入力パネル ===== --\u003e\n\u003cdiv id=\"hg-panel-text\" class=\"hg-panel active\"\u003e\n  \u003cdiv class=\"hg-card\"\u003e\n    \u003ctextarea id=\"hg-text\" class=\"hg-textarea\" placeholder=\"ハッシュ化するテキストをここに入力してください…（リアルタイムで生成されます）\" oninput=\"hgLive()\"\u003e\u003c/textarea\u003e\n    \u003cdiv class=\"hg-row\"\u003e\n      \u003cbutton class=\"hg-btn hg-btn-primary\" onclick=\"hgGenAll()\"\u003eハッシュを生成\u003c/button\u003e\n      \u003cbutton class=\"hg-btn hg-btn-secondary\" onclick=\"hgClearText()\"\u003eクリア\u003c/button\u003e\n      \u003clabel class=\"hg-toggle\"\u003e\u003cinput type=\"checkbox\" id=\"hg-uc\" onchange=\"hgApplyCase()\"\u003e 大文字表示\u003c/label\u003e\n      \u003clabel class=\"hg-toggle\"\u003e\u003cinput type=\"checkbox\" id=\"hg-live\" checked\u003e リアルタイム更新\u003c/label\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"hg-progress\" id=\"hg-prog\"\u003e\n      \u003cspan id=\"hg-prog-lbl\"\u003e計算中…\u003c/span\u003e\n      \u003cdiv class=\"hg-progress-track\"\u003e\u003cdiv class=\"hg-progress-fill\" id=\"hg-prog-fill\"\u003e\u003c/div\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"hg-status hidden\" id=\"hg-status\"\u003e\u003c/div\u003e\n  \u003cdiv id=\"hg-text-results\" style=\"display:none\"\u003e\n    \u003cdiv class=\"hg-results-header\"\u003e\n      \u003cbutton class=\"hg-btn hg-btn-secondary\" style=\"font-size:12px;padding:5px 13px\" onclick=\"hgCopyAllText()\"\u003e全てコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"hg-table-wrap\"\u003e\n      \u003ctable class=\"hg-table\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\u003cth\u003eアルゴリズム\u003c/th\u003e\u003cth\u003eハッシュ値\u003c/th\u003e\u003cth\u003e情報\u003c/th\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n        \u003ctbody id=\"hg-text-tbody\"\u003e\u003c/tbody\u003e\n      \u003c/table\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ===== ファイルハッシュパネル ===== --\u003e\n\u003cdiv id=\"hg-panel-file\" class=\"hg-panel\"\u003e\n  \u003cdiv class=\"hg-card\"\u003e\n    \u003cdiv class=\"hg-dropzone\" id=\"hg-dropzone\"\n      onclick=\"document.getElementById('hg-file-inp').click()\"\n      ondragover=\"hgDragOver(event)\" ondragleave=\"hgDragLeave(event)\" ondrop=\"hgDrop(event)\"\u003e\n      \u003cspan class=\"hg-drop-icon\"\u003e\u0026#128196;\u003c/span\u003e\n      \u003cdiv\u003eここにファイルをドロップ、または\u003cstrong\u003eクリックして選択\u003c/strong\u003e\u003c/div\u003e\n      \u003cdiv style=\"font-size:12px;color:#94a3b8;margin-top:6px;\"\u003e全ファイル形式対応 \u0026bull; ブラウザ内で処理 \u0026bull; サーバーへの送信なし\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cinput type=\"file\" id=\"hg-file-inp\" style=\"display:none\" onchange=\"hgFileSelected(this.files[0])\"\u003e\n    \u003cdiv class=\"hg-file-info\" id=\"hg-finfo\"\u003e\n      \u003cspan style=\"font-size:18px\"\u003e\u0026#128196;\u003c/span\u003e\n      \u003cstrong id=\"hg-fname\"\u003e\u003c/strong\u003e\n      \u003cspan style=\"color:#93c5fd\"\u003e|\u003c/span\u003e\n      \u003cspan id=\"hg-fsize\" style=\"color:#3b82f6\"\u003e\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"hg-progress\" id=\"hg-fprog\" style=\"margin-top:12px\"\u003e\n      \u003cspan id=\"hg-fprog-lbl\"\u003eハッシュ計算中…\u003c/span\u003e\n      \u003cdiv class=\"hg-progress-track\"\u003e\u003cdiv class=\"hg-progress-fill\" id=\"hg-fprog-fill\"\u003e\u003c/div\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"hg-status hidden\" id=\"hg-fstatus\"\u003e\u003c/div\u003e\n  \u003cdiv id=\"hg-file-results\" style=\"display:none\"\u003e\n    \u003cdiv class=\"hg-results-header\"\u003e\n      \u003cbutton class=\"hg-btn hg-btn-secondary\" style=\"font-size:12px;padding:5px 13px\" onclick=\"hgCopyAllFile()\"\u003e全てコピー\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"hg-table-wrap\"\u003e\n      \u003ctable class=\"hg-table\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\u003cth\u003eアルゴリズム\u003c/th\u003e\u003cth\u003eハッシュ値\u003c/th\u003e\u003cth\u003e情報\u003c/th\u003e\u003cth\u003e\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n        \u003ctbody id=\"hg-file-tbody\"\u003e\u003c/tbody\u003e\n      \u003c/table\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ===== ハッシュ比較パネル ===== --\u003e\n\u003cdiv id=\"hg-panel-compare\" class=\"hg-panel\"\u003e\n  \u003cdiv class=\"hg-card\"\u003e\n    \u003cp style=\"margin:0 0 14px;font-size:14px;color:#475569;line-height:1.7;\"\u003e\n      2つのハッシュ値を貼り付けて一致するか確認します。ダウンロードしたファイルの整合性チェックや、パスワードダイジェストの照合に便利です。\n    \u003c/p\u003e","title":"ハッシュ生成ツール"},{"content":" // モールス信号変換ツール テキスト \u0026lt;--\u0026gt; モールス信号 \u0026nbsp;|\u0026nbsp; 音声再生対応 \u0026nbsp;|\u0026nbsp; 和文モールス対応 \u0026nbsp;|\u0026nbsp; 自動判定モード\n自動判定 テキスト → モールス モールス → テキスト 準備完了。いずれかのボックスに入力してください。自動判定モードが方向を判断します。 入力 出力 ビジュアル表示 点と線がここに表示されます... \u0026#9654; 音声再生 \u0026#9632; 停止 \u0026#10064; 結果をコピー \u0026#10005; クリア 速度 15 WPM + モールス信号一覧を表示\nモールス信号 一覧表 アルファベット・数字 和文モールス（カタカナ） アルファベット 数字 記号 和文モールス（ITU-R M.1677 準拠） コピーしました！ 業務のデジタル化にはfreee\nfreeeを無料で試す\n","permalink":"https://productivity-works.com/ja/tools/morse-code-translator/","summary":"\u003cdiv id=\"morse-app\"\u003e\n\u003cstyle\u003e\n#morse-app {\n  font-family: 'Courier New', 'Lucida Console', 'MS Gothic', monospace;\n  background: #1a1a2e;\n  color: #e2e8f0;\n  border-radius: 14px;\n  padding: 28px;\n  max-width: 860px;\n  margin: 0 auto;\n  box-sizing: border-box;\n}\n#morse-app * { box-sizing: border-box; }\n\n#morse-app h2 {\n  color: #22c55e;\n  font-size: 1.2rem;\n  margin: 0 0 6px 0;\n  letter-spacing: 0.06em;\n}\n\n.morse-subtitle {\n  color: #4ade80;\n  font-size: 0.78rem;\n  margin: 0 0 22px 0;\n  letter-spacing: 0.02em;\n  opacity: 0.75;\n}\n\n/* Mode selector */\n.morse-mode-bar {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 20px;\n  flex-wrap: wrap;\n}\n.morse-mode-btn {\n  background: #16213e;\n  border: 1px solid #22c55e44;\n  color: #94a3b8;\n  padding: 7px 18px;\n  border-radius: 6px;\n  cursor: pointer;\n  font-family: inherit;\n  font-size: 0.82rem;\n  letter-spacing: 0.02em;\n  transition: all 0.18s;\n}\n.morse-mode-btn:hover { border-color: #22c55e; color: #22c55e; }\n.morse-mode-btn.active {\n  background: #22c55e;\n  border-color: #22c55e;\n  color: #1a1a2e;\n  font-weight: 700;\n}\n\n/* Panels */\n.morse-panels {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 16px;\n}\n@media (max-width: 640px) {\n  .morse-panels { grid-template-columns: 1fr; }\n}\n\n.morse-panel {\n  background: #16213e;\n  border: 1px solid #22c55e33;\n  border-radius: 10px;\n  padding: 16px;\n}\n.morse-panel-label {\n  font-size: 0.7rem;\n  color: #22c55e;\n  letter-spacing: 0.06em;\n  text-transform: uppercase;\n  margin-bottom: 10px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n.morse-textarea {\n  width: 100%;\n  min-height: 140px;\n  background: #0f172a;\n  border: 1px solid #22c55e22;\n  border-radius: 6px;\n  color: #e2e8f0;\n  font-family: 'Courier New', monospace;\n  font-size: 1rem;\n  padding: 12px;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.2s;\n  line-height: 1.6;\n}\n.morse-textarea:focus { border-color: #22c55e; }\n.morse-textarea[readonly] {\n  color: #4ade80;\n  font-size: 1.1rem;\n  letter-spacing: 0.06em;\n}\n\n/* Morse visual display */\n.morse-visual {\n  min-height: 60px;\n  background: #0f172a;\n  border: 1px solid #22c55e22;\n  border-radius: 6px;\n  padding: 12px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 4px;\n  align-items: center;\n  margin-top: 10px;\n}\n.morse-dot {\n  display: inline-block;\n  width: 8px;\n  height: 8px;\n  background: #22c55e;\n  border-radius: 50%;\n  box-shadow: 0 0 6px #22c55e88;\n}\n.morse-dash {\n  display: inline-block;\n  width: 24px;\n  height: 8px;\n  background: #22c55e;\n  border-radius: 4px;\n  box-shadow: 0 0 6px #22c55e88;\n}\n.morse-letter-gap {\n  display: inline-block;\n  width: 12px;\n}\n.morse-word-gap {\n  display: inline-block;\n  width: 28px;\n  border-left: 2px solid #22c55e22;\n  height: 20px;\n}\n\n/* Controls */\n.morse-controls {\n  display: flex;\n  gap: 12px;\n  margin-bottom: 16px;\n  flex-wrap: wrap;\n  align-items: center;\n}\n.morse-btn {\n  background: #22c55e;\n  border: none;\n  color: #1a1a2e;\n  padding: 9px 20px;\n  border-radius: 6px;\n  cursor: pointer;\n  font-family: inherit;\n  font-size: 0.85rem;\n  font-weight: 700;\n  letter-spacing: 0.04em;\n  transition: all 0.18s;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n.morse-btn:hover { background: #4ade80; transform: translateY(-1px); }\n.morse-btn:active { transform: translateY(0); }\n.morse-btn.secondary {\n  background: #16213e;\n  border: 1px solid #22c55e55;\n  color: #22c55e;\n}\n.morse-btn.secondary:hover { background: #22c55e22; border-color: #22c55e; }\n.morse-btn:disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  transform: none;\n}\n\n.morse-wpm-group {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-left: auto;\n}\n.morse-wpm-label {\n  font-size: 0.75rem;\n  color: #64748b;\n  letter-spacing: 0.02em;\n}\n.morse-wpm-val {\n  color: #22c55e;\n  font-weight: 700;\n  min-width: 32px;\n}\n.morse-wpm-slider {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 120px;\n  height: 4px;\n  background: #22c55e33;\n  border-radius: 2px;\n  outline: none;\n}\n.morse-wpm-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 16px;\n  height: 16px;\n  background: #22c55e;\n  border-radius: 50%;\n  cursor: pointer;\n  box-shadow: 0 0 6px #22c55e88;\n}\n\n/* Status bar */\n.morse-status {\n  font-size: 0.75rem;\n  color: #4ade80;\n  min-height: 18px;\n  margin-bottom: 8px;\n  letter-spacing: 0.02em;\n}\n\n/* Reference chart */\n.morse-ref-toggle {\n  background: none;\n  border: 1px solid #22c55e33;\n  color: #64748b;\n  padding: 6px 14px;\n  border-radius: 6px;\n  cursor: pointer;\n  font-family: inherit;\n  font-size: 0.75rem;\n  letter-spacing: 0.02em;\n  transition: all 0.18s;\n  margin-bottom: 14px;\n}\n.morse-ref-toggle:hover { border-color: #22c55e; color: #22c55e; }\n\n.morse-ref {\n  display: none;\n  background: #16213e;\n  border: 1px solid #22c55e22;\n  border-radius: 10px;\n  padding: 20px;\n  margin-bottom: 10px;\n}\n.morse-ref.open { display: block; }\n\n.morse-ref h3 {\n  color: #22c55e;\n  font-size: 0.8rem;\n  letter-spacing: 0.06em;\n  text-transform: uppercase;\n  margin: 0 0 14px 0;\n}\n.morse-ref-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));\n  gap: 6px;\n}\n.morse-ref-item {\n  background: #0f172a;\n  border: 1px solid #22c55e22;\n  border-radius: 6px;\n  padding: 7px 10px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  font-size: 0.82rem;\n}\n.morse-ref-char {\n  color: #e2e8f0;\n  font-weight: 700;\n  font-size: 0.9rem;\n}\n.morse-ref-code {\n  color: #22c55e;\n  letter-spacing: 0.08em;\n}\n.morse-ref-section {\n  color: #64748b;\n  font-size: 0.7rem;\n  letter-spacing: 0.05em;\n  text-transform: uppercase;\n  margin: 14px 0 8px 0;\n}\n\n/* Copy toast */\n.morse-toast {\n  position: fixed;\n  bottom: 30px;\n  right: 30px;\n  background: #22c55e;\n  color: #1a1a2e;\n  padding: 10px 22px;\n  border-radius: 8px;\n  font-weight: 700;\n  font-size: 0.85rem;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 0.3s;\n  z-index: 9999;\n  font-family: inherit;\n}\n.morse-toast.show { opacity: 1; }\n\n/* Playing indicator */\n.morse-playing-bar {\n  height: 4px;\n  background: #22c55e22;\n  border-radius: 2px;\n  margin-bottom: 14px;\n  overflow: hidden;\n  display: none;\n}\n.morse-playing-bar.active { display: block; }\n.morse-playing-fill {\n  height: 100%;\n  background: #22c55e;\n  width: 0%;\n  transition: width 0.1s linear;\n  box-shadow: 0 0 8px #22c55e;\n}\n\n/* Tab switcher for table mode */\n.morse-tab-bar {\n  display: flex;\n  gap: 6px;\n  margin-bottom: 14px;\n  flex-wrap: wrap;\n}\n.morse-tab-btn {\n  background: #0f172a;\n  border: 1px solid #22c55e33;\n  color: #64748b;\n  padding: 5px 14px;\n  border-radius: 5px;\n  cursor: pointer;\n  font-family: inherit;\n  font-size: 0.75rem;\n  transition: all 0.15s;\n}\n.morse-tab-btn:hover { color: #22c55e; border-color: #22c55e; }\n.morse-tab-btn.active { background: #22c55e22; border-color: #22c55e; color: #22c55e; }\n\u003c/style\u003e\n\u003ch2\u003e// モールス信号変換ツール\u003c/h2\u003e\n\u003cp class=\"morse-subtitle\"\u003eテキスト \u0026lt;--\u0026gt; モールス信号 \u0026nbsp;|\u0026nbsp; 音声再生対応 \u0026nbsp;|\u0026nbsp; 和文モールス対応 \u0026nbsp;|\u0026nbsp; 自動判定モード\u003c/p\u003e","title":"モールス信号変換ツール - 無料オンラインツール"},{"content":" プリセット カードレイアウト コンパクトリスト セクション間隔 ボタン 入力フィールド 単位： px rem em % 全辺を連動させる マージン（外側余白） パディング（内側余白） ボックスモデル ライブプレビュー コンテンツ CSS 出力 ショートハンド ロングハンド CSSをコピー 使い方 プリセットを選択するか、スライダー／数値入力で自由に設定します。 単位を選択 — px、rem、em、% から選べます。 マージン（外側余白）とパディング（内側余白） を上下左右それぞれ調整します。 「全辺を連動させる」 をオンにすると、4辺を同時に変更できます。 ボックスモデル図とライブプレビュー がリアルタイムで更新されます。 ショートハンドまたはロングハンド を選んで「CSSをコピー」をクリックします。 ボックスモデルの基本 層 役割 マージン 要素の外側の余白。隣接要素との距離 ボーダー 要素の境界線（別途 border で設定） パディング ボーダーの内側、コンテンツとの余白 コンテンツ テキストや画像などの実際の内容 CSSショートハンドの書き方 値は 上 → 右 → 下 → 左 の時計回りで指定します。\n/* 1つの値: 全辺同じ */ margin: 16px; /* 2つの値: 上下 左右 */ padding: 12px 24px; /* 3つの値: 上 左右 下 */ margin: 8px 16px 24px; /* 4つの値: 上 右 下 左 */ padding: 8px 16px 12px 16px; 関連ツール CSSフレックスボックスジェネレーター — フレックスレイアウトを視覚的に構築してCSSを出力 CSSボックスシャドウジェネレーター — 多層シャドウをリアルタイムプレビューで設計 CSS変数ジェネレーター — カスタムプロパティのシステムを定義・エクスポート フリーランス・個人事業主の方へ Webデザインの収益管理も、freeeなら簡単。請求書発行・確定申告・経費管理をまとめて自動化できます。\nfreeeを無料で試す ","permalink":"https://productivity-works.com/ja/tools/css-spacing-generator/","summary":"\u003cdiv id=\"sp-app\"\u003e\n\u003cstyle\u003e\n#sp-app *,\n#sp-app *::before,\n#sp-app *::after {\n  box-sizing: border-box;\n}\n\n#sp-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Noto Sans JP\", \"Yu Gothic\", sans-serif;\n  font-size: 15px;\n  color: #1a1a2e;\n  line-height: 1.6;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 0 40px;\n}\n\n#sp-app h2 {\n  font-size: 1.05rem;\n  font-weight: 700;\n  margin: 0 0 12px;\n  color: #1a1a2e;\n}\n\n/* Layout */\n#sp-layout {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n  margin-bottom: 20px;\n}\n\n@media (max-width: 640px) {\n  #sp-layout {\n    grid-template-columns: 1fr;\n  }\n}\n\n/* Panel */\n.sp-panel {\n  background: #f8f9fc;\n  border: 1px solid #dde1ec;\n  border-radius: 10px;\n  padding: 18px;\n}\n\n/* Unit selector */\n#sp-unit-bar {\n  display: flex;\n  gap: 6px;\n  margin-bottom: 18px;\n  flex-wrap: wrap;\n  align-items: center;\n}\n\n#sp-unit-bar label {\n  font-size: 0.82rem;\n  font-weight: 600;\n  color: #555;\n  margin-right: 4px;\n}\n\n.sp-unit-btn {\n  padding: 4px 12px;\n  border: 1px solid #c0c7d8;\n  border-radius: 5px;\n  background: #fff;\n  font-size: 0.82rem;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s, border-color 0.15s;\n  color: #444;\n}\n\n.sp-unit-btn:hover {\n  border-color: #6c63ff;\n  color: #6c63ff;\n}\n\n.sp-unit-btn.active {\n  background: #6c63ff;\n  color: #fff;\n  border-color: #6c63ff;\n}\n\n/* Side controls grid */\n.sp-sides-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 10px;\n}\n\n.sp-side-group {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n\n.sp-side-group label {\n  font-size: 0.78rem;\n  font-weight: 600;\n  color: #666;\n}\n\n.sp-side-row {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n.sp-side-row input[type=\"range\"] {\n  flex: 1;\n  accent-color: #6c63ff;\n  height: 4px;\n  cursor: pointer;\n}\n\n.sp-side-row input[type=\"number\"] {\n  width: 56px;\n  padding: 4px 6px;\n  border: 1px solid #c0c7d8;\n  border-radius: 5px;\n  font-size: 0.82rem;\n  text-align: right;\n  background: #fff;\n  color: #1a1a2e;\n}\n\n.sp-side-row input[type=\"number\"]:focus {\n  outline: 2px solid #6c63ff;\n  border-color: #6c63ff;\n}\n\n/* Link toggle */\n#sp-link-bar {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin: 12px 0;\n}\n\n#sp-link-bar label {\n  font-size: 0.84rem;\n  color: #555;\n  cursor: pointer;\n}\n\n.sp-toggle {\n  position: relative;\n  width: 36px;\n  height: 20px;\n  flex-shrink: 0;\n}\n\n.sp-toggle input {\n  opacity: 0;\n  width: 0;\n  height: 0;\n  position: absolute;\n}\n\n.sp-toggle-track {\n  position: absolute;\n  inset: 0;\n  background: #c0c7d8;\n  border-radius: 20px;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n\n.sp-toggle input:checked + .sp-toggle-track {\n  background: #6c63ff;\n}\n\n.sp-toggle-track::after {\n  content: \"\";\n  position: absolute;\n  top: 2px;\n  left: 2px;\n  width: 16px;\n  height: 16px;\n  background: #fff;\n  border-radius: 50%;\n  transition: transform 0.2s;\n}\n\n.sp-toggle input:checked + .sp-toggle-track::after {\n  transform: translateX(16px);\n}\n\n.sp-divider {\n  border: none;\n  border-top: 1px solid #dde1ec;\n  margin: 14px 0;\n}\n\n/* Box model diagram */\n#sp-box-diagram {\n  position: relative;\n  width: 100%;\n  max-width: 340px;\n  margin: 0 auto 16px;\n  aspect-ratio: 1;\n  user-select: none;\n}\n\n.sp-layer {\n  position: absolute;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 6px;\n  font-size: 0.72rem;\n  font-weight: 700;\n  letter-spacing: 0.04em;\n}\n\n#sp-margin-layer {\n  inset: 0;\n  background: #fde8cc;\n  border: 2px dashed #e8a45a;\n  color: #c47a20;\n}\n\n#sp-padding-layer {\n  background: #cce8fd;\n  border: 2px solid #5aade8;\n  color: #1a6fad;\n}\n\n#sp-content-layer {\n  background: #d4f5e0;\n  border: 2px solid #4caf78;\n  color: #2a7a50;\n  font-size: 0.8rem;\n}\n\n.sp-layer-label {\n  position: absolute;\n  pointer-events: none;\n}\n\n#sp-margin-layer \u003e .sp-layer-label { top: 4px; left: 8px; }\n#sp-padding-layer \u003e .sp-layer-label { top: 4px; left: 8px; }\n\n/* Presets */\n#sp-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 7px;\n  margin-bottom: 18px;\n}\n\n.sp-preset-btn {\n  padding: 5px 12px;\n  border: 1px solid #c0c7d8;\n  border-radius: 6px;\n  background: #fff;\n  font-size: 0.8rem;\n  cursor: pointer;\n  color: #444;\n  transition: background 0.15s, border-color 0.15s, color 0.15s;\n}\n\n.sp-preset-btn:hover {\n  border-color: #6c63ff;\n  color: #6c63ff;\n}\n\n/* Preview */\n#sp-preview-wrap {\n  background: #e8eaf2;\n  border-radius: 10px;\n  padding: 20px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 140px;\n  overflow: auto;\n}\n\n#sp-preview-box {\n  background: #fff;\n  border: 2px dashed #aaa;\n  border-radius: 6px;\n  max-width: 100%;\n}\n\n#sp-preview-inner {\n  background: #6c63ff;\n  color: #fff;\n  border-radius: 4px;\n  font-size: 0.82rem;\n  font-weight: 600;\n  text-align: center;\n  white-space: nowrap;\n}\n\n/* CSS Output */\n#sp-output-wrap {\n  margin-top: 20px;\n}\n\n#sp-output-tabs {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #dde1ec;\n}\n\n.sp-tab-btn {\n  padding: 7px 18px;\n  border: none;\n  background: none;\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #888;\n  cursor: pointer;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  transition: color 0.15s;\n}\n\n.sp-tab-btn.active {\n  color: #6c63ff;\n  border-bottom-color: #6c63ff;\n}\n\n#sp-output-code {\n  background: #1a1a2e;\n  color: #e0e0f0;\n  border-radius: 0 0 10px 10px;\n  padding: 16px 18px;\n  font-family: \"Fira Code\", \"Courier New\", monospace;\n  font-size: 0.82rem;\n  line-height: 1.7;\n  white-space: pre;\n  overflow-x: auto;\n  min-height: 80px;\n}\n\n#sp-copy-btn {\n  margin-top: 10px;\n  padding: 8px 22px;\n  background: #6c63ff;\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n}\n\n#sp-copy-btn:hover { background: #574fd6; }\n#sp-copy-btn:active { transform: scale(0.97); }\n#sp-copy-btn.copied { background: #2ea86a; }\n\n/* freee CTA */\n#sp-freee-cta {\n  margin-top: 32px;\n  background: linear-gradient(135deg, #1e3a5f 0%, #2563a8 100%);\n  border-radius: 12px;\n  padding: 24px 28px;\n  color: #fff;\n  display: flex;\n  align-items: center;\n  gap: 20px;\n  flex-wrap: wrap;\n}\n\n#sp-freee-cta .sp-cta-text h3 {\n  margin: 0 0 6px;\n  font-size: 1rem;\n  font-weight: 700;\n}\n\n#sp-freee-cta .sp-cta-text p {\n  margin: 0;\n  font-size: 0.85rem;\n  opacity: 0.88;\n  line-height: 1.55;\n}\n\n#sp-freee-cta a.sp-cta-btn {\n  display: inline-block;\n  padding: 10px 22px;\n  background: #fff;\n  color: #2563a8;\n  border-radius: 8px;\n  font-weight: 700;\n  font-size: 0.88rem;\n  text-decoration: none;\n  white-space: nowrap;\n  flex-shrink: 0;\n  transition: opacity 0.15s;\n}\n\n#sp-freee-cta a.sp-cta-btn:hover { opacity: 0.88; }\n\u003c/style\u003e\n\u003c!-- Presets --\u003e\n\u003cdiv style=\"margin-bottom:18px;\"\u003e\n  \u003ch2\u003eプリセット\u003c/h2\u003e\n  \u003cdiv id=\"sp-presets\"\u003e\n    \u003cbutton class=\"sp-preset-btn\" data-preset=\"card\"\u003eカードレイアウト\u003c/button\u003e\n    \u003cbutton class=\"sp-preset-btn\" data-preset=\"list\"\u003eコンパクトリスト\u003c/button\u003e\n    \u003cbutton class=\"sp-preset-btn\" data-preset=\"section\"\u003eセクション間隔\u003c/button\u003e\n    \u003cbutton class=\"sp-preset-btn\" data-preset=\"button\"\u003eボタン\u003c/button\u003e\n    \u003cbutton class=\"sp-preset-btn\" data-preset=\"input\"\u003e入力フィールド\u003c/button\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- Unit bar --\u003e\n\u003cdiv id=\"sp-unit-bar\"\u003e\n  \u003clabel\u003e単位：\u003c/label\u003e\n  \u003cbutton class=\"sp-unit-btn active\" data-unit=\"px\"\u003epx\u003c/button\u003e\n  \u003cbutton class=\"sp-unit-btn\" data-unit=\"rem\"\u003erem\u003c/button\u003e\n  \u003cbutton class=\"sp-unit-btn\" data-unit=\"em\"\u003eem\u003c/button\u003e\n  \u003cbutton class=\"sp-unit-btn\" data-unit=\"%\"\u003e%\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- Link toggle --\u003e\n\u003cdiv id=\"sp-link-bar\"\u003e\n  \u003clabel class=\"sp-toggle\" for=\"sp-link-toggle\"\u003e\n    \u003cinput type=\"checkbox\" id=\"sp-link-toggle\"\u003e\n    \u003cspan class=\"sp-toggle-track\"\u003e\u003c/span\u003e\n  \u003c/label\u003e\n  \u003clabel for=\"sp-link-toggle\"\u003e全辺を連動させる\u003c/label\u003e\n\u003c/div\u003e\n\u003c!-- Controls + Diagram --\u003e\n\u003cdiv id=\"sp-layout\"\u003e\n  \u003c!-- Left: controls --\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"sp-panel\"\u003e\n      \u003ch2\u003eマージン（外側余白）\u003c/h2\u003e\n      \u003cdiv class=\"sp-sides-grid\" id=\"sp-margin-controls\"\u003e\u003c/div\u003e\n      \u003chr class=\"sp-divider\"\u003e\n      \u003ch2\u003eパディング（内側余白）\u003c/h2\u003e\n      \u003cdiv class=\"sp-sides-grid\" id=\"sp-padding-controls\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Right: diagram + preview --\u003e\n  \u003cdiv\u003e\n    \u003cdiv class=\"sp-panel\"\u003e\n      \u003ch2\u003eボックスモデル\u003c/h2\u003e\n      \u003cdiv id=\"sp-box-diagram\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"sp-panel\" style=\"margin-top:14px;\"\u003e\n      \u003ch2\u003eライブプレビュー\u003c/h2\u003e\n      \u003cdiv id=\"sp-preview-wrap\"\u003e\n        \u003cdiv id=\"sp-preview-box\"\u003e\n          \u003cdiv id=\"sp-preview-inner\"\u003eコンテンツ\u003c/div\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- CSS Output --\u003e\n\u003cdiv id=\"sp-output-wrap\" class=\"sp-panel\"\u003e\n  \u003ch2\u003eCSS 出力\u003c/h2\u003e\n  \u003cdiv id=\"sp-output-tabs\"\u003e\n    \u003cbutton class=\"sp-tab-btn active\" data-tab=\"shorthand\"\u003eショートハンド\u003c/button\u003e\n    \u003cbutton class=\"sp-tab-btn\" data-tab=\"longhand\"\u003eロングハンド\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cpre id=\"sp-output-code\"\u003e\u003c/pre\u003e\n  \u003cbutton id=\"sp-copy-btn\"\u003eCSSをコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var SIDE_LABELS = { top: \"上\", right: \"右\", bottom: \"下\", left: \"左\" };\n\n  var state = {\n    unit: \"px\",\n    linked: false,\n    margin: { top: 16, right: 16, bottom: 16, left: 16 },\n    padding: { top: 12, right: 16, bottom: 12, left: 16 },\n    tab: \"shorthand\"\n  };\n\n  var PRESETS = {\n    card:    { margin: {top:0,right:0,bottom:0,left:0},    padding: {top:24,right:24,bottom:24,left:24} },\n    list:    { margin: {top:4,right:0,bottom:4,left:0},     padding: {top:6,right:12,bottom:6,left:12} },\n    section: { margin: {top:48,right:0,bottom:48,left:0},   padding: {top:32,right:24,bottom:32,left:24} },\n    button:  { margin: {top:0,right:8,bottom:0,left:8},     padding: {top:10,right:20,bottom:10,left:20} },\n    input:   { margin: {top:4,right:0,bottom:4,left:0},     padding: {top:8,right:12,bottom:8,left:12} }\n  };\n\n  var MAX_VAL = { px: 120, rem: 8, em: 8, \"%\": 20 };\n  var STEP    = { px: 1,   rem: 0.25, em: 0.25, \"%\": 0.5 };\n\n  function fmt(v) {\n    if (state.unit === \"px\" || state.unit === \"%\") return Math.round(v);\n    return parseFloat(v.toFixed(2));\n  }\n\n  function clamp(v) { return Math.max(0, Math.min(v, MAX_VAL[state.unit])); }\n\n  function val2px(v) {\n    if (state.unit === \"px\") return v;\n    if (state.unit === \"rem\" || state.unit === \"em\") return v * 16;\n    return v * 3;\n  }\n\n  function buildControls(prop, containerId) {\n    var container = document.getElementById(containerId);\n    container.innerHTML = \"\";\n    [\"top\",\"right\",\"bottom\",\"left\"].forEach(function(side) {\n      var group = document.createElement(\"div\");\n      group.className = \"sp-side-group\";\n\n      var lbl = document.createElement(\"label\");\n      lbl.textContent = SIDE_LABELS[side];\n      group.appendChild(lbl);\n\n      var row = document.createElement(\"div\");\n      row.className = \"sp-side-row\";\n\n      var range = document.createElement(\"input\");\n      range.type = \"range\";\n      range.min = 0;\n      range.max = MAX_VAL[state.unit];\n      range.step = STEP[state.unit];\n      range.value = state[prop][side];\n      range.id = \"sp-\" + prop + \"-\" + side + \"-range\";\n\n      var num = document.createElement(\"input\");\n      num.type = \"number\";\n      num.min = 0;\n      num.max = MAX_VAL[state.unit];\n      num.step = STEP[state.unit];\n      num.value = fmt(state[prop][side]);\n      num.id = \"sp-\" + prop + \"-\" + side + \"-num\";\n\n      range.addEventListener(\"input\", function() {\n        setSide(prop, side, clamp(parseFloat(range.value) || 0));\n      });\n      num.addEventListener(\"input\", function() {\n        setSide(prop, side, clamp(parseFloat(num.value) || 0));\n      });\n\n      row.appendChild(range);\n      row.appendChild(num);\n      group.appendChild(row);\n      container.appendChild(group);\n    });\n  }\n\n  function setSide(prop, side, v) {\n    if (state.linked) {\n      [\"top\",\"right\",\"bottom\",\"left\"].forEach(function(s) {\n        state[prop][s] = v;\n      });\n    } else {\n      state[prop][side] = v;\n    }\n    syncInputs(prop);\n    render();\n  }\n\n  function syncInputs(prop) {\n    [\"top\",\"right\",\"bottom\",\"left\"].forEach(function(side) {\n      var r = document.getElementById(\"sp-\" + prop + \"-\" + side + \"-range\");\n      var n = document.getElementById(\"sp-\" + prop + \"-\" + side + \"-num\");\n      if (r) { r.max = MAX_VAL[state.unit]; r.step = STEP[state.unit]; r.value = state[prop][side]; }\n      if (n) { n.max = MAX_VAL[state.unit]; n.step = STEP[state.unit]; n.value = fmt(state[prop][side]); }\n    });\n  }\n\n  function renderDiagram() {\n    var diagram = document.getElementById(\"sp-box-diagram\");\n    var W = diagram.offsetWidth || 300;\n\n    var m = {}, p = {};\n    [\"top\",\"right\",\"bottom\",\"left\"].forEach(function(s) {\n      m[s] = Math.min(val2px(state.margin[s]), W * 0.22);\n      p[s] = Math.min(val2px(state.padding[s]), W * 0.18);\n    });\n\n    diagram.innerHTML = \"\";\n\n    var mLayer = document.createElement(\"div\");\n    mLayer.className = \"sp-layer\";\n    mLayer.id = \"sp-margin-layer\";\n    Object.assign(mLayer.style, { top:\"0\", left:\"0\", right:\"0\", bottom:\"0\" });\n    var mLbl = document.createElement(\"span\");\n    mLbl.className = \"sp-layer-label\";\n    mLbl.textContent = \"マージン\";\n    mLayer.appendChild(mLbl);\n    diagram.appendChild(mLayer);\n\n    var pLayer = document.createElement(\"div\");\n    pLayer.className = \"sp-layer\";\n    pLayer.id = \"sp-padding-layer\";\n    Object.assign(pLayer.style, {\n      top: m.top + \"px\", right: m.right + \"px\",\n      bottom: m.bottom + \"px\", left: m.left + \"px\"\n    });\n    var pLbl = document.createElement(\"span\");\n    pLbl.className = \"sp-layer-label\";\n    pLbl.textContent = \"パディング\";\n    pLayer.appendChild(pLbl);\n    diagram.appendChild(pLayer);\n\n    var cLayer = document.createElement(\"div\");\n    cLayer.className = \"sp-layer\";\n    cLayer.id = \"sp-content-layer\";\n    Object.assign(cLayer.style, {\n      top: (m.top + p.top) + \"px\",\n      right: (m.right + p.right) + \"px\",\n      bottom: (m.bottom + p.bottom) + \"px\",\n      left: (m.left + p.left) + \"px\"\n    });\n    cLayer.textContent = \"コンテンツ\";\n    diagram.appendChild(cLayer);\n\n    // Edge value labels\n    var edges = [\n      { prop:\"margin\",  side:\"top\",    parent:mLayer, style:{ top:\"2px\",   left:\"50%\", transform:\"translateX(-50%)\" } },\n      { prop:\"margin\",  side:\"bottom\", parent:mLayer, style:{ bottom:\"2px\",left:\"50%\", transform:\"translateX(-50%)\" } },\n      { prop:\"margin\",  side:\"left\",   parent:mLayer, style:{ left:\"2px\",  top:\"50%\",  transform:\"translateY(-50%)\" } },\n      { prop:\"margin\",  side:\"right\",  parent:mLayer, style:{ right:\"2px\", top:\"50%\",  transform:\"translateY(-50%)\" } },\n      { prop:\"padding\", side:\"top\",    parent:pLayer, style:{ top:\"2px\",   left:\"50%\", transform:\"translateX(-50%)\" } },\n      { prop:\"padding\", side:\"bottom\", parent:pLayer, style:{ bottom:\"2px\",left:\"50%\", transform:\"translateX(-50%)\" } },\n      { prop:\"padding\", side:\"left\",   parent:pLayer, style:{ left:\"2px\",  top:\"50%\",  transform:\"translateY(-50%)\" } },\n      { prop:\"padding\", side:\"right\",  parent:pLayer, style:{ right:\"2px\", top:\"50%\",  transform:\"translateY(-50%)\" } },\n    ];\n\n    edges.forEach(function(e) {\n      var el = document.createElement(\"span\");\n      el.style.position = \"absolute\";\n      el.style.fontSize = \"0.62rem\";\n      el.style.fontWeight = \"700\";\n      el.style.color = \"rgba(0,0,0,0.5)\";\n      el.style.pointerEvents = \"none\";\n      el.style.whiteSpace = \"nowrap\";\n      Object.assign(el.style, e.style);\n      el.textContent = fmt(state[e.prop][e.side]) + state.unit;\n      e.parent.appendChild(el);\n    });\n  }\n\n  function renderPreview() {\n    var box = document.getElementById(\"sp-preview-box\");\n    var inner = document.getElementById(\"sp-preview-inner\");\n    function u(v) { return fmt(v) + state.unit; }\n    box.style.margin = u(state.margin.top) + \" \" + u(state.margin.right) + \" \" + u(state.margin.bottom) + \" \" + u(state.margin.left);\n    inner.style.padding = u(state.padding.top) + \" \" + u(state.padding.right) + \" \" + u(state.padding.bottom) + \" \" + u(state.padding.left);\n  }\n\n  function shorthand(prop, obj) {\n    function u(v) { return fmt(v) + state.unit; }\n    var t = u(obj.top), r = u(obj.right), b = u(obj.bottom), l = u(obj.left);\n    if (t===r \u0026\u0026 r===b \u0026\u0026 b===l) return prop + \": \" + t + \";\";\n    if (t===b \u0026\u0026 r===l) return prop + \": \" + t + \" \" + r + \";\";\n    if (r===l) return prop + \": \" + t + \" \" + r + \" \" + b + \";\";\n    return prop + \": \" + t + \" \" + r + \" \" + b + \" \" + l + \";\";\n  }\n\n  function longhand(prop, obj) {\n    function u(v) { return fmt(v) + state.unit; }\n    return [\n      prop + \"-top: \" + u(obj.top) + \";\",\n      prop + \"-right: \" + u(obj.right) + \";\",\n      prop + \"-bottom: \" + u(obj.bottom) + \";\",\n      prop + \"-left: \" + u(obj.left) + \";\"\n    ].join(\"\\n\");\n  }\n\n  function renderOutput() {\n    var code = document.getElementById(\"sp-output-code\");\n    if (state.tab === \"shorthand\") {\n      code.textContent = shorthand(\"margin\", state.margin) + \"\\n\" + shorthand(\"padding\", state.padding);\n    } else {\n      code.textContent = longhand(\"margin\", state.margin) + \"\\n\" + longhand(\"padding\", state.padding);\n    }\n  }\n\n  function render() {\n    renderDiagram();\n    renderPreview();\n    renderOutput();\n  }\n\n  function initControls() {\n    buildControls(\"margin\", \"sp-margin-controls\");\n    buildControls(\"padding\", \"sp-padding-controls\");\n  }\n\n  // Unit buttons\n  document.querySelectorAll(\".sp-unit-btn\").forEach(function(btn) {\n    btn.addEventListener(\"click\", function() {\n      document.querySelectorAll(\".sp-unit-btn\").forEach(function(b){ b.classList.remove(\"active\"); });\n      btn.classList.add(\"active\");\n      state.unit = btn.dataset.unit;\n      initControls();\n      syncInputs(\"margin\");\n      syncInputs(\"padding\");\n      render();\n    });\n  });\n\n  // Link toggle\n  document.getElementById(\"sp-link-toggle\").addEventListener(\"change\", function() {\n    state.linked = this.checked;\n  });\n\n  // Presets\n  document.querySelectorAll(\".sp-preset-btn\").forEach(function(btn) {\n    btn.addEventListener(\"click\", function() {\n      var p = PRESETS[btn.dataset.preset];\n      var scale = state.unit === \"px\" ? 1 : (state.unit === \"rem\" || state.unit === \"em\") ? 1/16 : 1/5;\n      [\"top\",\"right\",\"bottom\",\"left\"].forEach(function(s) {\n        state.margin[s] = clamp(p.margin[s] * (state.unit === \"px\" ? 1 : scale));\n        state.padding[s] = clamp(p.padding[s] * (state.unit === \"px\" ? 1 : scale));\n      });\n      syncInputs(\"margin\");\n      syncInputs(\"padding\");\n      render();\n    });\n  });\n\n  // Tab buttons\n  document.querySelectorAll(\".sp-tab-btn\").forEach(function(btn) {\n    btn.addEventListener(\"click\", function() {\n      document.querySelectorAll(\".sp-tab-btn\").forEach(function(b){ b.classList.remove(\"active\"); });\n      btn.classList.add(\"active\");\n      state.tab = btn.dataset.tab;\n      renderOutput();\n    });\n  });\n\n  // Copy button\n  document.getElementById(\"sp-copy-btn\").addEventListener(\"click\", function() {\n    var text = document.getElementById(\"sp-output-code\").textContent;\n    var btn = this;\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(text).then(function() {\n        btn.textContent = \"コピーしました！\";\n        btn.classList.add(\"copied\");\n        setTimeout(function(){ btn.textContent = \"CSSをコピー\"; btn.classList.remove(\"copied\"); }, 1600);\n      });\n    } else {\n      var ta = document.createElement(\"textarea\");\n      ta.value = text;\n      ta.style.position = \"fixed\"; ta.style.opacity = \"0\";\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand(\"copy\");\n      document.body.removeChild(ta);\n      btn.textContent = \"コピーしました！\";\n      btn.classList.add(\"copied\");\n      setTimeout(function(){ btn.textContent = \"CSSをコピー\"; btn.classList.remove(\"copied\"); }, 1600);\n    }\n  });\n\n  // Init\n  initControls();\n  render();\n\n  var resizeTimer;\n  window.addEventListener(\"resize\", function() {\n    clearTimeout(resizeTimer);\n    resizeTimer = setTimeout(renderDiagram, 120);\n  });\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eプリセットを選択\u003c/strong\u003eするか、スライダー／数値入力で自由に設定します。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e単位を選択\u003c/strong\u003e — px、rem、em、% から選べます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eマージン（外側余白）とパディング（内側余白）\u003c/strong\u003e を上下左右それぞれ調整します。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e「全辺を連動させる」\u003c/strong\u003e をオンにすると、4辺を同時に変更できます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eボックスモデル図とライブプレビュー\u003c/strong\u003e がリアルタイムで更新されます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eショートハンドまたはロングハンド\u003c/strong\u003e を選んで「CSSをコピー」をクリックします。\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"ボックスモデルの基本\"\u003eボックスモデルの基本\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e層\u003c/th\u003e\n          \u003cth\u003e役割\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eマージン\u003c/td\u003e\n          \u003ctd\u003e要素の\u003cstrong\u003e外側\u003c/strong\u003eの余白。隣接要素との距離\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eボーダー\u003c/td\u003e\n          \u003ctd\u003e要素の境界線（別途 \u003ccode\u003eborder\u003c/code\u003e で設定）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eパディング\u003c/td\u003e\n          \u003ctd\u003eボーダーの\u003cstrong\u003e内側\u003c/strong\u003e、コンテンツとの余白\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eコンテンツ\u003c/td\u003e\n          \u003ctd\u003eテキストや画像などの実際の内容\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"cssショートハンドの書き方\"\u003eCSSショートハンドの書き方\u003c/h2\u003e\n\u003cp\u003e値は \u003cstrong\u003e上 → 右 → 下 → 左\u003c/strong\u003e の時計回りで指定します。\u003c/p\u003e","title":"CSSスペーシングジェネレーター — マージン＆パディング"},{"content":" 貯金目標計算ツール 目標達成までの期間、または毎月の必要積立額を複利込みでシミュレーションします。\n何ヶ月で達成できる？ 毎月いくら積み立てる？ 目標金額（円） 現在の貯金（円） 毎月の積立額（円） 年利（%） 目標期間（年） 複利計算の頻度 毎月 四半期ごと 半年ごと 年1回 \u0026#9654; 計算する 総積立額 利息合計 最終残高 目標に対する現在の進捗 0% 元本 vs. 利息の推移（積み上げグラフ） 元本（積立額） 利息 資産管理をもっと効率的に\nfreee会計なら、資産管理・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す \u0026rarr; 家計管理 → 家計簿ツール ROI計算 → ROI計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/savings-goal-calculator/","summary":"\u003cdiv id=\"sg-app\"\u003e\n\u003cstyle\u003e\n#sg-app *,#sg-app *::before,#sg-app *::after{box-sizing:border-box;margin:0;padding:0}\n#sg-app{font-family:-apple-system,BlinkMacSystemFont,'Hiragino Kaku Gothic ProN','Noto Sans JP','Segoe UI',sans-serif;color:#1e293b;max-width:780px;margin:0 auto;padding:0 4px}\n#sg-app h2.sg-h{font-size:1.3rem;font-weight:700;color:#0f172a;margin-bottom:6px}\n#sg-app p.sg-sub{font-size:.9rem;color:#64748b;margin-bottom:18px}\n#sg-app .sg-card{background:#fff;border:1.5px solid #e2e8f0;border-radius:12px;padding:22px 22px 18px;margin-bottom:20px;box-shadow:0 1px 4px rgba(0,0,0,.06)}\n#sg-app .sg-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}\n@media(max-width:540px){#sg-app .sg-grid{grid-template-columns:1fr}}\n#sg-app .sg-field{display:flex;flex-direction:column;gap:5px}\n#sg-app .sg-field label{font-size:.82rem;font-weight:600;color:#475569}\n#sg-app .sg-field input[type=number],#sg-app .sg-field select{border:1.5px solid #cbd5e1;border-radius:8px;padding:9px 12px;font-size:.95rem;color:#0f172a;background:#f8fafc;width:100%;outline:none;transition:border-color .2s}\n#sg-app .sg-field input[type=number]:focus,#sg-app .sg-field select:focus{border-color:#3b82f6;background:#fff}\n#sg-app .sg-mode-toggle{display:flex;gap:0;border:1.5px solid #cbd5e1;border-radius:9px;overflow:hidden;margin-bottom:16px}\n#sg-app .sg-mode-toggle button{flex:1;padding:9px 8px;border:none;background:#f8fafc;color:#64748b;font-size:.83rem;font-weight:600;cursor:pointer;transition:background .18s,color .18s}\n#sg-app .sg-mode-toggle button.sg-active{background:#3b82f6;color:#fff}\n#sg-app .sg-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:11px 28px;background:linear-gradient(135deg,#2563eb 0%,#3b82f6 100%);color:#fff;border:none;border-radius:9px;font-size:.97rem;font-weight:700;cursor:pointer;width:100%;margin-top:4px;transition:opacity .18s}\n#sg-app .sg-btn:hover{opacity:.9}\n#sg-app .sg-result-card{background:linear-gradient(135deg,#eff6ff 0%,#dbeafe 100%);border:1.5px solid #bfdbfe;border-radius:12px;padding:22px;margin-bottom:20px}\n#sg-app .sg-result-headline{font-size:1.5rem;font-weight:800;color:#1d4ed8;margin-bottom:4px}\n#sg-app .sg-result-sub{font-size:.9rem;color:#3730a3;margin-bottom:18px}\n#sg-app .sg-summary-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:18px}\n@media(max-width:480px){#sg-app .sg-summary-grid{grid-template-columns:1fr 1fr}}\n#sg-app .sg-stat{background:#fff;border-radius:9px;padding:12px 10px;text-align:center;border:1px solid #bfdbfe}\n#sg-app .sg-stat-val{font-size:1.05rem;font-weight:800;color:#1d4ed8;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n#sg-app .sg-stat-lbl{font-size:.72rem;color:#64748b;margin-top:2px;display:block}\n#sg-app .sg-progress-wrap{margin-bottom:18px}\n#sg-app .sg-progress-lbl{display:flex;justify-content:space-between;font-size:.8rem;color:#64748b;margin-bottom:5px}\n#sg-app .sg-progress-track{height:20px;background:#dbeafe;border-radius:10px;overflow:hidden}\n#sg-app .sg-progress-bar{height:100%;border-radius:10px;background:linear-gradient(90deg,#2563eb,#60a5fa);transition:width .5s ease}\n#sg-app .sg-milestone-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}\n#sg-app .sg-info-tag{background:#eff6ff;color:#1d4ed8;border-radius:6px;padding:4px 10px;font-size:.78rem;font-weight:600}\n#sg-app .sg-chart-wrap{margin-bottom:8px}\n#sg-app .sg-chart-title{font-size:.85rem;font-weight:700;color:#374151;margin-bottom:8px}\n#sg-app canvas.sg-canvas{width:100%;border-radius:8px;display:block}\n#sg-app .sg-legend{display:flex;gap:16px;margin-top:7px;flex-wrap:wrap}\n#sg-app .sg-legend-item{display:flex;align-items:center;gap:5px;font-size:.78rem;color:#64748b}\n#sg-app .sg-legend-dot{width:12px;height:12px;border-radius:3px;flex-shrink:0}\n#sg-app .sg-hidden{display:none}\n#sg-app .sg-error{background:#fef2f2;border:1.5px solid #fca5a5;border-radius:8px;padding:10px 14px;color:#b91c1c;font-size:.87rem;margin-top:8px}\n\u003c/style\u003e\n\u003cdiv class=\"sg-card\"\u003e\n  \u003ch2 class=\"sg-h\"\u003e貯金目標計算ツール\u003c/h2\u003e\n  \u003cp class=\"sg-sub\"\u003e目標達成までの期間、または毎月の必要積立額を複利込みでシミュレーションします。\u003c/p\u003e","title":"貯金目標計算ツール｜目標金額までの期間・毎月の積立額を自動算出【無料】"},{"content":" CSS変数ジェネレーター カラー・タイポグラフィ・スペーシング・角丸・影をデザイントークンとして生成します。\nプリセット: ライトモダン ダークモード オーシャン フォレスト ウォーム \u0026lt;!-- カラー --\u0026gt; \u0026lt;div class=\u0026quot;cv-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-section-title\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-section-icon\u0026quot; style=\u0026quot;background:#ede9fe;\u0026quot;\u0026gt;\u0026amp;#127912;\u0026lt;/span\u0026gt; カラー \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;プライマリ\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;cv-color-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-color-swatch\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;c-primary\u0026quot; value=\u0026quot;#2563eb\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-hex-input\u0026quot; id=\u0026quot;h-primary\u0026quot; value=\u0026quot;#2563eb\u0026quot; maxlength=\u0026quot;7\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;セカンダリ\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;cv-color-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-color-swatch\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;c-secondary\u0026quot; value=\u0026quot;#7c3aed\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-hex-input\u0026quot; id=\u0026quot;h-secondary\u0026quot; value=\u0026quot;#7c3aed\u0026quot; maxlength=\u0026quot;7\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;アクセント\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;cv-color-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-color-swatch\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;c-accent\u0026quot; value=\u0026quot;#f59e0b\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-hex-input\u0026quot; id=\u0026quot;h-accent\u0026quot; value=\u0026quot;#f59e0b\u0026quot; maxlength=\u0026quot;7\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;背景\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;cv-color-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-color-swatch\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;c-bg\u0026quot; value=\u0026quot;#ffffff\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-hex-input\u0026quot; id=\u0026quot;h-bg\u0026quot; value=\u0026quot;#ffffff\u0026quot; maxlength=\u0026quot;7\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;サーフェス\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;cv-color-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-color-swatch\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;c-surface\u0026quot; value=\u0026quot;#f8fafc\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-hex-input\u0026quot; id=\u0026quot;h-surface\u0026quot; value=\u0026quot;#f8fafc\u0026quot; maxlength=\u0026quot;7\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;テキスト\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;cv-color-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-color-swatch\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;c-text\u0026quot; value=\u0026quot;#1e293b\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-hex-input\u0026quot; id=\u0026quot;h-text\u0026quot; value=\u0026quot;#1e293b\u0026quot; maxlength=\u0026quot;7\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;テキスト（薄）\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;cv-color-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-color-swatch\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;c-text-muted\u0026quot; value=\u0026quot;#64748b\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-hex-input\u0026quot; id=\u0026quot;h-text-muted\u0026quot; value=\u0026quot;#64748b\u0026quot; maxlength=\u0026quot;7\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;ボーダー\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;cv-color-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-color-swatch\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;c-border\u0026quot; value=\u0026quot;#e2e8f0\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-hex-input\u0026quot; id=\u0026quot;h-border\u0026quot; value=\u0026quot;#e2e8f0\u0026quot; maxlength=\u0026quot;7\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- タイポグラフィ --\u0026gt; \u0026lt;div class=\u0026quot;cv-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-section-title\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-section-icon\u0026quot; style=\u0026quot;background:#fef9c3;\u0026quot;\u0026gt;T\u0026lt;/span\u0026gt; タイポグラフィ \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;フォントファミリー\u0026lt;/span\u0026gt; \u0026lt;select class=\u0026quot;cv-select-input\u0026quot; id=\u0026quot;t-font-family\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;-apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Noto Sans JP', sans-serif\u0026quot;\u0026gt;システムUI（日本語対応）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;'Inter', sans-serif\u0026quot;\u0026gt;Inter\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;'Roboto', sans-serif\u0026quot;\u0026gt;Roboto\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;'Poppins', sans-serif\u0026quot;\u0026gt;Poppins\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;'Noto Serif JP', Georgia, serif\u0026quot;\u0026gt;Noto Serif JP\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;'Fira Code', 'Consolas', monospace\u0026quot;\u0026gt;Fira Code（等幅）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;基本サイズ\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;t-base\u0026quot; value=\u0026quot;1rem\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;サイズ SM\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;t-sm\u0026quot; value=\u0026quot;0.875rem\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;サイズ LG\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;t-lg\u0026quot; value=\u0026quot;1.125rem\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;サイズ XL\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;t-xl\u0026quot; value=\u0026quot;1.25rem\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;サイズ 2XL\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;t-2xl\u0026quot; value=\u0026quot;1.5rem\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;通常ウェイト\u0026lt;/span\u0026gt; \u0026lt;select class=\u0026quot;cv-select-input\u0026quot; id=\u0026quot;t-weight-normal\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;300\u0026quot;\u0026gt;300 ライト\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;400\u0026quot; selected\u0026gt;400 レギュラー\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;500\u0026quot;\u0026gt;500 ミディアム\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;太字ウェイト\u0026lt;/span\u0026gt; \u0026lt;select class=\u0026quot;cv-select-input\u0026quot; id=\u0026quot;t-weight-bold\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;600\u0026quot;\u0026gt;600 セミボールド\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;700\u0026quot; selected\u0026gt;700 ボールド\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;800\u0026quot;\u0026gt;800 エクストラボールド\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;900\u0026quot;\u0026gt;900 ブラック\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;行の高さ\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;t-leading\u0026quot; value=\u0026quot;1.6\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;行の高さ（狭）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;t-leading-tight\u0026quot; value=\u0026quot;1.25\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- スペーシング --\u0026gt; \u0026lt;div class=\u0026quot;cv-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-section-title\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-section-icon\u0026quot; style=\u0026quot;background:#dcfce7;\u0026quot;\u0026gt;\u0026amp;#8596;\u0026lt;/span\u0026gt; スペーシング \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;XS（極小）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;sp-xs\u0026quot; value=\u0026quot;4px\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;SM（小）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;sp-sm\u0026quot; value=\u0026quot;8px\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;MD（中）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;sp-md\u0026quot; value=\u0026quot;16px\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;LG（大）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;sp-lg\u0026quot; value=\u0026quot;24px\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;XL（特大）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;sp-xl\u0026quot; value=\u0026quot;32px\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;2XL\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;sp-2xl\u0026quot; value=\u0026quot;48px\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;3XL\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;sp-3xl\u0026quot; value=\u0026quot;64px\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- 角丸 --\u0026gt; \u0026lt;div class=\u0026quot;cv-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-section-title\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-section-icon\u0026quot; style=\u0026quot;background:#fce7f3;\u0026quot;\u0026gt;\u0026amp;#11096;\u0026lt;/span\u0026gt; 角丸（Border Radius） \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;SM（小）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;r-sm\u0026quot; value=\u0026quot;4px\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;MD（中）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;r-md\u0026quot; value=\u0026quot;8px\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;LG（大）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;r-lg\u0026quot; value=\u0026quot;12px\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;XL（特大）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;r-xl\u0026quot; value=\u0026quot;16px\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;Full（丸型）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;r-full\u0026quot; value=\u0026quot;9999px\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- 影 --\u0026gt; \u0026lt;div class=\u0026quot;cv-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-section-title\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-section-icon\u0026quot; style=\u0026quot;background:#e0f2fe;\u0026quot;\u0026gt;\u0026amp;#9737;\u0026lt;/span\u0026gt; 影（Shadow） \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;SM（小）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;sh-sm\u0026quot; value=\u0026quot;0 1px 3px rgba(0,0,0,0.1)\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;MD（中）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;sh-md\u0026quot; value=\u0026quot;0 4px 12px rgba(0,0,0,0.12)\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;LG（大）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;sh-lg\u0026quot; value=\u0026quot;0 8px 24px rgba(0,0,0,0.15)\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-row-label\u0026quot;\u0026gt;XL（特大）\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;cv-text-input\u0026quot; id=\u0026quot;sh-xl\u0026quot; value=\u0026quot;0 16px 48px rgba(0,0,0,0.2)\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-preview-title\u0026quot;\u0026gt;ライブプレビュー\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-preview-area\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-preview-inner\u0026quot; id=\u0026quot;cv-preview-inner\u0026quot;\u0026gt; \u0026lt;!-- JSで描画 --\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-output-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;cv-output-header\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;cv-output-label\u0026quot;\u0026gt;生成されたCSS\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;cv-copy-btn\u0026quot; id=\u0026quot;cv-copy-btn\u0026quot;\u0026gt;CSSをコピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;cv-code-box\u0026quot; id=\u0026quot;cv-code-box\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 関連ツール カラーパレットジェネレーター CSSグラデーションジェネレーター カラーコントラストチェッカー フリーランス・個人事業主の方へ デザイン案件の請求書作成・経費管理をシンプルに。freeeなら確定申告まで自動化できます。 freeeを無料で試す 関連ツール Box Shadow Generator → Box Shadow Generatorツール Css Animation Generator → Css Animation Generatorツール Css Button Generator → Css Button Generatorツール ","permalink":"https://productivity-works.com/ja/tools/css-variables-generator/","summary":"\u003cdiv id=\"cssvar-app\"\u003e\n\u003cstyle\u003e\n#cssvar-app *,\n#cssvar-app *::before,\n#cssvar-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#cssvar-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Noto Sans JP\", \"Segoe UI\", sans-serif;\n  font-size: 15px;\n  color: #1a1a2e;\n  line-height: 1.6;\n  background: #f4f6fb;\n  border-radius: 12px;\n  padding: 0 0 32px 0;\n  overflow: hidden;\n}\n\n/* ── ヘッダー ── */\n#cssvar-app .cv-header {\n  background: linear-gradient(135deg, #2563eb 0%, #7c3aed 100%);\n  color: #fff;\n  padding: 28px 32px 24px;\n}\n#cssvar-app .cv-header h1 {\n  font-size: 1.5rem;\n  font-weight: 700;\n  letter-spacing: -0.5px;\n  margin-bottom: 4px;\n}\n#cssvar-app .cv-header p {\n  font-size: 0.9rem;\n  opacity: 0.85;\n}\n\n/* ── プリセットバー ── */\n#cssvar-app .cv-preset-bar {\n  background: #fff;\n  border-bottom: 1px solid #e2e8f0;\n  padding: 12px 32px;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n#cssvar-app .cv-preset-label {\n  font-size: 0.78rem;\n  font-weight: 600;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  margin-right: 4px;\n  white-space: nowrap;\n}\n#cssvar-app .cv-preset-btn {\n  padding: 6px 16px;\n  border-radius: 20px;\n  border: 1.5px solid #cbd5e1;\n  background: #f8fafc;\n  color: #334155;\n  font-size: 0.82rem;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.15s;\n  white-space: nowrap;\n  font-family: inherit;\n}\n#cssvar-app .cv-preset-btn:hover {\n  border-color: #2563eb;\n  color: #2563eb;\n  background: #eff6ff;\n}\n#cssvar-app .cv-preset-btn.active {\n  background: #2563eb;\n  border-color: #2563eb;\n  color: #fff;\n}\n\n/* ── メインレイアウト ── */\n#cssvar-app .cv-main {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 0;\n}\n@media (max-width: 820px) {\n  #cssvar-app .cv-main {\n    grid-template-columns: 1fr;\n  }\n}\n\n/* ── 左パネル ── */\n#cssvar-app .cv-panel {\n  padding: 24px 28px;\n  border-right: 1px solid #e2e8f0;\n}\n@media (max-width: 820px) {\n  #cssvar-app .cv-panel {\n    border-right: none;\n    border-bottom: 1px solid #e2e8f0;\n  }\n}\n\n/* ── セクション ── */\n#cssvar-app .cv-section {\n  margin-bottom: 28px;\n}\n#cssvar-app .cv-section-title {\n  font-size: 0.76rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #94a3b8;\n  margin-bottom: 14px;\n  padding-bottom: 8px;\n  border-bottom: 1px solid #e2e8f0;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n#cssvar-app .cv-section-icon {\n  width: 18px;\n  height: 18px;\n  border-radius: 4px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 11px;\n}\n\n/* ── 行 ── */\n#cssvar-app .cv-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 10px;\n}\n#cssvar-app .cv-row-label {\n  font-size: 0.8rem;\n  color: #475569;\n  width: 140px;\n  flex-shrink: 0;\n  font-weight: 500;\n}\n@media (max-width: 500px) {\n  #cssvar-app .cv-row {\n    flex-wrap: wrap;\n  }\n  #cssvar-app .cv-row-label {\n    width: 100%;\n  }\n}\n\n/* カラー入力 */\n#cssvar-app .cv-color-wrap {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex: 1;\n}\n#cssvar-app .cv-color-swatch {\n  width: 34px;\n  height: 34px;\n  border-radius: 8px;\n  border: 2px solid #e2e8f0;\n  cursor: pointer;\n  padding: 0;\n  background: transparent;\n  overflow: hidden;\n  flex-shrink: 0;\n}\n#cssvar-app .cv-color-swatch input[type=\"color\"] {\n  width: 44px;\n  height: 44px;\n  border: none;\n  padding: 0;\n  cursor: pointer;\n  transform: translate(-5px, -5px);\n}\n#cssvar-app .cv-hex-input {\n  flex: 1;\n  min-width: 80px;\n  padding: 6px 10px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 7px;\n  font-size: 0.82rem;\n  font-family: \"Fira Mono\", \"Consolas\", monospace;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.15s;\n  max-width: 110px;\n}\n#cssvar-app .cv-hex-input:focus {\n  outline: none;\n  border-color: #2563eb;\n}\n\n/* テキスト・セレクト入力 */\n#cssvar-app .cv-text-input,\n#cssvar-app .cv-select-input {\n  flex: 1;\n  padding: 6px 10px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 7px;\n  font-size: 0.82rem;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.15s;\n  font-family: inherit;\n}\n#cssvar-app .cv-text-input:focus,\n#cssvar-app .cv-select-input:focus {\n  outline: none;\n  border-color: #2563eb;\n}\n\n/* ── 右プレビューパネル ── */\n#cssvar-app .cv-preview-panel {\n  padding: 24px 28px;\n  background: #f8fafc;\n}\n#cssvar-app .cv-preview-title {\n  font-size: 0.76rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #94a3b8;\n  margin-bottom: 16px;\n  padding-bottom: 8px;\n  border-bottom: 1px solid #e2e8f0;\n}\n\n/* プレビューエリア */\n#cssvar-app .cv-preview-area {\n  border-radius: 10px;\n  overflow: hidden;\n  border: 1.5px solid #e2e8f0;\n  margin-bottom: 16px;\n}\n#cssvar-app .cv-preview-inner {\n  padding: 24px;\n  transition: background 0.3s;\n}\n\n/* 出力エリア */\n#cssvar-app .cv-output-section {\n  margin-top: 0;\n}\n#cssvar-app .cv-output-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 8px;\n}\n#cssvar-app .cv-output-label {\n  font-size: 0.76rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #94a3b8;\n}\n#cssvar-app .cv-copy-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 7px 16px;\n  background: #2563eb;\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  font-size: 0.82rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n  font-family: inherit;\n}\n#cssvar-app .cv-copy-btn:hover {\n  background: #1d4ed8;\n}\n#cssvar-app .cv-copy-btn:active {\n  transform: scale(0.97);\n}\n#cssvar-app .cv-copy-btn.copied {\n  background: #16a34a;\n}\n#cssvar-app .cv-code-box {\n  background: #0f172a;\n  color: #94d2bd;\n  font-family: \"Fira Mono\", \"Consolas\", \"Monaco\", monospace;\n  font-size: 0.76rem;\n  line-height: 1.7;\n  padding: 16px 18px;\n  border-radius: 9px;\n  overflow-x: auto;\n  overflow-y: auto;\n  max-height: 300px;\n  white-space: pre;\n  tab-size: 2;\n}\n\n/* ── 関連リンク ── */\n#cssvar-app .cv-links {\n  margin: 24px 28px 0;\n  padding: 18px 20px;\n  background: #eff6ff;\n  border-radius: 10px;\n  border: 1px solid #bfdbfe;\n}\n#cssvar-app .cv-links-title {\n  font-size: 0.8rem;\n  font-weight: 700;\n  color: #1d4ed8;\n  margin-bottom: 8px;\n}\n#cssvar-app .cv-links ul {\n  list-style: none;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n#cssvar-app .cv-links ul li a {\n  display: inline-block;\n  padding: 5px 14px;\n  background: #fff;\n  border: 1.5px solid #93c5fd;\n  border-radius: 20px;\n  color: #1d4ed8;\n  font-size: 0.82rem;\n  font-weight: 500;\n  text-decoration: none;\n  transition: all 0.15s;\n}\n#cssvar-app .cv-links ul li a:hover {\n  background: #2563eb;\n  color: #fff;\n  border-color: #2563eb;\n}\n\n/* ── freee CTA ── */\n#cssvar-app .cv-freee-cta {\n  margin: 16px 28px 0;\n  padding: 20px 22px;\n  background: linear-gradient(135deg, #fff7ed 0%, #fef3c7 100%);\n  border-radius: 10px;\n  border: 1px solid #fde68a;\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  flex-wrap: wrap;\n}\n#cssvar-app .cv-freee-cta-body {\n  flex: 1;\n  min-width: 200px;\n}\n#cssvar-app .cv-freee-cta-title {\n  font-size: 0.88rem;\n  font-weight: 700;\n  color: #92400e;\n  margin-bottom: 4px;\n}\n#cssvar-app .cv-freee-cta-desc {\n  font-size: 0.8rem;\n  color: #78350f;\n  line-height: 1.5;\n}\n#cssvar-app .cv-freee-cta-btn {\n  display: inline-block;\n  padding: 9px 20px;\n  background: #f59e0b;\n  color: #fff;\n  border-radius: 8px;\n  font-size: 0.84rem;\n  font-weight: 700;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: background 0.15s;\n}\n#cssvar-app .cv-freee-cta-btn:hover {\n  background: #d97706;\n  color: #fff;\n}\n\u003c/style\u003e\n\u003cdiv class=\"cv-header\"\u003e\n  \u003ch1\u003eCSS変数ジェネレーター\u003c/h1\u003e\n  \u003cp\u003eカラー・タイポグラフィ・スペーシング・角丸・影をデザイントークンとして生成します。\u003c/p\u003e","title":"CSS変数ジェネレーター — デザイントークンビルダー"},{"content":" 割り勘計算ツール 基本情報 合計金額（円） 人数 サービス料（%、任意） 割り勘モード 均等割り 傾斜配分（個別指定） 全員が同じ金額を負担します。\n名前と負担割合（または金額）を個別に指定できます。割合を入力してください（合計100にならない場合は按分します）。\n＋ メンバーを追加 ※ 割合を空欄にしたメンバーは均等按分の対象になります。\n端数処理 端数処理方法 切り上げ 切り捨て 四捨五入 単位 1円単位 10円単位 100円単位 1000円単位 幹事が端数を負担する（端数を差し引いた金額を幹事が払う） 幹事の名前（任意） 割り勘を計算する\n計算結果 事業の経費精算もかんたんに\nfreee会計なら、交際費・会議費の経費精算もクラウドで簡単。無料トライアル実施中。 freeeを無料で試す → チップを計算 → チップ計算ツール 家計を見直す → 50/30/20 家計バランス計算 パーセントを計算 → パーセント計算ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/split-bill-calculator/","summary":"\u003cdiv id=\"sb-app\"\u003e\n\u003cstyle\u003e\n#sb-app {\n  font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif;\n  max-width: 680px;\n  margin: 0 auto;\n  padding: 0 4px;\n  color: #1e293b;\n}\n#sb-app h2 {\n  font-size: 1.15rem;\n  font-weight: 700;\n  color: #334155;\n  margin: 24px 0 10px;\n  padding-bottom: 6px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#sb-app .sb-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 20px;\n  margin-bottom: 18px;\n}\n#sb-app label {\n  display: block;\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 5px;\n}\n#sb-app input[type=\"number\"],\n#sb-app input[type=\"text\"],\n#sb-app select {\n  width: 100%;\n  box-sizing: border-box;\n  padding: 9px 12px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 15px;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.15s;\n  outline: none;\n}\n#sb-app input[type=\"number\"]:focus,\n#sb-app input[type=\"text\"]:focus,\n#sb-app select:focus {\n  border-color: #38bdf8;\n}\n#sb-app .sb-row {\n  display: flex;\n  gap: 12px;\n  margin-bottom: 14px;\n  flex-wrap: wrap;\n}\n#sb-app .sb-row \u003e div {\n  flex: 1 1 160px;\n  min-width: 140px;\n}\n#sb-app .sb-row-full {\n  margin-bottom: 14px;\n}\n#sb-app .sb-mode-tabs {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 16px;\n}\n#sb-app .sb-tab-btn {\n  flex: 1;\n  padding: 9px 4px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  background: #fff;\n  font-size: 13px;\n  font-weight: 600;\n  color: #64748b;\n  cursor: pointer;\n  transition: all 0.15s;\n  text-align: center;\n}\n#sb-app .sb-tab-btn.active {\n  background: #0284c7;\n  border-color: #0284c7;\n  color: #fff;\n}\n#sb-app .sb-tab-btn:hover:not(.active) {\n  border-color: #38bdf8;\n  color: #0284c7;\n}\n#sb-app .sb-members {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  margin-bottom: 10px;\n}\n#sb-app .sb-member-row {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n}\n#sb-app .sb-member-row input[type=\"text\"] {\n  flex: 1.5;\n  min-width: 80px;\n}\n#sb-app .sb-member-row input[type=\"number\"] {\n  flex: 1;\n  min-width: 80px;\n}\n#sb-app .sb-member-row .sb-remove-btn {\n  background: none;\n  border: 1.5px solid #fca5a5;\n  border-radius: 6px;\n  color: #ef4444;\n  font-size: 16px;\n  width: 32px;\n  height: 36px;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  transition: background 0.12s;\n}\n#sb-app .sb-member-row .sb-remove-btn:hover {\n  background: #fee2e2;\n}\n#sb-app .sb-add-btn {\n  padding: 7px 14px;\n  border: 1.5px dashed #94a3b8;\n  border-radius: 7px;\n  background: #fff;\n  color: #64748b;\n  font-size: 13px;\n  cursor: pointer;\n  font-weight: 600;\n  transition: all 0.15s;\n}\n#sb-app .sb-add-btn:hover {\n  border-color: #0284c7;\n  color: #0284c7;\n}\n#sb-app .sb-checkbox-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 10px;\n  font-size: 13px;\n  color: #475569;\n  font-weight: 600;\n  cursor: pointer;\n}\n#sb-app .sb-checkbox-row input[type=\"checkbox\"] {\n  width: 16px;\n  height: 16px;\n  accent-color: #0284c7;\n  cursor: pointer;\n}\n#sb-app .sb-inline-input {\n  display: inline-block;\n  width: 70px;\n  padding: 4px 8px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 14px;\n  margin: 0 4px;\n  vertical-align: middle;\n}\n#sb-app .sb-calc-btn {\n  width: 100%;\n  padding: 13px;\n  background: linear-gradient(135deg, #0284c7 0%, #0369a1 100%);\n  color: #fff;\n  border: none;\n  border-radius: 9px;\n  font-size: 16px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.15s, transform 0.1s;\n  margin-top: 4px;\n}\n#sb-app .sb-calc-btn:hover {\n  opacity: 0.92;\n  transform: translateY(-1px);\n}\n#sb-app .sb-calc-btn:active {\n  transform: translateY(0);\n}\n#sb-app .sb-result {\n  display: none;\n  background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);\n  border: 1.5px solid #bae6fd;\n  border-radius: 10px;\n  padding: 20px;\n  margin-top: 18px;\n}\n#sb-app .sb-result.visible {\n  display: block;\n}\n#sb-app .sb-result h3 {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #0369a1;\n  margin: 0 0 14px;\n}\n#sb-app .sb-result-main {\n  font-size: 2rem;\n  font-weight: 800;\n  color: #0284c7;\n  margin-bottom: 6px;\n  letter-spacing: -0.5px;\n}\n#sb-app .sb-result-sub {\n  font-size: 13px;\n  color: #475569;\n  margin-bottom: 14px;\n}\n#sb-app .sb-result-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 14px;\n  margin-top: 10px;\n}\n#sb-app .sb-result-table th {\n  background: #bae6fd;\n  color: #0369a1;\n  padding: 7px 10px;\n  text-align: left;\n  font-weight: 700;\n  border-radius: 0;\n}\n#sb-app .sb-result-table th:first-child { border-radius: 6px 0 0 0; }\n#sb-app .sb-result-table th:last-child { border-radius: 0 6px 0 0; }\n#sb-app .sb-result-table td {\n  padding: 7px 10px;\n  border-bottom: 1px solid #e0f2fe;\n  color: #1e293b;\n}\n#sb-app .sb-result-table tr:last-child td {\n  border-bottom: none;\n}\n#sb-app .sb-result-table tr:nth-child(even) td {\n  background: #f0f9ff;\n}\n#sb-app .sb-badge {\n  display: inline-block;\n  padding: 2px 8px;\n  border-radius: 99px;\n  font-size: 11px;\n  font-weight: 700;\n  background: #fef3c7;\n  color: #92400e;\n  margin-left: 6px;\n  vertical-align: middle;\n}\n#sb-app .sb-error {\n  display: none;\n  background: #fee2e2;\n  border: 1.5px solid #fca5a5;\n  border-radius: 8px;\n  padding: 10px 14px;\n  color: #b91c1c;\n  font-size: 13px;\n  font-weight: 600;\n  margin-top: 10px;\n}\n#sb-app .sb-error.visible {\n  display: block;\n}\n@media (max-width: 480px) {\n  #sb-app .sb-row \u003e div { flex: 1 1 100%; }\n  #sb-app .sb-result-main { font-size: 1.5rem; }\n}\n\u003c/style\u003e\n\u003ch2\u003e割り勘計算ツール\u003c/h2\u003e\n\u003cdiv class=\"sb-card\"\u003e\n  \u003ch2 style=\"margin-top:0;border-bottom:none;padding-bottom:0;font-size:1rem;\"\u003e基本情報\u003c/h2\u003e\n  \u003cdiv class=\"sb-row\"\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"sb-total\"\u003e合計金額（円）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"sb-total\" placeholder=\"例: 25000\" min=\"0\" step=\"1\"\u003e\n    \u003c/div\u003e\n    \u003cdiv\u003e\n      \u003clabel for=\"sb-people\"\u003e人数\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"sb-people\" placeholder=\"例: 5\" min=\"1\" step=\"1\" value=\"4\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"sb-row-full\"\u003e\n    \u003clabel for=\"sb-service\"\u003eサービス料（%、任意）\u003c/label\u003e\n    \u003cinput type=\"number\" id=\"sb-service\" placeholder=\"例: 10（サービス料10%の場合）\" min=\"0\" max=\"100\" step=\"0.1\"\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"sb-card\"\u003e\n  \u003ch2 style=\"margin-top:0;border-bottom:none;padding-bottom:0;font-size:1rem;\"\u003e割り勘モード\u003c/h2\u003e\n  \u003cdiv class=\"sb-mode-tabs\"\u003e\n    \u003cdiv class=\"sb-tab-btn active\" id=\"tab-equal\" onclick=\"sbSetMode('equal')\"\u003e均等割り\u003c/div\u003e\n    \u003cdiv class=\"sb-tab-btn\" id=\"tab-custom\" onclick=\"sbSetMode('custom')\"\u003e傾斜配分（個別指定）\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"sb-mode-equal\"\u003e\n    \u003cp style=\"font-size:13px;color:#64748b;margin:0;\"\u003e全員が同じ金額を負担します。\u003c/p\u003e","title":"割り勘計算ツール"},{"content":"※本記事にはアフィリエイト広告が含まれています。\n所得税シミュレーター 年収を入力するだけで、所得税・住民税・社会保険料・手取り額を一括計算します。累進課税の仕組みも一目で確認できます。\n年収（額面・万円） 働き方 会社員 フリーランス 経費率（%） 0%30%80% 青色申告特別控除（65万円） 扶養家族 なし（独身・共働き） 配偶者控除あり 配偶者+子1人 配偶者+子2人 所得税率（最高税率） 20% 実効税率（税金合計/年収） 21.5% 所得税 21万円 住民税 24万円 社会保険料 72万円 手取り 383万円 月額手取り: 31.9万円 年収の内訳 手取り 所得税 住民税 社会保険料 所得税の累進課税ブラケットを表示 税率 課税所得 控除額 この区分の税額 年収別の手取り比較 使い方 年収（額面）を入力 — 源泉徴収票の「支払金額」欄の数字 働き方を選択 — 会社員は給与所得控除が自動適用、フリーランスは経費率・青色申告を設定 扶養家族を選択 — 配偶者控除・扶養控除が反映されます 日本の所得税率表（2026年） 課税所得 税率 控除額 〜195万円 5% 0円 195〜330万円 10% 9.75万円 330〜695万円 20% 42.75万円 695〜900万円 23% 63.6万円 900〜1,800万円 33% 153.6万円 1,800〜4,000万円 40% 279.6万円 4,000万円〜 45% 479.6万円 復興特別所得税（2.1%）が加算されます。住民税は一律10%+均等割5,000円。\n手取りを増やす方法 1. iDeCo・小規模企業共済を活用する 掛金が全額所得控除になるため、課税所得を直接減らせます。年収500万円で月2.3万円のiDeCoなら、年間約5.5万円の節税効果。\n2. ふるさと納税を活用する 実質2,000円の負担で各地の返礼品がもらえます。控除上限額は年収と家族構成で変わります。\n3. 医療費控除を忘れずに申告する 年間医療費が10万円を超えた場合、確定申告で控除が受けられます。\n4. フリーランスは青色申告を必ず選択する 青色申告特別控除65万円は非常に大きな節税効果があります。年収500万円（経費30%）の場合、白色申告より約13万円の節税になります。\n関連ツール 年収から手取りを詳細計算 → 手取り計算シミュレーター 副業収入の税金を計算 → 副業税金計算シミュレーター iDeCoの節税効果を計算 → iDeCoシミュレーター ふるさと納税の控除上限額を計算 → ふるさと納税シミュレーター 月収から理想の支出配分を計算 → 家計簿シミュレーター 関連記事 フリーランス確定申告のやり方 副業確定申告20万以下のやり方 freee青色申告65万円控除 確定拠出年金と確定給付年金の違い Productivity Worksの無料ツール 当サイトの計算ツールはすべて完全無料、ブラウザ上で動作し、データは一切保存されません。\n全ツール一覧はこちら 確定申告を簡単に済ませたいなら、freee会計がおすすめです。銀行口座・クレジットカードと連携して仕訳を自動化し、青色申告書類もガイドに沿って作成できます。\n本記事にはアフィリエイトリンクが含まれています。読者の皆様に追加費用は発生しません。\n","permalink":"https://productivity-works.com/ja/tools/shotokuzei-simulator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"所得税シミュレーター\"\u003e所得税シミュレーター\u003c/h1\u003e\n\u003cp\u003e年収を入力するだけで、\u003cstrong\u003e所得税・住民税・社会保険料・手取り額\u003c/strong\u003eを一括計算します。累進課税の仕組みも一目で確認できます。\u003c/p\u003e\n\u003cdiv id=\"st-calc\" style=\"max-width:720px;margin:0 auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Hiragino Sans',sans-serif;color:#1e293b;\"\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #b91c1c;border-radius:12px;background:#fef2f2;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e年収（額面・万円）\u003c/label\u003e\n\u003cinput type=\"number\" id=\"stIncome\" min=\"0\" max=\"100000\" step=\"10\" value=\"500\" oninput=\"calcST()\" style=\"width:100%;padding:12px;border:1px solid #cbd5e1;border-radius:8px;font-size:18px;\"\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e働き方\u003c/label\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:8px;\"\u003e\n\u003clabel style=\"display:flex;align-items:center;padding:12px;border:2px solid #b91c1c;border-radius:8px;cursor:pointer;background:#fef2f2;\" id=\"lbl-employee\"\u003e\n\u003cinput type=\"radio\" name=\"stType\" value=\"employee\" checked onchange=\"calcST()\" style=\"margin-right:8px;\"\u003e 会社員\n\u003c/label\u003e\n\u003clabel style=\"display:flex;align-items:center;padding:12px;border:2px solid #e2e8f0;border-radius:8px;cursor:pointer;background:white;\" id=\"lbl-freelance\"\u003e\n\u003cinput type=\"radio\" name=\"stType\" value=\"freelance\" onchange=\"calcST()\" style=\"margin-right:8px;\"\u003e フリーランス\n\u003c/label\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv id=\"stFreelanceOpts\" style=\"display:none;margin-bottom:20px;padding:16px;background:white;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\n\u003cdiv style=\"margin-bottom:12px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;font-size:14px;\"\u003e経費率（%）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"stExpenseRate\" min=\"0\" max=\"80\" step=\"5\" value=\"30\" oninput=\"calcST()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e0%\u003c/span\u003e\u003cspan id=\"stExpenseVal\" style=\"font-weight:bold;color:#b91c1c;\"\u003e30%\u003c/span\u003e\u003cspan\u003e80%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\u003clabel style=\"display:flex;align-items:center;cursor:pointer;font-size:14px;\"\u003e\n\u003cinput type=\"checkbox\" id=\"stBlueReturn\" checked onchange=\"calcST()\" style=\"margin-right:6px;width:16px;height:16px;\"\u003e 青色申告特別控除（65万円）\n\u003c/label\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:8px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e扶養家族\u003c/label\u003e\n\u003cselect id=\"stDependents\" onchange=\"calcST()\" style=\"width:100%;padding:10px;border:1px solid #cbd5e1;border-radius:8px;font-size:15px;color:#1e293b;background:#fff;\"\u003e\n\u003coption value=\"0\"\u003eなし（独身・共働き）\u003c/option\u003e\n\u003coption value=\"1\"\u003e配偶者控除あり\u003c/option\u003e\n\u003coption value=\"2\"\u003e配偶者+子1人\u003c/option\u003e\n\u003coption value=\"3\"\u003e配偶者+子2人\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 結果 --\u003e\n\u003cdiv id=\"stResults\" style=\"margin-top:24px;\"\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;text-align:center;\"\u003e\n\u003cdiv style=\"padding:20px;background:#fef2f2;border-radius:12px;border:1px solid #fecaca;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e所得税率（最高税率）\u003c/div\u003e\n\u003cdiv id=\"stRate\" style=\"font-size:36px;font-weight:bold;color:#b91c1c;\"\u003e20%\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:20px;background:#f0fdf4;border-radius:12px;border:1px solid #bbf7d0;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e実効税率（税金合計/年収）\u003c/div\u003e\n\u003cdiv id=\"stEffective\" style=\"font-size:36px;font-weight:bold;color:#16a34a;\"\u003e21.5%\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:8px;margin-top:12px;text-align:center;\"\u003e\n\u003cdiv style=\"padding:14px;background:white;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\n\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e所得税\u003c/div\u003e\n\u003cdiv id=\"stTax\" style=\"font-size:18px;font-weight:bold;color:#b91c1c;\"\u003e21万円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:14px;background:white;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\n\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e住民税\u003c/div\u003e\n\u003cdiv id=\"stResident\" style=\"font-size:18px;font-weight:bold;color:#ea580c;\"\u003e24万円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:14px;background:white;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\n\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e社会保険料\u003c/div\u003e\n\u003cdiv id=\"stSocial\" style=\"font-size:18px;font-weight:bold;color:#7c3aed;\"\u003e72万円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:14px;background:#f0fdf4;border-radius:8px;border:2px solid #16a34a;\"\u003e\n\u003cdiv style=\"font-size:11px;color:#64748b;\"\u003e手取り\u003c/div\u003e\n\u003cdiv id=\"stTakeHome\" style=\"font-size:18px;font-weight:bold;color:#16a34a;\"\u003e383万円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-top:12px;text-align:center;padding:12px;background:white;border-radius:8px;border:1px solid #e2e8f0;\"\u003e\n\u003cspan style=\"font-size:13px;color:#64748b;\"\u003e月額手取り: \u003c/span\u003e\n\u003cspan id=\"stMonthly\" style=\"font-size:20px;font-weight:bold;color:#16a34a;\"\u003e31.9万円\u003c/span\u003e\n\u003c/div\u003e\n\u003c!-- 内訳バー --\u003e\n\u003cdiv style=\"margin-top:20px;padding:20px;background:#f8fafc;border-radius:12px;border:1px solid #e2e8f0;\"\u003e\n\u003ch3 style=\"margin:0 0 12px 0;font-size:16px;\"\u003e年収の内訳\u003c/h3\u003e\n\u003cdiv id=\"stBar\" style=\"height:32px;border-radius:8px;overflow:hidden;display:flex;margin-bottom:8px;\"\u003e\u003c/div\u003e\n\u003cdiv style=\"display:flex;flex-wrap:wrap;gap:10px;font-size:12px;\"\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#16a34a;border-radius:2px;\"\u003e\u003c/span\u003e 手取り\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#b91c1c;border-radius:2px;\"\u003e\u003c/span\u003e 所得税\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#ea580c;border-radius:2px;\"\u003e\u003c/span\u003e 住民税\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#7c3aed;border-radius:2px;\"\u003e\u003c/span\u003e 社会保険料\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 所得税ブラケット表 --\u003e\n\u003cdetails style=\"margin-top:20px;\"\u003e\n\u003csummary style=\"cursor:pointer;font-weight:bold;color:#b91c1c;font-size:15px;\"\u003e所得税の累進課税ブラケットを表示\u003c/summary\u003e\n\u003cdiv style=\"overflow-x:auto;margin-top:12px;\"\u003e\n\u003ctable id=\"stTable\" style=\"width:100%;border-collapse:collapse;font-size:14px;\"\u003e\n\u003cthead\u003e\n\u003ctr style=\"background:#b91c1c;color:white;\"\u003e\n\u003cth style=\"padding:8px;text-align:left;\"\u003e税率\u003c/th\u003e\n\u003cth style=\"padding:8px;text-align:right;\"\u003e課税所得\u003c/th\u003e\n\u003cth style=\"padding:8px;text-align:right;\"\u003e控除額\u003c/th\u003e\n\u003cth style=\"padding:8px;text-align:right;\"\u003eこの区分の税額\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody id=\"stTableBody\"\u003e\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/details\u003e\n\u003c!-- 年収別比較 --\u003e\n\u003cdiv style=\"margin-top:20px;padding:20px;background:#fffbeb;border-radius:12px;border:1px solid #fde68a;\"\u003e\n\u003ch3 style=\"margin:0 0 12px 0;font-size:16px;\"\u003e年収別の手取り比較\u003c/h3\u003e\n\u003cdiv id=\"stScenarios\" style=\"display:grid;gap:8px;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nconst JP_BRACKETS=[\n  [0,1950000,0.05,0],\n  [1950000,3300000,0.10,97500],\n  [3300000,6950000,0.20,427500],\n  [6950000,9000000,0.23,636000],\n  [9000000,18000000,0.33,1536000],\n  [18000000,40000000,0.40,2796000],\n  [40000000,Infinity,0.45,4796000]\n];\n\nfunction getType(){return document.querySelector('input[name=\"stType\"]:checked').value;}\n\nfunction calcEmployeeDeduction(income){\n  if(income\u003c=1625000) return 550000;\n  if(income\u003c=1800000) return income*0.4-100000;\n  if(income\u003c=3600000) return income*0.3+80000;\n  if(income\u003c=6600000) return income*0.2+440000;\n  if(income\u003c=8500000) return income*0.1+1100000;\n  return 1950000;\n}\n\nfunction calcSocialInsurance(income,type){\n  if(type==='employee') return Math.round(income*0.1497);\n  return Math.round(Math.min(income,10200000)*0.145+income*0.05);\n}\n\nfunction calcIncomeTax(taxableIncome){\n  if(taxableIncome\u003c=0) return{tax:0,rate:0,details:[]};\n  let tax=0;let topRate=0;const details=[];\n  for(const[lo,hi,rate,deduction] of JP_BRACKETS){\n    if(taxableIncome\u003c=lo) break;\n    topRate=rate;\n    const portion=Math.min(taxableIncome,hi)-lo;\n    const t=portion*rate;\n    details.push({lo,hi:Math.min(taxableIncome,hi),rate,portion,tax:t});\n  }\n  tax=Math.floor(taxableIncome*topRate-JP_BRACKETS.find(b=\u003eb[2]===topRate)[3]);\n  const recoveryTax=Math.floor(tax*0.021);\n  return{tax:tax+recoveryTax,rate:topRate,details};\n}\n\nfunction calcResidentTax(taxableIncome){\n  if(taxableIncome\u003c=0) return 0;\n  return Math.round(taxableIncome*0.10)+5000;\n}\n\nfunction calcST(){\n  const incomeMan=parseFloat(document.getElementById('stIncome').value)||0;\n  const income=incomeMan*10000;\n  const type=getType();\n  const deps=parseInt(document.getElementById('stDependents').value);\n\n  ['employee','freelance'].forEach(t=\u003e{\n    document.getElementById('lbl-'+t).style.borderColor=t===type?'#b91c1c':'#e2e8f0';\n    document.getElementById('lbl-'+t).style.background=t===type?'#fef2f2':'white';\n  });\n  document.getElementById('stFreelanceOpts').style.display=type==='freelance'?'block':'none';\n\n  // 給与所得控除 or 経費\n  let deduction=0;\n  if(type==='employee'){\n    deduction=calcEmployeeDeduction(income);\n  }else{\n    const expRate=parseFloat(document.getElementById('stExpenseRate').value)/100;\n    document.getElementById('stExpenseVal').textContent=Math.round(expRate*100)+'%';\n    deduction=income*expRate;\n    if(document.getElementById('stBlueReturn').checked) deduction+=650000;\n  }\n\n  const earnedIncome=Math.max(0,income-deduction);\n\n  // 所得控除\n  let personalDeduction=480000; // 基礎控除\n  const social=calcSocialInsurance(income,type);\n  personalDeduction+=social; // 社会保険料控除\n  if(deps\u003e=1) personalDeduction+=380000; // 配偶者控除\n  if(deps\u003e=2) personalDeduction+=380000; // 扶養控除(子1)\n  if(deps\u003e=3) personalDeduction+=380000; // 扶養控除(子2)\n\n  const taxableIncome=Math.max(0,earnedIncome-personalDeduction);\n  const{tax:incomeTax,rate:topRate,details}=calcIncomeTax(taxableIncome);\n  const residentTax=calcResidentTax(Math.max(0,earnedIncome-personalDeduction+social-social));\n  // 住民税は所得控除が若干異なるが簡易計算\n  const residentTaxable=Math.max(0,earnedIncome-(personalDeduction-social)-330000-social);\n  const residentTaxCalc=calcResidentTax(Math.max(0,earnedIncome-personalDeduction+50000));\n\n  const totalTax=incomeTax+residentTaxCalc+social;\n  const takeHome=income-totalTax;\n  const effectiveRate=income\u003e0?(totalTax/income)*100:0;\n\n  document.getElementById('stRate').textContent=Math.round(topRate*100)+'%';\n  document.getElementById('stEffective').textContent=effectiveRate.toFixed(1)+'%';\n  document.getElementById('stTax').textContent=Math.round(incomeTax/10000)+'万円';\n  document.getElementById('stResident').textContent=Math.round(residentTaxCalc/10000)+'万円';\n  document.getElementById('stSocial').textContent=Math.round(social/10000)+'万円';\n  document.getElementById('stTakeHome').textContent=Math.round(takeHome/10000)+'万円';\n  document.getElementById('stMonthly').textContent=(takeHome/120000).toFixed(1)+'万円';\n\n  // バー\n  if(income\u003e0){\n    const pTH=((takeHome/income)*100).toFixed(1);\n    const pIT=((incomeTax/income)*100).toFixed(1);\n    const pRT=((residentTaxCalc/income)*100).toFixed(1);\n    const pSI=((social/income)*100).toFixed(1);\n    document.getElementById('stBar').innerHTML=\n      '\u003cdiv style=\"width:'+pTH+'%;background:#16a34a;height:100%;\" title=\"手取り\"\u003e\u003c/div\u003e'+\n      '\u003cdiv style=\"width:'+pIT+'%;background:#b91c1c;height:100%;\" title=\"所得税\"\u003e\u003c/div\u003e'+\n      '\u003cdiv style=\"width:'+pRT+'%;background:#ea580c;height:100%;\" title=\"住民税\"\u003e\u003c/div\u003e'+\n      '\u003cdiv style=\"width:'+pSI+'%;background:#7c3aed;height:100%;\" title=\"社会保険料\"\u003e\u003c/div\u003e';\n  }\n\n  // ブラケット表\n  let tbody='';\n  JP_BRACKETS.forEach((b,i)=\u003e{\n    const[lo,hi,rate,ded]=b;\n    const active=taxableIncome\u003elo;\n    const current=taxableIncome\u003elo\u0026\u0026(hi===Infinity||taxableIncome\u003c=hi);\n    const portion=active?Math.min(taxableIncome,hi)-lo:0;\n    const t=portion*rate;\n    const bg=current?'#fef2f2':i%2===0?'#f8fafc':'white';\n    const hiStr=hi===Infinity?'〜':'〜'+Math.round(hi/10000)+'万円';\n    const arrow=current?' ←':'';\n    tbody+='\u003ctr style=\"background:'+bg+';'+(current?'font-weight:bold;':'')+'\"\u003e';\n    tbody+='\u003ctd style=\"padding:8px;\"\u003e'+Math.round(rate*100)+'%'+arrow+'\u003c/td\u003e';\n    tbody+='\u003ctd style=\"padding:8px;text-align:right;\"\u003e'+Math.round(lo/10000)+'万円'+hiStr+'\u003c/td\u003e';\n    tbody+='\u003ctd style=\"padding:8px;text-align:right;\"\u003e'+Math.round(ded/10000)+'万円\u003c/td\u003e';\n    tbody+='\u003ctd style=\"padding:8px;text-align:right;'+(active?'':'color:#94a3b8;')+'\"\u003e'+Math.round(t/10000)+'万円\u003c/td\u003e';\n    tbody+='\u003c/tr\u003e';\n  });\n  document.getElementById('stTableBody').innerHTML=tbody;\n\n  // 年収別比較\n  const scenarios=[300,400,500,600,700,800,1000,1500];\n  let sHTML='';\n  scenarios.forEach(s=\u003e{\n    const sInc=s*10000;\n    const sDed=type==='employee'?calcEmployeeDeduction(sInc):sInc*(parseFloat(document.getElementById('stExpenseRate').value)/100)+(type==='freelance'\u0026\u0026document.getElementById('stBlueReturn').checked?650000:0);\n    const sEarned=Math.max(0,sInc-sDed);\n    const sSocial=calcSocialInsurance(sInc,type);\n    let sPD=480000+sSocial;\n    if(deps\u003e=1)sPD+=380000;if(deps\u003e=2)sPD+=380000;if(deps\u003e=3)sPD+=380000;\n    const sTaxable=Math.max(0,sEarned-sPD);\n    const sIT=calcIncomeTax(sTaxable).tax;\n    const sRT=calcResidentTax(Math.max(0,sEarned-sPD+50000));\n    const sTH=sInc-sIT-sRT-sSocial;\n    const current=s===incomeMan;\n    sHTML+='\u003cdiv style=\"display:flex;justify-content:space-between;align-items:center;padding:10px 12px;background:'+(current?'#fef2f2':'white')+';border-radius:8px;border:'+(current?'2px solid #b91c1c':'1px solid #e2e8f0')+';font-size:14px;\"\u003e';\n    sHTML+='\u003cdiv\u003e\u003cstrong\u003e'+s+'万円\u003c/strong\u003e\u003c/div\u003e';\n    sHTML+='\u003cdiv style=\"text-align:right;\"\u003e手取り \u003cstrong style=\"color:#16a34a;\"\u003e'+Math.round(sTH/10000)+'万円\u003c/strong\u003e ('+((sTH/sInc)*100).toFixed(0)+'%)\u003c/div\u003e';\n    sHTML+='\u003c/div\u003e';\n  });\n  document.getElementById('stScenarios').innerHTML=sHTML;\n}\n\ncalcST();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e年収（額面）を入力\u003c/strong\u003e — 源泉徴収票の「支払金額」欄の数字\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e働き方を選択\u003c/strong\u003e — 会社員は給与所得控除が自動適用、フリーランスは経費率・青色申告を設定\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e扶養家族を選択\u003c/strong\u003e — 配偶者控除・扶養控除が反映されます\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"日本の所得税率表2026年\"\u003e日本の所得税率表（2026年）\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e課税所得\u003c/th\u003e\n          \u003cth\u003e税率\u003c/th\u003e\n          \u003cth\u003e控除額\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e〜195万円\u003c/td\u003e\n          \u003ctd\u003e5%\u003c/td\u003e\n          \u003ctd\u003e0円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e195〜330万円\u003c/td\u003e\n          \u003ctd\u003e10%\u003c/td\u003e\n          \u003ctd\u003e9.75万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e330〜695万円\u003c/td\u003e\n          \u003ctd\u003e20%\u003c/td\u003e\n          \u003ctd\u003e42.75万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e695〜900万円\u003c/td\u003e\n          \u003ctd\u003e23%\u003c/td\u003e\n          \u003ctd\u003e63.6万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e900〜1,800万円\u003c/td\u003e\n          \u003ctd\u003e33%\u003c/td\u003e\n          \u003ctd\u003e153.6万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1,800〜4,000万円\u003c/td\u003e\n          \u003ctd\u003e40%\u003c/td\u003e\n          \u003ctd\u003e279.6万円\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e4,000万円〜\u003c/td\u003e\n          \u003ctd\u003e45%\u003c/td\u003e\n          \u003ctd\u003e479.6万円\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cem\u003e復興特別所得税（2.1%）が加算されます。住民税は一律10%+均等割5,000円。\u003c/em\u003e\u003c/p\u003e","title":"所得税シミュレーター｜年収から所得税・住民税・手取りを無料計算"},{"content":" 1. フィールドを選択 カスタム列名（任意 — デフォルト名を上書き） 上のフィールドを選択するとカスタム名を設定できます。 2. 件数 件（最大1000件） 3. 再現シード シードを使用 同じシード値 = 毎回同じデータ。 4. 出力形式 JSON CSV SQL テーブル名: \u0026#9654; 生成する 全選択 全解除 フィールドを選択して「生成する」をクリック。 プレビュー 出力 \u0026#8659; ダウンロード コピー API開発・テストの経費管理もかんたんに\nfreee会計なら、クラウドサービス・開発ツールの費用精算も一元管理。無料トライアル実施中。 freeeを無料で試す → JSONを整形する → JSONフォーマッター ダミーテキストを生成 → ローレム・イプサムジェネレーター CSVをJSONに変換 → CSV to JSON 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/fake-data-generator/","summary":"\u003cdiv id=\"fd-app\"\u003e\n\u003cstyle\u003e\n#fd-app *,\n#fd-app *::before,\n#fd-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n#fd-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  font-size: 14px;\n  color: #1e293b;\n  line-height: 1.5;\n}\n\n#fd-app h2 {\n  font-size: 16px;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 10px;\n}\n\n#fd-app .fd-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 14px;\n  margin-bottom: 14px;\n}\n\n#fd-app .fd-col {\n  flex: 1 1 240px;\n  min-width: 0;\n}\n\n#fd-app .fd-card {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 16px;\n}\n\n#fd-app .fd-label {\n  display: block;\n  font-size: 12px;\n  font-weight: 600;\n  color: #475569;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  margin-bottom: 6px;\n}\n\n#fd-app .fd-input {\n  width: 100%;\n  padding: 7px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#fd-app .fd-input:focus { border-color: #2563eb; }\n\n#fd-app .fd-select {\n  width: 100%;\n  padding: 7px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  color: #1e293b;\n  background: #fff;\n  cursor: pointer;\n  outline: none;\n}\n#fd-app .fd-select:focus { border-color: #2563eb; }\n\n#fd-app .fd-fields-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n  gap: 8px;\n}\n\n#fd-app .fd-field-item {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 8px 10px;\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 8px;\n  cursor: pointer;\n  user-select: none;\n  transition: border-color 0.15s, background 0.15s;\n}\n#fd-app .fd-field-item:hover { border-color: #93c5fd; background: #eff6ff; }\n#fd-app .fd-field-item.active { border-color: #2563eb; background: #dbeafe; }\n\n#fd-app .fd-field-item input[type=\"checkbox\"] {\n  width: 15px;\n  height: 15px;\n  accent-color: #2563eb;\n  cursor: pointer;\n  flex-shrink: 0;\n}\n\n#fd-app .fd-field-label {\n  font-size: 13px;\n  font-weight: 500;\n  color: #334155;\n  flex: 1;\n}\n\n#fd-app .fd-field-item.active .fd-field-label { color: #1d4ed8; font-weight: 600; }\n\n#fd-app .fd-field-icon {\n  font-size: 16px;\n  flex-shrink: 0;\n}\n\n#fd-app .fd-custom-names {\n  margin-top: 10px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n}\n\n#fd-app .fd-custom-name-input {\n  padding: 5px 9px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 12px;\n  width: 120px;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n}\n#fd-app .fd-custom-name-input:focus { border-color: #2563eb; }\n\n#fd-app .fd-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  align-items: center;\n  margin-bottom: 14px;\n}\n\n#fd-app .fd-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 8px 16px;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n  white-space: nowrap;\n  line-height: 1;\n}\n#fd-app .fd-btn:active { transform: scale(0.97); }\n#fd-app .fd-btn-primary  { background: #2563eb; color: #fff; }\n#fd-app .fd-btn-primary:hover  { background: #1d4ed8; }\n#fd-app .fd-btn-success  { background: #16a34a; color: #fff; }\n#fd-app .fd-btn-success:hover  { background: #15803d; }\n#fd-app .fd-btn-orange   { background: #d97706; color: #fff; }\n#fd-app .fd-btn-orange:hover   { background: #b45309; }\n#fd-app .fd-btn-purple   { background: #7c3aed; color: #fff; }\n#fd-app .fd-btn-purple:hover   { background: #6d28d9; }\n#fd-app .fd-btn-secondary { background: #e2e8f0; color: #334155; }\n#fd-app .fd-btn-secondary:hover { background: #cbd5e1; }\n#fd-app .fd-btn-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n\n#fd-app .fd-count-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n#fd-app .fd-count-input {\n  width: 90px;\n  padding: 7px 10px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 14px;\n  font-weight: 700;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n  text-align: center;\n}\n#fd-app .fd-count-input:focus { border-color: #2563eb; }\n\n#fd-app .fd-seed-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex-wrap: wrap;\n}\n\n#fd-app .fd-seed-toggle {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  cursor: pointer;\n  font-size: 13px;\n  color: #475569;\n}\n\n#fd-app .fd-seed-input {\n  width: 110px;\n  padding: 5px 9px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n}\n#fd-app .fd-seed-input:focus { border-color: #2563eb; }\n#fd-app .fd-seed-input:disabled { background: #f1f5f9; color: #94a3b8; }\n\n#fd-app .fd-status {\n  font-size: 13px;\n  color: #475569;\n  padding: 6px 12px;\n  background: #f1f5f9;\n  border-radius: 6px;\n}\n\n#fd-app .fd-status.ok   { background: #dcfce7; color: #15803d; }\n#fd-app .fd-status.err  { background: #fee2e2; color: #dc2626; }\n#fd-app .fd-status.info { background: #dbeafe; color: #1d4ed8; }\n\n#fd-app .fd-preview-wrap {\n  overflow-x: auto;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  background: #fff;\n  margin-bottom: 14px;\n}\n\n#fd-app .fd-preview-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 12px;\n  white-space: nowrap;\n}\n\n#fd-app .fd-preview-table th {\n  background: #f1f5f9;\n  padding: 8px 12px;\n  text-align: left;\n  font-weight: 700;\n  color: #475569;\n  border-bottom: 2px solid #e2e8f0;\n  position: sticky;\n  top: 0;\n}\n\n#fd-app .fd-preview-table td {\n  padding: 7px 12px;\n  color: #1e293b;\n  border-bottom: 1px solid #f1f5f9;\n  max-width: 180px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n#fd-app .fd-preview-table tr:last-child td { border-bottom: none; }\n#fd-app .fd-preview-table tr:hover td { background: #f8fafc; }\n\n#fd-app .fd-output-wrap {\n  background: #0f172a;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 14px;\n  position: relative;\n  max-height: 360px;\n  overflow-y: auto;\n}\n\n#fd-app .fd-output {\n  font-family: \"Fira Code\", \"Cascadia Code\", \"SF Mono\", Consolas, monospace;\n  font-size: 12px;\n  color: #e2e8f0;\n  white-space: pre;\n  line-height: 1.6;\n}\n\n#fd-app .fd-copy-btn {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  padding: 5px 12px;\n  background: #334155;\n  color: #cbd5e1;\n  border: none;\n  border-radius: 6px;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n#fd-app .fd-copy-btn:hover { background: #475569; }\n#fd-app .fd-copy-btn.copied { background: #16a34a; color: #fff; }\n\n#fd-app .fd-empty {\n  text-align: center;\n  padding: 40px 20px;\n  color: #94a3b8;\n  font-size: 13px;\n}\n\n#fd-app .fd-divider {\n  border: none;\n  border-top: 1.5px solid #e2e8f0;\n  margin: 16px 0;\n}\n\n#fd-app .fd-format-tabs {\n  display: flex;\n  gap: 6px;\n  margin-bottom: 10px;\n}\n\n#fd-app .fd-tab {\n  padding: 6px 14px;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 6px;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  background: #fff;\n  color: #475569;\n  transition: all 0.15s;\n}\n#fd-app .fd-tab.active { background: #2563eb; color: #fff; border-color: #2563eb; }\n#fd-app .fd-tab:hover:not(.active) { border-color: #93c5fd; color: #1d4ed8; }\n\n#fd-app .fd-sql-table-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-top: 8px;\n}\n\n#fd-app .fd-sql-table-input {\n  padding: 5px 9px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n  width: 160px;\n}\n#fd-app .fd-sql-table-input:focus { border-color: #2563eb; }\n\n#fd-app .fd-badge {\n  display: inline-block;\n  padding: 2px 8px;\n  background: #dbeafe;\n  color: #1d4ed8;\n  border-radius: 99px;\n  font-size: 11px;\n  font-weight: 700;\n}\n\n@media (max-width: 600px) {\n  #fd-app .fd-fields-grid {\n    grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));\n  }\n  #fd-app .fd-output-wrap { max-height: 240px; }\n}\n\u003c/style\u003e\n\u003c!-- フィールド選択 --\u003e\n\u003cdiv class=\"fd-card\" style=\"margin-bottom:14px;\"\u003e\n  \u003ch2\u003e1. フィールドを選択\u003c/h2\u003e\n  \u003cdiv class=\"fd-fields-grid\" id=\"fdFieldsGrid\"\u003e\u003c/div\u003e\n  \u003chr class=\"fd-divider\"\u003e\n  \u003cdiv style=\"font-size:12px;color:#475569;margin-bottom:6px;font-weight:600;\"\u003eカスタム列名（任意 — デフォルト名を上書き）\u003c/div\u003e\n  \u003cdiv class=\"fd-custom-names\" id=\"fdCustomNames\"\u003e\n    \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e上のフィールドを選択するとカスタム名を設定できます。\u003c/span\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 設定行 --\u003e\n\u003cdiv class=\"fd-row\"\u003e\n  \u003cdiv class=\"fd-col fd-card\"\u003e\n    \u003ch2\u003e2. 件数\u003c/h2\u003e\n    \u003cdiv class=\"fd-count-row\"\u003e\n      \u003cinput type=\"number\" id=\"fdCount\" class=\"fd-count-input\" value=\"10\" min=\"1\" max=\"1000\"\u003e\n      \u003cspan style=\"font-size:13px;color:#475569;\"\u003e件（最大1000件）\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cinput type=\"range\" id=\"fdCountSlider\" min=\"1\" max=\"1000\" value=\"10\"\n      style=\"width:100%;margin-top:10px;accent-color:#2563eb;\"\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"fd-col fd-card\"\u003e\n    \u003ch2\u003e3. 再現シード\u003c/h2\u003e\n    \u003cdiv class=\"fd-seed-row\"\u003e\n      \u003clabel class=\"fd-seed-toggle\"\u003e\n        \u003cinput type=\"checkbox\" id=\"fdSeedEnabled\" style=\"accent-color:#2563eb;\"\u003e シードを使用\n      \u003c/label\u003e\n      \u003cinput type=\"number\" id=\"fdSeedVal\" class=\"fd-seed-input\" value=\"42\" disabled placeholder=\"例: 42\"\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"font-size:12px;color:#64748b;margin-top:8px;\"\u003e同じシード値 = 毎回同じデータ。\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"fd-col fd-card\"\u003e\n    \u003ch2\u003e4. 出力形式\u003c/h2\u003e\n    \u003cdiv class=\"fd-format-tabs\" id=\"fdFormatTabs\"\u003e\n      \u003cbutton class=\"fd-tab active\" data-fmt=\"json\"\u003eJSON\u003c/button\u003e\n      \u003cbutton class=\"fd-tab\" data-fmt=\"csv\"\u003eCSV\u003c/button\u003e\n      \u003cbutton class=\"fd-tab\" data-fmt=\"sql\"\u003eSQL\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv id=\"fdSqlTableRow\" class=\"fd-sql-table-row\" style=\"display:none;\"\u003e\n      \u003cspan style=\"font-size:12px;color:#475569;\"\u003eテーブル名:\u003c/span\u003e\n      \u003cinput type=\"text\" id=\"fdSqlTable\" class=\"fd-sql-table-input\" value=\"mock_data\" placeholder=\"テーブル名\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 生成ボタン --\u003e\n\u003cdiv class=\"fd-toolbar\"\u003e\n  \u003cbutton class=\"fd-btn fd-btn-primary\" id=\"fdBtnGenerate\"\u003e\u0026#9654; 生成する\u003c/button\u003e\n  \u003cbutton class=\"fd-btn fd-btn-secondary\" id=\"fdBtnSelectAll\"\u003e全選択\u003c/button\u003e\n  \u003cbutton class=\"fd-btn fd-btn-secondary\" id=\"fdBtnClearAll\"\u003e全解除\u003c/button\u003e\n  \u003cdiv id=\"fdStatus\" class=\"fd-status\"\u003eフィールドを選択して「生成する」をクリック。\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- プレビューテーブル --\u003e\n\u003cdiv id=\"fdPreviewSection\" style=\"display:none;\"\u003e\n  \u003ch2 style=\"margin-bottom:8px;\"\u003eプレビュー \u003cspan id=\"fdPreviewBadge\" class=\"fd-badge\"\u003e\u003c/span\u003e\u003c/h2\u003e\n  \u003cdiv class=\"fd-preview-wrap\" style=\"max-height:280px;overflow-y:auto;\"\u003e\n    \u003ctable class=\"fd-preview-table\" id=\"fdPreviewTable\"\u003e\n      \u003cthead id=\"fdPreviewHead\"\u003e\u003c/thead\u003e\n      \u003ctbody id=\"fdPreviewBody\"\u003e\u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 出力 --\u003e\n\u003cdiv id=\"fdOutputSection\" style=\"display:none;margin-top:14px;\"\u003e\n  \u003cdiv style=\"display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;flex-wrap:wrap;gap:8px;\"\u003e\n    \u003ch2\u003e出力\u003c/h2\u003e\n    \u003cdiv style=\"display:flex;gap:8px;\"\u003e\n      \u003cbutton class=\"fd-btn fd-btn-success fd-btn-sm\" id=\"fdBtnDownload\"\u003e\u0026#8659; ダウンロード\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"fd-output-wrap\"\u003e\n    \u003cbutton class=\"fd-copy-btn\" id=\"fdBtnCopy\"\u003eコピー\u003c/button\u003e\n    \u003cpre class=\"fd-output\" id=\"fdOutput\"\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  // ── フィールド定義 ─────────────────────────────────────────────────────────\n  var FIELDS = [\n    { id: \"name\",     label: \"氏名\",         icon: \"\u0026#128100;\" },\n    { id: \"email\",    label: \"メール\",        icon: \"\u0026#9993;\" },\n    { id: \"phone\",    label: \"電話番号\",      icon: \"\u0026#128222;\" },\n    { id: \"address\",  label: \"住所\",          icon: \"\u0026#127968;\" },\n    { id: \"company\",  label: \"会社名\",        icon: \"\u0026#127970;\" },\n    { id: \"date\",     label: \"日付\",          icon: \"\u0026#128197;\" },\n    { id: \"uuid\",     label: \"UUID\",          icon: \"\u0026#128273;\" },\n    { id: \"number\",   label: \"数値\",          icon: \"\u0026#128290;\" },\n    { id: \"boolean\",  label: \"真偽値\",        icon: \"\u0026#9989;\" },\n    { id: \"lorem\",    label: \"ダミーテキスト\", icon: \"\u0026#128218;\" },\n  ];\n\n  var selectedFields = [\"name\", \"email\", \"phone\", \"uuid\"];\n  var customNames = {};\n  var currentFmt = \"json\";\n  var generatedData = [];\n\n  // ── シード付きRNG ──────────────────────────────────────────────────────────\n  function mulberry32(seed) {\n    return function() {\n      seed |= 0; seed = seed + 0x6D2B79F5 | 0;\n      var t = Math.imul(seed ^ seed \u003e\u003e\u003e 15, 1 | seed);\n      t = t + Math.imul(t ^ t \u003e\u003e\u003e 7, 61 | t) ^ t;\n      return ((t ^ t \u003e\u003e\u003e 14) \u003e\u003e\u003e 0) / 4294967296;\n    };\n  }\n\n  var rnd = Math.random;\n  function rand() { return rnd(); }\n  function randInt(min, max) { return Math.floor(rand() * (max - min + 1)) + min; }\n  function pick(arr) { return arr[Math.floor(rand() * arr.length)]; }\n\n  // ── データプール（日本語） ────────────────────────────────────────────────\n  var LAST_JP = [\"田中\",\"鈴木\",\"佐藤\",\"高橋\",\"伊藤\",\"渡辺\",\"山本\",\"中村\",\"小林\",\"加藤\",\n    \"吉田\",\"山田\",\"佐々木\",\"山口\",\"松本\",\"井上\",\"木村\",\"林\",\"斎藤\",\"清水\",\n    \"山崎\",\"森\",\"阿部\",\"池田\",\"橋本\",\"石川\",\"前田\",\"小川\",\"岡田\",\"長谷川\"];\n  var FIRST_JP = [\"翔太\",\"陽菜\",\"大輝\",\"さくら\",\"健太\",\"美咲\",\"拓也\",\"愛\",\"雄大\",\"麻衣\",\n    \"竜也\",\"恵\",\"達也\",\"彩\",\"浩二\",\"裕子\",\"剛\",\"奈々\",\"誠\",\"里奈\",\n    \"和也\",\"明美\",\"純一\",\"真由\",\"智也\",\"千尋\",\"俊介\",\"絵里\",\"航\",\"友里\"];\n  var DOMAINS = [\"gmail.com\",\"yahoo.co.jp\",\"outlook.jp\",\"example.co.jp\",\"icloud.com\",\n    \"docomo.ne.jp\",\"softbank.ne.jp\",\"company.co.jp\",\"work.or.jp\",\"mail.net\"];\n  var PREFS = [\"東京都\",\"大阪府\",\"神奈川県\",\"愛知県\",\"福岡県\",\"北海道\",\"埼玉県\",\"千葉県\",\n    \"兵庫県\",\"静岡県\",\"広島県\",\"京都府\",\"宮城県\",\"新潟県\",\"長野県\"];\n  var CITIES_JP = [\"新宿区\",\"渋谷区\",\"品川区\",\"港区\",\"中央区\",\"梅田\",\"難波\",\"天王寺\",\n    \"横浜市\",\"川崎市\",\"名古屋市\",\"博多区\",\"札幌市\",\"仙台市\",\"京都市\"];\n  var TOWNS_JP = [\"本町\",\"中央\",\"東\",\"西\",\"南\",\"北\",\"大通\",\"緑\",\"桜\",\"松\",\n    \"青葉\",\"若葉\",\"富士\",\"高山\",\"泉\"];\n  var COMPANIES_JP = [\"株式会社テックラボ\",\"株式会社クラウドワーク\",\"合同会社アルファデータ\",\n    \"株式会社フューチャーシステム\",\"有限会社デジタルネクスト\",\"株式会社イノベーションコア\",\n    \"株式会社スマートテック\",\"合同会社ブルーオーシャン\",\"株式会社ゼロワン\",\"株式会社メガネット\",\n    \"株式会社サクラデータ\",\"有限会社ソフトウェアハウス\",\"株式会社ネクストステップ\"];\n  var LOREM_WORDS = [\"これは\",\"テスト用の\",\"ダミー\",\"テキスト\",\"です\",\"開発\",\"確認\",\n    \"サンプル\",\"データ\",\"生成\",\"ツール\",\"便利\",\"使いやすい\",\"シンプル\",\"高速\",\n    \"無料\",\"ブラウザ\",\"完結\",\"API\",\"エクスポート\",\"インポート\",\"フォーム\",\"入力\",\"出力\",\n    \"カスタム\",\"設定\",\"件数\",\"フィールド\",\"列名\",\"形式\"];\n\n  function genName() {\n    return pick(LAST_JP) + \" \" + pick(FIRST_JP);\n  }\n  function genEmail() {\n    var l = pick(LAST_JP);\n    var f = pick(FIRST_JP);\n    // romanize roughly\n    var roman = [\"tanaka\",\"suzuki\",\"sato\",\"takahashi\",\"ito\",\"watanabe\",\"yamamoto\",\n      \"nakamura\",\"kobayashi\",\"kato\",\"yoshida\",\"yamada\",\"sasaki\",\"yamaguchi\",\"matsumoto\"];\n    var base = pick(roman) + randInt(1, 99);\n    return base + \"@\" + pick(DOMAINS);\n  }\n  function genPhone() {\n    var area = pick([\"03\",\"06\",\"011\",\"052\",\"092\",\"045\",\"022\",\"024\",\"025\",\"076\"]);\n    return area + \"-\" + randInt(1000,9999) + \"-\" + randInt(1000,9999);\n  }\n  function genAddress() {\n    return pick(PREFS) + pick(CITIES_JP) + pick(TOWNS_JP) +\n      randInt(1,9) + \"丁目\" + randInt(1,20) + \"番\" + randInt(1,30) + \"号\";\n  }\n  function genCompany() { return pick(COMPANIES_JP); }\n  function genDate() {\n    var y = randInt(1970, 2025);\n    var m = String(randInt(1,12)).padStart(2,\"0\");\n    var d = String(randInt(1,28)).padStart(2,\"0\");\n    return y + \"-\" + m + \"-\" + d;\n  }\n  function genUUID() {\n    function s4() {\n      return Math.floor((1 + rand()) * 0x10000).toString(16).substring(1);\n    }\n    return s4()+s4()+\"-\"+s4()+\"-4\"+s4().substring(1)+\"-\"+\n      ([\"8\",\"9\",\"a\",\"b\"][Math.floor(rand()*4)])+s4().substring(1)+\"-\"+s4()+s4()+s4();\n  }\n  function genNumber() { return randInt(1, 100000); }\n  function genBoolean() { return rand() \u003c 0.5; }\n  function genLorem() {\n    var words = [];\n    var len = randInt(8, 18);\n    for (var i = 0; i \u003c len; i++) words.push(pick(LOREM_WORDS));\n    return words.join(\"\") + \"。\";\n  }\n\n  function genField(id) {\n    switch(id) {\n      case \"name\":    return genName();\n      case \"email\":   return genEmail();\n      case \"phone\":   return genPhone();\n      case \"address\": return genAddress();\n      case \"company\": return genCompany();\n      case \"date\":    return genDate();\n      case \"uuid\":    return genUUID();\n      case \"number\":  return genNumber();\n      case \"boolean\": return genBoolean();\n      case \"lorem\":   return genLorem();\n      default:        return \"\";\n    }\n  }\n\n  function colName(fid) {\n    return (customNames[fid] \u0026\u0026 customNames[fid].trim()) ? customNames[fid].trim() : fid;\n  }\n\n  // ── フィールドグリッド構築 ─────────────────────────────────────────────────\n  var grid = document.getElementById(\"fdFieldsGrid\");\n  FIELDS.forEach(function(f) {\n    var item = document.createElement(\"div\");\n    item.className = \"fd-field-item\" + (selectedFields.indexOf(f.id) \u003e= 0 ? \" active\" : \"\");\n    item.dataset.fid = f.id;\n    item.innerHTML =\n      '\u003cinput type=\"checkbox\" id=\"fdCb_'+f.id+'\"' + (selectedFields.indexOf(f.id)\u003e=0?' checked':'')+'\u003e'+\n      '\u003cspan class=\"fd-field-icon\"\u003e'+f.icon+'\u003c/span\u003e'+\n      '\u003cspan class=\"fd-field-label\"\u003e'+f.label+'\u003c/span\u003e';\n    item.addEventListener(\"click\", function(e) {\n      if (e.target.tagName === \"INPUT\") return;\n      var cb = item.querySelector(\"input\");\n      cb.checked = !cb.checked;\n      toggleField(f.id, cb.checked);\n    });\n    item.querySelector(\"input\").addEventListener(\"change\", function(e) {\n      toggleField(f.id, e.target.checked);\n    });\n    grid.appendChild(item);\n  });\n\n  function toggleField(fid, on) {\n    var item = grid.querySelector('[data-fid=\"'+fid+'\"]');\n    if (on) {\n      if (selectedFields.indexOf(fid) \u003c 0) selectedFields.push(fid);\n      item.classList.add(\"active\");\n    } else {\n      selectedFields = selectedFields.filter(function(x){return x!==fid;});\n      item.classList.remove(\"active\");\n      delete customNames[fid];\n    }\n    renderCustomNames();\n  }\n\n  // ── カスタム列名 ───────────────────────────────────────────────────────────\n  function renderCustomNames() {\n    var wrap = document.getElementById(\"fdCustomNames\");\n    wrap.innerHTML = \"\";\n    if (selectedFields.length === 0) {\n      wrap.innerHTML = '\u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e上のフィールドを選択するとカスタム名を設定できます。\u003c/span\u003e';\n      return;\n    }\n    selectedFields.forEach(function(fid) {\n      var f = FIELDS.find(function(x){return x.id===fid;});\n      var row = document.createElement(\"div\");\n      row.style.cssText = \"display:flex;align-items:center;gap:4px;\";\n      row.innerHTML =\n        '\u003cspan style=\"font-size:11px;color:#64748b;font-weight:600;\"\u003e'+f.label+':\u003c/span\u003e'+\n        '\u003cinput type=\"text\" class=\"fd-custom-name-input\" placeholder=\"'+fid+'\" data-fid=\"'+fid+'\" value=\"'+(customNames[fid]||'')+'\"\u003e';\n      row.querySelector(\"input\").addEventListener(\"input\", function(e) {\n        customNames[fid] = e.target.value;\n      });\n      wrap.appendChild(row);\n    });\n  }\n  renderCustomNames();\n\n  // ── 件数 \u0026 スライダー ──────────────────────────────────────────────────────\n  var countInput  = document.getElementById(\"fdCount\");\n  var countSlider = document.getElementById(\"fdCountSlider\");\n  countInput.addEventListener(\"input\", function() {\n    var v = Math.max(1, Math.min(1000, parseInt(countInput.value)||1));\n    countSlider.value = v;\n  });\n  countSlider.addEventListener(\"input\", function() {\n    countInput.value = countSlider.value;\n  });\n\n  // ── シード ─────────────────────────────────────────────────────────────────\n  var seedEnabled = document.getElementById(\"fdSeedEnabled\");\n  var seedVal     = document.getElementById(\"fdSeedVal\");\n  seedEnabled.addEventListener(\"change\", function() {\n    seedVal.disabled = !seedEnabled.checked;\n  });\n\n  // ── 形式タブ ───────────────────────────────────────────────────────────────\n  document.getElementById(\"fdFormatTabs\").addEventListener(\"click\", function(e) {\n    var tab = e.target.closest(\".fd-tab\");\n    if (!tab) return;\n    currentFmt = tab.dataset.fmt;\n    document.querySelectorAll(\"#fd-app .fd-tab\").forEach(function(t){t.classList.remove(\"active\");});\n    tab.classList.add(\"active\");\n    document.getElementById(\"fdSqlTableRow\").style.display = currentFmt === \"sql\" ? \"flex\" : \"none\";\n    if (generatedData.length \u003e 0) renderOutput();\n  });\n\n  // ── 全選択 / 全解除 ────────────────────────────────────────────────────────\n  document.getElementById(\"fdBtnSelectAll\").addEventListener(\"click\", function() {\n    FIELDS.forEach(function(f) { toggleField(f.id, true); });\n    grid.querySelectorAll(\"input[type=checkbox]\").forEach(function(cb){cb.checked=true;});\n    renderCustomNames();\n  });\n  document.getElementById(\"fdBtnClearAll\").addEventListener(\"click\", function() {\n    FIELDS.forEach(function(f) { toggleField(f.id, false); });\n    grid.querySelectorAll(\"input[type=checkbox]\").forEach(function(cb){cb.checked=false;});\n    selectedFields = [];\n    customNames = {};\n    renderCustomNames();\n  });\n\n  // ── 生成 ───────────────────────────────────────────────────────────────────\n  document.getElementById(\"fdBtnGenerate\").addEventListener(\"click\", function() {\n    var status = document.getElementById(\"fdStatus\");\n\n    if (selectedFields.length === 0) {\n      status.className = \"fd-status err\";\n      status.textContent = \"フィールドを1つ以上選択してください。\";\n      return;\n    }\n\n    var count = Math.max(1, Math.min(1000, parseInt(countInput.value)||10));\n    countInput.value = count;\n    countSlider.value = count;\n\n    if (seedEnabled.checked) {\n      var s = parseInt(seedVal.value) || 42;\n      rnd = mulberry32(s);\n    } else {\n      rnd = Math.random;\n    }\n\n    generatedData = [];\n    for (var i = 0; i \u003c count; i++) {\n      var row = {};\n      selectedFields.forEach(function(fid) {\n        row[colName(fid)] = genField(fid);\n      });\n      generatedData.push(row);\n    }\n\n    status.className = \"fd-status ok\";\n    status.textContent = count + \"件・\" + selectedFields.length + \"フィールドのデータを生成しました。\";\n\n    renderPreview();\n    renderOutput();\n\n    document.getElementById(\"fdPreviewSection\").style.display = \"block\";\n    document.getElementById(\"fdOutputSection\").style.display = \"block\";\n  });\n\n  // ── プレビューテーブル ─────────────────────────────────────────────────────\n  function renderPreview() {\n    var head = document.getElementById(\"fdPreviewHead\");\n    var body = document.getElementById(\"fdPreviewBody\");\n    document.getElementById(\"fdPreviewBadge\").textContent = generatedData.length + \"件\";\n    var cols = selectedFields.map(colName);\n\n    head.innerHTML = \"\u003ctr\u003e\" + cols.map(function(c){return \"\u003cth\u003e\"+escHtml(c)+\"\u003c/th\u003e\";}).join(\"\") + \"\u003c/tr\u003e\";\n    var preview = generatedData.slice(0, 20);\n    body.innerHTML = preview.map(function(row) {\n      return \"\u003ctr\u003e\" + cols.map(function(c){\n        return \"\u003ctd\u003e\" + escHtml(String(row[c])) + \"\u003c/td\u003e\";\n      }).join(\"\") + \"\u003c/tr\u003e\";\n    }).join(\"\");\n  }\n\n  // ── 出力 ───────────────────────────────────────────────────────────────────\n  function renderOutput() {\n    var out = document.getElementById(\"fdOutput\");\n    out.textContent = buildOutput();\n  }\n\n  function buildOutput() {\n    if (currentFmt === \"json\") return buildJSON();\n    if (currentFmt === \"csv\")  return buildCSV();\n    if (currentFmt === \"sql\")  return buildSQL();\n    return \"\";\n  }\n\n  function buildJSON() {\n    return JSON.stringify(generatedData, null, 2);\n  }\n\n  function buildCSV() {\n    var cols = selectedFields.map(colName);\n    var lines = [cols.map(csvEsc).join(\",\")];\n    generatedData.forEach(function(row) {\n      lines.push(cols.map(function(c){ return csvEsc(row[c]); }).join(\",\"));\n    });\n    return lines.join(\"\\n\");\n  }\n\n  function buildSQL() {\n    var table = (document.getElementById(\"fdSqlTable\").value.trim() || \"mock_data\");\n    var cols = selectedFields.map(colName);\n    var header = \"INSERT INTO `\" + table + \"` (`\" + cols.join(\"`, `\") + \"`) VALUES\";\n    var rows = generatedData.map(function(row) {\n      var vals = cols.map(function(c) {\n        var v = row[c];\n        if (typeof v === \"boolean\") return v ? \"TRUE\" : \"FALSE\";\n        if (typeof v === \"number\") return v;\n        return \"'\" + String(v).replace(/'/g, \"''\") + \"'\";\n      });\n      return \"  (\" + vals.join(\", \") + \")\";\n    });\n    return header + \"\\n\" + rows.join(\",\\n\") + \";\";\n  }\n\n  function csvEsc(v) {\n    var s = String(v);\n    if (s.includes(\",\") || s.includes('\"') || s.includes(\"\\n\")) {\n      return '\"' + s.replace(/\"/g,'\"\"') + '\"';\n    }\n    return s;\n  }\n\n  function escHtml(s) {\n    return s.replace(/\u0026/g,\"\u0026amp;\").replace(/\u003c/g,\"\u0026lt;\").replace(/\u003e/g,\"\u0026gt;\");\n  }\n\n  // ── コピー ─────────────────────────────────────────────────────────────────\n  document.getElementById(\"fdBtnCopy\").addEventListener(\"click\", function() {\n    var btn = document.getElementById(\"fdBtnCopy\");\n    var text = document.getElementById(\"fdOutput\").textContent;\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(text).then(function() {\n        btn.textContent = \"コピー完了!\";\n        btn.classList.add(\"copied\");\n        setTimeout(function(){ btn.textContent=\"コピー\"; btn.classList.remove(\"copied\"); }, 1800);\n      });\n    } else {\n      var ta = document.createElement(\"textarea\");\n      ta.value = text;\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand(\"copy\");\n      document.body.removeChild(ta);\n      btn.textContent = \"コピー完了!\";\n      btn.classList.add(\"copied\");\n      setTimeout(function(){ btn.textContent=\"コピー\"; btn.classList.remove(\"copied\"); }, 1800);\n    }\n  });\n\n  // ── ダウンロード ───────────────────────────────────────────────────────────\n  document.getElementById(\"fdBtnDownload\").addEventListener(\"click\", function() {\n    var text = buildOutput();\n    var ext  = currentFmt === \"json\" ? \"json\" : currentFmt === \"csv\" ? \"csv\" : \"sql\";\n    var mime = currentFmt === \"json\" ? \"application/json\"\n             : currentFmt === \"csv\"  ? \"text/csv\"\n             : \"text/plain\";\n    var blob = new Blob([text], {type: mime});\n    var url  = URL.createObjectURL(blob);\n    var a    = document.createElement(\"a\");\n    a.href     = url;\n    a.download = \"dummy-data.\" + ext;\n    a.click();\n    URL.revokeObjectURL(url);\n  });\n\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003cdiv class=\"jf-freee-cta\" style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003eAPI開発・テストの経費管理もかんたんに\u003c/p\u003e","title":"ダミーデータジェネレーター"},{"content":"CSVデータをJSON形式に（またはその逆に）即座に変換できます。テキストを貼り付けるかファイルをアップロードして、フォーマットを選択してダウンロードするだけ。データはサーバーに送信されず、すべてブラウザ内で処理されます。\n関連ツール: JSON→CSV変換 · JSONフォーマッター CSV → JSON JSON → CSV オプション 区切り文字 自動検出 カンマ (,) タブ (\\t) セミコロン (;) パイプ (|) カスタム… カスタム文字 出力フォーマット オブジェクト配列 配列の配列 ネスト（第1列でグループ化） 1行目をヘッダーとして使用 型推論を有効化 整形出力（Pretty print） CSV 入力 .csv をドロップ .csvをアップロード ファイル未選択 JSONに変換 クリア サンプルを読み込む 行数: 0 列数: 0 検出された区切り文字: — プレビュー テーブル JSON 出力 コピーしました！ JSONをコピー .jsonをダウンロード レコード数: 0 サイズ: 0 B オプション 出力区切り文字 カンマ (,) タブ (\\t) セミコロン (;) パイプ (|) ヘッダー行を含める 文字列をすべてクォート JSON 入力 CSVに変換 クリア サンプルを読み込む CSV 出力 コピーしました！ CSVをコピー .csvをダウンロード 行数: 0 列数: 0 サイズ: 0 B 使い方 CSV → JSON 変換\nCSVテキストを貼り付けるか、.csvファイルをアップロードします（ドラッグ＆ドロップ対応）。 区切り文字を選択。自動検出のままにすると、1行目の出現数を確認して最適な区切り文字を判断します。 1行目をヘッダーとして使用で、最初の行をキー名にするか通常データとして扱うかを切り替えます。 出力フォーマットを選択： オブジェクト配列 — 最も一般的。各行が { \u0026quot;キー\u0026quot;: \u0026quot;値\u0026quot;, … } になります。 配列の配列 — コンパクト形式。行がそのまま配列で保持されます。 ネスト — 第1列の値をキーとしてオブジェクトにグループ化します。 型推論が数値・true/false・空欄/null/n/aセルを適切なJSON型に自動変換します。 「JSONに変換」を押し、プレビューテーブルで確認後、コピーまたはダウンロード。 JSON → CSV 変換\nJSON → CSVタブに切り替えて、フラットなJSON配列を貼り付け、出力区切り文字を選んでダウンロードします。\nカンマを含むクォートフィールド（例: \u0026quot;田中, 健一\u0026quot;）もRFC 4180に従って正しく処理されます。\nデータ管理の経費もかんたんに\nfreee会計なら、SaaSツール費用の経費精算もクラウドで一元管理。 freeeを無料で試す → 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。\n関連ツール: JSON→CSV変換 · JSONフォーマッター 関連記事 AIでExcel作業を自動化する方法【マクロ不要で誰でもできる】 Excel関数よく使うもの一覧【2026年版・コピペ即使える】仕事で役立つ厳選50選 ","permalink":"https://productivity-works.com/ja/tools/csv-to-json/","summary":"\u003cp\u003eCSVデータをJSON形式に（またはその逆に）即座に変換できます。テキストを貼り付けるかファイルをアップロードして、フォーマットを選択してダウンロードするだけ。データはサーバーに送信されず、すべてブラウザ内で処理されます。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e関連ツール:\u003c/strong\u003e \u003ca href=\"https://productivity-works.com/ja/tools/json-to-csv/\"\u003eJSON→CSV変換\u003c/a\u003e\n  ·  \u003ca href=\"https://productivity-works.com/ja/tools/json-formatter/\"\u003eJSONフォーマッター\u003c/a\u003e\n\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv id=\"cj-app\"\u003e\n\u003cstyle\u003e\n/* ── Reset / base ── */\n#cj-app *, #cj-app *::before, #cj-app *::after { box-sizing: border-box; margin: 0; padding: 0; }\n#cj-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Yu Gothic UI\", Meiryo, sans-serif;\n  font-size: 14px;\n  color: #1e293b;\n  line-height: 1.7;\n}\n\n/* ── Layout ── */\n#cj-app .cj-card {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n  margin-bottom: 16px;\n}\n\n/* ── Section headers ── */\n#cj-app .cj-section-title {\n  font-size: 13px;\n  font-weight: 700;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: .04em;\n  margin-bottom: 10px;\n}\n\n/* ── Mode tabs ── */\n#cj-app .cj-tabs {\n  display: flex;\n  gap: 4px;\n  margin-bottom: 16px;\n  background: #f1f5f9;\n  border-radius: 8px;\n  padding: 4px;\n}\n#cj-app .cj-tab {\n  flex: 1;\n  padding: 8px 12px;\n  border: none;\n  border-radius: 6px;\n  background: transparent;\n  font-size: 13px;\n  font-weight: 700;\n  color: #64748b;\n  cursor: pointer;\n  transition: all .15s;\n}\n#cj-app .cj-tab.active {\n  background: #fff;\n  color: #0f172a;\n  box-shadow: 0 1px 3px rgba(0,0,0,.12);\n}\n\n/* ── Controls row ── */\n#cj-app .cj-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  align-items: flex-end;\n  margin-bottom: 14px;\n}\n#cj-app .cj-control-group {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n#cj-app .cj-label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #475569;\n}\n#cj-app select, #cj-app input[type=\"text\"] {\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  padding: 6px 10px;\n  font-size: 13px;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n  transition: border-color .15s;\n}\n#cj-app select:focus, #cj-app input[type=\"text\"]:focus {\n  border-color: #3b82f6;\n}\n#cj-app .cj-toggle-label {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 13px;\n  color: #1e293b;\n  cursor: pointer;\n  user-select: none;\n}\n#cj-app .cj-toggle-label input[type=\"checkbox\"] {\n  width: 15px;\n  height: 15px;\n  accent-color: #3b82f6;\n  cursor: pointer;\n}\n\n/* ── Textarea / file drop ── */\n#cj-app .cj-drop-zone {\n  position: relative;\n  border: 2px dashed #cbd5e1;\n  border-radius: 8px;\n  transition: border-color .15s, background .15s;\n}\n#cj-app .cj-drop-zone.drag-over {\n  border-color: #3b82f6;\n  background: #eff6ff;\n}\n#cj-app .cj-textarea {\n  width: 100%;\n  min-height: 160px;\n  border: none;\n  border-radius: 8px;\n  padding: 12px;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 12.5px;\n  color: #0f172a;\n  background: transparent;\n  resize: vertical;\n  outline: none;\n  display: block;\n}\n#cj-app .cj-drop-hint {\n  position: absolute;\n  bottom: 8px;\n  right: 12px;\n  font-size: 11px;\n  color: #94a3b8;\n  pointer-events: none;\n}\n\n/* ── File upload button ── */\n#cj-app .cj-file-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 8px;\n}\n#cj-app .cj-btn-file {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 6px 14px;\n  border: 1px solid #94a3b8;\n  border-radius: 6px;\n  background: #f8fafc;\n  font-size: 12px;\n  font-weight: 600;\n  color: #475569;\n  cursor: pointer;\n  transition: background .15s;\n}\n#cj-app .cj-btn-file:hover { background: #f1f5f9; }\n#cj-app #cj-file-input { display: none; }\n#cj-app .cj-file-name {\n  font-size: 12px;\n  color: #64748b;\n  font-style: italic;\n}\n\n/* ── Action buttons ── */\n#cj-app .cj-actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 12px;\n}\n#cj-app .cj-btn {\n  padding: 8px 18px;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity .15s, transform .1s;\n}\n#cj-app .cj-btn:hover { opacity: .88; }\n#cj-app .cj-btn:active { transform: scale(.97); }\n#cj-app .cj-btn-primary {\n  background: #3b82f6;\n  color: #fff;\n}\n#cj-app .cj-btn-secondary {\n  background: #f1f5f9;\n  color: #334155;\n  border: 1px solid #cbd5e1;\n}\n#cj-app .cj-btn-success {\n  background: #10b981;\n  color: #fff;\n}\n#cj-app .cj-btn-sm {\n  padding: 5px 12px;\n  font-size: 12px;\n}\n\n/* ── Stats bar ── */\n#cj-app .cj-stats {\n  display: flex;\n  gap: 16px;\n  font-size: 12px;\n  color: #64748b;\n  margin-top: 8px;\n  flex-wrap: wrap;\n}\n#cj-app .cj-stat-item strong { color: #0f172a; }\n\n/* ── Output area ── */\n#cj-app .cj-output-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 8px;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n#cj-app .cj-output-textarea {\n  width: 100%;\n  min-height: 220px;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 12px;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 12px;\n  color: #0f172a;\n  background: #f8fafc;\n  resize: vertical;\n  outline: none;\n}\n\n/* ── Preview table ── */\n#cj-app .cj-table-wrap {\n  overflow-x: auto;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  max-height: 280px;\n  overflow-y: auto;\n}\n#cj-app .cj-table {\n  border-collapse: collapse;\n  width: 100%;\n  font-size: 12px;\n}\n#cj-app .cj-table th {\n  background: #f1f5f9;\n  color: #475569;\n  font-weight: 700;\n  padding: 7px 12px;\n  text-align: left;\n  border-bottom: 1px solid #e2e8f0;\n  white-space: nowrap;\n  position: sticky;\n  top: 0;\n}\n#cj-app .cj-table td {\n  padding: 5px 12px;\n  border-bottom: 1px solid #f1f5f9;\n  white-space: nowrap;\n  max-width: 200px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n#cj-app .cj-table tr:hover td { background: #f8fafc; }\n#cj-app .cj-table .cj-type-num { color: #0891b2; }\n#cj-app .cj-table .cj-type-bool { color: #7c3aed; }\n#cj-app .cj-table .cj-type-null { color: #94a3b8; font-style: italic; }\n\n/* ── Message / error ── */\n#cj-app .cj-msg {\n  padding: 10px 14px;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 500;\n  margin-top: 10px;\n  display: none;\n}\n#cj-app .cj-msg.show { display: block; }\n#cj-app .cj-msg.error { background: #fef2f2; color: #b91c1c; border: 1px solid #fecaca; }\n#cj-app .cj-msg.success { background: #f0fdf4; color: #166534; border: 1px solid #bbf7d0; }\n\n/* ── Copy feedback ── */\n#cj-app .cj-copy-feedback {\n  font-size: 12px;\n  color: #10b981;\n  font-weight: 600;\n  opacity: 0;\n  transition: opacity .3s;\n}\n#cj-app .cj-copy-feedback.show { opacity: 1; }\n\n/* ── Responsive ── */\n@media (max-width: 560px) {\n  #cj-app .cj-controls { flex-direction: column; align-items: stretch; }\n  #cj-app .cj-output-header { flex-direction: column; align-items: flex-start; }\n}\n\u003c/style\u003e\n\u003c!-- ═══════════════════════════════════════════\n     MODE TABS\n═══════════════════════════════════════════ --\u003e\n\u003cdiv class=\"cj-tabs\"\u003e\n  \u003cbutton class=\"cj-tab active\" id=\"cj-tab-csv2json\" onclick=\"cjSetMode('csv2json')\"\u003eCSV → JSON\u003c/button\u003e\n  \u003cbutton class=\"cj-tab\" id=\"cj-tab-json2csv\" onclick=\"cjSetMode('json2csv')\"\u003eJSON → CSV\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- ═══════════════════════════════════════════\n     CSV → JSON パネル\n═══════════════════════════════════════════ --\u003e\n\u003cdiv id=\"cj-panel-csv2json\"\u003e\n  \u003c!-- オプション --\u003e\n  \u003cdiv class=\"cj-card\"\u003e\n    \u003cdiv class=\"cj-section-title\"\u003eオプション\u003c/div\u003e\n    \u003cdiv class=\"cj-controls\"\u003e\n      \u003c!-- 区切り文字 --\u003e\n      \u003cdiv class=\"cj-control-group\"\u003e\n        \u003cspan class=\"cj-label\"\u003e区切り文字\u003c/span\u003e\n        \u003cselect id=\"cj-delimiter\" onchange=\"cjOnDelimiterChange()\"\u003e\n          \u003coption value=\"auto\"\u003e自動検出\u003c/option\u003e\n          \u003coption value=\",\"\u003eカンマ (,)\u003c/option\u003e\n          \u003coption value=\"\t\"\u003eタブ (\\t)\u003c/option\u003e\n          \u003coption value=\";\"\u003eセミコロン (;)\u003c/option\u003e\n          \u003coption value=\"|\"\u003eパイプ (|)\u003c/option\u003e\n          \u003coption value=\"custom\"\u003eカスタム…\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"cj-control-group\" id=\"cj-custom-delim-group\" style=\"display:none;\"\u003e\n        \u003cspan class=\"cj-label\"\u003eカスタム文字\u003c/span\u003e\n        \u003cinput type=\"text\" id=\"cj-custom-delim\" maxlength=\"3\" placeholder=\"例: ~\" style=\"width:80px;\" /\u003e\n      \u003c/div\u003e\n      \u003c!-- 出力フォーマット --\u003e\n      \u003cdiv class=\"cj-control-group\"\u003e\n        \u003cspan class=\"cj-label\"\u003e出力フォーマット\u003c/span\u003e\n        \u003cselect id=\"cj-format\"\u003e\n          \u003coption value=\"objects\"\u003eオブジェクト配列\u003c/option\u003e\n          \u003coption value=\"arrays\"\u003e配列の配列\u003c/option\u003e\n          \u003coption value=\"nested\"\u003eネスト（第1列でグループ化）\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n      \u003c!-- トグル --\u003e\n      \u003cdiv class=\"cj-control-group\" style=\"justify-content:flex-end;gap:8px;\"\u003e\n        \u003clabel class=\"cj-toggle-label\"\u003e\n          \u003cinput type=\"checkbox\" id=\"cj-headers\" checked /\u003e\n          1行目をヘッダーとして使用\n        \u003c/label\u003e\n        \u003clabel class=\"cj-toggle-label\"\u003e\n          \u003cinput type=\"checkbox\" id=\"cj-typeinfer\" checked /\u003e\n          型推論を有効化\n        \u003c/label\u003e\n        \u003clabel class=\"cj-toggle-label\"\u003e\n          \u003cinput type=\"checkbox\" id=\"cj-pretty\" checked /\u003e\n          整形出力（Pretty print）\n        \u003c/label\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 入力 --\u003e\n  \u003cdiv class=\"cj-card\"\u003e\n    \u003cdiv class=\"cj-section-title\"\u003eCSV 入力\u003c/div\u003e\n    \u003cdiv class=\"cj-drop-zone\" id=\"cj-drop-zone\"\u003e\n      \u003ctextarea class=\"cj-textarea\" id=\"cj-csv-input\"\n        placeholder=\"CSVをここに貼り付けるか、.csvファイルをドラッグ＆ドロップ…\u0026#10;\u0026#10;例:\u0026#10;名前,年齢,在籍\u0026#10;田中太郎,30,true\u0026#10;鈴木花子,25,false\"\u003e\u003c/textarea\u003e\n      \u003cspan class=\"cj-drop-hint\"\u003e.csv をドロップ\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cj-file-row\"\u003e\n      \u003clabel class=\"cj-btn-file\" for=\"cj-file-input\"\u003e\n        \u003csvg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"\u003e\u003cpath d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/\u003e\u003cpolyline points=\"17 8 12 3 7 8\"/\u003e\u003cline x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"/\u003e\u003c/svg\u003e\n        .csvをアップロード\n      \u003c/label\u003e\n      \u003cinput type=\"file\" id=\"cj-file-input\" accept=\".csv,text/csv,text/plain\" /\u003e\n      \u003cspan class=\"cj-file-name\" id=\"cj-file-name\"\u003eファイル未選択\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cj-actions\"\u003e\n      \u003cbutton class=\"cj-btn cj-btn-primary\" onclick=\"cjConvert()\"\u003eJSONに変換\u003c/button\u003e\n      \u003cbutton class=\"cj-btn cj-btn-secondary\" onclick=\"cjClearInput()\"\u003eクリア\u003c/button\u003e\n      \u003cbutton class=\"cj-btn cj-btn-secondary\" onclick=\"cjLoadSample()\"\u003eサンプルを読み込む\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cj-msg\" id=\"cj-input-msg\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"cj-stats\" id=\"cj-input-stats\" style=\"display:none;\"\u003e\n      \u003cspan class=\"cj-stat-item\"\u003e行数: \u003cstrong id=\"cj-row-count\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n      \u003cspan class=\"cj-stat-item\"\u003e列数: \u003cstrong id=\"cj-col-count\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n      \u003cspan class=\"cj-stat-item\"\u003e検出された区切り文字: \u003cstrong id=\"cj-detected-delim\"\u003e—\u003c/strong\u003e\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- プレビュー --\u003e\n  \u003cdiv class=\"cj-card\" id=\"cj-preview-card\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"cj-section-title\"\u003eプレビュー テーブル\u003c/div\u003e\n    \u003cdiv class=\"cj-table-wrap\" id=\"cj-table-wrap\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 出力 --\u003e\n  \u003cdiv class=\"cj-card\" id=\"cj-output-card\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"cj-output-header\"\u003e\n      \u003cdiv class=\"cj-section-title\" style=\"margin-bottom:0;\"\u003eJSON 出力\u003c/div\u003e\n      \u003cdiv style=\"display:flex;align-items:center;gap:8px;flex-wrap:wrap;\"\u003e\n        \u003cspan class=\"cj-copy-feedback\" id=\"cj-copy-feedback\"\u003eコピーしました！\u003c/span\u003e\n        \u003cbutton class=\"cj-btn cj-btn-secondary cj-btn-sm\" onclick=\"cjCopy()\"\u003eJSONをコピー\u003c/button\u003e\n        \u003cbutton class=\"cj-btn cj-btn-success cj-btn-sm\" onclick=\"cjDownloadJSON()\"\u003e.jsonをダウンロード\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003ctextarea class=\"cj-output-textarea\" id=\"cj-json-output\" readonly\u003e\u003c/textarea\u003e\n    \u003cdiv class=\"cj-stats\" id=\"cj-output-stats\"\u003e\n      \u003cspan class=\"cj-stat-item\"\u003eレコード数: \u003cstrong id=\"cj-record-count\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n      \u003cspan class=\"cj-stat-item\"\u003eサイズ: \u003cstrong id=\"cj-output-size\"\u003e0 B\u003c/strong\u003e\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\u003c!-- /panel csv2json --\u003e\n\u003c!-- ═══════════════════════════════════════════\n     JSON → CSV パネル\n═══════════════════════════════════════════ --\u003e\n\u003cdiv id=\"cj-panel-json2csv\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"cj-card\"\u003e\n    \u003cdiv class=\"cj-section-title\"\u003eオプション\u003c/div\u003e\n    \u003cdiv class=\"cj-controls\"\u003e\n      \u003cdiv class=\"cj-control-group\"\u003e\n        \u003cspan class=\"cj-label\"\u003e出力区切り文字\u003c/span\u003e\n        \u003cselect id=\"cj-j2c-delimiter\"\u003e\n          \u003coption value=\",\"\u003eカンマ (,)\u003c/option\u003e\n          \u003coption value=\"\t\"\u003eタブ (\\t)\u003c/option\u003e\n          \u003coption value=\";\"\u003eセミコロン (;)\u003c/option\u003e\n          \u003coption value=\"|\"\u003eパイプ (|)\u003c/option\u003e\n        \u003c/select\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"cj-control-group\" style=\"justify-content:flex-end;gap:8px;\"\u003e\n        \u003clabel class=\"cj-toggle-label\"\u003e\n          \u003cinput type=\"checkbox\" id=\"cj-j2c-headers\" checked /\u003e\n          ヘッダー行を含める\n        \u003c/label\u003e\n        \u003clabel class=\"cj-toggle-label\"\u003e\n          \u003cinput type=\"checkbox\" id=\"cj-j2c-quote\" checked /\u003e\n          文字列をすべてクォート\n        \u003c/label\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cj-card\"\u003e\n    \u003cdiv class=\"cj-section-title\"\u003eJSON 入力\u003c/div\u003e\n    \u003cdiv class=\"cj-drop-zone\"\u003e\n      \u003ctextarea class=\"cj-textarea\" id=\"cj-json-input\"\n        placeholder='JSONの配列を貼り付けてください…\u0026#10;\u0026#10;例:\u0026#10;[{\"名前\":\"田中太郎\",\"年齢\":30},{\"名前\":\"鈴木花子\",\"年齢\":25}]'\u003e\u003c/textarea\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cj-actions\"\u003e\n      \u003cbutton class=\"cj-btn cj-btn-primary\" onclick=\"cjConvertJ2C()\"\u003eCSVに変換\u003c/button\u003e\n      \u003cbutton class=\"cj-btn cj-btn-secondary\" onclick=\"document.getElementById('cj-json-input').value=''\"\u003eクリア\u003c/button\u003e\n      \u003cbutton class=\"cj-btn cj-btn-secondary\" onclick=\"cjLoadJ2CSample()\"\u003eサンプルを読み込む\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cj-msg\" id=\"cj-j2c-input-msg\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cj-card\" id=\"cj-j2c-output-card\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"cj-output-header\"\u003e\n      \u003cdiv class=\"cj-section-title\" style=\"margin-bottom:0;\"\u003eCSV 出力\u003c/div\u003e\n      \u003cdiv style=\"display:flex;align-items:center;gap:8px;flex-wrap:wrap;\"\u003e\n        \u003cspan class=\"cj-copy-feedback\" id=\"cj-j2c-copy-feedback\"\u003eコピーしました！\u003c/span\u003e\n        \u003cbutton class=\"cj-btn cj-btn-secondary cj-btn-sm\" onclick=\"cjCopyCSV()\"\u003eCSVをコピー\u003c/button\u003e\n        \u003cbutton class=\"cj-btn cj-btn-success cj-btn-sm\" onclick=\"cjDownloadCSV()\"\u003e.csvをダウンロード\u003c/button\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003ctextarea class=\"cj-output-textarea\" id=\"cj-csv-output\" readonly\u003e\u003c/textarea\u003e\n    \u003cdiv class=\"cj-stats\" id=\"cj-j2c-output-stats\"\u003e\n      \u003cspan class=\"cj-stat-item\"\u003e行数: \u003cstrong id=\"cj-j2c-row-count\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n      \u003cspan class=\"cj-stat-item\"\u003e列数: \u003cstrong id=\"cj-j2c-col-count\"\u003e0\u003c/strong\u003e\u003c/span\u003e\n      \u003cspan class=\"cj-stat-item\"\u003eサイズ: \u003cstrong id=\"cj-j2c-size\"\u003e0 B\u003c/strong\u003e\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\u003c!-- /panel json2csv --\u003e\n\u003c/div\u003e\u003c!-- /#cj-app --\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  /* ── ユーティリティ ── */\n  function showMsg(id, text, type) {\n    var el = document.getElementById(id);\n    el.textContent = text;\n    el.className = 'cj-msg show ' + type;\n  }\n  function hideMsg(id) {\n    var el = document.getElementById(id);\n    el.className = 'cj-msg';\n  }\n  function show(id) { var el = document.getElementById(id); if (el) el.style.display = ''; }\n  function hide(id) { var el = document.getElementById(id); if (el) el.style.display = 'none'; }\n  function formatBytes(n) {\n    if (n \u003c 1024) return n + ' B';\n    if (n \u003c 1048576) return (n / 1024).toFixed(1) + ' KB';\n    return (n / 1048576).toFixed(2) + ' MB';\n  }\n\n  /* ── モード切り替え ── */\n  window.cjSetMode = function (mode) {\n    ['csv2json', 'json2csv'].forEach(function (m) {\n      document.getElementById('cj-tab-' + m).classList.toggle('active', m === mode);\n      document.getElementById('cj-panel-' + m).style.display = m === mode ? '' : 'none';\n    });\n  };\n\n  /* ── 区切り文字自動検出 ── */\n  function detectDelimiter(text) {\n    var candidates = [',', '\\t', ';', '|'];\n    var firstLine = text.split('\\n')[0] || '';\n    var best = ','; var bestCount = 0;\n    candidates.forEach(function (d) {\n      var count = firstLine.split(d).length - 1;\n      if (count \u003e bestCount) { bestCount = count; best = d; }\n    });\n    return best;\n  }\n\n  function getDelimiter() {\n    var sel = document.getElementById('cj-delimiter').value;\n    if (sel === 'auto') return null;\n    if (sel === 'custom') return document.getElementById('cj-custom-delim').value || ',';\n    return sel;\n  }\n\n  window.cjOnDelimiterChange = function () {\n    var sel = document.getElementById('cj-delimiter').value;\n    document.getElementById('cj-custom-delim-group').style.display = sel === 'custom' ? '' : 'none';\n  };\n\n  /* ── CSVパーサー（RFC 4180準拠） ── */\n  function parseCSV(text, delimiter) {\n    var rows = [];\n    var len = text.length;\n    var row = [];\n    var field = '';\n    var inQuote = false;\n    var i = 0;\n    var d = delimiter;\n    var dLen = d.length;\n\n    while (i \u003c len) {\n      var ch = text[i];\n\n      if (inQuote) {\n        if (ch === '\"') {\n          if (text[i + 1] === '\"') { field += '\"'; i += 2; continue; }\n          inQuote = false; i++; continue;\n        }\n        field += ch; i++; continue;\n      }\n\n      if (ch === '\"') { inQuote = true; i++; continue; }\n\n      if (text.substr(i, dLen) === d) {\n        row.push(field); field = ''; i += dLen; continue;\n      }\n\n      if (ch === '\\r') {\n        if (text[i + 1] === '\\n') i++;\n        row.push(field); rows.push(row); row = []; field = ''; i++; continue;\n      }\n      if (ch === '\\n') {\n        row.push(field); rows.push(row); row = []; field = ''; i++; continue;\n      }\n\n      field += ch; i++;\n    }\n    if (field !== '' || row.length \u003e 0) { row.push(field); rows.push(row); }\n    if (rows.length \u0026\u0026 rows[rows.length - 1].every(function (c) { return c === ''; })) rows.pop();\n    return rows;\n  }\n\n  /* ── 型推論 ── */\n  function inferValue(s) {\n    if (s === '' || s.toLowerCase() === 'null' || s.toLowerCase() === 'n/a') return null;\n    if (s.toLowerCase() === 'true') return true;\n    if (s.toLowerCase() === 'false') return false;\n    if (s !== '' \u0026\u0026 !isNaN(Number(s)) \u0026\u0026 s.trim() !== '') return Number(s);\n    return s;\n  }\n\n  /* ── メイン変換 CSV → JSON ── */\n  window.cjConvert = function () {\n    hideMsg('cj-input-msg');\n    var raw = document.getElementById('cj-csv-input').value.trim();\n    if (!raw) { showMsg('cj-input-msg', 'CSVデータを貼り付けるか、ファイルをアップロードしてください。', 'error'); return; }\n\n    var delimSel = getDelimiter();\n    var delim = delimSel === null ? detectDelimiter(raw) : delimSel;\n    var displayDelim = delim === '\\t' ? '\\\\t' : delim;\n\n    var rows = parseCSV(raw, delim);\n    if (!rows.length) { showMsg('cj-input-msg', '行を解析できませんでした。', 'error'); return; }\n\n    var useHeaders = document.getElementById('cj-headers').checked;\n    var useTypeInfer = document.getElementById('cj-typeinfer').checked;\n    var pretty = document.getElementById('cj-pretty').checked;\n    var format = document.getElementById('cj-format').value;\n\n    var headers = useHeaders ? rows[0] : rows[0].map(function (_, i) { return 'col' + (i + 1); });\n    var dataRows = useHeaders ? rows.slice(1) : rows;\n\n    document.getElementById('cj-row-count').textContent = dataRows.length;\n    document.getElementById('cj-col-count').textContent = headers.length;\n    document.getElementById('cj-detected-delim').textContent = delimSel === null ? '\"' + displayDelim + '\" (自動)' : '\"' + displayDelim + '\"';\n    document.getElementById('cj-input-stats').style.display = '';\n\n    var result;\n    if (format === 'arrays') {\n      result = useHeaders ? [headers].concat(dataRows.map(function (r) {\n        return r.map(function (c) { return useTypeInfer ? inferValue(c) : c; });\n      })) : dataRows.map(function (r) {\n        return r.map(function (c) { return useTypeInfer ? inferValue(c) : c; });\n      });\n    } else if (format === 'nested') {\n      result = {};\n      dataRows.forEach(function (r) {\n        var key = r[0] || '';\n        var obj = {};\n        headers.slice(1).forEach(function (h, hi) {\n          obj[h] = useTypeInfer ? inferValue(r[hi + 1] || '') : (r[hi + 1] || '');\n        });\n        result[key] = obj;\n      });\n    } else {\n      result = dataRows.map(function (r) {\n        var obj = {};\n        headers.forEach(function (h, hi) {\n          obj[h] = useTypeInfer ? inferValue(r[hi] || '') : (r[hi] || '');\n        });\n        return obj;\n      });\n    }\n\n    var jsonStr = pretty ? JSON.stringify(result, null, 2) : JSON.stringify(result);\n    document.getElementById('cj-json-output').value = jsonStr;\n    document.getElementById('cj-record-count').textContent = Array.isArray(result) ? result.length : Object.keys(result).length;\n    document.getElementById('cj-output-size').textContent = formatBytes(new Blob([jsonStr]).size);\n\n    show('cj-output-card');\n    buildPreviewTable(headers, dataRows, useTypeInfer);\n  };\n\n  /* ── プレビューテーブル ── */\n  function buildPreviewTable(headers, dataRows, useTypeInfer) {\n    var maxRows = Math.min(dataRows.length, 50);\n    var html = '\u003ctable class=\"cj-table\"\u003e\u003cthead\u003e\u003ctr\u003e';\n    headers.forEach(function (h) { html += '\u003cth\u003e' + escHtml(h) + '\u003c/th\u003e'; });\n    html += '\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e';\n    for (var i = 0; i \u003c maxRows; i++) {\n      html += '\u003ctr\u003e';\n      headers.forEach(function (_, hi) {\n        var raw = dataRows[i][hi] !== undefined ? dataRows[i][hi] : '';\n        var val = useTypeInfer ? inferValue(raw) : raw;\n        var cls = '';\n        if (typeof val === 'number') cls = 'cj-type-num';\n        else if (typeof val === 'boolean') cls = 'cj-type-bool';\n        else if (val === null) cls = 'cj-type-null';\n        var display = val === null ? 'null' : String(val);\n        html += '\u003ctd class=\"' + cls + '\"\u003e' + escHtml(display) + '\u003c/td\u003e';\n      });\n      html += '\u003c/tr\u003e';\n    }\n    html += '\u003c/tbody\u003e\u003c/table\u003e';\n    if (dataRows.length \u003e 50) html += '\u003cp style=\"font-size:11px;color:#94a3b8;padding:6px 12px;\"\u003e' + dataRows.length + '行中50行を表示\u003c/p\u003e","title":"CSV↔JSON変換ツール"},{"content":" 無料ミーム画像ジェネレーター 画像をアップロードして上下にテキストを追加するだけ。フォントサイズ・色・縁取りを自由にカスタマイズしてPNGでダウンロード。すべてブラウザ内で完結、アカウント不要。\n🖼️ ここに画像をドラッグ＆ドロップ JPG・PNG・GIF・WebP対応 · 最大20MB ファイルを選択 プレビュー 🎭 画像をアップロードするとプレビューが表示されます ミームテキスト 上部テキスト 下部テキスト スタイル設定 フォントサイズ 52px 縁取りの太さ 4px 文字色 #ffffff 縁取り色 #000000 文字揃え \u0026#9664; \u0026#9632; \u0026#9654; PNGでダウンロード リセット 使い方 STEP 1 — 画像をアップロード: ドラッグ＆ドロップ、または「ファイルを選択」から画像を選びます。JPG・PNG・GIF・WebP（最大20MB）に対応しています。\nSTEP 2 — テキストを入力: 上部・下部テキストフィールドに文字を入力します。入力と同時にプレビューがリアルタイムで更新されます。長いテキストは自動で折り返されます。\nSTEP 3 — スタイルを調整: フォントサイズ（16〜120px）、文字色、縁取り色、縁取りの太さをスライダーやカラーピッカーで設定します。定番のミームスタイルは「白文字＋黒縁取り」のデフォルト設定です。\nSTEP 4 — 文字揃えを選択: 左・中央（デフォルト）・右揃えを切り替えられます。上部テキスト・下部テキストの両方に適用されます。\nSTEP 5 — ダウンロード: 「PNGでダウンロード」をクリックして保存します。元画像のフル解像度でレンダリングされます。\nミームを上手に作るコツ テキストは短く。 定番ミームは1行3〜6単語程度のシンプルなフレーズが基本です。長すぎると読みにくくなります。\n縁取りを活用する。 縁取り幅3〜6pxが多くの画像でバランスよく機能します。背景が暗い・複雑な場合は太めに、明るく単色な背景では細めに設定しましょう。\nフォントはImpact相当。 このツールはImpact（定番ミームフォント）を優先し、環境によってArial Blackにフォールバックします。\nフル解像度で出力。 ダウンロードされるPNGは元画像のピクセルサイズ通りに生成されるため、大きな画面でも鮮明です。\n関連ツール テキスト追加前に画像サイズを調整 → 画像リサイザー モックアップ用のダミー画像を即座に生成 → プレースホルダー画像ジェネレーター ミーム作成もfreeeで経費管理もスマートに クリエイター・フリーランスの方へ。制作活動の経費管理はfreeeで自動化しませんか？ freeeを無料で試す\n","permalink":"https://productivity-works.com/ja/tools/meme-generator/","summary":"\u003cdiv id=\"mg-app\"\u003e\n\u003cstyle\u003e\n#mg-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Yu Gothic UI', Roboto, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  padding: 0 0 48px 0;\n  color: #1a202c;\n}\n\n#mg-app * {\n  box-sizing: border-box;\n}\n\n/* Hero */\n.mg-hero {\n  background: linear-gradient(135deg, #7c3aed 0%, #5b21b6 50%, #4c1d95 100%);\n  border-radius: 16px;\n  padding: 32px 28px;\n  margin-bottom: 24px;\n  color: #fff;\n}\n\n.mg-hero h2 {\n  margin: 0 0 6px 0;\n  font-size: 22px;\n  font-weight: 800;\n}\n\n.mg-hero p {\n  margin: 0;\n  font-size: 14px;\n  opacity: 0.88;\n  line-height: 1.7;\n}\n\n/* Drop Zone */\n.mg-dropzone {\n  border: 3px dashed #7c3aed;\n  border-radius: 14px;\n  padding: 44px 24px;\n  text-align: center;\n  background: #f5f3ff;\n  cursor: pointer;\n  transition: background 0.2s, border-color 0.2s;\n  margin-bottom: 20px;\n}\n\n.mg-dropzone.drag-over {\n  background: #ede9fe;\n  border-color: #5b21b6;\n}\n\n.mg-dropzone-icon {\n  font-size: 48px;\n  line-height: 1;\n  margin-bottom: 12px;\n  display: block;\n}\n\n.mg-dropzone-title {\n  font-size: 17px;\n  font-weight: 700;\n  color: #4c1d95;\n  margin-bottom: 6px;\n}\n\n.mg-dropzone-sub {\n  font-size: 13px;\n  color: #6b7280;\n  margin-bottom: 16px;\n}\n\n.mg-browse-btn {\n  display: inline-block;\n  padding: 10px 24px;\n  background: #7c3aed;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n\n.mg-browse-btn:hover {\n  background: #5b21b6;\n}\n\n#mg-file-input-ja {\n  display: none;\n}\n\n/* Card */\n.mg-card {\n  background: #fff;\n  border-radius: 14px;\n  box-shadow: 0 2px 16px rgba(0,0,0,0.08);\n  padding: 22px 24px;\n  margin-bottom: 18px;\n}\n\n.mg-card h3 {\n  margin: 0 0 18px 0;\n  font-size: 13px;\n  font-weight: 700;\n  color: #374151;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  border-bottom: 2px solid #f5f3ff;\n  padding-bottom: 10px;\n}\n\n/* Canvas wrapper */\n.mg-canvas-wrap {\n  width: 100%;\n  overflow: hidden;\n  border-radius: 10px;\n  background: repeating-conic-gradient(#e5e7eb 0% 25%, #fff 0% 50%) 0 0 / 16px 16px;\n  border: 1px solid #e5e7eb;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 200px;\n}\n\n#mg-canvas-ja {\n  max-width: 100%;\n  max-height: 500px;\n  display: block;\n  object-fit: contain;\n}\n\n/* Text inputs */\n.mg-input-group {\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n  margin-bottom: 14px;\n}\n\n.mg-input-group label {\n  font-size: 12px;\n  font-weight: 700;\n  color: #374151;\n  letter-spacing: 0.02em;\n}\n\n.mg-text-input {\n  padding: 10px 14px;\n  border: 2px solid #e9d5ff;\n  border-radius: 8px;\n  font-size: 15px;\n  color: #1a202c;\n  transition: border-color 0.2s;\n  width: 100%;\n}\n\n.mg-text-input:focus {\n  outline: none;\n  border-color: #7c3aed;\n}\n\n/* Controls row */\n.mg-controls-row {\n  display: flex;\n  gap: 16px;\n  flex-wrap: wrap;\n  align-items: flex-start;\n}\n\n.mg-control-group {\n  flex: 1;\n  min-width: 140px;\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n}\n\n.mg-control-group label {\n  font-size: 12px;\n  font-weight: 700;\n  color: #374151;\n  letter-spacing: 0.02em;\n}\n\n/* Color picker inline */\n.mg-color-wrap {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.mg-color-swatch {\n  width: 36px;\n  height: 36px;\n  border-radius: 6px;\n  border: 2px solid #e9d5ff;\n  padding: 2px;\n  cursor: pointer;\n  background: none;\n}\n\n.mg-color-label-val {\n  font-size: 13px;\n  font-weight: 600;\n  color: #374151;\n  font-family: monospace;\n}\n\n/* Alignment buttons */\n.mg-align-btns {\n  display: flex;\n  gap: 8px;\n}\n\n.mg-align-btn {\n  flex: 1;\n  padding: 8px 10px;\n  border: 2px solid #e9d5ff;\n  border-radius: 8px;\n  background: #fff;\n  font-size: 16px;\n  cursor: pointer;\n  transition: all 0.18s;\n  text-align: center;\n}\n\n.mg-align-btn:hover {\n  border-color: #7c3aed;\n  background: #f5f3ff;\n}\n\n.mg-align-btn.active {\n  border-color: #7c3aed;\n  background: #7c3aed;\n  color: #fff;\n}\n\n/* Slider */\n.mg-slider-wrap {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n.mg-slider {\n  flex: 1;\n  height: 6px;\n  border-radius: 3px;\n  background: linear-gradient(to right, #e9d5ff, #7c3aed);\n  -webkit-appearance: none;\n  appearance: none;\n  outline: none;\n  cursor: pointer;\n}\n\n.mg-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  background: #fff;\n  border: 2px solid #7c3aed;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.15);\n  cursor: pointer;\n}\n\n.mg-slider::-moz-range-thumb {\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  background: #fff;\n  border: 2px solid #7c3aed;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.15);\n  cursor: pointer;\n}\n\n.mg-slider-val {\n  font-size: 14px;\n  font-weight: 700;\n  color: #7c3aed;\n  min-width: 36px;\n  text-align: right;\n}\n\n/* Action buttons */\n.mg-actions {\n  display: flex;\n  gap: 12px;\n  flex-wrap: wrap;\n}\n\n.mg-download-btn {\n  flex: 1;\n  min-width: 160px;\n  padding: 14px 24px;\n  background: linear-gradient(135deg, #7c3aed, #5b21b6);\n  color: #fff;\n  border: none;\n  border-radius: 12px;\n  font-size: 16px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.2s, transform 0.1s;\n  text-align: center;\n}\n\n.mg-download-btn:hover:not(:disabled) { opacity: 0.92; }\n.mg-download-btn:active:not(:disabled) { transform: scale(0.98); }\n.mg-download-btn:disabled { background: #9ca3af; cursor: not-allowed; }\n\n.mg-reset-btn {\n  padding: 14px 24px;\n  background: #fff;\n  color: #7c3aed;\n  border: 2px solid #7c3aed;\n  border-radius: 12px;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.18s;\n}\n\n.mg-reset-btn:hover {\n  background: #f5f3ff;\n}\n\n/* Placeholder */\n.mg-placeholder {\n  text-align: center;\n  padding: 32px 16px;\n  color: #9ca3af;\n  font-size: 14px;\n}\n\n.mg-placeholder-icon {\n  font-size: 40px;\n  display: block;\n  margin-bottom: 8px;\n}\n\n/* Responsive */\n@media (max-width: 600px) {\n  .mg-hero { padding: 22px 16px; }\n  .mg-hero h2 { font-size: 18px; }\n  .mg-card { padding: 16px 14px; }\n  .mg-controls-row { gap: 10px; }\n  .mg-actions { flex-direction: column; }\n  .mg-reset-btn { width: 100%; text-align: center; }\n}\n\u003c/style\u003e\n\u003c!-- Hero --\u003e\n\u003cdiv class=\"mg-hero\"\u003e\n  \u003ch2\u003e無料ミーム画像ジェネレーター\u003c/h2\u003e\n  \u003cp\u003e画像をアップロードして上下にテキストを追加するだけ。フォントサイズ・色・縁取りを自由にカスタマイズしてPNGでダウンロード。すべてブラウザ内で完結、アカウント不要。\u003c/p\u003e","title":"ミーム画像ジェネレーター"},{"content":"XMLサイトマップをブラウザ上で即座に作成。URLを1件ずつ追加するか、まとめて貼り付けて、優先度・更新頻度・最終更新日を設定したら sitemap.xml をダウンロード・コピーできます。\nプリセット ブログ ECサイト ポートフォリオ すべてクリア デフォルト値（新規追加時に適用） デフォルト更新頻度 always（常時） hourly（毎時） daily（毎日） weekly（毎週） monthly（毎月） yearly（毎年） never（変更なし） デフォルト優先度 URLを1件ずつ追加 まとめて貼り付け + URLを追加 各URLに最終更新日・更新頻度・優先度（0.0〜1.0）を個別設定できます。\nURLを貼り付け（1行に1URL） URLをインポート デフォルト設定の更新頻度と優先度が適用されます。インポート後は「URLを1件ずつ追加」タブで個別に編集できます。\n生成されたサイトマップXML URL数: 0 \u0026#10003; 有効なXML XMLをコピー sitemap.xmlをダウンロード コピーしました！ 使い方 URLを追加 — 「URLを追加」ボタンで1件ずつ入力するか、「まとめて貼り付け」タブで複数URLを一括インポートします。 各フィールドを設定 — 最終更新日・更新頻度・優先度（0.0〜1.0）を任意で設定します。 プリセットを活用 — ブログ・ECサイト・ポートフォリオのテンプレートをワンクリックで読み込めます。 コピーまたはダウンロード — 「XMLをコピー」でクリップボードへ、「sitemap.xmlをダウンロード」でファイル保存。 Googleへ送信 — sitemap.xml をサーバーのルートディレクトリにアップロードし、Google Search Console で送信します。 XMLサイトマップとは XMLサイトマップは、Webサイトの重要なページをリストアップしたファイルで、GoogleやBingなどの検索エンジンがコンテンツを効率よく発見・インデックスするのを助けます。フォーマットは sitemaps.org で定義された標準規格に準拠しています。\n各 \u0026lt;url\u0026gt; エントリに設定できる項目:\nフィールド 説明 \u0026lt;loc\u0026gt; ページの完全なURL（必須） \u0026lt;lastmod\u0026gt; ページの最終更新日（YYYY-MM-DD形式） \u0026lt;changefreq\u0026gt; ページの更新頻度（daily、weeklyなど） \u0026lt;priority\u0026gt; 他のページに対する相対的な重要度（0.0〜1.0） 関連ツール robots.txtを生成 → Robots.txtジェネレーター メタタグを作成 → メタタグジェネレーター プライバシーポリシーを作成 → プライバシーポリシージェネレーター 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 副業ブログの始め方｜お名前.comでドメイン取得→freeeで経費管理まで ","permalink":"https://productivity-works.com/ja/tools/sitemap-generator/","summary":"\u003cp\u003eXMLサイトマップをブラウザ上で即座に作成。URLを1件ずつ追加するか、まとめて貼り付けて、優先度・更新頻度・最終更新日を設定したら \u003ccode\u003esitemap.xml\u003c/code\u003e をダウンロード・コピーできます。\u003c/p\u003e\n\u003cdiv id=\"sitemap-app\"\u003e\n\u003cstyle\u003e\n  #sitemap-app *,\n  #sitemap-app *::before,\n  #sitemap-app *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n\u003cp\u003e#sitemap-app {\nfont-family: -apple-system, BlinkMacSystemFont, \u0026ldquo;Segoe UI\u0026rdquo;, \u0026ldquo;Hiragino Sans\u0026rdquo;, \u0026ldquo;Noto Sans JP\u0026rdquo;, sans-serif;\nfont-size: 15px;\ncolor: #1a1a1a;\nline-height: 1.6;\nmax-width: 860px;\nmargin: 0 auto;\n}\u003c/p\u003e\n\u003cp\u003e#sitemap-app .sa-section {\nbackground: #fff;\nborder: 1px solid #e0e0e0;\nborder-radius: 10px;\npadding: 20px;\nmargin-bottom: 16px;\n}\u003c/p\u003e\n\u003cp\u003e#sitemap-app .sa-section-title {\nfont-size: 13px;\nfont-weight: 700;\nletter-spacing: 0.04em;\ncolor: #555;\nmargin-bottom: 14px;\n}\u003c/p\u003e\n\u003cp\u003e#sitemap-app .sa-row {\ndisplay: flex;\ngap: 10px;\nflex-wrap: wrap;\nalign-items: flex-end;\nmargin-bottom: 10px;\n}\u003c/p\u003e","title":"サイトマップXMLジェネレーター — 無料オンラインツール"},{"content":" 家電の消費電力・使用時間・使用日数を入力するだけで、月々の電気代と年間電気代を自動計算します。エアコン・冷蔵庫・テレビなどのプリセットも用意しています。 電気料金単価の設定 1kWhあたりの単価： 円/kWh \u0026nbsp;（検針票または電力会社のWebで確認できます） 家電を追加する プリセットから追加 家電名 消費電力（W） 1日の使用時間 1ヶ月の使用日数 ＋ 追加する 登録した家電一覧 家電名 消費電力(W) 時間/日 日数/月 kWh/月 電気代/月 電気代/年 家電がまだ登録されていません。プリセットまたは手動で追加してください。 合計使用量（月） 0 kWh / 月 月の電気代（概算） ¥0 月額合計 年間電気代（概算） ¥0 年間合計 家電別コスト内訳 家電を追加すると内訳が表示されます 電気代を節約するためのコツ エアコンの設定温度を見直す — 冷房は28℃、暖房は20℃を目安に。1℃変えるだけで約10%の節電効果があると言われています。 冷蔵庫の設定を「中」に — 季節に合わせて設定温度を調整。詰め込みすぎると効率が下がります。 待機電力をカット — テレビやゲーム機などの主電源をオフに。スマートタップを使うと便利です。 LED照明に切り替える — 白熱電球と比べて約80%省エネ。寿命も40倍以上。 洗濯は「まとめ洗い」 — 回数を減らすだけで水道代・電気代の両方を節約できます。 電力自由化を活用 — 電力会社を比較・乗り換えで年間数千円〜1万円以上の節約ができる場合があります。 太陽光発電の検討 — 初期費用はかかりますが、自家消費で電気代を大幅に削減できます。 家計の経費管理を効率化 → freee会計で家計簿を自動管理 関連ツール CO2排出量計算 → CO2排出量計算ツール 料理単位変換 → 料理単位変換ツール Fuel Cost Calculator → Fuel Cost Calculatorツール ","permalink":"https://productivity-works.com/ja/tools/electricity-cost-calculator/","summary":"\u003cstyle\u003e\n#ec-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Noto Sans JP\", \"Yu Gothic\", sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#ec-app * { box-sizing: border-box; }\n#ec-app h2 {\n  font-size: 1.2rem;\n  font-weight: 700;\n  margin: 1.5rem 0 0.75rem;\n  color: #1a1a2e;\n}\n#ec-app .ec-intro {\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n  color: #fff;\n  border-radius: 12px;\n  padding: 1.25rem 1.5rem;\n  margin-bottom: 1.5rem;\n  font-size: 0.97rem;\n  line-height: 1.7;\n}\n#ec-app .ec-rate-row {\n  display: flex;\n  align-items: center;\n  gap: 0.75rem;\n  background: #f0f4ff;\n  border: 1.5px solid #c7d2fe;\n  border-radius: 10px;\n  padding: 0.85rem 1.1rem;\n  margin-bottom: 1.25rem;\n  flex-wrap: wrap;\n}\n#ec-app .ec-rate-row label {\n  font-weight: 600;\n  font-size: 0.95rem;\n  color: #3730a3;\n  white-space: nowrap;\n}\n#ec-app .ec-rate-row input {\n  width: 110px;\n  padding: 0.45rem 0.65rem;\n  border: 1.5px solid #a5b4fc;\n  border-radius: 7px;\n  font-size: 1rem;\n  background: #fff;\n  color: #1a1a2e;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#ec-app .ec-rate-row input:focus { border-color: #6366f1; }\n#ec-app .ec-rate-row span { font-size: 0.9rem; color: #6366f1; font-weight: 500; }\n\n#ec-app .ec-presets { margin-bottom: 1.25rem; }\n#ec-app .ec-presets-title {\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #6b7280;\n  margin-bottom: 0.5rem;\n  letter-spacing: 0.02em;\n}\n#ec-app .ec-preset-grid {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.45rem;\n}\n#ec-app .ec-preset-btn {\n  background: #fff;\n  border: 1.5px solid #e0e7ff;\n  border-radius: 20px;\n  padding: 0.35rem 0.85rem;\n  font-size: 0.85rem;\n  cursor: pointer;\n  color: #4f46e5;\n  font-weight: 500;\n  transition: background 0.15s, border-color 0.15s;\n}\n#ec-app .ec-preset-btn:hover {\n  background: #eef2ff;\n  border-color: #6366f1;\n}\n\n#ec-app .ec-add-form {\n  background: #f9fafb;\n  border: 1.5px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 1.1rem 1.25rem;\n  margin-bottom: 1.25rem;\n}\n#ec-app .ec-add-form .ec-form-grid {\n  display: grid;\n  grid-template-columns: 2fr 1fr 1fr 1fr;\n  gap: 0.6rem;\n  align-items: end;\n}\n@media (max-width: 600px) {\n  #ec-app .ec-add-form .ec-form-grid {\n    grid-template-columns: 1fr 1fr;\n  }\n}\n#ec-app .ec-form-group { display: flex; flex-direction: column; gap: 0.3rem; }\n#ec-app .ec-form-group label {\n  font-size: 0.8rem;\n  font-weight: 600;\n  color: #6b7280;\n}\n#ec-app .ec-form-group input {\n  padding: 0.5rem 0.7rem;\n  border: 1.5px solid #d1d5db;\n  border-radius: 7px;\n  font-size: 0.97rem;\n  background: #fff;\n  color: #1a1a2e;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#ec-app .ec-form-group input:focus { border-color: #6366f1; }\n#ec-app .ec-add-btn {\n  background: linear-gradient(135deg, #6366f1, #8b5cf6);\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  padding: 0.55rem 1.2rem;\n  font-size: 0.97rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: opacity 0.2s;\n  white-space: nowrap;\n  margin-top: 0.6rem;\n}\n#ec-app .ec-add-btn:hover { opacity: 0.88; }\n\n#ec-app .ec-table-wrap {\n  overflow-x: auto;\n  border-radius: 10px;\n  border: 1.5px solid #e5e7eb;\n  margin-bottom: 1.5rem;\n}\n#ec-app .ec-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.93rem;\n}\n#ec-app .ec-table th {\n  background: #f3f4f6;\n  padding: 0.65rem 0.9rem;\n  text-align: left;\n  font-size: 0.8rem;\n  font-weight: 700;\n  color: #6b7280;\n  white-space: nowrap;\n}\n#ec-app .ec-table td {\n  padding: 0.6rem 0.9rem;\n  border-top: 1px solid #f0f0f0;\n  vertical-align: middle;\n}\n#ec-app .ec-table tr:hover td { background: #f9fafb; }\n#ec-app .ec-table .ec-color-dot {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  border-radius: 50%;\n  margin-right: 6px;\n  vertical-align: middle;\n}\n#ec-app .ec-del-btn {\n  background: none;\n  border: none;\n  color: #ef4444;\n  cursor: pointer;\n  font-size: 1.1rem;\n  padding: 0.1rem 0.4rem;\n  border-radius: 5px;\n  transition: background 0.15s;\n}\n#ec-app .ec-del-btn:hover { background: #fee2e2; }\n#ec-app .ec-empty {\n  text-align: center;\n  color: #9ca3af;\n  padding: 2rem;\n  font-size: 0.95rem;\n}\n\n#ec-app .ec-summary {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));\n  gap: 1rem;\n  margin-bottom: 1.5rem;\n}\n#ec-app .ec-summary-card {\n  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n  color: #fff;\n  border-radius: 12px;\n  padding: 1.1rem 1.25rem;\n  text-align: center;\n}\n#ec-app .ec-summary-card.green {\n  background: linear-gradient(135deg, #11998e, #38ef7d);\n}\n#ec-app .ec-summary-card.orange {\n  background: linear-gradient(135deg, #f7971e, #ffd200);\n  color: #1a1a2e;\n}\n#ec-app .ec-summary-card .ec-card-label {\n  font-size: 0.82rem;\n  font-weight: 600;\n  opacity: 0.85;\n  margin-bottom: 0.35rem;\n}\n#ec-app .ec-summary-card .ec-card-value {\n  font-size: 1.7rem;\n  font-weight: 800;\n  line-height: 1.1;\n}\n#ec-app .ec-summary-card .ec-card-sub {\n  font-size: 0.78rem;\n  opacity: 0.75;\n  margin-top: 0.2rem;\n}\n\n#ec-app .ec-chart-section {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 1.5rem;\n  align-items: start;\n  margin-bottom: 1.5rem;\n}\n@media (max-width: 600px) {\n  #ec-app .ec-chart-section { grid-template-columns: 1fr; }\n}\n#ec-app canvas { display: block; max-width: 100%; }\n#ec-app .ec-legend { list-style: none; padding: 0; margin: 0; }\n#ec-app .ec-legend li {\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  font-size: 0.9rem;\n  margin-bottom: 0.45rem;\n  color: #374151;\n}\n#ec-app .ec-legend-dot {\n  width: 12px;\n  height: 12px;\n  border-radius: 3px;\n  flex-shrink: 0;\n}\n#ec-app .ec-legend-pct {\n  margin-left: auto;\n  font-weight: 700;\n  color: #4f46e5;\n}\n\n#ec-app .ec-tips {\n  background: #f0fdf4;\n  border: 1.5px solid #bbf7d0;\n  border-radius: 12px;\n  padding: 1.1rem 1.25rem;\n  margin-bottom: 1.5rem;\n}\n#ec-app .ec-tips h3 {\n  margin: 0 0 0.7rem;\n  font-size: 1rem;\n  font-weight: 700;\n  color: #15803d;\n}\n#ec-app .ec-tips ul { margin: 0; padding-left: 1.25rem; }\n#ec-app .ec-tips li {\n  font-size: 0.92rem;\n  color: #166534;\n  margin-bottom: 0.35rem;\n  line-height: 1.6;\n}\n\n#ec-app .ec-cta {\n  background: #fffbeb;\n  border: 1.5px solid #fde68a;\n  border-radius: 12px;\n  padding: 1rem 1.25rem;\n  font-size: 0.95rem;\n  color: #92400e;\n  line-height: 1.6;\n}\n#ec-app .ec-cta a { color: #d97706; font-weight: 600; }\n\u003c/style\u003e\n\u003cdiv id=\"ec-app\"\u003e\n\u003cdiv class=\"ec-intro\"\u003e\n  家電の消費電力・使用時間・使用日数を入力するだけで、月々の電気代と年間電気代を自動計算します。エアコン・冷蔵庫・テレビなどのプリセットも用意しています。\n\u003c/div\u003e\n\u003ch2\u003e電気料金単価の設定\u003c/h2\u003e\n\u003cdiv class=\"ec-rate-row\"\u003e\n  \u003clabel for=\"ec-rate\"\u003e1kWhあたりの単価：\u003c/label\u003e\n  \u003cinput type=\"number\" id=\"ec-rate\" value=\"31\" min=\"1\" step=\"0.5\"\u003e\n  \u003cspan\u003e円/kWh \u0026nbsp;（検針票または電力会社のWebで確認できます）\u003c/span\u003e\n\u003c/div\u003e\n\u003ch2\u003e家電を追加する\u003c/h2\u003e\n\u003cdiv class=\"ec-presets\"\u003e\n  \u003cdiv class=\"ec-presets-title\"\u003eプリセットから追加\u003c/div\u003e\n  \u003cdiv class=\"ec-preset-grid\" id=\"ec-preset-grid\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ec-add-form\"\u003e\n  \u003cdiv class=\"ec-form-grid\"\u003e\n    \u003cdiv class=\"ec-form-group\"\u003e\n      \u003clabel for=\"ec-name\"\u003e家電名\u003c/label\u003e\n      \u003cinput type=\"text\" id=\"ec-name\" placeholder=\"例：リビングのエアコン\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ec-form-group\"\u003e\n      \u003clabel for=\"ec-watts\"\u003e消費電力（W）\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"ec-watts\" placeholder=\"例：900\" min=\"0\" step=\"1\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ec-form-group\"\u003e\n      \u003clabel for=\"ec-hours\"\u003e1日の使用時間\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"ec-hours\" placeholder=\"例：8\" min=\"0\" max=\"24\" step=\"0.5\"\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ec-form-group\"\u003e\n      \u003clabel for=\"ec-days\"\u003e1ヶ月の使用日数\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"ec-days\" placeholder=\"例：30\" min=\"1\" max=\"31\" step=\"1\" value=\"30\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"ec-add-btn\" onclick=\"ecAddAppliance()\"\u003e＋ 追加する\u003c/button\u003e\n\u003c/div\u003e\n\u003ch2\u003e登録した家電一覧\u003c/h2\u003e\n\u003cdiv class=\"ec-table-wrap\"\u003e\n  \u003ctable class=\"ec-table\"\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n        \u003cth\u003e家電名\u003c/th\u003e\n        \u003cth\u003e消費電力(W)\u003c/th\u003e\n        \u003cth\u003e時間/日\u003c/th\u003e\n        \u003cth\u003e日数/月\u003c/th\u003e\n        \u003cth\u003ekWh/月\u003c/th\u003e\n        \u003cth\u003e電気代/月\u003c/th\u003e\n        \u003cth\u003e電気代/年\u003c/th\u003e\n        \u003cth\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody id=\"ec-tbody\"\u003e\n      \u003ctr\u003e\u003ctd colspan=\"8\" class=\"ec-empty\"\u003e家電がまだ登録されていません。プリセットまたは手動で追加してください。\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ec-summary\" id=\"ec-summary\"\u003e\n  \u003cdiv class=\"ec-summary-card\"\u003e\n    \u003cdiv class=\"ec-card-label\"\u003e合計使用量（月）\u003c/div\u003e\n    \u003cdiv class=\"ec-card-value\" id=\"ec-total-kwh\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"ec-card-sub\"\u003ekWh / 月\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ec-summary-card green\"\u003e\n    \u003cdiv class=\"ec-card-label\"\u003e月の電気代（概算）\u003c/div\u003e\n    \u003cdiv class=\"ec-card-value\" id=\"ec-total-monthly\"\u003e¥0\u003c/div\u003e\n    \u003cdiv class=\"ec-card-sub\"\u003e月額合計\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ec-summary-card orange\"\u003e\n    \u003cdiv class=\"ec-card-label\"\u003e年間電気代（概算）\u003c/div\u003e\n    \u003cdiv class=\"ec-card-value\" id=\"ec-total-yearly\"\u003e¥0\u003c/div\u003e\n    \u003cdiv class=\"ec-card-sub\"\u003e年間合計\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003ch2\u003e家電別コスト内訳\u003c/h2\u003e\n\u003cdiv class=\"ec-chart-section\"\u003e\n  \u003ccanvas id=\"ec-pie\" width=\"260\" height=\"260\"\u003e\u003c/canvas\u003e\n  \u003cul class=\"ec-legend\" id=\"ec-legend\"\u003e\n    \u003cli style=\"color:#9ca3af\"\u003e家電を追加すると内訳が表示されます\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ec-tips\"\u003e\n  \u003ch3\u003e電気代を節約するためのコツ\u003c/h3\u003e\n  \u003cul\u003e\n    \u003cli\u003e\u003cstrong\u003eエアコンの設定温度を見直す\u003c/strong\u003e — 冷房は28℃、暖房は20℃を目安に。1℃変えるだけで約10%の節電効果があると言われています。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e冷蔵庫の設定を「中」に\u003c/strong\u003e — 季節に合わせて設定温度を調整。詰め込みすぎると効率が下がります。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e待機電力をカット\u003c/strong\u003e — テレビやゲーム機などの主電源をオフに。スマートタップを使うと便利です。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003eLED照明に切り替える\u003c/strong\u003e — 白熱電球と比べて約80%省エネ。寿命も40倍以上。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e洗濯は「まとめ洗い」\u003c/strong\u003e — 回数を減らすだけで水道代・電気代の両方を節約できます。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e電力自由化を活用\u003c/strong\u003e — 電力会社を比較・乗り換えで年間数千円〜1万円以上の節約ができる場合があります。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e太陽光発電の検討\u003c/strong\u003e — 初期費用はかかりますが、自家消費で電気代を大幅に削減できます。\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ec-cta\"\u003e\n  家計の経費管理を効率化 → \u003ca href=\"https://px.a8.net/svt/ejp?a8mat=4B3QAZ+7YYYCY+3SPO+9FHKUP\" target=\"_blank\" rel=\"noopener\"\u003efreee会計で家計簿を自動管理\u003c/a\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var COLORS = [\n    '#6366f1','#8b5cf6','#ec4899','#f59e0b','#10b981',\n    '#3b82f6','#ef4444','#14b8a6','#f97316','#84cc16',\n    '#06b6d4','#a855f7','#eab308','#22c55e','#e11d48'\n  ];\n\n  var PRESETS = [\n    { name: \"エアコン（冷房）\", watts: 900, hours: 8, days: 22 },\n    { name: \"エアコン（暖房）\", watts: 1000, hours: 6, days: 20 },\n    { name: \"冷蔵庫\", watts: 40, hours: 24, days: 30 },\n    { name: \"テレビ（50型）\", watts: 100, hours: 4, days: 30 },\n    { name: \"洗濯機\", watts: 500, hours: 1, days: 15 },\n    { name: \"乾燥機\", watts: 1200, hours: 1, days: 12 },\n    { name: \"電子レンジ\", watts: 1000, hours: 0.25, days: 30 },\n    { name: \"炊飯器\", watts: 900, hours: 0.5, days: 30 },\n    { name: \"食洗機\", watts: 1000, hours: 1, days: 20 },\n    { name: \"デスクトップPC\", watts: 200, hours: 8, days: 22 },\n    { name: \"ノートPC\", watts: 45, hours: 8, days: 22 },\n    { name: \"LED照明（1灯）\", watts: 10, hours: 5, days: 30 },\n    { name: \"電気ケトル\", watts: 1300, hours: 0.1, days: 30 },\n    { name: \"温水洗浄便座\", watts: 25, hours: 24, days: 30 },\n    { name: \"電気温水器\", watts: 3000, hours: 2, days: 30 }\n  ];\n\n  var appliances = [];\n\n  function init() {\n    var grid = document.getElementById('ec-preset-grid');\n    PRESETS.forEach(function(p) {\n      var btn = document.createElement('button');\n      btn.className = 'ec-preset-btn';\n      btn.textContent = p.name;\n      btn.onclick = function() { ecFillPreset(p); };\n      grid.appendChild(btn);\n    });\n    render();\n  }\n\n  window.ecFillPreset = function(p) {\n    document.getElementById('ec-name').value = p.name;\n    document.getElementById('ec-watts').value = p.watts;\n    document.getElementById('ec-hours').value = p.hours;\n    document.getElementById('ec-days').value = p.days;\n  };\n\n  window.ecAddAppliance = function() {\n    var name = document.getElementById('ec-name').value.trim();\n    var watts = parseFloat(document.getElementById('ec-watts').value);\n    var hours = parseFloat(document.getElementById('ec-hours').value);\n    var days = parseFloat(document.getElementById('ec-days').value);\n    if (!name) { alert('家電名を入力してください。'); return; }\n    if (isNaN(watts) || watts \u003c 0) { alert('消費電力を正しく入力してください。'); return; }\n    if (isNaN(hours) || hours \u003c 0) { alert('使用時間を正しく入力してください。'); return; }\n    if (isNaN(days) || days \u003c 1) { alert('使用日数を正しく入力してください。'); return; }\n    appliances.push({ name: name, watts: watts, hours: hours, days: days, color: COLORS[appliances.length % COLORS.length] });\n    document.getElementById('ec-name').value = '';\n    document.getElementById('ec-watts').value = '';\n    document.getElementById('ec-hours').value = '';\n    document.getElementById('ec-days').value = '30';\n    render();\n  };\n\n  window.ecRemove = function(i) {\n    appliances.splice(i, 1);\n    appliances.forEach(function(a, idx) { a.color = COLORS[idx % COLORS.length]; });\n    render();\n  };\n\n  function getRate() {\n    return parseFloat(document.getElementById('ec-rate').value) || 31;\n  }\n\n  function calcKwh(a) {\n    return (a.watts / 1000) * a.hours * a.days;\n  }\n\n  function fmtJpy(n) { return '¥' + Math.round(n).toLocaleString('ja-JP'); }\n\n  function render() {\n    var rate = getRate();\n    var tbody = document.getElementById('ec-tbody');\n\n    if (appliances.length === 0) {\n      tbody.innerHTML = '\u003ctr\u003e\u003ctd colspan=\"8\" class=\"ec-empty\"\u003e家電がまだ登録されていません。プリセットまたは手動で追加してください。\u003c/td\u003e\u003c/tr\u003e';\n      document.getElementById('ec-total-kwh').textContent = '0';\n      document.getElementById('ec-total-monthly').textContent = '¥0';\n      document.getElementById('ec-total-yearly').textContent = '¥0';\n      document.getElementById('ec-legend').innerHTML = '\u003cli style=\"color:#9ca3af\"\u003e家電を追加すると内訳が表示されます\u003c/li\u003e';\n      drawPie([]);\n      return;\n    }\n\n    var totalKwh = 0, totalMonth = 0;\n    var rows = appliances.map(function(a, i) {\n      var kwh = calcKwh(a);\n      var costM = kwh * rate;\n      var costY = costM * 12;\n      totalKwh += kwh;\n      totalMonth += costM;\n      return '\u003ctr\u003e' +\n        '\u003ctd\u003e\u003cspan class=\"ec-color-dot\" style=\"background:' + a.color + '\"\u003e\u003c/span\u003e' + escHtml(a.name) + '\u003c/td\u003e' +\n        '\u003ctd\u003e' + a.watts + 'W\u003c/td\u003e' +\n        '\u003ctd\u003e' + a.hours + 'h\u003c/td\u003e' +\n        '\u003ctd\u003e' + a.days + '日\u003c/td\u003e' +\n        '\u003ctd\u003e' + kwh.toFixed(1) + '\u003c/td\u003e' +\n        '\u003ctd\u003e' + fmtJpy(costM) + '\u003c/td\u003e' +\n        '\u003ctd\u003e' + fmtJpy(costY) + '\u003c/td\u003e' +\n        '\u003ctd\u003e\u003cbutton class=\"ec-del-btn\" onclick=\"ecRemove(' + i + ')\" title=\"削除\"\u003e\u0026#10005;\u003c/button\u003e\u003c/td\u003e' +\n        '\u003c/tr\u003e';\n    });\n\n    tbody.innerHTML = rows.join('');\n    document.getElementById('ec-total-kwh').textContent = totalKwh.toFixed(1);\n    document.getElementById('ec-total-monthly').textContent = fmtJpy(totalMonth);\n    document.getElementById('ec-total-yearly').textContent = fmtJpy(totalMonth * 12);\n\n    var legend = document.getElementById('ec-legend');\n    legend.innerHTML = appliances.map(function(a) {\n      var kwh = calcKwh(a);\n      var pct = totalKwh \u003e 0 ? (kwh / totalKwh * 100).toFixed(1) : '0.0';\n      return '\u003cli\u003e' +\n        '\u003cspan class=\"ec-legend-dot\" style=\"background:' + a.color + '\"\u003e\u003c/span\u003e' +\n        escHtml(a.name) +\n        '\u003cspan class=\"ec-legend-pct\"\u003e' + pct + '%\u003c/span\u003e' +\n        '\u003c/li\u003e';\n    }).join('');\n\n    drawPie(appliances.map(function(a) { return { label: a.name, value: calcKwh(a), color: a.color }; }));\n  }\n\n  function drawPie(data) {\n    var canvas = document.getElementById('ec-pie');\n    var ctx = canvas.getContext('2d');\n    var W = canvas.width, H = canvas.height;\n    ctx.clearRect(0, 0, W, H);\n\n    var total = data.reduce(function(s, d) { return s + d.value; }, 0);\n    if (total === 0 || data.length === 0) {\n      ctx.beginPath();\n      ctx.arc(W/2, H/2, W/2 - 10, 0, Math.PI*2);\n      ctx.fillStyle = '#f3f4f6';\n      ctx.fill();\n      ctx.fillStyle = '#9ca3af';\n      ctx.font = '13px sans-serif';\n      ctx.textAlign = 'center';\n      ctx.fillText('データなし', W/2, H/2 + 5);\n      return;\n    }\n\n    var startAngle = -Math.PI / 2;\n    var cx = W/2, cy = H/2, r = W/2 - 10;\n    data.forEach(function(d) {\n      var slice = (d.value / total) * Math.PI * 2;\n      ctx.beginPath();\n      ctx.moveTo(cx, cy);\n      ctx.arc(cx, cy, r, startAngle, startAngle + slice);\n      ctx.closePath();\n      ctx.fillStyle = d.color;\n      ctx.fill();\n      ctx.strokeStyle = '#fff';\n      ctx.lineWidth = 2;\n      ctx.stroke();\n      startAngle += slice;\n    });\n\n    ctx.beginPath();\n    ctx.arc(cx, cy, r * 0.42, 0, Math.PI*2);\n    ctx.fillStyle = '#fff';\n    ctx.fill();\n    ctx.fillStyle = '#374151';\n    ctx.font = 'bold 12px sans-serif';\n    ctx.textAlign = 'center';\n    ctx.fillText('月間kWh', cx, cy - 6);\n    ctx.font = 'bold 16px sans-serif';\n    ctx.fillStyle = '#4f46e5';\n    var totalKwh = data.reduce(function(s,d){return s+d.value;},0);\n    ctx.fillText(totalKwh.toFixed(1), cx, cy + 14);\n  }\n\n  function escHtml(s) {\n    return s.replace(/\u0026/g,'\u0026amp;').replace(/\u003c/g,'\u0026lt;').replace(/\u003e/g,'\u0026gt;').replace(/\"/g,'\u0026quot;');\n  }\n\n  document.getElementById('ec-rate').addEventListener('input', render);\n\n  init();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003eCO2排出量計算 → \u003ca href=\"https://productivity-works.com/ja/tools/carbon-footprint-calculator/\"\u003eCO2排出量計算ツール\u003c/a\u003e\n\n料理単位変換 → \u003ca href=\"https://productivity-works.com/ja/tools/cooking-unit-converter/\"\u003e料理単位変換ツール\u003c/a\u003e\n\nFuel Cost Calculator → \u003ca href=\"https://productivity-works.com/ja/tools/fuel-cost-calculator/\"\u003eFuel Cost Calculatorツール\u003c/a\u003e\n\u003c/p\u003e","title":"電気代計算シミュレーター - 家電ごとの電気代を簡単計算"},{"content":" 長さ 重さ 温度 体積 面積 速度 時間 データ 変換元 \u0026#8646; 変換先 変換結果 --- ※ 温度の変換は線形ではないため、オフセットを考慮した計算を行います。 よく使う換算早見表 単位変換ツールの使い方 簡単3ステップ カテゴリを選ぶ — 長さ・重さ・温度・体積・面積・速度・時間・データから選択します。 数値と単位を入力 — 変換元の数値を入力し、変換元・変換先の単位をドロップダウンから選びます。 結果を確認 — リアルタイムで変換結果が表示されます。スワップボタン（⇆）で入出力を入れ替えられます。 機能のポイント 双方向変換 — スワップボタンで変換元と変換先を即座に入れ替えられます。 変換式の表示 — 計算の根拠となる変換式を確認できます。 早見表 — よく使う換算をワンクリックで即座に入力できます。 日本の伝統単位対応 — 尺・寸・間・里・匁・貫・坪・畳・反・町などの日本独自の単位に対応しています。 よく使う単位換算 長さの換算 単位 メートル換算 用途 1インチ 2.54 cm 画面サイズ、身長(英米) 1フィート 30.48 cm 身長、建築(英米) 1マイル 1.609 km 道路距離(英米) 1尺 約30.3 cm 日本の伝統建築 1間 約1.818 m 部屋の広さ 1里 約3.927 km 昔の道のり 重さの換算 単位 キログラム換算 用途 1ポンド (lb) 約0.454 kg 食品表示(英米) 1オンス (oz) 約28.35 g 食品・金属 1貫 3.75 kg 日本の伝統単位 1匁 3.75 g 宝石・貴金属 面積の換算 単位 平方メートル換算 用途 1坪 約3.306 m² 不動産 1畳 約1.653 m² 部屋の広さ 1反 約991.7 m² 農地 1エーカー 約4047 m² 英米の農地・土地 1ヘクタール 10,000 m² 農地・公園 温度の換算 摂氏 (°C) 華氏 (°F) 場面 0°C 32°F 氷点 20°C 68°F 室温 37°C 98.6°F 体温 100°C 212°F 沸点 関連ツール 割合・割引・変化率をすぐ計算 → パーセント計算ツール BMIと適正体重をチェック → BMI計算ツール 時給と年収を相互変換 → 時給換算ツール 不動産の面積計算・海外取引の単位換算に\n不動産投資や海外ビジネスで必要な単位換算。経費管理もクラウド会計ソフト「freee」で効率化しませんか？\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/unit-converter/","summary":"\u003cdiv id=\"converter-app\"\u003e\n\u003cstyle\u003e\n#converter-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Kaku Gothic ProN', 'Noto Sans JP', sans-serif;\n  max-width: 800px;\n  margin: 0 auto;\n  padding: 16px;\n  color: #1e293b;\n  box-sizing: border-box;\n}\n#converter-app * { box-sizing: border-box; }\n\n/* タブ */\n.cv-tabs {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n  margin-bottom: 20px;\n}\n.cv-tab {\n  padding: 7px 14px;\n  border: 2px solid #0891b2;\n  border-radius: 20px;\n  background: #fff;\n  color: #0891b2;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.18s;\n}\n.cv-tab:hover { background: #e0f7fa; }\n.cv-tab.active { background: #0891b2; color: #fff; }\n\n/* メインカード */\n.cv-card {\n  background: #f0f9ff;\n  border: 1px solid #bae6fd;\n  border-radius: 14px;\n  padding: 24px;\n  margin-bottom: 20px;\n}\n\n/* 入力エリア */\n.cv-row {\n  display: flex;\n  align-items: flex-end;\n  gap: 10px;\n  margin-bottom: 14px;\n}\n.cv-field {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n.cv-field label {\n  font-size: 12px;\n  font-weight: 700;\n  color: #0e7490;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n.cv-field input[type=\"number\"] {\n  width: 100%;\n  padding: 11px 14px;\n  border: 2px solid #7dd3fc;\n  border-radius: 8px;\n  font-size: 20px;\n  font-weight: 700;\n  color: #0c4a6e;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.2s;\n}\n.cv-field input[type=\"number\"]:focus { border-color: #0891b2; }\n.cv-field select {\n  width: 100%;\n  padding: 9px 12px;\n  border: 2px solid #7dd3fc;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 600;\n  color: #0c4a6e;\n  background: #fff;\n  outline: none;\n  cursor: pointer;\n  transition: border-color 0.2s;\n}\n.cv-field select:focus { border-color: #0891b2; }\n\n/* スワップボタン */\n.cv-swap {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 4px;\n  flex-shrink: 0;\n}\n.cv-swap button {\n  width: 44px;\n  height: 44px;\n  border-radius: 50%;\n  border: 2px solid #0891b2;\n  background: #fff;\n  color: #0891b2;\n  font-size: 20px;\n  cursor: pointer;\n  transition: all 0.18s;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n.cv-swap button:hover { background: #0891b2; color: #fff; }\n\n/* 結果 */\n.cv-result-box {\n  background: #fff;\n  border: 2px solid #0891b2;\n  border-radius: 10px;\n  padding: 14px 18px;\n  margin-top: 10px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 12px;\n  flex-wrap: wrap;\n}\n.cv-result-value {\n  font-size: 26px;\n  font-weight: 800;\n  color: #0891b2;\n}\n.cv-result-label {\n  font-size: 13px;\n  color: #64748b;\n}\n.cv-formula {\n  font-size: 12px;\n  color: #94a3b8;\n  background: #f8fafc;\n  border-radius: 6px;\n  padding: 6px 10px;\n  margin-top: 8px;\n  font-family: monospace;\n}\n\n/* 早見表 */\n.cv-quick-title {\n  font-size: 14px;\n  font-weight: 700;\n  color: #0e7490;\n  margin-bottom: 10px;\n  margin-top: 4px;\n}\n.cv-quick-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n  gap: 8px;\n}\n.cv-quick-item {\n  background: #fff;\n  border: 1px solid #bae6fd;\n  border-radius: 8px;\n  padding: 8px 12px;\n  font-size: 12px;\n  color: #334155;\n  line-height: 1.5;\n  cursor: pointer;\n  transition: background 0.15s;\n}\n.cv-quick-item:hover { background: #e0f7fa; }\n.cv-quick-item strong { color: #0891b2; display: block; }\n\n/* 温度特別 */\n.cv-temp-note {\n  font-size: 12px;\n  color: #64748b;\n  margin-top: 6px;\n  padding: 6px 10px;\n  background: #fef9c3;\n  border-radius: 6px;\n}\n\n@media (max-width: 520px) {\n  .cv-row { flex-direction: column; }\n  .cv-swap { flex-direction: row; justify-content: center; margin: 4px 0; }\n  .cv-swap button { width: 40px; height: 40px; font-size: 18px; }\n  .cv-result-value { font-size: 22px; }\n  .cv-tab { font-size: 12px; padding: 6px 11px; }\n}\n\u003c/style\u003e\n\u003c!-- タブ --\u003e\n\u003cdiv class=\"cv-tabs\" id=\"cvTabs\"\u003e\n  \u003cbutton class=\"cv-tab active\" data-cat=\"length\"\u003e長さ\u003c/button\u003e\n  \u003cbutton class=\"cv-tab\" data-cat=\"weight\"\u003e重さ\u003c/button\u003e\n  \u003cbutton class=\"cv-tab\" data-cat=\"temperature\"\u003e温度\u003c/button\u003e\n  \u003cbutton class=\"cv-tab\" data-cat=\"volume\"\u003e体積\u003c/button\u003e\n  \u003cbutton class=\"cv-tab\" data-cat=\"area\"\u003e面積\u003c/button\u003e\n  \u003cbutton class=\"cv-tab\" data-cat=\"speed\"\u003e速度\u003c/button\u003e\n  \u003cbutton class=\"cv-tab\" data-cat=\"time\"\u003e時間\u003c/button\u003e\n  \u003cbutton class=\"cv-tab\" data-cat=\"data\"\u003eデータ\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- 変換カード --\u003e\n\u003cdiv class=\"cv-card\"\u003e\n  \u003cdiv class=\"cv-row\"\u003e\n    \u003cdiv class=\"cv-field\"\u003e\n      \u003clabel\u003e変換元\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"cvInput\" value=\"1\" step=\"any\" /\u003e\n      \u003cselect id=\"cvFromUnit\"\u003e\u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cv-swap\"\u003e\n      \u003cbutton id=\"cvSwapBtn\" title=\"入れ替え\"\u003e\u0026#8646;\u003c/button\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cv-field\"\u003e\n      \u003clabel\u003e変換先\u003c/label\u003e\n      \u003cinput type=\"number\" id=\"cvOutput\" step=\"any\" readonly style=\"background:#f0f9ff;color:#0891b2;\" /\u003e\n      \u003cselect id=\"cvToUnit\"\u003e\u003c/select\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cv-result-box\"\u003e\n    \u003cdiv\u003e\n      \u003cdiv class=\"cv-result-label\"\u003e変換結果\u003c/div\u003e\n      \u003cdiv class=\"cv-result-value\" id=\"cvResultText\"\u003e---\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv id=\"cvFormulaBox\" class=\"cv-formula\" style=\"text-align:right;\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"cvTempNote\" class=\"cv-temp-note\" style=\"display:none;\"\u003e\n    ※ 温度の変換は線形ではないため、オフセットを考慮した計算を行います。\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 早見表 --\u003e\n\u003cdiv class=\"cv-card\" style=\"background:#fff;\"\u003e\n  \u003cdiv class=\"cv-quick-title\" id=\"cvQuickTitle\"\u003eよく使う換算早見表\u003c/div\u003e\n  \u003cdiv class=\"cv-quick-grid\" id=\"cvQuickGrid\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  // ===== 単位定義 =====\n  // 各カテゴリの基準単位へのファクター (温度は別処理)\n  const UNITS = {\n    length: {\n      label: '長さ',\n      base: 'm',\n      units: [\n        { key: 'mm',   label: 'ミリメートル (mm)',  factor: 0.001 },\n        { key: 'cm',   label: 'センチメートル (cm)', factor: 0.01 },\n        { key: 'm',    label: 'メートル (m)',         factor: 1 },\n        { key: 'km',   label: 'キロメートル (km)',    factor: 1000 },\n        { key: 'sun',  label: '寸',                   factor: 0.030303 },\n        { key: 'shaku',label: '尺',                   factor: 0.303030 },\n        { key: 'ken',  label: '間',                   factor: 1.818182 },\n        { key: 'ri',   label: '里',                   factor: 3927.272 },\n        { key: 'inch', label: 'インチ (in)',           factor: 0.0254 },\n        { key: 'ft',   label: 'フィート (ft)',         factor: 0.3048 },\n        { key: 'yd',   label: 'ヤード (yd)',           factor: 0.9144 },\n        { key: 'mi',   label: 'マイル (mi)',           factor: 1609.344 },\n        { key: 'nmi',  label: '海里 (nmi)',            factor: 1852 },\n      ],\n      quick: [\n        { from: 1, fu: 'm',    to: 'ft',   label: '1メートル = 約3.281フィート' },\n        { from: 1, fu: 'km',   to: 'mi',   label: '1キロ = 約0.621マイル' },\n        { from: 1, fu: 'inch', to: 'cm',   label: '1インチ = 2.54センチ' },\n        { from: 1, fu: 'shaku',to: 'cm',   label: '1尺 = 約30.3センチ' },\n        { from: 1, fu: 'ken',  to: 'm',    label: '1間 = 約1.818メートル' },\n        { from: 1, fu: 'ri',   to: 'km',   label: '1里 = 約3.927キロ' },\n        { from: 1, fu: 'mi',   to: 'km',   label: '1マイル = 約1.609キロ' },\n        { from: 1, fu: 'ft',   to: 'cm',   label: '1フィート = 30.48センチ' },\n      ]\n    },\n    weight: {\n      label: '重さ',\n      base: 'kg',\n      units: [\n        { key: 'mg',  label: 'ミリグラム (mg)',  factor: 0.000001 },\n        { key: 'g',   label: 'グラム (g)',         factor: 0.001 },\n        { key: 'kg',  label: 'キログラム (kg)',    factor: 1 },\n        { key: 't',   label: 'トン (t)',           factor: 1000 },\n        { key: 'mom', label: '匁 (もんめ)',        factor: 0.00375 },\n        { key: 'kan', label: '貫 (かん)',          factor: 3.75 },\n        { key: 'oz',  label: 'オンス (oz)',        factor: 0.0283495 },\n        { key: 'lb',  label: 'ポンド (lb)',        factor: 0.453592 },\n        { key: 'st',  label: 'ストーン (st)',      factor: 6.35029 },\n      ],\n      quick: [\n        { from: 1, fu: 'kg',  to: 'lb',  label: '1キログラム = 約2.205ポンド' },\n        { from: 1, fu: 'lb',  to: 'kg',  label: '1ポンド = 約0.454キログラム' },\n        { from: 1, fu: 'oz',  to: 'g',   label: '1オンス = 約28.35グラム' },\n        { from: 1, fu: 'kan', to: 'kg',  label: '1貫 = 3.75キログラム' },\n        { from: 1, fu: 'mom', to: 'g',   label: '1匁 = 3.75グラム' },\n        { from: 60, fu: 'kg', to: 'lb',  label: '60kg = 約132.3ポンド' },\n      ]\n    },\n    temperature: {\n      label: '温度',\n      base: 'C',\n      isTemp: true,\n      units: [\n        { key: 'C', label: '摂氏 (°C)' },\n        { key: 'F', label: '華氏 (°F)' },\n        { key: 'K', label: 'ケルビン (K)' },\n      ],\n      quick: [\n        { from: 0,   fu: 'C', to: 'F', label: '0°C = 32°F (氷点)' },\n        { from: 100, fu: 'C', to: 'F', label: '100°C = 212°F (沸点)' },\n        { from: 37,  fu: 'C', to: 'F', label: '37°C = 98.6°F (体温)' },\n        { from: 20,  fu: 'C', to: 'F', label: '20°C = 68°F (室温)' },\n        { from: -40, fu: 'C', to: 'F', label: '-40°C = -40°F (同じ値)' },\n        { from: 0,   fu: 'C', to: 'K', label: '0°C = 273.15K' },\n      ]\n    },\n    volume: {\n      label: '体積',\n      base: 'L',\n      units: [\n        { key: 'mL',  label: 'ミリリットル (mL)',   factor: 0.001 },\n        { key: 'cL',  label: 'センチリットル (cL)', factor: 0.01 },\n        { key: 'dL',  label: 'デシリットル (dL)',   factor: 0.1 },\n        { key: 'L',   label: 'リットル (L)',         factor: 1 },\n        { key: 'kL',  label: 'キロリットル (kL)',   factor: 1000 },\n        { key: 'm3',  label: '立方メートル (m³)',   factor: 1000 },\n        { key: 'cm3', label: '立方センチ (cm³)',    factor: 0.001 },\n        { key: 'tsp', label: 'ティースプーン (tsp)',factor: 0.004929 },\n        { key: 'tbsp',label: 'テーブルスプーン',    factor: 0.014787 },\n        { key: 'floz',label: '液量オンス (fl oz)',  factor: 0.029574 },\n        { key: 'cup', label: 'カップ (米)',          factor: 0.236588 },\n        { key: 'pt',  label: 'パイント (pt)',        factor: 0.473176 },\n        { key: 'qt',  label: 'クォート (qt)',        factor: 0.946353 },\n        { key: 'gal', label: 'ガロン (gal)',         factor: 3.785411 },\n      ],\n      quick: [\n        { from: 1, fu: 'L',   to: 'gal',  label: '1リットル = 約0.264ガロン' },\n        { from: 1, fu: 'gal', to: 'L',    label: '1ガロン = 約3.785リットル' },\n        { from: 1, fu: 'cup', to: 'mL',   label: '1カップ = 約237mL' },\n        { from: 1, fu: 'floz',to: 'mL',   label: '1液量オンス = 約29.6mL' },\n        { from: 1, fu: 'pt',  to: 'mL',   label: '1パイント = 約473mL' },\n      ]\n    },\n    area: {\n      label: '面積',\n      base: 'm2',\n      units: [\n        { key: 'mm2',  label: '平方ミリ (mm²)',     factor: 0.000001 },\n        { key: 'cm2',  label: '平方センチ (cm²)',   factor: 0.0001 },\n        { key: 'm2',   label: '平方メートル (m²)',  factor: 1 },\n        { key: 'km2',  label: '平方キロ (km²)',     factor: 1000000 },\n        { key: 'tsubo',label: '坪',                  factor: 3.305785 },\n        { key: 'jo',   label: '畳',                  factor: 1.6528 },\n        { key: 'tan',  label: '反',                  factor: 991.7355 },\n        { key: 'cho',  label: '町',                  factor: 9917.355 },\n        { key: 'acre', label: 'エーカー (acre)',     factor: 4046.856 },\n        { key: 'ha',   label: 'ヘクタール (ha)',     factor: 10000 },\n        { key: 'sqft', label: '平方フィート (ft²)', factor: 0.092903 },\n        { key: 'sqyd', label: '平方ヤード (yd²)',   factor: 0.836127 },\n        { key: 'sqmi', label: '平方マイル (mi²)',   factor: 2589988.1 },\n      ],\n      quick: [\n        { from: 1,   fu: 'tsubo', to: 'm2',   label: '1坪 = 約3.306平方メートル' },\n        { from: 1,   fu: 'jo',    to: 'm2',   label: '1畳 = 約1.653平方メートル' },\n        { from: 1,   fu: 'tan',   to: 'm2',   label: '1反 = 約991.7平方メートル' },\n        { from: 1,   fu: 'cho',   to: 'm2',   label: '1町 = 約9917平方メートル' },\n        { from: 1,   fu: 'ha',    to: 'tsubo',label: '1ヘクタール = 約3025坪' },\n        { from: 1,   fu: 'acre',  to: 'm2',   label: '1エーカー = 約4047平方メートル' },\n        { from: 100, fu: 'm2',    to: 'tsubo',label: '100m² = 約30.25坪' },\n        { from: 1,   fu: 'sqft',  to: 'm2',   label: '1平方フィート = 約0.093m²' },\n      ]\n    },\n    speed: {\n      label: '速度',\n      base: 'mps',\n      units: [\n        { key: 'mps',  label: 'メートル毎秒 (m/s)',     factor: 1 },\n        { key: 'kmph', label: 'キロメートル毎時 (km/h)', factor: 0.277778 },\n        { key: 'mph',  label: 'マイル毎時 (mph)',         factor: 0.44704 },\n        { key: 'knot', label: 'ノット (knot)',             factor: 0.514444 },\n        { key: 'mach', label: 'マッハ (Mach)',             factor: 340.29 },\n        { key: 'fps',  label: 'フィート毎秒 (ft/s)',      factor: 0.3048 },\n      ],\n      quick: [\n        { from: 100, fu: 'kmph', to: 'mph',  label: '100km/h = 約62.1mph' },\n        { from: 1,   fu: 'mach', to: 'kmph', label: '音速 = 約1225km/h' },\n        { from: 1,   fu: 'knot', to: 'kmph', label: '1ノット = 約1.852km/h' },\n        { from: 60,  fu: 'kmph', to: 'mps',  label: '60km/h = 約16.7m/s' },\n      ]\n    },\n    time: {\n      label: '時間',\n      base: 's',\n      units: [\n        { key: 'ns',  label: 'ナノ秒 (ns)',    factor: 0.000000001 },\n        { key: 'us',  label: 'マイクロ秒 (μs)',factor: 0.000001 },\n        { key: 'ms',  label: 'ミリ秒 (ms)',    factor: 0.001 },\n        { key: 's',   label: '秒 (s)',          factor: 1 },\n        { key: 'min', label: '分 (min)',        factor: 60 },\n        { key: 'hr',  label: '時間 (hr)',       factor: 3600 },\n        { key: 'day', label: '日',              factor: 86400 },\n        { key: 'wk',  label: '週',             factor: 604800 },\n        { key: 'mo',  label: 'ヶ月 (30日)',    factor: 2592000 },\n        { key: 'yr',  label: '年 (365日)',      factor: 31536000 },\n      ],\n      quick: [\n        { from: 1,  fu: 'hr',  to: 'min', label: '1時間 = 60分' },\n        { from: 1,  fu: 'day', to: 'hr',  label: '1日 = 24時間' },\n        { from: 1,  fu: 'wk',  to: 'day', label: '1週間 = 7日' },\n        { from: 1,  fu: 'yr',  to: 'day', label: '1年 = 365日' },\n        { from: 1,  fu: 'mo',  to: 'day', label: '1ヶ月 = 30日' },\n        { from: 90, fu: 'min', to: 'hr',  label: '90分 = 1.5時間' },\n      ]\n    },\n    data: {\n      label: 'データ',\n      base: 'B',\n      units: [\n        { key: 'bit', label: 'ビット (bit)',         factor: 0.125 },\n        { key: 'B',   label: 'バイト (B)',            factor: 1 },\n        { key: 'KB',  label: 'キロバイト (KB)',       factor: 1024 },\n        { key: 'MB',  label: 'メガバイト (MB)',       factor: 1048576 },\n        { key: 'GB',  label: 'ギガバイト (GB)',       factor: 1073741824 },\n        { key: 'TB',  label: 'テラバイト (TB)',       factor: 1099511627776 },\n        { key: 'PB',  label: 'ペタバイト (PB)',       factor: 1.12589990684e15 },\n        { key: 'Kbit',label: 'キロビット (Kbit)',     factor: 125 },\n        { key: 'Mbit',label: 'メガビット (Mbit)',     factor: 125000 },\n        { key: 'Gbit',label: 'ギガビット (Gbit)',     factor: 125000000 },\n      ],\n      quick: [\n        { from: 1,    fu: 'GB', to: 'MB',  label: '1GB = 1024MB' },\n        { from: 1,    fu: 'TB', to: 'GB',  label: '1TB = 1024GB' },\n        { from: 1,    fu: 'MB', to: 'KB',  label: '1MB = 1024KB' },\n        { from: 100,  fu: 'MB', to: 'GB',  label: '100MB = 約0.098GB' },\n        { from: 1,    fu: 'Gbit',to: 'MB', label: '1Gbps = 125MB/s' },\n      ]\n    }\n  };\n\n  // 温度変換\n  function convertTemp(val, from, to) {\n    let celsius;\n    if (from === 'C') celsius = val;\n    else if (from === 'F') celsius = (val - 32) * 5/9;\n    else if (from === 'K') celsius = val - 273.15;\n    if (to === 'C') return celsius;\n    if (to === 'F') return celsius * 9/5 + 32;\n    if (to === 'K') return celsius + 273.15;\n  }\n\n  function tempFormula(from, to) {\n    const f = {\n      C_F: '°F = °C × 9/5 + 32',\n      F_C: '°C = (°F - 32) × 5/9',\n      C_K: 'K = °C + 273.15',\n      K_C: '°C = K - 273.15',\n      F_K: 'K = (°F - 32) × 5/9 + 273.15',\n      K_F: '°F = (K - 273.15) × 9/5 + 32',\n    };\n    return f[from+'_'+to] || '';\n  }\n\n  // 汎用変換\n  function convertValue(val, from, to, cat) {\n    if (cat.isTemp) return convertTemp(val, from, to);\n    const fu = cat.units.find(u =\u003e u.key === from);\n    const tu = cat.units.find(u =\u003e u.key === to);\n    if (!fu || !tu) return 0;\n    return val * fu.factor / tu.factor;\n  }\n\n  function formatNum(n) {\n    if (n === null || isNaN(n)) return '---';\n    if (Math.abs(n) \u003c 0.0001 \u0026\u0026 n !== 0) return n.toExponential(4);\n    if (Math.abs(n) \u003e= 1e10) return n.toExponential(4);\n    // 有効桁数に応じて\n    const s = parseFloat(n.toPrecision(7)).toString();\n    return s;\n  }\n\n  function getFormula(val, from, to, cat) {\n    if (cat.isTemp) return tempFormula(from, to);\n    const fu = cat.units.find(u =\u003e u.key === from);\n    const tu = cat.units.find(u =\u003e u.key === to);\n    if (!fu || !tu || from === to) return '';\n    const ratio = fu.factor / tu.factor;\n    const ratioStr = parseFloat(ratio.toPrecision(6));\n    return `1 ${from} = ${ratioStr} ${to}`;\n  }\n\n  // ===== UI =====\n  let currentCat = 'length';\n\n  const tabs     = document.querySelectorAll('.cv-tab');\n  const inputEl  = document.getElementById('cvInput');\n  const outputEl = document.getElementById('cvOutput');\n  const fromSel  = document.getElementById('cvFromUnit');\n  const toSel    = document.getElementById('cvToUnit');\n  const resultEl = document.getElementById('cvResultText');\n  const formulaEl= document.getElementById('cvFormulaBox');\n  const quickGrid= document.getElementById('cvQuickGrid');\n  const quickTitle=document.getElementById('cvQuickTitle');\n  const swapBtn  = document.getElementById('cvSwapBtn');\n  const tempNote = document.getElementById('cvTempNote');\n\n  function buildSelects(cat) {\n    const units = UNITS[cat].units;\n    [fromSel, toSel].forEach((sel, idx) =\u003e {\n      sel.innerHTML = '';\n      units.forEach(u =\u003e {\n        const opt = document.createElement('option');\n        opt.value = u.key;\n        opt.textContent = u.label;\n        sel.appendChild(opt);\n      });\n      // デフォルト: from=0, to=1\n      sel.selectedIndex = idx === 0 ? 0 : Math.min(1, units.length - 1);\n    });\n  }\n\n  function buildQuick(cat) {\n    const catDef = UNITS[cat];\n    quickTitle.textContent = `${catDef.label}のよく使う換算早見表`;\n    quickGrid.innerHTML = '';\n    catDef.quick.forEach(q =\u003e {\n      const item = document.createElement('div');\n      item.className = 'cv-quick-item';\n      const result = convertValue(q.from, q.fu, q.to, catDef);\n      item.innerHTML = `\u003cstrong\u003e${q.label}\u003c/strong\u003e\u003cspan style=\"color:#64748b;font-size:11px;\"\u003eクリックで使用\u003c/span\u003e`;\n      item.addEventListener('click', () =\u003e {\n        inputEl.value = q.from;\n        fromSel.value = q.fu;\n        toSel.value = q.to;\n        doConvert();\n      });\n      quickGrid.appendChild(item);\n    });\n  }\n\n  function doConvert() {\n    const val = parseFloat(inputEl.value);\n    const from = fromSel.value;\n    const to   = toSel.value;\n    const catDef = UNITS[currentCat];\n    if (isNaN(val)) {\n      outputEl.value = '';\n      resultEl.textContent = '---';\n      formulaEl.textContent = '';\n      return;\n    }\n    const result = convertValue(val, from, to, catDef);\n    const fromLabel = catDef.units.find(u =\u003e u.key === from)?.label || from;\n    const toLabel   = catDef.units.find(u =\u003e u.key === to)?.label || to;\n    outputEl.value = formatNum(result);\n    resultEl.textContent = `${formatNum(val)} ${from} = ${formatNum(result)} ${to}`;\n    formulaEl.textContent = getFormula(val, from, to, catDef);\n    tempNote.style.display = catDef.isTemp ? 'block' : 'none';\n  }\n\n  function switchCat(cat) {\n    currentCat = cat;\n    tabs.forEach(t =\u003e t.classList.toggle('active', t.dataset.cat === cat));\n    buildSelects(cat);\n    buildQuick(cat);\n    doConvert();\n  }\n\n  tabs.forEach(t =\u003e {\n    t.addEventListener('click', () =\u003e switchCat(t.dataset.cat));\n  });\n\n  inputEl.addEventListener('input', doConvert);\n  fromSel.addEventListener('change', doConvert);\n  toSel.addEventListener('change', doConvert);\n\n  swapBtn.addEventListener('click', () =\u003e {\n    const tmp = fromSel.value;\n    fromSel.value = toSel.value;\n    toSel.value = tmp;\n    const tmpVal = inputEl.value;\n    inputEl.value = outputEl.value;\n    doConvert();\n  });\n\n  // 初期化\n  switchCat('length');\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"単位変換ツールの使い方\"\u003e単位変換ツールの使い方\u003c/h2\u003e\n\u003ch3 id=\"簡単3ステップ\"\u003e簡単3ステップ\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eカテゴリを選ぶ\u003c/strong\u003e — 長さ・重さ・温度・体積・面積・速度・時間・データから選択します。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e数値と単位を入力\u003c/strong\u003e — 変換元の数値を入力し、変換元・変換先の単位をドロップダウンから選びます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e結果を確認\u003c/strong\u003e — リアルタイムで変換結果が表示されます。スワップボタン（⇆）で入出力を入れ替えられます。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"機能のポイント\"\u003e機能のポイント\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e双方向変換\u003c/strong\u003e — スワップボタンで変換元と変換先を即座に入れ替えられます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e変換式の表示\u003c/strong\u003e — 計算の根拠となる変換式を確認できます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e早見表\u003c/strong\u003e — よく使う換算をワンクリックで即座に入力できます。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e日本の伝統単位対応\u003c/strong\u003e — 尺・寸・間・里・匁・貫・坪・畳・反・町などの日本独自の単位に対応しています。\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"よく使う単位換算\"\u003eよく使う単位換算\u003c/h2\u003e\n\u003ch3 id=\"長さの換算\"\u003e長さの換算\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e単位\u003c/th\u003e\n          \u003cth\u003eメートル換算\u003c/th\u003e\n          \u003cth\u003e用途\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1インチ\u003c/td\u003e\n          \u003ctd\u003e2.54 cm\u003c/td\u003e\n          \u003ctd\u003e画面サイズ、身長(英米)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1フィート\u003c/td\u003e\n          \u003ctd\u003e30.48 cm\u003c/td\u003e\n          \u003ctd\u003e身長、建築(英米)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1マイル\u003c/td\u003e\n          \u003ctd\u003e1.609 km\u003c/td\u003e\n          \u003ctd\u003e道路距離(英米)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1尺\u003c/td\u003e\n          \u003ctd\u003e約30.3 cm\u003c/td\u003e\n          \u003ctd\u003e日本の伝統建築\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1間\u003c/td\u003e\n          \u003ctd\u003e約1.818 m\u003c/td\u003e\n          \u003ctd\u003e部屋の広さ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1里\u003c/td\u003e\n          \u003ctd\u003e約3.927 km\u003c/td\u003e\n          \u003ctd\u003e昔の道のり\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"重さの換算\"\u003e重さの換算\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e単位\u003c/th\u003e\n          \u003cth\u003eキログラム換算\u003c/th\u003e\n          \u003cth\u003e用途\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1ポンド (lb)\u003c/td\u003e\n          \u003ctd\u003e約0.454 kg\u003c/td\u003e\n          \u003ctd\u003e食品表示(英米)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1オンス (oz)\u003c/td\u003e\n          \u003ctd\u003e約28.35 g\u003c/td\u003e\n          \u003ctd\u003e食品・金属\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1貫\u003c/td\u003e\n          \u003ctd\u003e3.75 kg\u003c/td\u003e\n          \u003ctd\u003e日本の伝統単位\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1匁\u003c/td\u003e\n          \u003ctd\u003e3.75 g\u003c/td\u003e\n          \u003ctd\u003e宝石・貴金属\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"面積の換算\"\u003e面積の換算\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e単位\u003c/th\u003e\n          \u003cth\u003e平方メートル換算\u003c/th\u003e\n          \u003cth\u003e用途\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1坪\u003c/td\u003e\n          \u003ctd\u003e約3.306 m²\u003c/td\u003e\n          \u003ctd\u003e不動産\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1畳\u003c/td\u003e\n          \u003ctd\u003e約1.653 m²\u003c/td\u003e\n          \u003ctd\u003e部屋の広さ\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1反\u003c/td\u003e\n          \u003ctd\u003e約991.7 m²\u003c/td\u003e\n          \u003ctd\u003e農地\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1エーカー\u003c/td\u003e\n          \u003ctd\u003e約4047 m²\u003c/td\u003e\n          \u003ctd\u003e英米の農地・土地\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e1ヘクタール\u003c/td\u003e\n          \u003ctd\u003e10,000 m²\u003c/td\u003e\n          \u003ctd\u003e農地・公園\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"温度の換算\"\u003e温度の換算\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e摂氏 (°C)\u003c/th\u003e\n          \u003cth\u003e華氏 (°F)\u003c/th\u003e\n          \u003cth\u003e場面\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e0°C\u003c/td\u003e\n          \u003ctd\u003e32°F\u003c/td\u003e\n          \u003ctd\u003e氷点\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e20°C\u003c/td\u003e\n          \u003ctd\u003e68°F\u003c/td\u003e\n          \u003ctd\u003e室温\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e37°C\u003c/td\u003e\n          \u003ctd\u003e98.6°F\u003c/td\u003e\n          \u003ctd\u003e体温\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e100°C\u003c/td\u003e\n          \u003ctd\u003e212°F\u003c/td\u003e\n          \u003ctd\u003e沸点\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e割合・割引・変化率をすぐ計算 → \u003ca href=\"https://productivity-works.com/ja/tools/percent-calculator/\"\u003eパーセント計算ツール\u003c/a\u003e\n\u003c/p\u003e","title":"単位変換ツール - 無料オンライン単位換算"},{"content":" IPアドレス計算ツール サブネット・CIDR・ネットワーク情報をブラウザ上で即時計算。サーバー不要・完全無料。\nIPアドレス / CIDR 入力 計算する リセット 例: 192.168.1.0/24 10.0.0.0/8 172.16.0.0/12 203.0.113.50/28 100.64.0.0/10 ネットワーク概要 マスク詳細 サブネット分割計算 現在のネットワークを、より小さなサブネットに分割します。新しいプレフィックス長を選択してください。\n新しいプレフィックス: 分割する CIDR → サブネットマスク 対応表 CIDR サブネットマスク ワイルドカードマスク 総アドレス数 使用可能ホスト数 IT管理を効率化 IT経費・ソフトウェア費用の管理に手間がかかっていませんか？ freee会計でIT経費を自動管理 すれば、請求書の仕訳・経費計上が自動化できます。\n関連ツール APIリクエストビルダー → APIリクエストビルダーツール Dns Record Guide → Dns Record Guideツール Http Status Codes → Http Status Codesツール ","permalink":"https://productivity-works.com/ja/tools/ip-address-calculator/","summary":"\u003cdiv id=\"ipc-app\"\u003e\n\u003cstyle\u003e\n#ipc-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Sans\", \"Yu Gothic UI\", \"Meiryo\", \"Segoe UI\", sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  color: #1a1a2e;\n  line-height: 1.6;\n}\n#ipc-app h1 {\n  font-size: 1.8rem;\n  font-weight: 700;\n  color: #0f3460;\n  margin-bottom: 0.4rem;\n}\n#ipc-app .ipc-subtitle {\n  color: #555;\n  margin-bottom: 1.5rem;\n  font-size: 0.97rem;\n}\n#ipc-app .ipc-card {\n  background: #fff;\n  border: 1px solid #d0d7e3;\n  border-radius: 10px;\n  padding: 1.4rem 1.6rem;\n  margin-bottom: 1.4rem;\n  box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n}\n#ipc-app .ipc-card h2 {\n  font-size: 1.05rem;\n  font-weight: 600;\n  color: #0f3460;\n  margin: 0 0 1rem 0;\n  padding-bottom: 0.5rem;\n  border-bottom: 2px solid #e8eaf6;\n}\n#ipc-app .ipc-input-row {\n  display: flex;\n  gap: 0.7rem;\n  align-items: center;\n  flex-wrap: wrap;\n}\n#ipc-app .ipc-input {\n  flex: 1;\n  min-width: 220px;\n  padding: 0.65rem 1rem;\n  font-size: 1rem;\n  border: 2px solid #c5cfe0;\n  border-radius: 7px;\n  outline: none;\n  transition: border-color 0.2s;\n  font-family: monospace;\n  background: #f8faff;\n}\n#ipc-app .ipc-input:focus {\n  border-color: #3a7bd5;\n  background: #fff;\n}\n#ipc-app .ipc-btn {\n  padding: 0.65rem 1.4rem;\n  background: #3a7bd5;\n  color: #fff;\n  border: none;\n  border-radius: 7px;\n  font-size: 0.95rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.2s, transform 0.1s;\n  white-space: nowrap;\n}\n#ipc-app .ipc-btn:hover { background: #2563b0; }\n#ipc-app .ipc-btn:active { transform: scale(0.98); }\n#ipc-app .ipc-btn-sm {\n  padding: 0.4rem 0.9rem;\n  font-size: 0.85rem;\n  border-radius: 5px;\n}\n#ipc-app .ipc-examples {\n  margin-top: 0.6rem;\n  display: flex;\n  gap: 0.5rem;\n  flex-wrap: wrap;\n  align-items: center;\n}\n#ipc-app .ipc-example-chip {\n  background: #eef2fb;\n  border: 1px solid #c5cfe0;\n  border-radius: 20px;\n  padding: 0.2rem 0.75rem;\n  font-size: 0.82rem;\n  cursor: pointer;\n  font-family: monospace;\n  color: #3a7bd5;\n  transition: background 0.15s;\n}\n#ipc-app .ipc-example-chip:hover { background: #dce8fa; }\n#ipc-app .ipc-error {\n  color: #c0392b;\n  background: #fdf0ed;\n  border: 1px solid #f5c6bb;\n  border-radius: 7px;\n  padding: 0.6rem 1rem;\n  margin-top: 0.8rem;\n  font-size: 0.92rem;\n  display: none;\n}\n#ipc-app .ipc-results { display: none; }\n#ipc-app .ipc-badge-row {\n  display: flex;\n  gap: 0.5rem;\n  flex-wrap: wrap;\n  margin-bottom: 1rem;\n}\n#ipc-app .ipc-badge {\n  border-radius: 20px;\n  padding: 0.25rem 0.85rem;\n  font-size: 0.82rem;\n  font-weight: 600;\n  letter-spacing: 0.02em;\n}\n#ipc-app .badge-class-a { background: #e3f2fd; color: #1565c0; border: 1px solid #90caf9; }\n#ipc-app .badge-class-b { background: #e8f5e9; color: #2e7d32; border: 1px solid #a5d6a7; }\n#ipc-app .badge-class-c { background: #fff3e0; color: #e65100; border: 1px solid #ffcc80; }\n#ipc-app .badge-class-d { background: #fce4ec; color: #880e4f; border: 1px solid #f48fb1; }\n#ipc-app .badge-class-e { background: #f3e5f5; color: #4a148c; border: 1px solid #ce93d8; }\n#ipc-app .badge-private { background: #e8f5e9; color: #1b5e20; border: 1px solid #a5d6a7; }\n#ipc-app .badge-public  { background: #e3f2fd; color: #0d47a1; border: 1px solid #90caf9; }\n#ipc-app .ipc-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n  gap: 0.7rem;\n  margin-bottom: 1rem;\n}\n#ipc-app .ipc-field {\n  background: #f5f8ff;\n  border: 1px solid #dde4f0;\n  border-radius: 8px;\n  padding: 0.65rem 0.9rem;\n}\n#ipc-app .ipc-field-label {\n  font-size: 0.75rem;\n  color: #7a8aaa;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  margin-bottom: 0.15rem;\n  font-weight: 600;\n}\n#ipc-app .ipc-field-value {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #0f3460;\n  font-family: monospace;\n  word-break: break-all;\n}\n#ipc-app .ipc-field-sub {\n  font-size: 0.75rem;\n  color: #8899bb;\n  margin-top: 0.1rem;\n  font-family: monospace;\n}\n#ipc-app table.ipc-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.88rem;\n}\n#ipc-app table.ipc-table th {\n  background: #eef2fb;\n  color: #3a5080;\n  font-weight: 700;\n  padding: 0.45rem 0.7rem;\n  text-align: left;\n  border-bottom: 2px solid #c5cfe0;\n  white-space: nowrap;\n}\n#ipc-app table.ipc-table td {\n  padding: 0.38rem 0.7rem;\n  border-bottom: 1px solid #e8eaf6;\n  font-family: monospace;\n  color: #2a3a5a;\n  white-space: nowrap;\n}\n#ipc-app table.ipc-table tr:last-child td { border-bottom: none; }\n#ipc-app table.ipc-table tr:hover td { background: #f5f8ff; }\n#ipc-app .ipc-sub-form {\n  display: flex;\n  gap: 0.7rem;\n  align-items: center;\n  flex-wrap: wrap;\n  margin-bottom: 0.9rem;\n}\n#ipc-app .ipc-select {\n  padding: 0.55rem 0.8rem;\n  border: 2px solid #c5cfe0;\n  border-radius: 7px;\n  font-size: 0.92rem;\n  background: #f8faff;\n  color: #1a1a2e;\n  outline: none;\n}\n#ipc-app .ipc-select:focus { border-color: #3a7bd5; }\n#ipc-app .ipc-cta {\n  background: linear-gradient(135deg, #1b4f8a 0%, #2563b0 100%);\n  border-radius: 10px;\n  padding: 1.1rem 1.4rem;\n  margin-top: 0.5rem;\n  color: #fff;\n}\n#ipc-app .ipc-cta p {\n  margin: 0;\n  font-size: 0.95rem;\n  line-height: 1.5;\n}\n#ipc-app .ipc-cta a {\n  color: #ffe066;\n  font-weight: 700;\n  text-decoration: none;\n}\n#ipc-app .ipc-cta a:hover { text-decoration: underline; }\n#ipc-app .ipc-cta-label {\n  font-size: 0.75rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: #a8c8ff;\n  margin-bottom: 0.4rem;\n}\n@media (max-width: 600px) {\n  #ipc-app .ipc-grid { grid-template-columns: 1fr; }\n  #ipc-app .ipc-input-row { flex-direction: column; align-items: stretch; }\n  #ipc-app .ipc-btn { width: 100%; }\n}\n\u003c/style\u003e\n\u003ch1\u003eIPアドレス計算ツール\u003c/h1\u003e\n\u003cp class=\"ipc-subtitle\"\u003eサブネット・CIDR・ネットワーク情報をブラウザ上で即時計算。サーバー不要・完全無料。\u003c/p\u003e","title":"IPアドレス計算ツール - サブネット＆CIDR計算"},{"content":" SNS画像リサイズツール Instagram・Facebook・X(Twitter)・LinkedIn・YouTube・Pinterest の各サイズにワンクリック対応。プリセットを選んでドラッグでトリミング位置を調整、そのままダウンロード。画像はサーバーに送信されず、ブラウザ内で完結します。\n🖼️ 画像をドロップ、またはクリックして選択 JPG・PNG・WebP・GIF・BMP（最大30MB） プラットフォーム\nInstagram Facebook X (Twitter) LinkedIn YouTube Pinterest フィットモード カバー（はみ出しトリミング） コンテイン（レターボックス） ストレッチ（変形して全体表示） カバーは画像を拡大してフレームを埋めます。コンテインは余白をバーで補完。ストレッチは縦横比を無視します。 背景色（コンテインモード用） コンテインモードで余白が生じる場合に使われる色です。 プレビュー — ドラッグで位置調整 ドラッグで位置調整 — — KB ⬇ 画像をダウンロード PNG JPEG 💼 SNS運用の経費管理はfreeeで 広告費・素材費・外注費など、SNS運用にかかる費用をfreee会計でまとめて管理。確定申告や法人決算もスムーズに。\nfreeeを無料で試す 使い方 STEP 1 — 画像をアップロード: ドラッグ＆ドロップ、またはクリックしてファイルを選択します。JPG・PNG・WebP・GIF・BMP（最大30MB）に対応しています。\nSTEP 2 — プラットフォームを選ぶ: 上部のタブからプラットフォームを選択し、フォーマットプリセットをクリックします。\nSTEP 3 — フィットモードを選ぶ: カバーは画像を拡大してフレームに収め、プレビューをドラッグして切り取り位置を調整できます。コンテインは画像全体を表示し余白を背景色で補完します。ストレッチは縦横比を無視して引き伸ばします。\nSTEP 4 — 背景色を調整: コンテインモードで余白が生じる場合は、カラーピッカーまたは16進数コードで色を指定します。\nSTEP 5 — ダウンロード: PNG またはJPEGを選択し「画像をダウンロード」をクリックします。ファイル名にはプラットフォーム名・フォーマット名・解像度が自動で付与されます。\nSNS別・推奨画像サイズ一覧（2025年版） プラットフォーム フォーマット サイズ Instagram 投稿（スクエア） 1080 × 1080 Instagram ストーリー / リール 1080 × 1920 Instagram プロフィール 320 × 320 Facebook 投稿 1200 × 630 Facebook カバー 820 × 312 Facebook ストーリー 1080 × 1920 X (Twitter) 投稿 1600 × 900 X (Twitter) ヘッダー 1500 × 500 LinkedIn 投稿 1200 × 627 LinkedIn カバー 1584 × 396 YouTube サムネイル 1280 × 720 YouTube チャンネルアート 2560 × 1440 Pinterest ピン 1000 × 1500 フィットモードの使い分け カバーは画像を拡大してフレームをぴったり埋め、はみ出た部分をトリミングします。プレビューをドラッグすることで、どの部分を切り取るか調整できます。SNS投稿の大半はこのモードが最適です。\nコンテインは画像全体がフレーム内に収まるよう縮小し、余白を指定した背景色で補完します。画像の全体を見せたい場合や、ロゴ・テキスト入り画像に適しています。\nストレッチは縦横比を無視して画像を強制的に指定サイズに変形します。元画像が目標サイズと近い縦横比の場合は気になりにくいですが、一般的には非推奨です。\n関連ツール 画像を任意のサイズにリサイズ → 画像リサイザー 指定サイズのプレースホルダー画像を生成 → プレースホルダー画像ジェネレーター 画像管理もfreeeで効率化 ブログやSNSの画像を編集している方、経費管理もfreeeで一括管理しませんか？ freeeを無料で試す\n","permalink":"https://productivity-works.com/ja/tools/social-media-image-resizer/","summary":"\u003cdiv id=\"sr-app\"\u003e\n\u003cstyle\u003e\n#sr-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans', 'Yu Gothic UI', Roboto, sans-serif;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 0 0 48px 0;\n  color: #1a202c;\n}\n\n#sr-app * {\n  box-sizing: border-box;\n}\n\n/* Hero */\n.sr-hero {\n  background: linear-gradient(135deg, #7c3aed 0%, #5b21b6 50%, #4c1d95 100%);\n  border-radius: 16px;\n  padding: 32px 28px;\n  margin-bottom: 24px;\n  color: #fff;\n}\n\n.sr-hero h2 {\n  margin: 0 0 6px 0;\n  font-size: 22px;\n  font-weight: 800;\n}\n\n.sr-hero p {\n  margin: 0;\n  font-size: 14px;\n  opacity: 0.88;\n  line-height: 1.7;\n}\n\n/* Upload area */\n.sr-upload {\n  border: 3px dashed #7c3aed;\n  border-radius: 14px;\n  padding: 40px 24px;\n  text-align: center;\n  background: #f5f3ff;\n  cursor: pointer;\n  transition: background 0.2s, border-color 0.2s;\n  margin-bottom: 20px;\n  position: relative;\n}\n\n.sr-upload:hover, .sr-upload.drag-over {\n  background: #ede9fe;\n  border-color: #5b21b6;\n}\n\n.sr-upload-icon {\n  font-size: 48px;\n  line-height: 1;\n  margin-bottom: 10px;\n  display: block;\n}\n\n.sr-upload-title {\n  font-size: 17px;\n  font-weight: 700;\n  color: #4c1d95;\n  margin-bottom: 4px;\n}\n\n.sr-upload-sub {\n  font-size: 13px;\n  color: #6b7280;\n}\n\n#sr-file-input-ja {\n  position: absolute;\n  inset: 0;\n  opacity: 0;\n  cursor: pointer;\n  width: 100%;\n  height: 100%;\n}\n\n/* Platform tabs */\n.sr-platforms {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 16px;\n}\n\n.sr-platform-btn {\n  padding: 8px 14px;\n  border-radius: 8px;\n  border: 2px solid #e5e7eb;\n  background: #fff;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: all 0.15s;\n  color: #374151;\n}\n\n.sr-platform-btn:hover {\n  border-color: #7c3aed;\n  color: #7c3aed;\n}\n\n.sr-platform-btn.active {\n  border-color: #7c3aed;\n  background: #7c3aed;\n  color: #fff;\n}\n\n/* Presets grid */\n.sr-presets {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n  gap: 8px;\n  margin-bottom: 20px;\n}\n\n.sr-preset-btn {\n  padding: 10px 12px;\n  border-radius: 10px;\n  border: 2px solid #e5e7eb;\n  background: #fff;\n  cursor: pointer;\n  text-align: left;\n  transition: all 0.15s;\n}\n\n.sr-preset-btn:hover {\n  border-color: #7c3aed;\n  background: #f5f3ff;\n}\n\n.sr-preset-btn.active {\n  border-color: #7c3aed;\n  background: #ede9fe;\n}\n\n.sr-preset-name {\n  font-size: 12px;\n  font-weight: 700;\n  color: #1a202c;\n  display: block;\n  margin-bottom: 2px;\n}\n\n.sr-preset-dim {\n  font-size: 11px;\n  color: #6b7280;\n}\n\n/* Controls row */\n.sr-controls {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 20px;\n}\n\n@media (max-width: 540px) {\n  .sr-controls { grid-template-columns: 1fr; }\n}\n\n.sr-control-group {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n\n.sr-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #374151;\n}\n\n.sr-select, .sr-color-input {\n  padding: 8px 12px;\n  border-radius: 8px;\n  border: 2px solid #e5e7eb;\n  font-size: 14px;\n  background: #fff;\n  color: #1a202c;\n  transition: border-color 0.15s;\n  width: 100%;\n}\n\n.sr-select:focus, .sr-color-input:focus {\n  outline: none;\n  border-color: #7c3aed;\n}\n\n.sr-color-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.sr-color-swatch {\n  width: 36px;\n  height: 36px;\n  border-radius: 8px;\n  border: 2px solid #e5e7eb;\n  cursor: pointer;\n  padding: 2px;\n}\n\n/* Canvas preview */\n.sr-preview-wrap {\n  margin-bottom: 20px;\n  background: #f9fafb;\n  border-radius: 14px;\n  padding: 16px;\n  display: none;\n}\n\n.sr-preview-wrap.visible { display: block; }\n\n.sr-preview-label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #6b7280;\n  margin-bottom: 10px;\n}\n\n.sr-canvas-container {\n  position: relative;\n  display: inline-block;\n  cursor: move;\n  border-radius: 8px;\n  overflow: hidden;\n  max-width: 100%;\n  border: 2px solid #e5e7eb;\n  background: #fff;\n  touch-action: none;\n}\n\n#sr-canvas-ja {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n\n/* Info bar */\n.sr-info-bar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  align-items: center;\n  margin-bottom: 20px;\n  font-size: 13px;\n  color: #6b7280;\n}\n\n.sr-info-badge {\n  background: #f3f4f6;\n  border-radius: 6px;\n  padding: 4px 10px;\n  font-weight: 600;\n  color: #374151;\n}\n\n/* Download buttons */\n.sr-dl-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  align-items: center;\n}\n\n.sr-dl-btn {\n  padding: 12px 24px;\n  border-radius: 10px;\n  border: none;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: all 0.15s;\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n}\n\n.sr-dl-btn.primary {\n  background: #7c3aed;\n  color: #fff;\n}\n\n.sr-dl-btn.primary:hover {\n  background: #5b21b6;\n}\n\n.sr-dl-btn.primary:disabled {\n  background: #c4b5fd;\n  cursor: not-allowed;\n}\n\n.sr-fmt-toggle {\n  display: flex;\n  gap: 6px;\n  margin-left: auto;\n}\n\n.sr-fmt-btn {\n  padding: 8px 14px;\n  border-radius: 8px;\n  border: 2px solid #e5e7eb;\n  background: #fff;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  color: #374151;\n  transition: all 0.15s;\n}\n\n.sr-fmt-btn.active {\n  border-color: #7c3aed;\n  background: #7c3aed;\n  color: #fff;\n}\n\n/* Section heading */\n.sr-section-title {\n  font-size: 14px;\n  font-weight: 700;\n  color: #374151;\n  margin: 0 0 10px 0;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n\n/* Hint */\n.sr-hint {\n  font-size: 12px;\n  color: #9ca3af;\n  margin-top: 8px;\n  line-height: 1.5;\n}\n\n/* Drag hint overlay */\n.sr-drag-hint {\n  position: absolute;\n  bottom: 8px;\n  right: 8px;\n  background: rgba(0,0,0,0.55);\n  color: #fff;\n  font-size: 11px;\n  padding: 3px 8px;\n  border-radius: 6px;\n  pointer-events: none;\n}\n\n/* freee CTA */\n.sr-freee-cta {\n  background: linear-gradient(135deg, #e8f4fd 0%, #dbeafe 100%);\n  border: 2px solid #93c5fd;\n  border-radius: 14px;\n  padding: 20px 22px;\n  margin: 28px 0 8px 0;\n  display: flex;\n  align-items: flex-start;\n  gap: 14px;\n}\n\n.sr-freee-cta-icon {\n  font-size: 32px;\n  flex-shrink: 0;\n  margin-top: 2px;\n}\n\n.sr-freee-cta-body h3 {\n  margin: 0 0 6px 0;\n  font-size: 15px;\n  font-weight: 800;\n  color: #1e40af;\n}\n\n.sr-freee-cta-body p {\n  margin: 0 0 10px 0;\n  font-size: 13px;\n  color: #1e3a5f;\n  line-height: 1.6;\n}\n\n.sr-freee-link {\n  display: inline-block;\n  background: #2563eb;\n  color: #fff;\n  font-size: 13px;\n  font-weight: 700;\n  padding: 8px 18px;\n  border-radius: 8px;\n  text-decoration: none;\n  transition: background 0.15s;\n}\n\n.sr-freee-link:hover {\n  background: #1d4ed8;\n  color: #fff;\n}\n\u003c/style\u003e\n\u003cdiv class=\"sr-hero\"\u003e\n  \u003ch2\u003eSNS画像リサイズツール\u003c/h2\u003e\n  \u003cp\u003eInstagram・Facebook・X(Twitter)・LinkedIn・YouTube・Pinterest の各サイズにワンクリック対応。プリセットを選んでドラッグでトリミング位置を調整、そのままダウンロード。画像はサーバーに送信されず、ブラウザ内で完結します。\u003c/p\u003e","title":"SNS画像リサイズツール"},{"content":"ブラウザだけで完結する無料の請求書作成ツールです。品目・数量・単価を入力すると消費税（10%・8%軽減税率・0%）を自動計算し、そのままPDF保存・印刷が可能です。インボイス制度の登録番号にも対応しています。\n発行者情報 会社名・屋号 登録番号（インボイス） 住所 メールアドレス 電話番号 請求先情報 会社名 担当者名 住所 請求書情報 請求書番号 発行日 支払期日 品目 品名・説明 数量 単価（円） 税率 小計（税抜） ＋ 品目を追加 合計 小計（税抜） ¥0 10%対象額 ¥0 消費税（10%） ¥0 8%対象額（軽減税率） ¥0 消費税（8%） ¥0 合計（税込） ¥0 振込先情報 備考 プレビュー 印刷 / PDF保存 請求書プレビュー \u0026#x2715; 印刷 / PDF保存 閉じる 請求書の発行・管理をもっとラクに\nfreee会計なら、請求書の自動作成・送付・入金管理まで一元化。インボイス制度にも完全対応。 freeeを無料で試す → 年金をシミュレーション → 年金シミュレーター 手取り額を計算 → 手取り計算ツール 家計を見直す → 50/30/20 家計バランス計算 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 AI×確定申告 フリーランス完全自動化ガイド2026 フリーランス確定申告 AIで経費仕訳を自動化する具体的手順 フリーランスエンジニアの開業届と青色申告｜初年度にやるべき手続き全リスト ","permalink":"https://productivity-works.com/ja/tools/invoice-generator/","summary":"\u003cp\u003eブラウザだけで完結する無料の請求書作成ツールです。品目・数量・単価を入力すると消費税（10%・8%軽減税率・0%）を自動計算し、そのままPDF保存・印刷が可能です。インボイス制度の登録番号にも対応しています。\u003c/p\u003e\n\u003cdiv id=\"ig-app\"\u003e\n\u003cstyle\u003e\n/* ============================================================\n   BASE RESET \u0026 LAYOUT\n   ============================================================ */\n#ig-app *,\n#ig-app *::before,\n#ig-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#ig-app {\n  font-family: system-ui, \"Hiragino Sans\", \"Yu Gothic UI\", \"Meiryo\", sans-serif;\n  font-size: 14px;\n  color: #1e293b;\n  line-height: 1.6;\n}\n\u003cp\u003e/* ============================================================\nFORM CARD\n============================================================ */\n#ig-app .ig-card {\nbackground: #fff;\nborder: 1px solid #e2e8f0;\nborder-radius: 10px;\npadding: 20px 22px;\nmargin-bottom: 18px;\n}\n#ig-app .ig-card-title {\nfont-size: 13px;\nfont-weight: 700;\ncolor: #475569;\ntext-transform: uppercase;\nletter-spacing: .04em;\nborder-bottom: 1px solid #f1f5f9;\npadding-bottom: 8px;\nmargin-bottom: 14px;\n}\u003c/p\u003e","title":"請求書ジェネレーター"},{"content":"ブラウザだけで完結するBase64デコーダーです。data URI付きでもプレーンなBase64文字列でも貼り付けるだけで画像をプレビュー・ダウンロードできます。アップロード不要・サーバー送信なし・登録不要。\nBase64文字列を貼り付け \u0026#9654; デコードしてプレビュー サンプルを読み込む \u0026#10005; クリア フォーマット: — サイズ: — デコード後バイト数: — \u0026#8595; 画像をダウンロード \u0026#128203; data URIをコピー 使い方 Base64文字列をテキストエリアに貼り付けます。 data:image/...;base64, のプレフィックスは自動検出・除去されます。改行や空白も自動的に取り除かれます。 ブラウザ内でデコードし、画像フォーマット（PNG / JPEG / GIF / WebP / SVG など）を自動判定してプレビュー表示します。 フォーマット・ピクセルサイズ・バイト数を確認できます。 「画像をダウンロード」で画像ファイルを保存、または data URI をクリップボードへコピーできます。 \u0026#8592; 画像→Base64変換 Base64エンコーダー 経理・会計の効率化も自動化しませんか？ freee会計は、請求書・領収書の管理から確定申告・法人決算まで自動化できるクラウド会計ソフトです。銀行口座・クレジットカードと連携して仕訳を自動作成。今なら30日間無料でお試しいただけます。\nfreee会計を無料で試す ※本記事にはアフィリエイト広告が含まれる場合があります。掲載している商品・サービスの選定はコンテンツ編集部が行っており、広告主の意向に関わらず独自の基準で選んでいます。\nA8.net 提携広告プログラムに参加しています。 関連ツール Base64エンコーダー → Base64エンコーダーツール Encoder Decoder → Encoder Decoderツール ハッシュ生成 → ハッシュ生成ツール ","permalink":"https://productivity-works.com/ja/tools/base64-to-image/","summary":"\u003cp\u003eブラウザだけで完結するBase64デコーダーです。data URI付きでもプレーンなBase64文字列でも貼り付けるだけで画像をプレビュー・ダウンロードできます。アップロード不要・サーバー送信なし・登録不要。\u003c/p\u003e\n\u003cdiv id=\"bd-app\"\u003e\n\u003cstyle\u003e\n#bd-app *,\n#bd-app *::before,\n#bd-app *::after {\n  box-sizing: border-box;\n}\n#bd-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  max-width: 820px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#bd-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  margin: 1.6rem 0 0.5rem;\n  color: #1a1a2e;\n}\n#bd-app .bd-row {\n  display: flex;\n  gap: 0.75rem;\n  flex-wrap: wrap;\n  align-items: center;\n  margin-bottom: 0.75rem;\n}\n#bd-app textarea {\n  width: 100%;\n  min-height: 160px;\n  padding: 0.75rem;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.8rem;\n  line-height: 1.5;\n  border: 1.5px solid #c8ccd4;\n  border-radius: 8px;\n  resize: vertical;\n  background: #f8f9fb;\n  color: #1a1a2e;\n  transition: border-color 0.2s;\n}\n#bd-app textarea:focus {\n  outline: none;\n  border-color: #4f6ef7;\n  background: #fff;\n}\n#bd-app textarea::placeholder {\n  color: #9aa0ad;\n}\n#bd-app button {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.4rem;\n  padding: 0.55rem 1.15rem;\n  font-size: 0.9rem;\n  font-weight: 700;\n  border: none;\n  border-radius: 7px;\n  cursor: pointer;\n  transition: background 0.18s, opacity 0.18s;\n}\n#bd-app button:active { opacity: 0.82; }\n#bd-app .bd-btn-primary { background: #4f6ef7; color: #fff; }\n#bd-app .bd-btn-primary:hover { background: #3a58e0; }\n#bd-app .bd-btn-secondary { background: #eef0f8; color: #4f6ef7; border: 1.5px solid #c8ccd4; }\n#bd-app .bd-btn-secondary:hover { background: #dde1f5; }\n#bd-app .bd-btn-danger { background: #fff0f0; color: #d9534f; border: 1.5px solid #f5c6c6; }\n#bd-app .bd-btn-danger:hover { background: #ffe0e0; }\n#bd-app .bd-btn-green { background: #1db954; color: #fff; }\n#bd-app .bd-btn-green:hover { background: #17a348; }\n#bd-app .bd-status {\n  padding: 0.55rem 0.85rem;\n  border-radius: 7px;\n  font-size: 0.875rem;\n  font-weight: 500;\n  margin-bottom: 0.75rem;\n  display: none;\n}\n#bd-app .bd-status.info  { display: block; background: #eef3ff; color: #3a58e0; border: 1px solid #c5d1fb; }\n#bd-app .bd-status.error { display: block; background: #fff0f0; color: #c0392b; border: 1px solid #f5c6c6; }\n#bd-app .bd-status.ok    { display: block; background: #eafaf1; color: #1a7a43; border: 1px solid #a9dfbf; }\n#bd-app .bd-preview-box {\n  display: none;\n  border: 1.5px solid #c8ccd4;\n  border-radius: 10px;\n  overflow: hidden;\n  background: repeating-conic-gradient(#e0e0e0 0% 25%, #f8f8f8 0% 50%) 0 0 / 16px 16px;\n  text-align: center;\n  padding: 12px;\n  margin-bottom: 0.75rem;\n  min-height: 80px;\n}\n#bd-app .bd-preview-box img {\n  max-width: 100%;\n  max-height: 480px;\n  display: block;\n  margin: 0 auto;\n  border-radius: 4px;\n  box-shadow: 0 2px 12px rgba(0,0,0,0.12);\n}\n#bd-app .bd-meta {\n  display: none;\n  background: #f4f6fb;\n  border: 1.5px solid #dde2ef;\n  border-radius: 8px;\n  padding: 0.75rem 1rem;\n  font-size: 0.85rem;\n  margin-bottom: 0.75rem;\n  line-height: 1.7;\n}\n#bd-app .bd-meta span { display: inline-block; margin-right: 1.5rem; }\n#bd-app .bd-meta strong { color: #4f6ef7; }\n#bd-app .bd-copy-uri {\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 0.78rem;\n  background: #f4f6fb;\n  border: 1.5px solid #dde2ef;\n  border-radius: 7px;\n  padding: 0.55rem 0.8rem;\n  width: 100%;\n  resize: none;\n  height: 3.8rem;\n  color: #444;\n  display: none;\n  margin-bottom: 0.4rem;\n}\n#bd-app .bd-divider { border: none; border-top: 1.5px solid #eaecf2; margin: 1.4rem 0; }\n#bd-app .bd-how {\n  background: #f8f9fb;\n  border-radius: 10px;\n  padding: 1rem 1.2rem;\n  font-size: 0.88rem;\n  line-height: 1.85;\n  color: #444;\n}\n#bd-app .bd-how ol { margin: 0.4rem 0 0 1.2rem; padding: 0; }\n#bd-app .bd-how li { margin-bottom: 0.3rem; }\n#bd-app .bd-links {\n  display: flex;\n  gap: 0.75rem;\n  flex-wrap: wrap;\n  margin-top: 1.2rem;\n}\n#bd-app .bd-links a {\n  padding: 0.45rem 1rem;\n  background: #eef0f8;\n  color: #4f6ef7;\n  border-radius: 6px;\n  text-decoration: none;\n  font-size: 0.875rem;\n  font-weight: 600;\n  border: 1.5px solid #c8ccd4;\n  transition: background 0.15s;\n}\n#bd-app .bd-links a:hover { background: #dde1f5; }\n/* freee CTA */\n#bd-app .bd-freee-cta {\n  margin: 1.8rem 0 0;\n  padding: 1.2rem 1.4rem;\n  background: linear-gradient(135deg, #e8f4fd 0%, #f0f8ff 100%);\n  border: 1.5px solid #b3d9f5;\n  border-radius: 12px;\n}\n#bd-app .bd-freee-cta h3 {\n  margin: 0 0 0.5rem;\n  font-size: 1rem;\n  color: #1a5276;\n}\n#bd-app .bd-freee-cta p {\n  margin: 0 0 0.8rem;\n  font-size: 0.875rem;\n  color: #2c3e50;\n  line-height: 1.65;\n}\n#bd-app .bd-freee-cta a.bd-freee-btn {\n  display: inline-block;\n  background: #0078d4;\n  color: #fff;\n  font-weight: 700;\n  font-size: 0.9rem;\n  padding: 0.6rem 1.4rem;\n  border-radius: 7px;\n  text-decoration: none;\n  transition: background 0.18s;\n}\n#bd-app .bd-freee-cta a.bd-freee-btn:hover { background: #005fa3; }\n/* A8 footer */\n#bd-app .bd-a8-footer {\n  margin-top: 1.6rem;\n  padding: 0.75rem 1rem;\n  background: #fafafa;\n  border: 1px solid #e0e0e0;\n  border-radius: 8px;\n  font-size: 0.78rem;\n  color: #777;\n  line-height: 1.6;\n}\n#bd-app .bd-a8-footer a { color: #4f6ef7; text-decoration: underline; }\n\u003c/style\u003e\n\u003ch2\u003eBase64文字列を貼り付け\u003c/h2\u003e\n\u003ctextarea id=\"bd-input\" placeholder=\"Base64文字列をここに貼り付けてください。data:image/png;base64, のようなdata URIプレフィックスは自動で取り除かれます。改行・空白も自動除去します。\"\u003e\u003c/textarea\u003e\n\u003cdiv class=\"bd-row\"\u003e\n  \u003cbutton class=\"bd-btn-primary\" onclick=\"bdDecode()\"\u003e\u0026#9654; デコードしてプレビュー\u003c/button\u003e\n  \u003cbutton class=\"bd-btn-secondary\" onclick=\"bdPasteSample()\"\u003eサンプルを読み込む\u003c/button\u003e\n  \u003cbutton class=\"bd-btn-danger\" onclick=\"bdClear()\"\u003e\u0026#10005; クリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"bd-status\" class=\"bd-status\"\u003e\u003c/div\u003e\n\u003cdiv id=\"bd-preview-box\" class=\"bd-preview-box\"\u003e\n  \u003cimg id=\"bd-img\" src=\"\" alt=\"デコードした画像プレビュー\" /\u003e\n\u003c/div\u003e\n\u003cdiv id=\"bd-meta\" class=\"bd-meta\"\u003e\n  \u003cspan\u003eフォーマット: \u003cstrong id=\"bd-fmt\"\u003e—\u003c/strong\u003e\u003c/span\u003e\n  \u003cspan\u003eサイズ: \u003cstrong id=\"bd-dims\"\u003e—\u003c/strong\u003e\u003c/span\u003e\n  \u003cspan\u003eデコード後バイト数: \u003cstrong id=\"bd-size\"\u003e—\u003c/strong\u003e\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv id=\"bd-action-row\" class=\"bd-row\" style=\"display:none\"\u003e\n  \u003cbutton class=\"bd-btn-green\" onclick=\"bdDownload()\"\u003e\u0026#8595; 画像をダウンロード\u003c/button\u003e\n  \u003cbutton class=\"bd-btn-secondary\" onclick=\"bdCopyUri()\"\u003e\u0026#128203; data URIをコピー\u003c/button\u003e\n\u003c/div\u003e\n\u003ctextarea id=\"bd-uri-out\" class=\"bd-copy-uri\" readonly\u003e\u003c/textarea\u003e\n\u003chr class=\"bd-divider\" /\u003e\n\u003ch2\u003e使い方\u003c/h2\u003e\n\u003cdiv class=\"bd-how\"\u003e\n  \u003col\u003e\n    \u003cli\u003eBase64文字列をテキストエリアに貼り付けます。\u003c/li\u003e\n    \u003cli\u003e\u003ccode\u003edata:image/...;base64,\u003c/code\u003e のプレフィックスは自動検出・除去されます。改行や空白も自動的に取り除かれます。\u003c/li\u003e\n    \u003cli\u003eブラウザ内でデコードし、画像フォーマット（PNG / JPEG / GIF / WebP / SVG など）を自動判定してプレビュー表示します。\u003c/li\u003e\n    \u003cli\u003eフォーマット・ピクセルサイズ・バイト数を確認できます。\u003c/li\u003e\n    \u003cli\u003e「画像をダウンロード」で画像ファイルを保存、または data URI をクリップボードへコピーできます。\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/div\u003e\n\u003cdiv class=\"bd-links\"\u003e\n  \u003ca href=\"/tools/image-to-base64/\"\u003e\u0026#8592; 画像→Base64変換\u003c/a\u003e\n  \u003ca href=\"/tools/base64-encoder/\"\u003eBase64エンコーダー\u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv class=\"bd-freee-cta\"\u003e\n  \u003ch3\u003e経理・会計の効率化も自動化しませんか？\u003c/h3\u003e\n  \u003cp\u003efreee会計は、請求書・領収書の管理から確定申告・法人決算まで自動化できるクラウド会計ソフトです。銀行口座・クレジットカードと連携して仕訳を自動作成。今なら30日間無料でお試しいただけます。\u003c/p\u003e","title":"Base64→画像変換ツール"},{"content":" 理想の睡眠時間と、今週実際に眠った時間を入力してください。蓄積した睡眠負債の合計と回復プランを自動で計算します。小数点（例: 6.5時間）も入力可能です。 ステップ1：理想の睡眠時間を設定 1日あたりの理想の睡眠時間 8.0 時間 成人の多くは7〜9時間が推奨されています。65歳以上は7〜8時間が目安です。\nステップ2：今週の睡眠時間を入力 各曜日に実際に眠った時間（時間単位）を入力してください\n月 火 水 木 金 土 日 睡眠負債を計算する 計算結果 \u0026lt;div class=\u0026quot;sd-summary-grid\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sd-stat\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sd-stat-val\u0026quot; id=\u0026quot;sd-total-debt\u0026quot;\u0026gt;0.0\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sd-stat-lbl\u0026quot;\u0026gt;今週の睡眠負債（時間）\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sd-stat\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sd-stat-val\u0026quot; id=\u0026quot;sd-avg-actual\u0026quot;\u0026gt;0.0\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sd-stat-lbl\u0026quot;\u0026gt;平均実際睡眠（時間/夜）\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sd-stat\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sd-stat-val\u0026quot; id=\u0026quot;sd-monthly-debt\u0026quot;\u0026gt;0.0\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sd-stat-lbl\u0026quot;\u0026gt;このペースの月間負債（時間）\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sd-stat\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sd-stat-val\u0026quot; id=\u0026quot;sd-recovery-days\u0026quot;\u0026gt;0\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sd-stat-lbl\u0026quot;\u0026gt;回復に必要な日数（目安）\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Bar chart --\u0026gt; \u0026lt;h3 style=\u0026quot;font-size:0.95rem;font-weight:700;color:#374151;margin:0 0 0.5rem\u0026quot;\u0026gt;理想 vs 実際の睡眠時間（曜日別）\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;sd-legend\u0026quot;\u0026gt; \u0026lt;span\u0026gt;\u0026lt;span class=\u0026quot;sd-legend-dot\u0026quot; style=\u0026quot;background:#c7d2fe\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;理想\u0026lt;/span\u0026gt; \u0026lt;span\u0026gt;\u0026lt;span class=\u0026quot;sd-legend-dot\u0026quot; style=\u0026quot;background:#4f46e5\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;実際\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;sd-chart-wrap\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;sd-chart\u0026quot; id=\u0026quot;sd-chart\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 回復プラン 睡眠負債を減らすためのヒント 健康管理も仕事も効率化 → freee会計で日々の管理を自動化 関連ツール ポモドーロタイマー → ポモドーロタイマーツール 睡眠計算 → 睡眠計算ツール ","permalink":"https://productivity-works.com/ja/tools/sleep-debt-calculator/","summary":"\u003cdiv id=\"sd-app\"\u003e\n\u003cstyle\u003e\n#sd-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 760px;\n  margin: 0 auto;\n  color: #1a1a2e;\n}\n#sd-app h2 {\n  font-size: 1.3rem;\n  font-weight: 700;\n  margin: 1.6rem 0 0.8rem;\n  color: #1a1a2e;\n}\n#sd-app .sd-intro {\n  background: #eef2ff;\n  border-left: 4px solid #4f46e5;\n  border-radius: 6px;\n  padding: 1rem 1.2rem;\n  margin-bottom: 1.6rem;\n  font-size: 0.93rem;\n  color: #3730a3;\n  line-height: 1.7;\n}\n#sd-app .sd-card {\n  background: #fff;\n  border: 1px solid #e5e7eb;\n  border-radius: 12px;\n  padding: 1.4rem 1.6rem;\n  margin-bottom: 1.2rem;\n  box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n}\n#sd-app label {\n  display: block;\n  font-size: 0.88rem;\n  font-weight: 600;\n  color: #374151;\n  margin-bottom: 0.3rem;\n}\n#sd-app .sd-ideal-row {\n  display: flex;\n  align-items: center;\n  gap: 1rem;\n}\n#sd-app .sd-ideal-row input[type=range] {\n  flex: 1;\n  accent-color: #4f46e5;\n}\n#sd-app .sd-ideal-val {\n  font-size: 1.3rem;\n  font-weight: 700;\n  color: #4f46e5;\n  min-width: 4rem;\n  text-align: center;\n}\n#sd-app .sd-days-grid {\n  display: grid;\n  grid-template-columns: repeat(7, 1fr);\n  gap: 0.6rem;\n}\n@media (max-width: 540px) {\n  #sd-app .sd-days-grid {\n    grid-template-columns: repeat(4, 1fr);\n  }\n}\n#sd-app .sd-day-cell {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 0.3rem;\n}\n#sd-app .sd-day-cell span {\n  font-size: 0.78rem;\n  font-weight: 600;\n  color: #6b7280;\n}\n#sd-app .sd-day-cell input[type=number] {\n  width: 100%;\n  padding: 0.4rem 0.2rem;\n  border: 1px solid #d1d5db;\n  border-radius: 6px;\n  font-size: 1rem;\n  text-align: center;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#sd-app .sd-day-cell input[type=number]:focus {\n  border-color: #4f46e5;\n  box-shadow: 0 0 0 2px rgba(79,70,229,0.15);\n}\n#sd-app .sd-btn {\n  display: block;\n  width: 100%;\n  padding: 0.85rem;\n  background: #4f46e5;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 1.05rem;\n  font-weight: 700;\n  cursor: pointer;\n  margin-top: 1rem;\n  transition: background 0.2s;\n}\n#sd-app .sd-btn:hover { background: #4338ca; }\n#sd-app .sd-result { display: none; }\n#sd-app .sd-result.visible { display: block; }\n#sd-app .sd-summary-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n  gap: 0.8rem;\n  margin-bottom: 1.2rem;\n}\n#sd-app .sd-stat {\n  background: #f9fafb;\n  border: 1px solid #e5e7eb;\n  border-radius: 10px;\n  padding: 0.9rem 1rem;\n  text-align: center;\n}\n#sd-app .sd-stat .sd-stat-val {\n  font-size: 1.8rem;\n  font-weight: 800;\n  color: #4f46e5;\n  line-height: 1.1;\n}\n#sd-app .sd-stat .sd-stat-lbl {\n  font-size: 0.76rem;\n  color: #6b7280;\n  margin-top: 0.3rem;\n  line-height: 1.4;\n}\n#sd-app .sd-badge {\n  display: inline-block;\n  padding: 0.35rem 0.9rem;\n  border-radius: 999px;\n  font-size: 0.9rem;\n  font-weight: 700;\n  margin-bottom: 1rem;\n}\n#sd-app .sd-badge.none     { background: #d1fae5; color: #065f46; }\n#sd-app .sd-badge.mild     { background: #fef3c7; color: #92400e; }\n#sd-app .sd-badge.moderate { background: #ffe4e6; color: #9f1239; }\n#sd-app .sd-badge.severe   { background: #fce7f3; color: #831843; }\n#sd-app .sd-chart-wrap {\n  overflow-x: auto;\n  margin-bottom: 1.2rem;\n}\n#sd-app .sd-chart {\n  display: flex;\n  align-items: flex-end;\n  gap: 0.5rem;\n  height: 160px;\n  padding: 0.5rem 0.2rem 0;\n  min-width: 320px;\n}\n#sd-app .sd-bar-group {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 2px;\n  height: 100%;\n  justify-content: flex-end;\n}\n#sd-app .sd-bars {\n  display: flex;\n  align-items: flex-end;\n  gap: 3px;\n  width: 100%;\n  height: 130px;\n}\n#sd-app .sd-bar {\n  flex: 1;\n  border-radius: 4px 4px 0 0;\n  min-height: 4px;\n  transition: height 0.4s ease;\n}\n#sd-app .sd-bar.ideal  { background: #c7d2fe; }\n#sd-app .sd-bar.actual { background: #4f46e5; }\n#sd-app .sd-bar-lbl {\n  font-size: 0.7rem;\n  color: #6b7280;\n  margin-top: 4px;\n}\n#sd-app .sd-legend {\n  display: flex;\n  gap: 1rem;\n  font-size: 0.8rem;\n  color: #374151;\n  margin-bottom: 0.8rem;\n}\n#sd-app .sd-legend-dot {\n  width: 12px; height: 12px;\n  border-radius: 3px;\n  display: inline-block;\n  margin-right: 4px;\n  vertical-align: middle;\n}\n#sd-app .sd-recovery {\n  background: #f0fdf4;\n  border: 1px solid #bbf7d0;\n  border-radius: 10px;\n  padding: 1rem 1.2rem;\n  margin-bottom: 1.2rem;\n}\n#sd-app .sd-recovery h3 {\n  font-size: 1rem;\n  font-weight: 700;\n  color: #166534;\n  margin: 0 0 0.4rem;\n}\n#sd-app .sd-recovery p {\n  font-size: 0.9rem;\n  color: #166534;\n  margin: 0;\n  line-height: 1.7;\n}\n#sd-app .sd-tips { list-style: none; padding: 0; margin: 0; }\n#sd-app .sd-tips li {\n  padding: 0.5rem 0;\n  border-bottom: 1px solid #f3f4f6;\n  font-size: 0.9rem;\n  color: #374151;\n  padding-left: 1.4rem;\n  position: relative;\n  line-height: 1.6;\n}\n#sd-app .sd-tips li:last-child { border-bottom: none; }\n#sd-app .sd-tips li::before {\n  content: \"•\";\n  color: #4f46e5;\n  font-weight: 700;\n  position: absolute;\n  left: 0.3rem;\n}\n#sd-app .sd-cta {\n  background: #fffbeb;\n  border: 1px solid #fde68a;\n  border-radius: 10px;\n  padding: 1rem 1.2rem;\n  margin-top: 1.6rem;\n  font-size: 0.9rem;\n  color: #78350f;\n  line-height: 1.7;\n}\n#sd-app .sd-cta a {\n  color: #b45309;\n  font-weight: 700;\n}\n\u003c/style\u003e\n\u003cdiv class=\"sd-intro\"\u003e\n理想の睡眠時間と、今週実際に眠った時間を入力してください。蓄積した睡眠負債の合計と回復プランを自動で計算します。小数点（例: 6.5時間）も入力可能です。\n\u003c/div\u003e\n\u003c!-- 理想睡眠時間 --\u003e\n\u003cdiv class=\"sd-card\"\u003e\n  \u003ch2 style=\"margin-top:0\"\u003eステップ1：理想の睡眠時間を設定\u003c/h2\u003e\n  \u003clabel for=\"sd-ideal\"\u003e1日あたりの理想の睡眠時間\u003c/label\u003e\n  \u003cdiv class=\"sd-ideal-row\"\u003e\n    \u003cinput type=\"range\" id=\"sd-ideal\" min=\"6\" max=\"10\" step=\"0.5\" value=\"8\" oninput=\"sdUpdateIdeal(this.value)\"\u003e\n    \u003cdiv class=\"sd-ideal-val\" id=\"sd-ideal-display\"\u003e8.0 時間\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cp style=\"font-size:0.8rem;color:#6b7280;margin:0.5rem 0 0\"\u003e成人の多くは7〜9時間が推奨されています。65歳以上は7〜8時間が目安です。\u003c/p\u003e","title":"睡眠負債計算ツール - あなたの睡眠不足を可視化"},{"content":" テキストをコピー クリア カスタム文字数制限： 文字 0 / 0 制限超過！ 0 文字数（スペース含む） 0 文字数（スペース除く） 0 単語数 0 文数 0 段落数 0 行数 0 ユニーク文字数 0 UTF-8バイト数 プラットフォーム文字数制限チェック X（Twitter）日本語 0 / 280 SMS（Unicode・日本語） 0 / 70 メタディスクリプション 0 / 120 タイトルタグ（SEO） 0 / 32 Instagramキャプション 0 / 2200 文字頻度 Top 10（スペース除く） テキストを入力すると文字頻度グラフが表示されます クリップボードにコピーしました 文字数カウンターの使い方 テキストエリアに文章を貼り付けるか入力するだけで、8つの統計値がリアルタイムで更新されます。インストール不要・登録不要で、すべてブラウザ上で動作します。\nスペース含む文字数は改行・空白を含むすべての文字数で、TwitterやSMSなどほとんどのプラットフォームの制限はこの方式です。スペース除く文字数は空白類を除いた純粋な文字数で、論文や公募要件の「○○字以内（スペース除く）」に対応します。UTF-8バイト数はデータベースや外部APIのバイト上限チェックに使えます。日本語1文字は通常3バイト、絵文字は4バイトです。\nプラットフォーム制限バーは80%到達で黄色、超過で赤くなります。カスタム制限欄に数字を入力すれば、自社規定や入稿フォームの上限を任意に設定できます。\n文字頻度グラフは、スペース・改行を除いた文字のうち出現数が多い上位10文字を棒グラフで表示します。各バーの下にはUnicodeコードポイントも表示されるため、意図しない特殊文字の混入チェックにも使えます。\n文字数制限が重要な場面 SNS投稿では各プラットフォームに文字数制限があります。X（Twitter）は日本語でも1文字1カウントの280文字制限。日本語SMSはUnicode（UCS-2）エンコードとなるため1通あたり70文字が上限です。制限を超えるとメッセージが分割され、受信側で見づらくなります。\nSEO・Webコンテンツでは、タイトルタグは全角換算で約32文字（半角なら60文字前後）を超えると検索結果で切れます。メタディスクリプションも日本語では120文字程度が適切です。このツールでリアルタイムに確認しながら書くことで、検索結果での表示を最適化できます。\n論文・レポート・公募申請書では「○○字以内」「○○字以上○○字以内」という要件が厳格に課されます。スペース含む/除くの切り替えや、段落数・行数の確認が一画面でできるため、提出前の最終チェックに役立ちます。\nAPIやデータベース連携では、テキストフィールドのバイト上限（例: MySQLのVARCHAR(255) は255バイト）に気をつける必要があります。日本語はASCIIの3倍のバイト数を消費するため、UTF-8バイト数の確認は必須です。\n関連ツール 単語数・読了時間を計算 → 単語数・文字数カウンター 頻出キーワードを分析 → 単語頻度カウンター 記事の読了時間を計算 → 読了時間計算ツール ライター・フリーランスの経理を効率化\n文章を書くのは得意でも、経費管理や確定申告は面倒…。クラウド会計ソフト「freee」なら、レシート撮影で経費入力完了。確定申告もスマホで簡単に。\nfreee会計を無料で試す ","permalink":"https://productivity-works.com/ja/tools/character-counter/","summary":"\u003cdiv id=\"cc-app\"\u003e\n\u003cstyle\u003e\n#cc-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', 'Noto Sans JP', sans-serif;\n  max-width: 880px;\n  margin: 0 auto;\n  color: #1e1b4b;\n}\n\n#cc-app * {\n  box-sizing: border-box;\n}\n\n#cc-textarea {\n  width: 100%;\n  min-height: 200px;\n  padding: 16px;\n  font-size: 1rem;\n  line-height: 1.7;\n  border: 2px solid #c4b5fd;\n  border-radius: 10px;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.2s;\n  background: #faf5ff;\n  color: #1e1b4b;\n  font-family: inherit;\n}\n#cc-textarea:focus {\n  border-color: #7c3aed;\n  background: #fff;\n  box-shadow: 0 0 0 3px rgba(124,58,237,0.1);\n}\n#cc-textarea::placeholder { color: #a78bfa; }\n\n#cc-actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 10px;\n}\n#cc-app button {\n  padding: 7px 14px;\n  border: none;\n  border-radius: 6px;\n  font-size: 0.85rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n  font-family: inherit;\n}\n#cc-app button:active { transform: scale(0.97); }\n\n.cc-btn-primary { background: #7c3aed; color: #fff; }\n.cc-btn-primary:hover { background: #6d28d9; }\n.cc-btn-secondary { background: #ede9fe; color: #5b21b6; }\n.cc-btn-secondary:hover { background: #ddd6fe; }\n.cc-btn-danger { background: #fee2e2; color: #b91c1c; }\n.cc-btn-danger:hover { background: #fecaca; }\n\n/* カスタム制限入力 */\n#cc-limit-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n#cc-limit-row label {\n  font-size: 0.85rem;\n  color: #5b21b6;\n  font-weight: 600;\n  white-space: nowrap;\n}\n#cc-limit-input {\n  width: 100px;\n  padding: 6px 10px;\n  border: 2px solid #c4b5fd;\n  border-radius: 6px;\n  font-size: 0.85rem;\n  color: #1e1b4b;\n  outline: none;\n  font-family: inherit;\n}\n#cc-limit-input:focus { border-color: #7c3aed; }\n\n/* カスタム制限プログレス */\n#cc-custom-progress-wrap {\n  margin-top: 8px;\n  display: none;\n}\n#cc-custom-progress-label {\n  font-size: 0.8rem;\n  color: #5b21b6;\n  margin-bottom: 4px;\n  display: flex;\n  justify-content: space-between;\n}\n#cc-custom-progress-bg {\n  width: 100%;\n  height: 10px;\n  background: #ede9fe;\n  border-radius: 999px;\n  overflow: hidden;\n}\n#cc-custom-progress-bar {\n  height: 100%;\n  background: #7c3aed;\n  border-radius: 999px;\n  transition: width 0.2s, background 0.2s;\n  width: 0%;\n}\n#cc-custom-progress-bar.warn { background: #f59e0b; }\n#cc-custom-progress-bar.over { background: #ef4444; }\n\n/* 統計グリッド */\n#cc-stats-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(138px, 1fr));\n  gap: 12px;\n  margin-top: 20px;\n}\n.cc-stat-card {\n  background: #faf5ff;\n  border: 1.5px solid #ddd6fe;\n  border-radius: 10px;\n  padding: 14px 10px;\n  text-align: center;\n}\n.cc-stat-value {\n  font-size: 1.7rem;\n  font-weight: 700;\n  color: #7c3aed;\n  line-height: 1;\n  word-break: break-all;\n}\n.cc-stat-label {\n  font-size: 0.72rem;\n  color: #6b7280;\n  margin-top: 6px;\n  letter-spacing: 0.02em;\n}\n\n/* プラットフォーム制限バー */\n#cc-platform-section {\n  margin-top: 28px;\n}\n#cc-platform-section h3 {\n  font-size: 0.9rem;\n  font-weight: 700;\n  color: #5b21b6;\n  margin: 0 0 14px 0;\n  letter-spacing: 0.03em;\n}\n.cc-platform-row {\n  margin-bottom: 12px;\n}\n.cc-platform-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 4px;\n}\n.cc-platform-name {\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #374151;\n}\n.cc-platform-count {\n  font-size: 0.82rem;\n  color: #6b7280;\n  font-variant-numeric: tabular-nums;\n}\n.cc-platform-count.over { color: #ef4444; font-weight: 700; }\n.cc-platform-track {\n  width: 100%;\n  height: 8px;\n  background: #ede9fe;\n  border-radius: 999px;\n  overflow: hidden;\n}\n.cc-platform-bar {\n  height: 100%;\n  border-radius: 999px;\n  transition: width 0.25s, background 0.25s;\n  width: 0%;\n  background: linear-gradient(90deg, #7c3aed, #a78bfa);\n}\n.cc-platform-bar.warn { background: linear-gradient(90deg, #f59e0b, #fbbf24); }\n.cc-platform-bar.over { background: linear-gradient(90deg, #ef4444, #f87171); }\n\n/* 文字頻度チャート */\n#cc-density-section {\n  margin-top: 28px;\n}\n#cc-density-section h3 {\n  font-size: 0.9rem;\n  font-weight: 700;\n  color: #5b21b6;\n  margin: 0 0 14px 0;\n  letter-spacing: 0.03em;\n}\n#cc-density-canvas {\n  width: 100%;\n  max-width: 100%;\n  border-radius: 8px;\n  background: #faf5ff;\n  border: 1.5px solid #ddd6fe;\n  display: block;\n}\n#cc-density-empty {\n  text-align: center;\n  color: #a78bfa;\n  font-size: 0.9rem;\n  padding: 24px;\n  background: #faf5ff;\n  border: 1.5px solid #ddd6fe;\n  border-radius: 8px;\n}\n\n/* トースト */\n#cc-toast {\n  position: fixed;\n  bottom: 24px;\n  left: 50%;\n  transform: translateX(-50%) translateY(20px);\n  background: #7c3aed;\n  color: #fff;\n  padding: 10px 22px;\n  border-radius: 8px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  opacity: 0;\n  transition: opacity 0.3s, transform 0.3s;\n  pointer-events: none;\n  z-index: 9999;\n}\n#cc-toast.show {\n  opacity: 1;\n  transform: translateX(-50%) translateY(0);\n}\n\n@media (max-width: 500px) {\n  #cc-stats-grid { grid-template-columns: repeat(2, 1fr); }\n}\n\u003c/style\u003e\n\u003ctextarea id=\"cc-textarea\" placeholder=\"ここにテキストを貼り付けるか入力してください — リアルタイムで文字数が計算されます...\"\u003e\u003c/textarea\u003e\n\u003cdiv id=\"cc-actions\"\u003e\n  \u003cbutton class=\"cc-btn-primary\" id=\"cc-copy-btn\"\u003eテキストをコピー\u003c/button\u003e\n  \u003cbutton class=\"cc-btn-danger\" id=\"cc-clear-btn\"\u003eクリア\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv id=\"cc-limit-row\"\u003e\n  \u003clabel for=\"cc-limit-input\"\u003eカスタム文字数制限：\u003c/label\u003e\n  \u003cinput type=\"number\" id=\"cc-limit-input\" min=\"1\" placeholder=\"例：500\"\u003e\n  \u003cspan style=\"font-size:0.8rem;color:#8b5cf6;\"\u003e文字\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv id=\"cc-custom-progress-wrap\"\u003e\n  \u003cdiv id=\"cc-custom-progress-label\"\u003e\n    \u003cspan id=\"cc-custom-progress-text\"\u003e0 / 0\u003c/span\u003e\n    \u003cspan id=\"cc-custom-progress-over\" style=\"color:#ef4444;display:none;\"\u003e制限超過！\u003c/span\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"cc-custom-progress-bg\"\u003e\n    \u003cdiv id=\"cc-custom-progress-bar\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 統計グリッド --\u003e\n\u003cdiv id=\"cc-stats-grid\"\u003e\n  \u003cdiv class=\"cc-stat-card\"\u003e\n    \u003cdiv class=\"cc-stat-value\" id=\"cc-chars-with\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"cc-stat-label\"\u003e文字数（スペース含む）\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cc-stat-card\"\u003e\n    \u003cdiv class=\"cc-stat-value\" id=\"cc-chars-without\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"cc-stat-label\"\u003e文字数（スペース除く）\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cc-stat-card\"\u003e\n    \u003cdiv class=\"cc-stat-value\" id=\"cc-words\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"cc-stat-label\"\u003e単語数\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cc-stat-card\"\u003e\n    \u003cdiv class=\"cc-stat-value\" id=\"cc-sentences\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"cc-stat-label\"\u003e文数\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cc-stat-card\"\u003e\n    \u003cdiv class=\"cc-stat-value\" id=\"cc-paragraphs\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"cc-stat-label\"\u003e段落数\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cc-stat-card\"\u003e\n    \u003cdiv class=\"cc-stat-value\" id=\"cc-lines\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"cc-stat-label\"\u003e行数\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cc-stat-card\"\u003e\n    \u003cdiv class=\"cc-stat-value\" id=\"cc-unique\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"cc-stat-label\"\u003eユニーク文字数\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cc-stat-card\"\u003e\n    \u003cdiv class=\"cc-stat-value\" id=\"cc-bytes\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"cc-stat-label\"\u003eUTF-8バイト数\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- プラットフォーム制限バー --\u003e\n\u003cdiv id=\"cc-platform-section\"\u003e\n  \u003ch3\u003eプラットフォーム文字数制限チェック\u003c/h3\u003e\n  \u003cdiv class=\"cc-platform-row\"\u003e\n    \u003cdiv class=\"cc-platform-header\"\u003e\n      \u003cspan class=\"cc-platform-name\"\u003eX（Twitter）日本語\u003c/span\u003e\n      \u003cspan class=\"cc-platform-count\" id=\"cc-plat-twitter-label\"\u003e0 / 280\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cc-platform-track\"\u003e\u003cdiv class=\"cc-platform-bar\" id=\"cc-plat-twitter-bar\"\u003e\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cc-platform-row\"\u003e\n    \u003cdiv class=\"cc-platform-header\"\u003e\n      \u003cspan class=\"cc-platform-name\"\u003eSMS（Unicode・日本語）\u003c/span\u003e\n      \u003cspan class=\"cc-platform-count\" id=\"cc-plat-sms-label\"\u003e0 / 70\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cc-platform-track\"\u003e\u003cdiv class=\"cc-platform-bar\" id=\"cc-plat-sms-bar\"\u003e\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cc-platform-row\"\u003e\n    \u003cdiv class=\"cc-platform-header\"\u003e\n      \u003cspan class=\"cc-platform-name\"\u003eメタディスクリプション\u003c/span\u003e\n      \u003cspan class=\"cc-platform-count\" id=\"cc-plat-meta-label\"\u003e0 / 120\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cc-platform-track\"\u003e\u003cdiv class=\"cc-platform-bar\" id=\"cc-plat-meta-bar\"\u003e\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cc-platform-row\"\u003e\n    \u003cdiv class=\"cc-platform-header\"\u003e\n      \u003cspan class=\"cc-platform-name\"\u003eタイトルタグ（SEO）\u003c/span\u003e\n      \u003cspan class=\"cc-platform-count\" id=\"cc-plat-title-label\"\u003e0 / 32\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cc-platform-track\"\u003e\u003cdiv class=\"cc-platform-bar\" id=\"cc-plat-title-bar\"\u003e\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"cc-platform-row\"\u003e\n    \u003cdiv class=\"cc-platform-header\"\u003e\n      \u003cspan class=\"cc-platform-name\"\u003eInstagramキャプション\u003c/span\u003e\n      \u003cspan class=\"cc-platform-count\" id=\"cc-plat-ig-label\"\u003e0 / 2200\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"cc-platform-track\"\u003e\u003cdiv class=\"cc-platform-bar\" id=\"cc-plat-ig-bar\"\u003e\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 文字頻度チャート --\u003e\n\u003cdiv id=\"cc-density-section\"\u003e\n  \u003ch3\u003e文字頻度 Top 10（スペース除く）\u003c/h3\u003e\n  \u003cdiv id=\"cc-density-empty\"\u003eテキストを入力すると文字頻度グラフが表示されます\u003c/div\u003e\n  \u003ccanvas id=\"cc-density-canvas\" style=\"display:none;\" height=\"220\"\u003e\u003c/canvas\u003e\n\u003c/div\u003e\n\u003cdiv id=\"cc-toast\"\u003eクリップボードにコピーしました\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var ta = document.getElementById('cc-textarea');\n  var limitInput = document.getElementById('cc-limit-input');\n  var customProgressWrap = document.getElementById('cc-custom-progress-wrap');\n  var customProgressText = document.getElementById('cc-custom-progress-text');\n  var customProgressOver = document.getElementById('cc-custom-progress-over');\n  var customBar = document.getElementById('cc-custom-progress-bar');\n  var toast = document.getElementById('cc-toast');\n  var canvas = document.getElementById('cc-density-canvas');\n  var densityEmpty = document.getElementById('cc-density-empty');\n  var ctx = canvas.getContext('2d');\n  var customLimit = 0;\n\n  var platforms = [\n    { id: 'twitter', limit: 280 },\n    { id: 'sms',     limit: 70  },\n    { id: 'meta',    limit: 120 },\n    { id: 'title',   limit: 32  },\n    { id: 'ig',      limit: 2200 }\n  ];\n\n  function getUtf8Bytes(str) {\n    var bytes = 0;\n    for (var i = 0; i \u003c str.length; i++) {\n      var code = str.charCodeAt(i);\n      if (code \u003c 0x80) bytes += 1;\n      else if (code \u003c 0x800) bytes += 2;\n      else if (code \u003e= 0xD800 \u0026\u0026 code \u003c= 0xDBFF) { bytes += 4; i++; }\n      else bytes += 3;\n    }\n    return bytes;\n  }\n\n  function countWords(text) {\n    var t = text.trim();\n    if (!t) return 0;\n    // 日本語は文字単位、英語はスペース区切り\n    var latin = t.match(/[a-zA-ZÀ-ÿ]+/g) || [];\n    var cjk = t.match(/[\\u3040-\\u30ff\\u3400-\\u4dbf\\u4e00-\\u9fff\\uf900-\\ufaff\\uff66-\\uff9f]+/g) || [];\n    return latin.length + cjk.length;\n  }\n\n  function countSentences(text) {\n    var t = text.trim();\n    if (!t) return 0;\n    var matches = t.match(/[^。！？.!?]*[。！？.!?]+/g);\n    return matches ? matches.length : (t.length \u003e 0 ? 1 : 0);\n  }\n\n  function countParagraphs(text) {\n    var t = text.trim();\n    if (!t) return 0;\n    return t.split(/\\n\\s*\\n/).filter(function(p) { return p.trim().length \u003e 0; }).length;\n  }\n\n  function countLines(text) {\n    if (!text) return 0;\n    return text.split('\\n').length;\n  }\n\n  function countUnique(text) {\n    if (!text) return 0;\n    var seen = {};\n    for (var i = 0; i \u003c text.length; i++) {\n      seen[text[i]] = true;\n    }\n    return Object.keys(seen).length;\n  }\n\n  function getCharFrequency(text) {\n    var freq = {};\n    for (var i = 0; i \u003c text.length; i++) {\n      var c = text[i];\n      if (c === ' ' || c === '\\u3000' || c === '\\n' || c === '\\r' || c === '\\t') continue;\n      freq[c] = (freq[c] || 0) + 1;\n    }\n    var arr = [];\n    for (var ch in freq) {\n      arr.push({ char: ch, count: freq[ch] });\n    }\n    arr.sort(function(a, b) { return b.count - a.count; });\n    return arr.slice(0, 10);\n  }\n\n  function updatePlatformBar(id, count, limit) {\n    var labelEl = document.getElementById('cc-plat-' + id + '-label');\n    var barEl = document.getElementById('cc-plat-' + id + '-bar');\n    var pct = Math.min((count / limit) * 100, 100);\n    barEl.style.width = pct + '%';\n    labelEl.textContent = count.toLocaleString() + ' / ' + limit.toLocaleString();\n    if (count \u003e limit) {\n      barEl.className = 'cc-platform-bar over';\n      labelEl.className = 'cc-platform-count over';\n    } else if (pct \u003e= 80) {\n      barEl.className = 'cc-platform-bar warn';\n      labelEl.className = 'cc-platform-count';\n    } else {\n      barEl.className = 'cc-platform-bar';\n      labelEl.className = 'cc-platform-count';\n    }\n  }\n\n  function drawDensityChart(freq) {\n    if (freq.length === 0) {\n      canvas.style.display = 'none';\n      densityEmpty.style.display = 'block';\n      return;\n    }\n    densityEmpty.style.display = 'none';\n    canvas.style.display = 'block';\n\n    var dpr = window.devicePixelRatio || 1;\n    var w = canvas.parentElement.clientWidth || 600;\n    canvas.width = w * dpr;\n    canvas.height = 220 * dpr;\n    canvas.style.width = w + 'px';\n    canvas.style.height = '220px';\n    ctx.scale(dpr, dpr);\n\n    var padL = 44, padR = 16, padT = 20, padB = 48;\n    var chartW = w - padL - padR;\n    var chartH = 220 - padT - padB;\n    var barCount = freq.length;\n    var barW = Math.floor((chartW / barCount) * 0.65);\n    var gap = Math.floor(chartW / barCount);\n    var maxCount = freq[0].count;\n\n    ctx.clearRect(0, 0, w, 220);\n\n    // グリッド線\n    ctx.strokeStyle = '#ddd6fe';\n    ctx.lineWidth = 1;\n    for (var g = 0; g \u003c= 4; g++) {\n      var gy = padT + (chartH / 4) * g;\n      ctx.beginPath();\n      ctx.moveTo(padL, gy);\n      ctx.lineTo(padL + chartW, gy);\n      ctx.stroke();\n      var gridVal = Math.round(maxCount * (1 - g / 4));\n      ctx.fillStyle = '#8b5cf6';\n      ctx.font = '10px sans-serif';\n      ctx.textAlign = 'right';\n      ctx.fillText(gridVal, padL - 4, gy + 4);\n    }\n\n    // バー\n    var colors = ['#7c3aed','#8b5cf6','#a78bfa','#6d28d9','#9333ea','#7c3aed','#8b5cf6','#a78bfa','#6d28d9','#9333ea'];\n    for (var i = 0; i \u003c freq.length; i++) {\n      var bh = maxCount \u003e 0 ? (freq[i].count / maxCount) * chartH : 0;\n      var bx = padL + i * gap + (gap - barW) / 2;\n      var by = padT + chartH - bh;\n\n      ctx.fillStyle = colors[i % colors.length];\n      ctx.beginPath();\n      if (ctx.roundRect) {\n        ctx.roundRect(bx, by, barW, bh, [4, 4, 0, 0]);\n      } else {\n        ctx.rect(bx, by, barW, bh);\n      }\n      ctx.fill();\n\n      // カウントラベル\n      ctx.fillStyle = '#5b21b6';\n      ctx.font = 'bold 10px sans-serif';\n      ctx.textAlign = 'center';\n      ctx.fillText(freq[i].count, bx + barW / 2, by - 4);\n\n      // 文字ラベル\n      ctx.fillStyle = '#374151';\n      ctx.font = 'bold 14px sans-serif';\n      ctx.fillText(freq[i].char, bx + barW / 2, padT + chartH + 18);\n\n      // Unicodeコードポイント\n      var code = freq[i].char.codePointAt(0).toString(16).toUpperCase();\n      ctx.fillStyle = '#9ca3af';\n      ctx.font = '9px sans-serif';\n      ctx.fillText('U+' + code.padStart(4, '0'), bx + barW / 2, padT + chartH + 32);\n    }\n  }\n\n  function updateStats() {\n    var text = ta.value;\n    var withSpaces = text.length;\n    var withoutSpaces = text.replace(/[\\s\\u3000]/g, '').length;\n    var words = countWords(text);\n    var sentences = countSentences(text);\n    var paragraphs = countParagraphs(text);\n    var lines = countLines(text);\n    var unique = countUnique(text);\n    var bytes = getUtf8Bytes(text);\n\n    document.getElementById('cc-chars-with').textContent = withSpaces.toLocaleString();\n    document.getElementById('cc-chars-without').textContent = withoutSpaces.toLocaleString();\n    document.getElementById('cc-words').textContent = words.toLocaleString();\n    document.getElementById('cc-sentences').textContent = sentences.toLocaleString();\n    document.getElementById('cc-paragraphs').textContent = paragraphs.toLocaleString();\n    document.getElementById('cc-lines').textContent = lines.toLocaleString();\n    document.getElementById('cc-unique').textContent = unique.toLocaleString();\n    document.getElementById('cc-bytes').textContent = bytes.toLocaleString();\n\n    // プラットフォームバー\n    platforms.forEach(function(p) {\n      updatePlatformBar(p.id, withSpaces, p.limit);\n    });\n\n    // カスタム制限\n    if (customLimit \u003e 0) {\n      var pct = Math.min((withSpaces / customLimit) * 100, 100);\n      customBar.style.width = pct + '%';\n      customProgressText.textContent = withSpaces.toLocaleString() + ' / ' + customLimit.toLocaleString() + ' 文字';\n      if (withSpaces \u003e customLimit) {\n        customBar.className = 'over';\n        customProgressOver.style.display = 'inline';\n      } else if (pct \u003e= 80) {\n        customBar.className = 'warn';\n        customProgressOver.style.display = 'none';\n      } else {\n        customBar.className = '';\n        customProgressOver.style.display = 'none';\n      }\n    }\n\n    // 文字頻度チャート\n    var freq = getCharFrequency(text);\n    drawDensityChart(freq);\n  }\n\n  function showToast() {\n    toast.classList.add('show');\n    setTimeout(function() { toast.classList.remove('show'); }, 2000);\n  }\n\n  ta.addEventListener('input', updateStats);\n\n  limitInput.addEventListener('input', function() {\n    var v = parseInt(limitInput.value, 10);\n    customLimit = (isNaN(v) || v \u003c= 0) ? 0 : v;\n    if (customLimit \u003e 0) {\n      customProgressWrap.style.display = 'block';\n    } else {\n      customProgressWrap.style.display = 'none';\n    }\n    updateStats();\n  });\n\n  document.getElementById('cc-copy-btn').addEventListener('click', function() {\n    var text = ta.value;\n    if (!text) return;\n    if (navigator.clipboard \u0026\u0026 navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).then(showToast);\n    } else {\n      ta.select();\n      document.execCommand('copy');\n      showToast();\n    }\n  });\n\n  document.getElementById('cc-clear-btn').addEventListener('click', function() {\n    ta.value = '';\n    updateStats();\n    ta.focus();\n  });\n\n  window.addEventListener('resize', function() {\n    var freq = getCharFrequency(ta.value);\n    drawDensityChart(freq);\n  });\n\n  updateStats();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"文字数カウンターの使い方\"\u003e文字数カウンターの使い方\u003c/h2\u003e\n\u003cp\u003eテキストエリアに文章を貼り付けるか入力するだけで、8つの統計値がリアルタイムで更新されます。インストール不要・登録不要で、すべてブラウザ上で動作します。\u003c/p\u003e","title":"文字数カウンター｜文字数・単語数・行数をリアルタイム表示【無料】"},{"content":"レスポンシブコンテナに最適な CSS aspect-ratio プロパティを即座に生成。JavaScriptなしで完璧な縦横比を維持できます。\nCSSアスペクト比ジェネレーター 16:9 4:3 1:1 21:9 9:16 3:2 2:3 横幅 : 高さ 最大幅（max-width） 100% ライブプレビュー 16 : 9 モダンCSS — aspect-ratio プロパティ 推奨 コピー padding-bottom ハック 旧ブラウザ対応 コピー フリーランス・法人の経費管理をもっとスマートに CSSを書くだけでなく、事業の経費・請求書・確定申告もスッキリ整理。freee会計なら面倒な経理を自動化できます。\nfreee会計を無料で試す → 使い方 aspect-ratio CSSプロパティは、要素のサイズが変わっても横縦比を固定するようブラウザに指示します。width: 100% と組み合わせることで、完全なレスポンシブコンテナを実現できます。\n.video-container { width: 100%; aspect-ratio: 16 / 9; } padding-bottom ハックは、aspect-ratio が対応していない古いブラウザ向けの代替手法です。パーセンテージ指定のpadding-bottomが常に親要素の横幅を基準に計算されるという仕様を利用しています。\nよく使われるアスペクト比 比率 主な用途 16:9 HD動画、YouTube埋め込み、ワイドスクリーン 4:3 旧来のテレビ、プレゼンテーション 1:1 正方形画像、Instagramポスト 21:9 映画的/ウルトラワイドのヒーローバナー 9:16 スマホ縦動画、ストーリーズ、リール 3:2 一眼レフ写真、カードサムネイル ブラウザ対応 aspect-ratio は全てのモダンブラウザ（Chrome 88+、Firefox 89+、Safari 15+、Edge 88+）でサポートされています。IE11や旧Safari向けには、上記で生成されたpadding-bottomフォールバックをご利用ください。\n関連ツール:\nアスペクト比計算機 — 比率から不明な辺を算出 CSS Flexboxジェネレーター — Flexboxレイアウトをビジュアルで構築 画像リサイザー — アスペクト比を維持したまま画像をリサイズ ","permalink":"https://productivity-works.com/ja/tools/css-aspect-ratio/","summary":"\u003cp\u003eレスポンシブコンテナに最適な CSS \u003ccode\u003easpect-ratio\u003c/code\u003e プロパティを即座に生成。JavaScriptなしで完璧な縦横比を維持できます。\u003c/p\u003e\n\u003cdiv id=\"ar-app\"\u003e\n\u003cstyle\u003e\n  #ar-app *,\n  #ar-app *::before,\n  #ar-app *::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n  #ar-app {\n    font-family: \"Hiragino Sans\", \"Hiragino Kaku Gothic ProN\", \"Noto Sans JP\", -apple-system, BlinkMacSystemFont, sans-serif;\n    font-size: 15px;\n    color: #1a1a2e;\n    background: #f8f9fc;\n    border-radius: 12px;\n    padding: 28px 24px;\n    max-width: 760px;\n    margin: 32px auto;\n  }\n  #ar-app h2 {\n    font-size: 1.2rem;\n    font-weight: 700;\n    margin-bottom: 20px;\n    color: #111827;\n  }\n  #ar-app .ar-presets {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin-bottom: 20px;\n  }\n  #ar-app .ar-preset-btn {\n    background: #fff;\n    border: 2px solid #d1d5db;\n    border-radius: 8px;\n    padding: 7px 14px;\n    font-size: 0.85rem;\n    font-weight: 700;\n    cursor: pointer;\n    color: #374151;\n    transition: border-color 0.15s, background 0.15s, color 0.15s;\n  }\n  #ar-app .ar-preset-btn:hover {\n    border-color: #6366f1;\n    color: #6366f1;\n  }\n  #ar-app .ar-preset-btn.active {\n    background: #6366f1;\n    border-color: #6366f1;\n    color: #fff;\n  }\n  #ar-app .ar-inputs {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 20px;\n    flex-wrap: wrap;\n  }\n  #ar-app .ar-inputs label {\n    font-size: 0.85rem;\n    font-weight: 600;\n    color: #6b7280;\n    white-space: nowrap;\n  }\n  #ar-app .ar-inputs input[type=\"number\"] {\n    width: 90px;\n    padding: 8px 10px;\n    border: 2px solid #d1d5db;\n    border-radius: 8px;\n    font-size: 1rem;\n    font-weight: 700;\n    color: #111827;\n    text-align: center;\n    outline: none;\n    transition: border-color 0.15s;\n  }\n  #ar-app .ar-inputs input[type=\"number\"]:focus {\n    border-color: #6366f1;\n  }\n  #ar-app .ar-sep {\n    font-size: 1.3rem;\n    font-weight: 700;\n    color: #9ca3af;\n    user-select: none;\n  }\n  #ar-app .ar-maxwidth-row {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin-bottom: 24px;\n    flex-wrap: wrap;\n  }\n  #ar-app .ar-maxwidth-row label {\n    font-size: 0.85rem;\n    font-weight: 600;\n    color: #6b7280;\n    white-space: nowrap;\n  }\n  #ar-app .ar-maxwidth-row input[type=\"range\"] {\n    flex: 1;\n    min-width: 120px;\n    max-width: 260px;\n    accent-color: #6366f1;\n    cursor: pointer;\n  }\n  #ar-app .ar-maxwidth-val {\n    font-size: 0.9rem;\n    font-weight: 700;\n    color: #6366f1;\n    min-width: 48px;\n  }\n  #ar-app .ar-preview-area {\n    margin-bottom: 24px;\n  }\n  #ar-app .ar-preview-label {\n    font-size: 0.8rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.07em;\n    color: #9ca3af;\n    margin-bottom: 10px;\n  }\n  #ar-app .ar-preview-wrapper {\n    background: #e5e7eb;\n    border-radius: 10px;\n    padding: 16px;\n    display: flex;\n    justify-content: center;\n    align-items: flex-start;\n    min-height: 80px;\n  }\n  #ar-app .ar-preview-box {\n    background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #a78bfa 100%);\n    border-radius: 8px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: #fff;\n    font-weight: 700;\n    font-size: 1rem;\n    letter-spacing: 0.03em;\n    transition: aspect-ratio 0.25s, max-width 0.25s;\n  }\n  #ar-app .ar-code-section {\n    display: flex;\n    flex-direction: column;\n    gap: 16px;\n  }\n  #ar-app .ar-code-block {\n    background: #1e1b2e;\n    border-radius: 10px;\n    padding: 18px 18px 14px;\n    position: relative;\n  }\n  #ar-app .ar-code-title {\n    font-size: 0.75rem;\n    font-weight: 700;\n    letter-spacing: 0.05em;\n    color: #a78bfa;\n    margin-bottom: 10px;\n  }\n  #ar-app .ar-code-title .ar-badge {\n    display: inline-block;\n    background: #312e81;\n    color: #c4b5fd;\n    border-radius: 4px;\n    font-size: 0.7rem;\n    padding: 1px 6px;\n    margin-left: 6px;\n    font-weight: 600;\n    vertical-align: middle;\n  }\n  #ar-app .ar-code-title .ar-badge-old {\n    background: #3b2a1a;\n    color: #fbbf24;\n  }\n  #ar-app pre {\n    margin: 0;\n    font-family: \"Fira Mono\", \"Consolas\", \"Monaco\", monospace;\n    font-size: 0.85rem;\n    line-height: 1.7;\n    color: #e2e8f0;\n    white-space: pre-wrap;\n    word-break: break-all;\n    overflow-x: auto;\n  }\n  #ar-app .ar-prop    { color: #93c5fd; }\n  #ar-app .ar-val     { color: #6ee7b7; }\n  #ar-app .ar-unit    { color: #fcd34d; }\n  #ar-app .ar-sel     { color: #f9a8d4; }\n  #ar-app .ar-comment { color: #6b7280; font-style: italic; }\n  #ar-app .ar-copy-btn {\n    position: absolute;\n    top: 14px;\n    right: 14px;\n    background: #312e81;\n    border: none;\n    border-radius: 6px;\n    color: #c4b5fd;\n    font-size: 0.78rem;\n    font-weight: 700;\n    padding: 5px 12px;\n    cursor: pointer;\n    transition: background 0.15s, color 0.15s;\n  }\n  #ar-app .ar-copy-btn:hover {\n    background: #6366f1;\n    color: #fff;\n  }\n  #ar-app .ar-copy-btn.copied {\n    background: #065f46;\n    color: #6ee7b7;\n  }\n  #ar-app .ar-freee-cta {\n    margin-top: 32px;\n    background: linear-gradient(135deg, #1d4ed8 0%, #4338ca 100%);\n    border-radius: 12px;\n    padding: 22px 22px 20px;\n    color: #fff;\n  }\n  #ar-app .ar-freee-cta h3 {\n    font-size: 1rem;\n    font-weight: 700;\n    margin-bottom: 8px;\n    color: #fff;\n  }\n  #ar-app .ar-freee-cta p {\n    font-size: 0.87rem;\n    line-height: 1.6;\n    color: #bfdbfe;\n    margin-bottom: 14px;\n  }\n  #ar-app .ar-freee-cta a {\n    display: inline-block;\n    background: #fff;\n    color: #1d4ed8;\n    font-weight: 700;\n    font-size: 0.9rem;\n    padding: 9px 22px;\n    border-radius: 8px;\n    text-decoration: none;\n    transition: background 0.15s, color 0.15s;\n  }\n  #ar-app .ar-freee-cta a:hover {\n    background: #eff6ff;\n  }\n  @media (max-width: 520px) {\n    #ar-app {\n      padding: 18px 12px;\n    }\n    #ar-app .ar-inputs input[type=\"number\"] {\n      width: 72px;\n    }\n    #ar-app .ar-maxwidth-row input[type=\"range\"] {\n      min-width: 80px;\n    }\n    #ar-app pre {\n      font-size: 0.78rem;\n    }\n  }\n\u003c/style\u003e\n\u003ch2\u003eCSSアスペクト比ジェネレーター\u003c/h2\u003e\n\u003cdiv class=\"ar-presets\" id=\"ar-presets\"\u003e\n  \u003cbutton class=\"ar-preset-btn active\" data-w=\"16\" data-h=\"9\"\u003e16:9\u003c/button\u003e\n  \u003cbutton class=\"ar-preset-btn\" data-w=\"4\" data-h=\"3\"\u003e4:3\u003c/button\u003e\n  \u003cbutton class=\"ar-preset-btn\" data-w=\"1\" data-h=\"1\"\u003e1:1\u003c/button\u003e\n  \u003cbutton class=\"ar-preset-btn\" data-w=\"21\" data-h=\"9\"\u003e21:9\u003c/button\u003e\n  \u003cbutton class=\"ar-preset-btn\" data-w=\"9\" data-h=\"16\"\u003e9:16\u003c/button\u003e\n  \u003cbutton class=\"ar-preset-btn\" data-w=\"3\" data-h=\"2\"\u003e3:2\u003c/button\u003e\n  \u003cbutton class=\"ar-preset-btn\" data-w=\"2\" data-h=\"3\"\u003e2:3\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ar-inputs\"\u003e\n  \u003clabel for=\"ar-width\"\u003e横幅\u003c/label\u003e\n  \u003cinput type=\"number\" id=\"ar-width\" min=\"1\" max=\"9999\" value=\"16\" /\u003e\n  \u003cspan class=\"ar-sep\"\u003e:\u003c/span\u003e\n  \u003clabel for=\"ar-height\"\u003e高さ\u003c/label\u003e\n  \u003cinput type=\"number\" id=\"ar-height\" min=\"1\" max=\"9999\" value=\"9\" /\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ar-maxwidth-row\"\u003e\n  \u003clabel for=\"ar-maxwidth\"\u003e最大幅（max-width）\u003c/label\u003e\n  \u003cinput type=\"range\" id=\"ar-maxwidth\" min=\"10\" max=\"100\" value=\"100\" step=\"5\" /\u003e\n  \u003cspan class=\"ar-maxwidth-val\" id=\"ar-maxwidth-val\"\u003e100%\u003c/span\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ar-preview-area\"\u003e\n  \u003cdiv class=\"ar-preview-label\"\u003eライブプレビュー\u003c/div\u003e\n  \u003cdiv class=\"ar-preview-wrapper\" id=\"ar-preview-wrapper\"\u003e\n    \u003cdiv class=\"ar-preview-box\" id=\"ar-preview-box\"\u003e16 : 9\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ar-code-section\"\u003e\n  \u003cdiv class=\"ar-code-block\" id=\"ar-block-modern\"\u003e\n    \u003cdiv class=\"ar-code-title\"\u003e\n      モダンCSS — aspect-ratio プロパティ\n      \u003cspan class=\"ar-badge\"\u003e推奨\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cbutton class=\"ar-copy-btn\" id=\"ar-copy-modern\" onclick=\"arCopy('modern')\"\u003eコピー\u003c/button\u003e\n    \u003cpre id=\"ar-pre-modern\"\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"ar-code-block\" id=\"ar-block-hack\"\u003e\n    \u003cdiv class=\"ar-code-title\"\u003e\n      padding-bottom ハック\n      \u003cspan class=\"ar-badge ar-badge-old\"\u003e旧ブラウザ対応\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cbutton class=\"ar-copy-btn\" id=\"ar-copy-hack\" onclick=\"arCopy('hack')\"\u003eコピー\u003c/button\u003e\n    \u003cpre id=\"ar-pre-hack\"\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"ar-freee-cta\"\u003e\n  \u003ch3\u003eフリーランス・法人の経費管理をもっとスマートに\u003c/h3\u003e\n  \u003cp\u003eCSSを書くだけでなく、事業の経費・請求書・確定申告もスッキリ整理。freee会計なら面倒な経理を自動化できます。\u003c/p\u003e","title":"CSSアスペクト比ジェネレーター — レスポンシブコンテナ"},{"content":" デイリープランナー \u0026#8592; \u0026#8594; 今日 \u0026#128438; 印刷 \u0026lt;!-- Add Block Form --\u0026gt; \u0026lt;div class=\u0026quot;dp-card\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;タイムブロックを追加\u0026lt;/h3\u0026gt; \u0026lt;div class=\u0026quot;dp-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;タイトル\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;dp-title\u0026quot; placeholder=\u0026quot;例：チームミーティング\u0026quot; maxlength=\u0026quot;60\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;dp-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;カテゴリ\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;dp-cat-chips\u0026quot; id=\u0026quot;dp-cat-chips\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;select id=\u0026quot;dp-cat-select\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;仕事\u0026quot;\u0026gt;仕事\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;ミーティング\u0026quot;\u0026gt;ミーティング\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;プライベート\u0026quot;\u0026gt;プライベート\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;運動\u0026quot;\u0026gt;運動\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;休憩\u0026quot;\u0026gt;休憩\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;その他\u0026quot;\u0026gt;その他\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;dp-time-row\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;dp-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;開始\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;time\u0026quot; id=\u0026quot;dp-start\u0026quot; value=\u0026quot;09:00\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;dp-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;終了\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;time\u0026quot; id=\u0026quot;dp-end\u0026quot; value=\u0026quot;10:00\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;dp-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;カラー\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;dp-color-row\u0026quot; id=\u0026quot;dp-color-row\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;dp-btn dp-btn-primary\u0026quot; style=\u0026quot;width:100%;margin-top:4px\u0026quot; onclick=\u0026quot;dpAddBlock()\u0026quot;\u0026gt;＋ 追加\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Summary --\u0026gt; \u0026lt;div class=\u0026quot;dp-card\u0026quot;\u0026gt; \u0026lt;h3\u0026gt;カテゴリ別集計\u0026lt;/h3\u0026gt; \u0026lt;ul class=\u0026quot;dp-summary-list\u0026quot; id=\u0026quot;dp-summary\u0026quot;\u0026gt;\u0026lt;/ul\u0026gt; \u0026lt;div class=\u0026quot;dp-total-hrs\u0026quot; id=\u0026quot;dp-total-hrs\u0026quot; style=\u0026quot;display:none\u0026quot;\u0026gt; 合計予定時間: \u0026lt;span id=\u0026quot;dp-total-val\u0026quot;\u0026gt;0時間\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; スケジュール管理と一緒に、請求・経費もクラウドで\nfreee会計なら、請求書作成・経費精算・確定申告までまとめて管理。個人事業主・フリーランスにも最適。無料トライアル実施中。 freeeを無料で試す → 集中力を高める → ポモドーロタイマー 習慣を継続する → 習慣トラッカー タスクを整理する → カンバンボード 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 ChatGPTを仕事で使う具体的な活用法10選【2026年最新版】 リモートワーク生産性を上げる方法15選【在宅勤務のコツ・ツール・環境構築】 ","permalink":"https://productivity-works.com/ja/tools/daily-planner/","summary":"\u003cdiv id=\"dp-app\"\u003e\n\u003cstyle\u003e\n/* ── Reset \u0026 base ── */\n#dp-app *,#dp-app *::before,#dp-app *::after{box-sizing:border-box;margin:0;padding:0}\n#dp-app{\n  font-family:'Hiragino Sans','Noto Sans JP','Yu Gothic UI',sans-serif;\n  font-size:15px;line-height:1.6;\n  color:#e2e8f0;\n  background:#0f172a;\n  border-radius:12px;\n  padding:24px;\n  max-width:960px;\n  margin:0 auto;\n}\n\u003cp\u003e/* ── Header ── */\n#dp-app .dp-header{\ndisplay:flex;flex-wrap:wrap;align-items:center;gap:12px;\nmargin-bottom:24px;padding-bottom:16px;\nborder-bottom:1px solid #1e293b;\n}\n#dp-app .dp-header h2{font-size:1.3rem;font-weight:700;color:#f1f5f9;flex:1}\n#dp-app .dp-date-nav{display:flex;align-items:center;gap:8px}\n#dp-app .dp-date-nav button{\nbackground:#1e293b;border:none;color:#94a3b8;\npadding:6px 10px;border-radius:7px;cursor:pointer;font-size:1rem;\ntransition:background 0.15s,color 0.15s;\n}\n#dp-app .dp-date-nav button:hover{background:#334155;color:#f1f5f9}\n#dp-app .dp-date-input{\nbackground:#1e293b;border:1px solid #334155;color:#e2e8f0;\npadding:7px 10px;border-radius:7px;font-size:0.875rem;outline:none;\ntransition:border-color 0.15s;\n}\n#dp-app .dp-date-input:focus{border-color:#6366f1}\n#dp-app .dp-btn{\npadding:8px 18px;border-radius:8px;border:none;cursor:pointer;\nfont-size:0.875rem;font-weight:600;transition:opacity 0.15s;\n}\n#dp-app .dp-btn:hover{opacity:0.85}\n#dp-app .dp-btn-primary{background:#6366f1;color:#fff}\n#dp-app .dp-btn-sm{padding:5px 12px;font-size:0.8rem;border-radius:6px}\n#dp-app .dp-btn-danger{background:#ef4444;color:#fff}\n#dp-app .dp-btn-ghost{background:transparent;border:1px solid #334155;color:#94a3b8}\n#dp-app .dp-btn-ghost:hover{border-color:#6366f1;color:#e2e8f0}\n#dp-app .dp-btn-print{background:#0f766e;color:#fff}\u003c/p\u003e","title":"デイリープランナー"},{"content":"特殊文字をHTMLエンティティに変換、またはHTMLエンティティを元の文字に戻す作業をブラウザ上で即時実行できます。データはサーバーに送信されません。\nエンコード デコード 入力（テキスト） \u0026#8646; 出力（HTMLエンティティ） 出力をコピー クリア コピーしました！ HTMLエンティティ 参照一覧 文字 名前付きエンティティ 数値参照（10進） 数値参照（16進） 説明 該当するエンティティが見つかりません。 関連ツール URLをパーセントエンコーディングで安全に変換 → URLエンコーダー テキストのケース（大文字・小文字・camelCase等）を変換 → ケースコンバーター 余分な空白・空行を一括削除 → ホワイトスペース除去ツール Web開発の経費管理にはfreee\nfreeeを無料で試す\n","permalink":"https://productivity-works.com/ja/tools/html-entity-encoder/","summary":"\u003cp\u003e特殊文字をHTMLエンティティに変換、またはHTMLエンティティを元の文字に戻す作業をブラウザ上で即時実行できます。データはサーバーに送信されません。\u003c/p\u003e\n\u003cdiv id=\"html-enc-app\"\u003e\n\u003cstyle\u003e\n#html-enc-app {\n  font-family: system-ui, -apple-system, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#html-enc-app *,\n#html-enc-app *::before,\n#html-enc-app *::after {\n  box-sizing: border-box;\n}\n#html-enc-app h2 {\n  font-size: 1.1rem;\n  font-weight: 700;\n  color: #475569;\n  margin: 1.5rem 0 0.5rem;\n  border-left: 4px solid #f97316;\n  padding-left: 0.6rem;\n}\n#html-enc-app .enc-mode-bar {\n  display: flex;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n  flex-wrap: wrap;\n}\n#html-enc-app .enc-mode-btn {\n  padding: 0.45rem 1.2rem;\n  border: 2px solid #475569;\n  border-radius: 6px;\n  background: #fff;\n  color: #475569;\n  font-size: 0.95rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n#html-enc-app .enc-mode-btn.active {\n  background: #f97316;\n  border-color: #f97316;\n  color: #fff;\n}\n#html-enc-app .enc-mode-btn:hover:not(.active) {\n  background: #f1f5f9;\n}\n#html-enc-app .enc-textarea-row {\n  display: grid;\n  grid-template-columns: 1fr auto 1fr;\n  gap: 0.75rem;\n  align-items: start;\n}\n@media (max-width: 600px) {\n  #html-enc-app .enc-textarea-row {\n    grid-template-columns: 1fr;\n  }\n  #html-enc-app .enc-swap-col {\n    display: flex;\n    justify-content: center;\n  }\n}\n#html-enc-app .enc-col label {\n  display: block;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 0.3rem;\n  font-size: 0.92rem;\n}\n#html-enc-app textarea {\n  width: 100%;\n  min-height: 180px;\n  padding: 0.75rem;\n  border: 2px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 0.93rem;\n  font-family: 'Courier New', monospace;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.15s;\n  color: #1e293b;\n  background: #f8fafc;\n}\n#html-enc-app textarea:focus {\n  border-color: #f97316;\n  background: #fff;\n}\n#html-enc-app textarea[readonly] {\n  background: #f1f5f9;\n  color: #475569;\n  cursor: default;\n}\n#html-enc-app .enc-swap-col {\n  display: flex;\n  align-items: center;\n  padding-top: 1.6rem;\n}\n#html-enc-app .enc-swap-btn {\n  background: #fff;\n  border: 2px solid #475569;\n  border-radius: 50%;\n  width: 40px;\n  height: 40px;\n  cursor: pointer;\n  font-size: 1.1rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #475569;\n  transition: background 0.15s, color 0.15s;\n  flex-shrink: 0;\n}\n#html-enc-app .enc-swap-btn:hover {\n  background: #f97316;\n  border-color: #f97316;\n  color: #fff;\n}\n#html-enc-app .enc-actions {\n  display: flex;\n  gap: 0.5rem;\n  margin-top: 0.6rem;\n  flex-wrap: wrap;\n}\n#html-enc-app .enc-btn {\n  padding: 0.4rem 1rem;\n  border-radius: 6px;\n  font-size: 0.88rem;\n  font-weight: 600;\n  cursor: pointer;\n  border: 2px solid #f97316;\n  background: #f97316;\n  color: #fff;\n  transition: opacity 0.15s;\n}\n#html-enc-app .enc-btn:hover {\n  opacity: 0.85;\n}\n#html-enc-app .enc-btn.secondary {\n  background: #fff;\n  color: #475569;\n  border-color: #475569;\n}\n#html-enc-app .enc-btn.secondary:hover {\n  background: #f1f5f9;\n  opacity: 1;\n}\n#html-enc-app .enc-copy-msg {\n  font-size: 0.82rem;\n  color: #16a34a;\n  align-self: center;\n  display: none;\n}\n#html-enc-app .enc-copy-msg.visible {\n  display: inline;\n}\n/* Entity table */\n#html-enc-app .enc-search-row {\n  display: flex;\n  gap: 0.5rem;\n  margin-bottom: 0.75rem;\n  align-items: center;\n}\n#html-enc-app .enc-search {\n  flex: 1;\n  padding: 0.45rem 0.75rem;\n  border: 2px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 0.92rem;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#html-enc-app .enc-search:focus {\n  border-color: #f97316;\n}\n#html-enc-app .enc-table-wrap {\n  overflow-x: auto;\n  border-radius: 8px;\n  border: 1px solid #e2e8f0;\n}\n#html-enc-app table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.9rem;\n}\n#html-enc-app thead th {\n  background: #475569;\n  color: #fff;\n  padding: 0.5rem 0.75rem;\n  text-align: left;\n  font-weight: 600;\n  white-space: nowrap;\n}\n#html-enc-app tbody tr:nth-child(even) {\n  background: #f8fafc;\n}\n#html-enc-app tbody tr:hover {\n  background: #fff7ed;\n}\n#html-enc-app td {\n  padding: 0.45rem 0.75rem;\n  border-top: 1px solid #e2e8f0;\n  font-family: 'Courier New', monospace;\n  vertical-align: middle;\n}\n#html-enc-app td.render {\n  font-family: system-ui, sans-serif;\n  font-size: 1.1rem;\n  text-align: center;\n}\n#html-enc-app .enc-use-btn {\n  padding: 0.25rem 0.65rem;\n  font-size: 0.8rem;\n  border: 1px solid #f97316;\n  background: #fff;\n  color: #f97316;\n  border-radius: 5px;\n  cursor: pointer;\n  font-weight: 600;\n  transition: background 0.12s, color 0.12s;\n}\n#html-enc-app .enc-use-btn:hover {\n  background: #f97316;\n  color: #fff;\n}\n#html-enc-app .enc-no-results {\n  padding: 1rem;\n  text-align: center;\n  color: #94a3b8;\n  font-style: italic;\n  display: none;\n}\n\u003c/style\u003e\n\u003cdiv class=\"enc-mode-bar\"\u003e\n  \u003cbutton class=\"enc-mode-btn active\" id=\"enc-btn-encode\" onclick=\"encSetMode('encode')\"\u003eエンコード\u003c/button\u003e\n  \u003cbutton class=\"enc-mode-btn\" id=\"enc-btn-decode\" onclick=\"encSetMode('decode')\"\u003eデコード\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"enc-textarea-row\"\u003e\n  \u003cdiv class=\"enc-col\"\u003e\n    \u003clabel for=\"enc-input\" id=\"enc-input-label\"\u003e入力（テキスト）\u003c/label\u003e\n    \u003ctextarea id=\"enc-input\" placeholder=\"テキストをここに入力またはペーストしてください...\" oninput=\"encProcess()\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"enc-swap-col\"\u003e\n    \u003cbutton class=\"enc-swap-btn\" title=\"入力と出力を入れ替える\" onclick=\"encSwap()\"\u003e\u0026#8646;\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"enc-col\"\u003e\n    \u003clabel for=\"enc-output\" id=\"enc-output-label\"\u003e出力（HTMLエンティティ）\u003c/label\u003e\n    \u003ctextarea id=\"enc-output\" readonly placeholder=\"変換結果がここに表示されます...\"\u003e\u003c/textarea\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"enc-actions\"\u003e\n  \u003cbutton class=\"enc-btn\" onclick=\"encCopy()\"\u003e出力をコピー\u003c/button\u003e\n  \u003cbutton class=\"enc-btn secondary\" onclick=\"encClear()\"\u003eクリア\u003c/button\u003e\n  \u003cspan class=\"enc-copy-msg\" id=\"enc-copy-msg\"\u003eコピーしました！\u003c/span\u003e\n\u003c/div\u003e\n\u003ch2\u003eHTMLエンティティ 参照一覧\u003c/h2\u003e\n\u003cdiv class=\"enc-search-row\"\u003e\n  \u003cinput class=\"enc-search\" id=\"enc-search\" type=\"text\" placeholder=\"名前、エンティティ、文字で検索...\" oninput=\"encFilterTable()\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"enc-table-wrap\"\u003e\n  \u003ctable id=\"enc-table\"\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n        \u003cth\u003e文字\u003c/th\u003e\n        \u003cth\u003e名前付きエンティティ\u003c/th\u003e\n        \u003cth\u003e数値参照（10進）\u003c/th\u003e\n        \u003cth\u003e数値参照（16進）\u003c/th\u003e\n        \u003cth\u003e説明\u003c/th\u003e\n        \u003cth\u003e\u003c/th\u003e\n      \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody id=\"enc-tbody\"\u003e\u003c/tbody\u003e\n  \u003c/table\u003e\n  \u003cdiv class=\"enc-no-results\" id=\"enc-no-results\"\u003e該当するエンティティが見つかりません。\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  var encMode = 'encode';\n\n  var ENTITIES = [\n    ['\u0026', '\u0026amp;', '\u0026#38;', '\u0026#x26;', 'アンパサンド'],\n    ['\u003c', '\u0026lt;', '\u0026#60;', '\u0026#x3C;', '小なり記号'],\n    ['\u003e', '\u0026gt;', '\u0026#62;', '\u0026#x3E;', '大なり記号'],\n    ['\"', '\u0026quot;', '\u0026#34;', '\u0026#x22;', '二重引用符'],\n    [\"'\", '\u0026apos;', '\u0026#39;', '\u0026#x27;', 'アポストロフィ'],\n    [' ', '\u0026nbsp;', '\u0026#160;', '\u0026#xA0;', 'ノーブレークスペース'],\n    ['©', '\u0026copy;', '\u0026#169;', '\u0026#xA9;', '著作権マーク'],\n    ['®', '\u0026reg;', '\u0026#174;', '\u0026#xAE;', '登録商標マーク'],\n    ['™', '\u0026trade;', '\u0026#8482;', '\u0026#x2122;', '商標マーク'],\n    ['€', '\u0026euro;', '\u0026#8364;', '\u0026#x20AC;', 'ユーロ記号'],\n    ['£', '\u0026pound;', '\u0026#163;', '\u0026#xA3;', 'ポンド記号'],\n    ['¥', '\u0026yen;', '\u0026#165;', '\u0026#xA5;', '円・人民元記号'],\n    ['¢', '\u0026cent;', '\u0026#162;', '\u0026#xA2;', 'セント記号'],\n    ['§', '\u0026sect;', '\u0026#167;', '\u0026#xA7;', 'セクション記号'],\n    ['¶', '\u0026para;', '\u0026#182;', '\u0026#xB6;', '段落記号（ピルクロー）'],\n    ['·', '\u0026middot;', '\u0026#183;', '\u0026#xB7;', 'ミドルドット'],\n    ['–', '\u0026ndash;', '\u0026#8211;', '\u0026#x2013;', 'エンダッシュ'],\n    ['—', '\u0026mdash;', '\u0026#8212;', '\u0026#x2014;', 'エムダッシュ'],\n    ['\\u2018', '\u0026lsquo;', '\u0026#8216;', '\u0026#x2018;', '左シングル引用符'],\n    ['\\u2019', '\u0026rsquo;', '\u0026#8217;', '\u0026#x2019;', '右シングル引用符'],\n    ['\\u201C', '\u0026ldquo;', '\u0026#8220;', '\u0026#x201C;', '左ダブル引用符'],\n    ['\\u201D', '\u0026rdquo;', '\u0026#8221;', '\u0026#x201D;', '右ダブル引用符'],\n    ['…', '\u0026hellip;', '\u0026#8230;', '\u0026#x2026;', '水平省略記号'],\n    ['•', '\u0026bull;', '\u0026#8226;', '\u0026#x2022;', '箇条書き記号'],\n    ['★', '', '\u0026#9733;', '\u0026#x2605;', '黒星'],\n    ['♠', '\u0026spades;', '\u0026#9824;', '\u0026#x2660;', 'スペード'],\n    ['♣', '\u0026clubs;', '\u0026#9827;', '\u0026#x2663;', 'クラブ'],\n    ['♥', '\u0026hearts;', '\u0026#9829;', '\u0026#x2665;', 'ハート'],\n    ['♦', '\u0026diams;', '\u0026#9830;', '\u0026#x2666;', 'ダイヤ'],\n    ['÷', '\u0026divide;', '\u0026#247;', '\u0026#xF7;', '除算記号'],\n    ['×', '\u0026times;', '\u0026#215;', '\u0026#xD7;', '乗算記号'],\n    ['±', '\u0026plusmn;', '\u0026#177;', '\u0026#xB1;', 'プラスマイナス記号'],\n    ['¼', '\u0026frac14;', '\u0026#188;', '\u0026#xBC;', '四分の一'],\n    ['½', '\u0026frac12;', '\u0026#189;', '\u0026#xBD;', '二分の一'],\n    ['¾', '\u0026frac34;', '\u0026#190;', '\u0026#xBE;', '四分の三'],\n    ['°', '\u0026deg;', '\u0026#176;', '\u0026#xB0;', '度記号'],\n    ['µ', '\u0026micro;', '\u0026#181;', '\u0026#xB5;', 'マイクロ記号'],\n    ['∞', '\u0026infin;', '\u0026#8734;', '\u0026#x221E;', '無限大'],\n    ['←', '\u0026larr;', '\u0026#8592;', '\u0026#x2190;', '左矢印'],\n    ['→', '\u0026rarr;', '\u0026#8594;', '\u0026#x2192;', '右矢印'],\n    ['↑', '\u0026uarr;', '\u0026#8593;', '\u0026#x2191;', '上矢印'],\n    ['↓', '\u0026darr;', '\u0026#8595;', '\u0026#x2193;', '下矢印'],\n  ];\n\n  function buildTable() {\n    var tbody = document.getElementById('enc-tbody');\n    var html = '';\n    for (var i = 0; i \u003c ENTITIES.length; i++) {\n      var e = ENTITIES[i];\n      html += '\u003ctr data-search=\"' + escAttr((e[0] + ' ' + e[1] + ' ' + e[2] + ' ' + e[3] + ' ' + e[4]).toLowerCase()) + '\"\u003e';\n      html += '\u003ctd class=\"render\"\u003e' + escHtml(e[0]) + '\u003c/td\u003e';\n      html += '\u003ctd\u003e' + (e[1] ? escHtml(e[1]) : '\u003cspan style=\"color:#94a3b8\"\u003e—\u003c/span\u003e') + '\u003c/td\u003e';\n      html += '\u003ctd\u003e' + escHtml(e[2]) + '\u003c/td\u003e';\n      html += '\u003ctd\u003e' + escHtml(e[3]) + '\u003c/td\u003e';\n      html += '\u003ctd style=\"font-family:system-ui,sans-serif;font-size:0.88rem\"\u003e' + escHtml(e[4]) + '\u003c/td\u003e';\n      html += '\u003ctd\u003e\u003cbutton class=\"enc-use-btn\" onclick=\"encUseEntity(' + i + ')\"\u003e挿入\u003c/button\u003e\u003c/td\u003e';\n      html += '\u003c/tr\u003e';\n    }\n    tbody.innerHTML = html;\n  }\n\n  function escHtml(str) {\n    return str.replace(/\u0026/g, '\u0026amp;').replace(/\u003c/g, '\u0026lt;').replace(/\u003e/g, '\u0026gt;').replace(/\"/g, '\u0026quot;');\n  }\n\n  function escAttr(str) {\n    return str.replace(/\"/g, '\u0026quot;');\n  }\n\n  window.encSetMode = function(mode) {\n    encMode = mode;\n    document.getElementById('enc-btn-encode').classList.toggle('active', mode === 'encode');\n    document.getElementById('enc-btn-decode').classList.toggle('active', mode === 'decode');\n    document.getElementById('enc-input-label').textContent = mode === 'encode' ? '入力（テキスト）' : '入力（HTMLエンティティ）';\n    document.getElementById('enc-output-label').textContent = mode === 'encode' ? '出力（HTMLエンティティ）' : '出力（テキスト）';\n    document.getElementById('enc-input').placeholder = mode === 'encode' ? 'テキストをここに入力またはペーストしてください...' : 'HTMLエンティティを含むテキストをペーストしてください...';\n    document.getElementById('enc-output').placeholder = mode === 'encode' ? 'HTMLエンティティがここに表示されます...' : 'デコードされたテキストがここに表示されます...';\n    encProcess();\n  };\n\n  window.encProcess = function() {\n    var input = document.getElementById('enc-input').value;\n    var output = '';\n    if (encMode === 'encode') {\n      output = encodeEntities(input);\n    } else {\n      output = decodeEntities(input);\n    }\n    document.getElementById('enc-output').value = output;\n  };\n\n  function encodeEntities(str) {\n    var result = '';\n    for (var i = 0; i \u003c str.length; i++) {\n      var cp = str.codePointAt(i);\n      var ch = str[i];\n      if (cp \u003e 0xFFFF) i++; // surrogate pair\n      if (cp === 38) { result += '\u0026amp;'; }\n      else if (cp === 60) { result += '\u0026lt;'; }\n      else if (cp === 62) { result += '\u0026gt;'; }\n      else if (cp === 34) { result += '\u0026quot;'; }\n      else if (cp === 39) { result += '\u0026apos;'; }\n      else if (cp \u003e 127) { result += '\u0026#' + cp + ';'; }\n      else { result += ch; }\n    }\n    return result;\n  }\n\n  function decodeEntities(str) {\n    var ta = document.createElement('textarea');\n    ta.innerHTML = str;\n    return ta.value;\n  }\n\n  window.encSwap = function() {\n    var inp = document.getElementById('enc-input');\n    var out = document.getElementById('enc-output');\n    var tmp = inp.value;\n    inp.value = out.value;\n    out.removeAttribute('readonly');\n    out.value = tmp;\n    out.setAttribute('readonly', '');\n    encProcess();\n  };\n\n  window.encCopy = function() {\n    var out = document.getElementById('enc-output').value;\n    if (!out) return;\n    if (navigator.clipboard) {\n      navigator.clipboard.writeText(out).then(showCopied);\n    } else {\n      var ta = document.createElement('textarea');\n      ta.value = out;\n      document.body.appendChild(ta);\n      ta.select();\n      document.execCommand('copy');\n      document.body.removeChild(ta);\n      showCopied();\n    }\n  };\n\n  function showCopied() {\n    var msg = document.getElementById('enc-copy-msg');\n    msg.classList.add('visible');\n    setTimeout(function() { msg.classList.remove('visible'); }, 2000);\n  }\n\n  window.encClear = function() {\n    document.getElementById('enc-input').value = '';\n    document.getElementById('enc-output').value = '';\n  };\n\n  window.encFilterTable = function() {\n    var q = document.getElementById('enc-search').value.toLowerCase();\n    var rows = document.querySelectorAll('#enc-tbody tr');\n    var any = false;\n    rows.forEach(function(row) {\n      var match = !q || row.dataset.search.indexOf(q) !== -1;\n      row.style.display = match ? '' : 'none';\n      if (match) any = true;\n    });\n    document.getElementById('enc-no-results').style.display = any ? 'none' : 'block';\n  };\n\n  window.encUseEntity = function(idx) {\n    var entity = ENTITIES[idx][1] || ENTITIES[idx][2];\n    var inp = document.getElementById('enc-input');\n    var start = inp.selectionStart;\n    var end = inp.selectionEnd;\n    inp.value = inp.value.slice(0, start) + entity + inp.value.slice(end);\n    inp.setSelectionRange(start + entity.length, start + entity.length);\n    inp.focus();\n    encProcess();\n  };\n\n  buildTable();\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003ch2 id=\"関連ツール\"\u003e関連ツール\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003eURLをパーセントエンコーディングで安全に変換 → \u003ca href=\"https://productivity-works.com/ja/tools/url-encoder/\"\u003eURLエンコーダー\u003c/a\u003e\n\u003c/p\u003e","title":"HTML エンティティ エンコーダー / デコーダー"},{"content":"テンプレートを選んで入力するだけ。GitHubプロフィールに貼り付けられるREADMEのMarkdownを即座に生成します。\n関連ツール: マークダウンプレビュー • Gitコマンドジェネレーター テンプレート: シンプル 開発者 クリエイティブ プロフィール基本情報 名前 肩書き / 役割 GitHubユーザー名（統計カード用） ヘッダースタイル ウェーブ グラデーション タイピング シンプル 自己紹介 自己紹介文 現在取り組んでいること 現在学んでいること ちょっとした豆知識 スキル・技術スタック 使用している技術をクリックして選択\nSNS・連絡先 GitHub URL Twitter / X URL LinkedIn URL Zenn URL 個人サイト メールアドレス GitHub統計カード GitHubステータスカード ストリーク統計 使用言語カード カードテーマ デフォルト ダーク ラディカル Merko Gruvbox 東京ナイト One Dark コバルト シンスウェーブ ハイコントラスト 生成されたREADME.md README.mdをコピー コピー完了! 使い方 GitHubで自分のユーザー名と同じ名前のリポジトリを作成します（例: github.com/yamada-taro/yamada-taro） README.md ファイルを追加して初期化します 上で生成したMarkdownをそのまま貼り付けます コミット＆プッシュするとプロフィールページに自動表示されます 統計カードは github-readme-stats と streak-stats からリアルタイムデータを取得します。APIキーは不要です。\n関連ツール: マークダウンプレビュー • Gitコマンドジェネレーター 会計・経費管理をもっとラクに エンジニアとして副業・フリーランスで活動するなら、freee会計で確定申告・請求書・経費管理を自動化しましょう。\n※ 本ページのfreeeリンクはアフィリエイトリンクを含む場合があります（A8.net）。\n確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/github-readme-generator/","summary":"\u003cp\u003eテンプレートを選んで入力するだけ。GitHubプロフィールに貼り付けられるREADMEのMarkdownを即座に生成します。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e関連ツール:\u003c/strong\u003e \u003ca href=\"https://productivity-works.com/ja/tools/markdown-preview/\"\u003eマークダウンプレビュー\u003c/a\u003e\n • \u003ca href=\"https://productivity-works.com/ja/tools/git-command-generator/\"\u003eGitコマンドジェネレーター\u003c/a\u003e\n\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv id=\"gh-app\"\u003e\n\u003cstyle\u003e\n/* ── Reset \u0026 base ── */\n#gh-app *{box-sizing:border-box;margin:0;padding:0}\n#gh-app{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Hiragino Sans\",Meiryo,sans-serif;color:#24292f;--accent:#0969da;--border:#d0d7de;--bg:#f6f8fa;--radius:6px;--pad:16px}\n\n/* ── Layout ── */\n#gh-app .gh-wrap{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:16px}\n@media(max-width:820px){#gh-app .gh-wrap{grid-template-columns:1fr}}\n\n/* ── Panels ── */\n#gh-app .gh-panel{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:var(--pad)}\n#gh-app h2.gh-title{font-size:1rem;font-weight:600;margin-bottom:12px;display:flex;align-items:center;gap:6px}\n#gh-app h2.gh-title svg{flex-shrink:0}\n\n/* ── Toolbar ── */\n#gh-app .gh-toolbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px;align-items:center}\n#gh-app .gh-preset-btn{padding:6px 14px;border:1px solid var(--border);background:#fff;border-radius:20px;cursor:pointer;font-size:.85rem;transition:all .15s}\n#gh-app .gh-preset-btn.active,#gh-app .gh-preset-btn:hover{background:var(--accent);color:#fff;border-color:var(--accent)}\n\n/* ── Form ── */\n#gh-app .gh-field{margin-bottom:14px}\n#gh-app .gh-field label{display:block;font-size:.82rem;font-weight:600;color:#57606a;margin-bottom:4px}\n#gh-app .gh-field input,#gh-app .gh-field textarea,#gh-app .gh-field select{width:100%;padding:7px 10px;border:1px solid var(--border);border-radius:var(--radius);font-size:.9rem;font-family:inherit;background:#fff;transition:border .15s}\n#gh-app .gh-field input:focus,#gh-app .gh-field textarea:focus,#gh-app .gh-field select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(9,105,218,.15)}\n#gh-app .gh-field textarea{resize:vertical;min-height:64px}\n\n/* ── Skills ── */\n#gh-app .gh-skills-grid{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}\n#gh-app .gh-skill-tag{padding:4px 10px;border:1px solid var(--border);border-radius:20px;font-size:.78rem;cursor:pointer;user-select:none;transition:all .15s;background:#fff}\n#gh-app .gh-skill-tag.selected{background:var(--accent);color:#fff;border-color:var(--accent)}\n\n/* ── Header style ── */\n#gh-app .gh-style-grid{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px}\n#gh-app .gh-style-opt{padding:5px 12px;border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;font-size:.82rem;background:#fff;transition:all .15s}\n#gh-app .gh-style-opt.active{background:var(--accent);color:#fff;border-color:var(--accent)}\n\n/* ── Checkboxes ── */\n#gh-app .gh-checks{display:flex;flex-direction:column;gap:8px;margin-top:4px}\n#gh-app .gh-check-row{display:flex;align-items:center;gap:8px;font-size:.88rem;cursor:pointer}\n#gh-app .gh-check-row input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent);cursor:pointer}\n\n/* ── Preview ── */\n#gh-app .gh-preview{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:var(--pad);font-family:\"SFMono-Regular\",Consolas,monospace;font-size:.78rem;line-height:1.6;white-space:pre-wrap;word-break:break-all;max-height:620px;overflow-y:auto;color:#1f2328}\n\n/* ── Copy button ── */\n#gh-app .gh-copy-wrap{margin-top:10px;display:flex;gap:8px;align-items:center}\n#gh-app .gh-copy-btn{padding:9px 20px;background:var(--accent);color:#fff;border:none;border-radius:var(--radius);cursor:pointer;font-size:.9rem;font-weight:600;transition:background .15s;flex:1}\n#gh-app .gh-copy-btn:hover{background:#0757ba}\n#gh-app .gh-copy-msg{font-size:.82rem;color:#1a7f37;display:none;align-items:center;gap:4px;font-weight:600}\n#gh-app .gh-copy-msg.show{display:flex}\n\u003c/style\u003e\n\u003c!-- Toolbar --\u003e\n\u003cdiv class=\"gh-toolbar\"\u003e\n  \u003cspan style=\"font-size:.85rem;font-weight:600;color:#57606a\"\u003eテンプレート:\u003c/span\u003e\n  \u003cbutton class=\"gh-preset-btn\" onclick=\"ghApplyPreset('minimal')\"\u003eシンプル\u003c/button\u003e\n  \u003cbutton class=\"gh-preset-btn active\" onclick=\"ghApplyPreset('developer')\"\u003e開発者\u003c/button\u003e\n  \u003cbutton class=\"gh-preset-btn\" onclick=\"ghApplyPreset('creative')\"\u003eクリエイティブ\u003c/button\u003e\n\u003c/div\u003e\n\u003cdiv class=\"gh-wrap\"\u003e\n\u003c!-- LEFT: Form --\u003e\n\u003cdiv\u003e\n  \u003c!-- Identity --\u003e\n  \u003cdiv class=\"gh-panel\" style=\"margin-bottom:16px\"\u003e\n    \u003ch2 class=\"gh-title\"\u003e\n      \u003csvg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\u003e\u003ccircle cx=\"8\" cy=\"5\" r=\"3\" stroke=\"#57606a\" stroke-width=\"1.5\"/\u003e\u003cpath d=\"M2 14c0-3.314 2.686-6 6-6s6 2.686 6 6\" stroke=\"#57606a\" stroke-width=\"1.5\" stroke-linecap=\"round\"/\u003e\u003c/svg\u003e\n      プロフィール基本情報\n    \u003c/h2\u003e\n    \u003cdiv class=\"gh-field\"\u003e\u003clabel\u003e名前\u003c/label\u003e\u003cinput id=\"gh-name\" type=\"text\" placeholder=\"山田 太郎\" oninput=\"ghGenerate()\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"gh-field\"\u003e\u003clabel\u003e肩書き / 役割\u003c/label\u003e\u003cinput id=\"gh-title-input\" type=\"text\" placeholder=\"フルスタックエンジニア | OSS貢献者\" oninput=\"ghGenerate()\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"gh-field\"\u003e\u003clabel\u003eGitHubユーザー名（統計カード用）\u003c/label\u003e\u003cinput id=\"gh-user\" type=\"text\" placeholder=\"yamada-taro\" oninput=\"ghGenerate()\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"gh-field\"\u003e\n      \u003clabel\u003eヘッダースタイル\u003c/label\u003e\n      \u003cdiv class=\"gh-style-grid\"\u003e\n        \u003cdiv class=\"gh-style-opt active\" data-style=\"wave\" onclick=\"ghSetStyle('wave')\"\u003eウェーブ\u003c/div\u003e\n        \u003cdiv class=\"gh-style-opt\" data-style=\"gradient\" onclick=\"ghSetStyle('gradient')\"\u003eグラデーション\u003c/div\u003e\n        \u003cdiv class=\"gh-style-opt\" data-style=\"typing\" onclick=\"ghSetStyle('typing')\"\u003eタイピング\u003c/div\u003e\n        \u003cdiv class=\"gh-style-opt\" data-style=\"plain\" onclick=\"ghSetStyle('plain')\"\u003eシンプル\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- About --\u003e\n  \u003cdiv class=\"gh-panel\" style=\"margin-bottom:16px\"\u003e\n    \u003ch2 class=\"gh-title\"\u003e\n      \u003csvg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\u003e\u003crect x=\"2\" y=\"2\" width=\"12\" height=\"12\" rx=\"2\" stroke=\"#57606a\" stroke-width=\"1.5\"/\u003e\u003cpath d=\"M5 8h6M5 5.5h6M5 10.5h4\" stroke=\"#57606a\" stroke-width=\"1.5\" stroke-linecap=\"round\"/\u003e\u003c/svg\u003e\n      自己紹介\n    \u003c/h2\u003e\n    \u003cdiv class=\"gh-field\"\u003e\u003clabel\u003e自己紹介文\u003c/label\u003e\u003ctextarea id=\"gh-bio\" placeholder=\"Webアプリ開発が好きなエンジニアです。OSSへの貢献も積極的に行っています。\" oninput=\"ghGenerate()\"\u003e\u003c/textarea\u003e\u003c/div\u003e\n    \u003cdiv class=\"gh-field\"\u003e\u003clabel\u003e現在取り組んでいること\u003c/label\u003e\u003cinput id=\"gh-working\" type=\"text\" placeholder=\"オープンソースのCLIツール開発\" oninput=\"ghGenerate()\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"gh-field\"\u003e\u003clabel\u003e現在学んでいること\u003c/label\u003e\u003cinput id=\"gh-learning\" type=\"text\" placeholder=\"Rust、WebAssembly、GraphQL\" oninput=\"ghGenerate()\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"gh-field\"\u003e\u003clabel\u003eちょっとした豆知識\u003c/label\u003e\u003cinput id=\"gh-fun\" type=\"text\" placeholder=\"コーヒーなしではコードが書けません\" oninput=\"ghGenerate()\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- Skills --\u003e\n  \u003cdiv class=\"gh-panel\" style=\"margin-bottom:16px\"\u003e\n    \u003ch2 class=\"gh-title\"\u003e\n      \u003csvg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\u003e\u003cpath d=\"M5 4L2 8l3 4M11 4l3 4-3 4M8 2l-1.5 12\" stroke=\"#57606a\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/\u003e\u003c/svg\u003e\n      スキル・技術スタック\n    \u003c/h2\u003e\n    \u003cp style=\"font-size:.8rem;color:#57606a;margin-bottom:8px\"\u003e使用している技術をクリックして選択\u003c/p\u003e","title":"GitHubプロフィールREADMEジェネレーター"},{"content":" ドット絵エディター グリッド: 8×8 16×16 32×32 64×64 新規作成 ツール \u0026#9998; ペン \u0026#9723; 消しゴム \u0026#9724; 塗りつぶし \u0026#128449; スポイト \u0026lt;!-- Color --\u0026gt; \u0026lt;div class=\u0026quot;px-panel\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;px-panel-title\u0026quot;\u0026gt;カラー\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;px-color-preview\u0026quot;\u0026gt; \u0026lt;div id=\u0026quot;px-current-swatch\u0026quot; class=\u0026quot;px-current-swatch\u0026quot; title=\u0026quot;現在の色\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;div class=\u0026quot;px-color-label\u0026quot;\u0026gt;現在の色\u0026lt;/div\u0026gt; \u0026lt;div id=\u0026quot;px-color-hex-display\u0026quot; class=\u0026quot;px-color-hex\u0026quot;\u0026gt;#000000\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;px-custom-color\u0026quot; class=\u0026quot;px-custom-input\u0026quot; value=\u0026quot;#000000\u0026quot; title=\u0026quot;カスタムカラー\u0026quot;\u0026gt; \u0026lt;div style=\u0026quot;font-size:10px;color:#94a3b8;margin-top:4px;\u0026quot;\u0026gt;カスタムカラーを選択\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Palette --\u0026gt; \u0026lt;div class=\u0026quot;px-panel\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;px-panel-title\u0026quot;\u0026gt;パレット\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;px-palette\u0026quot; id=\u0026quot;px-palette\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Grid toggle --\u0026gt; \u0026lt;div class=\u0026quot;px-panel\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;px-panel-title\u0026quot;\u0026gt;表示\u0026lt;/div\u0026gt; \u0026lt;label class=\u0026quot;px-toggle\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;px-grid-toggle\u0026quot; checked\u0026gt; グリッド表示 \u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Actions --\u0026gt; \u0026lt;div class=\u0026quot;px-panel\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;px-panel-title\u0026quot;\u0026gt;操作\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;px-actions\u0026quot;\u0026gt; \u0026lt;button id=\u0026quot;px-btn-undo\u0026quot; class=\u0026quot;px-action-btn\u0026quot; disabled\u0026gt;\u0026amp;#8617; 元に戻す\u0026lt;/button\u0026gt; \u0026lt;button id=\u0026quot;px-btn-redo\u0026quot; class=\u0026quot;px-action-btn\u0026quot; disabled\u0026gt;\u0026amp;#8618; やり直し\u0026lt;/button\u0026gt; \u0026lt;button id=\u0026quot;px-btn-clear\u0026quot; class=\u0026quot;px-action-btn danger\u0026quot;\u0026gt;\u0026amp;#128465; クリア\u0026lt;/button\u0026gt; \u0026lt;button id=\u0026quot;px-btn-export\u0026quot; class=\u0026quot;px-action-btn primary\u0026quot;\u0026gt;\u0026amp;#128190; PNG書き出し\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Canvas area --\u0026gt; \u0026lt;div class=\u0026quot;px-canvas-area\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;px-zoom-bar\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;px-zoom-btn\u0026quot; id=\u0026quot;px-btn-zoom-out\u0026quot; title=\u0026quot;ズームアウト\u0026quot;\u0026gt;\u0026amp;#8722;\u0026lt;/button\u0026gt; \u0026lt;span class=\u0026quot;px-zoom-label\u0026quot; id=\u0026quot;px-zoom-label\u0026quot;\u0026gt;×16\u0026lt;/span\u0026gt; \u0026lt;button class=\u0026quot;px-zoom-btn\u0026quot; id=\u0026quot;px-btn-zoom-in\u0026quot; title=\u0026quot;ズームイン\u0026quot;\u0026gt;\u0026amp;#43;\u0026lt;/button\u0026gt; \u0026lt;span style=\u0026quot;font-size:11px;color:#94a3b8;margin-left:8px;\u0026quot;\u0026gt;右クリック: 消去\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;px-canvas-wrapper\u0026quot; id=\u0026quot;px-canvas-wrapper\u0026quot;\u0026gt; \u0026lt;canvas id=\u0026quot;px-canvas\u0026quot;\u0026gt;\u0026lt;/canvas\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;px-status\u0026quot; id=\u0026quot;px-status\u0026quot;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; 使い方 グリッドサイズを選択（8×8〜64×64） ツールを選択してキャンバスに描画 ペン: クリック・ドラッグで描画 消しゴム: クリック・ドラッグで消去（右クリックでも消去） 塗りつぶし: 隣接する同色のエリアを一括塗りつぶし スポイト: クリックした色を現在の色として取得 パレットから色を選択、またはカスタムカラーピッカーで任意の色を指定 元に戻す / やり直し（Ctrl+Z / Ctrl+Y）で作業履歴を管理 PNG書き出しで画像をダウンロード 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → アスキーアートを作成 → アスキーアートジェネレーター 画像から色を抽出 → 画像カラーピッカー ダミー画像を作成 → プレースホルダー画像生成ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/pixel-art-editor/","summary":"\u003cdiv id=\"px-app\"\u003e\n\u003cstyle\u003e\n#px-app *,\n#px-app *::before,\n#px-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#px-app {\n  font-family: 'Hiragino Kaku Gothic ProN', 'Hiragino Sans', Meiryo, sans-serif;\n  color: #1e293b;\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 16px 8px;\n}\n#px-app h2 {\n  font-size: 1.25rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin-bottom: 12px;\n}\n/* --- Layout --- */\n#px-app .px-layout {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n#px-app .px-row {\n  display: flex;\n  gap: 12px;\n  align-items: flex-start;\n  flex-wrap: wrap;\n}\n/* --- Sidebar --- */\n#px-app .px-sidebar {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  min-width: 160px;\n  flex: 0 0 160px;\n}\n#px-app .px-panel {\n  background: #f8fafc;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 10px 12px;\n}\n#px-app .px-panel-title {\n  font-size: 11px;\n  font-weight: 700;\n  color: #64748b;\n  letter-spacing: 0.05em;\n  text-transform: uppercase;\n  margin-bottom: 8px;\n}\n/* --- Tools --- */\n#px-app .px-tools {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 5px;\n}\n#px-app .px-tool-btn {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 3px;\n  padding: 7px 4px;\n  background: #fff;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  cursor: pointer;\n  font-size: 11px;\n  color: #374151;\n  font-weight: 600;\n  transition: all 0.15s;\n  line-height: 1.2;\n  text-align: center;\n  user-select: none;\n}\n#px-app .px-tool-btn:hover {\n  background: #e0f2fe;\n  border-color: #38bdf8;\n  color: #0369a1;\n}\n#px-app .px-tool-btn.active {\n  background: #0284c7;\n  border-color: #0284c7;\n  color: #fff;\n}\n#px-app .px-tool-icon {\n  font-size: 18px;\n  line-height: 1;\n}\n/* --- Color current --- */\n#px-app .px-color-preview {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 8px;\n}\n#px-app .px-current-swatch {\n  width: 36px;\n  height: 36px;\n  border-radius: 7px;\n  border: 2px solid #94a3b8;\n  cursor: pointer;\n  flex-shrink: 0;\n}\n#px-app .px-color-label {\n  font-size: 11px;\n  color: #64748b;\n  font-weight: 600;\n}\n#px-app .px-color-hex {\n  font-size: 11px;\n  color: #334155;\n  font-family: monospace;\n}\n#px-app .px-custom-input {\n  width: 100%;\n  height: 32px;\n  border-radius: 6px;\n  border: 1.5px solid #cbd5e1;\n  cursor: pointer;\n  background: #fff;\n}\n/* --- Palette --- */\n#px-app .px-palette {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 4px;\n}\n#px-app .px-palette-swatch {\n  width: 100%;\n  aspect-ratio: 1;\n  border-radius: 5px;\n  border: 2px solid transparent;\n  cursor: pointer;\n  transition: transform 0.1s, border-color 0.1s;\n}\n#px-app .px-palette-swatch:hover {\n  transform: scale(1.15);\n  border-color: #94a3b8;\n}\n#px-app .px-palette-swatch.selected {\n  border-color: #0284c7;\n  transform: scale(1.1);\n}\n/* --- Controls --- */\n#px-app .px-controls {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n#px-app .px-ctrl-row {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 12px;\n  color: #374151;\n}\n#px-app .px-ctrl-row label {\n  font-size: 11px;\n  color: #64748b;\n  font-weight: 600;\n  min-width: 36px;\n}\n#px-app .px-select {\n  flex: 1;\n  padding: 4px 6px;\n  border-radius: 6px;\n  border: 1.5px solid #cbd5e1;\n  font-size: 12px;\n  color: #1e293b;\n  background: #fff;\n  cursor: pointer;\n}\n#px-app .px-toggle {\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  font-size: 11px;\n  color: #374151;\n  cursor: pointer;\n  user-select: none;\n}\n#px-app .px-toggle input[type=\"checkbox\"] {\n  width: 14px;\n  height: 14px;\n  cursor: pointer;\n  accent-color: #0284c7;\n}\n/* --- Action buttons --- */\n#px-app .px-actions {\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n}\n#px-app .px-action-btn {\n  padding: 7px 10px;\n  border-radius: 7px;\n  border: 1.5px solid #cbd5e1;\n  background: #fff;\n  color: #374151;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  text-align: center;\n  transition: all 0.15s;\n  width: 100%;\n}\n#px-app .px-action-btn:hover {\n  background: #f1f5f9;\n  border-color: #94a3b8;\n}\n#px-app .px-action-btn:disabled {\n  opacity: 0.4;\n  cursor: not-allowed;\n}\n#px-app .px-action-btn.danger {\n  border-color: #fca5a5;\n  color: #dc2626;\n}\n#px-app .px-action-btn.danger:hover {\n  background: #fef2f2;\n}\n#px-app .px-action-btn.primary {\n  background: #0284c7;\n  border-color: #0284c7;\n  color: #fff;\n}\n#px-app .px-action-btn.primary:hover {\n  background: #0369a1;\n}\n/* --- Canvas area --- */\n#px-app .px-canvas-area {\n  flex: 1;\n  min-width: 0;\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 10px;\n}\n#px-app .px-zoom-bar {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n#px-app .px-zoom-btn {\n  width: 30px;\n  height: 30px;\n  border-radius: 6px;\n  border: 1.5px solid #cbd5e1;\n  background: #fff;\n  color: #374151;\n  font-size: 16px;\n  font-weight: 700;\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: all 0.12s;\n  line-height: 1;\n}\n#px-app .px-zoom-btn:hover {\n  background: #e0f2fe;\n  border-color: #38bdf8;\n}\n#px-app .px-zoom-label {\n  font-size: 12px;\n  color: #64748b;\n  font-weight: 600;\n  min-width: 40px;\n  text-align: center;\n}\n#px-app .px-canvas-wrapper {\n  overflow: auto;\n  border: 2px solid #cbd5e1;\n  border-radius: 8px;\n  background: #f1f5f9;\n  width: 100%;\n  max-width: 100%;\n  cursor: crosshair;\n  position: relative;\n  user-select: none;\n}\n#px-app canvas {\n  display: block;\n  image-rendering: pixelated;\n  image-rendering: crisp-edges;\n  cursor: crosshair;\n}\n/* --- Status bar --- */\n#px-app .px-status {\n  font-size: 11px;\n  color: #94a3b8;\n  height: 16px;\n}\n/* --- Responsive --- */\n@media (max-width: 600px) {\n  #px-app .px-row {\n    flex-direction: column;\n  }\n  #px-app .px-sidebar {\n    flex: none;\n    width: 100%;\n    flex-direction: row;\n    flex-wrap: wrap;\n  }\n  #px-app .px-panel {\n    flex: 1;\n    min-width: 140px;\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"px-layout\"\u003e\n  \u003c!-- Top controls row --\u003e\n  \u003cdiv class=\"px-row\" style=\"align-items:center;flex-wrap:wrap;gap:8px;\"\u003e\n    \u003cdiv style=\"font-size:13px;font-weight:700;color:#0f172a;\"\u003eドット絵エディター\u003c/div\u003e\n    \u003cdiv class=\"px-ctrl-row\" style=\"margin-left:auto;\"\u003e\n      \u003clabel for=\"px-size-select\"\u003eグリッド:\u003c/label\u003e\n      \u003cselect id=\"px-size-select\" class=\"px-select\" style=\"width:auto;\"\u003e\n        \u003coption value=\"8\"\u003e8×8\u003c/option\u003e\n        \u003coption value=\"16\" selected\u003e16×16\u003c/option\u003e\n        \u003coption value=\"32\"\u003e32×32\u003c/option\u003e\n        \u003coption value=\"64\"\u003e64×64\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n    \u003cbutton id=\"px-btn-new\" class=\"px-action-btn danger\" style=\"width:auto;padding:6px 14px;\"\u003e新規作成\u003c/button\u003e\n  \u003c/div\u003e\n  \u003c!-- Main row: sidebar + canvas --\u003e\n  \u003cdiv class=\"px-row\"\u003e\n    \u003c!-- Sidebar --\u003e\n    \u003cdiv class=\"px-sidebar\"\u003e\n      \u003c!-- Tools --\u003e\n      \u003cdiv class=\"px-panel\"\u003e\n        \u003cdiv class=\"px-panel-title\"\u003eツール\u003c/div\u003e\n        \u003cdiv class=\"px-tools\"\u003e\n          \u003cbutton class=\"px-tool-btn active\" data-tool=\"pen\" title=\"ペン\"\u003e\n            \u003cspan class=\"px-tool-icon\"\u003e\u0026#9998;\u003c/span\u003e\n            \u003cspan\u003eペン\u003c/span\u003e\n          \u003c/button\u003e\n          \u003cbutton class=\"px-tool-btn\" data-tool=\"eraser\" title=\"消しゴム\"\u003e\n            \u003cspan class=\"px-tool-icon\"\u003e\u0026#9723;\u003c/span\u003e\n            \u003cspan\u003e消しゴム\u003c/span\u003e\n          \u003c/button\u003e\n          \u003cbutton class=\"px-tool-btn\" data-tool=\"fill\" title=\"塗りつぶし\"\u003e\n            \u003cspan class=\"px-tool-icon\"\u003e\u0026#9724;\u003c/span\u003e\n            \u003cspan\u003e塗りつぶし\u003c/span\u003e\n          \u003c/button\u003e\n          \u003cbutton class=\"px-tool-btn\" data-tool=\"eyedropper\" title=\"スポイト\"\u003e\n            \u003cspan class=\"px-tool-icon\"\u003e\u0026#128449;\u003c/span\u003e\n            \u003cspan\u003eスポイト\u003c/span\u003e\n          \u003c/button\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n\u003cpre\u003e\u003ccode\u003e  \u0026lt;!-- Color --\u0026gt;\n  \u0026lt;div class=\u0026quot;px-panel\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;px-panel-title\u0026quot;\u0026gt;カラー\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;px-color-preview\u0026quot;\u0026gt;\n      \u0026lt;div id=\u0026quot;px-current-swatch\u0026quot; class=\u0026quot;px-current-swatch\u0026quot; title=\u0026quot;現在の色\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n      \u0026lt;div\u0026gt;\n        \u0026lt;div class=\u0026quot;px-color-label\u0026quot;\u0026gt;現在の色\u0026lt;/div\u0026gt;\n        \u0026lt;div id=\u0026quot;px-color-hex-display\u0026quot; class=\u0026quot;px-color-hex\u0026quot;\u0026gt;#000000\u0026lt;/div\u0026gt;\n      \u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;px-custom-color\u0026quot; class=\u0026quot;px-custom-input\u0026quot; value=\u0026quot;#000000\u0026quot; title=\u0026quot;カスタムカラー\u0026quot;\u0026gt;\n    \u0026lt;div style=\u0026quot;font-size:10px;color:#94a3b8;margin-top:4px;\u0026quot;\u0026gt;カスタムカラーを選択\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- Palette --\u0026gt;\n  \u0026lt;div class=\u0026quot;px-panel\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;px-panel-title\u0026quot;\u0026gt;パレット\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;px-palette\u0026quot; id=\u0026quot;px-palette\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- Grid toggle --\u0026gt;\n  \u0026lt;div class=\u0026quot;px-panel\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;px-panel-title\u0026quot;\u0026gt;表示\u0026lt;/div\u0026gt;\n    \u0026lt;label class=\u0026quot;px-toggle\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;px-grid-toggle\u0026quot; checked\u0026gt;\n      グリッド表示\n    \u0026lt;/label\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- Actions --\u0026gt;\n  \u0026lt;div class=\u0026quot;px-panel\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;px-panel-title\u0026quot;\u0026gt;操作\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;px-actions\u0026quot;\u0026gt;\n      \u0026lt;button id=\u0026quot;px-btn-undo\u0026quot; class=\u0026quot;px-action-btn\u0026quot; disabled\u0026gt;\u0026amp;#8617; 元に戻す\u0026lt;/button\u0026gt;\n      \u0026lt;button id=\u0026quot;px-btn-redo\u0026quot; class=\u0026quot;px-action-btn\u0026quot; disabled\u0026gt;\u0026amp;#8618; やり直し\u0026lt;/button\u0026gt;\n      \u0026lt;button id=\u0026quot;px-btn-clear\u0026quot; class=\u0026quot;px-action-btn danger\u0026quot;\u0026gt;\u0026amp;#128465; クリア\u0026lt;/button\u0026gt;\n      \u0026lt;button id=\u0026quot;px-btn-export\u0026quot; class=\u0026quot;px-action-btn primary\u0026quot;\u0026gt;\u0026amp;#128190; PNG書き出し\u0026lt;/button\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\n\u0026lt;!-- Canvas area --\u0026gt;\n\u0026lt;div class=\u0026quot;px-canvas-area\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;px-zoom-bar\u0026quot;\u0026gt;\n    \u0026lt;button class=\u0026quot;px-zoom-btn\u0026quot; id=\u0026quot;px-btn-zoom-out\u0026quot; title=\u0026quot;ズームアウト\u0026quot;\u0026gt;\u0026amp;#8722;\u0026lt;/button\u0026gt;\n    \u0026lt;span class=\u0026quot;px-zoom-label\u0026quot; id=\u0026quot;px-zoom-label\u0026quot;\u0026gt;×16\u0026lt;/span\u0026gt;\n    \u0026lt;button class=\u0026quot;px-zoom-btn\u0026quot; id=\u0026quot;px-btn-zoom-in\u0026quot; title=\u0026quot;ズームイン\u0026quot;\u0026gt;\u0026amp;#43;\u0026lt;/button\u0026gt;\n    \u0026lt;span style=\u0026quot;font-size:11px;color:#94a3b8;margin-left:8px;\u0026quot;\u0026gt;右クリック: 消去\u0026lt;/span\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;px-canvas-wrapper\u0026quot; id=\u0026quot;px-canvas-wrapper\u0026quot;\u0026gt;\n    \u0026lt;canvas id=\u0026quot;px-canvas\u0026quot;\u0026gt;\u0026lt;/canvas\u0026gt;\n  \u0026lt;/div\u0026gt;\n  \u0026lt;div class=\u0026quot;px-status\u0026quot; id=\u0026quot;px-status\u0026quot;\u0026gt;\u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  // --- Palette (16 colors, slate-inspired) ---\n  var PALETTE = [\n    '#000000','#334155','#64748b','#94a3b8',\n    '#ffffff','#f8fafc','#fef08a','#fb923c',\n    '#f87171','#e879f9','#818cf8','#60a5fa',\n    '#34d399','#4ade80','#a78bfa','#f472b6'\n  ];\n\n  // --- State ---\n  var gridSize = 16;\n  var cellSize = 16;\n  var showGrid = true;\n  var currentColor = '#000000';\n  var currentTool = 'pen';\n  var isDrawing = false;\n  var lastCell = null;\n\n  var pixels = [];       // flat array of color strings or null\n  var undoStack = [];\n  var redoStack = [];\n  var MAX_HISTORY = 20;\n\n  // --- DOM refs ---\n  var canvas = document.getElementById('px-canvas');\n  var ctx = canvas.getContext('2d');\n  var wrapper = document.getElementById('px-canvas-wrapper');\n  var sizeSelect = document.getElementById('px-size-select');\n  var gridToggle = document.getElementById('px-grid-toggle');\n  var currentSwatch = document.getElementById('px-current-swatch');\n  var hexDisplay = document.getElementById('px-color-hex-display');\n  var customColor = document.getElementById('px-custom-color');\n  var paletteEl = document.getElementById('px-palette');\n  var btnUndo = document.getElementById('px-btn-undo');\n  var btnRedo = document.getElementById('px-btn-redo');\n  var btnClear = document.getElementById('px-btn-clear');\n  var btnExport = document.getElementById('px-btn-export');\n  var btnNew = document.getElementById('px-btn-new');\n  var btnZoomIn = document.getElementById('px-btn-zoom-in');\n  var btnZoomOut = document.getElementById('px-btn-zoom-out');\n  var zoomLabel = document.getElementById('px-zoom-label');\n  var statusEl = document.getElementById('px-status');\n  var toolBtns = document.querySelectorAll('#px-app .px-tool-btn');\n\n  // --- Init pixels ---\n  function initPixels() {\n    pixels = new Array(gridSize * gridSize).fill(null);\n  }\n\n  // --- Canvas sizing ---\n  function resizeCanvas() {\n    canvas.width = gridSize * cellSize;\n    canvas.height = gridSize * cellSize;\n    zoomLabel.textContent = '\\xd7' + cellSize;\n  }\n\n  // --- Draw ---\n  function render() {\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n    // Draw pixels\n    for (var i = 0; i \u003c pixels.length; i++) {\n      if (pixels[i]) {\n        var col = i % gridSize;\n        var row = Math.floor(i / gridSize);\n        ctx.fillStyle = pixels[i];\n        ctx.fillRect(col * cellSize, row * cellSize, cellSize, cellSize);\n      }\n    }\n\n    // Draw checkerboard for empty cells\n    for (var i = 0; i \u003c pixels.length; i++) {\n      if (!pixels[i]) {\n        var col = i % gridSize;\n        var row = Math.floor(i / gridSize);\n        var light = (col + row) % 2 === 0;\n        ctx.fillStyle = light ? '#e2e8f0' : '#cbd5e1';\n        ctx.fillRect(col * cellSize, row * cellSize, cellSize, cellSize);\n      }\n    }\n\n    // Draw grid\n    if (showGrid \u0026\u0026 cellSize \u003e= 4) {\n      ctx.strokeStyle = 'rgba(100,116,139,0.35)';\n      ctx.lineWidth = 0.5;\n      for (var c = 0; c \u003c= gridSize; c++) {\n        ctx.beginPath();\n        ctx.moveTo(c * cellSize, 0);\n        ctx.lineTo(c * cellSize, canvas.height);\n        ctx.stroke();\n      }\n      for (var r = 0; r \u003c= gridSize; r++) {\n        ctx.beginPath();\n        ctx.moveTo(0, r * cellSize);\n        ctx.lineTo(canvas.width, r * cellSize);\n        ctx.stroke();\n      }\n    }\n  }\n\n  // --- Get cell from mouse event ---\n  function getCellFromEvent(e) {\n    var rect = canvas.getBoundingClientRect();\n    var x = (e.clientX - rect.left);\n    var y = (e.clientY - rect.top);\n    // Account for CSS scaling\n    var scaleX = canvas.width / rect.width;\n    var scaleY = canvas.height / rect.height;\n    var col = Math.floor(x * scaleX / cellSize);\n    var row = Math.floor(y * scaleY / cellSize);\n    if (col \u003c 0 || col \u003e= gridSize || row \u003c 0 || row \u003e= gridSize) return null;\n    return { col: col, row: row, idx: row * gridSize + col };\n  }\n\n  // --- History ---\n  function saveHistory() {\n    undoStack.push(pixels.slice());\n    if (undoStack.length \u003e MAX_HISTORY) undoStack.shift();\n    redoStack = [];\n    updateHistoryButtons();\n  }\n\n  function updateHistoryButtons() {\n    btnUndo.disabled = undoStack.length === 0;\n    btnRedo.disabled = redoStack.length === 0;\n  }\n\n  function undo() {\n    if (undoStack.length === 0) return;\n    redoStack.push(pixels.slice());\n    pixels = undoStack.pop();\n    updateHistoryButtons();\n    render();\n  }\n\n  function redo() {\n    if (redoStack.length === 0) return;\n    undoStack.push(pixels.slice());\n    pixels = redoStack.pop();\n    updateHistoryButtons();\n    render();\n  }\n\n  // --- Flood fill ---\n  function floodFill(startIdx, targetColor, fillColor) {\n    if (targetColor === fillColor) return;\n    var stack = [startIdx];\n    var visited = new Uint8Array(pixels.length);\n    while (stack.length \u003e 0) {\n      var idx = stack.pop();\n      if (idx \u003c 0 || idx \u003e= pixels.length) continue;\n      if (visited[idx]) continue;\n      var current = pixels[idx] || null;\n      if (current !== targetColor) continue;\n      visited[idx] = 1;\n      pixels[idx] = fillColor;\n      var col = idx % gridSize;\n      var row = Math.floor(idx / gridSize);\n      if (col \u003e 0) stack.push(idx - 1);\n      if (col \u003c gridSize - 1) stack.push(idx + 1);\n      if (row \u003e 0) stack.push(idx - gridSize);\n      if (row \u003c gridSize - 1) stack.push(idx + gridSize);\n    }\n  }\n\n  // --- Apply tool ---\n  function applyTool(cell, erase) {\n    if (!cell) return;\n    var sameCell = lastCell \u0026\u0026 lastCell.idx === cell.idx;\n    if (isDrawing \u0026\u0026 sameCell \u0026\u0026 currentTool !== 'fill') return;\n    lastCell = cell;\n\n    if (currentTool === 'eyedropper') {\n      var picked = pixels[cell.idx] || null;\n      if (picked) setColor(picked);\n      return;\n    }\n\n    if (currentTool === 'fill') {\n      var targetColor = pixels[cell.idx] || null;\n      var fillColor = erase ? null : currentColor;\n      saveHistory();\n      floodFill(cell.idx, targetColor, fillColor);\n      render();\n      return;\n    }\n\n    if (currentTool === 'pen' \u0026\u0026 !erase) {\n      if (pixels[cell.idx] === currentColor) return;\n      if (!sameCell || pixels[cell.idx] !== currentColor) {\n        saveHistory();\n        pixels[cell.idx] = currentColor;\n        render();\n      }\n    } else if (currentTool === 'eraser' || erase) {\n      if (pixels[cell.idx] === null) return;\n      saveHistory();\n      pixels[cell.idx] = null;\n      render();\n    }\n  }\n\n  // --- Mouse events ---\n  canvas.addEventListener('mousedown', function(e) {\n    e.preventDefault();\n    isDrawing = true;\n    lastCell = null;\n    var cell = getCellFromEvent(e);\n    applyTool(cell, e.button === 2);\n  });\n\n  canvas.addEventListener('mousemove', function(e) {\n    if (!isDrawing) {\n      var cell = getCellFromEvent(e);\n      if (cell) {\n        statusEl.textContent = 'X: ' + (cell.col + 1) + '  Y: ' + (cell.row + 1);\n      }\n      return;\n    }\n    var cell = getCellFromEvent(e);\n    applyTool(cell, e.button === 2);\n  });\n\n  canvas.addEventListener('mouseup', function(e) {\n    isDrawing = false;\n    lastCell = null;\n  });\n\n  canvas.addEventListener('mouseleave', function() {\n    isDrawing = false;\n    lastCell = null;\n    statusEl.textContent = '';\n  });\n\n  canvas.addEventListener('contextmenu', function(e) {\n    e.preventDefault();\n  });\n\n  // --- Touch events ---\n  canvas.addEventListener('touchstart', function(e) {\n    e.preventDefault();\n    isDrawing = true;\n    lastCell = null;\n    var touch = e.touches[0];\n    var cell = getCellFromEvent(touch);\n    applyTool(cell, false);\n  }, { passive: false });\n\n  canvas.addEventListener('touchmove', function(e) {\n    e.preventDefault();\n    var touch = e.touches[0];\n    var cell = getCellFromEvent(touch);\n    applyTool(cell, false);\n  }, { passive: false });\n\n  canvas.addEventListener('touchend', function() {\n    isDrawing = false;\n    lastCell = null;\n  });\n\n  // --- Color ---\n  function setColor(hex) {\n    currentColor = hex;\n    currentSwatch.style.background = hex;\n    hexDisplay.textContent = hex.toUpperCase();\n    customColor.value = hex;\n    // Update palette selection\n    document.querySelectorAll('#px-app .px-palette-swatch').forEach(function(sw) {\n      sw.classList.toggle('selected', sw.dataset.color === hex);\n    });\n  }\n\n  customColor.addEventListener('input', function() {\n    setColor(customColor.value);\n  });\n\n  // --- Palette ---\n  function buildPalette() {\n    paletteEl.innerHTML = '';\n    PALETTE.forEach(function(color) {\n      var sw = document.createElement('div');\n      sw.className = 'px-palette-swatch';\n      sw.dataset.color = color;\n      sw.style.background = color;\n      sw.title = color;\n      sw.addEventListener('click', function() {\n        setColor(color);\n      });\n      paletteEl.appendChild(sw);\n    });\n  }\n\n  // --- Tools ---\n  toolBtns.forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      currentTool = btn.dataset.tool;\n      toolBtns.forEach(function(b) { b.classList.remove('active'); });\n      btn.classList.add('active');\n    });\n  });\n\n  // --- Grid toggle ---\n  gridToggle.addEventListener('change', function() {\n    showGrid = gridToggle.checked;\n    render();\n  });\n\n  // --- Size select ---\n  sizeSelect.addEventListener('change', function() {\n    if (!confirm('グリッドサイズを変更すると、現在の絵が消えます。よろしいですか？')) {\n      sizeSelect.value = String(gridSize);\n      return;\n    }\n    gridSize = parseInt(sizeSelect.value, 10);\n    initPixels();\n    undoStack = [];\n    redoStack = [];\n    updateHistoryButtons();\n    resizeCanvas();\n    render();\n  });\n\n  // --- Zoom ---\n  var ZOOM_LEVELS = [2, 4, 6, 8, 10, 12, 16, 20, 24, 32];\n\n  function getZoomIndex() {\n    var idx = ZOOM_LEVELS.indexOf(cellSize);\n    return idx \u003e= 0 ? idx : 6;\n  }\n\n  btnZoomIn.addEventListener('click', function() {\n    var idx = getZoomIndex();\n    if (idx \u003c ZOOM_LEVELS.length - 1) {\n      cellSize = ZOOM_LEVELS[idx + 1];\n      resizeCanvas();\n      render();\n    }\n  });\n\n  btnZoomOut.addEventListener('click', function() {\n    var idx = getZoomIndex();\n    if (idx \u003e 0) {\n      cellSize = ZOOM_LEVELS[idx - 1];\n      resizeCanvas();\n      render();\n    }\n  });\n\n  // --- Undo / Redo ---\n  btnUndo.addEventListener('click', undo);\n  btnRedo.addEventListener('click', redo);\n\n  // Keyboard shortcuts\n  document.addEventListener('keydown', function(e) {\n    if ((e.ctrlKey || e.metaKey) \u0026\u0026 e.key === 'z' \u0026\u0026 !e.shiftKey) {\n      e.preventDefault();\n      undo();\n    }\n    if ((e.ctrlKey || e.metaKey) \u0026\u0026 (e.key === 'y' || (e.key === 'z' \u0026\u0026 e.shiftKey))) {\n      e.preventDefault();\n      redo();\n    }\n  });\n\n  // --- Clear ---\n  btnClear.addEventListener('click', function() {\n    if (!confirm('キャンバスをクリアしますか？')) return;\n    saveHistory();\n    initPixels();\n    render();\n  });\n\n  // --- New ---\n  btnNew.addEventListener('click', function() {\n    if (!confirm('新規作成すると、現在の絵が消えます。よろしいですか？')) return;\n    initPixels();\n    undoStack = [];\n    redoStack = [];\n    updateHistoryButtons();\n    render();\n  });\n\n  // --- Export PNG ---\n  btnExport.addEventListener('click', function() {\n    var scale = 4;\n    var exportCanvas = document.createElement('canvas');\n    exportCanvas.width = gridSize * scale;\n    exportCanvas.height = gridSize * scale;\n    var ectx = exportCanvas.getContext('2d');\n    ectx.imageSmoothingEnabled = false;\n\n    // Checkerboard bg\n    for (var i = 0; i \u003c pixels.length; i++) {\n      var col = i % gridSize;\n      var row = Math.floor(i / gridSize);\n      if (!pixels[i]) {\n        ectx.fillStyle = (col + row) % 2 === 0 ? '#e2e8f0' : '#cbd5e1';\n      } else {\n        ectx.fillStyle = pixels[i];\n      }\n      ectx.fillRect(col * scale, row * scale, scale, scale);\n    }\n\n    var link = document.createElement('a');\n    link.download = 'pixel-art.png';\n    link.href = exportCanvas.toDataURL('image/png');\n    link.click();\n  });\n\n  // --- Init ---\n  buildPalette();\n  setColor('#000000');\n  initPixels();\n  resizeCanvas();\n  render();\n  updateHistoryButtons();\n\n})();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"使い方\"\u003e使い方\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eグリッドサイズ\u003c/strong\u003eを選択（8×8〜64×64）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eツール\u003c/strong\u003eを選択してキャンバスに描画\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eペン\u003c/strong\u003e: クリック・ドラッグで描画\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e消しゴム\u003c/strong\u003e: クリック・ドラッグで消去（右クリックでも消去）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e塗りつぶし\u003c/strong\u003e: 隣接する同色のエリアを一括塗りつぶし\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eスポイト\u003c/strong\u003e: クリックした色を現在の色として取得\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eパレット\u003c/strong\u003eから色を選択、またはカスタムカラーピッカーで任意の色を指定\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e元に戻す / やり直し\u003c/strong\u003e（Ctrl+Z / Ctrl+Y）で作業履歴を管理\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePNG書き出し\u003c/strong\u003eで画像をダウンロード\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003cdiv style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003e事業の請求書・経費管理もかんたんに\u003c/p\u003e","title":"ドット絵エディター"},{"content":" 電気代計算ツール 家電の消費電力・使用時間を入力して、日額・月額・年額の電気代を計算できます。複数機器をまとめて管理。\n電力単価の設定 電力単価： 円 / kWh（目安：全国平均 約31円） 家電・機器を追加 よく使われる機器をワンクリックで追加： 機器名 消費電力（W） 1日の使用時間（時間） 追加 登録した機器一覧 まだ機器が追加されていません。上のフォームから追加してください。 月額電気代（合計） ¥0 日額 ¥0 円 / 日 月額（30日） ¥0 円 / 月 年額 ¥0 円 / 年 消費電力合計 0.0 kWh / 日 機器別 月額電気代（円） 省エネのヒント 事業の経費・光熱費管理もかんたんに\nfreee会計なら、経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 投資利益率を計算 → ROI計算ツール\n家計を見直す → 50/30/20 家計バランス計算\nローン返済を計算 → ローン返済シミュレーター\n確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/electricity-calculator/","summary":"\u003cdiv id=\"ec-app\"\u003e\n\u003cstyle\u003e\n#ec-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Noto Sans JP\", sans-serif;\n  max-width: 780px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#ec-app h2 {\n  font-size: 1.3rem;\n  font-weight: 700;\n  color: #0f172a;\n  margin: 28px 0 14px;\n  padding-bottom: 6px;\n  border-bottom: 2px solid #e2e8f0;\n}\n#ec-app .ec-card {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 20px;\n  margin-bottom: 16px;\n}\n#ec-app .ec-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  align-items: flex-end;\n  margin-bottom: 10px;\n}\n#ec-app .ec-field {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  flex: 1 1 140px;\n}\n#ec-app .ec-field label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #475569;\n  text-transform: uppercase;\n  letter-spacing: 0.03em;\n}\n#ec-app .ec-field input,\n#ec-app .ec-field select {\n  padding: 9px 11px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 14px;\n  color: #1e293b;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.15s;\n  width: 100%;\n  box-sizing: border-box;\n}\n#ec-app .ec-field input:focus,\n#ec-app .ec-field select:focus {\n  border-color: #0284c7;\n}\n#ec-app .ec-btn {\n  padding: 9px 16px;\n  border: none;\n  border-radius: 7px;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n}\n#ec-app .ec-btn:active { transform: scale(0.97); }\n#ec-app .ec-btn-primary {\n  background: #0284c7;\n  color: #fff;\n}\n#ec-app .ec-btn-primary:hover { background: #0369a1; }\n#ec-app .ec-btn-danger {\n  background: #fee2e2;\n  color: #b91c1c;\n}\n#ec-app .ec-btn-danger:hover { background: #fecaca; }\n#ec-app .ec-btn-secondary {\n  background: #e2e8f0;\n  color: #334155;\n}\n#ec-app .ec-btn-secondary:hover { background: #cbd5e1; }\n#ec-app .ec-device-list {\n  margin: 0 0 14px;\n  padding: 0;\n  list-style: none;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n#ec-app .ec-device-item {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 10px;\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  padding: 10px 14px;\n}\n#ec-app .ec-device-item span.ec-device-name {\n  font-weight: 600;\n  font-size: 14px;\n  flex: 1 1 120px;\n  color: #0f172a;\n}\n#ec-app .ec-device-item span.ec-device-detail {\n  font-size: 13px;\n  color: #64748b;\n  flex: 2 1 180px;\n}\n#ec-app .ec-device-item span.ec-device-cost {\n  font-size: 14px;\n  font-weight: 700;\n  color: #0284c7;\n  flex: 1 1 90px;\n  text-align: right;\n}\n#ec-app .ec-results-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n  gap: 12px;\n  margin-bottom: 18px;\n}\n#ec-app .ec-result-box {\n  background: #fff;\n  border: 1.5px solid #bae6fd;\n  border-radius: 10px;\n  padding: 16px;\n  text-align: center;\n}\n#ec-app .ec-result-box .ec-result-label {\n  font-size: 12px;\n  color: #64748b;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  margin-bottom: 6px;\n}\n#ec-app .ec-result-box .ec-result-value {\n  font-size: 1.6rem;\n  font-weight: 800;\n  color: #0369a1;\n  line-height: 1.1;\n}\n#ec-app .ec-result-box .ec-result-unit {\n  font-size: 13px;\n  color: #94a3b8;\n  margin-top: 2px;\n}\n#ec-app .ec-chart-wrap {\n  background: #fff;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 16px;\n  margin-bottom: 18px;\n}\n#ec-app canvas#ec-chart {\n  width: 100% !important;\n  height: 220px !important;\n  display: block;\n}\n#ec-app .ec-tips {\n  background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%);\n  border: 1.5px solid #bbf7d0;\n  border-radius: 10px;\n  padding: 16px 20px;\n  margin-bottom: 18px;\n}\n#ec-app .ec-tips h3 {\n  font-size: 14px;\n  font-weight: 700;\n  color: #15803d;\n  margin: 0 0 10px;\n}\n#ec-app .ec-tips ul {\n  margin: 0;\n  padding-left: 18px;\n  font-size: 13px;\n  color: #166534;\n  line-height: 1.8;\n}\n#ec-app .ec-preset-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 14px;\n}\n#ec-app .ec-preset-btn {\n  padding: 6px 13px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 20px;\n  background: #fff;\n  font-size: 12px;\n  font-weight: 600;\n  color: #334155;\n  cursor: pointer;\n  transition: all 0.15s;\n  white-space: nowrap;\n}\n#ec-app .ec-preset-btn:hover {\n  border-color: #0284c7;\n  color: #0284c7;\n  background: #f0f9ff;\n}\n#ec-app .ec-rate-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 18px;\n  flex-wrap: wrap;\n}\n#ec-app .ec-rate-row label {\n  font-size: 13px;\n  font-weight: 600;\n  color: #475569;\n  white-space: nowrap;\n}\n#ec-app .ec-rate-row input {\n  padding: 8px 11px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 7px;\n  font-size: 14px;\n  width: 100px;\n  outline: none;\n  color: #1e293b;\n  background: #fff;\n  transition: border-color 0.15s;\n}\n#ec-app .ec-rate-row input:focus { border-color: #0284c7; }\n#ec-app .ec-rate-row span { font-size: 13px; color: #64748b; }\n#ec-app .ec-empty {\n  text-align: center;\n  padding: 24px;\n  color: #94a3b8;\n  font-size: 14px;\n}\n#ec-app .ec-total-bar {\n  background: linear-gradient(90deg, #0284c7 0%, #0369a1 100%);\n  color: #fff;\n  border-radius: 10px;\n  padding: 14px 20px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 18px;\n}\n#ec-app .ec-total-bar .ec-total-label {\n  font-size: 14px;\n  font-weight: 700;\n  opacity: 0.9;\n}\n#ec-app .ec-total-bar .ec-total-value {\n  font-size: 1.5rem;\n  font-weight: 800;\n}\n@media (max-width: 520px) {\n  #ec-app .ec-result-box .ec-result-value { font-size: 1.3rem; }\n  #ec-app .ec-total-bar .ec-total-value { font-size: 1.2rem; }\n}\n\u003c/style\u003e\n\u003ch2\u003e電気代計算ツール\u003c/h2\u003e\n\u003cp style=\"font-size:14px;color:#64748b;margin-bottom:20px;\"\u003e家電の消費電力・使用時間を入力して、日額・月額・年額の電気代を計算できます。複数機器をまとめて管理。\u003c/p\u003e","title":"電気代計算ツール｜家電の消費電力から月額料金を自動計算【無料】"},{"content":"本ページにはアフィリエイトリンクが含まれます。\n純資産計算機 資産と負債を入力して、純資産を即座に計算し、財務状況を確認しましょう。\n資産 現金・預金 ¥ 普通預金（給与口座） ¥ 定期預金・貯蓄口座 ¥ 緊急資金 投資 ¥ iDeCo（個人型確定拠出年金） ¥ NISA口座 ¥ 特定口座・一般口座（株・投信） ¥ 暗号資産（仮想通貨） 不動産 ¥ 自宅の時価 ¥ その他不動産 その他の資産 ¥ 自動車・バイク ¥ 貴重品（宝飾品・美術品・コレクション） ¥ 事業（会社）の持分 資産合計 ¥0 負債 ¥ 住宅ローン残高 ¥ 教育ローン・奨学金 ¥ 自動車ローン ¥ クレジットカード残高 ¥ その他の借入 負債合計 ¥0 あなたの純資産 ¥0 負債資産比率: — 資産配分 現金・預金 0% 投資 0% 不動産 0% その他 0% 負債の内訳 住宅ローン 0% 教育ローン 0% 自動車ローン 0% クレカ 0% その他 0% 平均と比べてどうか？ 日本の年齢層別・世帯純資産の中央値の目安（金融広報中央委員会データを参考）。\n年齢層 純資産中央値（目安） あなたの位置 年齢層を選択すると、平均との比較が表示されます。 あなたの年齢層 — 年齢層を選択 — 35歳未満 35〜44歳 45〜54歳 55〜64歳 65〜74歳 75歳以上 目標トラッカー 純資産の目標額（円） ¥ 目標への進捗 0% 目標の0%に達しています。 使い方 資産を入力 — 預金・投資口座・不動産・その他の資産を現在の時価で入力してください。 負債を入力 — 住宅ローン・教育ローン・自動車ローン・クレジットカード残高をすべて入力してください。 年齢層を選択 — 日本の平均値と自分の純資産を比較できます。 目標を設定 — 目標純資産額を入力して進捗を確認しましょう。 入力と同時に計算結果が更新されます。データはブラウザ外に送信されません。\n純資産とは？なぜ重要か？ 純資産は個人ファイナンスで最も重要な指標です。資産（持っているもの）から負債（借りているもの）を引いた金額がそれです。プラスなら資産が借金を上回り、マイナスなら（特に若い世代に多い）借金が資産を超えていることを意味します。定期的にこの数字を追うことが、本当の意味で資産形成できているかを測る最善の方法です。\n純資産を増やす方法 1. 収入を増やす 余分な収入をすべて貯蓄・投資に回せば、純資産は着実に増えます。昇給交渉・スキルアップ・副業などを検討しましょう。\n2. 支出を減らす 無駄なサブスクリプションを解約し、高金利の借金を借り換え、「欲しいもの」と「必要なもの」を区別しましょう。\n3. 高金利の負債を返済する クレジットカードの高金利（年15〜20%超）は純資産を急速に削ります。投資より先に高金利の借金を返すことを優先してください。\n4. 継続的に投資する iDeCo・NISA・インデックスファンドへの積み立てを自動化し、複利の力を長期間にわたって活用しましょう。\n資産管理を効率化 → freee会計で家計を自動管理 関連ツール 家計簿プランナー → 家計簿プランナーツール 緊急資金計算 → 緊急資金計算ツール 支出トラッカー → 支出トラッカーツール ","permalink":"https://productivity-works.com/ja/tools/net-worth-calculator/","summary":"\u003cp\u003e\u003cem\u003e本ページにはアフィリエイトリンクが含まれます。\u003c/em\u003e\u003c/p\u003e\n\u003ch1 id=\"純資産計算機\"\u003e純資産計算機\u003c/h1\u003e\n\u003cp\u003e資産と負債を入力して、\u003cstrong\u003e純資産\u003c/strong\u003eを即座に計算し、財務状況を確認しましょう。\u003c/p\u003e\n\u003cdiv id=\"nw-calc\" style=\"max-width:760px;margin:0 auto;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;color:#1e293b;\"\u003e\n\u003c!-- 資産セクション --\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #059669;border-radius:12px;background:#f0fdf4;margin-bottom:20px;\"\u003e\n\u003ch2 style=\"margin:0 0 20px 0;font-size:20px;color:#059669;\"\u003e資産\u003c/h2\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-weight:bold;font-size:13px;color:#64748b;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;\"\u003e現金・預金\u003c/div\u003e\n\u003cdiv style=\"display:grid;gap:10px;\"\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003e普通預金（給与口座）\u003c/label\u003e\u003cinput type=\"number\" id=\"aCash\" min=\"0\" step=\"10000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #a7f3d0;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003e定期預金・貯蓄口座\u003c/label\u003e\u003cinput type=\"number\" id=\"aSavings\" min=\"0\" step=\"10000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #a7f3d0;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003e緊急資金\u003c/label\u003e\u003cinput type=\"number\" id=\"aEmergency\" min=\"0\" step=\"10000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #a7f3d0;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-weight:bold;font-size:13px;color:#64748b;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;\"\u003e投資\u003c/div\u003e\n\u003cdiv style=\"display:grid;gap:10px;\"\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003eiDeCo（個人型確定拠出年金）\u003c/label\u003e\u003cinput type=\"number\" id=\"a401k\" min=\"0\" step=\"10000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #a7f3d0;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003eNISA口座\u003c/label\u003e\u003cinput type=\"number\" id=\"aIRA\" min=\"0\" step=\"10000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #a7f3d0;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003e特定口座・一般口座（株・投信）\u003c/label\u003e\u003cinput type=\"number\" id=\"aBrokerage\" min=\"0\" step=\"10000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #a7f3d0;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003e暗号資産（仮想通貨）\u003c/label\u003e\u003cinput type=\"number\" id=\"aCrypto\" min=\"0\" step=\"10000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #a7f3d0;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-weight:bold;font-size:13px;color:#64748b;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;\"\u003e不動産\u003c/div\u003e\n\u003cdiv style=\"display:grid;gap:10px;\"\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003e自宅の時価\u003c/label\u003e\u003cinput type=\"number\" id=\"aHome\" min=\"0\" step=\"100000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #a7f3d0;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003eその他不動産\u003c/label\u003e\u003cinput type=\"number\" id=\"aRealEstate\" min=\"0\" step=\"100000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #a7f3d0;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003cdiv style=\"font-weight:bold;font-size:13px;color:#64748b;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:12px;\"\u003eその他の資産\u003c/div\u003e\n\u003cdiv style=\"display:grid;gap:10px;\"\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003e自動車・バイク\u003c/label\u003e\u003cinput type=\"number\" id=\"aVehicles\" min=\"0\" step=\"50000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #a7f3d0;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003e貴重品（宝飾品・美術品・コレクション）\u003c/label\u003e\u003cinput type=\"number\" id=\"aValuables\" min=\"0\" step=\"10000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #a7f3d0;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003e事業（会社）の持分\u003c/label\u003e\u003cinput type=\"number\" id=\"aBusiness\" min=\"0\" step=\"100000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #a7f3d0;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:16px;background:#059669;border-radius:8px;display:flex;justify-content:space-between;align-items:center;\"\u003e\n\u003cspan style=\"color:white;font-weight:bold;font-size:16px;\"\u003e資産合計\u003c/span\u003e\n\u003cspan id=\"totalAssets\" style=\"color:white;font-weight:bold;font-size:24px;\"\u003e¥0\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 負債セクション --\u003e\n\u003cdiv style=\"padding:24px;border:2px solid #dc2626;border-radius:12px;background:#fef2f2;margin-bottom:20px;\"\u003e\n\u003ch2 style=\"margin:0 0 20px 0;font-size:20px;color:#dc2626;\"\u003e負債\u003c/h2\u003e\n\u003cdiv style=\"display:grid;gap:10px;margin-bottom:20px;\"\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003e住宅ローン残高\u003c/label\u003e\u003cinput type=\"number\" id=\"lMortgage\" min=\"0\" step=\"100000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #fca5a5;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003e教育ローン・奨学金\u003c/label\u003e\u003cinput type=\"number\" id=\"lStudent\" min=\"0\" step=\"50000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #fca5a5;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003e自動車ローン\u003c/label\u003e\u003cinput type=\"number\" id=\"lAuto\" min=\"0\" step=\"50000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #fca5a5;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003eクレジットカード残高\u003c/label\u003e\u003cinput type=\"number\" id=\"lCredit\" min=\"0\" step=\"10000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #fca5a5;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;align-items:center;gap:8px;\"\u003e\n\u003cspan style=\"font-size:16px;color:#64748b;min-width:14px;\"\u003e¥\u003c/span\u003e\n\u003cdiv style=\"flex:1;\"\u003e\u003clabel style=\"display:block;font-size:13px;color:#64748b;margin-bottom:4px;\"\u003eその他の借入\u003c/label\u003e\u003cinput type=\"number\" id=\"lOther\" min=\"0\" step=\"10000\" value=\"0\" oninput=\"calcNW()\" style=\"width:100%;padding:9px 12px;border:1px solid #fca5a5;border-radius:8px;font-size:15px;box-sizing:border-box;\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"padding:16px;background:#dc2626;border-radius:8px;display:flex;justify-content:space-between;align-items:center;\"\u003e\n\u003cspan style=\"color:white;font-weight:bold;font-size:16px;\"\u003e負債合計\u003c/span\u003e\n\u003cspan id=\"totalLiabilities\" style=\"color:white;font-weight:bold;font-size:24px;\"\u003e¥0\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 結果パネル --\u003e\n\u003cdiv id=\"nwResults\" style=\"padding:28px;border-radius:12px;background:#eef2ff;border:2px solid #4f46e5;margin-bottom:20px;\"\u003e\n\u003cdiv style=\"text-align:center;margin-bottom:24px;\"\u003e\n\u003cdiv style=\"font-size:14px;color:#64748b;text-transform:uppercase;letter-spacing:0.08em;margin-bottom:6px;\"\u003eあなたの純資産\u003c/div\u003e\n\u003cdiv id=\"netWorthDisplay\" style=\"font-size:52px;font-weight:bold;color:#4f46e5;line-height:1.1;\"\u003e¥0\u003c/div\u003e\n\u003cdiv id=\"debtRatioDisplay\" style=\"font-size:14px;color:#64748b;margin-top:8px;\"\u003e負債資産比率: —\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 資産配分バー --\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003cdiv style=\"font-weight:bold;font-size:13px;color:#64748b;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:8px;\"\u003e資産配分\u003c/div\u003e\n\u003cdiv id=\"assetBar\" style=\"height:28px;border-radius:8px;overflow:hidden;display:flex;background:#e2e8f0;\"\u003e\n\u003cdiv id=\"barCash\" style=\"background:#059669;height:100%;transition:width 0.3s;\" title=\"現金・預金\"\u003e\u003c/div\u003e\n\u003cdiv id=\"barInvest\" style=\"background:#10b981;height:100%;transition:width 0.3s;\" title=\"投資\"\u003e\u003c/div\u003e\n\u003cdiv id=\"barProperty\" style=\"background:#34d399;height:100%;transition:width 0.3s;\" title=\"不動産\"\u003e\u003c/div\u003e\n\u003cdiv id=\"barOther\" style=\"background:#6ee7b7;height:100%;transition:width 0.3s;\" title=\"その他\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:#64748b;margin-top:8px;\"\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#059669;border-radius:2px;margin-right:4px;\"\u003e\u003c/span\u003e現金・預金 \u003cspan id=\"pctCash\" style=\"font-weight:bold;\"\u003e0%\u003c/span\u003e\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#10b981;border-radius:2px;margin-right:4px;\"\u003e\u003c/span\u003e投資 \u003cspan id=\"pctInvest\" style=\"font-weight:bold;\"\u003e0%\u003c/span\u003e\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#34d399;border-radius:2px;margin-right:4px;\"\u003e\u003c/span\u003e不動産 \u003cspan id=\"pctProperty\" style=\"font-weight:bold;\"\u003e0%\u003c/span\u003e\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#6ee7b7;border-radius:2px;margin-right:4px;\"\u003e\u003c/span\u003eその他 \u003cspan id=\"pctOther\" style=\"font-weight:bold;\"\u003e0%\u003c/span\u003e\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 負債内訳バー --\u003e\n\u003cdiv id=\"liabBreakdownWrap\" style=\"display:none;\"\u003e\n\u003cdiv style=\"font-weight:bold;font-size:13px;color:#64748b;text-transform:uppercase;letter-spacing:0.05em;margin-bottom:8px;\"\u003e負債の内訳\u003c/div\u003e\n\u003cdiv id=\"liabBar\" style=\"height:28px;border-radius:8px;overflow:hidden;display:flex;background:#e2e8f0;\"\u003e\n\u003cdiv id=\"lbarMortgage\" style=\"background:#dc2626;height:100%;transition:width 0.3s;\" title=\"住宅ローン\"\u003e\u003c/div\u003e\n\u003cdiv id=\"lbarStudent\" style=\"background:#ef4444;height:100%;transition:width 0.3s;\" title=\"教育ローン\"\u003e\u003c/div\u003e\n\u003cdiv id=\"lbarAuto\" style=\"background:#f87171;height:100%;transition:width 0.3s;\" title=\"自動車ローン\"\u003e\u003c/div\u003e\n\u003cdiv id=\"lbarCredit\" style=\"background:#fca5a5;height:100%;transition:width 0.3s;\" title=\"クレジットカード\"\u003e\u003c/div\u003e\n\u003cdiv id=\"lbarOther\" style=\"background:#fecaca;height:100%;transition:width 0.3s;\" title=\"その他\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:#64748b;margin-top:8px;\"\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#dc2626;border-radius:2px;margin-right:4px;\"\u003e\u003c/span\u003e住宅ローン \u003cspan id=\"lpctMortgage\" style=\"font-weight:bold;\"\u003e0%\u003c/span\u003e\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#ef4444;border-radius:2px;margin-right:4px;\"\u003e\u003c/span\u003e教育ローン \u003cspan id=\"lpctStudent\" style=\"font-weight:bold;\"\u003e0%\u003c/span\u003e\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#f87171;border-radius:2px;margin-right:4px;\"\u003e\u003c/span\u003e自動車ローン \u003cspan id=\"lpctAuto\" style=\"font-weight:bold;\"\u003e0%\u003c/span\u003e\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#fca5a5;border-radius:2px;margin-right:4px;\"\u003e\u003c/span\u003eクレカ \u003cspan id=\"lpctCredit\" style=\"font-weight:bold;\"\u003e0%\u003c/span\u003e\u003c/span\u003e\n\u003cspan\u003e\u003cspan style=\"display:inline-block;width:10px;height:10px;background:#fecaca;border-radius:2px;margin-right:4px;\"\u003e\u003c/span\u003eその他 \u003cspan id=\"lpctOther\" style=\"font-weight:bold;\"\u003e0%\u003c/span\u003e\u003c/span\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 比較セクション --\u003e\n\u003cdiv style=\"padding:24px;border-radius:12px;background:#f8fafc;border:1px solid #e2e8f0;margin-bottom:20px;\"\u003e\n\u003ch3 style=\"margin:0 0 16px 0;font-size:18px;color:#1e293b;\"\u003e平均と比べてどうか？\u003c/h3\u003e\n\u003cp style=\"font-size:13px;color:#64748b;margin:0 0 16px 0;\"\u003e日本の年齢層別・世帯純資産の中央値の目安（金融広報中央委員会データを参考）。\u003c/p\u003e","title":"純資産計算機 | あなたの財務状況を把握する"},{"content":"無料の複利計算ツールです。元本・毎月の積立額・年利・複利頻度・運用期間を入力すると、資産の成長をシミュレートできます。ビジュアルな成長チャートと年別の詳細テーブル付き。\n計算条件の入力 初期元本（円） ¥ 毎月の積立額（円） ¥ 年利（%） % 複利の頻度 毎日 毎月 四半期 毎年 運用期間 年 資産成長を計算する 計算結果サマリー 資産成長チャート 総残高 累計投資額 年別の内訳 年 期首残高 年間積立額 利息 期末残高 累計利息 資産管理・確定申告は freee で効率化 投資収益の記録や確定申告の手続きを、freee 会計なら自動仕訳でラクに管理できます。個人投資家にも対応した国内シェアNo.1のクラウド会計ソフトです。\nfreee を無料で試す ※本リンクはアフィリエイトリンクを含む場合があります。\n関連する無料ツール 貯蓄目標計算ツール ROI計算ツール 関連ツール 貯蓄目標計算ツール — 目標金額に到達するために必要な毎月の積立額を逆算できます。 ROI計算ツール — 投資・施策のリターンをすばやく計測できます。 関連記事 新NISA始め方2026年版【初心者向け完全ガイド】口座開設から投資スタートまで NISA iDeCo どっちを先に始めるべき？優先順位を徹底解説【2026年最新版】 投資信託 おすすめ 初心者向け厳選ファンド完全比較【2026年最新版】 ","permalink":"https://productivity-works.com/ja/tools/compound-interest-calculator/","summary":"\u003cp\u003e無料の複利計算ツールです。元本・毎月の積立額・年利・複利頻度・運用期間を入力すると、資産の成長をシミュレートできます。ビジュアルな成長チャートと年別の詳細テーブル付き。\u003c/p\u003e\n\u003cdiv id=\"ci-app\"\u003e\n\u003cstyle\u003e\n#ci-app *,#ci-app *::before,#ci-app *::after{box-sizing:border-box;margin:0;padding:0}\n#ci-app{font-family:-apple-system,BlinkMacSystemFont,'Hiragino Kaku Gothic ProN','Noto Sans JP',sans-serif;color:#1a1a2e;max-width:860px;margin:0 auto}\n#ci-app .ci-card{background:#fff;border:1px solid #e2e8f0;border-radius:14px;padding:28px 32px;margin-bottom:24px;box-shadow:0 2px 8px rgba(0,0,0,.06)}\n#ci-app .ci-card h2{font-size:1.05rem;font-weight:700;color:#1a1a2e;margin-bottom:20px;padding-bottom:10px;border-bottom:2px solid #f0f4ff}\n#ci-app .ci-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px}\n#ci-app .ci-field label{display:block;font-size:.78rem;font-weight:700;color:#4a5568;margin-bottom:6px;letter-spacing:.03em}\n#ci-app .ci-field .ci-wrap{position:relative}\n#ci-app .ci-field .ci-pre{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:#a0aec0;font-size:.9rem;pointer-events:none}\n#ci-app .ci-field .ci-suf{position:absolute;right:11px;top:50%;transform:translateY(-50%);color:#a0aec0;font-size:.88rem;pointer-events:none}\n#ci-app .ci-field input,#ci-app .ci-field select{width:100%;padding:10px 12px;border:1.5px solid #cbd5e0;border-radius:8px;font-size:.97rem;color:#1a1a2e;background:#fafbfc;outline:none;transition:border-color .2s,box-shadow .2s;-moz-appearance:textfield;appearance:textfield}\n#ci-app .ci-field input::-webkit-outer-spin-button,#ci-app .ci-field input::-webkit-inner-spin-button{-webkit-appearance:none}\n#ci-app .ci-field input:focus,#ci-app .ci-field select:focus{border-color:#4f8ef7;box-shadow:0 0 0 3px rgba(79,142,247,.15)}\n#ci-app .ci-field.has-pre input{padding-left:26px}\n#ci-app .ci-field.has-suf input{padding-right:40px}\n#ci-app .ci-btn{display:block;width:100%;padding:14px;background:linear-gradient(135deg,#4f8ef7 0%,#3b6fd4 100%);color:#fff;font-size:1rem;font-weight:700;border:none;border-radius:10px;cursor:pointer;margin-top:10px;letter-spacing:.04em;transition:opacity .2s,transform .15s}\n#ci-app .ci-btn:hover{opacity:.91;transform:translateY(-1px)}\n#ci-app .ci-btn:active{transform:none}\n#ci-app .ci-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(155px,1fr));gap:12px}\n#ci-app .ci-stat{border-radius:10px;padding:16px 14px;text-align:center;background:linear-gradient(135deg,#f0f4ff,#e8f0fe)}\n#ci-app .ci-stat.hi{background:linear-gradient(135deg,#4f8ef7,#3b6fd4)}\n#ci-app .ci-stat .sl{font-size:.73rem;font-weight:700;letter-spacing:.03em;color:#4a5568;margin-bottom:4px}\n#ci-app .ci-stat.hi .sl{color:rgba(255,255,255,.82)}\n#ci-app .ci-stat .sv{font-size:1.28rem;font-weight:800;color:#1a1a2e}\n#ci-app .ci-stat.hi .sv{color:#fff}\n#ci-app .ci-note{font-size:.81rem;color:#718096;margin-top:14px;line-height:1.7}\n#ci-app .ci-chart-outer{width:100%;overflow-x:auto}\n#ci-app canvas{display:block;max-width:100%}\n#ci-app .ci-legend{display:flex;justify-content:center;gap:22px;margin-top:12px;flex-wrap:wrap}\n#ci-app .ci-legend-item{display:flex;align-items:center;gap:7px;font-size:.83rem;color:#4a5568;font-weight:500}\n#ci-app .ci-legend-dash{width:18px;height:3px;border-radius:2px}\n#ci-app .ci-table-outer{width:100%;overflow-x:auto}\n#ci-app table{width:100%;border-collapse:collapse;font-size:.87rem;min-width:480px}\n#ci-app table thead th{background:#f0f4ff;color:#4a5568;font-size:.74rem;font-weight:700;letter-spacing:.03em;padding:9px 12px;text-align:right;border-bottom:2px solid #e2e8f0;white-space:nowrap}\n#ci-app table thead th:first-child{text-align:center}\n#ci-app table tbody td{padding:8px 12px;text-align:right;border-bottom:1px solid #f0f4f8;color:#2d3748}\n#ci-app table tbody td:first-child{text-align:center;font-weight:700;color:#4f8ef7}\n#ci-app table tbody tr:hover{background:#f7faff}\n#ci-app table tfoot td{padding:9px 12px;text-align:right;background:#f0f4ff;font-weight:700;color:#1a1a2e;border-top:2px solid #e2e8f0}\n#ci-app table tfoot td:first-child{text-align:center}\n#ci-app .ci-hidden{display:none!important}\n#ci-app .ci-cta{background:linear-gradient(135deg,#fff7ed,#fef3c7);border:1.5px solid #f6ad55;border-radius:12px;padding:22px 26px;margin-bottom:24px}\n#ci-app .ci-cta h3{font-size:.97rem;font-weight:700;color:#744210;margin-bottom:8px}\n#ci-app .ci-cta p{font-size:.87rem;color:#7d5a20;line-height:1.65;margin-bottom:12px}\n#ci-app .ci-cta a.ci-cta-btn{display:inline-block;padding:10px 22px;background:linear-gradient(135deg,#f6ad55,#ed8936);color:#fff;font-size:.92rem;font-weight:700;border-radius:8px;text-decoration:none;letter-spacing:.04em;transition:opacity .2s}\n#ci-app .ci-cta a.ci-cta-btn:hover{opacity:.88}\n#ci-app .ci-af{font-size:.75rem;color:#a0aec0;margin-top:6px}\n#ci-app .ci-related{background:#f7faff;border:1px solid #e2e8f0;border-radius:12px;padding:20px 24px;margin-top:8px}\n#ci-app .ci-related h3{font-size:.97rem;font-weight:700;color:#1a1a2e;margin-bottom:12px}\n#ci-app .ci-related ul{list-style:none;display:flex;flex-wrap:wrap;gap:10px}\n#ci-app .ci-related ul li a{display:inline-block;padding:7px 15px;background:#fff;border:1.5px solid #4f8ef7;border-radius:8px;color:#4f8ef7;font-size:.88rem;font-weight:600;text-decoration:none;transition:background .18s,color .18s}\n#ci-app .ci-related ul li a:hover{background:#4f8ef7;color:#fff}\n@media(max-width:520px){#ci-app .ci-card{padding:18px 14px}#ci-app .ci-stat .sv{font-size:1.05rem}}\n\u003c/style\u003e\n\u003c!-- Input Card --\u003e\n\u003cdiv class=\"ci-card\"\u003e\n  \u003ch2\u003e計算条件の入力\u003c/h2\u003e\n  \u003cdiv class=\"ci-grid\"\u003e\n    \u003cdiv class=\"ci-field has-pre\"\u003e\n      \u003clabel\u003e初期元本（円）\u003c/label\u003e\n      \u003cdiv class=\"ci-wrap\"\u003e\u003cspan class=\"ci-pre\"\u003e¥\u003c/span\u003e\u003cinput type=\"number\" id=\"ci-principal\" value=\"1000000\" min=\"0\" step=\"10000\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ci-field has-pre\"\u003e\n      \u003clabel\u003e毎月の積立額（円）\u003c/label\u003e\n      \u003cdiv class=\"ci-wrap\"\u003e\u003cspan class=\"ci-pre\"\u003e¥\u003c/span\u003e\u003cinput type=\"number\" id=\"ci-monthly\" value=\"30000\" min=\"0\" step=\"1000\"\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ci-field has-suf\"\u003e\n      \u003clabel\u003e年利（%）\u003c/label\u003e\n      \u003cdiv class=\"ci-wrap\"\u003e\u003cinput type=\"number\" id=\"ci-rate\" value=\"5\" min=\"0\" max=\"100\" step=\"0.1\"\u003e\u003cspan class=\"ci-suf\"\u003e%\u003c/span\u003e\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ci-field\"\u003e\n      \u003clabel\u003e複利の頻度\u003c/label\u003e\n      \u003cselect id=\"ci-freq\"\u003e\n        \u003coption value=\"365\"\u003e毎日\u003c/option\u003e\n        \u003coption value=\"12\" selected\u003e毎月\u003c/option\u003e\n        \u003coption value=\"4\"\u003e四半期\u003c/option\u003e\n        \u003coption value=\"1\"\u003e毎年\u003c/option\u003e\n      \u003c/select\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"ci-field has-suf\"\u003e\n      \u003clabel\u003e運用期間\u003c/label\u003e\n      \u003cdiv class=\"ci-wrap\"\u003e\u003cinput type=\"number\" id=\"ci-years\" value=\"20\" min=\"1\" max=\"50\" step=\"1\"\u003e\u003cspan class=\"ci-suf\"\u003e年\u003c/span\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"ci-btn\" onclick=\"ciCalc()\"\u003e資産成長を計算する\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- Summary Card --\u003e\n\u003cdiv class=\"ci-card ci-hidden\" id=\"ci-res-card\"\u003e\n  \u003ch2\u003e計算結果サマリー\u003c/h2\u003e\n  \u003cdiv class=\"ci-summary\" id=\"ci-summary\"\u003e\u003c/div\u003e\n  \u003cp class=\"ci-note\" id=\"ci-note\"\u003e\u003c/p\u003e","title":"複利計算ツール｜元本・利率・期間から将来の資産額を自動計算【無料】"},{"content":"50以上のHTTPヘッダーを検索・解説。セキュリティヘッダーをビジュアルに設定して、Apache（.htaccess）またはNginx用の設定スニペットをワンクリックで生成。生のHTTPヘッダーを貼り付けて即座に解析することもできます。\nリファレンス セキュリティビルダー ヘッダー解析 50以上のHTTPヘッダーをカテゴリ別に検索できます。各ヘッダーをクリックすると説明・よく使う値・例が表示されます。 検索条件に一致するヘッダーが見つかりませんでした。 セキュリティヘッダーを選択・設定して、Apache（.htaccess）またはNginx用の設定スニペットを生成します。 \u0026lt;!-- CSP --\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-sec-head\u0026quot;\u0026gt; Content-Security-Policy \u0026lt;span class=\u0026quot;hh-builder-sec-desc\u0026quot;\u0026gt;— 読み込み元の制御\u0026lt;/span\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-b-csp\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;hh-b-csp\u0026quot;\u0026gt;CSPヘッダーを有効化\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-field-group\u0026quot; id=\u0026quot;hh-b-csp-fields\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;default-src\u0026lt;/span\u0026gt; \u0026lt;select class=\u0026quot;hh-select\u0026quot; id=\u0026quot;hh-csp-default\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;'self'\u0026quot;\u0026gt;'self'（同一オリジンのみ）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;'self' 'unsafe-inline'\u0026quot;\u0026gt;'self' 'unsafe-inline'\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;'none'\u0026quot;\u0026gt;'none'（すべて禁止）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;*\u0026quot;\u0026gt;*（すべて許可）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;script-src\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;hh-input\u0026quot; id=\u0026quot;hh-csp-script\u0026quot; placeholder=\u0026quot;'self'（空白でdefault-srcを継承）\u0026quot; oninput=\u0026quot;hhBuild()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;style-src\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;hh-input\u0026quot; id=\u0026quot;hh-csp-style\u0026quot; placeholder=\u0026quot;'self'（空白でdefault-srcを継承）\u0026quot; oninput=\u0026quot;hhBuild()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;img-src\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;hh-input\u0026quot; id=\u0026quot;hh-csp-img\u0026quot; placeholder=\u0026quot;'self' data:（空白で継承）\u0026quot; oninput=\u0026quot;hhBuild()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;frame-src\u0026lt;/span\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;hh-input\u0026quot; id=\u0026quot;hh-csp-frame\u0026quot; placeholder=\u0026quot;'none'（空白で継承）\u0026quot; oninput=\u0026quot;hhBuild()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- HSTS --\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-sec-head\u0026quot;\u0026gt;Strict-Transport-Security \u0026lt;span class=\u0026quot;hh-builder-sec-desc\u0026quot;\u0026gt;— HTTPS強制\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-b-hsts\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt; \u0026lt;label for=\u0026quot;hh-b-hsts\u0026quot;\u0026gt;HSTSを有効化\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-field-group\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;max-age\u0026lt;/span\u0026gt; \u0026lt;select class=\u0026quot;hh-select\u0026quot; id=\u0026quot;hh-hsts-age\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; style=\u0026quot;max-width:240px;\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;2592000\u0026quot;\u0026gt;30日（2592000秒）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;15552000\u0026quot;\u0026gt;6ヶ月（15552000秒）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;31536000\u0026quot; selected\u0026gt;1年（31536000秒）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-hsts-sub\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt; \u0026lt;label for=\u0026quot;hh-hsts-sub\u0026quot;\u0026gt;includeSubDomains（サブドメインも対象）\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-hsts-pre\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;hh-hsts-pre\u0026quot;\u0026gt;preload（HSTPSプリロードリストへ登録）\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- X-Frame-Options --\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-sec-head\u0026quot;\u0026gt;X-Frame-Options \u0026lt;span class=\u0026quot;hh-builder-sec-desc\u0026quot;\u0026gt;— クリックジャッキング対策\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-b-xframe\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt; \u0026lt;label for=\u0026quot;hh-b-xframe\u0026quot;\u0026gt;X-Frame-Optionsを有効化\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-field-group\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;値\u0026lt;/span\u0026gt; \u0026lt;select class=\u0026quot;hh-select\u0026quot; id=\u0026quot;hh-xframe-val\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; style=\u0026quot;max-width:240px;\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;SAMEORIGIN\u0026quot; selected\u0026gt;SAMEORIGIN（同一オリジンのみ許可）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;DENY\u0026quot;\u0026gt;DENY（すべて禁止）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- X-Content-Type-Options --\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-sec-head\u0026quot;\u0026gt;X-Content-Type-Options \u0026lt;span class=\u0026quot;hh-builder-sec-desc\u0026quot;\u0026gt;— MIMEスニッフィング防止\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-b-xcto\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt; \u0026lt;label for=\u0026quot;hh-b-xcto\u0026quot;\u0026gt;有効化（常に nosniff）\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Referrer-Policy --\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-sec-head\u0026quot;\u0026gt;Referrer-Policy \u0026lt;span class=\u0026quot;hh-builder-sec-desc\u0026quot;\u0026gt;— リファラー情報の制御\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-b-rp\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt; \u0026lt;label for=\u0026quot;hh-b-rp\u0026quot;\u0026gt;Referrer-Policyを有効化\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-field-group\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;ポリシー\u0026lt;/span\u0026gt; \u0026lt;select class=\u0026quot;hh-select\u0026quot; id=\u0026quot;hh-rp-val\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;no-referrer\u0026quot;\u0026gt;no-referrer（送信しない）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;no-referrer-when-downgrade\u0026quot;\u0026gt;no-referrer-when-downgrade\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;strict-origin-when-cross-origin\u0026quot; selected\u0026gt;strict-origin-when-cross-origin（推奨）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;same-origin\u0026quot;\u0026gt;same-origin（同一オリジンのみ）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;origin\u0026quot;\u0026gt;origin\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- Permissions-Policy --\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-sec-head\u0026quot;\u0026gt;Permissions-Policy \u0026lt;span class=\u0026quot;hh-builder-sec-desc\u0026quot;\u0026gt;— ブラウザ機能の制御\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-b-pp\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;hh-b-pp\u0026quot;\u0026gt;Permissions-Policyを有効化\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-field-group\u0026quot; id=\u0026quot;hh-b-pp-fields\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-pp-cam\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt; \u0026lt;label for=\u0026quot;hh-pp-cam\u0026quot;\u0026gt;camera=()（カメラを無効化）\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-pp-mic\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt; \u0026lt;label for=\u0026quot;hh-pp-mic\u0026quot;\u0026gt;microphone=()（マイクを無効化）\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-pp-geo\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt; \u0026lt;label for=\u0026quot;hh-pp-geo\u0026quot;\u0026gt;geolocation=()（位置情報を無効化）\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-pp-pay\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;hh-pp-pay\u0026quot;\u0026gt;payment=()（決済APIを無効化）\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-pp-usb\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt; \u0026lt;label for=\u0026quot;hh-pp-usb\u0026quot;\u0026gt;usb=()（USBを無効化）\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt;\u0026lt;!-- /.hh-builder-left --\u0026gt; \u0026lt;div class=\u0026quot;hh-builder-right\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-out-box\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-out-topbar\u0026quot;\u0026gt; \u0026lt;span class=\u0026quot;hh-out-label\u0026quot;\u0026gt;生成された設定\u0026lt;/span\u0026gt; \u0026lt;div class=\u0026quot;hh-out-actions\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;hh-format-btns\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;hh-format-btn hh-fmt-active\u0026quot; id=\u0026quot;hh-fmt-apache\u0026quot; onclick=\u0026quot;hhSetFmt('apache')\u0026quot;\u0026gt;Apache\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;hh-format-btn\u0026quot; id=\u0026quot;hh-fmt-nginx\u0026quot; onclick=\u0026quot;hhSetFmt('nginx')\u0026quot;\u0026gt;Nginx\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;button class=\u0026quot;hh-copy-btn\u0026quot; id=\u0026quot;hh-build-copy\u0026quot; onclick=\u0026quot;hhCopyBuild()\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;pre class=\u0026quot;hh-out-code\u0026quot; id=\u0026quot;hh-build-out\u0026quot;\u0026gt;\u0026lt;/pre\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; HTTPレスポンスヘッダーを貼り付けて「解析」をクリックすると、各ヘッダーの意味を日本語で確認できます。 ","permalink":"https://productivity-works.com/ja/tools/http-header-analyzer/","summary":"\u003cp\u003e50以上のHTTPヘッダーを検索・解説。セキュリティヘッダーをビジュアルに設定して、Apache（.htaccess）またはNginx用の設定スニペットをワンクリックで生成。生のHTTPヘッダーを貼り付けて即座に解析することもできます。\u003c/p\u003e\n\u003cdiv id=\"hh-app\"\u003e\n\u003cstyle\u003e\n#hh-app *, #hh-app *::before, #hh-app *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n#hh-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic ProN\", \"Yu Gothic\", Meiryo, \"Segoe UI\", sans-serif;\n  font-size: 15px;\n  color: #1a1a2e;\n  line-height: 1.6;\n  max-width: 960px;\n  margin: 0 auto;\n}\n\n/* ── タブ ── */\n#hh-app .hh-tabs {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #e2e8f0;\n  margin-bottom: 24px;\n  flex-wrap: wrap;\n}\n#hh-app .hh-tab {\n  padding: 10px 20px;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  border: none;\n  background: none;\n  color: #64748b;\n  border-bottom: 2px solid transparent;\n  margin-bottom: -2px;\n  transition: color 0.15s, border-color 0.15s;\n  white-space: nowrap;\n}\n#hh-app .hh-tab:hover { color: #3a56d4; }\n#hh-app .hh-tab.hh-active { color: #3a56d4; border-bottom-color: #3a56d4; }\n#hh-app .hh-panel { display: none; }\n#hh-app .hh-panel.hh-active { display: block; }\n\n/* ── 検索・フィルター ── */\n#hh-app .hh-search-row {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n  margin-bottom: 18px;\n}\n#hh-app .hh-search {\n  flex: 1 1 240px;\n  padding: 9px 14px;\n  border: 2px solid #d1d5db;\n  border-radius: 8px;\n  font-size: 14px;\n  outline: none;\n  transition: border-color 0.2s;\n  color: #1a1a2e;\n}\n#hh-app .hh-search:focus { border-color: #3a56d4; }\n#hh-app .hh-cat-btns {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n}\n#hh-app .hh-cat-btn {\n  padding: 6px 13px;\n  border-radius: 20px;\n  border: 1px solid #cbd5e1;\n  background: #f8fafc;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  color: #475569;\n  transition: background 0.15s, border-color 0.15s, color 0.15s;\n}\n#hh-app .hh-cat-btn:hover { background: #e8f0fe; border-color: #3a56d4; color: #3a56d4; }\n#hh-app .hh-cat-btn.hh-cat-active { background: #3a56d4; border-color: #3a56d4; color: #fff; }\n\n/* ── ヘッダーカード ── */\n#hh-app .hh-cards { display: flex; flex-direction: column; gap: 10px; }\n#hh-app .hh-card {\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  overflow: hidden;\n}\n#hh-app .hh-card-head {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  padding: 11px 16px;\n  background: #f8fafc;\n  cursor: pointer;\n  user-select: none;\n}\n#hh-app .hh-card-head:hover { background: #f0f4ff; }\n#hh-app .hh-card-name {\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 13px;\n  font-weight: 700;\n  color: #1e3a8a;\n  flex: 1;\n}\n#hh-app .hh-badge {\n  font-size: 10px;\n  font-weight: 700;\n  padding: 2px 7px;\n  border-radius: 10px;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  white-space: nowrap;\n  flex-shrink: 0;\n}\n#hh-app .hh-badge-req  { background: #dbeafe; color: #1e40af; }\n#hh-app .hh-badge-res  { background: #dcfce7; color: #166534; }\n#hh-app .hh-badge-both { background: #fef3c7; color: #92400e; }\n#hh-app .hh-badge-cat  { background: #f3e8ff; color: #6b21a8; }\n#hh-app .hh-card-chevron { font-size: 10px; color: #94a3b8; flex-shrink: 0; }\n#hh-app .hh-card-body {\n  padding: 14px 16px;\n  border-top: 1px solid #e2e8f0;\n  background: #fff;\n  display: none;\n}\n#hh-app .hh-card-body.hh-open { display: block; }\n#hh-app .hh-card-desc { font-size: 13px; color: #334155; margin-bottom: 10px; }\n#hh-app .hh-card-meta {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 14px;\n  margin-bottom: 10px;\n}\n#hh-app .hh-meta-item { font-size: 12px; color: #64748b; }\n#hh-app .hh-meta-item strong { color: #475569; }\n#hh-app .hh-example-block {\n  background: #0f172a;\n  border-radius: 7px;\n  padding: 10px 14px;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 12px;\n  color: #e2e8f0;\n  white-space: pre-wrap;\n  word-break: break-all;\n}\n#hh-app .hh-example-label {\n  font-size: 11px;\n  color: #94a3b8;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  margin-bottom: 5px;\n  font-weight: 600;\n}\n#hh-app .hh-no-results {\n  text-align: center;\n  padding: 40px 20px;\n  color: #94a3b8;\n  font-size: 14px;\n}\n\n/* ── セキュリティビルダー ── */\n#hh-app .hh-builder-layout {\n  display: flex;\n  gap: 20px;\n  flex-wrap: wrap;\n}\n#hh-app .hh-builder-left { flex: 1 1 440px; min-width: 0; }\n#hh-app .hh-builder-right { flex: 1 1 340px; min-width: 0; }\n#hh-app .hh-builder-section {\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  margin-bottom: 14px;\n  overflow: hidden;\n}\n#hh-app .hh-builder-sec-head {\n  padding: 12px 16px;\n  background: #f8fafc;\n  font-weight: 700;\n  font-size: 13px;\n  color: #1e3a8a;\n  border-bottom: 1px solid #e2e8f0;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n#hh-app .hh-builder-sec-desc {\n  font-size: 11px;\n  color: #64748b;\n  font-weight: 400;\n  margin-left: 4px;\n}\n#hh-app .hh-field-group { padding: 14px 16px; display: flex; flex-direction: column; gap: 10px; }\n#hh-app .hh-field-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }\n#hh-app .hh-field-label { font-size: 12px; color: #475569; min-width: 110px; flex-shrink: 0; }\n#hh-app .hh-input, #hh-app .hh-select {\n  flex: 1;\n  min-width: 120px;\n  padding: 7px 10px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  font-size: 13px;\n  color: #1a1a2e;\n  background: #fff;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#hh-app .hh-input:focus, #hh-app .hh-select:focus {\n  border-color: #3a56d4;\n  box-shadow: 0 0 0 3px rgba(58,86,212,0.1);\n}\n#hh-app .hh-enable-row {\n  display: flex; align-items: center; gap: 8px;\n  font-size: 13px; color: #334155;\n  padding: 8px 16px;\n  border-bottom: 1px solid #f1f5f9;\n  background: #fff;\n}\n#hh-app .hh-enable-row input[type=\"checkbox\"] {\n  width: 15px; height: 15px;\n  accent-color: #3a56d4; cursor: pointer; flex-shrink: 0;\n}\n#hh-app .hh-enable-row label { cursor: pointer; }\n\n/* ── 出力ボックス ── */\n#hh-app .hh-out-box {\n  background: #0f172a;\n  border-radius: 10px;\n  overflow: hidden;\n  position: sticky;\n  top: 80px;\n}\n#hh-app .hh-out-topbar {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 10px 14px;\n  background: #1e293b;\n  flex-wrap: wrap;\n  gap: 6px;\n}\n#hh-app .hh-out-label {\n  font-size: 11px;\n  font-weight: 700;\n  color: #94a3b8;\n  letter-spacing: 0.06em;\n  text-transform: uppercase;\n}\n#hh-app .hh-out-actions { display: flex; gap: 6px; flex-wrap: wrap; }\n#hh-app .hh-format-btns { display: flex; gap: 0; border-radius: 6px; overflow: hidden; border: 1px solid #334155; }\n#hh-app .hh-format-btn {\n  padding: 4px 12px;\n  background: #1e293b;\n  color: #94a3b8;\n  border: none;\n  font-size: 11px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n  border-right: 1px solid #334155;\n}\n#hh-app .hh-format-btn:last-child { border-right: none; }\n#hh-app .hh-format-btn:hover { background: #334155; color: #e2e8f0; }\n#hh-app .hh-format-btn.hh-fmt-active { background: #3a56d4; color: #fff; }\n#hh-app .hh-copy-btn {\n  padding: 5px 12px;\n  border-radius: 6px;\n  font-size: 12px;\n  font-weight: 600;\n  cursor: pointer;\n  border: none;\n  background: #3a56d4;\n  color: #fff;\n  transition: background 0.15s;\n}\n#hh-app .hh-copy-btn:hover { background: #2d44b0; }\n#hh-app .hh-copy-btn.hh-copied { background: #16a34a; }\n#hh-app .hh-out-code {\n  padding: 16px;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 12px;\n  line-height: 1.7;\n  color: #e2e8f0;\n  white-space: pre;\n  overflow-x: auto;\n  max-height: 540px;\n  overflow-y: auto;\n  min-height: 160px;\n}\n#hh-app .hh-out-code .hh-c-comment { color: #64748b; }\n#hh-app .hh-out-code .hh-c-key     { color: #7dd3fc; }\n#hh-app .hh-out-code .hh-c-val     { color: #86efac; }\n#hh-app .hh-out-code .hh-c-tag     { color: #f9a8d4; }\n#hh-app .hh-out-code .hh-c-dir     { color: #fde68a; }\n\n/* ── パーサー ── */\n#hh-app .hh-parser-layout {\n  display: flex;\n  gap: 20px;\n  flex-wrap: wrap;\n}\n#hh-app .hh-parser-left { flex: 1 1 360px; min-width: 0; }\n#hh-app .hh-parser-right { flex: 1 1 380px; min-width: 0; }\n#hh-app .hh-textarea {\n  width: 100%;\n  padding: 12px 14px;\n  border: 2px solid #d1d5db;\n  border-radius: 8px;\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 12px;\n  color: #1a1a2e;\n  resize: vertical;\n  outline: none;\n  transition: border-color 0.2s;\n  min-height: 240px;\n  line-height: 1.6;\n}\n#hh-app .hh-textarea:focus { border-color: #3a56d4; }\n#hh-app .hh-parse-btn {\n  margin-top: 10px;\n  width: 100%;\n  padding: 11px;\n  background: linear-gradient(135deg, #3a56d4, #7c3aed);\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: opacity 0.2s;\n}\n#hh-app .hh-parse-btn:hover { opacity: 0.9; }\n#hh-app .hh-parsed-list { display: flex; flex-direction: column; gap: 8px; }\n#hh-app .hh-parsed-item {\n  border: 1px solid #e2e8f0;\n  border-radius: 8px;\n  overflow: hidden;\n}\n#hh-app .hh-parsed-head {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 9px 13px;\n  background: #f8fafc;\n  font-size: 12px;\n}\n#hh-app .hh-parsed-name {\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-weight: 700;\n  color: #1e3a8a;\n  flex: 1;\n}\n#hh-app .hh-parsed-val {\n  font-family: \"SFMono-Regular\", Consolas, monospace;\n  font-size: 11px;\n  color: #334155;\n  background: #f1f5f9;\n  padding: 2px 7px;\n  border-radius: 4px;\n  max-width: 220px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n#hh-app .hh-parsed-desc {\n  padding: 8px 13px;\n  font-size: 12px;\n  color: #475569;\n  border-top: 1px solid #f1f5f9;\n  background: #fff;\n}\n#hh-app .hh-parsed-unknown {\n  color: #94a3b8;\n  font-style: italic;\n}\n#hh-app .hh-parse-placeholder {\n  text-align: center;\n  padding: 40px 20px;\n  color: #94a3b8;\n  font-size: 13px;\n  border: 2px dashed #e2e8f0;\n  border-radius: 8px;\n}\n\n/* ── その他 ── */\n#hh-app .hh-hint { font-size: 12px; color: #94a3b8; margin-top: 5px; }\n#hh-app .hh-section-intro {\n  font-size: 13px;\n  color: #64748b;\n  margin-bottom: 18px;\n  padding: 12px 16px;\n  background: #f8fafc;\n  border-radius: 8px;\n  border-left: 3px solid #3a56d4;\n}\n\n@media (max-width: 680px) {\n  #hh-app .hh-builder-layout,\n  #hh-app .hh-parser-layout { flex-direction: column; }\n  #hh-app .hh-out-box { position: static; }\n  #hh-app .hh-tab { padding: 8px 13px; font-size: 13px; }\n}\n\u003c/style\u003e\n\u003c!-- タブ --\u003e\n\u003cdiv class=\"hh-tabs\"\u003e\n  \u003cbutton class=\"hh-tab hh-active\" onclick=\"hhShowTab('reference')\"\u003eリファレンス\u003c/button\u003e\n  \u003cbutton class=\"hh-tab\" onclick=\"hhShowTab('builder')\"\u003eセキュリティビルダー\u003c/button\u003e\n  \u003cbutton class=\"hh-tab\" onclick=\"hhShowTab('parser')\"\u003eヘッダー解析\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- ═══ TAB 1: リファレンス --\u003e\n\u003cdiv class=\"hh-panel hh-active\" id=\"hh-panel-reference\"\u003e\n  \u003cdiv class=\"hh-section-intro\"\u003e50以上のHTTPヘッダーをカテゴリ別に検索できます。各ヘッダーをクリックすると説明・よく使う値・例が表示されます。\u003c/div\u003e\n  \u003cdiv class=\"hh-search-row\"\u003e\n    \u003cinput type=\"text\" class=\"hh-search\" id=\"hh-ref-search\" placeholder=\"ヘッダーを検索... (例: Content-Type, キャッシュ, CORS)\" oninput=\"hhFilterRef()\"\u003e\n    \u003cdiv class=\"hh-cat-btns\" id=\"hh-cat-btns\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"hh-cards\" id=\"hh-cards\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"hh-no-results\" id=\"hh-no-results\" style=\"display:none;\"\u003e検索条件に一致するヘッダーが見つかりませんでした。\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- ═══ TAB 2: セキュリティビルダー --\u003e\n\u003cdiv class=\"hh-panel\" id=\"hh-panel-builder\"\u003e\n  \u003cdiv class=\"hh-section-intro\"\u003eセキュリティヘッダーを選択・設定して、Apache（.htaccess）またはNginx用の設定スニペットを生成します。\u003c/div\u003e\n  \u003cdiv class=\"hh-builder-layout\"\u003e\n    \u003cdiv class=\"hh-builder-left\"\u003e\n\u003cpre\u003e\u003ccode\u003e  \u0026lt;!-- CSP --\u0026gt;\n  \u0026lt;div class=\u0026quot;hh-builder-section\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-builder-sec-head\u0026quot;\u0026gt;\n      Content-Security-Policy\n      \u0026lt;span class=\u0026quot;hh-builder-sec-desc\u0026quot;\u0026gt;— 読み込み元の制御\u0026lt;/span\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-b-csp\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt;\n      \u0026lt;label for=\u0026quot;hh-b-csp\u0026quot;\u0026gt;CSPヘッダーを有効化\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-field-group\u0026quot; id=\u0026quot;hh-b-csp-fields\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt;\n        \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;default-src\u0026lt;/span\u0026gt;\n        \u0026lt;select class=\u0026quot;hh-select\u0026quot; id=\u0026quot;hh-csp-default\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt;\n          \u0026lt;option value=\u0026quot;'self'\u0026quot;\u0026gt;'self'（同一オリジンのみ）\u0026lt;/option\u0026gt;\n          \u0026lt;option value=\u0026quot;'self' 'unsafe-inline'\u0026quot;\u0026gt;'self' 'unsafe-inline'\u0026lt;/option\u0026gt;\n          \u0026lt;option value=\u0026quot;'none'\u0026quot;\u0026gt;'none'（すべて禁止）\u0026lt;/option\u0026gt;\n          \u0026lt;option value=\u0026quot;*\u0026quot;\u0026gt;*（すべて許可）\u0026lt;/option\u0026gt;\n        \u0026lt;/select\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt;\n        \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;script-src\u0026lt;/span\u0026gt;\n        \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;hh-input\u0026quot; id=\u0026quot;hh-csp-script\u0026quot; placeholder=\u0026quot;'self'（空白でdefault-srcを継承）\u0026quot; oninput=\u0026quot;hhBuild()\u0026quot;\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt;\n        \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;style-src\u0026lt;/span\u0026gt;\n        \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;hh-input\u0026quot; id=\u0026quot;hh-csp-style\u0026quot; placeholder=\u0026quot;'self'（空白でdefault-srcを継承）\u0026quot; oninput=\u0026quot;hhBuild()\u0026quot;\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt;\n        \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;img-src\u0026lt;/span\u0026gt;\n        \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;hh-input\u0026quot; id=\u0026quot;hh-csp-img\u0026quot; placeholder=\u0026quot;'self' data:（空白で継承）\u0026quot; oninput=\u0026quot;hhBuild()\u0026quot;\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt;\n        \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;frame-src\u0026lt;/span\u0026gt;\n        \u0026lt;input type=\u0026quot;text\u0026quot; class=\u0026quot;hh-input\u0026quot; id=\u0026quot;hh-csp-frame\u0026quot; placeholder=\u0026quot;'none'（空白で継承）\u0026quot; oninput=\u0026quot;hhBuild()\u0026quot;\u0026gt;\n      \u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- HSTS --\u0026gt;\n  \u0026lt;div class=\u0026quot;hh-builder-section\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-builder-sec-head\u0026quot;\u0026gt;Strict-Transport-Security \u0026lt;span class=\u0026quot;hh-builder-sec-desc\u0026quot;\u0026gt;— HTTPS強制\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-b-hsts\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt;\n      \u0026lt;label for=\u0026quot;hh-b-hsts\u0026quot;\u0026gt;HSTSを有効化\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-field-group\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt;\n        \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;max-age\u0026lt;/span\u0026gt;\n        \u0026lt;select class=\u0026quot;hh-select\u0026quot; id=\u0026quot;hh-hsts-age\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; style=\u0026quot;max-width:240px;\u0026quot;\u0026gt;\n          \u0026lt;option value=\u0026quot;2592000\u0026quot;\u0026gt;30日（2592000秒）\u0026lt;/option\u0026gt;\n          \u0026lt;option value=\u0026quot;15552000\u0026quot;\u0026gt;6ヶ月（15552000秒）\u0026lt;/option\u0026gt;\n          \u0026lt;option value=\u0026quot;31536000\u0026quot; selected\u0026gt;1年（31536000秒）\u0026lt;/option\u0026gt;\n        \u0026lt;/select\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-hsts-sub\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt;\n        \u0026lt;label for=\u0026quot;hh-hsts-sub\u0026quot;\u0026gt;includeSubDomains（サブドメインも対象）\u0026lt;/label\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-hsts-pre\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt;\n        \u0026lt;label for=\u0026quot;hh-hsts-pre\u0026quot;\u0026gt;preload（HSTPSプリロードリストへ登録）\u0026lt;/label\u0026gt;\n      \u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- X-Frame-Options --\u0026gt;\n  \u0026lt;div class=\u0026quot;hh-builder-section\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-builder-sec-head\u0026quot;\u0026gt;X-Frame-Options \u0026lt;span class=\u0026quot;hh-builder-sec-desc\u0026quot;\u0026gt;— クリックジャッキング対策\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-b-xframe\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt;\n      \u0026lt;label for=\u0026quot;hh-b-xframe\u0026quot;\u0026gt;X-Frame-Optionsを有効化\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-field-group\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt;\n        \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;値\u0026lt;/span\u0026gt;\n        \u0026lt;select class=\u0026quot;hh-select\u0026quot; id=\u0026quot;hh-xframe-val\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; style=\u0026quot;max-width:240px;\u0026quot;\u0026gt;\n          \u0026lt;option value=\u0026quot;SAMEORIGIN\u0026quot; selected\u0026gt;SAMEORIGIN（同一オリジンのみ許可）\u0026lt;/option\u0026gt;\n          \u0026lt;option value=\u0026quot;DENY\u0026quot;\u0026gt;DENY（すべて禁止）\u0026lt;/option\u0026gt;\n        \u0026lt;/select\u0026gt;\n      \u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- X-Content-Type-Options --\u0026gt;\n  \u0026lt;div class=\u0026quot;hh-builder-section\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-builder-sec-head\u0026quot;\u0026gt;X-Content-Type-Options \u0026lt;span class=\u0026quot;hh-builder-sec-desc\u0026quot;\u0026gt;— MIMEスニッフィング防止\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-b-xcto\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt;\n      \u0026lt;label for=\u0026quot;hh-b-xcto\u0026quot;\u0026gt;有効化（常に nosniff）\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- Referrer-Policy --\u0026gt;\n  \u0026lt;div class=\u0026quot;hh-builder-section\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-builder-sec-head\u0026quot;\u0026gt;Referrer-Policy \u0026lt;span class=\u0026quot;hh-builder-sec-desc\u0026quot;\u0026gt;— リファラー情報の制御\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-b-rp\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt;\n      \u0026lt;label for=\u0026quot;hh-b-rp\u0026quot;\u0026gt;Referrer-Policyを有効化\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-field-group\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-field-row\u0026quot;\u0026gt;\n        \u0026lt;span class=\u0026quot;hh-field-label\u0026quot;\u0026gt;ポリシー\u0026lt;/span\u0026gt;\n        \u0026lt;select class=\u0026quot;hh-select\u0026quot; id=\u0026quot;hh-rp-val\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt;\n          \u0026lt;option value=\u0026quot;no-referrer\u0026quot;\u0026gt;no-referrer（送信しない）\u0026lt;/option\u0026gt;\n          \u0026lt;option value=\u0026quot;no-referrer-when-downgrade\u0026quot;\u0026gt;no-referrer-when-downgrade\u0026lt;/option\u0026gt;\n          \u0026lt;option value=\u0026quot;strict-origin-when-cross-origin\u0026quot; selected\u0026gt;strict-origin-when-cross-origin（推奨）\u0026lt;/option\u0026gt;\n          \u0026lt;option value=\u0026quot;same-origin\u0026quot;\u0026gt;same-origin（同一オリジンのみ）\u0026lt;/option\u0026gt;\n          \u0026lt;option value=\u0026quot;origin\u0026quot;\u0026gt;origin\u0026lt;/option\u0026gt;\n        \u0026lt;/select\u0026gt;\n      \u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n  \u0026lt;!-- Permissions-Policy --\u0026gt;\n  \u0026lt;div class=\u0026quot;hh-builder-section\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-builder-sec-head\u0026quot;\u0026gt;Permissions-Policy \u0026lt;span class=\u0026quot;hh-builder-sec-desc\u0026quot;\u0026gt;— ブラウザ機能の制御\u0026lt;/span\u0026gt;\u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot;\u0026gt;\n      \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-b-pp\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt;\n      \u0026lt;label for=\u0026quot;hh-b-pp\u0026quot;\u0026gt;Permissions-Policyを有効化\u0026lt;/label\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-field-group\u0026quot; id=\u0026quot;hh-b-pp-fields\u0026quot; style=\u0026quot;display:none;\u0026quot;\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-pp-cam\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt;\n        \u0026lt;label for=\u0026quot;hh-pp-cam\u0026quot;\u0026gt;camera=()（カメラを無効化）\u0026lt;/label\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-pp-mic\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt;\n        \u0026lt;label for=\u0026quot;hh-pp-mic\u0026quot;\u0026gt;microphone=()（マイクを無効化）\u0026lt;/label\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-pp-geo\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot; checked\u0026gt;\n        \u0026lt;label for=\u0026quot;hh-pp-geo\u0026quot;\u0026gt;geolocation=()（位置情報を無効化）\u0026lt;/label\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-pp-pay\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt;\n        \u0026lt;label for=\u0026quot;hh-pp-pay\u0026quot;\u0026gt;payment=()（決済APIを無効化）\u0026lt;/label\u0026gt;\n      \u0026lt;/div\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-enable-row\u0026quot; style=\u0026quot;padding:0;border:none;\u0026quot;\u0026gt;\n        \u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;hh-pp-usb\u0026quot; onchange=\u0026quot;hhBuild()\u0026quot;\u0026gt;\n        \u0026lt;label for=\u0026quot;hh-pp-usb\u0026quot;\u0026gt;usb=()（USBを無効化）\u0026lt;/label\u0026gt;\n      \u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n  \u0026lt;/div\u0026gt;\n\n\u0026lt;/div\u0026gt;\u0026lt;!-- /.hh-builder-left --\u0026gt;\n\n\u0026lt;div class=\u0026quot;hh-builder-right\u0026quot;\u0026gt;\n  \u0026lt;div class=\u0026quot;hh-out-box\u0026quot;\u0026gt;\n    \u0026lt;div class=\u0026quot;hh-out-topbar\u0026quot;\u0026gt;\n      \u0026lt;span class=\u0026quot;hh-out-label\u0026quot;\u0026gt;生成された設定\u0026lt;/span\u0026gt;\n      \u0026lt;div class=\u0026quot;hh-out-actions\u0026quot;\u0026gt;\n        \u0026lt;div class=\u0026quot;hh-format-btns\u0026quot;\u0026gt;\n          \u0026lt;button class=\u0026quot;hh-format-btn hh-fmt-active\u0026quot; id=\u0026quot;hh-fmt-apache\u0026quot; onclick=\u0026quot;hhSetFmt('apache')\u0026quot;\u0026gt;Apache\u0026lt;/button\u0026gt;\n          \u0026lt;button class=\u0026quot;hh-format-btn\u0026quot; id=\u0026quot;hh-fmt-nginx\u0026quot; onclick=\u0026quot;hhSetFmt('nginx')\u0026quot;\u0026gt;Nginx\u0026lt;/button\u0026gt;\n        \u0026lt;/div\u0026gt;\n        \u0026lt;button class=\u0026quot;hh-copy-btn\u0026quot; id=\u0026quot;hh-build-copy\u0026quot; onclick=\u0026quot;hhCopyBuild()\u0026quot;\u0026gt;コピー\u0026lt;/button\u0026gt;\n      \u0026lt;/div\u0026gt;\n    \u0026lt;/div\u0026gt;\n    \u0026lt;pre class=\u0026quot;hh-out-code\u0026quot; id=\u0026quot;hh-build-out\u0026quot;\u0026gt;\u0026lt;/pre\u0026gt;\n  \u0026lt;/div\u0026gt;\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n  \u003c/div\u003e\u003c!-- /.hh-builder-layout --\u003e\n\u003c/div\u003e\n\u003c!-- ═══ TAB 3: ヘッダー解析 --\u003e\n\u003cdiv class=\"hh-panel\" id=\"hh-panel-parser\"\u003e\n  \u003cdiv class=\"hh-section-intro\"\u003eHTTPレスポンスヘッダーを貼り付けて「解析」をクリックすると、各ヘッダーの意味を日本語で確認できます。\u003c/div\u003e\n  \u003cdiv class=\"hh-parser-layout\"\u003e\n    \u003cdiv class=\"hh-parser-left\"\u003e\n      \u003ctextarea class=\"hh-textarea\" id=\"hh-parse-input\" placeholder=\"HTTPヘッダーをここに貼り付けてください。例：\n\u003cp\u003eHTTP/1.1 200 OK\nContent-Type: text/html; charset=utf-8\nCache-Control: max-age=3600, public\nStrict-Transport-Security: max-age=31536000; includeSubDomains\nX-Frame-Options: SAMEORIGIN\nContent-Encoding: gzip\nVary: Accept-Encoding\nServer: nginx/1.24.0\u0026quot;\u0026gt;\u003c/textarea\u003e\n\u003cbutton class=\"hh-parse-btn\" onclick=\"hhParse()\"\u003eヘッダーを解析する\u003c/button\u003e\n\u003cdiv class=\"hh-hint\" style=\"margin-top:8px;\"\u003eHTTP/1.1・HTTP/2 形式のレスポンスヘッダーに対応しています。\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"hh-parser-right\"\u003e\n\u003cdiv id=\"hh-parsed-out\"\u003e\n\u003cdiv class=\"hh-parse-placeholder\"\u003e上にヘッダーを貼り付けて「解析」をクリックすると、こちらに解説が表示されます。\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c/p\u003e","title":"HTTPヘッダー分析ツール"},{"content":"HTML・CSS・JavaScriptを貼り付けて 圧縮 ボタンを押すだけ。空白・コメント・不要な文字を除去してファイルサイズを削減します。すべてブラウザ内で完結し、コードはサーバーに送信されません。\nHTML CSS JavaScript コメントを除去 空白を圧縮 省略可能な終了タグを削除 コメントを除去 空白を除去 末尾セミコロンを削除 重複セレクタをマージ // コメントを除去 /* */ コメントを除去 空白を圧縮 \u0026#128194; ファイルを開く ファイル未選択 \u0026#9889; 圧縮する \u0026#10024; 整形する \u0026#128203; 結果をコピー クリア 出力結果 事業の会計・確定申告を自動化しませんか？ freee会計なら、銀行・カードの明細を自動取得して帳簿作成を大幅に省力化。個人事業主から法人まで対応しています。\nfreee会計を無料で試す ※ 上記リンクはアフィリエイトリンクを含む場合があります。詳細はアフィリエイト開示をご覧ください。 関連ツール: SQLフォーマッター \u0026nbsp;|\u0026nbsp; JSONフォーマッター 使い方 言語タブ（HTML / CSS / JavaScript）を選択する 圧縮したいコードを貼り付けるか、ファイルをアップロードする オプションを確認して 圧縮する をクリック 圧縮前後のバイト数と削減率が表示される 結果をコピー でクリップボードにコピー 整形する ボタンを使えば逆操作（インデント付き整形）も可能です。\n各言語の圧縮内容 言語 除去される内容 HTML コメント、余分な空白・改行、省略可能な終了タグ（オプション） CSS コメント、空白、末尾セミコロン、重複セレクタ（オプション） JavaScript // コメント、/* */ コメント、余分な空白（文字列内は保持） よくある質問 コードはサーバーに送信されますか？ されません。すべての処理はブラウザのJavaScript内で完結します。\nJavaScriptの文字列内の空白は保持されますか？ はい。シングルクォート・ダブルクォート・テンプレートリテラル内の内容はそのまま保持されます。\nファイルサイズの削減率はどう計算されますか？ UTF-8エンコード時のバイト数（Blob サイズ）で計算しています。ブラウザやサーバーが測定する値と一致します。\n関連ツール: SQLフォーマッター | JSONフォーマッター ","permalink":"https://productivity-works.com/ja/tools/code-minifier/","summary":"\u003cp\u003eHTML・CSS・JavaScriptを貼り付けて \u003cstrong\u003e圧縮\u003c/strong\u003e ボタンを押すだけ。空白・コメント・不要な文字を除去してファイルサイズを削減します。すべてブラウザ内で完結し、コードはサーバーに送信されません。\u003c/p\u003e\n\u003cdiv id=\"mn-app\"\u003e\n\u003cstyle\u003e\n#mn-app {\n  font-family: system-ui, -apple-system, sans-serif;\n  max-width: 860px;\n  margin: 0 auto;\n  color: #1a1a1a;\n}\n#mn-app .mn-tabs {\n  display: flex;\n  gap: 0;\n  border-bottom: 2px solid #e0e0e0;\n  margin-bottom: 0;\n}\n#mn-app .mn-tab {\n  padding: 10px 22px;\n  cursor: pointer;\n  background: #f5f5f5;\n  border: 1px solid #e0e0e0;\n  border-bottom: none;\n  border-radius: 6px 6px 0 0;\n  font-size: 0.95rem;\n  font-weight: 500;\n  color: #555;\n  transition: background 0.15s;\n  margin-right: 4px;\n  user-select: none;\n}\n#mn-app .mn-tab.active {\n  background: #fff;\n  color: #2563eb;\n  border-color: #e0e0e0;\n  border-bottom: 2px solid #fff;\n  margin-bottom: -2px;\n  z-index: 1;\n}\n#mn-app .mn-tab:hover:not(.active) {\n  background: #eee;\n}\n#mn-app .mn-panel {\n  border: 1px solid #e0e0e0;\n  border-top: none;\n  border-radius: 0 0 8px 8px;\n  background: #fff;\n  padding: 18px;\n}\n#mn-app .mn-options {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 14px;\n  margin-bottom: 14px;\n  padding: 12px 14px;\n  background: #f8f9fa;\n  border-radius: 6px;\n  border: 1px solid #e8e8e8;\n}\n#mn-app .mn-options label {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 0.88rem;\n  color: #444;\n  cursor: pointer;\n  user-select: none;\n}\n#mn-app .mn-options input[type=\"checkbox\"] {\n  width: 15px;\n  height: 15px;\n  cursor: pointer;\n}\n#mn-app .mn-upload-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 10px;\n}\n#mn-app .mn-upload-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 6px 14px;\n  background: #f0f0f0;\n  border: 1px solid #ccc;\n  border-radius: 5px;\n  font-size: 0.85rem;\n  cursor: pointer;\n  color: #333;\n  transition: background 0.15s;\n  white-space: nowrap;\n}\n#mn-app .mn-upload-btn:hover { background: #e4e4e4; }\n#mn-app .mn-file-name {\n  font-size: 0.82rem;\n  color: #888;\n}\n#mn-app textarea {\n  width: 100%;\n  box-sizing: border-box;\n  height: 200px;\n  padding: 12px;\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n  font-size: 0.82rem;\n  border: 1px solid #d0d0d0;\n  border-radius: 6px;\n  resize: vertical;\n  background: #fafafa;\n  color: #1a1a1a;\n  line-height: 1.5;\n  transition: border-color 0.15s;\n}\n#mn-app textarea:focus {\n  outline: none;\n  border-color: #2563eb;\n  background: #fff;\n}\n#mn-app .mn-actions {\n  display: flex;\n  gap: 10px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n  align-items: center;\n}\n#mn-app .mn-btn {\n  padding: 9px 20px;\n  border: none;\n  border-radius: 6px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, transform 0.1s;\n}\n#mn-app .mn-btn:active { transform: scale(0.97); }\n#mn-app .mn-btn-primary {\n  background: #2563eb;\n  color: #fff;\n}\n#mn-app .mn-btn-primary:hover { background: #1d4ed8; }\n#mn-app .mn-btn-secondary {\n  background: #f3f4f6;\n  color: #374151;\n  border: 1px solid #d1d5db;\n}\n#mn-app .mn-btn-secondary:hover { background: #e5e7eb; }\n#mn-app .mn-btn-copy {\n  background: #10b981;\n  color: #fff;\n}\n#mn-app .mn-btn-copy:hover { background: #059669; }\n#mn-app .mn-btn-clear {\n  background: #f9fafb;\n  color: #6b7280;\n  border: 1px solid #e5e7eb;\n  margin-left: auto;\n}\n#mn-app .mn-btn-clear:hover { background: #f3f4f6; }\n#mn-app .mn-stats {\n  margin-top: 14px;\n  padding: 10px 14px;\n  background: #f0fdf4;\n  border: 1px solid #bbf7d0;\n  border-radius: 6px;\n  font-size: 0.88rem;\n  color: #166534;\n  display: none;\n}\n#mn-app .mn-stats.visible { display: block; }\n#mn-app .mn-stats strong { color: #15803d; }\n#mn-app .mn-output-label {\n  font-size: 0.88rem;\n  font-weight: 600;\n  color: #555;\n  margin-top: 16px;\n  margin-bottom: 6px;\n}\n#mn-app .mn-error {\n  margin-top: 10px;\n  padding: 10px 14px;\n  background: #fef2f2;\n  border: 1px solid #fecaca;\n  border-radius: 6px;\n  font-size: 0.88rem;\n  color: #b91c1c;\n  display: none;\n}\n#mn-app .mn-error.visible { display: block; }\n#mn-app .mn-cta-freee {\n  margin-top: 28px;\n  padding: 20px 24px;\n  background: linear-gradient(135deg, #e8f4fd 0%, #f0f9ff 100%);\n  border: 1px solid #bae3f9;\n  border-radius: 10px;\n}\n#mn-app .mn-cta-freee h3 {\n  margin: 0 0 8px 0;\n  font-size: 1rem;\n  color: #0369a1;\n}\n#mn-app .mn-cta-freee p {\n  margin: 0 0 14px 0;\n  font-size: 0.88rem;\n  color: #374151;\n  line-height: 1.6;\n}\n#mn-app .mn-cta-freee a.mn-cta-btn {\n  display: inline-block;\n  padding: 10px 22px;\n  background: #0284c7;\n  color: #fff;\n  text-decoration: none;\n  border-radius: 6px;\n  font-size: 0.9rem;\n  font-weight: 600;\n  transition: background 0.15s;\n}\n#mn-app .mn-cta-freee a.mn-cta-btn:hover { background: #0369a1; }\n#mn-app .mn-a8-footer {\n  margin-top: 20px;\n  padding: 14px 18px;\n  background: #f9fafb;\n  border: 1px solid #e5e7eb;\n  border-radius: 8px;\n  font-size: 0.8rem;\n  color: #6b7280;\n  line-height: 1.6;\n}\n#mn-app .mn-a8-footer a {\n  color: #2563eb;\n  text-decoration: none;\n}\n#mn-app .mn-a8-footer a:hover { text-decoration: underline; }\n#mn-app .mn-divider {\n  border: none;\n  border-top: 1px solid #e5e7eb;\n  margin: 24px 0;\n}\n#mn-app .mn-links {\n  font-size: 0.88rem;\n  color: #555;\n}\n#mn-app .mn-links a {\n  color: #2563eb;\n  text-decoration: none;\n}\n#mn-app .mn-links a:hover { text-decoration: underline; }\n\u003c/style\u003e\n\u003cdiv class=\"mn-tabs\"\u003e\n  \u003cdiv class=\"mn-tab active\" data-lang=\"html\" onclick=\"mnSwitchTab('html')\"\u003eHTML\u003c/div\u003e\n  \u003cdiv class=\"mn-tab\" data-lang=\"css\" onclick=\"mnSwitchTab('css')\"\u003eCSS\u003c/div\u003e\n  \u003cdiv class=\"mn-tab\" data-lang=\"js\" onclick=\"mnSwitchTab('js')\"\u003eJavaScript\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"mn-panel\"\u003e\n  \u003c!-- HTML options --\u003e\n  \u003cdiv id=\"mn-opts-html\" class=\"mn-options\"\u003e\n    \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"mn-html-comments\" checked\u003e コメントを除去\u003c/label\u003e\n    \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"mn-html-whitespace\" checked\u003e 空白を圧縮\u003c/label\u003e\n    \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"mn-html-optional-tags\"\u003e 省略可能な終了タグを削除\u003c/label\u003e\n  \u003c/div\u003e\n  \u003c!-- CSS options --\u003e\n  \u003cdiv id=\"mn-opts-css\" class=\"mn-options\" style=\"display:none\"\u003e\n    \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"mn-css-comments\" checked\u003e コメントを除去\u003c/label\u003e\n    \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"mn-css-whitespace\" checked\u003e 空白を除去\u003c/label\u003e\n    \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"mn-css-last-semi\" checked\u003e 末尾セミコロンを削除\u003c/label\u003e\n    \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"mn-css-merge\"\u003e 重複セレクタをマージ\u003c/label\u003e\n  \u003c/div\u003e\n  \u003c!-- JS options --\u003e\n  \u003cdiv id=\"mn-opts-js\" class=\"mn-options\" style=\"display:none\"\u003e\n    \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"mn-js-line-comments\" checked\u003e // コメントを除去\u003c/label\u003e\n    \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"mn-js-block-comments\" checked\u003e /* */ コメントを除去\u003c/label\u003e\n    \u003clabel\u003e\u003cinput type=\"checkbox\" id=\"mn-js-whitespace\" checked\u003e 空白を圧縮\u003c/label\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mn-upload-row\"\u003e\n    \u003clabel class=\"mn-upload-btn\" for=\"mn-file-input\"\u003e\u0026#128194; ファイルを開く\u003c/label\u003e\n    \u003cinput type=\"file\" id=\"mn-file-input\" style=\"display:none\" accept=\".html,.htm,.css,.js,.txt\" onchange=\"mnLoadFile(this)\"\u003e\n    \u003cspan class=\"mn-file-name\" id=\"mn-file-name\"\u003eファイル未選択\u003c/span\u003e\n  \u003c/div\u003e\n  \u003ctextarea id=\"mn-input\" placeholder=\"HTML・CSS・JavaScriptをここに貼り付け…\" spellcheck=\"false\"\u003e\u003c/textarea\u003e\n  \u003cdiv class=\"mn-actions\"\u003e\n    \u003cbutton class=\"mn-btn mn-btn-primary\" onclick=\"mnMinify()\"\u003e\u0026#9889; 圧縮する\u003c/button\u003e\n    \u003cbutton class=\"mn-btn mn-btn-secondary\" onclick=\"mnBeautify()\"\u003e\u0026#10024; 整形する\u003c/button\u003e\n    \u003cbutton class=\"mn-btn mn-btn-copy\" onclick=\"mnCopy()\"\u003e\u0026#128203; 結果をコピー\u003c/button\u003e\n    \u003cbutton class=\"mn-btn mn-btn-clear\" onclick=\"mnClear()\"\u003eクリア\u003c/button\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"mn-error\" id=\"mn-error\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"mn-stats\" id=\"mn-stats\"\u003e\u003c/div\u003e\n  \u003cdiv class=\"mn-output-label\"\u003e出力結果\u003c/div\u003e\n  \u003ctextarea id=\"mn-output\" placeholder=\"圧縮されたコードがここに表示されます…\" spellcheck=\"false\" readonly\u003e\u003c/textarea\u003e\n\u003c/div\u003e\n\u003c!-- freee CTA --\u003e\n\u003cdiv class=\"mn-cta-freee\"\u003e\n  \u003ch3\u003e事業の会計・確定申告を自動化しませんか？\u003c/h3\u003e\n  \u003cp\u003efreee会計なら、銀行・カードの明細を自動取得して帳簿作成を大幅に省力化。個人事業主から法人まで対応しています。\u003c/p\u003e","title":"コード圧縮ツール"},{"content":"※本記事にはアフィリエイト広告が含まれています。\niDeCo節税シミュレーター【2026年版】 年収・職業・毎月の掛金を入力するだけで、節税額と将来の受取額を自動計算します。\n年収（額面・万円） 200万円500万円1,500万円 職業（掛金上限が変わります） 会社員（企業年金なし）— 上限23,000円/月 会社員（企業型DCあり）— 上限20,000円/月 会社員（DB・厚生年金基金あり）— 上限12,000円/月 公務員 — 上限12,000円/月 自営業・フリーランス — 上限68,000円/月 専業主婦(夫) — 上限23,000円/月 毎月の掛金（円） 5,000円23,000円68,000円 想定年利回り（%） 1%4.0%8% 運用年数（60歳まで） 1年25年35年 60歳時点の受取額（税引前） 11,896,000円 うち運用益: 4,996,000円 年間の節税額 55,200円 累計の節税額 1,380,000円 掛金合計（元本） 6,900,000円 節税込み実質リターン +78.2% 計算条件: 給与所得控除・基礎控除・社会保険料控除（14.7%概算）を適用した簡易計算です。実際の節税額は個人の状況により異なります。iDeCoの掛金は全額所得控除の対象です。 iDeCoの3つの節税メリット iDeCoは3段階で節税できる、最強の節税制度です。\nタイミング 節税内容 効果 掛金拠出時 全額所得控除 所得税・住民税が毎年減る 運用中 運用益が非課税 通常20.315%の税金がゼロ 受取時 退職所得控除・公的年金等控除 一時金 or 年金で受取時も優遇 iDeCoを始める手順 証券口座を選ぶ — 手数料と商品ラインナップで選ぶのがポイント 掛金を決める — 上限額は職業で異なる（上のシミュレーターで確認） 運用商品を選ぶ — インデックスファンドが初心者にはおすすめ 毎月自動引き落とし — 一度設定すれば放置でOK おすすめの証券会社: 楽天証券でiDeCo口座を開設する （手数料最安水準、商品数豊富）\n年収別の節税効果まとめ 年収 掛金（会社員） 年間節税額 30年累計節税 300万円 23,000円/月 約41,400円 約124万円 500万円 23,000円/月 約55,200円 約166万円 700万円 23,000円/月 約55,200円 約166万円 1,000万円 23,000円/月 約82,800円 約248万円 ※会社員（企業年金なし）、独身・扶養なしの概算\nよくある質問 Q. iDeCoとNISA、どちらを先に始めるべき？ 一般的にはNISAが先。iDeCoは60歳まで引き出せないため、まずはNISAで流動性を確保してからiDeCoを追加するのがおすすめです。 → NISAとiDeCo、どっちを先に？ Q. 自営業者はiDeCoの掛金が多いのはなぜ？ 自営業者は厚生年金がないため、老後の備えが少なくなります。その分、iDeCoの掛金上限が月68,000円（年81.6万円）と高く設定されています。\nQ. 途中で掛金を変更できますか？ はい、年1回変更できます。掛金を0円にして運用のみ継続する「運用指図者」になることも可能です。\nQ. 受取時に税金はかかりますか？ 一時金で受け取る場合は退職所得控除、年金で受け取る場合は公的年金等控除が適用されます。全額課税されるわけではありません。\nおすすめサービス iDeCoの節税効果がわかったら、次のアクションに進みましょう。\niDeCo口座を開設する → 楽天証券 なら手数料最安水準＆商品数豊富 NISAも併用する → つみたてNISAシミュレーター でNISA分の資産額も計算 老後資金の全体像を確認 → 年金シミュレーター で将来の年金受給額をチェック 確定申告を楽にする → freee会計 なら控除申請も自動化 関連ツール・記事 つみたてNISAシミュレーター — 将来の資産額を計算 年金シミュレーター — 将来の年金受給額を確認 手取り計算シミュレーター — 年収から手取りを計算 家計簿シミュレーター — 理想の支出配分を計算 副業の税金計算シミュレーター — 副業収入の税金を確認 NISAとiDeCo、どっちを先に？ iDeCoおすすめ証券会社 関連記事 NISA iDeCo どっちを先に始めるべき？優先順位を徹底解説【2026年最新版】 iDeCo おすすめ証券会社ランキング【2026年最新版】手数料・商品数を徹底比較 iDeCo節税シミュレーション｜年収別に実際いくら得するか計算 ","permalink":"https://productivity-works.com/ja/tools/ideco-simulator/","summary":"\u003cp\u003e※本記事にはアフィリエイト広告が含まれています。\u003c/p\u003e\n\u003ch1 id=\"ideco節税シミュレーター2026年版\"\u003eiDeCo節税シミュレーター【2026年版】\u003c/h1\u003e\n\u003cp\u003e年収・職業・毎月の掛金を入力するだけで、\u003cstrong\u003e節税額\u003c/strong\u003eと\u003cstrong\u003e将来の受取額\u003c/strong\u003eを自動計算します。\u003c/p\u003e\n\u003cdiv id=\"ideco-calc\" style=\"max-width:640px;margin:0 auto;padding:24px;border:2px solid #2563eb;border-radius:12px;background:#f8fafc;\"\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e年収（額面・万円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"income\" min=\"200\" max=\"1500\" step=\"10\" value=\"500\" oninput=\"calcIdeco()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e200万円\u003c/span\u003e\u003cspan id=\"incomeVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e500万円\u003c/span\u003e\u003cspan\u003e1,500万円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e職業（掛金上限が変わります）\u003c/label\u003e\n\u003cselect id=\"jobType\" onchange=\"calcIdeco()\" style=\"width:100%;padding:8px;border:1px solid #cbd5e1;border-radius:6px;font-size:16px;\"\u003e\n\u003coption value=\"employee\"\u003e会社員（企業年金なし）— 上限23,000円/月\u003c/option\u003e\n\u003coption value=\"employee_dc\"\u003e会社員（企業型DCあり）— 上限20,000円/月\u003c/option\u003e\n\u003coption value=\"employee_db\"\u003e会社員（DB・厚生年金基金あり）— 上限12,000円/月\u003c/option\u003e\n\u003coption value=\"civil\"\u003e公務員 — 上限12,000円/月\u003c/option\u003e\n\u003coption value=\"self\"\u003e自営業・フリーランス — 上限68,000円/月\u003c/option\u003e\n\u003coption value=\"homemaker\"\u003e専業主婦(夫) — 上限23,000円/月\u003c/option\u003e\n\u003c/select\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e毎月の掛金（円）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"contribution\" min=\"5000\" max=\"68000\" step=\"1000\" value=\"23000\" oninput=\"calcIdeco()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e5,000円\u003c/span\u003e\u003cspan id=\"contribVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e23,000円\u003c/span\u003e\u003cspan id=\"contribMax\"\u003e68,000円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:20px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e想定年利回り（%）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"rate\" min=\"1\" max=\"8\" step=\"0.5\" value=\"4\" oninput=\"calcIdeco()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1%\u003c/span\u003e\u003cspan id=\"rateVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e4.0%\u003c/span\u003e\u003cspan\u003e8%\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"margin-bottom:24px;\"\u003e\n\u003clabel style=\"display:block;font-weight:bold;margin-bottom:6px;\"\u003e運用年数（60歳まで）\u003c/label\u003e\n\u003cinput type=\"range\" id=\"years\" min=\"1\" max=\"35\" step=\"1\" value=\"25\" oninput=\"calcIdeco()\" style=\"width:100%;\"\u003e\n\u003cdiv style=\"display:flex;justify-content:space-between;font-size:13px;color:#64748b;\"\u003e\u003cspan\u003e1年\u003c/span\u003e\u003cspan id=\"yearsVal\" style=\"font-weight:bold;font-size:18px;color:#2563eb;\"\u003e25年\u003c/span\u003e\u003cspan\u003e35年\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#1e40af;color:white;border-radius:8px;padding:20px;text-align:center;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"font-size:14px;margin-bottom:4px;\"\u003e60歳時点の受取額（税引前）\u003c/div\u003e\n\u003cdiv id=\"totalAsset\" style=\"font-size:36px;font-weight:bold;\"\u003e11,896,000円\u003c/div\u003e\n\u003cdiv style=\"font-size:13px;margin-top:4px;\"\u003eうち運用益: \u003cspan id=\"profitAmt\" style=\"font-weight:bold;\"\u003e4,996,000円\u003c/span\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px;\"\u003e\n\u003cdiv style=\"background:#dcfce7;border-radius:8px;padding:16px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e年間の節税額\u003c/div\u003e\n\u003cdiv id=\"taxSaveYear\" style=\"font-size:22px;font-weight:bold;color:#15803d;\"\u003e55,200円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#fef9c3;border-radius:8px;padding:16px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e累計の節税額\u003c/div\u003e\n\u003cdiv id=\"taxSaveTotal\" style=\"font-size:22px;font-weight:bold;color:#a16207;\"\u003e1,380,000円\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;\"\u003e\n\u003cdiv style=\"background:#e0f2fe;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e掛金合計（元本）\u003c/div\u003e\n\u003cdiv id=\"principal\" style=\"font-size:16px;font-weight:bold;color:#0369a1;\"\u003e6,900,000円\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f3e8ff;border-radius:8px;padding:12px;text-align:center;\"\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003e節税込み実質リターン\u003c/div\u003e\n\u003cdiv id=\"realReturn\" style=\"font-size:16px;font-weight:bold;color:#7c3aed;\"\u003e+78.2%\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"background:#f1f5f9;border-radius:8px;padding:12px;font-size:13px;color:#475569;\"\u003e\n\u003cstrong\u003e計算条件:\u003c/strong\u003e 給与所得控除・基礎控除・社会保険料控除（14.7%概算）を適用した簡易計算です。実際の節税額は個人の状況により異なります。iDeCoの掛金は全額所得控除の対象です。\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript\u003e\nfunction calcIdeco(){\n  var inc=parseInt(document.getElementById('income').value);\n  var job=document.getElementById('jobType').value;\n  var contrib=parseInt(document.getElementById('contribution').value);\n  var r=parseFloat(document.getElementById('rate').value)/100;\n  var y=parseInt(document.getElementById('years').value);\n\n  // 職業別の掛金上限\n  var maxContrib;\n  if(job==='self') maxContrib=68000;\n  else if(job==='employee') maxContrib=23000;\n  else if(job==='employee_dc') maxContrib=20000;\n  else if(job==='employee_db'||job==='civil') maxContrib=12000;\n  else maxContrib=23000; // homemaker\n\n  // 掛金を上限に制限\n  if(contrib\u003emaxContrib) contrib=maxContrib;\n  var slider=document.getElementById('contribution');\n  slider.max=maxContrib;\n  if(parseInt(slider.value)\u003emaxContrib) slider.value=maxContrib;\n\n  var annual=inc*10000;\n  var annualContrib=contrib*12;\n\n  // 給与所得控除\n  var deduction;\n  if(annual\u003c=1625000) deduction=550000;\n  else if(annual\u003c=1800000) deduction=annual*0.4-100000;\n  else if(annual\u003c=3600000) deduction=annual*0.3+80000;\n  else if(annual\u003c=6600000) deduction=annual*0.2+440000;\n  else if(annual\u003c=8500000) deduction=annual*0.1+1100000;\n  else deduction=1950000;\n\n  // 自営業の場合は給与所得控除なし\n  if(job==='self') deduction=0;\n\n  var shotoku=annual-deduction;\n\n  // 基礎控除48万 + 社会保険料（14.7%概算）\n  var socialIns=Math.floor(annual*0.147);\n  if(job==='self') socialIns=Math.floor(annual*0.10); // 国保は低め\n  var basicDeduction=480000;\n  var totalDeduction=basicDeduction+socialIns;\n\n  // iDeCoなしの課税所得\n  var taxableWithout=Math.max(shotoku-totalDeduction,0);\n  // iDeCoありの課税所得\n  var taxableWith=Math.max(shotoku-totalDeduction-annualContrib,0);\n\n  // 所得税率を求める\n  function getIncomeTax(taxable){\n    if(taxable\u003c=1950000) return taxable*0.05;\n    else if(taxable\u003c=3300000) return taxable*0.1-97500;\n    else if(taxable\u003c=6950000) return taxable*0.2-427500;\n    else if(taxable\u003c=9000000) return taxable*0.23-636000;\n    else if(taxable\u003c=18000000) return taxable*0.33-1536000;\n    else if(taxable\u003c=40000000) return taxable*0.40-2796000;\n    else return taxable*0.45-4796000;\n  }\n\n  var taxWithout=Math.floor(getIncomeTax(taxableWithout)*1.021)+Math.floor(taxableWithout*0.1)+5000;\n  var taxWith=Math.floor(getIncomeTax(taxableWith)*1.021)+Math.floor(taxableWith*0.1)+5000;\n\n  var taxSaveYear=Math.max(taxWithout-taxWith,0);\n  var taxSaveTotal=taxSaveYear*y;\n\n  // 将来の資産額\n  var mr=r/12;\n  var n=y*12;\n  var fv=contrib*((Math.pow(1+mr,n)-1)/mr);\n  var p=contrib*n;\n  var profit=fv-p;\n\n  // 節税込み実質リターン\n  var realRet=((fv+taxSaveTotal-p)/p*100);\n\n  document.getElementById('incomeVal').textContent=inc.toLocaleString()+'万円';\n  document.getElementById('contribVal').textContent=contrib.toLocaleString()+'円';\n  document.getElementById('contribMax').textContent=maxContrib.toLocaleString()+'円';\n  document.getElementById('rateVal').textContent=(r*100).toFixed(1)+'%';\n  document.getElementById('yearsVal').textContent=y+'年';\n  document.getElementById('totalAsset').textContent=Math.floor(fv).toLocaleString()+'円';\n  document.getElementById('profitAmt').textContent=Math.floor(profit).toLocaleString()+'円';\n  document.getElementById('taxSaveYear').textContent=taxSaveYear.toLocaleString()+'円';\n  document.getElementById('taxSaveTotal').textContent=taxSaveTotal.toLocaleString()+'円';\n  document.getElementById('principal').textContent=p.toLocaleString()+'円';\n  document.getElementById('realReturn').textContent='+'+realRet.toFixed(1)+'%';\n}\ncalcIdeco();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"idecoの3つの節税メリット\"\u003eiDeCoの3つの節税メリット\u003c/h2\u003e\n\u003cp\u003eiDeCoは\u003cstrong\u003e3段階\u003c/strong\u003eで節税できる、最強の節税制度です。\u003c/p\u003e","title":"iDeCoシミュレーター｜節税額・将来資産を自動計算【2026年版】"},{"content":" 色覚テスト（石原式スクリーニング） 石原式に基づいたスクリーニングテストです。各プレートを見て、隠された数字を入力してください。全5問です。\n注意事項：このテストはスクリーニングツールです。医学的診断ではありません。正確な診断は眼科医にご相談ください。 第1問 / 全5問 見えている数字を入力してください 回答する テスト結果 5問中の正解数 再確認：このテストはスクリーニング目的のみです。診断は必ず眼科専門医にご相談ください。 もう一度テストする 健康管理も仕事も効率化 → freee会計で日々の管理を自動化 関連ツール Color Blindness Simulator → Color Blindness Simulatorツール Color Contrast Checker → Color Contrast Checkerツール Color Converter → Color Converterツール ","permalink":"https://productivity-works.com/ja/tools/color-vision-test/","summary":"\u003cdiv id=\"cvt-app\"\u003e\n\u003cstyle\u003e\n#cvt-app {\n  font-family: -apple-system, BlinkMacSystemFont, 'Hiragino Sans', 'Meiryo', sans-serif;\n  max-width: 720px;\n  margin: 0 auto;\n  padding: 16px;\n  color: #1a1a2e;\n}\n#cvt-app h2 {\n  font-size: 1.5rem;\n  margin-bottom: 8px;\n  color: #1a1a2e;\n}\n#cvt-app p {\n  margin: 0 0 12px;\n  line-height: 1.7;\n}\n#cvt-app .cvt-disclaimer {\n  background: #fff8e1;\n  border-left: 4px solid #f9a825;\n  padding: 10px 14px;\n  border-radius: 4px;\n  font-size: 0.85rem;\n  margin-bottom: 20px;\n  color: #5d4037;\n}\n#cvt-app .cvt-plate-area {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 16px;\n  margin-bottom: 20px;\n}\n#cvt-app .cvt-progress {\n  font-size: 0.9rem;\n  color: #555;\n}\n#cvt-app canvas#cvt-canvas {\n  border-radius: 50%;\n  border: 3px solid #ddd;\n  display: block;\n  max-width: 100%;\n}\n#cvt-app .cvt-question {\n  font-size: 1.05rem;\n  font-weight: 600;\n  text-align: center;\n}\n#cvt-app .cvt-input-row {\n  display: flex;\n  gap: 8px;\n  align-items: center;\n  flex-wrap: wrap;\n  justify-content: center;\n}\n#cvt-app input#cvt-answer {\n  border: 2px solid #ccc;\n  border-radius: 8px;\n  padding: 10px 14px;\n  font-size: 1.1rem;\n  width: 120px;\n  text-align: center;\n  outline: none;\n  transition: border-color 0.2s;\n}\n#cvt-app input#cvt-answer:focus {\n  border-color: #5c6bc0;\n}\n#cvt-app button.cvt-btn {\n  background: #5c6bc0;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  padding: 10px 22px;\n  font-size: 1rem;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n#cvt-app button.cvt-btn:hover {\n  background: #3949ab;\n}\n#cvt-app button.cvt-btn:disabled {\n  background: #aaa;\n  cursor: default;\n}\n#cvt-app .cvt-feedback {\n  font-size: 0.95rem;\n  min-height: 22px;\n  text-align: center;\n  font-weight: 600;\n}\n#cvt-app .cvt-feedback.correct { color: #2e7d32; }\n#cvt-app .cvt-feedback.wrong   { color: #c62828; }\n#cvt-app .cvt-result {\n  background: #f3f4ff;\n  border: 2px solid #5c6bc0;\n  border-radius: 12px;\n  padding: 24px;\n  text-align: center;\n}\n#cvt-app .cvt-result h3 {\n  margin: 0 0 10px;\n  font-size: 1.3rem;\n  color: #1a1a2e;\n}\n#cvt-app .cvt-score-num {\n  font-size: 2.8rem;\n  font-weight: 700;\n  color: #5c6bc0;\n  line-height: 1;\n  margin: 10px 0;\n}\n#cvt-app .cvt-interp {\n  margin: 12px 0;\n  padding: 12px;\n  border-radius: 8px;\n  background: #e8eaf6;\n  font-size: 0.97rem;\n  line-height: 1.7;\n}\n#cvt-app .cvt-detail-list {\n  text-align: left;\n  font-size: 0.9rem;\n  margin: 12px 0;\n  padding: 0 0 0 18px;\n  color: #333;\n}\n#cvt-app .cvt-detail-list li {\n  margin-bottom: 4px;\n}\n#cvt-app button#cvt-restart {\n  margin-top: 14px;\n  background: #5c6bc0;\n  color: #fff;\n  border: none;\n  border-radius: 8px;\n  padding: 10px 28px;\n  font-size: 1rem;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n#cvt-app button#cvt-restart:hover {\n  background: #3949ab;\n}\n#cvt-app .cvt-cta {\n  margin-top: 28px;\n  padding: 16px;\n  background: #f0f4ff;\n  border-left: 4px solid #5c6bc0;\n  border-radius: 6px;\n  font-size: 0.95rem;\n  line-height: 1.7;\n}\n#cvt-app .cvt-hidden { display: none; }\n\u003c/style\u003e\n\u003ch2\u003e色覚テスト（石原式スクリーニング）\u003c/h2\u003e\n\u003cp\u003e石原式に基づいたスクリーニングテストです。各プレートを見て、隠された数字を入力してください。全5問です。\u003c/p\u003e","title":"色覚テスト - あなたの色覚をチェック"},{"content":"ブラウザだけでサイコロが振れます。ボードゲーム・TRPG・テーブルゲームに最適。ダイスの種類と数を選んでロールしましょう。\nダイスの数 1個 2個 3個 4個 5個 6個 7個 8個 9個 10個 面数 d4（4面） d6（6面） d8（8面） d10（10面） d12（12面） d20（20面） 🎲 ロール 🔊 クイックロール： 2d6 1d20 3d6 4d6最低値除外 ダイスを選んでロールしてください — 平均 — 最小値 — 最大値 0 総ロール数 ロール履歴（直近20回） まだロールしていません。ダイスを振ってみましょう！ ボードゲームカフェの経営にも\nfreee会計なら、店舗経営の売上・経費管理もクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 使い方 ダイスの数を選ぶ — 1〜10個から選択。 面数を選ぶ — d4・d6・d8・d10・d12・d20から選択。 ロールをクリック — アニメーションとともに結果と合計が表示されます。 クイックロール — よく使う組み合わせをワンクリックで。 よく使うダイスの組み合わせ 組み合わせ 用途 2d6 一般的なボードゲーム、すごろく 1d20 D\u0026amp;D 攻撃ロール・技能判定 3d6 多くのTRPGでの能力値決定 4d6最低値除外 D\u0026amp;D 5e キャラクター能力値作成 1d6 簡単な乱数決定 関連ツール 乱数を生成 → 乱数ジェネレーター ゲームタイマー → カウントダウンタイマー 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n","permalink":"https://productivity-works.com/ja/tools/dice-roller/","summary":"\u003cp\u003eブラウザだけでサイコロが振れます。ボードゲーム・TRPG・テーブルゲームに最適。ダイスの種類と数を選んでロールしましょう。\u003c/p\u003e\n\u003cdiv id=\"dr-app\"\u003e\n\u003cstyle\u003e\n#dr-app {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Hiragino Sans\", \"Yu Gothic\", sans-serif;\n  max-width: 680px;\n  margin: 0 auto;\n  color: #1e293b;\n}\n#dr-app * { box-sizing: border-box; }\n\n#dr-app .dr-controls {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 16px;\n  align-items: flex-end;\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 20px;\n  margin-bottom: 20px;\n}\n#dr-app .dr-field {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n#dr-app .dr-field label {\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n}\n#dr-app select {\n  padding: 10px 14px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 15px;\n  background: #fff;\n  color: #1e293b;\n  cursor: pointer;\n  outline: none;\n  transition: border-color 0.15s;\n}\n#dr-app select:focus { border-color: #6366f1; }\n\n#dr-app .dr-btn {\n  padding: 11px 28px;\n  border: none;\n  border-radius: 8px;\n  font-size: 16px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: transform 0.1s, background 0.15s;\n  user-select: none;\n}\n#dr-app .dr-btn:active { transform: scale(0.96); }\n#dr-app .dr-btn-roll {\n  background: #6366f1;\n  color: #fff;\n  font-size: 17px;\n  padding: 12px 36px;\n}\n#dr-app .dr-btn-roll:hover { background: #4f46e5; }\n#dr-app .dr-btn-sound {\n  background: #e2e8f0;\n  color: #475569;\n  padding: 11px 16px;\n  font-size: 18px;\n}\n#dr-app .dr-btn-sound:hover { background: #cbd5e1; }\n\n#dr-app .dr-quick-btns {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-bottom: 20px;\n}\n#dr-app .dr-quick-btns span {\n  font-size: 12px;\n  font-weight: 600;\n  color: #64748b;\n  align-self: center;\n  margin-right: 4px;\n}\n#dr-app .dr-btn-quick {\n  padding: 7px 16px;\n  background: #fff;\n  border: 1.5px solid #6366f1;\n  color: #6366f1;\n  border-radius: 20px;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: background 0.15s, color 0.15s;\n}\n#dr-app .dr-btn-quick:hover {\n  background: #6366f1;\n  color: #fff;\n}\n\n#dr-app .dr-result-area {\n  background: #fff;\n  border: 1.5px solid #e2e8f0;\n  border-radius: 12px;\n  padding: 24px;\n  margin-bottom: 20px;\n  min-height: 140px;\n  text-align: center;\n}\n#dr-app .dr-dice-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  justify-content: center;\n  margin-bottom: 16px;\n  min-height: 64px;\n  align-items: center;\n}\n#dr-app .dr-die {\n  width: 60px;\n  height: 60px;\n  background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n  border-radius: 10px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #fff;\n  font-size: 22px;\n  font-weight: 800;\n  box-shadow: 0 4px 12px rgba(99,102,241,0.3), inset 0 1px 0 rgba(255,255,255,0.2);\n  transition: transform 0.15s;\n}\n#dr-app .dr-die.rolling {\n  animation: dr-spin 0.5s ease-out;\n}\n@keyframes dr-spin {\n  0%   { transform: rotateY(0deg) rotateX(0deg) scale(0.8); opacity: 0.4; }\n  40%  { transform: rotateY(180deg) rotateX(90deg) scale(1.1); opacity: 1; }\n  70%  { transform: rotateY(320deg) rotateX(40deg) scale(0.95); }\n  100% { transform: rotateY(360deg) rotateX(0deg) scale(1); opacity: 1; }\n}\n#dr-app .dr-total {\n  font-size: 32px;\n  font-weight: 800;\n  color: #4f46e5;\n}\n#dr-app .dr-total-label {\n  font-size: 13px;\n  color: #94a3b8;\n  margin-top: 2px;\n}\n#dr-app .dr-note {\n  font-size: 13px;\n  color: #64748b;\n  margin-top: 8px;\n  font-style: italic;\n}\n#dr-app .dr-placeholder {\n  color: #94a3b8;\n  font-size: 15px;\n  padding: 20px 0;\n}\n\n#dr-app .dr-stats {\n  display: flex;\n  gap: 12px;\n  margin-bottom: 20px;\n}\n#dr-app .dr-stat-box {\n  flex: 1;\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 14px;\n  text-align: center;\n}\n#dr-app .dr-stat-val {\n  font-size: 22px;\n  font-weight: 700;\n  color: #4f46e5;\n}\n#dr-app .dr-stat-lbl {\n  font-size: 11px;\n  color: #94a3b8;\n  margin-top: 2px;\n}\n\n#dr-app .dr-history-title {\n  font-size: 13px;\n  font-weight: 600;\n  color: #64748b;\n  margin-bottom: 10px;\n}\n#dr-app .dr-history-list {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n  max-height: 240px;\n  overflow-y: auto;\n}\n#dr-app .dr-history-list li {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 8px 12px;\n  border-radius: 7px;\n  font-size: 13px;\n  color: #475569;\n  border-bottom: 1px solid #f1f5f9;\n}\n#dr-app .dr-history-list li:last-child { border-bottom: none; }\n#dr-app .dr-history-list li:nth-child(odd) { background: #f8fafc; }\n#dr-app .dr-history-total {\n  font-weight: 700;\n  color: #4f46e5;\n}\n#dr-app .dr-empty-history {\n  text-align: center;\n  color: #94a3b8;\n  font-size: 14px;\n  padding: 16px;\n}\n\n@media (max-width: 500px) {\n  #dr-app .dr-controls { flex-direction: column; }\n  #dr-app .dr-stats { flex-wrap: wrap; }\n  #dr-app .dr-stat-box { min-width: calc(50% - 6px); }\n  #dr-app .dr-die { width: 52px; height: 52px; font-size: 18px; }\n}\n\u003c/style\u003e\n\u003c!-- コントロール --\u003e\n\u003cdiv class=\"dr-controls\"\u003e\n  \u003cdiv class=\"dr-field\"\u003e\n    \u003clabel\u003eダイスの数\u003c/label\u003e\n    \u003cselect id=\"dr-num-dice\"\u003e\n      \u003coption value=\"1\"\u003e1個\u003c/option\u003e\n      \u003coption value=\"2\" selected\u003e2個\u003c/option\u003e\n      \u003coption value=\"3\"\u003e3個\u003c/option\u003e\n      \u003coption value=\"4\"\u003e4個\u003c/option\u003e\n      \u003coption value=\"5\"\u003e5個\u003c/option\u003e\n      \u003coption value=\"6\"\u003e6個\u003c/option\u003e\n      \u003coption value=\"7\"\u003e7個\u003c/option\u003e\n      \u003coption value=\"8\"\u003e8個\u003c/option\u003e\n      \u003coption value=\"9\"\u003e9個\u003c/option\u003e\n      \u003coption value=\"10\"\u003e10個\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"dr-field\"\u003e\n    \u003clabel\u003e面数\u003c/label\u003e\n    \u003cselect id=\"dr-sides\"\u003e\n      \u003coption value=\"4\"\u003ed4（4面）\u003c/option\u003e\n      \u003coption value=\"6\" selected\u003ed6（6面）\u003c/option\u003e\n      \u003coption value=\"8\"\u003ed8（8面）\u003c/option\u003e\n      \u003coption value=\"10\"\u003ed10（10面）\u003c/option\u003e\n      \u003coption value=\"12\"\u003ed12（12面）\u003c/option\u003e\n      \u003coption value=\"20\"\u003ed20（20面）\u003c/option\u003e\n    \u003c/select\u003e\n  \u003c/div\u003e\n  \u003cbutton class=\"dr-btn dr-btn-roll\" id=\"dr-roll-btn\"\u003e🎲 ロール\u003c/button\u003e\n  \u003cbutton class=\"dr-btn dr-btn-sound\" id=\"dr-sound-btn\" title=\"サウンドのオン/オフ\"\u003e🔊\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- クイックロール --\u003e\n\u003cdiv class=\"dr-quick-btns\"\u003e\n  \u003cspan\u003eクイックロール：\u003c/span\u003e\n  \u003cbutton class=\"dr-btn-quick\" data-num=\"2\" data-sides=\"6\"\u003e2d6\u003c/button\u003e\n  \u003cbutton class=\"dr-btn-quick\" data-num=\"1\" data-sides=\"20\"\u003e1d20\u003c/button\u003e\n  \u003cbutton class=\"dr-btn-quick\" data-num=\"3\" data-sides=\"6\"\u003e3d6\u003c/button\u003e\n  \u003cbutton class=\"dr-btn-quick\" data-num=\"4\" data-sides=\"6\" data-drop-lowest=\"1\"\u003e4d6最低値除外\u003c/button\u003e\n\u003c/div\u003e\n\u003c!-- 結果エリア --\u003e\n\u003cdiv class=\"dr-result-area\"\u003e\n  \u003cdiv class=\"dr-dice-row\" id=\"dr-dice-row\"\u003e\n    \u003cdiv class=\"dr-placeholder\"\u003eダイスを選んでロールしてください\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv id=\"dr-total-wrap\" style=\"display:none;\"\u003e\n    \u003cdiv class=\"dr-total\" id=\"dr-total\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"dr-total-label\" id=\"dr-total-label\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"dr-note\" id=\"dr-note\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 統計 --\u003e\n\u003cdiv class=\"dr-stats\"\u003e\n  \u003cdiv class=\"dr-stat-box\"\u003e\n    \u003cdiv class=\"dr-stat-val\" id=\"dr-stat-avg\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"dr-stat-lbl\"\u003e平均\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"dr-stat-box\"\u003e\n    \u003cdiv class=\"dr-stat-val\" id=\"dr-stat-min\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"dr-stat-lbl\"\u003e最小値\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"dr-stat-box\"\u003e\n    \u003cdiv class=\"dr-stat-val\" id=\"dr-stat-max\"\u003e—\u003c/div\u003e\n    \u003cdiv class=\"dr-stat-lbl\"\u003e最大値\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"dr-stat-box\"\u003e\n    \u003cdiv class=\"dr-stat-val\" id=\"dr-stat-count\"\u003e0\u003c/div\u003e\n    \u003cdiv class=\"dr-stat-lbl\"\u003e総ロール数\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 履歴 --\u003e\n\u003cdiv\u003e\n  \u003cdiv class=\"dr-history-title\"\u003eロール履歴（直近20回）\u003c/div\u003e\n  \u003cul class=\"dr-history-list\" id=\"dr-history-list\"\u003e\n    \u003cli class=\"dr-empty-history\" id=\"dr-empty-hist\"\u003eまだロールしていません。ダイスを振ってみましょう！\u003c/li\u003e\n  \u003c/ul\u003e\n\u003c/div\u003e\n\u003cscript\u003e\n(function() {\n  'use strict';\n\n  var numDiceEl  = document.getElementById('dr-num-dice');\n  var sidesEl    = document.getElementById('dr-sides');\n  var rollBtn    = document.getElementById('dr-roll-btn');\n  var soundBtn   = document.getElementById('dr-sound-btn');\n  var diceRow    = document.getElementById('dr-dice-row');\n  var totalWrap  = document.getElementById('dr-total-wrap');\n  var totalEl    = document.getElementById('dr-total');\n  var totalLabel = document.getElementById('dr-total-label');\n  var noteEl     = document.getElementById('dr-note');\n  var historyEl  = document.getElementById('dr-history-list');\n  var statAvg    = document.getElementById('dr-stat-avg');\n  var statMin    = document.getElementById('dr-stat-min');\n  var statMax    = document.getElementById('dr-stat-max');\n  var statCount  = document.getElementById('dr-stat-count');\n\n  var soundOn = true;\n  var history = [];\n  var allTotals = [];\n  var rolling = false;\n\n  var audioCtx = null;\n  function getAudioCtx() {\n    if (!audioCtx) {\n      try { audioCtx = new (window.AudioContext || window.webkitAudioContext)(); } catch(e) {}\n    }\n    return audioCtx;\n  }\n  function playRollSound() {\n    if (!soundOn) return;\n    var ctx = getAudioCtx();\n    if (!ctx) return;\n    for (var i = 0; i \u003c 3; i++) {\n      (function(delay) {\n        setTimeout(function() {\n          var osc = ctx.createOscillator();\n          var gain = ctx.createGain();\n          osc.connect(gain);\n          gain.connect(ctx.destination);\n          osc.type = 'triangle';\n          osc.frequency.setValueAtTime(280 + Math.random() * 180, ctx.currentTime);\n          osc.frequency.exponentialRampToValueAtTime(80, ctx.currentTime + 0.08);\n          gain.gain.setValueAtTime(0.18, ctx.currentTime);\n          gain.gain.exponentialRampToValueAtTime(0.001, ctx.currentTime + 0.1);\n          osc.start(ctx.currentTime);\n          osc.stop(ctx.currentTime + 0.12);\n        }, delay);\n      })(i * 80);\n    }\n  }\n\n  soundBtn.addEventListener('click', function() {\n    soundOn = !soundOn;\n    soundBtn.textContent = soundOn ? '🔊' : '🔇';\n  });\n\n  document.querySelectorAll('#dr-app .dr-btn-quick').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      numDiceEl.value = btn.dataset.num;\n      sidesEl.value   = btn.dataset.sides;\n      doRoll(parseInt(btn.dataset.num), parseInt(btn.dataset.sides), parseInt(btn.dataset.dropLowest || '0'));\n    });\n  });\n\n  rollBtn.addEventListener('click', function() {\n    var n = parseInt(numDiceEl.value);\n    var s = parseInt(sidesEl.value);\n    doRoll(n, s, 0);\n  });\n\n  function randInt(min, max) {\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n  }\n\n  function doRoll(numDice, sides, dropLowest) {\n    if (rolling) return;\n    rolling = true;\n    rollBtn.disabled = true;\n    playRollSound();\n\n    var results = [];\n    for (var i = 0; i \u003c numDice; i++) {\n      results.push(randInt(1, sides));\n    }\n\n    var dropped = null;\n    var usedResults = results.slice();\n    if (dropLowest \u003e 0 \u0026\u0026 usedResults.length \u003e dropLowest) {\n      var sorted = usedResults.slice().sort(function(a, b) { return a - b; });\n      dropped = sorted.slice(0, dropLowest);\n      for (var d = 0; d \u003c dropped.length; d++) {\n        var idx = usedResults.indexOf(dropped[d]);\n        if (idx !== -1) usedResults.splice(idx, 1);\n      }\n    }\n    var total = usedResults.reduce(function(a, b) { return a + b; }, 0);\n\n    diceRow.innerHTML = '';\n    totalWrap.style.display = 'none';\n\n    results.forEach(function(val, idx) {\n      var die = document.createElement('div');\n      die.className = 'dr-die';\n      var isDropped = dropped \u0026\u0026 dropped.includes(val) \u0026\u0026 idx \u003e= usedResults.length;\n      die.textContent = '?';\n      if (isDropped) {\n        die.style.opacity = '0.35';\n        die.style.background = '#94a3b8';\n        die.title = '除外';\n      }\n      diceRow.appendChild(die);\n\n      (function(el, finalVal, delay) {\n        el.classList.add('rolling');\n        var shuffleInterval = setInterval(function() {\n          el.textContent = randInt(1, sides);\n        }, 60);\n        setTimeout(function() {\n          clearInterval(shuffleInterval);\n          el.textContent = finalVal;\n          el.classList.remove('rolling');\n        }, delay + 400);\n      })(die, val, idx * 80);\n    });\n\n    var totalDelay = results.length * 80 + 500;\n    setTimeout(function() {\n      totalWrap.style.display = 'block';\n      totalEl.textContent = total;\n      var diceLabel = numDice + 'd' + sides;\n      if (dropLowest \u003e 0) diceLabel += ' 最低値除外';\n      totalLabel.textContent = '合計（' + diceLabel + '）';\n      if (results.length \u003e 1) {\n        var indivStr = results.map(function(v, i) {\n          if (dropped \u0026\u0026 i \u003e= usedResults.length) return '[' + v + ']';\n          return v;\n        }).join(' + ');\n        noteEl.textContent = '内訳: ' + indivStr;\n      } else {\n        noteEl.textContent = '';\n      }\n\n      addHistory(results, total, sides, dropLowest, usedResults);\n      updateStats();\n\n      rolling = false;\n      rollBtn.disabled = false;\n    }, totalDelay);\n  }\n\n  function addHistory(results, total, sides, dropLowest, usedResults) {\n    allTotals.push(total);\n    var entry = {\n      label: results.length + 'd' + sides + (dropLowest \u003e 0 ? ' DL' : ''),\n      results: results,\n      total: total\n    };\n    history.unshift(entry);\n    if (history.length \u003e 20) history.pop();\n\n    historyEl.innerHTML = '';\n    if (history.length === 0) {\n      var li = document.createElement('li');\n      li.id = 'dr-empty-hist';\n      li.className = 'dr-empty-history';\n      li.textContent = 'まだロールしていません。';\n      historyEl.appendChild(li);\n      return;\n    }\n    history.forEach(function(h, idx) {\n      var li = document.createElement('li');\n      var left = document.createElement('span');\n      left.textContent = '#' + (history.length - idx) + '  ' + h.label + '  [' + h.results.join(', ') + ']';\n      var right = document.createElement('span');\n      right.className = 'dr-history-total';\n      right.textContent = '= ' + h.total;\n      li.appendChild(left);\n      li.appendChild(right);\n      historyEl.appendChild(li);\n    });\n  }\n\n  function updateStats() {\n    if (allTotals.length === 0) return;\n    var sum = allTotals.reduce(function(a, b) { return a + b; }, 0);\n    var avg = (sum / allTotals.length).toFixed(1);\n    var min = Math.min.apply(null, allTotals);\n    var max = Math.max.apply(null, allTotals);\n    statAvg.textContent = avg;\n    statMin.textContent = min;\n    statMax.textContent = max;\n    statCount.textContent = allTotals.length;\n  }\n})();\n\u003c/script\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\u003cdiv class=\"dr-freee-cta\" style=\"margin-top:28px;padding:18px 20px;background:linear-gradient(135deg,#f0f9ff 0%,#e0f2fe 100%);border:1.5px solid #bae6fd;border-radius:10px;\"\u003e\n  \u003cp style=\"margin:0;font-size:14px;color:#0369a1;font-weight:600;\"\u003eボードゲームカフェの経営にも\u003c/p\u003e","title":"サイコロシミュレーター"},{"content":"インラインCSSのメール安全なHTMLメールを、プレビューを見ながら視覚的に作成できます。プリセットテンプレートやワンクリックでのHTML出力コピーに対応。\nメールテンプレートビルダー インラインCSSのメール安全なHTMLを生成\n\u0026lt;!-- プリセット --\u0026gt; \u0026lt;div class=\u0026quot;et-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;et-section-title\u0026quot;\u0026gt;プリセットテンプレート\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-presets\u0026quot;\u0026gt; \u0026lt;button class=\u0026quot;et-preset-btn\u0026quot; onclick=\u0026quot;etApplyPreset('newsletter')\u0026quot;\u0026gt;ニュースレター\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;et-preset-btn\u0026quot; onclick=\u0026quot;etApplyPreset('announcement')\u0026quot;\u0026gt;お知らせ\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;et-preset-btn\u0026quot; onclick=\u0026quot;etApplyPreset('welcome')\u0026quot;\u0026gt;ウェルカム\u0026lt;/button\u0026gt; \u0026lt;button class=\u0026quot;et-preset-btn\u0026quot; onclick=\u0026quot;etApplyPreset('receipt')\u0026quot;\u0026gt;注文確認\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- ヘッダー --\u0026gt; \u0026lt;div class=\u0026quot;et-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;et-section-title\u0026quot;\u0026gt;ヘッダー\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-toggle-row\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;et-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;et-show-logo\u0026quot; checked onchange=\u0026quot;etUpdate()\u0026quot;\u0026gt;\u0026lt;span class=\u0026quot;et-toggle-slider\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label for=\u0026quot;et-show-logo\u0026quot;\u0026gt;ロゴを表示\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot; id=\u0026quot;et-logo-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ロゴ URL\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;et-logo-url\u0026quot; placeholder=\u0026quot;https://example.com/logo.png\u0026quot; oninput=\u0026quot;etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ロゴ alt テキスト\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;et-logo-alt\u0026quot; value=\u0026quot;会社ロゴ\u0026quot; oninput=\u0026quot;etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ヘッダー背景色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;et-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;et-header-bg-pick\u0026quot; value=\u0026quot;#6366f1\u0026quot; oninput=\u0026quot;etSyncColor('header-bg')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;et-header-bg\u0026quot; value=\u0026quot;#6366f1\u0026quot; oninput=\u0026quot;etSyncPick('header-bg');etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ヘッダーテキスト（ロゴなし時）\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;et-header-text\u0026quot; value=\u0026quot;あなたの会社名\u0026quot; oninput=\u0026quot;etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- ヒーロー画像 --\u0026gt; \u0026lt;div class=\u0026quot;et-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;et-section-title\u0026quot;\u0026gt;ヒーロー画像\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-toggle-row\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;et-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;et-show-hero\u0026quot; onchange=\u0026quot;etUpdate()\u0026quot;\u0026gt;\u0026lt;span class=\u0026quot;et-toggle-slider\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label for=\u0026quot;et-show-hero\u0026quot;\u0026gt;ヒーロー画像を表示\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;画像 URL\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;et-hero-url\u0026quot; placeholder=\u0026quot;https://example.com/hero.jpg\u0026quot; oninput=\u0026quot;etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;画像 alt テキスト\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;et-hero-alt\u0026quot; value=\u0026quot;ヒーロー画像\u0026quot; oninput=\u0026quot;etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- コンテンツ --\u0026gt; \u0026lt;div class=\u0026quot;et-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;et-section-title\u0026quot;\u0026gt;コンテンツ\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;見出し\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;et-heading\u0026quot; value=\u0026quot;ニュースレターへようこそ\u0026quot; oninput=\u0026quot;etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;本文テキスト\u0026lt;/label\u0026gt; \u0026lt;textarea id=\u0026quot;et-body\u0026quot; oninput=\u0026quot;etUpdate()\u0026quot;\u0026gt;ご登録いただきありがとうございます！最新情報やお役立ちコンテンツをお届けします。今後ともよろしくお願いいたします。\u0026lt;/textarea\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- CTAボタン --\u0026gt; \u0026lt;div class=\u0026quot;et-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;et-section-title\u0026quot;\u0026gt;CTAボタン\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-toggle-row\u0026quot;\u0026gt; \u0026lt;label class=\u0026quot;et-toggle\u0026quot;\u0026gt;\u0026lt;input type=\u0026quot;checkbox\u0026quot; id=\u0026quot;et-show-cta\u0026quot; checked onchange=\u0026quot;etUpdate()\u0026quot;\u0026gt;\u0026lt;span class=\u0026quot;et-toggle-slider\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;/label\u0026gt; \u0026lt;label for=\u0026quot;et-show-cta\u0026quot;\u0026gt;ボタンを表示\u0026lt;/label\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ボタンテキスト\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;et-cta-text\u0026quot; value=\u0026quot;詳しく見る\u0026quot; oninput=\u0026quot;etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ボタンリンク URL\u0026lt;/label\u0026gt; \u0026lt;input type=\u0026quot;url\u0026quot; id=\u0026quot;et-cta-url\u0026quot; value=\u0026quot;https://example.com\u0026quot; oninput=\u0026quot;etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ボタン背景色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;et-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;et-btn-bg-pick\u0026quot; value=\u0026quot;#6366f1\u0026quot; oninput=\u0026quot;etSyncColor('btn-bg')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;et-btn-bg\u0026quot; value=\u0026quot;#6366f1\u0026quot; oninput=\u0026quot;etSyncPick('btn-bg');etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;ボタン文字色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;et-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;et-btn-color-pick\u0026quot; value=\u0026quot;#ffffff\u0026quot; oninput=\u0026quot;etSyncColor('btn-color')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;et-btn-color\u0026quot; value=\u0026quot;#ffffff\u0026quot; oninput=\u0026quot;etSyncPick('btn-color');etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- スタイル --\u0026gt; \u0026lt;div class=\u0026quot;et-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;et-section-title\u0026quot;\u0026gt;スタイル設定\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;フォント\u0026lt;/label\u0026gt; \u0026lt;select id=\u0026quot;et-font\u0026quot; onchange=\u0026quot;etUpdate()\u0026quot;\u0026gt; \u0026lt;option value=\u0026quot;Arial, Helvetica, sans-serif\u0026quot;\u0026gt;Arial（推奨）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;'Georgia', Times, serif\u0026quot;\u0026gt;Georgia（セリフ）\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;'Trebuchet MS', sans-serif\u0026quot;\u0026gt;Trebuchet MS\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;Verdana, Geneva, sans-serif\u0026quot;\u0026gt;Verdana\u0026lt;/option\u0026gt; \u0026lt;option value=\u0026quot;'Courier New', Courier, monospace\u0026quot;\u0026gt;Courier New（等幅）\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;メール背景色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;et-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;et-body-bg-pick\u0026quot; value=\u0026quot;#f4f4f5\u0026quot; oninput=\u0026quot;etSyncColor('body-bg')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;et-body-bg\u0026quot; value=\u0026quot;#f4f4f5\u0026quot; oninput=\u0026quot;etSyncPick('body-bg');etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;カード背景色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;et-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;et-card-bg-pick\u0026quot; value=\u0026quot;#ffffff\u0026quot; oninput=\u0026quot;etSyncColor('card-bg')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;et-card-bg\u0026quot; value=\u0026quot;#ffffff\u0026quot; oninput=\u0026quot;etSyncPick('card-bg');etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;文字色\u0026lt;/label\u0026gt; \u0026lt;div class=\u0026quot;et-color-row\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;color\u0026quot; id=\u0026quot;et-text-color-pick\u0026quot; value=\u0026quot;#374151\u0026quot; oninput=\u0026quot;etSyncColor('text-color')\u0026quot;\u0026gt; \u0026lt;input type=\u0026quot;text\u0026quot; id=\u0026quot;et-text-color\u0026quot; value=\u0026quot;#374151\u0026quot; oninput=\u0026quot;etSyncPick('text-color');etUpdate()\u0026quot;\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;!-- フッター --\u0026gt; \u0026lt;div class=\u0026quot;et-section\u0026quot;\u0026gt; \u0026lt;div class=\u0026quot;et-section-title\u0026quot;\u0026gt;フッター\u0026lt;/div\u0026gt; \u0026lt;div class=\u0026quot;et-field\u0026quot;\u0026gt; \u0026lt;label\u0026gt;フッターテキスト\u0026lt;/label\u0026gt; \u0026lt;textarea id=\u0026quot;et-footer\u0026quot; oninput=\u0026quot;etUpdate()\u0026quot;\u0026gt;© 2025 あなたの会社名. All rights reserved. 〒000-0000 東京都○○区○○町1-2-3 配信停止 | プライバシーポリシー フッター背景色 プレビュー: デスクトップ（600px） モバイル（320px） HTML出力 HTMLをコピー HTMLをクリップボードにコピーしました! 事業の請求書・経費管理もかんたんに\nfreee会計なら、請求書作成・経費精算・確定申告までクラウドで一元管理。無料トライアル実施中。 freeeを無料で試す → 関連ツール HTMLを整形 → HTML整形ツール メタタグ生成 → メタタグ生成ツール 確定申告・会計をもっとラクに？ freee会計 なら、フリーランスの経費管理もクラウドで簡単。まずは無料で試してみましょう。\n関連記事 不動産営業向けChatGPTプロンプト集 完全ガイド2026 不動産営業 ChatGPTで物件紹介メールを3分で作成する方法 医療事務向けChatGPT活用術 業務効率化10選 ","permalink":"https://productivity-works.com/ja/tools/email-template-builder/","summary":"\u003cp\u003eインラインCSSのメール安全なHTMLメールを、プレビューを見ながら視覚的に作成できます。プリセットテンプレートやワンクリックでのHTML出力コピーに対応。\u003c/p\u003e\n\u003cdiv id=\"et-app\"\u003e\n\u003cstyle\u003e\n#et-app *,#et-app *::before,#et-app *::after{box-sizing:border-box;margin:0;padding:0}\n#et-app{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;color:#1e293b;background:#f1f5f9;min-height:100vh;padding:0}\n#et-app .et-wrap{display:grid;grid-template-columns:340px 1fr;gap:0;min-height:600px;background:#f1f5f9}\n#et-app .et-panel{background:#fff;border-right:1px solid #e2e8f0;overflow-y:auto;max-height:900px;padding:0}\n#et-app .et-panel-header{padding:16px 18px;background:linear-gradient(135deg,#6366f1 0%,#8b5cf6 100%);color:#fff}\n#et-app .et-panel-header h2{font-size:15px;font-weight:700;margin-bottom:2px}\n#et-app .et-panel-header p{font-size:12px;opacity:.85}\n#et-app .et-section{padding:14px 16px;border-bottom:1px solid #f1f5f9}\n#et-app .et-section-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#94a3b8;margin-bottom:10px}\n#et-app .et-field{margin-bottom:10px}\n#et-app .et-field label{display:block;font-size:12px;font-weight:600;color:#475569;margin-bottom:4px}\n#et-app .et-field input[type=text],#et-app .et-field input[type=url],#et-app .et-field textarea,#et-app .et-field select{width:100%;padding:7px 10px;border:1px solid #cbd5e1;border-radius:6px;font-size:13px;color:#1e293b;background:#fff;outline:none;transition:border .15s}\n#et-app .et-field input[type=text]:focus,#et-app .et-field input[type=url]:focus,#et-app .et-field textarea:focus,#et-app .et-field select:focus{border-color:#6366f1;box-shadow:0 0 0 3px rgba(99,102,241,.12)}\n#et-app .et-field textarea{resize:vertical;min-height:70px;font-family:inherit}\n#et-app .et-color-row{display:flex;gap:8px;align-items:center}\n#et-app .et-color-row input[type=color]{width:36px;height:34px;padding:2px;border:1px solid #cbd5e1;border-radius:6px;cursor:pointer;background:#fff;flex-shrink:0}\n#et-app .et-color-row input[type=text]{flex:1}\n#et-app .et-toggle-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}\n#et-app .et-toggle-row label{font-size:12px;font-weight:600;color:#475569;cursor:pointer}\n#et-app .et-toggle{position:relative;width:34px;height:18px;flex-shrink:0}\n#et-app .et-toggle input{opacity:0;width:0;height:0;position:absolute}\n#et-app .et-toggle-slider{position:absolute;inset:0;background:#cbd5e1;border-radius:9px;transition:.2s;cursor:pointer}\n#et-app .et-toggle-slider::before{content:'';position:absolute;width:12px;height:12px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.2s}\n#et-app .et-toggle input:checked+.et-toggle-slider{background:#6366f1}\n#et-app .et-toggle input:checked+.et-toggle-slider::before{transform:translateX(16px)}\n#et-app .et-presets{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:4px}\n#et-app .et-preset-btn{padding:7px 6px;border:1.5px solid #e2e8f0;border-radius:7px;background:#f8fafc;font-size:11px;font-weight:600;color:#475569;cursor:pointer;text-align:center;transition:all .15s}\n#et-app .et-preset-btn:hover{border-color:#6366f1;color:#6366f1;background:#eef2ff}\n#et-app .et-preview-area{display:flex;flex-direction:column;overflow:hidden}\n#et-app .et-preview-toolbar{display:flex;align-items:center;gap:8px;padding:12px 16px;background:#fff;border-bottom:1px solid #e2e8f0;flex-wrap:wrap}\n#et-app .et-preview-toolbar span{font-size:12px;font-weight:600;color:#64748b}\n#et-app .et-view-btn{padding:5px 12px;border:1.5px solid #e2e8f0;border-radius:6px;background:#f8fafc;font-size:12px;font-weight:600;color:#475569;cursor:pointer;transition:all .15s}\n#et-app .et-view-btn.active,#et-app .et-view-btn:hover{background:#6366f1;border-color:#6366f1;color:#fff}\n#et-app .et-copy-btn{margin-left:auto;padding:6px 16px;background:linear-gradient(135deg,#6366f1 0%,#8b5cf6 100%);color:#fff;border:none;border-radius:7px;font-size:12px;font-weight:700;cursor:pointer;transition:opacity .15s}\n#et-app .et-copy-btn:hover{opacity:.88}\n#et-app .et-preview-frame{flex:1;padding:20px;background:#e2e8f0;display:flex;justify-content:center;align-items:flex-start;overflow-y:auto;min-height:500px}\n#et-app .et-preview-shell{background:#fff;border-radius:8px;box-shadow:0 4px 24px rgba(0,0,0,.13);overflow:hidden;transition:width .25s}\n#et-app .et-preview-shell iframe{display:block;border:none;width:100%;height:700px}\n#et-app .et-html-out{display:none;padding:16px;background:#0f172a;border-radius:8px;margin:16px;overflow:auto}\n#et-app .et-html-out pre{font-family:'Courier New',monospace;font-size:11px;color:#94a3b8;white-space:pre-wrap;word-break:break-all}\n#et-app .et-toast{position:fixed;bottom:24px;right:24px;padding:10px 20px;background:#10b981;color:#fff;border-radius:8px;font-size:13px;font-weight:600;box-shadow:0 4px 16px rgba(0,0,0,.18);z-index:9999;opacity:0;transform:translateY(8px);transition:all .25s;pointer-events:none}\n#et-app .et-toast.show{opacity:1;transform:translateY(0)}\n@media(max-width:700px){\n  #et-app .et-wrap{grid-template-columns:1fr}\n  #et-app .et-panel{max-height:none;border-right:none;border-bottom:1px solid #e2e8f0}\n}\n\u003c/style\u003e\n\u003cdiv class=\"et-wrap\"\u003e\n  \u003c!-- 左パネル --\u003e\n  \u003cdiv class=\"et-panel\"\u003e\n    \u003cdiv class=\"et-panel-header\"\u003e\n      \u003ch2\u003eメールテンプレートビルダー\u003c/h2\u003e\n      \u003cp\u003eインラインCSSのメール安全なHTMLを生成\u003c/p\u003e","title":"メールテンプレートビルダー"},{"content":"本記事にはアフィリエイトリンクが含まれています。\n時給・年収換算計算ツール 時給または年収を入力すると、週給・隔週・月給・年収の各単位での給与換算と、残業代の試算、そして少しの昇給が年収にどれだけ影響するかを瞬時に確認できます。\n時給 \u0026rarr; 年収 年収 \u0026rarr; 時給 あなたの時給 時給 $ 年収 $ 週あたり勤務時間: 40 時間 1 60 年間稼働週数: 52 週 48 52 有給休暇・祝日・無給休暇を差し引いてください 給与内訳 残業代内訳 週40時間を超えています。40時間超の時間は通常の1.5倍の残業単価で計算されます。 昇給による年収への影響 時給の小さな変化が年収にどれだけ影響するかを確認できます。現在の時給をハイライト表示しています。 時給 週給 月給 年収 現在との差 主な時給と年収の早見表 クリックすると計算ツールに反映されます。 時給交渉で昇給を勝ち取る方法 1. 感覚ではなく市場データで交渉する 交渉の前に、同じ職種・地域・業界で実際にどれだけの報酬が支払われているかを調べましょう。厚生労働省の賃金統計、求人サイトの給与データ、業界団体の調査などを活用します。「なんとなく少ない気がする」ではなく、複数のデータソースに基づく具体的な数字を持ち込むことが説得力を生みます。\n2. タイミングを戦略的に選ぶ 交渉に最適なタイミングは、大きな成果を出した直後です。重要プロジェクトの完了・新規顧客の獲得・好評価の受領直後が狙い目です。予算削減期・リストラ期・組織再編期は避けましょう。年次評価制度がある場合は、上司が予算折衝できるよう2〜3か月前から準備を始めてください。\n3. 自分の貢献を金額で示す 上司が昇給を承認できるのは、そのコストを社内で正当化できる場合です。自分の仕事を売上への貢献・コスト削減・時間短縮の観点から数値化して示しましょう。「週次レポート作業を自動化し、チームの週6時間分（換算約○万円/年）の工数を削減しました」という形で示すと、承認を得やすくなります。\n4. 時給だけでなくトータルパッケージで交渉する 時給アップが難しい場合は、総報酬の視点に切り替えましょう。在宅勤務日数・有給休暇の追加・入社一時金・成果連動ボーナス・研修費用補助・90日後の再評価保証など、すべてに実質的な金銭価値があります。通勤費用を節約できる柔軟な勤務形態は、それだけで実質的な時給上昇に相当します。\n関連ツール フリーランスの適正時給を計算する → フリーランス単価計算ツール ローン返済を計算する → ローン返済計算ツール 月次予算を立てる → 予算プランナー 免責事項：本ツールは参考・教育目的の概算を提供するものであり、税務・法務・財務アドバイスを構成するものではありません。残業規定は法域・雇用形態によって異なります。詳細は専門家にご相談ください。\n資産管理を効率化 → freee会計で家計を自動管理 ","permalink":"https://productivity-works.com/ja/tools/hourly-to-salary-calculator/","summary":"\u003cp\u003e\u003cem\u003e本記事にはアフィリエイトリンクが含まれています。\u003c/em\u003e\u003c/p\u003e\n\u003ch1 id=\"時給年収換算計算ツール\"\u003e時給・年収換算計算ツール\u003c/h1\u003e\n\u003cp\u003e時給または年収を入力すると、\u003cstrong\u003e週給・隔週・月給・年収\u003c/strong\u003eの各単位での給与換算と、残業代の試算、そして少しの昇給が年収にどれだけ影響するかを瞬時に確認できます。\u003c/p\u003e\n\u003cstyle\u003e\n.hs-wrap {\n  max-width: 720px;\n  margin: 0 auto;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n  color: #1e293b;\n}\n.hs-mode-toggle {\n  display: flex;\n  background: #f0fdf4;\n  border: 2px solid #059669;\n  border-radius: 12px;\n  overflow: hidden;\n  margin-bottom: 20px;\n}\n.hs-mode-btn {\n  flex: 1;\n  padding: 14px 10px;\n  text-align: center;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  color: #065f46;\n  transition: background 0.2s, color 0.2s;\n  user-select: none;\n}\n.hs-mode-btn.active {\n  background: #059669;\n  color: #fff;\n}\n.hs-mode-btn:not(.active):hover {\n  background: #d1fae5;\n}\n.hs-card {\n  background: #ffffff;\n  border: 1px solid #e2e8f0;\n  border-radius: 14px;\n  padding: 28px;\n  margin-bottom: 20px;\n  box-shadow: 0 2px 8px rgba(5,150,105,0.07);\n}\n.hs-section-title {\n  font-size: 15px;\n  font-weight: 700;\n  color: #059669;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n  margin: 0 0 18px 0;\n}\n.hs-field {\n  margin-bottom: 18px;\n}\n.hs-label {\n  display: block;\n  font-size: 14px;\n  font-weight: 600;\n  color: #475569;\n  margin-bottom: 8px;\n}\n.hs-input-wrap {\n  position: relative;\n  display: flex;\n  align-items: center;\n}\n.hs-input-prefix {\n  position: absolute;\n  left: 12px;\n  font-size: 16px;\n  font-weight: 700;\n  color: #059669;\n  pointer-events: none;\n}\n.hs-input {\n  width: 100%;\n  padding: 11px 14px 11px 28px;\n  border: 1.5px solid #cbd5e1;\n  border-radius: 8px;\n  font-size: 16px;\n  font-weight: 700;\n  color: #1e293b;\n  box-sizing: border-box;\n  transition: border-color 0.2s;\n}\n.hs-input:focus {\n  outline: none;\n  border-color: #059669;\n}\n.hs-range-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n.hs-range-row input[type=\"range\"] {\n  flex: 1;\n  accent-color: #059669;\n  height: 6px;\n  cursor: pointer;\n}\n.hs-range-val {\n  min-width: 54px;\n  text-align: right;\n  font-weight: 700;\n  font-size: 15px;\n  color: #059669;\n}\n.hs-results-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 6px;\n}\n.hs-results-grid-3 {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  gap: 14px;\n  margin-bottom: 14px;\n}\n.hs-result-box {\n  background: #f0fdf4;\n  border: 2px solid #059669;\n  border-radius: 12px;\n  padding: 18px 14px;\n  text-align: center;\n}\n.hs-result-box.primary {\n  background: #059669;\n  color: #fff;\n}\n.hs-result-label {\n  font-size: 11px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: #065f46;\n  margin-bottom: 6px;\n}\n.hs-result-box.primary .hs-result-label {\n  color: #a7f3d0;\n}\n.hs-result-value {\n  font-size: 26px;\n  font-weight: 800;\n  color: #059669;\n  line-height: 1.1;\n}\n.hs-result-box.primary .hs-result-value {\n  color: #fff;\n  font-size: 32px;\n}\n.hs-result-sub {\n  font-size: 12px;\n  color: #6ee7b7;\n  margin-top: 4px;\n}\n.hs-result-sub-dark {\n  font-size: 12px;\n  color: #6b7280;\n  margin-top: 4px;\n}\n.hs-stat-row {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 10px 0;\n  border-bottom: 1px solid #e2e8f0;\n  font-size: 14px;\n}\n.hs-stat-row:last-child { border-bottom: none; }\n.hs-stat-label { color: #64748b; }\n.hs-stat-val { font-weight: 700; color: #059669; }\n.hs-ot-box {\n  background: #fff7ed;\n  border: 2px solid #f59e0b;\n  border-radius: 12px;\n  padding: 18px;\n}\n.hs-ot-title {\n  font-size: 14px;\n  font-weight: 700;\n  color: #92400e;\n  margin-bottom: 12px;\n}\n.hs-ot-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 12px;\n}\n.hs-ot-item {\n  background: #fef3c7;\n  border-radius: 8px;\n  padding: 12px;\n  text-align: center;\n}\n.hs-ot-item-label {\n  font-size: 11px;\n  font-weight: 600;\n  color: #78350f;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  margin-bottom: 4px;\n}\n.hs-ot-item-val {\n  font-size: 20px;\n  font-weight: 800;\n  color: #d97706;\n}\n.hs-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 14px;\n}\n.hs-table th {\n  background: #059669;\n  color: #fff;\n  padding: 10px 12px;\n  text-align: left;\n  font-weight: 600;\n}\n.hs-table th:not(:first-child) {\n  text-align: right;\n}\n.hs-table td {\n  padding: 10px 12px;\n  border-bottom: 1px solid #e2e8f0;\n}\n.hs-table td:not(:first-child) {\n  text-align: right;\n}\n.hs-table tr.hs-current td {\n  background: #f0fdf4;\n  font-weight: 700;\n  color: #059669;\n}\n.hs-table tr:hover td { background: #f8fafc; }\n.hs-qr-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 10px;\n}\n.hs-qr-box {\n  background: #f8fafc;\n  border: 1px solid #e2e8f0;\n  border-radius: 10px;\n  padding: 14px 10px;\n  text-align: center;\n  transition: border-color 0.2s, background 0.2s;\n  cursor: pointer;\n}\n.hs-qr-box:hover {\n  background: #f0fdf4;\n  border-color: #059669;\n}\n.hs-qr-rate {\n  font-size: 18px;\n  font-weight: 800;\n  color: #059669;\n  margin-bottom: 4px;\n}\n.hs-qr-annual {\n  font-size: 12px;\n  font-weight: 700;\n  color: #1e293b;\n}\n.hs-qr-label {\n  font-size: 11px;\n  color: #94a3b8;\n  margin-top: 2px;\n}\n.hs-hidden { display: none; }\n@media (max-width: 560px) {\n  .hs-results-grid { grid-template-columns: 1fr; }\n  .hs-results-grid-3 { grid-template-columns: 1fr 1fr; }\n  .hs-ot-grid { grid-template-columns: 1fr; }\n  .hs-qr-grid { grid-template-columns: 1fr 1fr; }\n}\n@media (max-width: 380px) {\n  .hs-results-grid-3 { grid-template-columns: 1fr; }\n  .hs-qr-grid { grid-template-columns: 1fr; }\n}\n\u003c/style\u003e\n\u003cdiv class=\"hs-wrap\"\u003e\n\u003c!-- モード切替 --\u003e\n\u003cdiv class=\"hs-mode-toggle\"\u003e\n  \u003cdiv class=\"hs-mode-btn active\" id=\"hsModeHtoS\" onclick=\"hsSetMode('hourly')\"\u003e時給 \u0026rarr; 年収\u003c/div\u003e\n  \u003cdiv class=\"hs-mode-btn\" id=\"hsModeStoH\" onclick=\"hsSetMode('salary')\"\u003e年収 \u0026rarr; 時給\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 入力エリア --\u003e\n\u003cdiv class=\"hs-card\"\u003e\n  \u003cdiv class=\"hs-section-title\" id=\"hsInputTitle\"\u003eあなたの時給\u003c/div\u003e\n  \u003c!-- 時給入力 --\u003e\n  \u003cdiv class=\"hs-field\" id=\"hsHourlyField\"\u003e\n    \u003clabel class=\"hs-label\" for=\"hsHourlyInput\"\u003e時給\u003c/label\u003e\n    \u003cdiv class=\"hs-input-wrap\"\u003e\n      \u003cspan class=\"hs-input-prefix\"\u003e$\u003c/span\u003e\n      \u003cinput type=\"number\" id=\"hsHourlyInput\" class=\"hs-input\" value=\"20\" min=\"1\" max=\"10000\" step=\"0.25\" oninput=\"hsCalc()\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 年収入力 --\u003e\n  \u003cdiv class=\"hs-field hs-hidden\" id=\"hsSalaryField\"\u003e\n    \u003clabel class=\"hs-label\" for=\"hsSalaryInput\"\u003e年収\u003c/label\u003e\n    \u003cdiv class=\"hs-input-wrap\"\u003e\n      \u003cspan class=\"hs-input-prefix\"\u003e$\u003c/span\u003e\n      \u003cinput type=\"number\" id=\"hsSalaryInput\" class=\"hs-input\" value=\"52000\" min=\"1000\" max=\"10000000\" step=\"1000\" oninput=\"hsCalc()\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 週あたり時間 --\u003e\n  \u003cdiv class=\"hs-field\"\u003e\n    \u003clabel class=\"hs-label\"\u003e週あたり勤務時間: \u003cspan id=\"hsHoursVal\" style=\"color:#059669;\"\u003e40\u003c/span\u003e 時間\u003c/label\u003e\n    \u003cdiv class=\"hs-range-row\"\u003e\n      \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e1\u003c/span\u003e\n      \u003cinput type=\"range\" id=\"hsHoursRange\" min=\"1\" max=\"60\" step=\"1\" value=\"40\" oninput=\"hsCalc()\"\u003e\n      \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e60\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003c!-- 年間稼働週数 --\u003e\n  \u003cdiv class=\"hs-field\" style=\"margin-bottom:0;\"\u003e\n    \u003clabel class=\"hs-label\"\u003e年間稼働週数: \u003cspan id=\"hsWeeksVal\" style=\"color:#059669;\"\u003e52\u003c/span\u003e 週\u003c/label\u003e\n    \u003cdiv class=\"hs-range-row\"\u003e\n      \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e48\u003c/span\u003e\n      \u003cinput type=\"range\" id=\"hsWeeksRange\" min=\"48\" max=\"52\" step=\"1\" value=\"52\" oninput=\"hsCalc()\"\u003e\n      \u003cspan style=\"font-size:12px;color:#94a3b8;\"\u003e52\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"font-size:12px;color:#94a3b8;margin-top:6px;\"\u003e有給休暇・祝日・無給休暇を差し引いてください\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 計算結果 --\u003e\n\u003cdiv class=\"hs-card\"\u003e\n  \u003cdiv class=\"hs-section-title\"\u003e給与内訳\u003c/div\u003e\n  \u003cdiv id=\"hsResultsGrid\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 残業代パネル --\u003e\n\u003cdiv class=\"hs-card\" id=\"hsOvertimeCard\" style=\"display:none;\"\u003e\n  \u003cdiv class=\"hs-section-title\"\u003e残業代内訳\u003c/div\u003e\n  \u003cdiv style=\"font-size:13px;color:#64748b;margin-bottom:14px;\"\u003e週40時間を超えています。40時間超の時間は通常の1.5倍の残業単価で計算されます。\u003c/div\u003e\n  \u003cdiv class=\"hs-ot-box\"\u003e\n    \u003cdiv class=\"hs-ot-title\" id=\"hsOtTitle\"\u003e\u003c/div\u003e\n    \u003cdiv class=\"hs-ot-grid\" id=\"hsOtGrid\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 比較表：時給が上がると年収はどう変わる？ --\u003e\n\u003cdiv class=\"hs-card\"\u003e\n  \u003cdiv class=\"hs-section-title\"\u003e昇給による年収への影響\u003c/div\u003e\n  \u003cdiv style=\"font-size:13px;color:#64748b;margin-bottom:14px;\"\u003e時給の小さな変化が年収にどれだけ影響するかを確認できます。現在の時給をハイライト表示しています。\u003c/div\u003e\n  \u003cdiv style=\"overflow-x:auto;\"\u003e\n    \u003ctable class=\"hs-table\"\u003e\n      \u003cthead\u003e\n        \u003ctr\u003e\n          \u003cth\u003e時給\u003c/th\u003e\n          \u003cth\u003e週給\u003c/th\u003e\n          \u003cth\u003e月給\u003c/th\u003e\n          \u003cth\u003e年収\u003c/th\u003e\n          \u003cth\u003e現在との差\u003c/th\u003e\n        \u003c/tr\u003e\n      \u003c/thead\u003e\n      \u003ctbody id=\"hsCompBody\"\u003e\u003c/tbody\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\u003c!-- 時給早見表 --\u003e\n\u003cdiv class=\"hs-card\"\u003e\n  \u003cdiv class=\"hs-section-title\"\u003e主な時給と年収の早見表\u003c/div\u003e\n  \u003cdiv style=\"font-size:13px;color:#64748b;margin-bottom:14px;\"\u003eクリックすると計算ツールに反映されます。\u003c/div\u003e\n  \u003cdiv class=\"hs-qr-grid\" id=\"hsQrGrid\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c!-- end hs-wrap --\u003e\n\u003cscript\u003e\nvar hsMode = 'hourly';\n\nfunction hsSetMode(mode) {\n  hsMode = mode;\n  if (mode === 'hourly') {\n    document.getElementById('hsModeHtoS').classList.add('active');\n    document.getElementById('hsModeStoH').classList.remove('active');\n    document.getElementById('hsHourlyField').classList.remove('hs-hidden');\n    document.getElementById('hsSalaryField').classList.add('hs-hidden');\n    document.getElementById('hsInputTitle').textContent = 'あなたの時給';\n  } else {\n    document.getElementById('hsModeStoH').classList.add('active');\n    document.getElementById('hsModeHtoS').classList.remove('active');\n    document.getElementById('hsSalaryField').classList.remove('hs-hidden');\n    document.getElementById('hsHourlyField').classList.add('hs-hidden');\n    document.getElementById('hsInputTitle').textContent = 'あなたの年収';\n  }\n  hsCalc();\n}\n\nfunction fmtMoney(n) {\n  if (n \u003e= 1000) {\n    return '$' + Math.round(n).toLocaleString('en-US');\n  }\n  return '$' + n.toFixed(2);\n}\n\nfunction fmtDelta(n) {\n  if (n === 0) return '—';\n  return (n \u003e 0 ? '+' : '') + '$' + Math.round(Math.abs(n)).toLocaleString('en-US');\n}\n\nfunction fmtRate(n) {\n  return '$' + n.toFixed(2) + '/時';\n}\n\nfunction hsGetValues() {\n  var hours = parseInt(document.getElementById('hsHoursRange').value) || 40;\n  var weeks = parseInt(document.getElementById('hsWeeksRange').value) || 52;\n  var hourly, annual;\n  if (hsMode === 'hourly') {\n    hourly = parseFloat(document.getElementById('hsHourlyInput').value) || 0;\n    annual = hourly * hours * weeks;\n  } else {\n    annual = parseFloat(document.getElementById('hsSalaryInput').value) || 0;\n    hourly = (hours \u003e 0 \u0026\u0026 weeks \u003e 0) ? annual / (hours * weeks) : 0;\n  }\n  return { hourly: hourly, hours: hours, weeks: weeks, annual: annual };\n}\n\nfunction hsCalc() {\n  var v = hsGetValues();\n  var hours = v.hours;\n  var weeks = v.weeks;\n  var hourly = v.hourly;\n  var annual = v.annual;\n\n  document.getElementById('hsHoursVal').textContent = hours;\n  document.getElementById('hsWeeksVal').textContent = weeks;\n\n  var weekly = hourly * hours;\n  var biweekly = weekly * 2;\n  var monthly = annual / 12;\n  var daily = hourly * 8;\n\n  var rg = document.getElementById('hsResultsGrid');\n  var html = '';\n\n  if (hsMode === 'hourly') {\n    html += '\u003cdiv class=\"hs-results-grid\"\u003e';\n    html += hsResultBox('週給', fmtMoney(weekly), hours + ' 時間 \u0026times; ' + weeks + ' 週/年', false);\n    html += hsResultBox('隔週給', fmtMoney(biweekly), '2週間ごと', false);\n    html += '\u003c/div\u003e';\n    html += '\u003cdiv class=\"hs-results-grid\"\u003e';\n    html += hsResultBox('月給', fmtMoney(monthly), '年収 \u0026divide; 12', false);\n    html += hsResultBox('年収', fmtMoney(annual), hourly.toFixed(2) + '/時 \u0026times; ' + (hours * weeks) + ' 時間', true);\n    html += '\u003c/div\u003e';\n  } else {\n    html += '\u003cdiv class=\"hs-results-grid\"\u003e';\n    html += hsResultBox('時給', fmtRate(hourly), annual \u003e 0 ? fmtMoney(annual) + '/年 \u0026divide; ' + (hours * weeks) + ' 時間' : '—', true);\n    html += hsResultBox('日当', fmtMoney(daily), '8時間 \u0026times; ' + fmtRate(hourly), false);\n    html += '\u003c/div\u003e';\n    html += '\u003cdiv class=\"hs-results-grid-3\"\u003e';\n    html += hsResultBox('週給', fmtMoney(weekly), hours + ' 時間/週', false);\n    html += hsResultBox('隔週給', fmtMoney(biweekly), '2週間ごと', false);\n    html += hsResultBox('月給', fmtMoney(monthly), '年収 \u0026divide; 12', false);\n    html += '\u003c/div\u003e';\n  }\n  rg.innerHTML = html;\n\n  var otCard = document.getElementById('hsOvertimeCard');\n  if (hours \u003e 40) {\n    otCard.style.display = 'block';\n    var regularHours = 40;\n    var otHours = hours - 40;\n    var otRate = hourly * 1.5;\n    var regularWeeklyPay = regularHours * hourly;\n    var otWeeklyPay = otHours * otRate;\n    var totalWeeklyWithOt = regularWeeklyPay + otWeeklyPay;\n    var totalAnnualWithOt = totalWeeklyWithOt * weeks;\n    var otAnnualBonus = totalAnnualWithOt - (hourly * 40 * weeks);\n\n    document.getElementById('hsOtTitle').innerHTML =\n      '週' + hours + '時間勤務：通常' + regularHours + '時間 + 残業' + otHours + '時間（' + fmtRate(otRate) + '、1.5倍）';\n\n    var og = document.getElementById('hsOtGrid');\n    og.innerHTML =\n      '\u003cdiv class=\"hs-ot-item\"\u003e' +\n        '\u003cdiv class=\"hs-ot-item-label\"\u003e残業込み週給\u003c/div\u003e' +\n        '\u003cdiv class=\"hs-ot-item-val\"\u003e' + fmtMoney(totalWeeklyWithOt) + '\u003c/div\u003e' +\n      '\u003c/div\u003e' +\n      '\u003cdiv class=\"hs-ot-item\"\u003e' +\n        '\u003cdiv class=\"hs-ot-item-label\"\u003e残業込み年収\u003c/div\u003e' +\n        '\u003cdiv class=\"hs-ot-item-val\"\u003e' + fmtMoney(totalAnnualWithOt) + '\u003c/div\u003e' +\n      '\u003c/div\u003e' +\n      '\u003cdiv class=\"hs-ot-item\"\u003e' +\n        '\u003cdiv class=\"hs-ot-item-label\"\u003e週あたり残業時間\u003c/div\u003e' +\n        '\u003cdiv class=\"hs-ot-item-val\"\u003e' + otHours + ' 時間\u003c/div\u003e' +\n      '\u003c/div\u003e' +\n      '\u003cdiv class=\"hs-ot-item\"\u003e' +\n        '\u003cdiv class=\"hs-ot-item-label\"\u003e残業による年収増\u003c/div\u003e' +\n        '\u003cdiv class=\"hs-ot-item-val\"\u003e+' + fmtMoney(otAnnualBonus) + '\u003c/div\u003e' +\n      '\u003c/div\u003e';\n  } else {\n    otCard.style.display = 'none';\n  }\n\n  var baseHourly = hourly;\n  var increments = [-2, -1, 0, 1, 2, 5];\n  var cb = document.getElementById('hsCompBody');\n  var ch = '';\n  for (var i = 0; i \u003c increments.length; i++) {\n    var r = baseHourly + increments[i];\n    if (r \u003c 0) continue;\n    var isCurrent = increments[i] === 0;\n    var rowAnnual = r * hours * weeks;\n    var rowWeekly = r * hours;\n    var rowMonthly = rowAnnual / 12;\n    var delta = rowAnnual - annual;\n    var hlClass = isCurrent ? ' class=\"hs-current\"' : '';\n    var rateLabel = isCurrent ? fmtRate(r) + ' \u003cstrong\u003e（あなた）\u003c/strong\u003e' : fmtRate(r);\n    var deltaStr = isCurrent ? '—' : fmtDelta(delta) + '/年';\n    ch += '\u003ctr' + hlClass + '\u003e' +\n      '\u003ctd\u003e' + rateLabel + '\u003c/td\u003e' +\n      '\u003ctd\u003e' + fmtMoney(rowWeekly) + '\u003c/td\u003e' +\n      '\u003ctd\u003e' + fmtMoney(rowMonthly) + '\u003c/td\u003e' +\n      '\u003ctd\u003e' + fmtMoney(rowAnnual) + '\u003c/td\u003e' +\n      '\u003ctd style=\"color:' + (delta \u003e 0 ? '#059669' : delta \u003c 0 ? '#dc2626' : '#64748b') + ';font-weight:700;\"\u003e' + deltaStr + '\u003c/td\u003e' +\n    '\u003c/tr\u003e';\n  }\n  cb.innerHTML = ch;\n\n  var qrRates = [15, 20, 25, 30, 40, 50];\n  var qg = document.getElementById('hsQrGrid');\n  var qh = '';\n  for (var j = 0; j \u003c qrRates.length; j++) {\n    var qr = qrRates[j];\n    var qAnnual = qr * hours * weeks;\n    qh += '\u003cdiv class=\"hs-qr-box\" onclick=\"hsSetRate(' + qr + ')\"\u003e' +\n      '\u003cdiv class=\"hs-qr-rate\"\u003e' + fmtRate(qr) + '\u003c/div\u003e' +\n      '\u003cdiv class=\"hs-qr-annual\"\u003e' + fmtMoney(qAnnual) + '/年\u003c/div\u003e' +\n      '\u003cdiv class=\"hs-qr-label\"\u003e' + hours + ' 時間 \u0026times; ' + weeks + ' 週\u003c/div\u003e' +\n    '\u003c/div\u003e';\n  }\n  qg.innerHTML = qh;\n}\n\nfunction hsResultBox(label, value, sub, isPrimary) {\n  var cls = isPrimary ? 'hs-result-box primary' : 'hs-result-box';\n  var subCls = isPrimary ? 'hs-result-sub' : 'hs-result-sub-dark';\n  return '\u003cdiv class=\"' + cls + '\"\u003e' +\n    '\u003cdiv class=\"hs-result-label\"\u003e' + label + '\u003c/div\u003e' +\n    '\u003cdiv class=\"hs-result-value\"\u003e' + value + '\u003c/div\u003e' +\n    '\u003cdiv class=\"' + subCls + '\"\u003e' + sub + '\u003c/div\u003e' +\n  '\u003c/div\u003e';\n}\n\nfunction hsSetRate(rate) {\n  hsMode = 'hourly';\n  document.getElementById('hsModeHtoS').classList.add('active');\n  document.getElementById('hsModeStoH').classList.remove('active');\n  document.getElementById('hsHourlyField').classList.remove('hs-hidden');\n  document.getElementById('hsSalaryField').classList.add('hs-hidden');\n  document.getElementById('hsInputTitle').textContent = 'あなたの時給';\n  document.getElementById('hsHourlyInput').value = rate;\n  hsCalc();\n}\n\ndocument.addEventListener('DOMContentLoaded', function() { hsCalc(); });\nhsCalc();\n\u003c/script\u003e\n\u003chr\u003e\n\u003ch2 id=\"時給交渉で昇給を勝ち取る方法\"\u003e時給交渉で昇給を勝ち取る方法\u003c/h2\u003e\n\u003ch3 id=\"1-感覚ではなく市場データで交渉する\"\u003e1. 感覚ではなく市場データで交渉する\u003c/h3\u003e\n\u003cp\u003e交渉の前に、同じ職種・地域・業界で実際にどれだけの報酬が支払われているかを調べましょう。厚生労働省の賃金統計、求人サイトの給与データ、業界団体の調査などを活用します。「なんとなく少ない気がする」ではなく、複数のデータソースに基づく具体的な数字を持ち込むことが説得力を生みます。\u003c/p\u003e","title":"時給・年収換算計算ツール | 給与を瞬時に変換"}]