あるWebシステム(Rails)で画像やCSSの編集や更新・複製をしているうちに、だんだんと「どの画像が使われていないのか」がわからなくなってきました。特に画像のパスもWebシステムで自動生成しているため、grepなどでも見つけにくい状況です。

上記のような問題をある程度簡単に解決する方法はありませんでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/10/11 11:36:37
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:watarum No.2

回答回数63ベストアンサー獲得回数16

ポイント50pt

いらない画像のリストアップを私は4つほどやった事があります。

HDDの容量が少ない鯖で運用していた経験があり、

画像ファイルが重くてしょうがなかった時にやった方法です。


CSSについては超簡単に削除できます。

CSSはコレ↓

Dust-Me Selectors

http://designwork-s.com/article/49809250.html


問題は画像です。

成功したのは下記の方法1だけでした。

方法1.全部消して、リンク切れをチェックする方法

1-1.まず画像ファイルを全部ローカルかどっかにバックアップします。フォルダが決まっていればFTPやSCPで落としてきちゃえばいいですが、もしバラバラな場合、findやgrepで探してどっかに逃がします。

1-2.バックアップした画像を全部消します。UNIXであれば、さっきのコマンドをrmに渡すだけでOKです。

1-3.下記ソフトでリンク切れをチェックします。

Website Explorer

http://www.interq.or.jp/engineer/umechan/webex/

1-4.リンク切れのログが出たら、そのファイルだけ再度元の位置に戻します。

簡単ですが確実な方法です。ただ問題はダウンタイムが少なからず発生する事です。リンク切れだらけのサイトは誰もみたくないと思いますから、短時間で事を済ませないといけません。場合によっては、同じことを開発環境でテストしてみるといいと思います。

方法2.imgタグでアクセス解析をする方法

2-1.画像の一覧表を作ります。方法1と同じやり方でできると思います。

2-2.ドコへのアクセスがあったかログを吐き出す簡単なプログラムを書きます。getで渡された値の画像を表示にリダイレクトして表示させます。ついでにUAもとったほうがいいかもしれません。つまりアクセス解析を仕込みます。

2-3.imgタグのリンク先を全部grep置き換えでそのプログラムに書き換えます。元画像の引数はパスに注意して下さい。

例)
<img src="gazou.cgi?元の画像">

2-4.全てのページにアクセスします。さっきのWebsite Explorerでもいいですが、できるだけUAが特殊なもののほうが特定しやすいと思います。

2-5.プログラムが吐き出したログと元からあった画像リストの差分、すなわちアクセスされてない画像をリストアップして消します。

この方法ならば、稼働中でもメンテナンスできます。私はperlでプログラムを書きましたが、rubyで書いてももちろん問題ないでしょう。cgiで問題無いと思いますが、cgiが稼働するかどうかはWEBサーバーに何を使ってるかによります。

また、2-4のステップを飛ばして、自然なアクセスでログをとるのも手です。その場合UAをとる必要はありません。

ただ、稼働中に画像ファイルが増えるような場合はこの方法は不可能です。自動生成でドンドン新しい画像ができちゃうようなサイトでは不可能かも知れません。

方法3.画像だけ他のレン鯖に移動する方法

ファイルごとのアクセス数をとってくれるアクセス解析システムがついたレン鯖に画像を移します。あとは方法2と同じく、ログを見て、アクセスされてないファイルを消します。プログラムを書く必要が無いだけ楽なのと、ログをとってる間に画像が増えても問題無い事がメリットです。但し、お金が多少かかります。

ライブドアレンタルサーバー

http://flexserver.jp/

方法4.WEBサーバーのログを見る方法

4-1.まずログを吐き出すタイプのWEBサーバーなのか調べます。mod_railsでApacheなら全然問題ないですが、WEBlicやMongrelなどでログをとる方法は私にはわかりません。

4-2.方法2と同じくログとリストを突き合わせてアクセスのないファイルを消します。Apacheだった場合、下記のソフトが便利です。

ApacheLogViewer

http://win.kororo.jp/weblog/2006/08/17/post_0808.php

また、Apacheだった場合、鯖側に設置してしまうのも手です。

webalizer.html

http://www.ahref.org/doc/webalizer.html

railsで組まれているとの事なので、Apacheでない可能性が大であることを知っていながら書いてます。どっちみちログの解析は超面倒くさいです。

-----

あとは、画像ファイルだけでなく、画像を表示する為だけのHTMLを自動生成してそこにGoogle analyticsを仕込む方法なんかも思いつきましたがやった事が無いので、アイディア程度で。

-----

というわけで、使用していない画像の特定は死ぬほど面倒だという事です。かなりダルいですが、一回全部消す作戦が一番お勧めです。

id:k1LoW

「全部消してリンク切れを確認する」これには目から鱗でした。

「リンク切れは確認できるのになー」と思っていたのですが、まさかそれを逆転の発想で利用するとは・・・

是非参考にさせてもらいたいと思います。

2010/10/07 09:15:17

その他の回答1件)

id:a-kuma3 No.1

回答回数4968ベストアンサー獲得回数2151

ポイント30pt

Webサイトを一括ダウンロードするツールを使って、「あるWebシステム」のダウンロードをする。

そのときのアクセスログから、画像ファイルのアクセスだけを抽出し、URL の頭の部分を切り取る (→ファイル1)。

ローカルから、画像ファイルのパスだけを抽出する (→ファイル2)。

それぞれの結果を並べ替えて、テキスト比較を行う、かな。

URL が必須だということで、ダウンローダの一つを↓に。

http://hp.vector.co.jp/authors/VA024591/

id:k1LoW

やはりシステムそのままの状況からはアクセスログの解析が必要ですね。

2010/10/07 09:13:34
id:watarum No.2

回答回数63ベストアンサー獲得回数16ここでベストアンサー

ポイント50pt

いらない画像のリストアップを私は4つほどやった事があります。

HDDの容量が少ない鯖で運用していた経験があり、

画像ファイルが重くてしょうがなかった時にやった方法です。


CSSについては超簡単に削除できます。

CSSはコレ↓

Dust-Me Selectors

http://designwork-s.com/article/49809250.html


問題は画像です。

成功したのは下記の方法1だけでした。

方法1.全部消して、リンク切れをチェックする方法

1-1.まず画像ファイルを全部ローカルかどっかにバックアップします。フォルダが決まっていればFTPやSCPで落としてきちゃえばいいですが、もしバラバラな場合、findやgrepで探してどっかに逃がします。

1-2.バックアップした画像を全部消します。UNIXであれば、さっきのコマンドをrmに渡すだけでOKです。

1-3.下記ソフトでリンク切れをチェックします。

Website Explorer

http://www.interq.or.jp/engineer/umechan/webex/

1-4.リンク切れのログが出たら、そのファイルだけ再度元の位置に戻します。

簡単ですが確実な方法です。ただ問題はダウンタイムが少なからず発生する事です。リンク切れだらけのサイトは誰もみたくないと思いますから、短時間で事を済ませないといけません。場合によっては、同じことを開発環境でテストしてみるといいと思います。

方法2.imgタグでアクセス解析をする方法

2-1.画像の一覧表を作ります。方法1と同じやり方でできると思います。

2-2.ドコへのアクセスがあったかログを吐き出す簡単なプログラムを書きます。getで渡された値の画像を表示にリダイレクトして表示させます。ついでにUAもとったほうがいいかもしれません。つまりアクセス解析を仕込みます。

2-3.imgタグのリンク先を全部grep置き換えでそのプログラムに書き換えます。元画像の引数はパスに注意して下さい。

例)
<img src="gazou.cgi?元の画像">

2-4.全てのページにアクセスします。さっきのWebsite Explorerでもいいですが、できるだけUAが特殊なもののほうが特定しやすいと思います。

2-5.プログラムが吐き出したログと元からあった画像リストの差分、すなわちアクセスされてない画像をリストアップして消します。

この方法ならば、稼働中でもメンテナンスできます。私はperlでプログラムを書きましたが、rubyで書いてももちろん問題ないでしょう。cgiで問題無いと思いますが、cgiが稼働するかどうかはWEBサーバーに何を使ってるかによります。

また、2-4のステップを飛ばして、自然なアクセスでログをとるのも手です。その場合UAをとる必要はありません。

ただ、稼働中に画像ファイルが増えるような場合はこの方法は不可能です。自動生成でドンドン新しい画像ができちゃうようなサイトでは不可能かも知れません。

方法3.画像だけ他のレン鯖に移動する方法

ファイルごとのアクセス数をとってくれるアクセス解析システムがついたレン鯖に画像を移します。あとは方法2と同じく、ログを見て、アクセスされてないファイルを消します。プログラムを書く必要が無いだけ楽なのと、ログをとってる間に画像が増えても問題無い事がメリットです。但し、お金が多少かかります。

ライブドアレンタルサーバー

http://flexserver.jp/

方法4.WEBサーバーのログを見る方法

4-1.まずログを吐き出すタイプのWEBサーバーなのか調べます。mod_railsでApacheなら全然問題ないですが、WEBlicやMongrelなどでログをとる方法は私にはわかりません。

4-2.方法2と同じくログとリストを突き合わせてアクセスのないファイルを消します。Apacheだった場合、下記のソフトが便利です。

ApacheLogViewer

http://win.kororo.jp/weblog/2006/08/17/post_0808.php

また、Apacheだった場合、鯖側に設置してしまうのも手です。

webalizer.html

http://www.ahref.org/doc/webalizer.html

railsで組まれているとの事なので、Apacheでない可能性が大であることを知っていながら書いてます。どっちみちログの解析は超面倒くさいです。

-----

あとは、画像ファイルだけでなく、画像を表示する為だけのHTMLを自動生成してそこにGoogle analyticsを仕込む方法なんかも思いつきましたがやった事が無いので、アイディア程度で。

-----

というわけで、使用していない画像の特定は死ぬほど面倒だという事です。かなりダルいですが、一回全部消す作戦が一番お勧めです。

id:k1LoW

「全部消してリンク切れを確認する」これには目から鱗でした。

「リンク切れは確認できるのになー」と思っていたのですが、まさかそれを逆転の発想で利用するとは・・・

是非参考にさせてもらいたいと思います。

2010/10/07 09:15:17

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません