2026/01/12(月) [n年前の日記]
#1 [visualstudio][csharp] Visual Studio 2022でビルドするファイルを圧縮
Windows11 x64 25H2 + VisualStudio 2022 Community で C# を使ってGUIアプリ(スクリーンセーバのラッパー)を作っているけれど、自己完結型にするとランタイムも同梱されるせいか、生成された .exe のファイルサイズが100MBを越えてしまう。大き過ぎる。少しは小さくしたい…。
生成されるファイルを圧縮することが可能らしい。
_C#でWindowsフォームアプリのexeにdllを組み込む - Qiita
.csproj の最後のほう、</Project> の前のあたりに以下を追加する。<Choose> - </Choose> を使うと条件を満たした時だけその設定が有効になるそうで、以下の場合は Release時とPublish(公開)時にのみ設定が反映される。らしい。
EnableCompressionInSingleFile を true にすることで圧縮がかかる。らしい。
他の指定の意味は以下。
メモリ上に展開したほうがたぶん速そうだけど、フォームを使っているアプリは動作しなくなったりする時もある、とAI君が言っている。
また、トリミングもすると更にファイルサイズを縮小できるらしいが、不要だと思われる部分を削除しながら処理するそうで、その結果、これまたフォームを使っているアプリなどは動かなくなる場合が多いらしい…。CLIアプリ等ならともかく、GUIアプリならやめておいたほうが良さそう…。
何にせよ、上記の指定で .exe は100MB以上あったのが 48MB ぐらいになってくれた。まだ大き過ぎる気もするけれど、100MB超えよりはマシだろう。
ただ、起動時に少し待たされるようになった。圧縮されているファイルを展開しているからだろうけど…。
生成されるファイルを圧縮することが可能らしい。
_C#でWindowsフォームアプリのexeにdllを組み込む - Qiita
.csproj の最後のほう、</Project> の前のあたりに以下を追加する。<Choose> - </Choose> を使うと条件を満たした時だけその設定が有効になるそうで、以下の場合は Release時とPublish(公開)時にのみ設定が反映される。らしい。
<Choose>
<When Condition="'$(PublishProtocol)' != '' or '$(Configuration)' == 'Release'">
<PropertyGroup>
<PublishSelfContained>true</PublishSelfContained>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>
<EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
<PublishTrimmed>false</PublishTrimmed>
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
</When>
</Choose>
</Project>
EnableCompressionInSingleFile を true にすることで圧縮がかかる。らしい。
他の指定の意味は以下。
- PublishSelfContained : 自己完結型にするかしないか。
- RuntimeIdentifier : プラットフォーム?の指定。
- PublishSingleFile : 1つの .exeファイルにする。
- IncludeAllContentForSelfExtract : 圧縮ファイルをストレージに展開するか、メモリ上に展開するか。
- PublishTrimmed : 不要部分をトリミングするか。
メモリ上に展開したほうがたぶん速そうだけど、フォームを使っているアプリは動作しなくなったりする時もある、とAI君が言っている。
また、トリミングもすると更にファイルサイズを縮小できるらしいが、不要だと思われる部分を削除しながら処理するそうで、その結果、これまたフォームを使っているアプリなどは動かなくなる場合が多いらしい…。CLIアプリ等ならともかく、GUIアプリならやめておいたほうが良さそう…。
何にせよ、上記の指定で .exe は100MB以上あったのが 48MB ぐらいになってくれた。まだ大き過ぎる気もするけれど、100MB超えよりはマシだろう。
ただ、起動時に少し待たされるようになった。圧縮されているファイルを展開しているからだろうけど…。
[ ツッコむ ]
#2 [delphi] Delphi 12を試用
Visual Studio 2022 Community + C# でアプリを作成しているけれど、生成した .exe のファイルサイズが大き過ぎる。100MB以上になるのは厳しい。ファイルサイズを減らせないか。
Google Gemini に「1つの .exe を生成できて、生成される.exeのサイズが小さくて、GUIアプリが作れて、Win32 APIを利用できて、習得が比較的簡単な言語はないか」と尋ねてみたら、「Delphi、Lazarus、Nim、Goあたりはどうか」と言ってきた。
Lazarus は Delphi と同様に Pascal系の言語でアプリを作成できる環境らしい。Windows、Linux も対応しているのだとか。Nim は Python と構文が似ていると言われる言語。Go は Google が発表した言語で、1つの .exe を作りやすいと評判。
Delphi、触ったことないんだよな…。この際少し勉強してみるか…。そんなわけで試用開始。
環境は Windows11 x64 25H2。
Google Gemini に「1つの .exe を生成できて、生成される.exeのサイズが小さくて、GUIアプリが作れて、Win32 APIを利用できて、習得が比較的簡単な言語はないか」と尋ねてみたら、「Delphi、Lazarus、Nim、Goあたりはどうか」と言ってきた。
Lazarus は Delphi と同様に Pascal系の言語でアプリを作成できる環境らしい。Windows、Linux も対応しているのだとか。Nim は Python と構文が似ていると言われる言語。Go は Google が発表した言語で、1つの .exe を作りやすいと評判。
Delphi、触ったことないんだよな…。この際少し勉強してみるか…。そんなわけで試用開始。
環境は Windows11 x64 25H2。
◎ インストール :
Delphi は本来有償製品だけど、昔と違って今現在は無償で利用できる版(Delphi Community Edition)があるらしい。個人利用ならOKらしいので、利用させてもらおう…。
公式サイトからインストーラを入手。入手するにはユーザ登録が必要。自分は昔登録してたのでメールアドレスとパスワードの入力だけで済んだ。
_Delphi Community Edition - エンバカデロ・テクノロジーズ
「Community Editionを無料ダウンロード」と書いてあるリンクをクリックすると入手できる。今回は RADStudio_12_1_esd_61_7529b.exe を入手できた。
実行するとインストーラが起動する。「オプション」を選べばインストール場所を変更できる。デフォルトでは C:\Program Files (x86)\Embarcadero\ にインストールされる。今回は D:\Program Files (x86)\Embarcadero\ にしてみた。
以下で流れが説明されてる。
_『Delphi』をインストールする - 『Delphi』入門 - アトリエ・トリガ 新館
_Delphi 10.4.2 Community Editionをインストール #インストール - Qiita
_[Delphi] - Windows Software Development Kitのインストール|code-224
何をインストールするか選択する画面では、Samples と Help にチェックを入れておいたほうがいいらしい…?
途中でシリアルナンバーの入力を求められる。インストーラをダウンロードする際に登録したメールアドレス宛てに、メール経由でシリアルナンバーが送られてきているのでそれを入力。
また、Windows Software Development Kit なるもののインストールも要求される。
途中でインストーラがフリーズしたかのような状態になったけど、数分待っていたら先に進んでくれた。
インストール後の使用容量は 7.39GBほど。
「Delphiへようこそ」という画面が表示されたけれど、「パッチが利用可能です」と表示されていた。
クリックしたらコマンドプロンプトが開いて、パッチのダウンロードとインストールが始まった。
しかし…。このパッチ、問答無用で C:\Users\(USERNAME)\Documents\Embarcadero\ 以下に 454MB ほどのファイルをダウンロードしてからインストールされた。そこには入れるなや…。ドキュメントフォルダは OneDrive関係で面倒臭いから今後極力使わない/何も入れないつもりで考えてたのに…。これって消しちゃってもいいのだろうか。消したらマズいのだろうか。困るなあ…。
ちなみに、C:\Users\Public\Documents\Embarcadero\ 以下にも色々入っていて、980MBほど入ってた。そっちは OneDrive が握ろうとしないからどうでもいい。
公式サイトからインストーラを入手。入手するにはユーザ登録が必要。自分は昔登録してたのでメールアドレスとパスワードの入力だけで済んだ。
_Delphi Community Edition - エンバカデロ・テクノロジーズ
「Community Editionを無料ダウンロード」と書いてあるリンクをクリックすると入手できる。今回は RADStudio_12_1_esd_61_7529b.exe を入手できた。
実行するとインストーラが起動する。「オプション」を選べばインストール場所を変更できる。デフォルトでは C:\Program Files (x86)\Embarcadero\ にインストールされる。今回は D:\Program Files (x86)\Embarcadero\ にしてみた。
以下で流れが説明されてる。
_『Delphi』をインストールする - 『Delphi』入門 - アトリエ・トリガ 新館
_Delphi 10.4.2 Community Editionをインストール #インストール - Qiita
_[Delphi] - Windows Software Development Kitのインストール|code-224
何をインストールするか選択する画面では、Samples と Help にチェックを入れておいたほうがいいらしい…?
途中でシリアルナンバーの入力を求められる。インストーラをダウンロードする際に登録したメールアドレス宛てに、メール経由でシリアルナンバーが送られてきているのでそれを入力。
また、Windows Software Development Kit なるもののインストールも要求される。
途中でインストーラがフリーズしたかのような状態になったけど、数分待っていたら先に進んでくれた。
インストール後の使用容量は 7.39GBほど。
「Delphiへようこそ」という画面が表示されたけれど、「パッチが利用可能です」と表示されていた。
クリックしたらコマンドプロンプトが開いて、パッチのダウンロードとインストールが始まった。
しかし…。このパッチ、問答無用で C:\Users\(USERNAME)\Documents\Embarcadero\ 以下に 454MB ほどのファイルをダウンロードしてからインストールされた。そこには入れるなや…。ドキュメントフォルダは OneDrive関係で面倒臭いから今後極力使わない/何も入れないつもりで考えてたのに…。これって消しちゃってもいいのだろうか。消したらマズいのだろうか。困るなあ…。
ちなみに、C:\Users\Public\Documents\Embarcadero\ 以下にも色々入っていて、980MBほど入ってた。そっちは OneDrive が握ろうとしないからどうでもいい。
◎ Hello World :
とりあえず、「Windows VCL アプリケーション - Delphi」とやらを選んでプロジェクトを新規作成して、フォームの上にラベル(TLabel)やボタン(TButton)を配置して、実行(F9キー、もしくは再生ボタンっぽいアイコンをクリック)してみた。すんなりウインドウが表示された。
生成された .exe は 4MBほどだった。圧倒的に小さい…! C# で作ると 100MB を超えるのに…! このファイルサイズは魅力的…。
生成された .exe は 4MBほどだった。圧倒的に小さい…! C# で作ると 100MB を超えるのに…! このファイルサイズは魅力的…。
◎ エディタが辛い :
色々試してたら、エディタの動作が妙なことに気づいた。いわゆるフリーカーソルが有効になった状態で…。行末で右キーを押したら次の行の行頭にくるものじゃないのか…。なんでどこまでもカーソルが右に行くのか…。
ググってみたら、これが Delphi だか RAD Studio の売りらしい…。いや、これは不便やろ…。なんでも仮想空間がどうとからしいけど…。
個人的に、この動作は拷問レベル。どうにかできんのか…。
オプションで動作を変えられないかと Google Gemini に尋ねてみたけれど、何度やり取りしても存在しないオプション項目を提示してくる。お前一体何のツールと勘違いしてるんや…。
結局、以下を参考にして、CnPack なるプラグインを入れて対処してみた。
_Delphi 10.2 Community Edition で コードエディタの仮想空間キャレットを無効にする - フリーカーソルの無効化 - Delphi プログラミング | iPentec
_Delphi 10.2 Community Edition に CnPackをインストールする - Delphi プログラミング | iPentec
_CnPack Open Source Projects - Home Page
_CnPack の紹介 | PDF
CnWizards_1.7.1.1311_Nightly.exe を入手して実行。今回は D:\Program Files (x86)\CnPack\ にインストールした。
インストール後に Delphi (RAD Studio) を起動すると、メニューに CnPack という項目が増えていた。
CnPack → Options を選んで、一旦全部の項目を無効にした。項目を選んで、右側の「Enabled」のチェックを外す。
その後、検索欄で「editor」と打って「Editor Enhancements」がリストアップされたら、その項目だけを有効化。
Settingsボタンをクリック → Others、と辿って、以下のチェックを入れた。
以下のような意味だろう…。
これでたしかにフリーカーソルが無効化できた。
と思ったけど、自動インデントがおかしくなる…。もしかすると Delphi (RAD Studio) はフリーカーソルが有効な状態であることを前提にして自動インデントをしているのでは…?
フリーカーソル無効を取るか、自動インデントを取るか。どうしたものか。
ググってみたら、これが Delphi だか RAD Studio の売りらしい…。いや、これは不便やろ…。なんでも仮想空間がどうとからしいけど…。
個人的に、この動作は拷問レベル。どうにかできんのか…。
オプションで動作を変えられないかと Google Gemini に尋ねてみたけれど、何度やり取りしても存在しないオプション項目を提示してくる。お前一体何のツールと勘違いしてるんや…。
結局、以下を参考にして、CnPack なるプラグインを入れて対処してみた。
_Delphi 10.2 Community Edition で コードエディタの仮想空間キャレットを無効にする - フリーカーソルの無効化 - Delphi プログラミング | iPentec
_Delphi 10.2 Community Edition に CnPackをインストールする - Delphi プログラミング | iPentec
_CnPack Open Source Projects - Home Page
_CnPack の紹介 | PDF
CnWizards_1.7.1.1311_Nightly.exe を入手して実行。今回は D:\Program Files (x86)\CnPack\ にインストールした。
インストール後に Delphi (RAD Studio) を起動すると、メニューに CnPack という項目が増えていた。
CnPack → Options を選んで、一旦全部の項目を無効にした。項目を選んで、右側の「Enabled」のチェックを外す。
その後、検索欄で「editor」と打って「Editor Enhancements」がリストアップされたら、その項目だけを有効化。
Settingsボタンをクリック → Others、と辿って、以下のチェックを入れた。
- Keep Cursor Before End of Line.
- Wrap Cursor when Press Left at Line Head.
- Wrap Cursor when Press Right at Line End.
以下のような意味だろう…。
- カーソルを行末前に保持。
- 行頭で左を押すとカーソルを折り返す。
- 行末で右を押すとカーソルを折り返す。
これでたしかにフリーカーソルが無効化できた。
と思ったけど、自動インデントがおかしくなる…。もしかすると Delphi (RAD Studio) はフリーカーソルが有効な状態であることを前提にして自動インデントをしているのでは…?
フリーカーソル無効を取るか、自動インデントを取るか。どうしたものか。
[ ツッコむ ]
以上、1 日分です。