【コラム】

日本語で10行プログラミング

74 メモリカード挿入でデータをコピーするツール

74/90

開発日誌~イベントでライブコーディングしました!

先日、なでしこのバージョンアップを行いました。今回のバージョンアップでは、SDカードやUSBメモリなどのメモリカードが挿入されたことを検知できる機能を付加しています。これを付加した目的は「USBメモリの抜き挿しで遊ぶゲームを作るため」という、なんともバカバカしい理由からでした。

9月2日の夕方から品川で「エンジニアな洋館」というエンジニアが集うイベントがありました。このイベントで私はライブコーディングといって、大勢のイベント参加者の前で時間内に宣言したプログラムを完成させるという試みに参加したのです。私はせっかくのイベントなので、何かウケるものを作らなくてはと思い、急遽なでしこに機能追加をしてみたのです。

そしてUSBメモリを抜き差しすると大根が輪切りにされ、時間内に何回大根を切ることができるのかというゲームを作ることができました。この珍妙なゲームは、こちらのサイトで公開しています。遊ぶ時は、USBポートを壊さない程度に気をつけて遊んでみてください。

ライブコーディングは、エンジニアの人がどんな環境でプログラムをしているのか、どんな風にプログラムを完成させていくのかをじっくり観察できる面白いイベントです。私も今回初めて見たのですが、とても楽しかったです。

メモリカードコピーツールの設計

さて、せっかくの新しい機能「メモリデバイス挿入の検出」を大根の輪切りのためだけに使うのは非常にもったいないので、ここでちょっとしたメモリカードを使ったツールを作ってみましょう。

たとえば、デジタルカメラのデータが入ったメモリカードが挿入されたなら、それを検出して撮影した写真をパソコンに取り込むツールにも使えます。また、携帯電話のメモリカードが挿入されたと同時に、カードの中のアドレス帳やメールのデータをバックアップするツールなどなど、いろいろな利用方法が考えられます。

今回は、メモリカードが挿入された時に、その内容をHDDにコピーするというツールを作ってみます。このツールの動作は以下の通りです。

  1. ユーザーがメモリカードをPCに挿入した時に以下を実行する
  2. どこに挿入されたのかを示し、コピーが必要か尋ねる
  3. コピー不要なら何もしないので処理を抜ける
  4. コピーが必要なら、どこへコピーするのかフォルダを選択してもらう
  5. フォルダが選ばれなければ、コピーしないので処理を抜ける
  6. 挿入されたドライブの内容を指定フォルダへコピーする

プログラムは、とても単純な処理の連続となっています。ここで、このプログラムを作る上で必要となる命令の説明をしてみます。

「デバイス挿入した時」のイベント

USBメモリなどメモリカードが挿入された時に処理を実行するには、「母艦のデバイス挿入した時」というイベントを指定します。これは、前回のバージョンアップで追加した機能ですので、この命令を使うには、なでしこのバージョン1.4011以降が必要になります。

たとえば、一番簡単な例として、メモリカードを挿入したら、「挿入されました★」とメッセージを表示するだけのプログラムは以下のようになります。

母艦のデバイス挿入した時は~
  「挿入されました★」と言う。

メモリカードなどを挿入するとメッセージが表示されます

なでしこではイベントを記述する時は、このように「(オブジェクト名)の(イベント名)は~」に続けて、イベント処理の内容を書きます。イベントの内容は、改行してインデントして(行下げ)した部分に書きます(なでしこではこのインデントが重要な意味を持ちます)。また、なでしこプログラミングで頻繁に出てくる「母艦」というのは、メインウィンドウを意味するオブジェクトの名前です。

そして、挿入されたデバイスがどのドライブに割り当てられたのかを知るには、イベント直後に変数「それ」を調べます。以下のプログラムはメモリカードが挿入された時に、どのドライブが挿入されたかを表示します。

母艦のデバイス挿入した時は~
  挿入ドライブは、それ。
  「{挿入ドライブ}が挿入されました」と言う。

どのドライブへ挿入されたのか判別します

イエスかノーかを尋ねる「二択」命令

次にメモリカードが挿入された時に、内容をコピーするかしないかを尋ねるには、「二択」命令を使います。これは『「質問内容を」と二択。』のように使います。すると、質問および「はい」と「いいえ」のボタンのついたダイアログを表示します。そしてユーザーがどちらかを選ぶまで処理を停止します。そしてユーザーが選んだ答えは、変数「それ」に「はい」か「いいえ」のどちらかが代入されます。以下が簡単な使い方です。

「コピーしますか?」と二択。
もし、それがはいならば
  「コピーする」と言う。
もし、それがいいえならば
  「コピーしない」と言う。

二択ダイアログを表示します

フォルダを選んでもらう「フォルダ選択」命令

それから、コピー先のフォルダを選択してもらうために用いるのが「フォルダ選択」命令です。この命令を使うと、フォルダ選択ダイアログを表示し、ユーザーにフォルダを選んでもらうことができます。

ユーザーが選択した結果は、変数「それ」に代入されます。もし、ユーザーが何も選択せず、「キャンセル」ボタンを押した時は、変数「それ」の内容が空になります。

フォルダ選択。
それを言う。

フォルダの選択ダイアログを表示します

10行プログラム~メモリカードコピーツール

では、10行でメモリカードのコピーツールを作ってみます。

母艦のタイトルは「メモリカードコピーツール」#1
「メモリカードを挿入してください。」と表示。#2
母艦のデバイス挿入した時は~#3
  挿入ドライブはそれ。#4
  「"{それ}"の内容をコピーしますか?」と二択。#5
  もし、それがいいえならば、戻る。#6
  フォルダ選択。コピー先はそれ。#7
  もし、それが空ならば、戻る。#8
  「{挿入ドライブ}:\*」からコピー先へファイルコピー。#9
  「コピーしました。」と言う。#10

メモリカードを挿入するとコピー先を訪ねてきます

1行目では、メインウィンドウ「母艦」のタイトルを「メモリカードコピーツール」と変更しています。2行目では、画面にメッセージを表示しています。3行目では、メモリカードなどのデバイスが挿入された時のイベントを設定しています。4行目では、挿入されたドライブ名を覚えておきます。変数「それ」が何か命令を実行するたびに書き換えられてしまうためです。5行目では、「二択」命令を用いてユーザーにコピーするかどうかを選んでもらいます。

6行目では、「いいえ」が選択された時に処理から抜けるようにしています。「戻る」命令は、イベント処理や関数から抜ける時に利用します。7目では、「フォルダ選択」命令を用いてユーザーにフォルダを選択してもらいます。8行目は、ユーザーがキャンセルを押した時に、処理から抜けるようにしています。9行目では、ファイルの一括コピー処理を行います。10行目では、コピーした旨を表示しています。

改造のヒント

今回のプログラムでは、メモリカードの全データをコピーするツールです。しかし、特定の一部分だけをコピーしたい場合もあります。

そんな時はメモリカード以下のフォルダを選択してもらったり、はじめからコピーしたい部分が分かっている時は、上の10行プログラムの9行目のコピーするパスを変更したりと工夫してみてください。

また、以前、当コラムの5556回目で、携帯電話をテキストビューワーとして使うプログラムを作りましたが、これと組み合わせてメモリカードが挿されたら、最新のニュースをダウンロードしてメモリカードにコピーできるようにすると、さらに便利になるのではないでしょうか。ぜひ、試してみてください。

74/90

インデックス

連載目次
第90回 10行プログラミング最終回~10行プログラミングを振り返って
第89回 フォルダ一括圧縮
第88回 テキストエディタに貼り付けたExcelの表を見やすく整形する
第87回 一発加算電卓
第86回 ブログにHTMLソースを貼れるよう変換する
第85回 カード式メモ帳
第84回 時間電卓を作る
第83回 アスキーアート地図エディタ
第82回 縦書き風テキスト作成ツール
第81回 Excelシートの比較を行う
第80回 ノルマ計算機
第79回 高速バックアップ
第78回 単語帳に読み上げ機能をつける
第77回 ホームページのバックアップツール
第76回 英単語帳を作成する(その2)
第75回 英単語帳を作成する(その1)
第74回 メモリカード挿入でデータをコピーするツール
第73回 モールス信号ソフトの作成
第72回 フォトCDランチャーを作る
第71回 残暑見舞い作成ツールを作る
第70回 画面キャプチャプログラムを作る
第69回 様々なルールに対応するビンゴシートのプログラムを作る
第68回 ビンゴカードを作る
第67回 ビンゴマシンを作る
第66回 パスワードマネージャの作成
第65回 アンドゥ機能をつける
第64回 テキストの比較ツール~FCフロントエンド
第63回 システム情報クリップ
第62回 飲み会電卓を作る
第61回 バイナリエディタの作成
第60回 メールフッタ作成ツール(その2)
第59回 メールフッタ作成ツール(その1)
第58回 プロセス監視ツールを作成する
第57回 TODOメモを作る
第56回 携帯電話をテキストリーダーに使う(2)
第55回 携帯電話をテキストリーダーに使う(1)
第54回 「オープンソースカンファレンス2006 Tokyo/Spring」に参加しました
第53回 10行でチャットソフトを作る(2)
第52回 10行でチャットソフトを作る(1)
第51回 プレゼンタイマーを作る
第50回 カラーピッカーを作る
第49回 簡単な暗号作成プログラム
第48回 お手軽データベース「SQLite」を使う
第47回 CUI(コマンドライン)環境を拡張する
第46回 デスクトップ画像を記録するプログラム
第45回 市外局番で住所を調べる検索プログラム
第44回 コマンドライン型ランチャーを作る
第43回 文字数カウンタを作る
第42回 日本語でバッチ処理
第41回 イベントドリブンと電光掲示板
第40回 なでしこでWindowsの「送る」メニューを使いやすくする
第39回 同人音楽即売会M3に参加して思ったこと
第38回 画像のサムネイル作成
第37回 なでしことExcelで行事予定カレンダーを作ろう
第36回 なでしことExcelで月間カレンダーを作ろう!
第35回 なでしことExcelで年間カレンダーを作ろう
第34回 急な電話にも安心、意外と便利な「手書きメモ」
第33回 携帯電話のアドレスデータを取り出す
第32回 記念日カウンターを作る
第31回 顔文字入力支援ソフト
第30回 アスキーアートのためのエディタ
第29回 HTTPサーバーを作る
第28回 手紙のあいさつ文を作成するプログラム
第27回 ギターコードの構成音を表示
第26回 音楽の再生スピードを変える
第25回 ミニスライドショーを作る
第24回 撮影日で写真を振り分け
第23回 PSP用テキスト画像の作成
第22回 金種計算
第21回 パスワードを自動生成
第20回 携帯メールでWEBを更新する
第19回 時間の使い方を反省するプログラム
第18回 ウェブを画像でキャプチャ
第17回 ラーメンタイマーを作る
第16回 画像のトリミングツール
第15回 ごみの分別カレンダー
第14回 デスクトップ検索ツール
第13回 フォント見本帳
第12回 セピア調の画像ビューワー
第11回 健康チェック
第10回 10行で壁紙にらくがきする
第9回 WEBサイトの更新チェッカー
第8回 WEBページのリンク切れをチェック その2
第7回 WEBページのリンク切れをチェック
第6回 音楽ファイルの整理 - メディアタグから自動フォルダ分類
第5回 請求書の自動作成・印刷~Word連携技
第4回 重要データのバックアップ術
第3回 10行ニュースリーダーを作ろう!
第2回 なでしことは その2
第1回 なでしことは? その1

もっと見る

人気記事

一覧

イチオシ記事

新着記事