Tera Term 開発者向け
- 開発環境・ライブラリ
- コンパイラ・ツール
- 使用しているライブラリ
- ビルドする
- 環境構築
- ビルド手順
- ソースコードのチェックアウト
- ライブラリのビルド
- Tera Termのビルド
- TTSSHのビルド
- TTProxyのビルド
- TTXKanjiMenuのビルド
- TTXSamplesのビルド
- TeraTerm Menuのビルド
- CygTerm+のビルド
- ヘルプファイルのビルド
- 開発作業メモ
- TERATERM.INI への項目追加
- メニューID追加時の命名規則
- マクロコマンド追加時の作業リスト
- アイコン
- 言語ファイル編集時の注意
- リリースの手順
- リリース作業の開始からRC作成まで
- RC作成からリリースまで
- リリース作業
- コードフリーズについて
開発環境・ライブラリ
コンパイラ・ツール
Tera Term Project でリリースに使用しているコンパイラは以下の通りです。
Tera Term は以下のコンパイラでもビルドできます。
- Visual Studio Community 2019 (最新版)
注: コンパイルされた実行ファイルは Windows XP, 2000, NT 4.0, 95, 98, Me で動きません。
- Visual Studio Community 2022 (最新版)
注: コンパイルされた実行ファイルは Windows Vista, XP, 2000, NT 4.0, 95, 98, Me で動きません。
ビルドに必要なツールは以下の通りです。
- Perl
以下のいずれか:
ビルド過程で使用します。
- OpenSSL のコンパイル(必須)
- ドキュメントファイルの文字コード・改行コード変換(必須)
- リビジョン番号取得 (perlがない場合リビジョン番号を取得せずにビルドします)
- Subversion
以下のいずれか:
ソースのチェックアウトに使用します。
また、リビジョン番号の取得のために、ソースのチェックアウトに使ったのと互換性のあるバージョンのコマンドライン版が必要です。
- Patch
OpenSSL にパッチを適用するのに使用します。
- HTML Help Compiler
ヘルプの作成に使用します。
- Inno Setup
- Inno Setup 5.6.1 ANSI (http://www.jrsoftware.org/isinfo.php)
- ISTool 5.3.0.1 (https://sourceforge.net/projects/istool/)
インストーラの作成に使用します。
ライブラリ
ビルド
環境構築
- Visual Studio 2005 のインストール
- Visual Studio 2005
- Service Pack 1 (VS80sp1-KB926601-X86-ENU.exe)
- Microsoft Visual Studio 2005 Service Pack 1 MFC セキュリティ更新プログラム (VS80sp1-KB2538218-v2-X86-INTL.exe)
- Windows Vista 以上でビルドする場合は、Visual Studio 2005 Service Pack 1 Update for Windows Vista (VS80sp1-KB932236-X86-JPN.exe)
- Windows SDK 7.0 のインストール
- Cygwin のインストール
必要なパッケージについてはこのページを参照してください。
- Perl をインストールします。
- Subversion をインストールします。
"libs\svn\bin\svnversion.exe", "PATHが通ったところの svnversion" の順で探して見つかった "svnversion" コマンドが使用されます。
PATH の通ったところに "svnversion" がない場合は、libs\svn\bin に "svnversion.exe" が配置されるようにしてください。
- Patch をインストールします。
"libs\openssl_patch\patch.exe", "PATHが通ったところの patch" の順で探して見つかった patch が使用されます。
PATH の通ったところに patch がない場合は、libs\openssl_patch に "patch.exe" が配置されるようにしてください。
https://gitforwindows.org/ (https://github.com/git-for-windows/git/releases/latest) からであれば、Git-x.xx.x-32-bit.tar.bz2 をダウンロードして展開し、usr\bin 内の patch.exe, msys-gcc_s-1.dll, msys-2.0.dll をコピーします。
- HTML Help Compiler のインストール
TBC: Visual Studio (2017 以降) を "C++ MFC" オプションを選択してインストールすると、HTML Help Compiler (hhc.exe) がインストールされます。
- Inno Setup をインストールします。
ビルド手順
ソースコードのチェックアウト
ソースコードをOSDN(http://svn.osdn.net/svnroot/ttssh2/branches/4-stable/)からチェックアウトします。
プロジェクトメンバは svn+ssh://<username>@svn.osdn.net/svnroot/ttssh2/branches/4-stable/ または https://svn.osdn.net/svnroot/ttssh2/branches/4-stable/ からチェックアウトします。
ライブラリのビルド
"Visual Studio 2005 コマンド プロンプト" を立ち上げるか、適切な 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 のバージョン番号を修正する。
- OpenSSL
- openssl のソースを libs/openssl の中に展開する。
注: OpenSSL 1.0.0e 以降で、libs/openssl/Makefile.bak が最初から存在する場合は、一度だけ手動で削除してください。
- buildopenssl11.bat を実行する。*
- Zlib
- zlib のソースを libs/zlib の中に展開する。
- buildzlib.bat を実行する。*
- PuTTY
- PuTTY のソースを libs/putty の中に展開する。
ttssh ソリューション配下の putty プロジェクトにより必要な機能のみが静的ライブラリ化され、ttxssh.dll にリンクされるため、展開するだけでよい。
- The reference C implementation of Argon2
- argon2 のソースを libs/argon2 の中に展開する。
argon2 リファレンス実装には静的ライブラリを生成するプロジェクトファイルが含まれていない。
ttssh ソリューション配下の argon2 プロジェクトにより静的ライブラリが生成され、ttxssh.dll にリンクされるため、展開するだけでよい。
Tera Termのビルド
- teraterm\ttermpro.sln をVisual Studioで開く。
.slnファイルの改行コードが"LF"になっていると、Visual Studioが起動しないので注意願います。
- ソリューションをビルドする。
- ビルドに成功すると teraterm\Debug / teraterm\Release ディレクトリに実行プログラムが生成される。
TTSSHのビルド
あらかじめ teraterm\ttermpro.sln によって ttpcmn.dll (ttpcmn.lib) がビルドされている必要があります。
- ttssh2\ttssh.sln をVisual Studioで開く。
- ソリューションをビルドする。
- ビルドに成功すると ttssh2\ttxssh\Debug / ttssh2\ttxssh\Release ディレクトリにDLLが生成される。
TTProxyのビルド
あらかじめ teraterm\ttermpro.sln によって ttpcmn.dll (ttpcmn.lib) がビルドされている必要があります。
- TTProxy\TTProxy.sln をVisual Studioで開く。
- ソリューションをビルドする。
- ビルドに成功すると TTProxy\Debug / TTProxy\Release ディレクトリにDLLが生成される。
あらかじめ teraterm\ttermpro.sln によって ttpcmn.dll (ttpcmn.lib) がビルドされている必要があります。
- TTXKanjiMenu\ttxkanjimenu.sln をVisual Studioで開く。
- ソリューションをビルドする。
- ビルドに成功すると TTXKanjiMenu\Debug / TTXKanjiMenu\Release ディレクトリに ttxkanjimenu.dll が生成される。
TTXSamplesのビルド
リポジトリのTTXSamplesに Tera Term Extension (TTX)のサンプルがあります。TTXを作る際の参考にしてください。
あらかじめ teraterm\ttermpro.sln によって ttpcmn.dll (ttpcmn.lib) がビルドされている必要があります。
- TTXSamples\TTXSamples.sln をVisual Studioで開く。
- ソリューションをビルドする。
- ビルドに成功すると TTXSamples\Debug / TTXSamples\Release ディレクトリにDLLが生成される。
各TTXの詳細については、プロジェクト内のReadMe-ja.txtを参照してください。
- ttpmenu\ttpmenu.sln をVisual Studioで開く。
- ソリューションをビルドする。
- ビルドに成功すると ttpmenu\Debug / ttpmenu\Release ディレクトリに ttpmenu.exe が生成される。
CygTerm+のビルド
- Cygwinのシェルを起動し、cygterm ディレクトリへ移動する。
# cd cygterm
- CygTerm+をコンパイルする。
# make
- cygterm.exe, cyglaunch.exe が生成される。
ヘルプファイルのビルド
- doc\makechm.bat を実行する。
開発作業メモ
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 画像を含めます。
各アイコンファイルには以下の種類の画像が含まれています。
Visual Studio 2005 は PNG 画像が含まれたアイコンをサポートしていません。
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 | BMP | BMP | BMP | BMP |
teraterm\common\teraterm_classic.ico | TTERM_CLASSIC | BMP | BMP | - | - | - | - |
teraterm\common\teraterm_3d.ico | TTERM_3D | BMP | BMP | BMP | 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 | BMP | BMP | BMP | BMP |
teraterm\common\vt_classic.ico | VT_CLASSIC | BMP | BMP | - | - | - | - |
teraterm\common\vt_3d.ico | VT_3D | BMP | BMP | BMP | 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 | BMP | BMP | BMP | BMP |
teraterm\ttpmacro\ttmacro_3d.ico | - | BMP | BMP | BMP | 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 | flat (Default) | BMP | BMP | BMP | BMP | BMP | BMP |
teraterm\ttpmacro\ttsecure_classic.ico | classic | BMP | BMP | - | - | - | - |
teraterm\ttpmacro\ttsecure_yellow.ico | yellow | BMP | BMP | BMP | BMP | BMP | BMP |
teraterm\ttpmacro\ttsecure_green.ico | green | BMP | BMP | BMP | 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 |
言語ファイル編集時の注意
言語ファイル(installer\release\lang\*.lng)は多言語対応エディタ(vim, EmEditor, Notepad++等)で編集してください。
リリースの手順
TeraTerm Project でのリリース手順について以下に示します。
リリース作業の開始からRC作成まで
- チケット、ブランチなどを確認する
- プロジェクトチーム内で確認する
- 今回のリリースに入れるもの・次回以降に延期するものを整理・決定する
- ブランチをマージする
- trunk と 4-stable 間、作業中のブランチなど
- チケットをクローズする
- すでに修正済み、処理済みのものはクローズする
リリース時には、対象のマイルストーンのチケットはすべてクローズされている状態になる
- 次のリリースへ回すものはマイルストーンを変更する
次のリリース用マイルストーンを作成する
- この時点で新たに出てくるチケットの対応を検討する
- ツール、ライブラリ、インポート元の最新版をチェックする
リリースに使うバージョンはこの時点でおおむね決定する。
- 今回のリリースに入れたいものが落ち着く
RC作成からリリースまで
- ドキュメントを確認する
- ダイアログ上の設定項目・UIのない特別オプション・コマンドラインパラメータ・新規マクロコマンドなど、対応するドキュメントに漏れがないか確認する。
- 変更履歴を確認し、書き忘れがあれば追記する。
- 変更履歴の順番を変更する。だいたいの指針としては、ターミナルエミュレーション関係・アプリケーションとしての変更・マクロの順。
- ドキュメント差分が翻訳されていることを確認し、翻訳忘れがあれば翻訳する。
- バージョンを一つインクリメントする
一般にテストを呼びかけ、旧バージョンとの同時実行が考えられるため、このタイミングとする(例: TT_FILEMAPNAME 定義 など)。
- teraterm\common\tt-version.h
- ttssh2\ttxssh\ttxssh-version.h
- ttpmenu\ttpmenu.rc // 変更時のみ
- TTProxy\TTProxy.rc // 変更時のみ
- TTXKanjiMenu\ttxkanjimenu.rc // 変更時のみ
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\ttpfile\ttpfile-version.rc // VERSIONINFO
- teraterm\ttpmacro\ttm-version.rc // VERSIONINFO
- teraterm\ttpset\ttpset-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
- 64bit Cygwin バイナリを差し替える
前回のリリースから CygTerm+ に変更がある場合は、64bit Cygwinでビルドした cygterm\cygterm+-x86_64\cygterm.exe をコミットする。
ソース修正をコミットするときに、同時にバイナリがコミットされていれば、リリース時にこの工程を行う必要はない。
- インストーラを作成する
- 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 から起動するバッチを、リリース用に「リビルド有効」「アーカイブ作成有効」にする
[_ISToolPreCompile]
Name: makechm.bat
- Name: build.bat
- ;Name: build.bat; Parameters: rebuild
+ ;Name: build.bat
+ Name: build.bat; Parameters: rebuild
[_ISToolPostCompile]
- ;Name: makearchive.bat; Parameters: release
+ Name: makearchive.bat; Parameters: release
- この状態でコミットする
- ISTool で teraterm\installer\teraterm.iss を開き、"Project"-"Compile Setup" でインストーラを作成する
- 作成されたポータブル版を zip で圧縮する
- サポートされている全 OS でインストーラの実行、起動、接続をチェックする
- OSDN のリリース物件に追加する
- 「Tera Term RC」パッケージに新しいリリース(例: "4.106 RC")を追加する
- 新しいリリースに、インストーラ・ポータブル版の zip ファイルを追加する
- RCの作成をアナウンスする
- フィードバックを受け入れる
修正が入ったら再度「ドキュメントを確認する」「サポートされている全 OS で起動・接続チェックする」
リリース作業
- ドキュメントを確認する (詳細は同上)
- リリース日を変更する
- インストーラを作成する
- この状態でコミットする
- 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
- リリース用のタグでチェックアウトし直す
SVN のリビジョン以外のすべてが、開発ブランチと同じ状態になる
- インストーラを作成する
- ISTool で teraterm\installer\teraterm.iss を開き、"Project"-"Compile Setup" で作成する
- 作成されたポータブル版を zip で圧縮する
- OSDN を更新する
- 「Tera Term」パッケージに新しいリリース(例: "4.106")を追加する
- 新しいリリースに、インストーラ・ポータブル版の zip ファイルを追加する
- ドキュメントの変更履歴から、リリースの「変更履歴」に(Wikiフォーマットで)転記する(日本語・英語とも)
- ニュース記事を作成する
- プロジェクトページ (https://ttssh2.osdn.jp) を更新する
更新のしかたは プロジェクトページの更新手順 を参照
- リリースをアナウンスする
- 開発ブランチの teraterm.iss を戻し、コミットする
- ;#define snapshot GetDateTimeString('yyyymmdd_hhnnss', '', '');
+ #define snapshot GetDateTimeString('yyyymmdd_hhnnss', '', '');
[_ISToolPreCompile]
Name: makechm.bat
- ;Name: build.bat
- Name: build.bat; Parameters: rebuild
+ Name: build.bat
+ ;Name: build.bat; Parameters: rebuild
[_ISToolPostCompile]
- Name: makearchive.bat; Parameters: release
+ ;Name: makearchive.bat; Parameters: release
- Chocolatey の登録を更新する
コードフリーズについて
コードフリース中は、原則的には致命的なバグの修正のみ可能となります。
コードフリーズは、RC作成(開発ブランチ で teraterm.iss に RC を付けるコミット)からリリース(開発ブランチの teraterm.iss を戻すコミット)までとします。