IT ニュース&コラム 2018/ 8/12 通巻769号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ■■ 複雑な対象ファイルの集合を簡単に記述できる サブ フォルダー記号と FF-path 属性 ■■ フォルダーの中の特定の拡張子を持つファイルだけをコピーや削除したいことが よくあると思いますが、そのときに使うのが、*.bak のようなワイルドカードです。 * が任意の名前にマッチします。 今回は、ワイルドカードのように、複数のファイルや フォルダーのパスをまとめて指定する記述法についての話です。 ここで紹介する記述法は、 vbslib を使うツールで使えます。 vbslib は、以下からダウンロードできます。 Windows 用です。 http://vbslib.osdn.jp/ http://www.sage-p.com/vbslib/vbslib.htm https://github.com/TsNeko/vbslib バージョン管理ツール Git では、.gitignore ファイル(コミットに入れないパス)に glob と呼ばれるパターン マッチングの記述法で書くことができます。 Python スクリプト でも使えます。 glob はワイルドカードを少し発展させたようなもので、ごく一部の 正規表現が使えます。 ただし「ごく」一部です。 Python のヘルプには、 「glob モジュールは大きなチカラを秘めていて、どんな状況においても役に立ちます」 と大口をたたいていますが、実際はワイルドカードを超えて使えるケースは 非常に限られています。 1文字のどれかにしかマッチしないなんてありえません。 また、サブ フォルダーにあるすべての Debug フォルダーさえ記述できません。 zsh では、** を記述するとサブ フォルダーも含めて検索します。 しかし、 そういう意味であることが ** という記述からでは分かりにくいですし、 シェルを zsh に変更することは厳しいです。 vbslib に付属のツール(例:PickUpCopy)は、パスをまとめて指定するときに 「サブ フォルダー記号」と「FF-path 属性」(File or Folder as files Path attribute) を、設定ファイル(XML)に記述できます。 また、vbslib には、その記述法を処理する関数を 用意しています。 サブ フォルダー記号について説明します。 サブ フォルダー記号とは、 パスの最後の \ の左に付ける * または . のことで、この指定によって、 サブ フォルダーを検索するかどうかが変わります。 ・"*\file.txt" … サブ フォルダーも含めて file.txt を検索する ・".\file.txt" … サブ フォルダーも含めないで file.txt を検索する ・"fo\*\file.txt" … サブ フォルダーも含めて fo フォルダーの中の file.txt を検索する ・"fo\.\file.txt" … fo フォルダーにある file.txt を検索する また、パスの最後が \ のときは、フォルダー(ファイル以外)を明示的に 指定したことになります。 つまり、必ずフォルダーにマッチさせたいときは、 最後に \ を付けてください。 付けなくてもフォルダーにマッチしますが、 ファイルにもマッチします。 ・"*\Debug\" … サブ フォルダーも含めて、フォルダー名 Debug を検索する 次に FF-path 属性について説明します。 これは、階層構造を持った書式なら何でも使えますが、 主に XML に記述するときの記述法です。 FF-path 属性の処理モジュールは vbslib にあるの ですが、XML なら、XML パーサーと FF-path 属性の処理モジュールを結合した専用の関数 new_PathDictionaryClass_fromXML を用意しています。 以下では、XML での記述法を 説明します。 上記の XML ファイルで指定しているパスは、Sample.txt と SubFolder、 ただし、SubFolder フォルダーの中の *.obj と *.bak と SubFolder\Debug は対象外です。 FF-path 属性は、上記の path 属性のことです。 File タグ、Folder タグのそれぞれに ある path 属性が、FF-path 属性の機能を持っています。 FF-path 属性には、 サブ フォルダー記号を記述することができます。 なお、FF-path 属性の機能を持っているのが、 File タグと Folder タグであることと、属性名が path であることは、XML ファイルを 使うツールの仕様によって変わる可能性がありますが、vbslib に付属のツールについては、 変わりません。 Except タグは、対象外のパスを指定するタグです。 FF-path 属性を持っているタグの 子タグとして記述できます。 属性値には、サブ フォルダー記号が使えます。 また、CSV 形式で複数指定することができます。 なお、Except というタグの名前は固定です。 path という属性の名前は、親タグから引き継ぎます。 FF-path 属性には、変数の参照(Variable タグの参照)を記述することができます。 Variable タグは、FF-path 属性が使える XML ファイルでは必ず記述することができます。 なお、vbslib には、Variable タグを処理する LoadVariableInXML 関数が用意されており、 FF-path 属性が使えないツールでも使えることがあります。 FF-path 属性は記述する順序に依存しません。 それは、使いやすい仕様であることの 大事な要素です。 順序によって設定が異なるというのは、非常に分かりにくいです。 データファイルは、処理順序を記述するものではないのですから。 ただし、順序に依存しない仕様では、両方の設定パターンにマッチするときにどちらの 設定であるかが明らかでないと、これも使いにくくなります。 そこで、複数の FF-path 属性に マッチするとき、それが対象であるか対象外であるかは、以下の優先順位で決まる仕様に なっています。 上にマッチするほど優先されます。 基本的に長いパス(深いパス)が 特別な設定として優先されると考えてよいです。 しかし、それすら意識しなくても、 自然とそのような優先順位で設定は行われるものです。 ・ファイルのパス(長い) ・ファイルのパス(短い) ・ワイルドカードがあるパス(\ 記号を含み、長い) ・ワイルドカードがあるパス(\ 記号を含み、短い) ・ワイルドカードがあるパス(\ 記号を含まず、長い) ・ワイルドカードがあるパス(\ 記号を含まず、短い) ・フォルダーのパス(長い) ・フォルダーのパス(短い) たとえば、*\Debug が対象で A\*\Debug が対象外と指定したら、 A 以外のフォルダーの中にある Debug フォルダーにマッチするという意味ですが、 もし、*\Debug が優先されてしまうと、A\*\Debug の設定が完全に無視されてしまいます。 なぜなら、*\Debug ⊃ A\*\Debug (⊃は部分集合を表す)ので、たとえば、A\*\Debug に マッチする A\B\Debug は、*\Debug にもマッチしてしまうからです。 ところで、クリーンするときは、PickUpCopy ツールをお勧めします。 PickUpCopy は コピーを作るので、make clean と異なり、苦労して作ったファイルを誤って 消してしまうことがありませんし、コピー元のプロジェクトをフル ビルドしなくて済みます。 それを避けるためにコピーしてからクリーンをするかと思いますが、それこそ PickUpCopy で行っていることなのですが、削除するファイルをコピーしない分、高速に処理します。 また、.gitignore ファイルを使うと、リポジトリに入らないファイルなのに、 存在するものとしてコンパイルのテストをしてしまうため、不可全なコミットの原因に よくなってしまうのですが、PickUpCopy ツールでクリーンすると、その不具合の原因を 取り除くため、開発の品質も上がります。 もし、コミットをミスすると、他のメンバーが 数日間更新できなくなるなど、非常にコストが高くつくのに、.gitigore を使い続ける なんて無責任です。 ソース http://ja.pymotw.com/2/glob/ ■■ 注目ニュース 一覧 ■■ ◇ 海賊版サイト全滅させる。出版社との実証実験、赤松健さんの狙いは。 http://www.itmedia.co.jp/news/articles/1808/01/news115.html … 出版社でも処分した作品を、持っている人から再度公式化する。 ◇ 科学論文の海賊版 Sci-Hub を違法と訴える巨大出版社に対して根本的法改正の必要性を訴える科学者。 https://gigazine.net/news/20180806-sci-hub-prove-usefulness/ … コストは下がっているので、内容に関与しない宣言をするスポンサーだけで十分なのでは。 ◇ 海賊版サイトブロッキング問題、壇弁護士など連名で意見書。 http://www.itmedia.co.jp/news/articles/1808/10/news104.html … 海賊版サイト対策を簡単に考えると、政府が悪用してしまう。 ◇ 中国で英国国営放送のBBCサイトがブロックされる、なぜか? https://gigazine.net/news/20180812-bbc-blocked-in-china/ … https プロトコルを許さない中国。 ◇ ウェブサイトのAMP対応を行ってコンバージョン率が70%低下した理由とは? https://gigazine.net/news/20180810-google-amp-70-drop-conversion-rate/ … 原因の1つは google という URL。 ◇ Apple、YouTube、Facebookなど、陰謀論者として知られるアレックス・ジョーンズ氏を締め出す。 http://www.itmedia.co.jp/news/articles/1808/07/news057.html … 削除ではなく、非推奨と表示して、アクセスできるようにすべき。 ◇ 初音ミクが目の前で踊っているようにしか見えない疑似ホログラム技術を開発した猛者が登場。 https://gigazine.net/news/20180803-hatsune-miku-holography/ … ホログラム ディスプレイを安価に販売してほしい。 ◇ redditに不正アクセス、二要素認証では守り切れず。 http://www.itmedia.co.jp/enterprise/articles/1808/02/news056.html … SMS認証の二要素認証(2FA)が破られたので、トークンベースの 2FA に変更。 ◇ Microsoft 365 がコラボ機能を強化、就業時間外のメール送信にダメ出しも。 http://techtarget.itmedia.co.jp/tt/news/1808/02/news08.html … 禁止ではなくダメ出し。一歩間違えば監視社会に。 ◇ ホームから人が転落を駅のカメラで検知、駅員に通知。東急で運用開始、パナの技術活用。 http://www.itmedia.co.jp/news/articles/1808/09/news060.html … 駅員さんが少ない夜に稼働。 ◇ IoTデバイス用プログラミング言語 Eclipse Mita 登場。C言語へ変換、組み込み開発を容易に。 https://www.publickey1.jp/blog/18/ioteclipse_mitac.html … 言語的な機能はラムダ式の変化形ぐらいか。 ◇ Google、Cloud Build 発表。ビルド/テスト/デプロイの実行を、1日あたり120分まで無料。 https://www.publickey1.jp/blog/18/googlecloud_build1120github.html … 2時間無料であれば、学習でき、導入への検討ができるので注目。 ◇ Microsoftが27.6ペタバイトの海底データセンターに設置したウェブカメラの映像を公開中。 https://gigazine.net/news/20180810-microsoft-undersea-data-center/ … 冷房を動かすためのエネルギーによる地球温暖化を防ぐ。 ◇ すぐ怒る人は実際よりも自分が賢いと考えていることが判明。 https://gigazine.net/news/20180809-anger-people-think-smart/ … 自身の知力を高めに見積もり、楽観的なリスク認知をしている。 ■■ ソフトウェアデザイン館 Sage Plaisir 21 ■■ ホームページ >>> http://www.sage-p.com/ メルマガ >>> http://www.mag2.com/m/0000083983.html ブログ >>> http://blog.livedoor.jp/sage_p/ ツイッター >>> http://twitter.com/Ts_Neko ダウンロード >>> http://www.sage-p.com/freesoft.htm サポート掲示板 >>> http://www.sage-p.com/kg_ban09/z6037C8.cgi 東日本大震災 >>> http://www.sage-p.com/saigai.html メール >>> ts-neko◇sage-p.com ←◇を@に変えてください 緊急メールは件名に「うどんメール」を付けてください。 このメルマガの登録・解除 - http://www.mag2.com/m/0000083983.htm