普段から使っているパスワード管理ソフト「KeePass」。
オープンソースで公開されていることは知っていたけれど、
せっかくなので 自分用 KeePass をソースからビルドしてみよう と思い立った。
目的はふたつ。
ひとつは「自分専用ビルドを使ってみたい」という興味。
もうひとつは「オープンソースの構成やプロジェクトの作り方を学ぶ」ため。
Visual Studio でソースを開いてみると、
フォルダがずらっと並んでいて「どれが本体?」という状態。
今回はそのフォルダ構成と、それぞれの役割をまとめておく。
目次
KeePass ソースコードの全体構成
ダウンロードした ZIP(例:KeePass-2.59-Source.zip)を展開すると、
だいたい次のようなフォルダ構成になっている。
最初に迷うのは「どのソリューションを開けばいいのか?」という点だと思う。
結論から言うと、最新版(.NET Framework 4.8)を使うなら Build\KeePass_N48.sln を開けばOK。
各フォルダの意味と役割
| フォルダ | 内容・目的 |
|---|---|
| KeePass | KeePass 本体(C#)。ここから最終的に KeePass.exe が生成される |
| KeePassLib | コアライブラリ。暗号化、データ管理、設定処理など KeePass の基礎部分 |
| KeePassLibN | ネイティブ(C++)で書かれた暗号高速化 DLL。なくても動くがあると高速 |
| ShInstUtil | Shell Installation Utility。Windows の右クリック統合やアンインストール補助 |
| Ext | 付属ツール(例:KeePassMsi, TrlUtil など) |
| Translation | 翻訳用ファイルや翻訳ツールのソース |
| Build | Visual Studio のソリューション(.sln)がまとめて置かれているフォルダ |
KeePass_N48.sln に含まれるプロジェクト
KeePass_N48.sln を Visual Studio 2022 で開くと、
次の3つの C# プロジェクトが含まれている。
| プロジェクト名 | 言語 | 役割 |
|---|---|---|
| KeePass_N48 | C# | KeePass 本体 (KeePass.exe) |
| KeePassLib_N48 | C# | コアライブラリ (KeePassLib.dll) |
| TrlUtil_N48 | C# | 翻訳ユーティリティ (TrlUtil.exe) |
これだけで KeePass 本体をビルドできる。KeePassLibN や ShInstUtil は補助的なプロジェクトで、後からビルドして追加してもOK。
他のソリューションとの違い
| ソリューション | 対応環境 | 備考 |
|---|---|---|
KeePass.sln |
.NET 2.0〜3.0 時代 | XP世代互換の古い構成 |
KeePass_N35.sln |
.NET Framework 3.5 用 | 旧環境向けビルド |
KeePass_N48.sln |
.NET Framework 4.8 用 | 最新環境対応・推奨構成 |
補足メモ:それぞれの補助プロジェクト
KeePassLibN(C++)
暗号処理を高速化する DLL(KeePassLibN.dll)。
C++で書かれており、無くても動くがビルドすればパフォーマンスが向上する。
ShInstUtil(C++)
シェル統合用ツール。
右クリックメニューへの登録などを行うが、通常利用では不要。ShInstUtil.sln または ShInstUtil.vcproj を直接開いてビルドできる。
Ext / Translation
Ext\TrlUtil や Translation\TrlUtil は翻訳ツール関連。
KeePass 本体を翻訳・多言語化する際に利用される。
ビルドの流れ(自分用メモ)
-
Visual Studio 2022 を起動
-
Build\KeePass_N48.slnを開く -
構成を「Release / Any CPU」に設定
-
メニュー → [ビルド] → [ソリューションのビルド]
-
KeePass\bin\Release\KeePass.exeが生成されれば成功
実際にやってみた感想
最初はフォルダが多くて「どこから触ればいいの?」という感じだったが、
中身を見ていくうちに「このライブラリがこう繋がっているのか」と理解できてくる。
単にツールとして使うだけでなく、
オープンソースの構造やプロジェクト設計を学ぶ教材としても KeePass はとても良い例だと思う。
コメントも多く読みやすいので、C# の学習素材としてもおすすめ。
まとめ
| 要点 | 内容 |
|---|---|
| 開くソリューション | Build\KeePass_N48.sln |
| 必要プロジェクト | KeePass_N48 / KeePassLib_N48 / TrlUtil_N48 |
| 出力 | KeePass\bin\Release\KeePass.exe |
| 他のフォルダ | 拡張・高速化・翻訳関連(なくても動作) |
| 学べること | C# の構造化・ライブラリ分離・ソフト設計の基礎 |
👉 続編はこちら:KeePass をビルドしたら sgen.exe でエラーになった話