定型処理の自動化をやってみましょう
前回は,日本語プログラミング言語のもつ背景的な部分と「なでしこ」の文法面に焦点を当てましたが,今回はなでしこの真骨頂である定型処理の自動化について見ていきます。
なでしこは,作者のクジラ飛行机さんが
『なでしこは「事務自動化ツール」として,プログラマでない人にも,プログラミングを使ってもらえるように考えて作っています(※1)。 』
と紹介しているように,文字列操作や日付時間処理のような基本的なものから,ファイル・ディレクトリ操作,ワードやエクセル操作,ファイルの圧縮解凍などが簡単に実現できるように,組み込みライブラリとして豊富な命令(関数)を持っています。
大事なデータをバックアップする仕組み
開発の仕事に従事している人であれば,CSVやSubversionといった構成管理ツールを使って作業成果物を管理していることと思います。また,そこまでではなくとも単純にファイルをコピーして退避することでバックアップとする人もいるかと思います。もちろんエクスプローラで「コピー&ペースト」してもいいのですが,この作業を「なでしこ」のスクリプトとして,リスト1のように,まずはごくごく簡単に実装します。
リスト1 所定のディレクトリを所定の場所にバックアップする
バックアップ対象は「{マイドキュメント}なでしこ」です。 ←――――――――――①
バックアップ先は「c:\_backup\」です。
#バックアップ対象のディレクトリ名を抜き出す
バックアップ対象からファイル名抽出し,バックアップ先にそれを追加する
もし,バックアップ先が存在するならば,
# バックアップ実行済みなので
終了する。
違えば
バックアップ先にフォルダ作成する。
バックアップ先にバックアップ対象をフォルダコピーする ←――――――――――②
「バックアップが完了しました。」と言う。
終了する。
特殊フォルダの扱いをどうするか
Windowsにはユーザアカウントに対応してパスが変わるマイドキュメントやデスクトップといった特別なフォルダが存在しています。これらのフォルダの物理パスは一定のルールに従ったパターンになっていますから,パス文字列をゴニャゴニャと操作すれば求めるフォルダにアクセスできることはできますが,いかんせん面倒くさいです。
そのような時には,リスト1の①のように「特殊フォルダ」というカテゴリのなでしこ組み込みの変数を使用することで,特別な操作をしなくてもこれらのフォルダにアクセスできるようになります。このサンプルコードでは特殊変数をブレースで囲っていますが,こうすることで囲まれた式を展開することができ,その結果全体としてバックアップ対象のフォルダへのパス文字列を作っています。カギ括弧は,Javaでのダブルクォテーションと同じ役割です。
表1 特殊フォルダの一例
| 変数名 | 物理パス |
|---|---|
| WINDOWSパス | c:\windows |
| デスクトップ | C:\Documents and Settings\ |
| マイドキュメント | C:\Documents and Settings\ |
ファイルシステム操作
対象のフォルダのコピーをしているのがリスト1の②になるのですが,命令「フォルダコピーする」を使うだけでサブディレクトリまで含めてのコピーが完了してしまいます。ファイルシステム操作の命令としては,コピー以外にも作成・移動・削除・名前変更・存在確認・ファイルの列挙など必要となりそうなものは一通りそろっています。
一般的に関数に引数を渡すときにはその順序は関数の定義通りに渡すことになりますが,なでしこではこの順番を関数定義とは異なる順序で渡すことができます。なでしこでは,引数と実引数のマッピングを「助詞」をキーにして行うため,その順序が異なっていても引数を対応させられるのです。そのため,「AをBにファイルコピーする」としても,「BにAをファイルコピーする」としてもどちらでもなでしこは正しく解釈をしてくれます。さらに,命令によっては引数の助詞を複数登録しているものがあるので,プログラムの文脈によって「AからをBへファイルコピーする」とより日本語らしい表現を選ぶことができるようになっています。

