# Tera Term 開発者向け

1. 開発環境・ライブラリ
   1. コンパイラ・ツール
   2. 使用しているライブラリ
2. ビルドする
   1. 環境構築
   2. ビルド手順 (Quick Start)
      1. ソースコードのチェックアウト
      2. ビルド
   3. ビルド手順 (詳説)
      1. ソースコードのチェックアウト
      2. ライブラリのビルド
      3. Tera Termのビルド
      4. TTSSHのビルド
      5. TTProxyのビルド
      6. TTXKanjiMenuのビルド
      7. TTXSamplesのビルド
      8. TeraTerm Menuのビルド
      9. CygTerm+のビルド
      10. Cyglaunchのビルド
      11. ヘルプファイルのビルド
3. 開発作業メモ
   1. TERATERM.INI への項目追加
   2. メニューID追加時の命名規則
   3. マクロコマンド追加時の作業リスト
   4. アイコン
4. リリースの手順
   1. リリース作業の開始からRC作成まで
   2. RC作成からリリースまで
   3. リリース作業
   4. コードフリーズについて

## 開発環境・ライブラリ

### コンパイラ・ツール

Tera Term Project でリリースに使用しているコンパイラは以下の通りです。

- Visual Studio Community 2022 (最新版) (https://visualstudio.microsoft.com/)
- Cygwin gcc (https://www.cygwin.com/)
  CygTerm+ のビルドに使用します。

ビルドに必要なツールは以下の通りです。

- Perl
  以下のいずれか:
  - Strawberry Perl 5.30.1.1 以上 (https://strawberryperl.com/)
  - ActivePerl 5.10 以上 (https://www.activestate.com/products/perl/)
  ビルド過程で使用します。
  - ドキュメントファイルの文字コード・改行コード変換(必須)
  - リビジョン番号取得 (perlがない場合リビジョン番号を取得せずにビルドします)
- Subversion
  以下のいずれか:
  - VisualSVN (https://www.visualsvn.com/downloads/)
  - TortoiseSVN (https://tortoisesvn.net/downloads.html)
  - Subversion for Windows (http://sourceforge.net/projects/win32svn/)
  ソースのチェックアウトに使用します。
  また、リビジョン番号の取得のために、ソースのチェックアウトに使ったのと互換性のあるバージョンのコマンドライン版が必要です。
- HTML Help Compiler
  ヘルプの作成に使用します。
- CMake
  ファイルのダウンロードや展開や圧縮などに使用します。
- Inno Setup
  - Inno Setup 6.2.2 (https://jrsoftware.org/isinfo.php)
  - Inno Script Studio 2.5.1 (https://www.kymoto.org/products/inno-script-studio)
  インストーラの作成に使用します。

### ライブラリ

- Oniguruma 6.9.8 (https://github.com/kkos/oniguruma/)
  Tera Term Macro で正規表現のために使用します。
- SFMT 1.5.1 (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index-jp.html)
  Tera Term Macro で乱数生成のために使用します。
- LibreSSL 3.4.3 (https://www.libressl.org/)
  TTSSH で暗号のために使用します。
- zlib 1.2.13 (https://www.zlib.net/)
  TTSSH で圧縮のために使用します。
- PuTTY 0.76 (https://www.chiark.greenend.org.uk/~sgtatham/putty/)
  TTSSH で Pageant との通信に使用します。
- The reference C implementation of Argon2 20190702 (https://github.com/P-H-C/phc-winner-argon2/)
  TTSSH で PuTTY の秘密鍵ファイル形式バージョン3 (PPK3) の読み込みに使用します。
- cJSON 1.7.14 (https://github.com/DaveGamble/cJSON/)
  TTXCheckUpdate plugin で使用します。

## 開発環境・ライブラリ

### 環境構築

- Visual Studio Community 2022 のインストール
  - C++ によるデスクトップ開発
  - 最新の v143 ビルドツール用 C++ MFC (x86 および x64)
    HTML Help Compiler (hhc.exe) がインストールされます。
- Cygwin のインストール
  CygTerm+ コンパイル専用の Cygwin 環境を構築するには、buildtools\install_cygwin.bat を実行します。
  既存の環境を利用する場合には、こちらを参照してください。
- Perl をインストールします。
- Subversion をインストールします。
- CMake をインストールします。
- Inno Setup をインストールします。

Tera Term をビルドするために上記のツールを新規導入するのではなく、すでにインストール済みのツールを使うこともできます。
installer\release.bat がインストール済みのツールを見つけられない場合は、installer\toolinfo_sample.bat を installer\toolinfo.bat にコピーし、適宜編集してください。

### ビルド手順 (Quick Start)

#### ソースコードのチェックアウト

ソースコードをOSDN(http://svn.osdn.net/svnroot/ttssh2/trunk/)からチェックアウトします。
プロジェクトメンバは svn+ssh://<username>@svn.osdn.net/svnroot/ttssh2/trunk/ または https://svn.osdn.net/svnroot/ttssh2/trunk/ からチェックアウトします。

#### ビルド

installer\release.bat を実行し、3を選択します。

### ビルド手順 (詳説)

#### ソースコードのチェックアウト

ソースコードをOSDN(http://svn.osdn.net/svnroot/ttssh2/trunk/)からチェックアウトします。
プロジェクトメンバは svn+ssh://<username>@svn.osdn.net/svnroot/ttssh2/trunk/ または https://svn.osdn.net/svnroot/ttssh2/trunk/ からチェックアウトします。

#### ライブラリのビルド

"x86 Native Tools Command Prompt for VS 2022" を立ち上げるか、適切な PATH を通しておく必要があります。
* の bat を個別に実行するかわりに、libs\buildall.bat を実行することでまとめてビルドすることができます。

- Oniguruma
  1. oniguruma のソースを libs/oniguruma の中に展開する。
  2. libs\buildoniguruma6.bat を実行する。*
- SFMT
  1. SFMT のソースを libs/SFMT の中に展開する。
  2. libs\buildSFMT.bat を実行する。*
  3. 必要に応じて libs/SFMT/SFMT_version_for_teraterm.h のバージョン番号を修正する。
- LibreSSL
  1. LibreSSL のソースを libs/libressl の中に展開する。
  2. buildlibressl.bat を実行する。*
- Zlib
  1. zlib のソースを libs/zlib の中に展開する。
  2. buildzlib.bat を実行する。*
- PuTTY
  1. PuTTY のソースを libs/putty の中に展開する。
     ttssh ソリューション配下の putty プロジェクトにより必要な機能のみが静的ライブラリ化され、ttxssh.dll にリンクされるため、展開するだけでよい。
- The reference C implementation of Argon2
  1. argon2 のソースを libs/argon2 の中に展開する。
     argon2 リファレンス実装には静的ライブラリを生成するプロジェクトファイルが含まれていない。
     ttssh ソリューション配下の argon2 プロジェクトにより静的ライブラリが生成され、ttxssh.dll にリンクされるため、展開するだけでよい。
- cJSON
  1. cJSON のソースを libs/cJSON の中に展開する。

#### Tera Termのビルド

1. teraterm\ttermpro.sln をVisual Studioで開く。
   .slnファイルの改行コードが"LF"になっていると、Visual Studioが起動しないので注意願います。
2. ソリューションをビルドする。
3. ビルドに成功すると teraterm\Debug / teraterm\Release ディレクトリに実行プログラムが生成される。

#### TTSSHのビルド

あらかじめ teraterm\ttermpro.sln によって common_static.lib がビルドされている必要があります。

1. ttssh2\ttssh.sln をVisual Studioで開く。
2. ソリューションをビルドする。
3. ビルドに成功すると ttssh2\ttxssh\Debug / ttssh2\ttxssh\Release ディレクトリにDLLが生成される。

#### TTProxyのビルド

あらかじめ teraterm\ttermpro.sln によって common_static.lib がビルドされている必要があります。

1. TTProxy\TTProxy.sln をVisual Studioで開く。
2. ソリューションをビルドする。
3. ビルドに成功すると TTProxy\Debug / TTProxy\Release ディレクトリにDLLが生成される。

#### TTXKanjiMenuのビルド

あらかじめ teraterm\ttermpro.sln によって common_static.lib がビルドされている必要があります。

1. TTXKanjiMenu\ttxkanjimenu.sln をVisual Studioで開く。
2. ソリューションをビルドする。
3. ビルドに成功すると TTXKanjiMenu\Debug / TTXKanjiMenu\Release ディレクトリに ttxkanjimenu.dll が生成される。

#### TTXSamplesのビルド

リポジトリのTTXSamplesに Tera Term Extension (TTX)のサンプルがあります。TTXを作る際の参考にしてください。

あらかじめ teraterm\ttermpro.sln によって common_static.lib がビルドされている必要があります。

1. TTXSamples\TTXSamples.sln をVisual Studioで開く。
2. ソリューションをビルドする。
3. ビルドに成功すると TTXSamples\Debug / TTXSamples\Release ディレクトリにDLLが生成される。

各TTXの詳細については、プロジェクト内のReadMe-ja.txtを参照してください。

#### TeraTerm Menuのビルド

あらかじめ teraterm\ttermpro.sln によって common_static.lib がビルドされている必要があります。

1. ttpmenu\ttpmenu.sln をVisual Studioで開く。
2. ソリューションをビルドする。
3. ビルドに成功すると ttpmenu\Debug / ttpmenu\Release ディレクトリに ttpmenu.exe が生成される。

#### CygTerm+のビルド

1. Cygwinのシェルを起動し、cygterm ディレクトリへ移動する。

       # cd cygterm

2. CygTerm+をコンパイルする。

       # make

3. cygterm.exe が生成される。

#### Cyglaunchのビルド

事前に teraterm\ttermpro.sln の common_static.lib がビルドされている必要があります。

1. cygwin\cygwin.sln をVisual Studioで開く。
2. ソリューションをビルドする。
3. ビルドに成功すると cygwin\Debug / cygwin\Release ディレクトリに cyglaunch.exe が生成される。

#### ヘルプファイルのビルド

1. doc\makechm.bat を実行する。

## 開発作業メモ

### TERATERM.INI への項目追加

項目名
すでに EnableFoo... や DisableBar... が混在してしまっているが、混乱しやすい。
今後は Baz... という形式にするのが望ましい。

### メニューID追加時の命名規則

    1桁目は 5

    2桁目は
      Tera Term VT ウィンドウなら  0
      Tera Term TEK ウィンドウなら 1
      TTSSH なら                   2
      TTProxy なら                 3
      TTXKanjiMenu なら            4

    3桁目は
      [File] メニューなら    1
      [Edit] メニューなら    2
      [Setup] メニューなら   3
      [Control] メニューなら 4
      [Window] メニューなら  8
      [Help] メニューなら    9

例：File配下にTTSSHのメニューを追加する

    #define ID_SSHSCPMENU       52110

### マクロコマンド追加時の作業リスト

Tera Termマクロを新設するときの作業手順について、以下に示します。

- ソースコードの修正
  - コマンドの内部 ID を採番する。（「内部 ID」は"helpid.h"にも使用される）
    ... teraterm/ttmacro/ttmparse.h
  - コマンド名を走査して内部 ID に変換する。
    ... CheckReservedWord@teraterm/ttmacro/ttmparse.c
  - コマンドの内部 ID から実際に処理をする関数を呼ぶ。
    ... ExecCmnd@teraterm/ttmacro/ttl.c
  - 処理する関数を作る。
- ヘルプ(言語ごと)
  - コマンドのヘルプを作る。
    ... doc/LANG/html/macro/command/hogefunc.html
  - コマンド一覧ページに追加する。
    ... doc/LANG/html/macro/command/index.html
  - ヘルプトピックに追加する。
    ... doc/LANG/teraterm.hhc
  - ヘルプページのコンテキスト ID を採番する。
    値は コマンドの内部 ID + 92000。
    ... teraterm/common/helpid.h
  - コンテキスト ID と呼び出すファイルのエイリアスを作成する。
    テキストエディタで直接開き、[ALIAS]にHTMLを追加する。
    ... doc/LANG/teraterm.hhp

### アイコン

アイコンファイルには、4bit の 32px, 16px 画像、32bit の 256px, 48px, 32px, 16px 画像を含めます。
各アイコンファイルには以下の種類の画像が含まれています。

T (Tera Term)

icon file | icon name | 4bit 32px | 4bit 16px | 32bit 256px | 32bit 48px | 32bit 32px | 32bit 16px
--- | --- | --- | --- | --- | --- | --- | ---
teraterm\common\teraterm.ico | TTERM (Default) | BMP | BMP | PNG | BMP | BMP | BMP
teraterm\common\teraterm_classic.ico | TTERM_CLASSIC | BMP | BMP | - | - | - | -
teraterm\common\teraterm_3d.ico | TTERM_3D | BMP | BMP | PNG | BMP | BMP | BMP
teraterm\common\teraterm_flat.ico | TTERM_FLAT | BMP | BMP | PNG | BMP | BMP | BMP

VT (VT Window)

icon file | icon name | 4bit 32px | 4bit 16px | 32bit 256px | 32bit 48px | 32bit 32px | 32bit 16px
--- | --- | --- | --- | --- | --- | --- | ---
teraterm\common\vt.ico | VT (Default) | BMP | BMP | PNG | BMP | BMP | BMP
teraterm\common\vt_classic.ico | VT_CLASSIC | BMP | BMP | - | - | - | -
teraterm\common\vt_3d.ico | VT_3D | BMP | BMP | PNG | BMP | BMP | BMP
teraterm\common\vt_flat.ico | VT_FLAT | BMP | BMP | PNG | BMP | BMP | BMP

TEK (TEK Windows)

icon file | icon name | 4bit 32px | 4bit 16px | 32bit 256px | 32bit 48px | 32bit 32px | 32bit 16px
--- | --- | --- | --- | --- | --- | --- | ---
teraterm\common\tek.ico | TEK | BMP | BMP | - | - | - | -

M (Macro)

icon file | icon name | 4bit 32px | 4bit 16px | 32bit 256px | 32bit 48px | 32bit 32px | 32bit 16px
--- | --- | --- | --- | --- | --- | --- | ---
teraterm\ttpmacro\ttmacro.ico | - | BMP | BMP | PNG | BMP | BMP | BMP
teraterm\ttpmacro\ttmacro_3d.ico | - | BMP | BMP | PNG | BMP | BMP | BMP
teraterm\ttpmacro\ttmacro_flat.ico | - | BMP | BMP | PNG | BMP | BMP | BMP

MF (Macro File)

icon file | icon name | 4bit 32px | 4bit 16px | 32bit 256px | 32bit 48px | 32bit 32px | 32bit 16px
--- | --- | --- | --- | --- | --- | --- | ---
teraterm\ttpmacro\ttmacrof.ico | - | BMP | BMP | PNG | BMP | BMP | BMP

keycode

icon file | icon name | 4bit 32px | 4bit 16px | 32bit 256px | 32bit 48px | 32bit 32px | 32bit 16px
--- | --- | --- | --- | --- | --- | --- | ---
teraterm\keycode\keycode.ico | - | BMP | BMP | - | BMP | - | -

TTSSH

icon file | icon name | 4bit 32px | 4bit 16px | 32bit 256px | 32bit 48px | 32bit 32px | 32bit 16px
--- | --- | --- | --- | --- | --- | --- | ---
teraterm\ttpmacro\ttsecure.ico | flat2 (Default) | BMP | BMP | PNG | BMP | BMP | BMP
teraterm\ttpmacro\ttsecure_classic.ico | classic | BMP | BMP | - | - | - | -
teraterm\ttpmacro\ttsecure_yellow.ico | yellow | BMP | BMP | PNG | BMP | BMP | BMP
teraterm\ttpmacro\ttsecure_green.ico | green | BMP | BMP | PNG | BMP | BMP | BMP
teraterm\ttpmacro\ttsecure_flat.ico | flat | BMP | BMP | PNG | BMP | BMP | BMP

TeraTerm Menu

icon file | icon name | 4bit 32px | 4bit 16px | 32bit 256px | 32bit 48px | 32bit 32px | 32bit 16px
--- | --- | --- | --- | --- | --- | --- | ---
ttpmenu\teraterm.ico | - | BMP | BMP | - | BMP | BMP | BMP

Cygterm+

icon file | icon name | 4bit 32px | 4bit 16px | 32bit 256px | 32bit 48px | 32bit 32px | 32bit 16px
--- | --- | --- | --- | --- | --- | --- | ---
cygwin\cygterm\cygterm.ico | CYGTERM | BMP | BMP | - | BMP | BMP | BMP

アイコンファイルへの画像の格納順は「ビット数が小さい順、サイズが大きい順」とします。
そうでないと、プログラムがサイズを指定せずに「最大サイズの画像」を取得しようとしたときに「最初の画像」が取り出されるためです。

アイコンファイルには 4bit 画像を含めます。
Windows NT 4.0 は 4bit アイコンのみサポートしているためです。また、Windows 2000 の通知領域も 4bit アイコンのみサポートしています。
4bit アイコンには以下の色が使用できます。

| #000000 | (0,0,0)
| #800000 | (128,0,0)
| #ff0000 | (255,0,0)
| #ff00ff | (255,0,255)
| #008080 | (0,128,128)
| #008000 | (0,128,0)
| #00ff00 | (0,255,0)
| #00ffff | (0,255,255)
| #000080 | (0,0,128)
| #800080 | (128,0,128)
| #0000ff | (0,0,255)
| #c0c0c0 | (192,192,192)
| #808080 | (128,128,128)
| #808000 | (128,128,0)
| #ffff00 | (255,255,0)
| #ffffff | 255,255,255

アイコン用画像のソースファイルは以下に格納されています。

source file | bit | T | VT | Macro | SSH | Cygwin
--- | --- | --- | --- | --- | --- | ---
teraterm\common\flat_icon_16.psd | 4bit | v | v | v | v | v
32bit | v | v | v | v | v
teraterm\common\flat_icon_32.psd | 4bit | v | v | v | v | v
32bit | v | v | v | v | v
teraterm\common\flat_icon_48.psd | 32bit | v | v | v | v | v
teraterm\common\flat_icon_256.psd | 32bit | v | v | v | v | -

source file | bit | Keycode
--- | --- | ---
teraterm\common\keycode_48.psd | 4bit | v

source file | bit | T | VT | Macro | Macro File | SSH | Cygwin
--- | --- | --- | --- | --- | --- | --- | ---
teraterm\common\flat2_icon_16.psd | 4bit | v | v | v | v | v | v
32bit | v | v | v | v | v | v
teraterm\common\flat2_icon_32.psd | 4bit | v | v | v | v | v | v
32bit | v | v | v | v | v | v
teraterm\common\flat2_icon_48.psd | 32bit | v | v | v | v | v | v
teraterm\common\flat2_icon_256.psd | 32bit | v | v | v | v | v | -

## リリースの手順

TeraTerm Project でのリリース手順について以下に示します。

### リリース作業の開始からRC作成まで

1. チケット、ブランチなどを確認する
   - プロジェクトチーム内で確認する
     - 今回のリリースに入れるもの・次回以降に延期するものを整理・決定する
   - ブランチをマージする
     - trunk と 4-stable 間、作業中のブランチなど
   - チケットをクローズする
     - すでに修正済み、処理済みのものはクローズする
       リリース時には、対象のマイルストーンのチケットはすべてクローズされている状態になる
     - 次のリリースへ回すものはマイルストーンを変更する
       次のリリース用マイルストーンを作成する
   - この時点で新たに出てくるチケットの対応を検討する
2. ツール、ライブラリ、インポート元の最新版をチェックする
   - Visual Studio (「更新プログラムの確認」から更新する)
   - Inno Setup (https://jrsoftware.org/isdl.php)
   - Oniguruma (https://github.com/kkos/oniguruma/)
   - SFMT (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index-jp.html)
   - LibreSSL (https://www.libressl.org/)
   - zlib (http://www.zlib.net/)
   - PuTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/)
   - The reference C implementation of Argon2 (https://github.com/P-H-C/phc-winner-argon2/)
   - cJSON (https://github.com/DaveGamble/cJSON/)
   - Unicode (https://www.unicode.org/versions/latest/)

   リリースに使うバージョンはこの時点でおおむね決定する。

3. 今回のリリースに入れたいものが落ち着く

### RC作成からリリースまで

1. ドキュメントを確認する
   - ダイアログ上の設定項目・UIのない特別オプション・コマンドラインパラメータ・新規マクロコマンドなど、対応するドキュメントに漏れがないか確認する。
   - 変更履歴を確認し、書き忘れがあれば追記する。
   - 変更履歴の順番を変更する。だいたいの指針としては、ターミナルエミュレーション関係・アプリケーションとしての変更・マクロの順。
   - ドキュメント差分が翻訳されていることを確認し、翻訳忘れがあれば翻訳する。
2. バージョンを一つインクリメントする

   一般にテストを呼びかけ、旧バージョンとの同時実行が考えられるため、このタイミングとする。

   - teraterm\common\tt-version.h
   - ttssh2\ttxssh\ttxssh-version.h
   - Onttpmenu\ttpmenu.rc // 変更時のみ
   - TTProxy\TTProxy.rc // 変更時のみ
   - TTXKanjiMenu\ttxkanjimenu.rc // 変更時のみ

   CygTerm+ は例外で、リリースとは関係なくバージョンが上がる。
   修正がコミットされると即リリース扱いになり、リリース日はその日付となる。そのため、修正・バージョンのインクリメント・変更履歴を同時にコミットする。
   これはコンパイラの入手が容易なため。

3. この年における最初のリリースの場合は、著作権表示の「最後の発行の年」をインクリメントする
   - teraterm\keycode\keycode-version.rc // VERSIONINFO
   - teraterm\teraterm\tt-version.rc // VERSIONINFO
   - teraterm\ttpcmn\ttpcmn-version.rc // VERSIONINFO
   - teraterm\ttpdlg\ttpdlg.rc // dialog
   - teraterm\ttpmacro\ttm-version.rc // VERSIONINFO
   - teraterm\ttptek\ttptek-version.rc // VERSIONINFO
   - ttssh2\ttxssh\ttxssh.rc // dialog
   - ttssh2\ttxssh\ttxssh-version.rc // VERSIONINFO
   - ttpmenu\ttpmenu.rc // dialog, VERSIONINFO
   - TTProxy\TTProxy.rc // dialog, VERSIONINFO(en), VERSIONINFO(ja)
   - TTXKanjiMenu\ttxkanjimenu.rc // VERSIONINFO
   - installer\teraterm.iss
   - installer\release\license.txt // Tera Term, TTSSH, Cygterm+, TTProxy, TeraTerm Menu, TTX KanjiMenu
   - doc\en\html\index.html
   - doc\en\html\about\copyright.html // Tera Term, TTSSH, Cygterm+, TTProxy, TeraTerm Menu, TTX KanjiMenu
   - doc\en\html\macro\index.html
   - doc\ja\html\index.html
   - doc\ja\html\about\copyright.html // Tera Term, TTSSH, Cygterm+, TTProxy, TeraTerm Menu, TTX KanjiMenu
   - doc\ja\html\macro\index.html
4. 64bit Cygwin バイナリを差し替える

   前回のリリースから CygTerm+ に変更がある場合は、64bit Cygwinでビルドした cygterm\cygterm+-x86_64\cygterm.exe をコミットする。
   ソース修正をコミットするときに、同時にバイナリがコミットされていれば、リリース時にこの工程を行う必要はない。

5. インストーラを作成する
   - teraterm.iss の AppVer を「次のバージョン-RC」とする

         - #define AppVer "4.105"
         + #define AppVer "4.106-RC1"

   - teraterm.iss の snapshot をコメントアウトする

         - #define snapshot GetDateTimeString('yyyymmdd_hhnnss', '', '');
         + ;#define snapshot GetDateTimeString('yyyymmdd_hhnnss', '', '');

   - teraterm.iss から起動するバッチを、リリース用に「リビルド有効」「アーカイブ作成有効」にする

           [PreCompile]
           Name: makechm.bat
         - Name: build.bat
         - ;Name: build.bat; Parameters: rebuild
         + ;Name: build.bat
         + Name: build.bat; Parameters: rebuild

           [PostCompile]
         - ;Name: makearchive.bat; Parameters: release
         + Name: makearchive.bat; Parameters: release

   - この状態でコミットする
   - Inno Script Studio で teraterm\installer\teraterm.iss を開き、"Project"-"Compile" でインストーラを作成する
   - 作成されたポータブル版を zip で圧縮する
6. サポートされている全 OS でインストーラの実行、起動、接続をチェックする
7. OSDN のリリース物件に追加する
   - 「Tera Term RC」パッケージに新しいリリース（例: "4.106 RC"）を追加する
   - 新しいリリースに、インストーラ・ポータブル版の zip ファイルを追加する
8. RCの作成をアナウンスする
   - ttssh2-users メーリングリスト
   - Twitter (https://twitter.com/Tera_Term)
9. フィードバックを受け入れる

   修正が入ったら再度「ドキュメントを確認する」「サポートされている全 OS で起動・接続チェックする」

### リリース作業

1. ドキュメントを確認する (詳細は同上)
2. リリース日を変更する
   - html/about/hisotry.html
3. インストーラを作成する
   - teraterm.iss の AppVer を変更する

         - #define AppVer "4.106-RC1"
         + #define AppVer "4.106"

   - ISTool で teraterm\installer\teraterm.iss を開き、"Project"-"Compile Setup" で作成する
4. この状態でコミットする
5. SVN のタグを作成する
   タグ名は「teraterm-バージョン」。（例: v4.106ならば"teraterm-4_106"）

       svn copy -m "Release 4.106" \
           svn+ssh://svn.osdn.net/svnroot/ttssh2/branches/4-stable \
           svn+ssh://svn.osdn.net/svnroot/ttssh2/tags/teraterm-4_106

6. リリース用のタグでチェックアウトし直す

   SVN のリビジョン以外のすべてが、開発ブランチと同じ状態になる

7. インストーラを作成する
   - Inno Script Studio で teraterm\installer\teraterm.iss を開き、"Project"-"Compile" で作成する
   - 作成されたポータブル版を zip で圧縮する
8. OSDN を更新する
   - 「Tera Term」パッケージに新しいリリース（例: "4.106"）を追加する
   - 新しいリリースに、インストーラ・ポータブル版の zip ファイルを追加する
   - ドキュメントの変更履歴から、リリースの「変更履歴」に（Wikiフォーマットで）転記する（日本語・英語とも）
   - ニュース記事を作成する
9. プロジェクトページ (https://ttssh2.osdn.jp) を更新する

   更新のしかたは プロジェクトページの更新手順 を参照

10. リリースをアナウンスする
    - ttssh2-users メーリングリスト
    - Twitter (https://twitter.com/Tera_Term)
      - リリースアナウンスのツイートを固定ツイートにする
11. 開発ブランチの teraterm.iss を戻し、コミットする

        - ;#define snapshot GetDateTimeString('yyyymmdd_hhnnss', '', '');
        + #define snapshot GetDateTimeString('yyyymmdd_hhnnss', '', '');

          [PreCompile]
          Name: makechm.bat
        - ;Name: build.bat
        - Name: build.bat; Parameters: rebuild
        + Name: build.bat
        + ;Name: build.bat; Parameters: rebuild

          [PostCompile]
        - Name: makearchive.bat; Parameters: release
        + ;Name: makearchive.bat; Parameters: release

12. Chocolatey の登録を更新する

### コードフリーズについて

コードフリース中は、原則的には致命的なバグの修正のみ可能となります。
コードフリーズは、RC作成（開発ブランチ で teraterm.iss に RC を付けるコミット）からリリース（開発ブランチの teraterm.iss を戻すコミット）までとします。