分12こんにちは,株式会社ALBERTの太田です。Scriptsについて,その仕様とGreasemonkeyとの違いを中心に,実際のスクリプトの書き方を交えて解説します。Chrome版のGreasemonkey(ただし,後述の通り互換性はあまり高くありません)です。そもそもGreasemonkeyとは任意のページで任意のJavaScriptを実行し,そのページに機能を追加したり,(⁠自分にとって)不要なものを取り除いたり,異なるサービスとの連携をしたり,といったことをJavaScriptファイルひとつで実現できるようにするFirefoxのAdd-onです。その手軽さと,それに見合わぬ強力なカスタマイズ性能から高い人気を得ています。Greasemonkeyはその手軽さと引き換えに安全性を犠牲にしている面があります。AMO(addons.mozilla.org)に公開されているMozillaアプリケーション用のAdd-onはAMO(のレビュアー)による品質管理が行われていますが,userscripts.orgに公開されているGreasemonkey用Scriptはそういったチェックを受けていません。このため使用には十分に注意する必要があります(当然ながら,Add-onについてもAMO以外で公開されているのであれば,より注意が必要です⁠)⁠。Scriptsについても同様です(と,少々脅し気味に書きましたが,実際のところ私自身は悪意あるユーザースクリプトというものを見たことはない,ということを申し添えておきます⁠)⁠。Explorerのコンポーネントブラウザの一部にも同様の機能が実装されています。これらを総称して,ユーザーサイドスクリプトと呼ぶこともあります。Scriptsの動作環境について説明します。2以降のバージョンで動作します。2以前はGreasemetalというプラグインが利用できましたが,Chrome側がネイティブサポートしたためGreasemetalの開発は終了しています。いうオプションを付けることで使用可能になります。Vistaでのパスは以下の通りです。部分にはログインしているユーザー名が入ります。Scriptsという名前のフォルダが作られます(あらかじめ自分で作成しても問題ありません⁠)⁠。Windowsの場合,ユーザーデータフォルダは下記の場所になります。一部が隠しフォルダになっているため,探しにくい点に注意してください。終わるスクリプトを置けば,自動でファイルを認識して,@include(もしくは@match)で指定されたページを開いた際にそのスクリプトが実行されます。再起動などは必要なく,ファイルを更新した際も次の読み込み時に即座に反映されます。Scriptsの仕様Greasemonkeyを意識して実装されていますので,動作面ではGreasemonkeyとの互換性があります。スクリプトの実行タイミングはGreasemonkeyと同じく,DOMContentLoaded(DOMの構築後,画像などの読み込み完了前)で起動します。スクリプトの実行コンテキストがサイト側のスクリプトと分かれています。このため意図せずにグローバル変数を使用してしまったり,サイト側のスクリプトの処理を上書きしてしまうようなことはありません。機能面ではGreasemonkeyと異なる部分が多くあります。@resourceなどのメタデータを使用できません。3以降では廃止されています⁠)⁠。サイト側のコンテキストでJavaScriptを実行したい場合,ブックマークレット(location.hrefにjavascriptスキームを代入するなどの方法で実現できます)として実行するか,script要素を作ってコードをテキストノードとして挿入する必要があります。APIもほとんど使用できません。4では定義されていない状態に修正されました。APIで使用可能なのはGM_addStyle,GM_xmlhttpRequest(ただし,ドメインを超えることはできません⁠)⁠,GM_openInTab(実装はwindow.openのラッパー⁠)⁠,GM_log(やはりconsole.logのラッパー)の4つです。UserScript独自の機能もあります。@matchメタデータ@matchは@includeの改良版という位置づけで,@includeよりも正確なパターン指定が可能です。@matchはhttpなどのschemeパート,google.comなどのhostパート,/search?などのpathパートに分けてマッチングが行われます。マッチしてしまうという問題がありますが,こういった問題は@matchでは起こりません。patternsを参照してください。patternはやってしまいがちなパターンがまとめられています。@run-atメタデータ@run-atはdocument-startと指定することで,ページのDOM構築を待たずに,読み込みを開始したタイミングでスクリプトを実行します。実行タイミングが速いので,例えばショートカットキーなどをこのタイミングで登録すればユーザーの待ちを軽減することができます。当然ながらDOM要素にアクセスできないため,出来ることは大幅に制限されます。Scriptでも同様のことが可能ですが,run_atとdocument_startという組み合わせであり,ハイフンではなくアンダースコアという違いがあるので注意が必要です。ScriptがChromeで動くことは滅多にありません。OperaやSafariをサポートするスクリプトはChromeでも動作する可能性が高くなります。LightboxはChromeでも動作します。Scripts著者プロフィール太田昌吾(おおたしょうご,ハンドルネーム:os0x)1983年生まれ。JavaScriptをメインに,HTML/CSSにFlashなどのクライアントサイドを得意とするウェブエンジニア。Expertとして活動を開始。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。