[English](../../README.md) · [简体中文](../../README.zh.md) · [繁體中文](README.zh-Hant.md) · **日本語** · [한국어](README.ko.md) · [Español](README.es.md) · [Português](README.pt.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [Italiano](README.it.md) · [Русский](README.ru.md) · [Tiếng Việt](README.vi.md) · [ไทย](README.th.md) · [Bahasa Indonesia](README.id.md) · [हिन्दी](README.hi.md) · [বাংলা](README.bn.md) · [العربية](README.ar.md) · [Türkçe](README.tr.md)
# QuickText
> Windows トレイ常駐のスニペットマネージャー兼テキスト展開ツール。

**同じ文章を二度打つのはもうやめましょう。** QuickText は Windows のタスクトレイに常駐します。何度も使い回すテキスト(メール・住所・署名・テンプレート・定型返信・画像など)を一度だけ登録しておけば、**あらゆる入力欄**でキーを数回打つか略語を入力するだけで、カーソル位置にそのまま貼り付けられます。複数行・特殊文字・絵文字も一文字たがわず保持されます。
> 使い回すテキストを、数キー打つだけで — カーソル位置へそのまま届けます。
- WPF / .NET 10、単一ファイルのポータブル exe、**アカウント不要・既定でオフライン**——ネットワークに接続するのは任意の「更新を確認」だけです。
- データは自分のフォルダー内の**ローカル JSON**。Dropbox / OneDrive / NAS に置けば同期できます。
- ダーク/ライトテーマ(Windows に追従も可)、**18 の UI 言語**(アラビア語は右から左へのミラーリング対応)、設定は即座に反映。
**[⬇ 最新版をダウンロード](https://github.com/rockbenben/QuickText/releases/latest)** —— Windows x64、単一ファイルのポータブル版。コード署名がないため初回起動時に SmartScreen が警告します:**詳細情報 → 実行**をクリックしてください。
- `QuickText--win-x64.zip` —— .NET ランタイム同梱。前提条件なしで Windows 10/11 x64 ならそのまま動きます。迷ったらこちら:社内ネットワークやオフラインの PC、USB メモリーで持ち歩く場合にも。
- `QuickText--win-x64-needs-dotnet10.zip` —— [.NET 10 デスクトップランタイム](https://dotnet.microsoft.com/download/dotnet/10.0) が別途必要です。ネットにつながる自分の PC 向け:一度入れておけば、以降の更新は毎回ごく小さなダウンロードで済みます。
- `QuickText.exe` —— 同じビルドを zip なしで置いたものです。クリックしてすぐ実行でき、既存のファイルに上書きすれば更新になります。
機能もデータも同じで、違いはランタイムを同梱するかどうかだけです。
---
## こんな場面で使えます
Windows で**同じ文章を何度も打つ**場面ならどこでも。タスクトレイに常駐し、あらゆる入力欄(チャットウィンドウ・ブラウザーのフォーム・エディター・メールクライアントなど、特定のアプリに縛られません)で動作します。**スニペットマネージャーとテキストエキスパンダーが一つに**なっており、さらにピンイン検索・変数テンプレート・画像にも対応しています。
| 対象 | 保存するもの |
| ----------------------- | --------------------------------------------------------------------------------- |
| **サポート / EC** | 定型返信、標準回答、キャンペーン文言、QR コードや商品画像 |
| **営業 / ビジネス** | メールテンプレート、書き出し、見積もり、締めの挨拶 |
| **開発者 / 運用** | コマンド、設定、JSON、定型コード(`{...}` はそのまま出力され、解釈されません) |
| **事務 / フォーム入力** | メール、住所、電話番号、ID 番号、議事録テンプレート(入力を促し、前回の値を記憶) |
| **人事 / 総務 / 法務** | 入社案内、標準通知、免責事項 — ローカル・オフラインで機密内容にも適しています |
> **機微な情報を入れる前に。** スニペットは**平文の JSON** で保存され、意図的に暗号化していません——自分で読み、diff を取り、直接編集できるようにするためです。テンプレートや定型文を自分だけのマシンで扱う分には問題ありません。一方で、書き込んだ番号やパスワードは、そのファイルを読めるものすべて(あなたのアカウントで動く他のプログラムや、フォルダーを Dropbox / OneDrive に置いた場合の同期サービス)から読めます。本当の秘密はパスワードマネージャーに預け、QuickText には「デスクトップに置いてあっても構わない」テキストだけを入れてください。
## 30 秒で体験
**入力できる場所ならどこでも** — たとえばチャット欄に自分のメールアドレスを入れたいとき:
1. **呼び出す** — `Ctrl+Shift+8` を押すと、アクティブなウィンドウの上にパネルが現れます。
2. **検索** — 数文字打つと、一致箇所がハイライトされます。名前・ピンイン(フル+頭文字)・略語・本文にマッチします。
3. **Enter** — メールアドレスが**カーソルがあった場所にそのまま**貼り付けられます。完了。
> 何も打たずにカテゴリー別に閲覧することもでき、`最近使った項目` / `お気に入り` が上部に固定されます。よく使う項目は自動的に**上位に浮かび上がります**。
> `↑↓` で移動 · `←→` でカテゴリー切り替え · `Alt+1–9` でクイック選択 · ダブルクリックで送信 · `Esc` で閉じる。
## 呼び出しは 3 通り — 好きな方法を選べます
同じライブラリを 3 通りの方法で引き出せます。自由に組み合わせて使えます:
| 方法 | トリガー | 向いている用途 |
| ----------------------- | -------------------------------------------------- | ------------------------------------------------------- |
| 🔍 **パネル検索** | `Ctrl+Shift+8` → 入力 → Enter | スニペットが多い、たまに使う、選びながら閲覧したい |
| ⌨️ **インライン略語** | `;sig` と打って Space / Tab / Enter | 高頻度の固定フレーズ、パネル不要 |
| 🧩 **変数テンプレート** | 上記いずれかで `{変数}` を含むスニペットを呼び出す | メール / フォーム:一つのテンプレートで数語だけ差し替え |
- **画像も対応**:クリップボードやファイルから追加でき、送信時に画像として貼り付けられます。画像にも略語を設定でき、略語を打つだけで画像が出ます(QR コード、ロゴ入り署名など)。
- **スニペットごとの出力**:チャットのフレーズは貼り付け後に自動送信、コードスニペットは絶対に自動送信しない — 互いに干渉しません。
略語と変数の詳細は下記の **In detail** にある **Placeholders** と **Abbreviations** の各セクションを参照してください。
---
**In detail**
## そのまますぐ使えます
**`QuickText.exe`** をダブルクリックすると、**システムトレイ**に常駐します(タスクバーにボタンは出ません)。**初回起動時**には:
- すぐ試せるように小さな**スターターライブラリ**(2 カテゴリー、あなたの **UI 言語**で)を用意し、
- 呼び出しホットキー(デフォルト **`Ctrl+Shift+8`**)をバルーンで表示します。
> パネル右上のアイコン:**+ 新規** · **マネージャー**(エディターを開く) · **設定** · **📌 ピン留め**(送信後もパネルを開いたままにして、連続で送る)。トレイに戻らずマネージャー / 設定へ直接ジャンプできます。
## テキストの追加 / 編集

- **トレイ → マネージャーを開く** — フル機能のエディター:左にカテゴリー、右にスニペット、下にエディター。カテゴリーの追加 / 名前変更 / 削除(**7 色**のタグ付き)、スニペット(名前・略語・本文・画像)の編集。ドラッグで並べ替えやカテゴリー間の移動ができ、`Ctrl+Z` で削除を取り消せます。
- **トレイ → クリップボードから新規作成** — 現在のクリップボードから新しいスニペットを作成し、マネージャーで開いて仕上げます(**保存**を押すとディスクに書き込まれます。マネージャーを閉じると保存するか破棄するか確認されます)。
- **パネルで作成** — 検索ボックスに内容を入力し `Ctrl+N` を押すと新しいスニペットとして保存し(入力した文字が本文になります。`@カテゴリ …` でそのカテゴリに振り分け)マネージャーへジャンプして仕上げられます(`Ctrl+E` で選択中の項目を編集)。
> **長文 / コード**:本文の上にある `⤢` ボタンを押すと、ほぼフルスクリーンのエディターで開きます(または本文で `Ctrl+Shift+Enter` を押しても同様)。`Esc` または「完了」で編集を終了します。変更があれば、保存するか破棄するかを先に確認します。「{variable} プレースホルダーを有効にする」にチェックが入っていると、トークンは**種類ごとに色分け**されます — 変数はシアン、`{date}` のような自動トークンはアンバー、`{snippet:x}` はパープル、`{cursor}` はシアンの破線。一方、スニペット名の誤字、無効な日付書式、閉じられていない波括弧には**赤い波線**が表示され、ホバーすると理由がわかります。これらはすべて送信時に**そのまま**貼り付けられます — 以前は誤って貼り付けてから初めて気づくものでした。日付トークンにホバーすると、解決後の値もプレビューされます。コードの場合はチェックを外したままにしてください:ハイライトは完全に無効化されるので `{}` だらけの本文でも静かなままで、ステータスバーには送信時にそのまま出力されるトークンの数だけが表示されます。さらに、**Enter でインデントを保持**、**`Tab` で複数行選択をまとめてインデント**できます。
>
> 拡大ウィンドウは**常に行番号を表示**し、フッターには**コード形式**の選択肢があります — JSON、YAML、XML、HTML、Markdown、SQL、Python、JavaScript/TypeScript、C#、Java、PowerShell、Shell、INI の全 13 種類 — 本文をシンタックスハイライトし、スニペットごとに記憶されます。**保存されるテキストはプレーンなままで、貼り付けられる内容も変わりません。** プレースホルダーのハイライトは背景を塗り、シンタックスハイライトは文字そのものを色付けするので、両者は競合しません:`{variables}` を含む JSON の本文では、構造と変数を同時に確認できます。
## Placeholders(一つのテンプレートで多くの場面に)· スニペットごとに有効化
プレースホルダーは**スニペットごとのスイッチ**です。マネージャーのエディターで「**{variable} プレースホルダーを有効にする**」にチェックを入れると、下記のトークンが送信時に解決されます。**チェックを外したまま(デフォルト)では本文はそのまま送信され** — リテラルな `{...}` を多く含むコード・スクリプト・JSON が誤解釈されたり入力を促されたりすることはありません。
> アップグレードについて:プレースホルダーは以前は常に有効でした。アップグレード後の初回起動時に、本文に `{...}` を含む**既存のスニペット**は自動的にスイッチがオンになるため、動作は変わりません。実際にコードであるものはマネージャーでチェックを外してください。
有効にすると、これらのプレースホルダーが送信時に解決されます:
| プレースホルダー | 動作 |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `{name}`(任意のラベル) | 貼り付け前に**入力を促します**。**前回の値を記憶**するので、繰り返しでは再入力を求めません |
| `{name:John}` | **デフォルト値**付きの変数。入力欄にあらかじめ入力されます |
| `{env\|dev\|test\|prod}` | **選択肢**付きの変数 — 入力欄にドロップダウンが表示されます(最初の選択肢がデフォルトも兼ね、自由入力も可能) |
| `{clipboard}` | 現在のクリップボードの内容を挿入します |
| `{cursor}` | 貼り付け後、この位置にキャレットを残します(自動 Enter も抑制します) |
| `{date}` `{time}` `{datetime}` | 現在の日付 / 時刻を挿入。`{date+7}`(7 日後)のようなオフセットに対応。`{date=yyyy年M月d日}` / `{time=HH:mm:ss}` のようなカスタム書式にも対応し、オフセットと組み合わせ可能(`{date+7=M月d日}`)。中国語の別名 `{日期}` / `{时间}` / `{日期时间}` も使えます |
| `{uuid}` `{random}` | ランダム値:UUID / 6 桁の数字を、出現ごとに新しく生成 |
| `{snippet:name}` | **別のスニペットの本文を差し込みます**(3 階層まで、循環対策済み) — 共通の署名を一箇所にまとめられます |
例:署名 `Best regards,\n{name}`(プレースホルダー有効)→ 送信時に名前を尋ねる → 完成した署名を貼り付けます。
## Abbreviations(入力するそばから展開、パネル不要)· 任意
スニペットに**略語**を設定すると、任意の入力欄で直接展開できます。**トリガー接頭辞**は設定で一度だけ指定します(デフォルト `;`):
1. マネージャーでは**略語そのもの**だけを打ちます — 例:署名なら `sig`。接頭辞は自動で付くので(打ち直し不要)、欄の前には現在の接頭辞 `;` が表示されます。
2. 任意の入力欄で **`;sig`**(=接頭辞+略語)を打ち、**Space / Tab / Enter** を押すと → `;sig` が削除され本文に展開されます(そのスニペットでプレースホルダーが有効な場合は `{placeholder}` が先に入力を促します)。
3. **打ち間違えた?** 展開の**直後に Backspace** を押すと `;sig` に戻せます(同じウィンドウ内、5 秒以内)。
詳細:マッチングは**大文字小文字を区別しません**(CapsLock オンでも `;SIG` が発火)。Backspace で修正したタイプミスもきちんと展開されます。同じ略語を持つスニペットが 2 つあるとマネージャーに**インライン警告**が出ます。トレイメニューにはワンクリックの**「展開を一時停止」**トグルもあります(デモやゲーム用)。
> **接頭辞について:** 接頭辞(デフォルト `;`)は、通常の入力やピンインが素の略語を誤って発火させるのを防ぎます。**設定 → Abbreviations → トリガー接頭辞**で変更(`,`、`:` など)するか、**空にする**こともできます。接頭辞付きの略語はそれ自体で区切られるため、直前のテキストにくっついていても発火します(例:`thx;sig`)。接頭辞なしの場合は独立した単語としてのみ発火します(`graf` のような長い語の末尾では発火しません)。アプリごとに略語を無効化(ブラックリスト、例:`cmd.exe; putty.exe`)することも、まるごとオフにすることもできます。
## 出力とよく使う設定(トレイ → 設定)
- **出力** — デフォルトは「アクティブなアプリに貼り付け」。または「クリップボードにコピーのみ」(`Ctrl+V` で貼り付け)。オプション:貼り付け後に Enter を押す、シングルクリックで送信、「元のクリップボードを保持」(復元は既定でオフ — クリップボードの読み取りが遅いアプリでは、古い内容が貼り付けられることがあります)。**スニペットごとにこれを上書きできます**(マネージャー → 出力:グローバルに従う / 貼り付け / 貼り付け + Enter / コピーのみ)— チャットのフレーズは自動送信、コードスニペットは絶対にしません。
- **パネル位置** — アクティブなウィンドウに追従(デフォルト) / テキストキャレットに追従 / 前回の位置を記憶。
- **呼び出し方法(一つ選択)** — ① **キーの組み合わせ**:ボックスをクリックして新しいキーを押す(通常のキーには `Ctrl`/`Alt`/`Shift`/`Win` が必要。ファンクションキー **`F1`–`F24` は単独で使えます**)。または ② **修飾キーのタップ**:**一つの修飾キーをシングル / ダブルタップ**して呼び出す(例:右 `Ctrl`、右 `Shift`)(単独の修飾キーは通常のホットキーにできないため、タップで検出します)。タップを選ぶと組み合わせは無効になります — 両者は排他的なので、どちらが有効かは常に明確です。
- **キャプチャホットキー** — **クリップボードを新しいスニペットとして黙って保存する**任意の第 2 の組み合わせ(バルーンで通知、ウィンドウは出ません)。
- **データフォルダー** — 同期ドライブを指定できます。**バックアップのエクスポート / インポート**(zip、上書き確認付きで検証)。このマシンへの毎日の**自動バックアップ**(最新 10 件を保持、ワンクリックでフォルダーへアクセス)。
- **言語** — **18 言語**:English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Español · Português · Français · Deutsch · Italiano · Русский · Tiếng Việt · ไทย · Bahasa Indonesia · हिन्दी · বাংলা · العربية (RTL) · Türkçe を即座に切り替え。**Windows と共に起動**も任意で設定できます。
- **テーマ** —— ダーク(既定)/ライト/Windows に追従。選んだ瞬間に反映、再起動不要。
- **更新の確認** — 既定でオフ。オンにすると起動時に一度だけ GitHub へ接続して新しいバージョンを確認します(ネットワークに接続するのはこのときだけ)。「今すぐ確認」で手動実行も可能。
## キーボードチートシート
| 操作 | キー |
| ---------------------------------------- | ------------------------------------------------------ |
| パネルの呼び出し / 閉じる | `Ctrl+Shift+8`(設定可能) / `Esc` |
| 選択 / カテゴリー切り替え / クイック選択 | `↑↓` / `←→` / `Alt+1–9` |
| 送信 | `Enter` またはダブルクリック(シングルクリックは任意) |
| お気に入り登録 / 解除 | `Ctrl+D` |
| パネルで作成 / 編集 | `Ctrl+N` / `Ctrl+E` |
| 削除の取り消し(マネージャー) | `Ctrl+Z` |
| 略語:発火 / 取り消し | 略語 + Space·Tab·Enter / 展開後に Backspace |
---
## 機能ひとめ
- **呼び出し**:グローバルホットキー — **キーの組み合わせ**(ファンクションキーは単独キーとして使用可能)または**修飾キーのシングル / ダブルタップ**(例:右 Ctrl)を**一つ選択**。パネルはアクティブなウィンドウ / テキストキャレット / 記憶した位置に追従。最上段のボタンで **新規 / マネージャー / 設定** へジャンプ。ピン留めで連続送信。ドラッグとリサイズが可能でサイズを記憶。
- **検索**:名前 / ピンイン / 頭文字 / 略語 / 本文をハイライト。**同点は使用頻度(frecency)で判定**。`@category keywords` で検索を一つのカテゴリーに絞り込み(`@category` 単独でそのカテゴリーを閲覧)。
- **内容**:プレーンテキスト(複数行・特殊文字・絵文字を無損失)、プレースホルダー(デフォルト値 / 選択肢ドロップダウン / スニペットのネスト / 日付カスタム書式 / uuid / random — **スニペットごとに有効化**)、**画像**(クリップボードやファイルから、送信時に画像として貼り付け。**画像にも略語を設定可能** — 略語を打てば画像が出ます)。
- **略語**:終端文字でトリガー、変数入力、ワンプレスで取り消し、Backspace でのタイプミス修正、大文字小文字を区別しない、クリックでトークンを分断、重複警告、アプリごとのブラックリスト、**ワンクリックのトレイ一時停止**。
- **出力**:直接貼り付け / コピーのみ。任意で自動 Enter、クリップボード復元、シングルクリック送信。**スニペットごとの出力上書き**。キャプチャホットキー(クリップボード → スニペットをワンプレスで)。
- **マネージャー**:**広々とした本文エディター**(`⤢ 拡大編集` で専用ウィンドウを開きます。未保存の変更は必ず確認されます —— 閉じるときも、別の項目に切り替えるときも)、**プレースホルダーのハイライト**(種類ごとに色分け。存在しないスニペットへの参照・無効な日付書式・閉じられていない波括弧には赤い波線が表示され、ホバーで理由がわかります。プレースホルダーが無効なときは何もハイライトされず、代わりにステータスバーがそれを伝えます)、**コードに優しい**(拡大ウィンドウは常に行番号を表示し、シンタックスハイライト用に 13 種類のコード形式を選べます。Enter はインデントを保持し、`Tab` は複数行選択をまとめてインデントし、折り返しなしモードも備えます)、7 色のカテゴリー、ドラッグでの並べ替え / 移動、**複数選択での一括移動 / 削除**(Ctrl / Shift で選択して右クリック)、削除の取り消し、**ゴミ箱(30 日間の復元、本文プレビュー付き)**、略語重複の警告、使用統計、保存フィードバック。
- **データ**:ローカル JSON、ホットリロード(外部編集 / 同期を自動マージ)、同期競合の通知、バックアップのエクスポート / インポート、**毎日の自動バックアップ(10 件保持)**、Windows と共に起動。
- **ローカライズ**:**18 の UI 言語**(簡体字 / 繁体字中国語、English、日本語、한국어、Español、Français、Deutsch、Русский、العربية …)で、**アラビア語は右から左へのミラーリング**対応。設定でライブ切り替え。ダーク/ライトテーマ(Windows に追従も可)も同様に即時切り替え。
- **堅牢性**:シングルインスタンス(2 回目の起動はフックを二重にインストールせず検索パネルを呼び出します)。CI は毎回のプッシュでテストとウィンドウのスモークチェックを実行し、`v*` タグで 2 種類の単一ファイルビルドを公開します。
## データと同期
データフォルダー(デフォルト `Documents\QuickText`、設定で変更可能、同期ドライブを指定可能):
```text
/
├─ index.json # category order + each category's file name and color
├─ .json # the snippets in that category (Snippet[])
├─ trash.json # soft-deleted snippets (auto-purged after 30 days)
└─ images/ # image files for image snippets
```
- `Snippet`:`{ id, name, abbr, body, useVariables, outputMode, imagePath?, updatedAt }`。
- **アトミックな書き込み**(`*.tmp` → `File.Replace`)により、同期が書きかけのファイルを読むことはありません。`FileSystemWatcher` によるホットリロード(まとめて処理)、自己書き込みガード付き。
- マシン固有の状態は**同期フォルダーの外**に置かれます:設定は `%APPDATA%\QuickText\settings.json`、使用回数 / お気に入りは `%APPDATA%\QuickText\usage.stats`(送信のたびに変化しマシン間で競合するため)、毎日の自動バックアップは `%APPDATA%\QuickText\backups\`。
- **ポータブルモード**(痕跡なし / USB):**設定 → データ → ポータブルモード**でオンにします — `QuickText.exe` の隣に `QuickText.portable` マーカーを置き、**次回の再起動時に適用**されます(最初のポータブル起動時に設定と使用状況が引き継がれるので、再設定は不要です)。設定・使用状況・バックアップ・デフォルトライブラリは `%APPDATA%` / Documents ではなく `\Data\` 配下に置かれ、「Windows と共に起動」はレジストリではなくスタートアップフォルダーのショートカットを使います — こうしてツール全体を USB スティックに入れて持ち運べ、ホストには何も残しません。アプリは書き込み可能な場所(`Program Files` ではなく USB スティック)に置く必要があります。**テキストライブラリはバックアップのエクスポート / インポートで移動**します。Windows と共に起動はモードごとに管理されるため、切り替え後に必要なら新しいモードで再度チェックしてください。上記のインストール型レイアウトではオフのままにしてください(データフォルダーが同期ドライブの場合はこちらが正解です)。
_(これは単なる設定ではなくマーカーファイルである必要があります — `settings.json` 自体の場所を決めるためです。このスイッチは次回起動時にのみ有効となり、現在のセッションを乱すことはありません。)_
## ブランド
アセットは `assets/branding/` にあります:`quicktext-mark.svg`(メイン)、`quicktext-mark-mono.svg`(モノクロ)、`quicktext.ico`(16–256、アプリ / トレイアイコン)、`quicktext-256.png`、`quicktext-social.png`(1200×630 og:image)、`quicktext-social-2x.png`(2400×1260 @2x)、`brand.html`(ブランドシート)。マークは、ミント色のタイルの上に置かれた**テキストの I ビームキャレット**と、その隣に貼り付いたばかりのテキストのアンバー色のブロック — 「text▮」、つまりカーソル位置にテキストを置くことを表します。パレット「terminal dusk」:ミント(アプリのアクセント `#3DC2A0`)+アンバー `#F2B457` をティール寄りのインクに乗せ、サンセリフのワードマークに Cascadia Code のモノスペースを組み合わせています。
## アーキテクチャ
純粋な Core(Win32 なし、ユニットテスト可能)を Win32 / UI から分離しています。
| プロジェクト | 内容 |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `src/QuickText.Core` | `Models`、`Persistence`(`Store`、`UsageStore`、`JsonConfig`)、`Search`(`SearchIndex`)、`Abbr`(`AbbrMatcher`)、`Snippets`(`Placeholders`)、`Pinyin`、`Settings`、`Localization`(.resx、18 言語) |
| `src/QuickText.App` | WPF UI(`SearchPanel` / `ManagerWindow` / `SettingsWindow` / `AppDialog` / `VariablesDialog`)、`Ui/Theme.xaml`(ダークテーマ)、`Interop`(`GlobalHotkey`、`KeyboardHook`、`PasteEngine`、`Autostart`、`NativeMethods`) |
| `tests/QuickText.Core.Tests` | Core のユニットテスト(xUnit) |
## ビルドと実行
```bash
dotnet build QuickText.sln -c Debug
dotnet test tests/QuickText.Core.Tests/QuickText.Core.Tests.csproj
dotnet run --project src/QuickText.App # or run QuickText.exe under bin
```
単一ファイルのポータブルビルド(win-x64)を公開:
```bash
dotnet publish src/QuickText.App -c Release -p:PublishProfile=win-x64
dotnet publish src/QuickText.App -c Release -p:PublishProfile=win-x64-needs-dotnet10
```
.NET 10 SDK が必要です。Windows のみ(Win32 グローバルホットキー / キーボードフック / クリップボード)。
## ライセンス
[MIT License](../../LICENSE) · Copyright © 2026 rockbenben. 自由に使用・改変・配布できます。
## 365オープンソース計画について
[365オープンソース計画](https://github.com/rockbenben/365opensource) の **#023** 番目のプロジェクト——一人 + AIで、1年に300以上のオープンソースプロジェクトを。
[あなたのアイデアを投稿する →](https://365.aishort.top/) · [Discord](https://discord.gg/PZTQfJ4GjX) · [Telegram](https://t.me/aishort_top)