1. Overview

RubyMotion はプログラミング言語 Ruby を用いて iOS と OS X、Android アプリケーションを開発するためのツールチェインです。

iOS は Apple のモバイルオペレーティングシステムで、iPhone や iPod、iPad などさまざまなデバイスを制御しています。OS X は Apple のデスクトップ OS で、iMac や MacBook Air といった Mac コンピュータを動かしています。Android は Google のモバイルオペレーティングシステムで、異なるメーカの多種多様な機器を動かしています。

開発者は iOS や OS X 向けのアプリケーションを作成し、そして Apple のアプリケーション配信システムである App Store にアプリケーションを登録できます。あるいは、Android アプリケーションを Google Play ストアで配布するのに RubyMotion を使用することができます。

RubyMotion は、主に二つの構成要素から成ります。

  • Runtime: 新規の Ruby 言語の実装で、ネイティブの Apple あるいは Google のランタイムと密接に統合されデバイスに最適化されています。

  • Project Management: RubyMotion のプロジェクトを作成・管理、また対話的に開発するためのコマンドラインインタフェースです。他にも、Ruby コードを最適化された機械語にコンパイルする静的なコンパイラと、その場でリアルタイムに式を評価しアプリケーションの動作を変更できるインタラクティブなコンソールがあります。

RubyMotion は /Library/RubyMotion にインストールされ、コマンドラインインタフェースのシンボリックリンクが /usr/bin/motion に作成されます。

2. Prerequisites

RubyMotion の利用には、OSX 10.8.4 以上がインストールされている 64-bit Mac が必要です。OS X 10.9 Mavericks を推奨します。

2.1. iOS and OS X

あらかじめ iOS SDK と OS X SDK を Mac にインストールする必要があります。SDK は Xcode に付属してます。

2.1.1. Installing Xcode

Xcode は App Store アプリケーションを使用して、無料でダウンロード・インストールできます。

Note Xcode は Apple 製の IDE です。RubyMotion でプログラミングするときには Xcode を使う必要はなく、お気に入りのエディタを使い続けることができます。

App Store アプリケーションを起動し、検索欄で "Xcode" と検索します。

Searching for Xcode in the App Store

検索結果に表示される Xcode をクリックします。

Searching for Xcode in the App Store

Xcode の詳細について書かれたページが表示され、そのページで Xcode をダウンロードできます。

Xcode をインストールしたあと、RubyMotion で必要となる Command Line Tools パッケージをインストールします。

アプリケーション フォルダにある Xcode を起動します。Xcode の Preferences を表示し、Downloads タブをクリックします。リストに Command Line Tools パッケージがありますので、Install ボタンをクリックしインストールします。

Installing the Command Line Tools package

インストールが終われば準備は完了で、Xcode を閉じることができます。

もし、新しいバージョンの Xcode を App Store からインストールする前に古いバージョンの Xcode を使用されていた場合には、Xcode のパスを設定するために以下のように Terminal でコマンドを実行します。

$ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

2.2. Android

Note Android のサポートは現在パブリックベータです。 While it is fully functional, we are still working on making it ready for prime time.

はじめに、つぎのコマンドを使用して RubyMotion の Android ベータをインストールします。

$ sudo motion update --pre

/Library/RubyMotionPre ディレクトリにインストールされます。

この後、Android 開発環境特有のセットアップを行います。

2.2.1. Installing Java

RubyMotion のビルドシステムは、Java コンパイラのインストールを必要とします。デフォルトでは、Java は OS X に付属してません。

ご使用の環境にインストールする Java を Apple のサイト の手順に従います。

適切に Java がインストールされたかを確認します。

$ javac -version
javac 1.6.0_65

Java 1.7 でも動作しますが、Java 1.6 の使用を推奨します.

2.2.2. Downloading the SDK

Androidの公式サイトから、Eclipse ADT バンドルをダウンロードします。ダウンロードの前には利用条項に承諾する必要があります。

Eclipse ADT という名称ですが、このバンドル内に SDK が同梱されています。

ダウンロードした後、.zip ファイルを開きます。eclipsesdk の 2 つのディレクトリがあるはずです。RubyMotion では sdk を必要とします。

ホームディレクトリなどに sdk ディレクトリをコピーすることをお勧めします。このドキュメントでは、~/android-rubymotion を使用します。

$ mkdir ~/android-rubymotion
$ cp -r ~/Downloads/adt-bundle-mac-x86_64-20140702/sdk ~/android-rubymotion

正しく ~/android-rubymotion/sdk ディレクトリにコピーされたことを確認します。(執筆時点で)以下のものが含まれています。

$ ls ~/android-rubymotion/sdk
build-tools     extras          platform-tools  platforms       tools

もし Eclipse を使用する予定がなければ、.zip ファイルとそれを展開してできたディレクトリを削除して問題ありません。

2.2.3. Setting up the SDK

Android SDK をコピーしましたが、まだ内部パッケージをダウンロードし設定する必要があります。android ツールを実行します。

$ ~/android-rubymotion/sdk/tools/android

Android SDK Manager というインストールする必要があるパッケージセクションのウィンドウが表示されます。Install ボタンをクリックし、若干時間がかかりますが完了するまでお待ちください。

2.2.4. Downloading the NDK

Androidの公式サイトから、Mac OS X 64-bit パッケージをダウンロードします。ダウンロードの前には利用条項に承諾する必要があります。

Note 適切な NDK パッケージをダウンロードすることが重要です。執筆時点では、Mac OS X 32-bit パッケージでは動作しません。

Android NDK パッケージは自己解凍ファイルとなっています。ダウンロード、バイナリーを実行可能なファイルにパーミッションを変更し、ファイルを実行します。インストールされたディレクトリを ~/android-rubymotion/ndk に変更します。

$ chmod +x ~/Downloads/android-ndk-r10c-darwin-x86_64.bin
$ ~/Downloads/android-ndk-r10c-darwin-x86_64.bin
$ mv ~/Downloads/android-ndk-r10c ~/android-rubymotion/ndk

インストールが成功したことを確認するため、~/android-rubymotion/ndk には以下のファイル(執筆時点)が含まれているかチェックしてください。

$ ls ~/android-rubymotion/ndk
GNUmakefile                     ndk-gdb-py.cmd
README.TXT                      ndk-gdb.py
RELEASE.TXT                     ndk-stack
build                           ndk-which
docs                            platforms
find-win-host.cmd               prebuilt
ndk-build                       remove-windows-symlink.sh
ndk-build.cmd                   samples
ndk-depends                     sources
ndk-gdb                         tests
ndk-gdb-py                      toolchains

インストール後には、.bin ファイルを削除して問題ありません。

2.2.5. Configuring RubyMotion

作業はほぼ完了しています。あとは RubyMotion に Android SDK と NDK のディレクトリを指定します。

~/.profile ファイル(もしファイルが存在してなければ作成します) に以下の行を追加します。

export RUBYMOTION_ANDROID_SDK=~/android-rubymotion/sdk
export RUBYMOTION_ANDROID_NDK=~/android-rubymotion/ndk

追加後、環境変数を反映するためにターミナルを再起動します。

環境変数が正しく設定されているか、次のように確認します。

$ env | grep RUBYMOTION_ANDROID
RUBYMOTION_ANDROID_SDK=...
RUBYMOTION_ANDROID_NDK=...

2.2.6. Configuring your device for development

RubyMotion で Android アプリを開発する際に、Android デバイスで開発者向けの機能が必要になるかもしれません。(Android で提供されているエミュレータがとても遅いので。)

まだ機能を有効にされてなければ、デバイスを USB で Mac と接続していることを確認し、次の手順を実施してください。

  1. デバイス上で 設定 アプリを起動します。

  2. 画面をスクロールし 端末情報 または タブレット情報 (デバイスの種類に応じてどちらかが表示されます) をタップします。 別の画面が表示されます。

  3. 再び画面をスクロールし、ビルド番号 という部分を 7 回タップします。 成功すると、開発者モードになったことを示すメッセージが表示されます。

  4. 前の画面に戻り画面をスクロールし最下部のところに 開発者向けオプション が有効になっています。これをタップします。

  5. USBデバッグ を有効にします。これは Mac とデバイスが開発処理で必要な通信を許可します。デバイス上にウィンドウが表示され、Mac を許可するかを求められます。必ず許可してください。

これで完了です。

もし古いバージョンの Android を使用されている場合には、これらの手順は異なるかもしれません。開発者モード 有効 と Android のバージョン番号などを、Google で検索すると良いでしょう。

3. Text Editor

RubyMotion をインストールしたあとは開発のためにテキストエディタの設定をします。もし RubyMine や Vim、TextMate といったお気に入りのエディタがあるのでしたら、準備は万全です。 より詳しい情報については、editors ガイドをご覧ください。

4. Software Updates

コマンドラインから Software アップデートを行うことができます。

以下のコマンドで、最新の RubyMotion をネットワークから取得しインストールします。RubyMotion のアップデートを行う際には、インターネットに接続した環境が必要になります。

$ sudo motion update

インストールされている RubyMotion のバージョンを確認する場合には、以下のようにコマンドを実行します。

$ motion --version
2.24

一日に一度、RubyMotion のビルドシステムは新しい RubyMotion がインストールできないか Software アップデートサーバに問い合わせします。

新しい RubyMotion があれば Terminal にメッセージを表示しアップデートを通知します。もしライセンスの有効期限が切れるような場合にも、ビルドシステムはメッセージを表示します。

5. Support

問題に直面している場合や、機能のリクエストや質問など、コマンドラインから ticket を提出できます。

$ motion support

ブラウザの新しいウィンドが開かれ、サポート ticket を記入できます。ライセンスキーや開発環境など、いくつかの情報が自動的に記入された状態となっています。

6. Hello World

6.1. iOS

最初の RubyMotion iOS プログラム "Hello World" を記述する準備が整いました。

Terminal を起動し、プロジェクトを作成する場所へ移動します。そして、以下のようにコマンドを実行してください。

$ motion create Hello

このコマンドによって、RubyMotion のプロジェクトが "Hello" という新しいディレクトリに作られます。もしすでに同じディレクトリが存在するなどしディレクトリが作成できない場合には、コマンドの実行は失敗します。

ディレクトリの中身をのぞいてみましょう。

$ cd Hello
$ ls
Rakefile app resources spec

RubyMotion のプロジェクトは Rakefile をベースとしています。rake は Ruby での標準的なビルドプログラムです。 同様のものとして、Mac OS X では標準で make が付属しています。

app ディレクトリにはアプリケーションのコードが含まれます。resources ディレクトリには、アイコンや画像、サウンドファイルなど、プロジェクトで使用するリソースが最終的に含まれるでしょう。spec ディレクトリには spec やテスト用のファイルが含まれます。

rake のデフォルトタスクを実行してみましょう。

$ rake

プロジェクトをビルドし、シミュレータが起動します。まだコードを何も書いていないので、真っ黒な空のウィンドウが表示されます。

app ディレクトリの中にはデフォルトで作成される app_delegate.rb というファイルがあります。このファイルには、アプリケーションの制御という役割をする AppDelegate が実装されています。

class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    true
  end
end

app/app_delegate.rb ファイルをお気に入りのエディタで開きます。そして、アラートを表示するコードに変更しましょう。

class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    alert = UIAlertView.new
    alert.message = "Hello World!"
    alert.show
    true
  end
end

Terminal で再び rake コマンドを実行すると、シミュレータ上にアラートが表示されます。

Hello World

今度は、iOS デバイスで試してみましょう。開発用に設定された iOS デバイスと USB で接続した状態で、次のコマンドを実行します。

$ rake device

このコマンドにより、Hello アプリが iOS デバイスへインストールされます。アプリを実行すると、アラートメッセージが表示されることでしょう。

これで、はじめての RubyMotion プログラムの作成が終わりです。どうでしょう、難しかったですか?

6.2. OS X

さぁ、最初の RubyMotion OS X プログラム "Hello World" を記述してみましょう。

Terminal を起動し、プロジェクトを作成する場所へ移動します。そして、以下のようにコマンドを実行してください。

$ motion create --template=osx Hello
Note motion コマンドに --template=osx というオプションを指定することに注意してください。デフォルトでは、motion create は iOS 用のプロジェクトを作成します。ここでは、OS X プロジェクトを作成したいので、OS X プロジェクトのテンプレートを指定する必要があります。

このコマンドによって、RubyMotion のプロジェクトが "Hello" という新しいディレクトリに作られます。もしすでに同じディレクトリが存在するなどしディレクトリが作成できない場合には、コマンドの実行は失敗します。

ディレクトリの中身をのぞいてみましょう。

$ cd Hello
$ ls
Rakefile app resources spec

RubyMotion のプロジェクトは Rakefile をベースとしています。rake は Ruby での標準的なビルドプログラムです。 同様のものとして、Mac OS X では標準で make が付属しています。

app ディレクトリにはアプリケーションのコードが含まれます。resources ディレクトリには、アイコンや画像、サウンドファイルなど、プロジェクトで使用するリソースが最終的に含まれるでしょう。spec ディレクトリには spec やテスト用のファイルが含まれます。

rake のデフォルトタスクを実行してみましょう。

$ rake

プロジェクトをビルドするとアプリが起動します。まだコードを何も書いていないので、空のウィンドウが表示されます。

app ディレクトリの中にはデフォルトで作成される app_delegate.rb というファイルがあります。このファイルには、アプリケーションの制御という役割をする AppDelegate が実装されています。

class AppDelegate
  def applicationDidFinishLaunching(notification)
    buildMenu
    buildWindow
  end
end

app/app_delegate.rb ファイルをお気に入りのエディタで開きます。そして、アラートを表示するといった、なにかおもしろいコードに変更しましょう。

class AppDelegate
  def applicationDidFinishLaunching(notification)
    buildMenu
    buildWindow

    alert = NSAlert.new
    alert.messageText = "Hello World!"
    alert.runModal
  end
end

Terminal で再び rake コマンドを実行すると、シミュレータ上にアラートが表示されます。

Hello World

6.3. Android

Android の Hello World アプリを作ってみましょう。

任意のディレクトリで、新しい Android プロジェクトを作成するために次のコマンドを実行します。

$ motion create --template=android Hello
$ cd Hello
Note ツールチェーンに --template=android を指定することに注意します。デフォルトでは、RubyMotion は iOS プロジェクトを作成するので、Android テンプレートを選択します。

新しく Hello というディレクトリが作成されます。Rakefileapp/main_activity.rb ファイルを見てみましょう。

USB でデバイスが接続されていること確認し、以下のコマンドによってデバイス上でアプリを実行することができます。

$ rake device

アプリはすぐに実行されることでしょう (最初にデバイス画面をロック解除しておきます)。ウィンドウは空の状態ですが、これはまだ何もコードを記述していないためです。

では、app/main_activity.rb ファイルを編集し、内容を以下のコードに変更してみましょう。

class MainActivity < Android::App::Activity
  def onCreate(savedInstanceState)
    puts "Hello World!"
    super
    view = Android::Widget::TextView.new(self)
    view.text = "Hello World!"
    self.contentView = view
  end
end

ふたたび rake device を実行すると、デバイス上に Hello world というメッセージが表示されます。#puts メソッドを呼び出すことで、ターミナル上にもメッセージを表示されます。

7. And Now?

おめでとうございます、みなさんは最初の RubyMotion iOS, OS X そして Android プログラムを作ることに成功しました。それほど難しくなかったでしょう?

いくつか iOS と OS X のサンプルコードが GitHub の Sample Code Repository にあります。サブフォルダは、上記のように作成した RubyMotion プロジェクトです。 サブフォルダで rake コマンドを実行しアプリを試すことや、app ディレクトリ内のソースコードを確認することができます。

そのほかのガイドや RubyMotion に関する記事、screencast などは Developer Center で確認してください。