何故にそげんこつせにゃあかんと??

何弁だかわかりませんが。

これにはね、それなりに深ぇ訳がございやすんで、へい。

当初、このプロジェクトは、ある入荷処理で、バーコードを読むわけでございやすが、いわゆるハンディターミナルを使いたくなかった。そこそこの値段がしますし。取り回しがよくありやせん。

そこで閃いたのが、スマホと、Bluetooth接続可能なバーコードリーダーの連携です。

最初はiPhoneを使用しました。バーコードリーダーでバーコードを読みます。するってぇとiPhone上に読み込んだリストが次々と現れやす。

結構なスピードで読み込みますんで、いちいちサーバ上のマスタになんぞ問い合わせに行ってられない。iPhone上にSQLiteでマスタ持たせてます。7万件ほどのレコード数になるでしょうか。

iPhone恐るべし。遅滞なくマスタを呼び出します。ほんで、httpでWebサーバへリクエストなげます。読み込んだ入荷データはjson形式でサーバへ送られます。

しかし、いくつかの店舗で問題が起きました。iPhoneのアンテナが立たない店舗があるのです。するってぇとデータ送信できない。その店舗の担当者はバーコード読んだ後、50mも店舗から走って電波状況の良い場所まで行き、送信ボタンを押下したそうな。

更に追い打ちをかけるように、それまで、レンタルサーバに置いていたWEBサーバを社内のサーバに移設したいと。ところが、そこに置いてしまうと、iPhoneからは接続できないのです。

そのサーバに接続できるのはそのチェーンの各店舗にある決まったPCのみ。

仕方ねぇ、そんならスマホをそのPCにUSB接続して、PC経由でデータ送信するしきゃあんめい。。

ここで、iPhoneのセキュリティの固さに躓きます。iPhoneのデータで外に引っ張り出せるのはmedia系(写真など)に限られており、アプリ固有のデータは取り出せません。

方法がないわけではないが、推奨できるものではないし、いつダメになるかもわからない。

仕方ねぇってんで、Androidを調べてみた。こちらは、開発者向けオプションてのがあって、USBデバッグを有効にしておき、PC側のAndroidSDKが持っているadbコマンドで、内部にアクセスできます。Androidの中はディレクトリ構成がLinuxチックといいますかなんといいますか、ちゃんとアプリが作成したファイルを取り出すことも、PCから削除することもできます。

これだってんで、アプリを急きょAndroidで作り直しました。そして、送信ボタンを「ファイル作成」というボタンに変え、読み込んだ入荷データをCSVファイルで、Android内部にため込みます。

そして端末をPCにUSB接続して、バッチを叩けば、サーバへ登録される、という仕組みにしました。

その後、やはりWEBサーバはレンタルサーバへ、ってんで、またまたお引越し。

ではスマホはどうしましょう、ってな話で、結局PCへUSB接続してPC経由で送る、という仕様が支持されました。どの店舗でも安定して送れる、しかも速い!ってんで。

AndroidはNexus7をつかっておりやす。

こいつ、いきなりPCに差すと、ドライバーがちゃんと入りません。導入時は別途ドライバーをインストールしましたが、今は、Android Studioから、Android SDK Toolsを起動してここからインストール可能なようで。

Google USB Driverってやつをインストールします。

そんで、まずはUSB接続して、Windows Device Manager上でちゃんとNexus7が見えるか確かめます。

とりあえずはいい感じですかね。。不完全だとびっくりマークがついちゃったりします。

では、adbコマンドで、中にアクセス出来るか、をチェックします。

で、このadbコマンドがどこにあるのかと言いますと、Android Studioをデフォルト状態でインストールしたなら、おそらく

C:\Users\ユーザ名\AppData\Local\Android\sdk\platform-tools

という深~いところに置かれてます。仕方なので、これをpathに登録しますか。

で、コマンドプロンプトで叩いてみます。

adbコマンドはちゃんと動いたようですが、接続は失敗しました。

と思ったらNexus側に、「USBデバッグを有効にしますか?」みたいのが出ていたので、OKして、もう一度やってみます。

一発で入りました。

うむ。ちゃんと見えます。大丈夫そうです。

これが動けば、Android機の中に作成したファイルを、PC側に移動し、それをFTPでサーバに送り、URLを叩いてそのファイルの中身をDBに登録する、なんてのを一発で出来るわけです。

本当は通信状況が良いとことろで、スマホからダイレクトに登録できるに越したことはないのですが。こんな裏技チックなことが必要な場面もある、ということで。

で、予定としては、通信が確保される店舗ではダイレクトに、それが叶わない店舗はPC経由で、のように切り替え可能なようにしたいな、と。

そこらあたりのテストもしやすいように今回開発環境をWindowsに引っ越したわけです。

とりあえず現状のところまではOK。

次はサーバ側のPHPも同一マシンでやりたいわけなのですが、ローカルで開発し、レンタルサーバ上に上げて最終テスト、が望ましい。つうか、httpでダイレクトに送るのはレンタルサーバ上でないとテストできないので、そこらへんの環境を整えていきます。

長年、Androidには偏見を持っており、「絶対iPhoneの勝ちじゃん?」と思っておったのですが、このケースでは完全にAndroidの勝ちです。

コンシューマ向けはいざ知らず、企業向けの業務で使用する仕掛けにはAndroidがいいなー、と考えている次第でございます。いじり易いですもん。

iPhoneで同じことやろうとするといわゆる「脱獄」と呼ばれるような、いかにも犯罪の臭いぷんぷんになっちゃうんですよね。

業務用なら、機種を絞ってしまえばいいですから、さほどテストに神経を使わなくてもすみます。適材適所とはこれですなぁ。