Tera Term 開発者向け
- 開発環境・ライブラリ
- コンパイラ・ツール
- 使用しているライブラリ
- ビルドする
- 環境構築
- ビルド手順 (Quick Start)
- ソースコードのチェックアウト
- ビルド
- ビルド手順 (詳説)
- ソースコードの clone
- ライブラリのビルド
- Tera Termのビルド
- TTSSHのビルド
- TTProxyのビルド
- TTXKanjiMenuのビルド
- TTXSamplesのビルド
- TeraTerm Menuのビルド
- CygTerm+のビルド
- Cyglaunchのビルド
- ヘルプファイルのビルド
- インストーラの作成
- 開発作業メモ
- TERATERM.INI への項目追加
- メニューID追加時の命名規則
- マクロコマンド追加時の作業リスト
- アイコン
- リリースの手順
- リリース作業の開始からRC作成まで
- RC作成からリリースまで
- リリース作業
- コードフリーズについて
開発環境・ライブラリ
コンパイラ・ツール
Tera Term Project でリリースに使用しているコンパイラは以下の通りです。
- Visual Studio Community 2022 (最新版) ()
- Cygwin gcc ()
CygTerm+ のビルドに使用します。
ビルドに必要なツールは以下の通りです。
- Perl
以下のいずれか:
- Strawberry Perl 5.30.1.1 以上 ()
- ActivePerl 5.10 以上 () li>
ビルド過程で使用します。
- ドキュメントファイルの文字コード・改行コード変換(必須)
- リビジョン番号取得 (perlがない場合リビジョン番号を取得せずにビルドします)
- Git
ソースの clone に使用します。
コミットハッシュの取得のためにコマンドライン版が必要です。
- HTML Help Compiler
ヘルプの作成に使用します。
- CMake
ファイルのダウンロードや展開や圧縮などに使用します。
- Inno Setup
- Inno Setup 6.2.2 ()
- Inno Script Studio 2.5.1 ()
インストーラの作成に使用します。
ライブラリ
- Oniguruma 6.9.8 ()
Tera Term Macro で正規表現のために使用します。
- SFMT 1.5.1 ()
Tera Term Macro で乱数生成のために使用します。
- LibreSSL 3.7.3 ()
TTSSH で暗号のために使用します。
- zlib 1.3 ()
TTSSH で圧縮のために使用します。
- The reference C implementation of Argon2 20190702 ()
TTSSH で PuTTY の秘密鍵ファイル形式バージョン3 (PPK3) の読み込みに使用します。
- cJSON 1.7.14 ()
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 にコピーし、適宜編集してください。
また、必要であれば buildtools\svnrev\toolinfo_sample.txt を buildtools\svnrev\toolinfo.txt にコピーし、適宜編集してください。
ビルド手順 (Quick Start)
ソースコードのチェックアウト
ソースコードを GitHub (//github.com/TeraTermProject/teraterm) から clone します。
ビルド
installer\release.bat を実行し、3を選択します。
ビルド手順 (詳説)
ソースコードの clone
ソースコードを GitHub (//github.com/TeraTermProject/teraterm) から clone します。
ライブラリのビルド
"x86 Native Tools Command Prompt for VS 2022" を立ち上げるか、適切な PATH を通しておく必要があります。
* の bat を個別に実行するかわりに、libs\buildall.bat を実行することでまとめてビルドすることができます。
- Oniguruma
- oniguruma のソースを libs/oniguruma の中に展開する。
- libs\buildoniguruma6.bat を実行する。*
- SFMT
- SFMT のソースを libs/SFMT の中に展開する。
- libs\buildSFMT.bat を実行する。*
- 必要に応じて libs/SFMT/SFMT_version_for_teraterm.h のバージョン番号を修正する。
- LibreSSL
- LibreSSL のソースを libs/libressl の中に展開する。
- buildlibressl.bat を実行する。*
- Zlib
- zlib のソースを libs/zlib の中に展開する。
- buildzlib.bat を実行する。*
- The reference C implementation of Argon2
- argon2 のソースを libs/argon2 の中に展開する。
argon2 リファレンス実装には静的ライブラリを生成するプロジェクトファイルが含まれていない。
ttssh ソリューション配下の argon2 プロジェクトにより静的ライブラリが生成され、ttxssh.dll にリンクされるため、展開するだけでよい。
- cJSON
- cJSON のソースを libs/cJSON の中に展開する。
Tera Termのビルド
- teraterm\ttermpro.sln をVisual Studioで開く。
.slnファイルの改行コードが"LF"になっていると、Visual Studioが起動しないので注意願います。
- ソリューションをビルドする。
- ビルドに成功すると teraterm\Debug / teraterm\Release ディレクトリに実行プログラムが生成される。
TTSSHのビルド
あらかじめ teraterm\ttermpro.sln によって common_static.lib がビルドされている必要があります。
- ttssh2\ttssh.sln をVisual Studioで開く。
- ソリューションをビルドする。
- ビルドに成功すると ttssh2\ttxssh\Debug / ttssh2\ttxssh\Release ディレクトリにDLLが生成される。
TTProxyのビルド
あらかじめ teraterm\ttermpro.sln によって common_static.lib がビルドされている必要があります。
- TTProxy\TTProxy.sln をVisual Studioで開く。
- ソリューションをビルドする。
- ビルドに成功すると TTProxy\Debug / TTProxy\Release ディレクトリにDLLが生成される。
あらかじめ teraterm\ttermpro.sln によって common_static.lib がビルドされている必要があります。
- TTXKanjiMenu\ttxkanjimenu.sln をVisual Studioで開く。
- ソリューションをビルドする。
- ビルドに成功すると TTXKanjiMenu\Debug / TTXKanjiMenu\Release ディレクトリに ttxkanjimenu.dll が生成される。
TTXSamplesのビルド
リポジトリのTTXSamplesに Tera Term Extension (TTX)のサンプルがあります。TTXを作る際の参考にしてください。
あらかじめ teraterm\ttermpro.sln によって common_static.lib がビルドされている必要があります。
- TTXSamples\TTXSamples.sln をVisual Studioで開く。
- ソリューションをビルドする。
- ビルドに成功すると TTXSamples\Debug / TTXSamples\Release ディレクトリにDLLが生成される。
各TTXの詳細については、プロジェクト内のReadMe-ja.txtを参照してください。
あらかじめ teraterm\ttermpro.sln によって common_static.lib がビルドされている必要があります。
- ttpmenu\ttpmenu.sln をVisual Studioで開く。
- ソリューションをビルドする。
- ビルドに成功すると ttpmenu\Debug / ttpmenu\Release ディレクトリに ttpmenu.exe が生成される。
CygTerm+のビルド
- Cygwinのシェルを起動し、cygterm ディレクトリへ移動する。
# cd cygterm
- CygTerm+をコンパイルする。
# make
- cygterm.exe が生成される。
Cyglaunchのビルド
事前に teraterm\ttermpro.sln の common_static.lib がビルドされている必要があります。
- cygwin\cygwin.sln をVisual Studioで開く。
- ソリューションをビルドする。
- ビルドに成功すると cygwin\Debug / cygwin\Release ディレクトリに cyglaunch.exe が生成される。
ヘルプファイルのビルド
- doc\makechm.bat を実行する。
インストーラの作成
- AppVeyor を使用する場合
-
AppVeyor で "NEW BUILD" を実行します。
内部では installer\release.bat が呼ばれています。
- installer\release.bat を使用する場合
-
installer\release.bat を実行して、インストーラー、zipを作成します。
作成されるファイル名は buildtool\svnrev\sourcetree_info.bat の値から生成されます。このファイルは buildtools\svnrev\svnrev.bat が teraterm\common\tt-version.h などをもとに生成します。
-
installer\release.bat を実行します。
インストーラーは installer\release.bat から呼び出される installer\iscc.bat で作成されます。
- インストーラー、ポータブル版の zip ファイル が installer\Output フォルダに出力されます。
- Inno Script Studio を使う場合
-
RC,リリースを作成する場合は、installer\release.batを使用するほうが便利ですが、
インストーラーのデバグなどInno Script Studioを使用すると便利です。
作成されるファイル名は、インストーラは installer\teraterm.iss の定義により、ポータブル版は buildtool\svnrev\sourcetree_info.bat に書き込まれたものから生成されます。
- Inno Script Studio で installer\teraterm.iss を開き、"Project"-"Compile" でインストーラを作成する
- インストーラーとポータブル版が installer\Output フォルダに出力されます。
- 作成されたポータブル版を zip で圧縮する
開発作業メモ
TERATERM.INI への項目追加
項目名
すでに EnableFoo... や DisableBar... が混在してしまっているが、混乱しやすい。
今後は Baz... という形式にするのが望ましい。
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作成まで
- チケット、ブランチなどを確認する
- プロジェクトチーム内で確認する
- 今回のリリースに入れるもの・次回以降に延期するものを整理・決定する
- ブランチをマージする
- trunk と 4-stable 間、作業中のブランチなど
- チケットをクローズする
- すでに修正済み、処理済みのものはクローズする
リリース時には、対象のマイルストーンのチケットはすべてクローズされている状態になる
- 次のリリースへ回すものはマイルストーンを変更する
次のリリース用マイルストーンを作成する
- この時点で新たに出てくるチケットの対応を検討する
- ツール、ライブラリ、インポート元の最新版をチェックする
- Visual Studio (「更新プログラムの確認」から更新する)
- Inno Setup ()
- Oniguruma ()
- SFMT ()
- LibreSSL ()
- zlib ()
- The reference C implementation of Argon2 ()
- cJSON ()
- Unicode ()
リリースに使うバージョンはこの時点でおおむね決定する。
- 今回のリリースに入れたいものが落ち着く
RC作成からリリースまで
- ドキュメントを確認する
- ダイアログ上の設定項目・UIのない特別オプション・コマンドラインパラメータ・新規マクロコマンドなど、対応するドキュメントに漏れがないか確認する。
- 変更履歴を確認し、書き忘れがあれば追記する。
- 変更履歴の順番を変更する。だいたいの指針としては、ターミナルエミュレーション関係・アプリケーションとしての変更・マクロの順。
- ドキュメント差分が翻訳されていることを確認し、翻訳忘れがあれば翻訳する。
- バージョンをインクリメントする
-
teraterm\common\tt-version.h
TT_VERSION_SUBSTR を "RC" にする
#define TT_VERSION_MAJOR 5
#define TT_VERSION_MINOR 0
- #define TT_VERSION_SUBSTR "dev"
+ #define TT_VERSION_SUBSTR "RC"
TT_VERSION_MINOR は、前回のリリース直後にインクリメントされている。
- ttssh2\ttxssh\ttxssh-version.h
TTSSH_VERSION_MINOR は、前回のリリース直後にインクリメントされている。
- Onttpmenu\ttpmenu.rc // 変更時のみ
- TTProxy\TTProxy.rc // 変更時のみ
- TTXKanjiMenu\ttxkanjimenu.rc // 変更時のみ
-
installer\teraterm.iss
RC に変更し、アーカイブの作成も有効にします。
- #define AppVer "5.0-dev"
+ #define AppVer "5.0-RC"
[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
CygTerm+ は例外で、リリースとは関係なくバージョンが上がる。
修正がコミットされると即リリース扱いになり、リリース日はその日付となる。そのため、修正・バージョンのインクリメント・変更履歴を同時にコミットする。
これはコンパイラの入手が容易なため。
- この年における最初のリリースの場合は、著作権表示の「最後の発行の年」をインクリメントする
- 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
- この状態でコミットする
- インストーラを作成する
- サポートされている全 OS でインストーラの実行、起動、接続をチェックする
- push して AppVeyor でビルドする
- RCの作成をアナウンスする
- フィードバックを受け入れる
修正が入ったら再度「ドキュメントを確認する」「サポートされている全 OS で起動・接続チェックする」
リリース作業
- ドキュメントを確認する (詳細は同上)
- "RC" を削除する
- リリース日を変更する
- インストーラを作成する
ビルド・インストーラの生成がエラーなくできることを確認する。
- この状態でコミットする
- タグを作成する
タグは annotated tags とする。
タグ名は「v(バージョン)」。(例: 5.0ならば "v5.0" )
git tag -a v5.0 -m "Release 5.0"
- インストーラを作成する
- プロジェクトサイトを更新する
- 新しいタグを使って release に追加する
- インストーラとポータブル版の zip ファイルを追加する
- ドキュメントの変更履歴からリリースノートを転記する(日本語・英語とも)
- プロジェクトWebページ (//perthsounds.com) を更新する
更新のしかたは を参照
- リリースをアナウンスする
- バージョンをインクリメントする
-
teraterm/common/tt-version.h
TT_VERSION_MINOR を1つ進めて、SUBSTR を "dev" にする。
#define TT_VERSION_MAJOR 5
- #define TT_VERSION_MINOR 0
- #undef TT_VERSION_SUBSTR
+ #define TT_VERSION_MINOR 1
+ #define TT_VERSION_SUBSTR "dev"
-
ttssh2/ttssh/ttxssh-version.h
TTSSH_VERSION_MINOR を1つ進める。
#define TTSSH_VERSION_MAJOR 3
- #define TTSSH_VERSION_MINOR 0
+ #define TTSSH_VERSION_MINOR 1
-
installer\teraterm.iss
AppVer を「次のバージョン-dev」とする
- #define AppVer "5.0"
+ #define AppVer "5.1-dev"
[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
- Chocolatey の登録を更新する
コードフリーズについて
コードフリース中は、原則的には致命的なバグの修正のみ可能となります。
コードフリーズは、RC作成(開発ブランチ で teraterm.iss に RC を付けるコミット)から(バージョンをインクリメントするコミット)までとします。