Minecraftとタートルと僕

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

こちらのページは更新が滞っており、情報が古くなりつつあります。新しいCC情報サイトをはじめましたので、もしよければご参照ください。今後ともよろしくお願い申し上げます。

「百億のマインクラフトと千億のタートル」(https://hevo2.hatenablog.com/)

FS API を使いこなそう(5): APIファイルの自動ダウンロード

はじめに

これまではFS APIの解説をしてきましたが、今回からより実践的な利用方法を紹介しましょう。

まずは、pastebinサイトからのAPIファイル自動ダウンロード機能です。

どのようなケースを想定しているのか

あるLuaプログラムがいくつかのファイル、たとえば他の人が作ったAPIなど、を使って構成されているとします。

このようなとき、プログラムファイルの先頭にはAPIを読み込むための以下のような記述があるはずです。

-- test api を読み込んでから、
os.loadAPI("test_api")

-- このAPIを使います
test_api.testPrint()

このとき当然ながら、このプログラムファイルと同じ場所に「test_api」というAPIファイルを保存しておかなくてはなりません。

ということは、

このプログラムを他のコンピュータ上で使いたいと思ったら、このプログラム本体と「test_api」というAPIファイルの2つを用意しなくてはならないのです。

ちょっとだけ面倒ですよね。Pastebinサイトを使ってファイルのアップロード&ダウンロードで楽しようとしても、2回もダウンロードするのはめんどくさい・・・

そこで自動ダウンロード

プログラム本体に、使用するAPIファイルを自動ダウンロードする機能をつけてあげましょう。

APIファイル

これから紹介するLuaプログラムは「test_api」というAPIを使っています。

「test_api」の中身は以下の通りです。

-- test_api
testPrint = function()
  print("test!")
end

testPrint()という関数を追加するだけのシンプルなAPIです。

このAPIファイルはPastebinサイトに以下のURLで保存しています。

http://pastebin.com/TeWK9FBw

なおこのURLの末尾にある「TeWK9FBw」は、Pastebinコード(pastebin code)という一意な文字列で、Pastebinサイトにファイルをアップすると自動的に割り振られます。

自動ダウンロードプログラム

それではこのAPIファイルを自動ダウンロードしつつ利用する、「auto_download」プログラムを紹介します。

auto_download プログラムの概説

  • 6~7行目

    • 使用するAPIファイルの情報です。APIの名前とPastebinコードをあらかじめ書いておきます。
    • なお、APIの名前と同じファイル名で手元に保存します。
  • 10~18行目

    • installAPI()という関数を定義しています。この関数の働きは以下の通り
    • 指定したcodeを使ってpastebinサイトからファイルをダウンロードし、nameという名前で手元に保存する。
    • nameというファイルがすでに存在しているならば、すでにそのAPIファイルはダウンロードされているということなので何もしない。
    • 最後に、os.loadAPI()関数を使って、そのAPIを読み込んで使えるようにする。
  • 21~22行目

    • Configで書いた情報を使って、installAPI()を実行する。
    • 「test_api」の関数であるtestPrint()を実行して、問題ないか確認。

いくつかの重要なポイント

  • ファイルが存在するかどうかを確認するために、FS APIのfs.exists()関数を使っています。
    • ファイルが存在するかどうかで、true/false を返す関数でした。
    • IF文でファイルが存在するときとしないときの条件分岐をしています。
  • shell.run()は、プログラムの中で他のプログラムを実行するための関数です。

    • 通常、pastebinコマンド(プログラム)は、ターミナルのプロンプトが出ているときに実行します。
    • shell.run("pastebin", "get", "TeWK9FBw", "test_api")のようにプログラム中で記述すると、プロンプトで以下のように命令・実行したのと同じになります。
    • > pastebin get TeWK9FBw test_api
    • f:id:hevohevo:20140601062503p:plain:w400
  • なお、pastebinプログラムはgetオプションをつけて実行すると次のような動きをします。

    • pastebin get <code> <name>
    • <code>を使ってpastebinサイトからファイルをダウンロードし、<name>という名前で保存する。

まとめ

このような関数をプログラムの先頭に書いておけば、pastebinコマンドを使ってAPIファイルをダウンロードする手間がはぶけますね。

紹介したプログラムは使っているAPIが一つだけでしたが、複数のAPIを使っているときには以下のようにすると良いでしょう。

関数にしているとこのように応用が効くので便利ですね。