Posts Tagged ‘Firefox’
ページ移動時などに音を鳴らすアドオン「KIRISAKE」
またJetpack SDKで1つアドオンを作成してみました。
リンクをクリックしてページ移動などの通信が始まった際に、風を切り裂くような音を出すアドオンです。
作った理由ですが、
移動する際に音を出すと、ちゃんとリンクをクリックできたかなどが聴覚的にも認識できるのと、上記のような音を使う事でブラウザが少し早くなったような感じがします(I shallplease)
という後付けの理由があったりしますが、HTML5のAudioタグを使って見たかったというのが第一の要因です。
そういう気分になったのは中国のJetpackerのLT資料を見つけて、pageWorkerでhtmlファイルを読み込んでその中でAudioタグを鳴らすというサンプルが載っていたので実践してみました。
見つけたLTの資料はこれJetpack SDK: The new possibility of the extensions on browser
処理的にはたいしたことはやっていませんが、Jetpack SDKにはページ移動(ページを読み込みじゃなくて、通信が始まった瞬間)に反応するAPIはまだないような感じなので、nsIWebProgressを使った普通のFirefox拡張機能と同じように直に書きました。
Components.interfacesとか使う必要性が出てくるわけですが、Jetpack SDK0.6からはCiやCcというエイリアスがデフォルトではなくなったので、以下のようにrequireしてから使う必要があります。
Jetpack SDK 0.6 がリリースされました « Mozilla Developer Street (modest)
var {Cc, Ci} = require("chrome");
ちなみにこのvar {a,b} = obj;みたいな表記は分割代入というJavaScript 1.7からの機能を使ったもので、
var Cc = require("chrome").Cc , Ci = require("chrome").Ci;
というのと同様の意味になります。一部地域ではよく見かけるので覚えておくと便利です。
参考サイト
- Progress Listenersでロケーションバーのurl変更されたときに何かする – フリーフォーム フリークアウト
- Latest topics > Split Browser開発のよもやま話(6):分割されたブラウザの作り込み – outsider reflex
UstreamのFlash動画内広告を消す方法
USTREAMでは動画内に広告があって一定のタイミングで表示されたりしてとても邪魔になったりします。
その広告をAdblockでブロックして出現しないようにする方法。
方法は単純で動画内広告も外部から読み込んだFlashで動作しているのでそのswfを読み込まないようにするだけです。
広告は以下のアドレスのブロックすると読み込まれなくなります。(正規表現でマッチするAdblockだとmedia\.scanscout\.comみたいにエスケープする。)
media.scanscout.com
ブロックされているswfはhttp://media.scanscout.com/ads/ss_ads3.swf Youtubeとか他のサイトでも使われてるとか聞きました。
自分はAdblock++を使って正規表現を使わずに単純に広告をブロックしているので、/adsをというキーワードで広告がブロックされていたようです。
一応自分のadblock++.ini (プロファイルの所にadblock++.iniがあるのでそこに上書き)
広告を全てなくしたい訳ではなくて、iframeを使って重かったり、大きな画像を使って見づらくしたり、幾度も注視点を奪うだけの広告が嫌いなだけです。
FirefoxのOOPP(Flashの別プロセス化)を無効にする
公式にFirefox3.6.4がリリースされ、その中の大きな変更としてサードパーティ製プラグインを別プロセス化するOOPPという機能が盛り込まれデフォルトで有効になっています。
3.6.4ではサードパーティ製プラグインのクラッシュ判定が応答しなくなって10秒となっていたのが3.6.6では判定時間を 45 秒に延長されています。(判定時間はdom.ipc.plugins.timeoutSecsで設定できます)
プロセスを分離することで、Flashがクラッシュしてもブラウザ全体を巻き込んで落ちなくなることが期待できますが、プロセスを分離したことで少し問題も発生したりします。
OOPPはWindows と Linuxで導入されましたが、環境によっては逆に不安定になったりすることや、今までFirefoxのプロセスをホックして動作していたソフトウェアが正しく動作しなくなることがあります。
具体的に言えば、Windowsでの音量ミキサ(プロセスごとに音量を設定する)やmyspeed(ブラウザ上のFlashの再生速度を変更する)などのソフトウェアはプロセスが分離されたことで上手く動かなくなったりします。
(音量ミキサの場合は”Plugin Container for Firefox”というプロセスの音量を設定することでなんとかなるかも)
OOPPの無効化
ロケーションバーにabout:configと入力して、dom.ipc.plugins.enabledと入力するとOOPPの有効無効の有無を決める設定が出てきます。
出てくる項目で、dom.ipc.plugins.enabled はOOPP全体の有無でfalseにすれば無効となります。
dom.ipc.plugins.enabled.npswf32.dll はFlashのプロセスを分離するかを決めることができ、入っているプラグインごとにそれぞれ決めることができます。
プラグイン同士で連携していたりすることがあるらしいので、全てをtrue(有効)かfalse(無効)のどちらかにした方がいい気がします。
falseにすると今まで同じようにプロセスは一緒になるので(音量ミキサやmyspeedも動作する)、OOPPが安定したりソフトウェアが対応するまでは無効化するのもありかと思います。
- MozillaZine.jp :: トピックを表示 – 【ヒント】Firefox 3.6.4 と OOPP について
- http://forums.mozillazine.jp/viewtopic.php?t=10328&sid=4b9e3ceea6409b2f1e02c4db6fef54c6
OneNoteのプラグインまとめ
そろそろOffice2010がでますが、今更OneNote2007を使い始めたのでOneNoteのプラグイン(add-in)のまとめです。
最後の方はプラグインというよりは関連ソフト。
Calendar/Planner
http://blogs.msdn.com/johnguin/archi…r-onenote.aspx
A new OneNote Favorites Powertoy – OneNote Testing – Site Home – MSDN Blogs
http://blogs.msdn.com/b/johnguin/archive/2008/03/03/a-new-onenote-favorites-powertoy.aspx
ページをお気に入り登録する感じでお気に入りリストを作る。
→最新版 http://blogs.msdn.com/b/johnguin/archive/2008/09/11/onenote-favorites-updated-with-user-requested-feature.aspx
Canvas for OneNote
http://www.officelabs.com/projects/canvasforonenote/Pages/default.aspx
サムネなどでノートの全体を見る。参考 Canvas for OneNoteの感覚的な情報整理 : could
ダウンロードはIEからで無いと崩れていて難しいです。TRY ITのとこをクリックでダウンロード。
OneNote PowerToys – A Collection of PowerToys for OneNote
http://www.onenotepowertoys.com/2007/06/23/onenote-search-and-replace/
検索置換を行うプラグイン。
結果をプレビューできる。
Merge Pages
http://blogs.msdn.com/johnguin/archi…-powertoy.aspx
ページをマージする。
Printout to OneNote Manager
http://blogs.msdn.com/johnguin/archi…o-onenote.aspx
印刷のレイアウト調整OneNote PowerToys – A Collection of PowerToys for OneNote
Word Count
http://blogs.msdn.com/descapa/archiv…ord-count.aspx
文字数カウント
Template Manager
http://blogs.msdn.com/johnguin/archi…note-2007.aspx
http://blogs.msdn.com/olya_veselova/…templates.aspx
Outlook To OneNote AddIn
http://blogs.msdn.com/descapa/archiv…ote-addin.aspx
Text Importer
http://www.onenotepowertoys.com/2007…text-importer/
テキストファイルをインポート
OneNote PowerToys – A Collection of PowerToys for OneNote
http://www.onenotepowertoys.com/2007/12/03/html-importer/
HTMLファイルをインポート
Better Living through Software » Blog Archive » OPML import for OneNote
http://www.netcrucible.com/blog/2004/04/28/opml-import-for-onenote/
OPMLファイルをインポート
Journal to OneNote Importer – OneNote Testing – Site Home – MSDN Blogs
http://blogs.msdn.com/b/johnguin/archive/2007/12/21/journal-to-onenote-importer.aspx
Journal ファイルをインポート
Rambles In The Brambles: PowerPoint To OneNote
http://www.borlik.net/blog/archives/000097.html
PowerPointファイルからインポート
Notebook Cleaner & Privatizer
http://blogs.msdn.com/johnguin/archi…-powertoy.aspx
作者情報などを取り除く
Image Rotator
http://blogs.msdn.com/johnguin/archi…note-2007.aspx
画像を回転させる
Sort Sections
http://blogs.msdn.com/descapa/archiv…-powertoy.aspx
セクションでソートを行う
Sort Pages
http://blogs.msdn.com/descapa/archiv…-powertoy.aspx
ページでソート
Table of Contents
http://blogs.msdn.com/johnguin/archi…-powertoy.aspx
ページの一覧をまとめてテーブルページを作る。OneNote PowerToys – A Collection of PowerToys for OneNote を参考に
Table Sum Powertoy for OneNote – OneNote Testing – Site Home – MSDN Blogs
http://blogs.msdn.com/b/johnguin/archive/2007/12/10/table-sum-powertoy-for-onenote.aspx
テーブルで計算を行う。
Make Subpage
https://blogs.msdn.com/johnguin/arch…vo-update.aspx
A beta powertoy for OneNote 2007 to extract highlighted text from a page – OneNote Testing – Site Home – MSDN Blogs
選択範囲から新たなページを作る
OneNote 2007 Powertoy to change section colors – OneNote Testing – Site Home – MSDN Blogs
セクションの色を変える
A beta powertoy for OneNote 2007 to extract highlighted text from a page – OneNote Testing – Site Home – MSDN Blogs
A powertoy to make using Adapx pens for OneNote a little easier for me – OneNote Testing – Site Home – MSDN Blogs
ページのサイズを自動でfitするように。
Copy page to OneNote Mobile notebook
http://blogs.msdn.com/johnguin/archi…le-device.aspx
OneNote Math AddIn | Dragonshorn Studios
http://dragonshorn.info/node/4?page_id=372
数式を書くツール
OneNote Web Exporter
http://www.codeplex.com/ONWebber
ノートブックをWebページとして出力する。
Powertoy: Double Hyperlink « Tablet PC – A Student’s Perspective
http://tabletpcstudent.wordpress.com/2007/11/17/powertoy-double-hyperlink/
ページ作成時のナビゲーションを補助
Export OneNote to PDF (OneNote2PDF)
http://onenote2pdf.codeplex.com/Wiki…te2PDF%20Usage
Onenoteのファイル.oneからPDF形式に変換する。
Send to OneNote 2007 powertoy – Daniel Escapa’s OneNote Blog – Site Home – MSDN Blogs
http://blogs.msdn.com/b/descapa/archive/2007/02/15/send-to-onenote-2007-powertoy.aspx
エクスプローラからOneNoteへファイルを送る
OneNote PowerShell Provider « Brian’s Brain
http://bdewey.com/2007/07/18/onenote-powershell-provider/
PowerShellとOneNote
The Unknown OneNote Guy’s Blog: OneNote 2007 Xml Viewer
http://unknown-onenote.blogspot.com/2006/09/onenote-2007-xml-viewer.html
OneNoteのXMLをみるためのビューアー
A really great tip to make getting information into OneNote much easier – OneNote Testing – Site Home – MSDN Blogs
OneNoteへコピペするためのAutoHotKey
任意のキーにセットして使う。
Clip to OneNote :: Add-ons for Firefox
https://addons.mozilla.org/ja/firefox/addon/12003/
Firefoxから落書きノートでスクラップするアドオン
他のまとめ
A summary of the OneNote powertoys from the test team for 2007 – OneNote Testing – Site Home – MSDN Blogs
21 OneNote Power Toys | Sarah In Tampa | Channel 10
http://on10.net/blogs/sarahintampa/20844/
OneNote PowerToys – The Daily Ramblings of an SMS Engineer
http://myitforum.com/cs2/blogs/socal/archive/2008/03/30/onenote-powertoys.aspx
意外とソースを公開しているものが多くていいね。
C#とかでプラグインを作れるようなので興味がある方は作ってみるといいかも。
記事の元ネタにいろいろ追加と説明を加えた。
- Favorite Plugins – www.ms-news.net
- http://www.ms-news.net/f2614/favorite-plugins-10277983.html
Send to OneNote 2007 powertoy – Daniel Escapa’s OneNote Blog – Site Home – MSDN Blogs
http://blogs.msdn.com/b/descapa/archive/2007/02/15/send-to-onenote-2007-powertoy.aspx
エクスプローラからOneNoteへファイルを送る
Greasemonkeyにデバッグ関数を追加するuserChrome.js
以前、GreasemonkeyにGrowlのような通知を呼ぶ機能を加える「Dbus Notify」 | Web scratchでGreasemonkeyから使える機能を増やせたら楽しそうと書いたと書きましたが、calloutのソースを参考にGreasemonkeyスクリプトから使える関数を追加するuseChrome.jsを書いてみました。
このuserChrome.jsを読み込むと、
fbug Clipboard.get Clipboard.set
などのメソッドがGreasemonkeyスクリプトから使えるようになります。
fbugはconsole.logと同じ動作ですが、Firebugのウィンドウを開いていない状態(Firebugがオフ)でもFirebugのウィンドウを開いてからlogを出してくれる関数です。(元ネタはxqjs)
Clipboardの方はjetpack prototypeからのコピペなのであんまり確認してません。
当たり前ですがこのuseChrome.jsをインストールしてない人の環境ではfbugなどの関数は使えないため、デバッグ目的か自分用のGreasemonkeyに使用する感じになると思います。
以下のようにデバッグ時のみ動く関数でラップしておけば、配布の際にDEBUG = false;とするだけでいいので楽かも知れません。
var DEBUG = true;
log("なんとか");
// DEBUG - http://gist.github.com/428596
function log() {
if ( typeof DEBUG != 'undefined' && DEBUG ) {
fbug.apply(this, arguments);
}
}
何かもっと便利なデバッグ関数とか作れそうな気がします。
多分Greasemonkeyスクリプトからしか動かないようにできているので(あんまり自信ない)、そこまで危険な事は起こらないかと思いますが安全は保証できないので自己責任でというテンプレを入れておく。
- gist: 428596 – Greasemonkeyから使える関数を追加するuserChrome.js- GitHub
- http://gist.github.com/428596
GreasemonkeyにGrowlのような通知を呼ぶ機能を加える「Dbus Notify」
紹介するDbus Notify for GreaseMonkeyはGreasemonkeyスクリプトにGrowlのような通知を行うAPIを加えるアドオンです。
Greasemonkeyにcallout.notifyというAPIを追加するだけのシンプルなアドオンです。
使い方は単純でDbus Notify for GreaseMonkeyをインストールして、Greasemonkeyスクリプト内にcallout.notifyのAPIを使った記述を加えるだけで動きます。(当たり前だが、インストールしてない環境だと動かない)
APIは凄くシンプルで、callout.notify(title, message, [options])となっていて、タイトルはそのまま、メッセージはタイトルの下に表示されていて、optionのhrefが設定されている場合はリンクになる。
optionで設定できるのもhrefとiconぐらいで、Greasemonkeyからページの外側に通知を出したいなーって思う人はそれだけを求めるならアドオンなどにしないでこれを使うのもいいかも。
簡単なサンプル
- gist: 426775 – Dbus Notify for GreaseMonkeyのテスト- GitHub
- http://gist.github.com/426775
APIの解説
- lackac’s callout at master – GitHub
- http://github.com/lackac/callout
Greasemonkeyに何か機能を加えるアドオンって意外と見かけない感じがする。
Greasemonkey でクリップボードを扱う…悪い方法(?) – Griever でも言っているように受け口を持つと悪用の可能性も出てくるが、セキュリティ的な影響がでないように狭い範囲で機能追加できれば楽しそうだなーと思った。
拡張機能の有効状態を保存復元するuserChrome.js
Firefoxの拡張機能(アドオン)の有効になってるか無効になってるかを記録して保存できます。
またその保存したものから各アドオンの有効の有無を復元することができます。
例えば、Firefoxの動作がおかしいなと感じて、どのアドオンが原因なのかを調べるときに、調べる前の有効状態を保存してから、一個一個アドオンを無効化して試し、原因となるアドオンが分かったら有効状態を復元して直ぐに元通りにできます。
似たような事を行えるVimperatorプラグインがあります。
- アドオンの有効無効状態を保存&復帰できるプラギン – Death to false Web browser! – vimperatorグループ
- http://vimperator.g.hatena.ne.jp/nokturnalmortum/20100203/1265202872
このスクリプトはuserMenu.jsが必要となるので、userChrome.jsでメニュー拡張を追加できる「userMenu.js」 | Web scratchを読んでuserMenu.jsを導入してからChromeフォルダのtoolmenuフォルダに入れてください。
アドオンの状態はextensions.scriptprefs.GM_modoki.%u30A2%u30C9%u30AA%u30F3%u6709%u52B9%u72B6%u614B%u3092%u4FDD%u5B58.extsDisableに保存されています。(JSON.parseして使う。)
userMenu.jsに付属していた0000.アドオンリストをタブに表示.L.jsを元にしました。
他の参考にしたもの
nsIExtensionManagerで使えるもの
nsIExtensionManager.idl
- ダイアログの使い方。
nsIPromptService – MDC - https://developer-stage.mozilla.org/en/nsIPromptService#confirmEx()
- ダイアログの使い方。日本語ですがいろいろ抜けてます。
- Dialogs and Prompts – MDC
- https://developer-stage.mozilla.org/ja/Code_snippets/Dialogs_and_Prompts
userChrome.jsでメニュー拡張を追加できる「userMenu.js」
- userChrome.jsでJavascript Actionsのようなスクリプトの実行コマンドをサブメニューのネスト, タブメニューやメインメニュー、コンテキストメニューなどのメニューに追加する形のスクリプトを扱いやすくしたり、GreasemonkeyのAPIと似たような機能を持つライブラリが使える要にするuserMenu.jsの紹介
- ダウンロードは以下の場所から
- userChrome.js – Mozilla Firefox まとめサイト
- http://firefox.geckodev.org/index.php?cmd=read&page=userChrome.js&word=user#g4f5f928
いろいろバージョンが置かれてますがuserMenu.js ver. 1.21mod 一式(Fx3以降)と最新のものをダウンロードして、ver1.21はあらかじめtabmenuなどのフォルダがあって分かりやすいので、それらを最新版で上書きすると良いでしょう。
こんな感じのファイルが入ってるので、とりあえず動作させるために、FirefoxプロファイルのChromeフォルダにそのまま中身を突っ込みます。
Chrome │ 0.UCJSToolkit.uc.js │ GM_modoki.jsl │ jsa.jsl │ JSA_modoki.jsl │ preload.sample.txt │ scripting.txt │ userMenu.js.readme.txt │ userMenu.pl.js │ userMenu.uc.js │ ここにはuserChrome.jsなども存在 │ ├─contextmenu │ Add Copy.se.js │ Element Killer.js │ Google cache.nl.js │ Google Translate.se.js │ Open IE.nl.js │ Open Selection.se.js │ Reload Image.im.js │ Use Javascript.auto.js │ Wayback.nl.js │ ├─tabmenu │ └─Order.ct │ FrameOrder.ct.auto.js │ ImageOrder.ct.auto.js │ JSOrder.ct.auto.js │ PluginOrder.ct.auto.js │ RedirectOrder.ct.auto.js │ userContentOrder.ct.auto.js │ └─toolmenu 0000.アドオンリストをタブに表示.L.js Inspection Here.js Rebuild User Menu.js Reload userContent.css.js Restart Firefox.r.js ~.---
移動させて再起動すると、コンテキストメニューやツールメニューにいろいろな項目が増えていれば成功です。
一つ一つのスクリプトの機能は数が多いので適当に見れば分かるので、開発したスクリプトをメニューに表示させる方法へ。scripting.txtやuserMenu.js.readme.txtを見ると詳しく書いてありますが、contextmenuやtoolmenuといったフォルダがそのままの構成でメニューと対応してるので、それらのフォルダに作ったスクリプトをjs拡張子にして入れるだけで簡単に登録できます。(スクリプトのファイル名ルールでショートカットなども設定できる)
例えば、右クリックに表示されるスクリプトで複数のものを一つのフォルダに入れれば、それが一つの階層になります。
contextmenu
└─JSAction
Add Copy.se.js
Element Killer.js
また先ほど紹介したようにGreasemonkeyのAPIと同様の機能を持ったものが一部使えます。
GM_setValueやGM_xmlhttpRequestなど。
デバッグ方法としてconsole.ほげ()というFirebugで使われるメソッドが使用できると書いてあるのですが、イマイチ動かなかったので、
GM_modoki.jsl (GreasemonkeyのAPIを定義してるファイル)の先頭部分に
// fbug(x)でFirebugのコンソールに出力
function main(){
var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
.getService(Components.interfaces.nsIWindowMediator);
return windowManager.getMostRecentWindow("navigator:browser");
}
function fbug(x){
var {Firebug} = main();
if(Firebug.Console.isEnabled() && Firebug.toggleBar(true, 'console'))
Firebug.Console.logFormatted(Array.slice(arguments));
return x;
}
と書き足して、fbug(x)でFirebugのコンソールに出力するようにしました。
Services.jsmが使えるなら以下のような感じで書けるようです。xqjs – ’ellaneous が元ネタです。
Cu.import('Services.jsm');// 読み込み先にresource:// かfile://
function main() Services.wm.getMostRecentWindow('navigator:browser');
function fbug(x){
var {Firebug} = main();
if(Firebug.Console.isEnabled() && Firebug.toggleBar(true, 'console'))
Firebug.Console.logFormatted(Array.slice(arguments));
return x;
}
上記のfirebugコンソールへの出力はxqjsのソースコードを見て知ったものです。
xqjsはExecute JSのようなその場でChromeやcontentに対してJavaScript実行できるアドオンです。
話題のCoffeeScriptやJavaScriptの単語補完、マクロ機能、便利なユーティティ関数などが使える優れたFirefoxアドオンなので、JavaScript ShellやFirebugのコンソールで入力するのが微妙だなーと思う人は一度使って見るといいかと思います。fbugでFirebugのコンソールにもlogを吐けるので連携させるとなお便利。
Firebugで定義されているXpathやCSSセレクタもマクロで定義されており、copy関数なども存在します。
詳しくは作者さんのページとAMOとソースを読む。
- xqjs – ’ellaneous
- http://d.hatena.ne.jp/murky-satyr/20100504/xqjs
話が完全にすり替わりましたが、userMenu.jsはuserChrome.jsを書く上でかなり便利だと思うので、一度見てみることを進めます。
- userChrome.js – Mozilla Firefox まとめサイト
- http://firefox.geckodev.org/index.php?cmd=read&page=userChrome.js&word=user#g4f5f928
縦置きタブバーとサイドバーを統合する拡張機能「Unified Sidebar」
firebugの縦置きタブバー(要アドオン)とサイバーを統合するUnified Sidebarというアドオンがリリースされました。
- Latest topics > 縦置きタブバーの下にサイドバーを統合するUnified Sidebarをリリースしたよ – outsider reflex
- http://piro.sakura.ne.jp/latest/blosxom/mozilla/extension/unifiedsidebar/2010-02-05_released.htm
対応してる縦置きタブバーの拡張は下の3種類みたいですが、知らせれば他のも対応してくれるかもしれないとのことです。
- ツリー型タブ
- VertTabbar
- Tab Kit
実際に統合するとしたような感じになります。
画面の大きさと一度に開くタブの数によっては結構いい感じに扱えます。
少しでも画面を広くするため、Hide Captionを使ってタイトルバーを非表示にして、userChrome.cssでサイドバーのタイトル部分を非表示にしています。
/* サイドバーのタイトル部分非表示*/
#sidebar-box > sidebarheader{
display: none !important;
}
- Unified Sidebar
- https://addons.mozilla.org/ja/firefox/addon/72200/
- Hide Caption
- https://addons.mozilla.org/ja/firefox/addon/9256
- タブバーを縦置きにする – Griever
- http://d.hatena.ne.jp/Griever/20090705/1246788480
Greasemonkey使ってないスクリプトを削除するメモ
Greasemonkeyで使ってないスクリプトを削除したい。
gm_scriptsディレクトリにあるconfig.xmlを編集
^(?!.*enabled="true").*$
を空に置換して有効になっているものだけを取り出す
^\n
も空に置換して空の改行をなくす
^.*?filename="(.*?)".*?basedir="(.*?)".*?$ を下のように置換して使っているファイルのパスを出す。 \2/\1
なんかゴミが残ったりするので上の正規表現が適当なせい。
ここまでの手順で、使っているスクリプトの.jsまでのファイルパスが抽出できる。
で、こっからどうやってそれらのファイルだけを取り出せばいいのかがよくわからない。
こんな感じででる。(なんかいろいろおかしい)
./googlenotebookcustomizer.user.js pastedscripinstaller3.user.js. simplestylegoogle_mania.user.js hb_display_comment/hb_display_comment.user.js .....
リストに載っているものを移動するときに(その方法すら浮かんでない)Requireしたものが含まれないとそんな問題もある。




