-いろいろなフォルダに散らばってるWordファイルを全部まるごと収集したい時ってありませんか。OSの検索ツールなどを利用して検索できるのですが、まとめて特定のフォルダにコピーするというのは、なかなか骨の折れる作業です。そこで、今回は、Go言語を利用して、特定ファイルを収集してコピーするツールを作ってみます。任意ファイルを検索してコピーするツール今回作成するのは、特定のパターンに合致するファイルを検索して、任意フォルダにコピーするプログラムです。このツールを作るのに必要なのは、ファイルをコピーする機能と、ファイルを検索する機能です。この二つの機能は、Go言語の標準ライブラリを使って実現できます。そこで、ツールを作るのに際して、必要となるこの二つの関数の使い方を確認し、その後で、コマンドラインから使えるファイル収集ツールを完成されてみましょう。最初にファイルをコピーする方法を確認しておきましょう。意外なことに、原稿執筆時点でGo言語には、ファイルのコピーを行うコマンドは存在しません。そのため、ファイルをコピーしたい時には、次のようにしてファイルの内容を読み込んで、ファイルへ書き込むという手順を自分で記述するしかありません。以下のプログラムは、「aa.txt」から「bb.txt」へファイルコピーを行うものです。}}プログラムを実行するには、上記プログラムを「copyfile.go」という名前で保存します。copyfile.go」と入力すると、プログラムを実行できます。上記のプログラムでは、(*1)の部分でファイルの内容全部をメモリに読み込みます。(*2)の部分でファイルへ書き出します。ioutilのReadFileとWriteFileを利用することで、手軽にファイルの読み書きが可能です。このプログラムは、最も単純なファイルコピーの実装方法であり、巨大なサイズのファイルをコピーすることはできません。ファイルのコピーは、様々な手法が考えられるので、興味のある方は調べて見ると良いでしょう。Go言語の特徴ですが、多くの関数では処理の実行が失敗した場合、error型のデータが返されます。そのため、ReadFileやWriteFileで処理が失敗したかどうかを確認するには、戻り値がnilかどうかを確認します。nilであれば正しく実行できたことになり、nilでなければerror型のデータを確認し処理が失敗した理由を確かめることになります。次に、ファイルの一覧を取得する方法を見てみましょう。最初にカレントディレクトリにあるファイル一覧を取得してみます。}}上記のプログラムを「files.go」という名前で保存します。files.go」を実行してみましょう。すると、カレントディレクトリにあるファイルの一覧を取得して表示します。カレントディレクトリのファイル一覧が表示される指定ディレクトリにあるファイル一覧を取得するのが、ioutil.ReadDir関数です。引数にディレクトリを与えると、string型のスライスを返します。ちなみに、ファイルの一覧に関しては、前回詳しく解説しています。特定のファイルをまるごと収集するツールここまでの部分で、Goの関数の使い方を確認できました。それでは、特定のファイルをまるごと収集するツールを作ってみましょう。以下のプログラムを「atumeru.go」という名前で保存しましょう。true}このプログラムは、ビルドして利用します。atumeru.go」を実行します。すると、実行ファイルが生成されます。以下はカレントディレクトリ以下にある、Wordファイルを検索して、見つけたWordファイルをカレントディレクトリにコピーします。(検索ディレクトリ)」の書式で利用します。プログラムを見てみましょう。(*1)の部分では、コマンドライン引数を取得します。os.Argsには、コマンドライン引数が入っています。(*2)の部分では、正規表現パターンをコンパイルし、ファイルの一覧を取得します。(*3)の部分でファイルの一覧を元にしてカレントディレクトリにそのファイルをコピーします。(*4)の部分ではファイルを任意パターンにマッチするファイルを検索します。ファイルの一覧を得て、ディレクトリであれば、そのディレクトリの中も検索するように再帰的にsearchFilesを呼び出します。(*5)の部分では、正規表現パターンにマッチするか調べて、マッチしていれば、検索結果に追加します。まとめ以上、今回は、コマンドラインから利用する、任意パターンのファイル収集ツールを作成してみました。Go言語はこうしたちょっとしたツールを作るのにも向いています。ところで、今回のツールはまだまだ改良の余地が残っています。収集したファイルに同名ファイルがある場合、上書きしてしまうので、ファイルが既にある場合は、ファイル名に数字をつけて上書きを回避する機能を追加するのも良いでしょう。ディレクトリの階層が深い場面では、検索に時間がかかってしまうので、検索する階層を指定できるようにオプションを追加するのも良いでしょう。ツールを改良したり、自分のアイデアを付け加えたりしていくことで、ツールに対する愛情が増していきます。プログラミングの実力アップにもつながりますので、挑戦してみると良いでしょう。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。テキスト音楽「サクラ」など。※本記事は掲載時点の情報であり、最新のものとは異なる場合があります。Corporation。