開発の基本的な流れ

この章では Armadillo を使ったアプリケーションソフトウェアの開発方法について説明します。

Armadillo を使ったアプリケーションソフトウェア開発には、Ruby等の軽量スクリプト言語を使うことができます。

もちろん、Rubyに限らず、Debian の提供する豊富なパッケージ群から Python や Go、Haskel といったスクリプト言語を自由にインストールして使うことも可能で、PCと同じように開発を進めることができます。

この章では、APTを使用して必要なソフトウェアを ATDE8 および Armadillo にインストールします。そのため、あらかじめ ATDE8 および Armadillo をインターネットに接続できる状態にしてください。

13.1. 軽量スクリプト言語によるデータの送信例(Ruby)

ここでは、サンプルとして Armadillo の現在時刻を定期的に HTTP POST でパラメータ名 "time" に格納した値として送信する例を示します。

現在時刻は date コマンド、もしくは Ruby の Time クラスを使用して取得します。

ここで作成するアプリケーションは Armadillo で動作するクライアントとATDEで動作するテスト用のサーバーの2つです。ATDEで動作させるためのテスト用のサーバーは、典型的なHTTPプロトコルでアクセスできるWeb APIを持ったサービスを模擬しています。テスト用サーバーは単に入力されたPOST リクエストの内容を変数に格納してコンソールに出力し、クライアントには"Thanks!"という文字列を返します。

13.1.1. テスト用サーバーの実装

最初に ATDE8 にテスト用サーバーの動作に必要なパッケージをインストールします。

[ATDE ~]$ sudo apt install ruby
[ATDE ~]$ sudo gem install sinatra

図13.1 ruby と sinatra のインストール


次にエディタで次のコードを入力して、server.rb として保存してください。

require 'sinatra'

post '/' do
  puts "Current Time is #{params[:time]}"
  "Thanks!\n"
end

図13.2 テスト用サーバー (server.rb)


13.1.2. テスト用サーバーの動作確認

Armadillo でクライアントアプリケーションを動かす前に、テスト用サーバーの動作確認を行います。動作確認は Armadillo から cURL コマンドを使って、クライアントアプリケーションと同等のリクエストを送ってみます。

まず、ATDE8 の IPアドレス を確認しておきます。下記の例では、ip コマンドで確認するとATDE8 のIPアドレス が 172.16.2.117 であることがわかります。

[ATDE ~]$ ip addr show eth0
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:30:b0:e0 brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.117/16 brd 172.16.255.255 scope global dynamic eth0
       valid_lft 65913sec preferred_lft 65913sec
    inet6 fe80::20c:29ff:fe30:b0e0/64 scope link
       valid_lft forever preferred_lft forever

図13.3 IPアドレスの確認 (ipコマンド)


次の例のように server.rb を実行すると、全てのIPアドレスからのリクエストを8081番ポートでWebサーバーとして待ち受けます。

[ATDE ~]$ ruby server.rb -p 8081 -o 0.0.0.0
[2018-07-18 17:47:21] INFO  WEBrick 1.3.1
[2018-07-18 17:47:21] INFO  ruby 2.3.3 (2016-11-21) [i386-linux-gnu]
== Sinatra (v2.0.3) has taken the stage on 8081 for development with backup from WEBrick
[2018-07-18 17:47:21] INFO  WEBrick::HTTPServer#start: pid=4610 port=8081

ここで、Armadillo から cURL を使ってテストデータを送ってみましょう。正しく通信できた場合は、"Thanks!" の文字列が表示されます。もし、"Connection refused" 等が表示された場合は、一旦 ATDE8 のIPアドレスに ping を送信してネットワークの設定に問題が無いか確認してください。

[armadillo ~]# apt install curl

図13.4 curl のインストール


[armadillo ~]$ curl -d "time=$(date "+%H:%M:%S")" 172.16.2.117:8081
Thanks!

図13.5 curl によるテストデータの送信


正しく受信できた場合は、ATDE8で起動しているテスト用サーバーが起動しているコンソールに下記の文字列が出力されます。

Current Time is 07:44:19

図13.6 ATDE8 におけるテストデータの受信表示


13.1.3. クライアントの実装

Armadillo で動作するクライアントを実装します。下記のコードをエディタで入力して、client.rb として保存してください。ファイルは、ATDE8 上で作成しても Armadillo 上で、vi等を使って作成しても構いません。ATDE8 で作成した場合は次の手順で、Armadillo へ転送します。

require 'net/http'

uri = URI.parse(ARGV[0])
time = Time.now.strftime("%H:%M:%S")
response = Net::HTTP.post_form(uri, {"time" => time})

puts response.body

図13.7 時刻送信クライアント(client.rb)


13.1.4. Armadilloへのファイルの転送

ATDE8 上で作成したソースコードを Armadillo に配置する方法の一例として、ここでは、SSH を使った転送方法を説明します。

[armadillo ~]# apt install openssh-server

図13.8 Armadillo へのSSHサーバーのインストール


[ATDE ~]$ scp client.rb atmark@[armadilloのIPアドレス]:~/

図13.9 ATDE8 から Armadillo への client.rb の転送


13.1.5. クライアントの実行

Armadillo に Ruby をインストールしてから、作成した時刻送信クライアントを実行します。第一引数にはテスト用サーバーが動いているATDE8のIPアドレスとポートをHTTPスキーマのURIで記述してください。

[armadillo ~]# apt install ruby

図13.10 ruby のインストール


[armadillo ~]# ruby client.rb http://172.16.2.117:8081
Thanks!

図13.11 クライアントの実行方法


正しくクライアントとの通信ができた場合、ATDE8で動作しているサーバーのコンソールには時刻が表示されます。

Current Time is 07:44:19

図13.12 ATDE8 における時刻データの受信表示


13.2. C言語による開発環境

C/C++等の資産がある場合は、Armadillo上でgcc/g++を使ってアプリケーションを コンパイルする事もできます。

13.2.1. 開発環境の準備

アプリケーションをコンパイルするために、Armadilloにgcc等を含むツールチェーンをインストールします。Armadilloのコンソールで次のコマンドを実行してください。

[armadillo ~]# apt install build-essential

図13.13 ツールチェーンのインストール


これで、gcc, make, gdb等が使えるようになりました。次に、アプリケーションのビルドに必要なライブラリとヘッダーファイルをインストールします。例えば libssl であれば次のコマンドでインストールすることができます。

[armadillo ~]# apt install libssl-dev

図13.14 開発用パッケージのインストールの例 (libsslの場合)


例に示すように、コンパイルに必要なヘッダーファイルを含むパッケージは、普通 -dev という名前が付いています。

[ティップ]

必要なヘッダファイルの名前や、共有ライブラリのファイル名がわかっている場合は、Debian プロジェクトサイトの「パッケージの内容を検索」からファイルの含まれるパッケージの名前を探す事ができます。

また、パッケージの部分的な名前が分っている場合は「パッケージ管理」で紹介した、 apt-cache search コマンドを使って必要なパッケージを探す事もできます。