LoginSignup
7
7

More than 3 years have passed since last update.

サーバクライアントなアプリを作成してみる

Last updated at Posted at 2019-10-29
1 / 42

このページについて

学習目的で、サーバクライアント式のスマートフォンアプリケーションを組んでみました。
本記事は、実装に当たって参考にしたサイトをまとめたリファレンス記事となります。
1画面、1GetAPIですが、やることは沢山あり大変勉強になりました。


【全体図】
ぷれぜんてーしょん1概要図.png


開発環境を準備する


image.png 
Server開発環境はいつも使っているEclipse。特にコメントなし。


image.pngimage.png
デザインツールにはBootstrap Studioを採用。
プロのデザイナー向けでは無い気がしますが、
私の様な非デザイナーがデザインする場合、

  • 種々のデザインテンプレートが用意されている
  • GUIベースで作成したデザインのHTML/CSSを自動出力してくれる

この2点が大変重宝します。

3000円位のシェアウェアですが、永久ライセンスで追加コストが無い点も〇。


image.pngimage.pngimage.png
今回、フロントエンド開発はCORDOVAを採用しました。理由は2点。

  • iOS, Androidの両方に対してアプリケーションをリリースしたい
  • 従来のWeb技術をベースに構築出来るため、学習コストの圧縮が期待出来る

Monacaはフロントエンド開発に対する統合開発環境で、実装からビルドまで実行することが出来ます。無料枠あり。神。


image.png
circleciは、Jenkins等の様なビルドツールです。無料枠があります。
本当はDocker&Jenkinsの予定でしたが、サーバ費用負担を減らすため没に。
今回はServerのCIツールのみ実施しました。


SpringBootでRestAPI Serviceを構築する


image.pngimage.png image.png
SpringBootでHelloWorldを動かす所からはじめて、次にRestAPIへと拡張させました。


一人開発もあり命名規則は適当になってしまったが、先に見て実践すればよかったと思う記事。


カバレッジを見ながらソースとテストコードを詰めていく


image.png image.png
テストコードはSpock、カバレッジ計測はJacocoを利用しました。
今更ながら初めてテストコード、カバレッジレポートを使いましたが、大変有用ですね。
ソースコードとテストコードが相互に堅確になっていく過程が嬉しい&楽しかったです。


JUnitは可読性に課題があるとのことでSpockを採用しましたが、こちらも非常に扱いやすかった。


カバレッジは活躍する範囲、補うべきテストケースを考える機会になりました。


APIのドキュメントを作成する


image.png image.png
Swaggerに依頼。GradleにSpringFOXを、mainクラスに説明文章などを記載すればOK。


デプロイ環境を構築する


image.png image.png
AWSが理想でしたが、学習コストの都合で扱いなれた月額性のCentOSサーバを借りることにしました。


やること1.Teraterm, WinSPCを使って作業出来るようにする

やること2.SpringBootが動くようにJDKをインストールする

やること3.SpringBootのJarをデプロイ&稼働確認

SpringBootはTomcatが内包されており、Tomcatサーバを立てずともjar単独で実行できます。

【Step1.とりあえず動かしてみる】
① jarをサーバへ転送(WinSCPで手送り)
② java jar (手送りしたjarのパス) でサービス実行
③ http://(サーバIP):8080/ で稼働確認

【Step2.常駐サービスとして登録する】
実際のサービスインに当たっては以下の作業を行って常駐化させています。


CORSに対応する


ここまで進めると、サーバ・クライアントそれぞれで実装が進められる様になります。
一方、実際に結合して通信するには、CORS(Cross-Origin Resource Sharing)に対応する必要があります。


POSTなど送信する場合はpreflight requestを意識した設定にする必要があります。


SSL通信に対応する


image.png image.png
AndroidのChromeではHTTPSでなければAPIとの通信を許可してくれない様です。
仕方がないので、Server側にSSLを設定しHTTPS通信が出来るようにしました。


やること1.独自ドメインを設定する

やること2.SSL証明書を取得する

米国の非営利団体が無料で提供しているLet's Encryptを利用しました。
Let's Encryptの証明書は3ヶ月で有効期限が切れるので、cronを仕込むと良いと思います。
※今回はApacheではなくnginxに管理を頼むので、下記記事内のApache導入箇所は無視して下さい。


やること3.nginxをインストールしてSSL証明書と紐付ける

nginxを導入した理由はSpringBootに直接SSLを組み込む方法が理解出来なかったためです。。


AppStoreに提出する


image.png
AppStoreに提出したい場合、リリース版のビルドには原則Mac(Xcode)が必要です。
私はWindowsユーザのため、Monacaのビルドサービスを利用しました。
1アプリケーションに対して3300円でリリース版のビルドを実行してくれます。


また、ビルド情報としてデバイスの登録も求められます。
実機デバッグも兼ねて、中古のiPhone6(Bランク)を買いました。約9000円。
コミュ力のあるみんなは、Appleユーザの友達からお古を貰いましょう。


iOSアプリを公開するには、審査をPassする必要があります。
NGでもチャットで丁寧にコメントをくれますので、指示に従って修正&再提出しましょう。


GooglePlayに提出する


image.png
GooglePlayではアプリの審査は無く、必要な情報を追加して提出すればよいです。


出来上がったもの


image.png
古典文章を入力すると、Mecabの形態素結果と一部単語は意味付きで返してくれるアプリ。
妻とテレビを見ていた時に何となく出たアイディアを真に受けたもの。


最後に(かかった時間とお金)


要素 コスト
工期 2019年5月~10月(6か月間)
工数 180時間くらい(1日1時間を目安に実施)
サーバ代 6930円(990円×7か月)
AppStore登録料 10000円くらい
GoogleDev登録料 3000円くらい
Monaca有料プラン 2000円くらい
Monacaビルドサービス 3300円
中古のiPhone6 9000円くらい
BootStrapStudio 3000円くらい
合計 37230円くらい

※Monacaは、ビルドを多用する月のみプランをひとつ上げて使っていました。


記事にすると1枚ペラですが、どれも初物で躓きながらの作業となり、時間がかかりました。
お金もそれなりに発生しましたが、(効率を鑑みて)ノーコストに拘るのは辞めて、出す所は出す様に心掛けました。


紹介は以上です。
折角こなれたので、エンハンスとか、新しいアプリとかまた作りたいですね。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7