超便利 下書き管理ツール
= ブラウザで下書きを保存・管理する =

下書き管理ツール 言語目次
 Japanese [日本語]  
 English [英語]  
 Korean [韓国語]  
 Simplified Chinese [简体中文]  
 Traditional Chinese [繁體中文]  
 Español [スペイン語]  
 Français [フランス語]  
 Português [ポルトガル語]  
 Deutsch [ドイツ語]  
 Italiano [イタリア語]  
 Russian [ロシア語]  
 Turkish [トルコ語]  
 Hindi [ヒンディー語]  
 Vietnamese [ベトナム語]  
 Thai [タイ語]  
 Dutch [オランダ語]  
 Indonesian [インドネシア語]  
 Malay [マレー語]  
 Filipino [フィリピン語]  
 Swedish [スウェーデン語]  
 Norwegian [ノルウェー語]  
 Danish [デンマーク語]  
 Finnish [フィンランド語]  
 Polish [ポーランド語]  
 Czech [チェコ語]  
 Hungarian [ハンガリー語]  
 Greek [ギリシャ語]  
 Romanian [ルーマニア語]  
 Tagalog [タガログ語]  
 Ukrainian [ウクライナ語]  
 Arabic [アラビア語]  
 下書き管理ツール HTML File Download   
ファイルをダウンロードし、ご自身のパソコンに置いてご利用ください。
下記の「下書き管理ツール」はサンプルです。

《下書き管理ツール》

 この「下書き管理ツール」は、テキストの下書きをブラウザを使ってシンプルかつ効率的に行うものです。入力内容は自動的に保存され、名前を付けての保存の手間も省けます。保存時にはタイムスタンプが自動で付与されます。また、コピーやエクスポートも簡単に行えます。
 入力されたデータは、ユーザーのブラウザの「ローカルストレージ」に保存され、サーバーには送信されません。データはユーザー自身のデバイスにのみ保存され、プライバシーが守られます。
 ただし、コンピュータをシャットダウンしたり再起動すると、ローカルストレージのデータが消える場合があります。ブラウザを閉じてもデータは残りますが、履歴やキャッシュをクリアすると削除されることがあります。定期的なエクスポートをおすすめします。
《 Draft Management Tool Demo 》
  • コードをコピー、またはダウンロードして利用することができます。
  • ご自身のパソコンのデスクトップに置くなどしてご利用ください。
  • ご利用にあたっての制限はありません。適宜、ご自身の環境に合わせてご利用ください。
《全てを設置した HTMLサンプル》
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>下書き管理ツール</title>
    <meta name="description" content="ブラウザ上で下書きを保存・管理し、コピーやエクスポート、タイムスタンプの付加などが可能な便利ツールです。ワープロソフトに比べ、名前を付けて保存する手間も省けます。">
    <meta name="author" content="Everyone's Knowledge: Handy Notes みんなの知識 ちょっと便利帳">
    <meta name="creation date" content="2024.09.01">
    <meta name="robots" content="NOINDEX,NOFOLLOW">
    <!-- Google Fonts CDN -->
    <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap" rel="stylesheet">
    <style>
		body {font-family: "Noto Sans JP", "Hiragino Sans", "Hiragino Kaku Gothic ProN", Meiryo, sans-serif; margin: 0 0 0 5px;}
		.draft-form { margin-bottom: 5px; }
		label { display: block; margin-bottom: 5px; }
		input[type="text"], textarea { width: 98%; padding: 8px; margin-bottom: 10px; border: #666 1px solid ;border-radius: 4px; }
		button { padding: 10px 15px; margin-right: 5px; }
		.preview { padding: 10px; border: 1px solid #333; border-radius: 4px; background-color: #FAFAFA; margin-top: 10px; }
		.title-highlight { font-weight: bold; color: #333; }
		fieldset{margin: 0 0 20px 0; border: darkgray 2px solid; border-radius: 4px; }
		.bgcolor-01{background-color: lavenderblush; }
		.bgcolor-02{background-color: lightcyan; }
		.bgcolor-03{background-color: #E8FBE8; }
		.bgcolor-04{background-color: #FCFAFC; }
		.bgcolor-05{background-color: #F5FFFA; }
		/* ボタンのスタイル */
		button {
			background-color: #007bff; /* 青い背景色 */
			color: #fff; /* 白い文字色 */
			border: none;
			border-radius: 4px;
			padding: 3px 5px;
			font-size: 16px; /* フォントサイズの指定 */
			cursor: pointer;
			margin: 5px 0;
			transition: background-color 0.3s ease; /* ホバー時のアニメーション */
		}
		button:hover {
			background-color: #0056b3; /* ホバー時の背景色 */
		}
		button[type="reset"] {
			background-color: #6c757d; /* グレーの背景色 */
		}
		button[type="reset"]:hover {
			background-color: #5a6268; /* ホバー時のグレーの背景色 */
		} 
		/* リセットボタンのスタイル */
		.reset-btn {
			background-color: #ff6b6b;
		}
		/* 説明タイトル */
		.setysumei_title{
		font-weight: bold;
		}
		/*  説明本文*/
		.setysumei_honbun{
		margin: 0 0 0 20px;
		}
		legend{font-weight: bold}
    </style>
    <script>
        document.addEventListener('DOMContentLoaded', () => {
            const forms = document.querySelectorAll('.draft-form');
            
            forms.forEach((form, index) => {
                const titleField = form.querySelector(`input[name="title-${index + 1}"]`);
                const contentField = form.querySelector(`textarea[name="content-${index + 1}"]`);
                const previewDiv = form.querySelector('.preview');

                const timestampKey = `timestamp-${index + 1}`;

                // フィールドのデータをローカルストレージから復元
                titleField.value = localStorage.getItem(titleField.name) || '';
                contentField.value = localStorage.getItem(contentField.name) || '';
                const savedTimestamp = localStorage.getItem(timestampKey) || 'まだ保存されていません';

                // 入力ごとにローカルストレージに保存とプレビュー更新
                [titleField, contentField].forEach(field => {
                    field.addEventListener('input', () => {
                        localStorage.setItem(field.name, field.value);
                        const timestamp = new Date().toLocaleString();
                        localStorage.setItem(timestampKey, timestamp);
                        adjustTextareaHeight(contentField);
                        updatePreview(timestamp);
                    });
                });

                // リセットボタンでローカルストレージもクリア
                form.querySelector('.reset-btn').addEventListener('click', () => {
                    [titleField, contentField].forEach(field => {
                        localStorage.removeItem(field.name);
                        field.value = '';
                        adjustTextareaHeight(contentField);
                    });
                    localStorage.removeItem(timestampKey);
                    updatePreview('まだ保存されていません');
                });

                // クリックでコピーする機能
                form.querySelector('.copy-btn').addEventListener('click', () => {
                    const content = contentField;
                    content.select();
                    document.execCommand('copy');
                    alert('内容がコピーされました!');
                });

                // エクスポート機能
                form.querySelector('.export-btn').addEventListener('click', () => {
                    const data = {
                        title: titleField.value,
                        content: contentField.value,
                        timestamp: localStorage.getItem(timestampKey) || new Date().toLocaleString()
                    };
                    const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
                    const url = URL.createObjectURL(blob);
                    const a = document.createElement('a');
                    a.href = url;
                    a.download = `draft-${index + 1}.json`;
                    a.click();
                });

                // プレビュー機能の更新
                function updatePreview(timestamp) {
                    const title = titleField.value ? `《${titleField.value}》` : '';
                    const escapedContent = contentField.value
                        .replace(/&/g, '&amp;')
                        .replace(/</g, '&lt;')
                        .replace(/>/g, '&gt;')
                        .replace(/"/g, '&quot;')
                        .replace(/'/g, '&#39;')
                        .replace(/\n/g, '<br>');

                    previewDiv.innerHTML = `
                        <div class="title-highlight">${title}</div>
                        <p>${escapedContent}</p>
                        <small>保存日時: ${timestamp}</small>
                    `;
                }

                // テキストエリアの高さを内容に合わせて調整する関数
                function adjustTextareaHeight(textarea) {
                    textarea.style.height = 'auto';
                    textarea.style.height = textarea.scrollHeight + 'px';
                }

                // ページ読み込み時にテキストエリアの高さを調整
                adjustTextareaHeight(contentField);
                updatePreview(savedTimestamp);
            });
        });
    </script>
</head>
<body>
 <div align="center"><strong>《&thinsp;下書き管理ツール&thinsp;》</strong></div>
 <fieldset class="bgcolor-01">
 <legend>《&thinsp;下書き ①&thinsp;》</legend>
 <div class="draft-form">
     <label for="title-1">タイトル:</label>
     <input type="text" id="title-1" name="title-1" placeholder="タイトルを入力">
     <label for="content-1">内容:</label>
     <textarea id="content-1" name="content-1" placeholder="内容を入力"></textarea>
     <button type="button" class="copy-btn">クリックでコピー</button>
     <button type="button" class="export-btn">エクスポート</button>
     <button type="button" class="reset-btn">リセット</button>   
     <div class="preview"></div>
 </div>
 </fieldset>

 <fieldset class="bgcolor-02">
 <legend>《&thinsp;下書き ②&thinsp;》</legend>
 <div class="draft-form">
     <label for="title-2">タイトル:</label>
     <input type="text" id="title-2" name="title-2" placeholder="タイトルを入力">
     <label for="content-2">内容:</label>
     <textarea id="content-2" name="content-2" placeholder="内容を入力"></textarea>
     <button type="button" class="copy-btn">クリックでコピー</button>
     <button type="button" class="export-btn">エクスポート</button>
     <button type="button" class="reset-btn">リセット</button>
     <div class="preview"></div>
 </div>
 </fieldset>

 <fieldset class="bgcolor-03">
 <legend>《&thinsp;下書き ③&thinsp;》</legend>
 <div class="draft-form ">
     <label for="title-3">タイトル:</label>
     <input type="text" id="title-3" name="title-3" class="b" placeholder="タイトルを入力">
     <label for="content-3">内容:</label>
     <textarea id="content-3" name="content-3" placeholder="内容を入力"></textarea>
     <button type="button" class="copy-btn">クリックでコピー</button>
     <button type="button" class="export-btn">エクスポート</button>
     <button type="button" class="reset-btn">リセット</button>
     <div class="preview"></div>
 </div>
 </fieldset>

 <fieldset class="bgcolor-04">
 <legend>《&thinsp;下書き ④&thinsp;》</legend>
 <div class="draft-form ">
     <label for="title-4">タイトル:</label>
     <input type="text" id="title-4" name="title-4" class="b" placeholder="タイトルを入力">
     <label for="content-4">内容:</label>
     <textarea id="content-4" name="content-4" placeholder="内容を入力"></textarea>
     <button type="button" class="copy-btn">クリックでコピー</button>
     <button type="button" class="export-btn">エクスポート</button>
     <button type="button" class="reset-btn">リセット</button>
     <div class="preview"></div>
 </div>
 </fieldset>

 <fieldset class="bgcolor-05">
 <legend>《&thinsp;下書き ⑤&thinsp;》</legend>
 <div class="draft-form ">
     <label for="title-5">タイトル:</label>
     <input type="text" id="title-5" name="title-5" class="b" placeholder="タイトルを入力">
     <label for="content-5">内容:</label>
     <textarea id="content-5" name="content-5" placeholder="内容を入力"></textarea>
     <button type="button" class="copy-btn">クリックでコピー</button>
     <button type="button" class="export-btn">エクスポート</button>
     <button type="button" class="reset-btn">リセット</button>
     <div class="preview"></div>
 </div>
 </fieldset>

    <fieldset>
    <legend><h3>《下書き管理ツールの仕様・特徴・機能など》</h3></legend>
    <div class="notes" style="margin: 0 10px 10px">
    <div class="setysumei_title">① ローカルストレージの保存場所など</div>
    <div class="setysumei_honbun"> 入力されたデータは、ユーザーのブラウザの「ローカルストレージ」に保存されます。ローカルストレージは、以下の特性を持つブラウザのストレージ機能です。</div>
    <ul>
    <li><strong>ブラウザ固有</strong>: ローカルストレージは、データが保存された特定のブラウザ内にのみ存在します。他のブラウザやデバイスからはアクセスできません。</li>
    <li><strong>ドメイン固有</strong>: データは保存された特定のドメイン(サイト)に関連付けられています。同じドメイン内のページならアクセスできますが、異なるドメインではアクセスできません。</li>
    <li><strong>持続性</strong>: ローカルストレージに保存されたデータは、ブラウザを閉じても残りますが、コンピュータをシャットダウンや再起動した場合、データが削除されることがあります。必ず重要なデータは、テキストエディターや他の保存手段でバックアップしてください。また、プライベートモード(シークレットモード)では、データが保存されない場合があります。</li>
    </ul>
    <div class="setysumei_title">② Webサーバー上での挙動</div>
    <div class="setysumei_honbun"> このHTMLファイルをWebサーバーにアップロードした場合、次のような挙動が予想されます。</div>
    <ul>
    <li><strong>同一ユーザー・同一ブラウザでの利用</strong>:</li>
    <ul>
    <li>あるユーザーがこのページにアクセスすると、そのユーザーのブラウザのローカルストレージにデータが保存されます。</li>
    <li>同じユーザーが同じブラウザから再度アクセスした場合、以前の入力内容が復元されます。</li>
    <li>ローカルストレージはクライアント(ユーザーのデバイス)側に保存されるため、他のユーザーやデバイスからはアクセスできません。</li>
    </ul>
    <li><strong>異なるユーザー・異なるブラウザでの利用</strong>:</li>
    <ul>
    <li>異なるユーザーが同じWebページにアクセスした場合、そのユーザーのブラウザに新しいローカルストレージが作成され、前のユーザーのデータにアクセスすることはできません。</li>
    </ul>
    <li><strong>データのセキュリティ</strong>:</li>
    <ul>
    <li>ローカルストレージはクライアント側に保存されるため、サーバーにはデータは送信されません。したがって、データはユーザー自身のデバイスにのみ保存されます。Webサーバー上にアップロードしても、個別のユーザーごとにデータが管理されるため、プライバシーは守られます。</li>	
    </ul>
    </ul>
    <div class="setysumei_title">③ 機能など</div>
    <ul>
    <li><strong>保存データのエクスポート機能</strong>: 保存したデータをJSON形式でエクスポートし、再利用することができます。</li>
    <li><strong>入力内容のプレビュー機能</strong>: 入力中の内容をリアルタイムでプレビューし、編集の際の確認がしやすくなります。</li>
    <li><strong>タイムスタンプの機能</strong>: 各下書きの保存日時を記録し、最後の編集時刻を確認することができます。</li>
    <li><strong>コピー機能</strong>: 入力・保存した内容を、コピーボタンでコピーして利用することができます。</li>
    </ul>
    <div class="setysumei_title">《 まとめ 》</div>
    <div class="setysumei_honbun"> このツールは、ローカルストレージを使用してデータを保存するため、Webサーバー上にアップロードしても、他のユーザーとデータが共有されることはありません。それぞれのユーザーが自分のブラウザ内でのみデータを保持し、リセットするまでデータは残り続けます。この機能はWebサーバー上でも安全に利用でき、ユーザーごとに独立して機能します。
    <br> このツールは、ブラウザのローカルストレージを利用して簡単に下書きを保存・管理するためのものです。名前を付けて保存する手間を省き、ブラウザ上で直接入力と保存が行えます。使い方によっては、テキストエディターやワープロソフトと比べて便利さが増し、作業効率も高まるものと考えられます。<br>
     <strong style="color: crimson"> ただし、コンピュータのシャットダウンや再起動によりデータが消える場合がありますので、重要なデータは定期的にエクスポートするか、テキストエディターやワープロソフトで保存してください。このツールは、あくまでも下書きの一時的保存の機能を提供するものです。</strong>
    </div>
    </div>
    </fieldset>

</body>
</html>

おすすめサイト・関連サイト…

Last updated : 2024/09/06