読者です 読者をやめる 読者になる 読者になる

Minecraftとタートルと僕

PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。

FS API を使いこなそう(2): CCのファイルを扱うシステムプログラムの紹介

ComputerCraft Minecraft CC1.6 CC1.58 API チュートリアル

はじめに

ComputerCraftには以下のようなプログラムが、システムプログラムとしてあらかじめ /rom/programs/ ディレクトリにインストールしてあります。

多くのプログラムがありますが、これらの中でもファイルを取り扱うためのプログラムを紹介しましょう。

なおカッコ内は、CCのエイリアス(Alias)による別名を意味します。 たとえば、Unixユーザーなら、listよりもlsの方がなじみ深いですよね。

  • list (ls, dir)
  • cd
  • makedir
  • copy (cp)
  • move (mv)
  • rename
  • delete (rm)
  • edit

システムプログラムを実行する方法

プロンプト(入力の促し)

コンピュータやタートルを右クリックして起動すると黒い端末画面が表示されます。 f:id:hevohevo:20140517001043p:plain:w500

起動するとコンピュータは、シェル(shell)というプログラムを自動起動します。 このプログラムは画面に「> 」というプロンプトが表示して、あなたに命令の入力を促してきます。

プログラムファイル名を入力しエンターキーを押すことで命令してください。

なお、本来ならばプログラムを実行するためには絶対パスを入力しなくてはならないのですが、 /rom/programs/などのシステムディレクトリはあらかじめ「検索パス」としてシステムに登録されているため、 プログラム名を入力するだけで実行できます。

# 本来ならば、絶対パスで指定してプログラム実行する必要がある
> /rom/program/list

# でも、/rom/program/ などのシステムディレクトリは検索パスとしてあらかじめ登録済みなので
# そのディレクトリ内のプログラムは、プログラムファイル名を入力するだけ実行できる
> list

また、これらプログラムは実行時にいくつかの引数(Argument)を必要とする場合があります。 プログラム名の後に半角スペース1つで間をあけて与える引数を順番に並べてください。

システムプログラムの紹介

名前 書式と機能の説明
list 書式: list <パス>
<パス>内にあるファイル・ディレクトリの一覧表示。別名ls, dir
<パス>を省略でカレントディレクトリのものを表示。
cd 書式: cd <パス>
指定した<パス>にカレントディレクトリを変更。
makedir 書式: makedir <パス>
新しいディレクトリを作る。
copy 書式: copy <元パス> <目的パス>
ファイル(ディレクトリ)をコピー。別名cp
<目的パス>が存在するディレクトリ名ならそこに同じ名前でコピー、存在しないならその名前でコピー。
move 書式: move <元パス> <目的パス>
ファイル(ディレクトリ)を移動。別名mv
<目的パス>が存在するディレクトリ名ならそこに移動、存在しないならその名前にして移動(つまりrename)。
rename 書式: rename <元パス> <目的パス>
ファイル(ディレクトリ)名を変更する。内部的には上記のmoveを実行しているだけ。
delete 書式: delete <パス>
ファイルまたはディレクトリを削除する。別名rm
edit edit <パス>
パスはファイルでなければならない。エディタを起動してファイルの編集を開始。

ファイル操作をするとき、現在どのディレクトリに注目しているかということが重要になります。 このディレクトリをカレントディレクトリ(current directory)と呼びます。

書式内にある<パス>は、引数としてその絶対パス(たとえば/tmpfilesのようなファイルパスや/rom/programs/のようなディレクトリパスなど)をプログラムに与えることを意味しますが、カレントディレクトリにあるファイル・ディレクトリに対する操作ならば、絶対パスではなくそのファイル名・ディレクトリ名を与えることもできます。

# カレントディレクトリが「/」ルートディレクトリであるとき、
# カレントディレクトリを「/rom/」に変更するには、以下のいずれの入力でも良い

# 絶対パス表現で指定
> cd /rom/

# カレントディレクトリにある/rom/ディレクトリに対する操作なので、ディレクトリ名を直接指定しても良い
> cd rom

以下、実行例を示しながら初心者向けに詳しく説明していますが、UnixユーザーあるいはWindowsのコマンドプロンプトを使いこなせる人にとっては既知の内容となりますので、流し読みあるいは読み飛ばし推奨です。

「list」: ファイル・ディレクトリを一覧表示する

  • list
    • 書式: list <パス>
    • <パス>内にあるファイル・ディレクトリの一覧表示。別名ls, dir
    • <パス>を省略でカレントディレクトリのものを表示。

たとえばコンピュータを右クリックで開いて起動すると、カレントディレクトリはルート/になります。 このとき<ディレクトリ>なしで「list」プログラムを実行することで、ルートディレクトリにあるファイル・ディレクトリを一覧表示できます。

# カレントディレクトリにあるファイル・ディレクトリを一覧表示
> list

# 絶対パスで指定して、特定のディレクトリのファイルなどを一覧表示
> list /rom/programs/

なお、エイリアス(Alias)という機能によって、このプログラムを別の名前でも実行できます。

  • エイリアス1(Unixユーザー向け): ls
  • エイリアス2(Windowsユーザー向け): dir

「cd」: カレントディレクトリを変更する

  • cd
    • 書式: cd <パス>
    • 指定した<パス>にカレントディレクトリを変更。

特定のディレクトリにある大量のファイルを操作するときには、カレントディレクトリをそのディレクトリに切り替えた方が作業が楽になります。

たとえば以下のサンプルのように特定のディレクトリの内部にどのようなファイルがあるのか探索するとき、 あらかじめカレントディレクトリをそのディレクトリに変更しておけば、手入力しなければならない文字数がぐっと減りますね。

CCのシェル(shell)にはパスの補完入力機能がないので、長いパスを手入力で正確に入力しなければならずつらいのです・・・・・・。

# カレントディレクトリを /rom/programs/ に切り替える
> cd /rom/programs/

# /rom/programs/ のファイル一覧を表示
# 本来ならば、> list /rom/programs/ と入力しなければならない
> list
(たくさん表示)

# 一覧の中にあった、/rom/programs/turtle/ ディレクトリの中身を表示
# 本来ならば、 > list /rom/programs/turtle/ と入力しなければならない
> list turtle
(たくさん表示)

# 一覧の中にあった、/rom/programs/http/ ディレクトリの中身を表示
# 本来ならば、 > list /rom/programs/http/ と入力しなければならない
> list http
(たくさん表示)

# 元のルートディレクトリにカレントディレクトリを戻す
> cd /

「makedir」: 新しいディレクトリを作る

  • makedir
    • 書式: makedir <パス>
    • 新しいディレクトリを作る。
# カレントディレクトリにtmpという名前のディレクトリを作る
> makedir tmp

# さらに続けて /tmp/ 以下に、/tmp/log/ というディレクトリを作る
> makedir /tmp/log/

「copy」: ファイルやディレクトリ新しい名前でコピーする

  • copy
    • 書式: copy <元パス> <目的パス>
    • ファイル(ディレクトリ)をコピー。別名cp
    • <目的パス>が存在するディレクトリ名ならそこに同じ名前でコピー、存在しないならその名前でコピー。
# /rom/programs/id というファイルを、ルートに(そのままのidという名前で)コピー
> copy /rom/programs/id /

# /rom/programs/id というファイルを、ルートに新しい名前で(myidという名前で)コピー
> copy /rom/programs/id /myid

-(注意) - ディレクトリのコピーも可能だが、そのディレクトリは空でなければならない。 - 中にいろいろと入っているディレクトリのコピーはできない

エイリアスによって、このプログラムを以下の名前でも実行できます。

  • エイリアス(Unixユーザー向け): cp

「move」: ファイルやディレクトリを別の場所に移動する

  • move
    • 書式: move <元パス> <目的パス>
    • ファイル(ディレクトリ)を移動。別名mv
    • <目的パス>が存在するディレクトリ名ならそこに移動、存在しないならその名前にして移動(つまりrename)。

ファイル自体の名前は変えずに場所だけ移動

# /myfile というファイルを、/tmp/ ディレクトリの中に移動
> move /myfile /tmp/

# もしカレントディレクトリがルートならば、以下でも可
> move myfile tmp

ファイルの名前を変える

# myfileというファイルを、myfile2という名前に変える
> move myfile myfile2

ファイルの名前を変えつつ、場所も移動

# myfileというファイルを、/tmp/myfile2という名前に変える
> move myfile /tmp/myfile2

エイリアスによって、このプログラムを以下の名前でも実行できます。

  • エイリアス(Unixユーザー向け): mv

「rename」: ファイルやディレクトリの名前を変える

  • rename
    • 書式: rename <元パス> <目的パス>
    • ファイル(ディレクトリ)名を変更する。内部的には上記のmoveを実行しているだけ。

ぶっちゃけ、上記moveプログラムの別名なのでこのプログラムを使わなくても、move使えば良い。

delete

  • delete
    • 書式: delete <パス>
    • ファイルまたはディレクトリを削除する。別名rm
# カレントディレクトリに、myfileというファイルと、tmpというディレクトリがあるとする

# myfile というファイルを削除
> delete myfile

# tmp というディレクトリを削除
> delete tmp

edit

  • edit
    • edit <パス>
    • パスはファイルでなければならない。エディタを起動してファイルの編集を開始。

注意しなくてはならないのは、以下の3点+α

  • パスが既存のファイルならば、そのファイルを開いて編集モードとなる。
  • パスが新規ならば新しいファイルを編集し始めるが、エディタで保存しなければ新しいファイルは作られない。
  • /rom/ ディレクトリは読み専用なので、エディタで編集・保存できない。
  • 【おすすめ】エディタでLuaプログラムを組むときにキーワードが色分けされるととても楽になるので、Advanced Computer(金色)の使用を推奨。
# カレントディレクトリにあるmyprogramというファイルを編集する
> edit myprogram

次回について

これらシステムプログラムは、CC上でファイルやディレクトリを取り扱う上でほぼ必須のプログラムとなります。

UnixやWindowsのコマンドプロンプトに通じるものがありますので、この機会にぜひ使い方を覚えましょう。

次回は、お待ちかねのCC1.6のFS APIの仕様について解説します。

実際、今回紹介したシステムプログラムはFS APIによって実装されています。FS APIを理解するためにこれらプログラムのソースを読むのもお勧めです。