My備忘録(又の名を雑記帳)

WinMacのMy備忘録(IT系?)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- | スポンサー広告 | トラックバック(-) | コメント(-) | このエントリーをブックマークに追加する | このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク | [*Edit] |
Firefoxのアドオンの一つに、SQLite Optimizer という
Firefoxプロファイルフォルダ直下にある *.sqlite データベースの最適化を行う
アドオンがあります。

これアドオンじゃなくてもWSHとかで簡単に出来るんじゃない?って思ったので作りました。
アドオンとかあまり入れたくない人用?
というか、作っといてなんですけど、気が向いたときに
Firefox用 vacuum & reindex 実行バッチファイル
を実行をすればそれでいいんじゃないかという気もします。
私は専らバッチの方を使ってます。

============================================================
【ソフト名】 Firefox用 vacuum & reindex 実行スクリプト
【動作確認環境】 Windows XP, 2000 (Firefox 3.0.10)
【URL】 http://winmac.blog33.fc2.com/
============================================================

●必要環境
exec 使ってるので、 WSH 5.6 以上が必要です。
Windows XP 以上であればインストール済みのはずですが、
もしなければ、下のURLからダウンロードできます。
Windows 2000 および Windows XP 用の Windows Script 5.6
Windows Script 5.7

●概要
Firefox終了後、プロファイルフォルダ(サブフォルダ内も含む)の中の
*.sqlite ファイルに対し、vacuum と reindex を実行します。
順序は、vacuum の後に reindex です。

vacuum と reindex の実行によって、Firefoxが快適になる……かもしれません。
一応、Firefox用と書いていますが、ちょっと改造すれば他のソフトウェアにも使うことが出来ます。

●使い方
1、ダウンロードして、解凍してください。
  Firefox_SQLite.vbs と sqlite3.exe は、
  FirefoxPortable.exe または、Firefox.exe
  と同じ場所に置いてください。

2、Firefoxを使いたい場合は、FirefoxPortable.exe または、Firefox.exe の変わりに、
  Firefox_SQLite.vbs を実行してください。Firefoxが起動します。
  (// 必要に応じて、スタートメニューなどのFirefoxのショートカット
   // のリンク先を本スクリプトにしておくと良いのかもしれません。)

3、Firefox終了時に vacuum & reindex が必要そうであれば確認メッセージが
  出るので、vacuum と reindex を実行するかどうか決めてください。
  (必要そうでなければ、確認メッセージは出ません。)
  (// 必要そうかどうかは、places.sqlite の PRAGMA freelist_count を調べています。
   // 数値が10より大きければ、必要そうだと判断します。)

4、正常に終了すれば、「正常終了しました。」のメッセージが出ます。
  メッセージは2秒後に自動で消えます。
  (// 自動で消したくない場合、Firefox_SQLite.vbs をテキストエディタで開き、
   // 85行目の、
   //  WSHShell.Popup "正常終了しました。", 2, "vacuum & reindex"
   // の 2 という箇所をお好きな秒数に変更してください。
   // 0 にすると自動で閉じなくなります。)

以上です。

●ダウンロード
Firefox_SQLite.vbs.zip Firefox_SQLite.vbs.zip からどうぞ。

●ご利用にあたり
・私がテストした限りでは問題なく動作していますが、
 全ての環境での動作を保証するものではありません。

・本スクリプトを使用したことにより生じた
 いかなる損失や損害も当方は一切責任を持ちません。
 使用にあたってはすべて自己責任でご利用ください。

・PCを使うのであれば、万が一に備え、重要なデータのバックアップは
 常日頃から取っておくことをおすすめ致します。

・詳細はライセンスをご覧ください。

●ライセンス
・同梱の「sqlite3.exe」は パブリックドメイン です。
SQLite Home Page
http://www.sqlite.org/copyright.html

・本スクリプトは MIT License とします。
Copyright (c) 2009 http://winmac.blog33.fc2.com/

以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル
(以下「ソフトウェア」)の複製を取得するすべての人に対し、
ソフトウェアを無制限に扱うことを無償で許可します。
これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、
サブライセンス、および/または販売する権利、およびソフトウェアを提供
する相手に同じことを許可する権利も無制限に含まれます。

上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または
重要な部分に記載するものとします。

ソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、
何らの保証もなく提供されます。
ここでいう保証とは、商品性、特定の目的への適合性、および権利非侵害に
ついての保証も含みますが、それに限定されるものではありません。
作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、
ソフトウェアに起因または関連し、あるいはソフトウェアの使用またはその他
の扱いによって生じる一切の請求、損害、その他の義務について何らの責任
も負わないものとします。

●ソースコード

'/***************************************************************************
'【ソフト名】 Firefox用 vacuum & reindex 実行スクリプト
'【動作確認環境】 Windows XP, 2000
'【必要環境】 WSH 5.6 以上
'【URL】 http://winmac.blog33.fc2.com/
'【ライセンス】 MIT License
'        Copyright (c) 2009 http://winmac.blog33.fc2.com/
'***************************************************************************/

Option Explicit
Dim WSHShell, objFSO

Set WSHShell = WScript.CreateObject("WScript.Shell")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

Call Main(Run_Firefox())

Call S_Quit(0)

'/***************************************************************************
' .\App\Firefox\firefox.exe があればFirefoxPortable、なければ通常版だと判断。
' firefox.exe を起動し、終了まで待機。
' 
' 戻り値 : プロファイルフォルダのパス
'***************************************************************************/
Function Run_Firefox()
	If (objFSO.FileExists(".\App\Firefox\firefox.exe")) Then
		WSHShell.Run """.\App\firefox\firefox.exe"" -profile "".\Data\profile""", , true
		Run_Firefox = ".\Data\profile"
	Else
		WSHShell.Run ".\firefox.exe", , true
		Run_Firefox = Search_Profile()
	End If
End Function

'/***************************************************************************
' %APPDATA%\Mozilla\Firefox\Profiles\ にあるそれぞれのフォルダの中の places.sqlite ファイルの更新日時を比較し、
' 最も新しいファイルがあるフォルダを使用したプロファイルだと判断し、そのパスを返す。// 複数プロファイルに対応
' FAT だとフォルダの更新日時が更新されないので、ファイルの更新日時を調べる。
' 
' 戻り値 : 使用したプロファイルフォルダのパス
'***************************************************************************/
Function Search_Profile()
	Dim objSubFolder, objFile_places_TS, NewTimeStamp

	Search_Profile = objFSO.BuildPath(WSHShell.SpecialFolders("AppData"), "\Mozilla\Firefox\Profiles\")
	For Each objSubFolder In objFSO.GetFolder(Search_Profile).SubFolders
		objFile_places_TS = objFSO.GetFile(objSubFolder.Path & "\places.sqlite").DateLastModified
		If NewTimeStamp < objFile_places_TS Then
			NewTimeStamp = objFile_places_TS
			Search_Profile = objSubFolder.Path
		End If
	Next
End Function

'/***************************************************************************
' places.sqlite の PRAGMA freelist_count を調べ、
' 数値が10より大きければ、 vacuum & reindex を実行するかどうか確認。
' 10以下なら問わずに終了。
' 
' もし PRAGMA freelist_count が実行出来なかったら、100ms待機後再試行。最大50回ループ。
' それでも実行できなければ、エラーメッセージを出してスクリプトを終了。 // Call S_Quit(1)
' Err_Count は エラー回数。
'***************************************************************************/
Sub Main(p_path)
	Dim result, freelist_count, Err_Count

	Do
		WScript.Sleep(100)
		Set result = WSHShell.exec("sqlite3.exe """ & p_path & "\places.sqlite" & """ ""PRAGMA freelist_count""")

		freelist_count = result.StdOut.ReadLine
		Set result = Nothing

		Err_Count = Err_Count + 1
		If (Err_Count >= 50) Then
			WSHShell.Popup "PRAGMA freelist_count が実行出来ませんでした。", 0, p_path & "\places.sqlite", 16
			Call S_Quit(1)
		End If
	Loop While freelist_count = ""

	If (freelist_count > 10) Then
		If WSHShell.Popup(p_path & vbCrLf & "以下に存在する *.sqlite ファイル全てに対して vacuum と reindex を実行しますか?", 0, p_path & "\places.sqlite の freelist_count は " & freelist_count & " です", 4 + 32) = 6 Then
			Call Search_File_sqlite(objFSO.GetFolder(p_path))
			WSHShell.Popup "正常終了しました。", 2, "vacuum & reindex"
		End If
	End If
End Sub

'/***************************************************************************
' *.sqlite ファイルを探す。 // サブフォルダにあるものも再帰的に検索
' .sqlite ファイルが見つかれば、 sqlite_Runプロシージャ へそのファイルとCommandを渡す。
' Command は、vacuum の後に reindex
'***************************************************************************/
Sub Search_File_sqlite(Folder)
	Dim SQ_File, Subfolder

	For Each SQ_File In Folder.Files
		If (LCase(objFSO.GetExtensionName(SQ_File)) = "sqlite") Then
			Call sqlite_Run(SQ_File, "vacuum", 0)
			Call sqlite_Run(SQ_File, "reindex", 0)
		End If
	Next
	For Each Subfolder In Folder.SubFolders
		Call Search_File_sqlite(Subfolder)
	Next
End Sub

'/***************************************************************************
' 渡されたファイルに対し、渡されたCommandを実行する。
' もしエラーが発生したら、100ms 待機後に再帰。それを最大50回ループ。
' それでも実行できなければ、エラーメッセージを出してスクリプトを終了。 // Call S_Quit(1)
' 
' 引数 : Err_Count は エラー回数
'***************************************************************************/
Sub sqlite_Run(File, SQ_Command, Err_Count)
	If (WSHShell.Run("sqlite3.exe """ & File.Path & """ " & SQ_Command, 0, true)) Then
		Err_Count = Err_Count + 1
		If (Err_Count >= 50) Then
			WSHShell.Popup File.Path & vbCrLf & SQ_Command &" 実行時にエラーが発生しました。", 0, SQ_Command, 16
			Call S_Quit(1)
		End If
		WScript.Sleep(100)
		Call sqlite_Run(File, SQ_Command, Err_Count)
	End If
End Sub

'/***************************************************************************
' 終了処理
'***************************************************************************/
Sub S_Quit(r_val)
	Set WSHShell = Nothing
	Set objFSO = Nothing

	WScript.Quit(r_val)
End Sub


関連記事
2009.05.19 | TOOL | トラックバック(1) | コメント(0) | このエントリーをブックマークに追加する | このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク | [*Edit] |

関連しているかもしれない記事一覧















管理者にだけ閲覧を許可する

トラックバックURL↓

Firefox用 vacuum &amp; reindex 実行バッチファイル
Firefox用 vacuum &amp; reindex 実行スクリプト のバッチファイル版。 :: *.sqlite の再構築 for /R ".\Data\profile\" %%I in (*.sqlite) do ( sqlite3.exe "%%I" vacuum sqli...

2009.05.19(火) 04:16:40 | My備忘録(又の名を雑記帳)


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。