「
利用者:Sukemaru
」を編集中
2019年8月27日 (火) 17:00時点における
Sukemaru
(
トーク
|
投稿記録
)
による版
(
差分
)
← 古い版
|
最新版
(
差分
) |
新しい版 →
(
差分
)
ナビゲーションに移動
検索に移動
警告: このページの古い版を編集しています。
公開すると、この版以降になされた変更がすべて失われます。
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
= マクロライブラリに投稿したマクロ = == 「テキスト操作補助」 カテゴリ == *[[行頭か行末 または 選択範囲の始点か終点|行頭か行末 または 選択範囲の始点か終点 に移動]] (last modified: 2019/03/29) *[[文書の先頭か末尾|文書の 先頭か末尾 に移動]] (last modified: 2019/03/29) *[[対応する括弧に移動#範囲選択の拡張|「対応する括弧に移動」の追加コード]] (last modified: 2019/05/12) *[[バイト数#バイト数と文字数・行数|バイト数と文字数・行数]] ※イベントマクロ (last modified: 2018/11/18) *[[日付と時刻を挿入#sukemaru 版|日付と時刻を挿入]] (last modified: 2018/12/09) *[[行を複製 (複数行可)]] (last modified: 2019/05/07) *[[字下げ・字上げ#sukemaru 版|字下げ・字上げ(スペース×2 追加・削除)]] (last modified: 2019/04/07) :[[字下げ・字上げ#インデント|インデント/逆インデント]] *[[貼付け実行後のカーソル位置を貼付け文字列の先頭にする#sukemaru 版|貼付け実行後のカーソル位置を貼付け文字列の先頭にする]] (added: 2018/11/14) *[[行の先頭に貼り付け]] (uploaded: 2018/08/24) *[[引用符/コメント]] ※ポップアップメニュー (last modified: 2019/04/07) ※行頭の文字列操作マクロ「引用の追加」の増補改訂版 *[[カッコで囲う]] ※ポップアップメニュー (last modified: 2019/04/07) :[[カッコで囲う#カッコで囲う (ポップアップメニューなし)|カッコで囲う (簡易版 ポップアップメニューなし)]] :[[カッコで囲う#引用符を追加/削除|引用符を追加/削除]] ※"二重引用符" の追加/削除トグル *[[定型文を挿入|定型文を挿入 マクロ集]] (uploaded: 2018/12/03) <br> <gallery heights=192px> ファイル:引用符/コメント_ポップアップメニュー.png|heights=240px|引用符/コメント ファイル:カッコで囲う_ポップアップメニュー.png|heights=240px|カッコで囲う </gallery><br clear=all> == 「ファイル操作補助」 カテゴリ == *[[ファイルのプロパティ]] (uploaded: 2018/12/18) *[[選択範囲のURL・パスを開く|ひらけゴマ!]] (last modified: 2019/04/07) ※選択範囲のURL・パスを開く *[[ブックマーク一覧ジャンプ#sukemaru 版|ブックマーク一覧ジャンプ]] (通常版/include版) ※ポップアップメニュー (last modified: 2019/04/16) *[[編集モードの自動選択]] または 「'''書き換え禁止で開く'''」 (通常版/include版) ※イベントマクロ (last modified: 2019/04/24) *[[特定のフォルダで「ファイルを開く」ダイアログ]] (last modified: 2018/12/19) *[[すべて閉じる|すべて閉じる マクロ集]] (last modified: 2019/05/03) :「他(右側/左側)のタブを閉じる」 などを追加 *[[ファイルを読み直す・開きなおす]] (通常版/include版) ※ポップアップメニュー (last modified: 2019/05/30) :エンコード指定で読み直し・読み取り専用属性の変更・編集モードの変更・プロパティを開く・さいごに閉じたファイルを開く・etc. *[[さいごに閉じたファイルを開く]] ※ポップアップメニュー (uploaded: 2019/04/30) <br> <gallery widths=200px> ファイル:Mery_ブックマークジャンプ_SS(1).png|ブックマークジャンプ 【include版】 ファイル:Mery_すべて閉じる(入力).png|すべて閉じる: 入力ダイアログ ファイル:Mery_すべて閉じる(メニュー).png|すべて閉じる: ポップアップメニュー </gallery><gallery widths=200px> ファイル:ファイルを読み直す・開きなおす.png|ファイルを読み直す 【通常版】 ファイル:ファイルを読み直す・開きなおす【自家用版】.png|ファイルを読み直す 【include版】 </gallery><br clear=all> == 「変換・ソート・整形」 カテゴリ == *[[昇順で並び替え/降順で並び替え]] トグル変換 (uploaded: 2019/06/03) *[[TrueとFalse_を切り替える|YES/NO マクロ]] (last modified: 2018/11/27) ※「<span style="color:#0000c0;">True</span>」 ⇔ 「<span style="color:#c00;">False</span>」 トグル変換 :+ 改造版「'''ToDoリストモード'''[https://www.haijin-boys.com/software/mery/mery-2-7-0#comment=2240]」 (added: 2019/05/06) *[[全角/半角 トグル変換]] (last modified: 2019/05/20) ※「ABCアイウエオ」 ⇔ 「ABCアイウエオ」 *[[大文字/小文字/頭文字 トグル変換]] (last modified: 2019/05/20) ※「Abc」 → 「ABC」 → 「abc」 ... *[[ひらがな/カタカナ変換]] (uploaded: 2019/07/06) ※「あいうえお」 → 「アイウエオ」 / 「カキクケコ」 → 「かきくけこ」 *[[文字列の順番を逆に書き出す]] (uploaded: 2019/07/06) ※「あいうえお」 → 「おえういあ」 <br> == 「検索・置換」 カテゴリ == *[[ポップアップメニューで検索先にジャンプ#sukemaru 版|ポップアップメニューで検索先にジャンプ]] (通常版/include版) (last modified: 2019/04/16) <br> +おまけマクロ「[[マテリアルデザインっぽいアイコンと『小マクロ集』#次の文字列を検索|次の文字列を検索]]/[[マテリアルデザインっぽいアイコンと『小マクロ集』#前の文字列を検索|前の文字列を検索]] (検索オプションをリセット&強調なし)」他 *[[検索ヒット数表示(選択文字列)]] ※イベントマクロ (last modified: 2019/07/20) :+ 機能強化版「[[検索ヒット数表示(選択文字列)#機能強化バージョン|文字数・行数・ヒット件数(選択文字列)]]」 ※イベントマクロ (added: 2019/08/26) <br> [[ファイル:Mery_ジャンプ_SS_2.png|240px|thumb|left|検索ジャンプ 【include版】]] <br clear=all> == 「プログラミング補助」 カテゴリ == *[[コメントマーク付け外し#sukemaru 版|行コメント]] (last modified: 2019/04/07) ※コメントマーク付け外し <br> == 「実験的マクロ・練習マクロなど」 カテゴリ == *【自家用】 [[カッコをはずす]] & [[カッコをはずす#カッコを削除/追加|カッコを削除/追加 トグル]] & [[カッコをはずす#カッコを追加/削除|カッコを追加/削除]] (last modified: 2019/05/03) *【自家用】 [[ファイルのフルパスをコピーして閉じる]] ※イベントマクロ (last modified: 2019/04/14) *【自家用】 [[行を上下に移動(Mery 2.7 用)]] (uploaded: 2019/05/07) *【自家用】 [[全角/半角変換]] (last modified: 2019/05/11) *【実験】 [[ファイルへ移動(物理座標ジャンプ)]] (uploaded: 2019/05/15) *【実験】 [[位置情報を保存してから「次の文字列を検索」]]+'''復帰''' (uploaded: 2019/05/28) *【実験】 [[タブが「縦書き」モードかチェックする]] ※組み込み用関数 (uploaded: 2019/04/29) :サンプルコード: 「特定の条件で縦書きモードに切りかえる」(※ ver 2.6.5 - 2.7.5 用) *【自家用】 [[「クリップボード履歴」メニューのマクロ化]] ※ポップアップメニュー (last modified: 2019/08/05)<br> ※「スニペット」の機能を統合 / ※ ver 2.8.1 以降用 *【自家用】 [[アクティブなタブのマクロを実行する]] (uploaded: 2019/08/12) *【自家用】[[行の表示方法を切り替える]] (last modified: 2019/08/24) ※論理行/表示行 トグル切り替え <br> *【実験】 [[ブックマークを復元(Mery 2.7用)]] (last modified: 2019/04/07 → '''2019/04/12 削除''') <br> [[ファイル:ブックマークを復元D.png|link=|240px|thumb|left|ブックマークを復元]]<br clear=all> == 「その他」 カテゴリ == *[[折り返しトグル切り替え]] (added: 2019/02/19 ※w/ Bleat氏) *[[Mery.iniのオプション値を取得]] ※組み込み用関数 (last modified: 2019/08/27) *[[Mery本体のバージョンチェック]] ※組み込み用関数 (uploaded: 2019/04/17) :サンプルコード: 「Begin/EndUndoGroup() メソッドを使えるのは ver 2.7.0 以降」 *[[IO.Serialize() の JSON を参照する]] ※組み込み用関数 (uploaded: 2019/04/17) *[[ポップアップメニューを「n*十件ずつ」のサブメニューに自動分割する]] ※組み込み用関数 (uploaded: 2019/04/20) :サンプルコード: 「すべての論理行をポップアップメニューに表示する」 <br> <gallery widths=200px> ファイル:Mery_関数_JsonContents.png|192px|JSON ファイルを開く ファイル:Mery_分割サブメニュー_SS(1).png|192px|分割サブメニュー 1 ファイル:Mery_分割サブメニュー_SS(2).png|192px|分割サブメニュー 2 </gallery><br clear=all> *[[キーアサイン集]] (last modified: 2018/10/19 ※w/ ks氏, masme氏, 有志) *[[マテリアルデザインっぽいアイコンと『小マクロ集』]] (last modified: 2019/05/01) ※アイコン収録数'''300'''コ <gallery heights=320px> ファイル:Mery用_マテリアルデザインっぽいアイコン.icl.png|heights=320px| アイコン 一覧画像 ファイル:Mery_小マクロ集_アウトライン.png|heights=320px|小マクロ集 アウトラインイメージ </gallery><br clear=all> == sukemaru 自作マクロについて == * sukemaru の Mery 運用環境はロースペックの Windows XP sp3 (32bit), JScript 5.8.20587 のノート PC です。<br> ※ 制作したマクロの動作テストは、この XP 機でしかおこなっていません。<br> ※ マクロの動作テストに使用している Mery のバージョンは、最新の "ベータ版" (または最新の "正式版" ver. 2.6.7) のみです。基本的に ver 2.6.7 以降のバージョンで動作するように作成していますので、ver 2.6.6 以前のバージョンでの利用を想定していません(2.6.6 以下での動作確認をしていません)。<br> ※ ZIP 版の Mery でマクロを作成・運用しているので、インストーラ版では正しく動作しないマクロがあるかもしれません。<br> ※ 開発環境が Windows XP なので、変数はすべて '''''var''''' で宣言し、JScript 5.8 の環境で実行できるようにコーディングしています。 * Mery のオプション設定で「行の表示方法=論理座標(論理行)」の状態で運用する前提でマクロを作っています。公開しているマクロでは、「表示座標(表示行)」ベースで Mery を運用している場合でも利用できるように設定項目(変数)を設けるか「行の表示方法」を自動判定するコードを追加していますが、動作が不完全になったり処理がおそくなったりすることがあります。<br> ※「表示座標(表示行)」ベースでの動作テストはほとんどしていません。 * ソースコード内ではしばしば unicode 文字を使用していますので、マクロの JS ファイルは UTF-8 形式で保存する前提となっています。 * ソースコード内の変数名の検索などで「[[ポップアップメニューで検索先にジャンプ]]」マクロを利用しやすいように、コードには半角空白を多用しています。 * 変数名は頭文字が小文字の camelCase に、関数名は頭文字が大文字の TitleCase にしてあります。 * 「[[includeライブラリ|include ライブラリ]] (作成: ks 氏)」を利用する【'''include 版'''】と利用しない【'''通常版'''】とがあるマクロでは、include 版を優先的にメンテ・更新しています。 * 外部実行ファイル「[[GetKeyState.exe(キー状態取得実行ファイル)|GetKeyState.exe]] (作成: pizz 氏)」の導入が必要なものもあります。[https://www.haijin-boys.com/wiki/GetKeyState.exe(%E3%82%AD%E3%83%BC%E7%8A%B6%E6%85%8B%E5%8F%96%E5%BE%97%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)#.E3.81.9D.E3.81.AE.E4.BB.96] * ポップアップメニューマクロの「設定変更サブメニュー」など、複数のマクロで共通の自作関数を使用しているものがありますが、当面は「include ライブラリ」のような外部ファイルにまとめる予定なしです。<br> ※ すでに公開しているマクロが多いこと、公開用と自家用とでコードの内容がちがうマクロが複数あること、それぞれのマクロごとに関数のコードに改変をくわえていることなどの理由で、関数・クラスを統一しなおして更新メンテするのが困難。 * 「[[マテリアルデザインっぽいアイコンと『小マクロ集』|マテリアルデザインっぽいアイコン]]」は、sukemaru の自作マクロと、sukemaru がマクロライブラリから DL して利用しているマクロを対象として制作しています。 = マクロ覚え書き = ; リンク * マクロライブラリにある ks 氏らの「[[マクロ覚え書き(開発者向け)|マクロ覚え書き]]」 * 黄身氏の「[[利用者:黄身#覚え書き|覚え書き]]」 === アイコン化したマクロ === 通常、フォーカスがアウトプットバーやアウトラインペイン、検索/置換ダイアログにあると、ポップアップメニューやショートカットキーからマクロを起動することはできない。<br> '''Document''' オブジェクトのかわりに '''Editor.ActiveDocument''' で記述したマクロであれば、エディタ領域にフォーカスがない場合でもツールバーアイコンやマクロメニューからマクロを起動できる。<br> ただし、アクティブなタブ以外を操作・編集するマクロにおいては Editor.Documents.Item( dd ) などのような記述が必要。 === ポップアップメニュー === * PopupMenu.Add() メソッドの第三引数 Flags : int を数値化すると <source lang="javascript"> meMenuChecked = 1 meMenuGrayed = 2 meMenuChecked + meMenuGrayed = 3 meMenuSeparator = 4 </source> : となるので、真偽値が true=1 / false=0 で評価されることを利用して、真偽値を返す変数や条件式を代入することができる(ただし Number 型に変換する必要がある)。 <source lang="javascript"> var menu = CreatePopupMenu(); var hoge = true; var fuga = false; menu.Add( "Hoge", 1, + hoge ); // "+" を付けて数値化すると meMenuChecked menu.Add( "Fuga", 2, !fuga * 2 ); // (!fuga = 1) *2 なので meMenuGrayed var num = menu.Track( mePosMouse ); </source> * for 文などのループ処理によって配列からポップアップメニューのアイテムを生成する場合に、 PopupMenu.Add() メソッドの第二引数 Id (※通常は 1 ~ )と配列のアイテムのインデックス [i] の値(※通常は 0 ~ )を一致させたいときは、配列の先頭にダミーまたは空の要素を置いておき、ループ処理の開始インデックスを 1 にする。 <source lang="javascript"> var a = new Array( "" ); // 先頭に空のダミー要素を入れておく a.push( "あああ" ); a.push( "いいい" ); a.push( "ううう" ); // a = [ "", "あああ", "いいい", "ううう" ] となる var menuA = CreatePopupMenu(); for ( var i = 1; i < a.length; i ++ ) { // 開始値を 1 にすると menuA.Add( a[i], i ); // Id を ( i + 1 ) にする必要がない } var num = menuA.Track( mePosMouse ); // c.f. 空要素なしの配列 [ "あああ", "いいい", "ううう" ] をループ処理する場合 var b = [ "あああ", "いいい", "ううう" ]; var menuB = CreatePopupMenu(); for ( var i = 0; i < b.length; i ++ ) { menuB.Add( b[i], i + 1 ); // Id を 1 ~ にするには ( i + 1 ) } </source> === 選択範囲の 先頭位置/末尾位置 === 選択範囲の 開始(キャレットなし)/終了(キャレットあり) の位置は Selection.GetAnchorPos() と Selection.GetActivePos() とで取得できるが、先頭/末尾 の位置はそれらをもとにして前後関係を割りだす必要がある。 <source lang="javascript"> var ancPos = Document.Selection.GetAnchorPos(); // 選択開始位置 var actPos = Document.Selection.GetActivePos(); // 選択終了位置(キャレット位置) var topPos = Math.min( ancPos, actPos ); // 選択範囲の先頭位置 var endPos = Math.max( ancPos, actPos ); // 選択範囲の末尾位置 </source> === スクロール位置の調整 === キャレットをジャンプさせた後のスクロール位置とキャレット位置は、移動した行数がエディタの表示領域の高さに収まるかどうか(スクロールマージンの考慮が必要)とジャンプ方向によるので安定的ではない。<br> 以下のコードは、ジャンプ後にエディタの表示領域がスクロールした場合に、キャレットが表示領域の先頭位置になるように調整するもの。 <source lang="javascript"> var s = Document.Selection; var ax = s.GetActivePointX( mePosLogical ); // キャレット位置の X var ay = s.GetActivePointY( mePosLogical ); // キャレット位置の Y var sy = ScrollY; // エディタ表示領域の先頭行(物理行番号+スクロールマージン) // 下方向に10行(論理行)ジャンプ s.SetActivePoint( mePosLogical, ax, ay + 10 ); // スクロールしないならそのまま / スクロールするならキャレットは表示領域の先頭に ScrollY = ( ScrollY == sy ) ? sy : s.GetActivePointY( mePosView ); // つねにジャンプ先の行が先頭になるようスクロールさせるなら // ScrollY = s.GetActivePointY( mePosView ); </source> === カレントディレクトリ === カレントディレクトリは、Mery を起動したときに決定され、一定ではない。<br> 記述の都合上で相対パスを利用するマクロにおいては特定のカレントディレクトリの指定が必要な場合もあるが、あえて「流動的なカレントディレクトリ」を利用するようなマクロがほかにある(かも知れない)ことを考慮しておいたほうがよい(…とおもう)。 <source lang="javascript"> var fso = new ActiveXObject( "Scripting.FileSystemObject" ); var wshShell = new ActiveXObject( "WScript.Shell" ); var meryIni = Editor.FullName.replace( /exe$/, "ini" ); if ( fso.FileExists( meryIni ) ) { // メモ帳で Mery.ini を開く wshShell.Run( "notepad \"" + meryIni + "\"" ); } else { // マクロ実行前の作業フォルダを保存 var currentDir = wshShell.CurrentDirectory; // 相対パス解決のためにカレントディレクトリを設定 e.g. %AppData%\Mery wshShell.CurrentDirectory = wshShell.SpecialFolders( "APPDATA" ) + "\\Mery"; wshShell.Run( "notepad " + "Mery.ini" ); // マクロ実行前の作業フォルダを復帰 wshShell.CurrentDirectory = currentDir; } </source> === バージョンチェック === Mery ベータ版で追加されたマクロ用プロパティを利用する場合は、マクロの動作要件として Mery 本体のバージョンチェックをするのが無難である。<br> JavaScript には特定のプロパティがオブジェクト配下に定義されているかを調べる方法が色々とあるが、専用の組み込み関数 [[Mery本体のバージョンチェック|VersionCheck()]] を利用すれば Mery のバージョン番号を指定してのチェックができる。 === 外部リソースのチェック === #include "include/IO.js" のようなプリフィクスがソースコードの先頭で宣言されていれば問題ないが、[[includeライブラリ|include ライブラリ]] がなくても、プリフィクスを削除(コメントアウト)すればマクロがある程度動くようにコーディングすることもできる。 <source lang="javascript"> if ( typeof IO == "object" ) { /* IO.js がインクルードされているときの動作 */ ; } else { /* IO.js がインクルードされていないときの動作 */ ; } </source> また、[[GetKeyState.exe(キー状態取得実行ファイル)|GetKeyState.exe]] のあるなしで動作内容を分けるなら、以下のようにコードを記述すればよい。 <source lang="javascript"> // あらかじめ変数 ctrl に 0 を代入しておく var ctrl = 0; // GetKeyState.exe のパスで実行ファイルの実在確認をする var getKeyState = editor.FullName.replace( /mery\.exe$/i , "" ) + "Macros\\GetKeyState.exe"; if ( new ActiveXObject( "Scripting.FileSystemObject" ).FileExists( getKeyState ) ) { // GetKeyState.exe からの戻り値(Ctrl キーの押し下げ状態)を取得する var WshShell = new ActiveXObject( "WScript.Shell" ); ctrl = WshShell.Run( "\"" + getKeyState + "\" control", 0, true ); } if ( ctrl == 1 ) { /* GetKeyState.exe があり、Ctrl キーが押されているとき */ ; } else { /* GetKeyState.exe がない、または Ctrl キーが押されていないとき */ ; } </source> = 投稿した構文ファイル = *[[Mery MSY]] (uploaded: 2018/09/05) : Mery の MSY 構文ファイル用 *[[Mery Macro JS]] (last modified: 2018/11/10) : マクロの JS ファイル(JScript)用 : JavaScript 用構文ファイル/入力補完用辞書/スペルチェック用辞書/おまけマクロ を同梱 : ※ Web 開発向けのプロパティは収録していない *[[JaneStyle (正規表現用)]] (uploaded: 2018/08/31) : ReplaceStr.txt / ImageViewURLReplace.dat / URLExec.dat / command.dat に対応 : ※ bregonig の正規表現のハイライト可 ( onigmo にも利用可) = スクショ = ; マクロバーのアイコン化 マクロバー (1段目) にアイコンを詰めこむための sukemaru の試行錯誤の遍歴... *'''共通''' : Windows XP (Classic テーマ) : ウインドウサイズ (幅): 約 970 pxl : アイコンサイズ: 中 (24px) : アイコン:[[マテリアルデザインっぽいアイコンと『小マクロ集』|マテリアルデザインっぽいアイコン]] : 標準ツールバー (2段目) のアイコン数: 28 コ <br> * [https://www.haijin-boys.com/software/mery/mery-2-8-0#4 Ver. 2.8.0](2019/06/22) : マクロバーのアイコン数 28 コ、ラベルなし、セパレータあり( #begingroup=3 ) :[[ファイル:Mery_2.8.0_SS.png|link=https://www.haijin-boys.com/wiki/images/1/1b/Mery_2.8.0_SS.png|480px|thumb|left|Ver. 2.8.0]]<br clear=all> * [https://www.haijin-boys.com/software/mery/mery-2-7-5#12 Ver. 2.7.8](2019/06/13) : マクロバーのアイコン数 22 コ半、ラベルなし、余白あり( #title="" )<br> ※ 3段目は外部ツールバー (アイコン 30 コ) :[[ファイル:Mery_2.7.8_SS.png|link=https://www.haijin-boys.com/wiki/images/5/54/Mery_2.7.8_SS.png|480px|thumb|left|Ver. 2.7.8]]<br clear=all> * Ver. 2.7.4 まで(2019/05/05) : マクロバーのアイテム数 16 件、ラベルあり(文字数を切りつめてやり繰り) :[[ファイル:Mery_2.7.4_SS.png|link=https://www.haijin-boys.com/wiki/images/3/3f/Mery_2.7.4_SS.png|480px|thumb|left|Ver. 2.7.4]]<br clear=all>
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
利用者ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク