感想:短期サマーインターン 東京工業高等専門学校4年

<インターン内容>

実習は,スマートフォン(アンドロイド端末)アプリの企画及び開発,既存のスマートフォンアプリの改良,PydevとAptanaのインストール,開発中のWebアプリの改良を行った。

1 スマートフォンアプリの企画

Google Playで配布する無料アプリの企画を行った。

(1)市場調査

まず,人気の出るアプリを開発するためのアイデアを出すため,ダウンロード数の多いアプリを実際に利用してみるという方法で市場調査を行った。その結果,短時間で遊べるような単純なゲームのダウンロード数が多いことが分かった。

(2)作成するアプリの決定

今回はインターン生2名で各自一つのアプリを作るのだが,二人で作業を分担することで,短時間で質の高いゲームを作れると考えたため,共通点の多いゲームを作ることにした。

話し合いの結果,自分は上から落ちてきたブロックをかわすゲーム。もう一人はブロック崩しを作成することにした。具体的には,まず好きな画像を選択してもらい,その画像にあたかもモザイクをかけたかのようにブロック状に加工する(図1にその様子を示す)。そして,作成したブロックを上からランダムに落ちるようにして,それをかわすゲームを作る。Google Playで既に公開されているゲームと差別化を図るため,アプリ内でアンドロイド端末のカメラを起動できるようにし,スムーズに写真をブロック化できる機能と,人物の顔を認識して顔の部分のみをブロック化できる機能を実装することとした。図2に行う作業の内容を示す。

 図1 ブロック化の様子

 

図2 作業内容

 

2 ゲームアプリ開発

私は画像を取得する部分と,ゲームのシステム部分のプログラミングを行った。プログラミングはWindows PCで開発ツールeclipseをダウンロードして行い,開発言語はJavaを使用した。

(1) SDカードのパスを用いた画像の取得

まず,Environment.getExternalStorageState()でSDカードの有無を確認する。そして,Environment.getExternalStorageDirectory().getPath()でSDカードのパスを取得する(端末の種類によって/sdcardまたは /mnt/sdcard/となる)。このパスを利用することで,SDカード内の全ディレクトリに入っているの画像データへのパスを取得できたのだが,実機で動作確認してみたところ,ディレクトリと画像が多すぎて強制停止してしまうことが分かった。

(2) Intentを用いた画像の取得

アンドロイドアプリの開発を行う際,画像や音声などの情報を利用したいことがしばしばある。その場合,Intentを用いることで画面の遷移及びカメラや加速度センサの利用をスムーズかつ簡単に行うことかできる。これを利用することで,先の画像取得の問題を解消し,さらにカメラの起動も行える。したがって,Intentで既存の画像を取得するための画像ギャラリー,そしてカメラを起動する。

(3) 画像のリサイズ

取得した画像を顔認識に通したところ,顔を顔と認識しなかった為,適当なサイズに加工した。

Intentでギャラリー・カメラから画像を取得した場合,JavaではonActivityResultに書かれた処理を行う。まず,カメラで画像を取得した場合はuriに画像の場所が入る。ギャラリーではdataに入るため,uri= data.getData();のようにuriに情報を移す。その後,inputstreamクラスを利用して,画像をディスプレイのサイズまでリサイズする。画像のサイズはDisplayクラスを用いてディスプレイのサイズを取得して調整する。

(4) ゲームのシステム

ゲームの主要部はSurfaceViewクラスを利用する。SurfaceViewクラスは画像の高速な描画を可能とするため,ブロックを表示し,表示位置を下げて再表示するという処理を繰り返すことで,ゲーム主要部を作成することができた。

 

3 アプリの改良

Shannon Labが開発したアプリに,発話機能をと音声認識機能を有しているものがある。具体的には,発話機能を利用してアプリユーザーに質問文を提示し,音声認識機能を利用して返答(はい・いいえなど)を受け取る,といったものである。

今回は,そのアプリをどのような端末でも処理できるように,アプリのプログラムをJavaで書き直すことになり,私は発話機能の部分の調査とプログラミングを行った。

発話機能は,端末に音声発話ソフトウェアをインストールした上で,TextToSpeechクラスを使うことで簡単に利用することができた。しかし,音声認識機能と組み合わせて動作確認してみたところ,発話の途中で音声認識を開始してしまうことでオーディオエラーが発生してしまった。発話の終了タイミングを取得することでその問題を解消した。

 

4 PydevとAptanaのインストール

Eclipse上でプログラミング言語pythonを扱うためにPydevを,Web開発を行うためにAptanaをインストールした。

Aptanaのインストールが始まらない不具合が生じたが,Pydevのバージョンが適当ではないことが判明した。なので,旧バージョンのPydevをアンインストールした後にAptanaをインストールしてみたところ,自動的に適切なバージョンのPydevのインストールが行われていた。

 

5 Webアプリの改良

先ほど作った開発環境でローカルサーバーを利用し,開発中のWebアプリの改良を行った。Webブラウザに表示された質問文にボタンを押すことで返答を返すアプリがあるのだが,ボタンを押すことでページが再表示されるため,ブラウザ上に表示している鳥の絵が,ボタンを押すたびに初期位置から出現してしまう不具合があった。Ajaxを利用することで,ページを再表示することなく,どのボタンが押されたかを出力し,次の質問文を取得して動的に表示することができるようにした。

 

<感想>

Shannon Lab株式会社で,4週間の実習を行った。

Androidアプリの開発,Webアプリの開発,開発環境の構築を通して,会社での開発の様子を学ぶことができた。触れたことのない言語を使用したので仕方のないことだと思うが,問題に直面し解決策を調査して手当たり次第試し,一歩進んでまた問題が起きる,といった具合であった。プログラミングを行う上で,学ぶべきことが多いと実感した。

本インターンシップを実施するにあたり,Shannon Lab株式会社の多くの皆様にご協力をいただきました。田中様を始め,ご協力いただいた皆様に感謝の意を表します。

Comments are closed.