レジストリと ini ファイルについて考えるページ

更新日:2001/11/25   >> 更新履歴
 アプリケーションの設定などを保存するために、Microsoftはレジストリの使用を推奨しています。 ところがプログラマ、ユーザの両方が、必ずしもレジストリの使用が最良であると考えているわけではないようです。 そこで某BBS(※1)でのプログラマ、ユーザの意見をまとめてみました。
 
※1
  • readme.txtにアンインストール情報を!
       http://pc.2ch.net/test/read.cgi/prog/997370579/l50
  • レジストリ vs プライベートINI
       http://pc.2ch.net/test/read.cgi/software/1006419607/l50

  • 以下のような書式で掲載しています。
    *-** (タイトル)
    概要 (利点の概要)
    代替策 (タイトルがレジストリの利点ならiniファイルでの代替策、タイトルがiniファイルの利点ならレジストリでの代替策)
    関連する意見 (某BBSでの実際の書き込みから)



    レジストリの利点
    R-01マルチユーザへの対応が簡単
    R-0264KB以上保存できる
    R-03テキスト以外の形式で保存できる
    R-04初心者が設定をいじりにくい
    R-05動作が速い

    iniファイルの利点
    I-01設定の移動が簡単
    I-02アンインストールが簡単
    I-03レジストリが肥大化しない
    I-04Windows再起動時にレジストリエラーが発生しても更新情報が維持される

    その他
    O-01レジストリとiniファイルの切り替え式
    O-02別の設定を適用する



    レジストリの利点

    R-01 マルチユーザへの対応が簡単
    概要 プログラマはユーザごとの設定を HKEY_CURRENT_USER\Software\hoge に保存するだけでマルチユーザへの対応ができる。
    代替策 プログラマがユーザごとに別名のiniファイルを作る。またはユーザ別フォルダにiniファイルを作る。 もしくは、ユーザがアプリケーションをユーザ別フォルダにインストールする。
    関連する意見 > 今までそのような環境を考慮したことないんだけど。
    > やるならログインユーザフォルダの下にiniファイルを置くかな。

    > 家族一人一人でログインユーザ作ってるから、
    > マルチユーザに対応してないINIは使いにくい。
    > INIでも Special Launch とか シン覚え書 なんかは
    > マルチユーザ対応してるのでいい。

    R-02 64KB以上保存できる
    概要 一つのiniファイルには64KBまでしか記録できないが、レジストリにはその制限がない。
    代替策 iniファイルを分割する。または独自の形式で保存する。
    関連する意見 > INIで容量制限が問題になるほどの大きいデータをレジストリに置くなよ、と思う。
    > それこそファイル(INIじゃない)にするべき。

    R-03 テキスト以外の形式で保存できる
    概要 データをREG_DWORDやREG_BINARYなど、文字列以外の形式で保存できる。 関連して、ユーザはレジストリエディタでデータの型を変更できる。
    代替策 独自の形式で保存する。
    関連する意見 -

    R-04 初心者が設定をいじりにくい
    概要 レジストリ値を変更するにはレジストリエディタの操作が必要なので、初心者が設定を変更しにくい。 iniファイルの場合はメモ帳で簡単に開いてしまうので、レジストリに比べて誤編集や誤って削除、移動してしまいやすくなる。
    代替策 初心者がダブルクリックしただけでは開けないように独自の形式で保存する。
    関連する意見 > 逆に言えば、INIファイルをダブルクリックするだけで、初心者でも編集ができる。
    > 設定ファイルというのは、本来、そういうものだと思っている。
    > そもそも、設定をちょっと変な風にいじられただけで、動作がおかしくなるような
    > 脆弱な実装の方に問題がある。そういうコアな設定はバイナリにするとか。

    R-05 動作が速い
    概要 設定項目の多いアプリケーションなどでは体感できるほどにレジストリを使った方が速くなる。
    代替策 -
    関連する意見 > 以前実測したんだけどGetProfile系は遅いです。
    > 数10Kサイズならベタ書きした方が圧倒的に速いです。

    > 書き込みは、はっきりレジストリより遅いですよ。


    iniファイルの利点

    I-01 設定の移動が簡単
    概要 ユーザはiniファイルを移動するだけで設定の移動が簡単にできる。そのためOSを再インストールしたときなどの復旧や、 PC間、ユーザ間の同期が楽。
    代替策 ユーザがレジストリエディタでレジストリキーを書き出す。またはプログラマがそのためのバッチファイルを用意したり アプリケーションに設定のエクスポート/インポート機能をつける。
    関連する意見 > フロッピーに入る程度のソフトなら、出先で使えるINIの方がありがたい。

    > レジストリ + INIのような設定の簡易移動
    > だと良さそうでは?レジストリ設定のインポート・エクスポート機能。
    > これの逆で
    > INI + マルチユーザ対応、64KBの壁、文字列以外の記録、etc
    > は大変なので。

    > レジストリもバッチファイル作っとけば保存・復元ラク。
    > 例えば、こんな。
    > REM *** Becky! Internet Mail ***
    > REGEDIT /E E:\Reg\RimArts.reg "HKEY_CURRENT_USER\Software\RimArts"
    > REM *** 秀丸エディタ ***
    > REGEDIT /E E:\Reg\Hidemaru.reg "HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru"
    >
    > 復元時は上記のregファイルを実行していくだけ。

    > マルチユーザー環境だとレジストリが有利っつーのはウソでしょ。
    > 例えば1ユーザーで複数アカウントを切り替えて使ってる場合
    > (普段用と管理用…等)レジストリよりINIの方が有利。

    I-02 アンインストールが簡単
    概要 ユーザは該当ファイルを削除するだけでアンインストールができる。
    代替策 プログラマがレジストリキーを削除するためのバッチファイルやアンインストールソフトを用意する。
    関連する意見 > アンインストーラでHKEY_CURRENT_USER\Software\hogeしか消さない
    > のがあるでしょ。んで他のユーザーのレジストリは残ったままになる。

    I-03 レジストリが肥大化しない
    概要 レジストリが大きくならないのでOSが不安定になりにくい。
    代替策 ユーザがWindows付属のScanreg.exeを使用する。
    関連する意見 > レジストリの肥大化を潔癖症と言っていいくらい嫌う人が多いけど、
    > MSは、そういう設計思想で作ってるからね。
    > 設計思想を避難するのはともかく、アンインストール時に情報を
    > 削除できないって非難するのは、ちと筋違い。
    >
    > でも、95の系列はレジストリの肥大化で、OSが不安定になるって
    > 言うのは、その通り。
    > このあたりが、MSのダサいところ。

    I-04 Windows再起動時にレジストリエラーが発生しても更新情報が維持される
    概要 Windows再起動時にレジストリエラーが発生すると、直前にレジストリに保存した更新情報は破棄されてしまう。 しかしiniファイルならば情報は維持される。
    代替策 -
    関連する意見 -


    その他

    O-01 レジストリとiniファイルの切り替え式
    概要 レジストリとiniファイルをオプションで切り替え可能にする。
    関連する意見 > あとFFFTP等のini/レジストリ切り替え式も良いかも。

    O-02 別の設定を適用する
    概要 iniファイルやレジストリ番号を引数で指定して適用する。
    関連する意見 > 個人的には>>33,34のような方法でマルチユーザに対応しつつ、
    > コマンドライン等から別のINIを適用可、ってのがマンセー。
    > 自分が知ってる範囲内では、WWWC、Irvine、xyzzy、limechat等が
    > この方式。

    > QXみたいにレジストリ番号でも引数で指定できるソフトもあるんだし……。



    更新履歴
    2001/11/25 「I-03 レジストリが肥大化しない」の代替策に「ユーザがWindows付属のScanreg.exeを使用する。」を追加。
    「I-05 代替適用ができる」を削除し、「O-02 別の設定を適用する」を追加。