このページについて
学習目的で、サーバクライアント式のスマートフォンアプリケーションを組んでみました。
本記事は、実装に当たって参考にしたサイトをまとめたリファレンス記事となります。
1画面、1GetAPIですが、やることは沢山あり大変勉強になりました。
開発環境を準備する
Server開発環境はいつも使っているEclipse。特にコメントなし。
デザインツールにはBootstrap Studioを採用。
プロのデザイナー向けでは無い気がしますが、
私の様な非デザイナーがデザインする場合、
- 種々のデザインテンプレートが用意されている
- GUIベースで作成したデザインのHTML/CSSを自動出力してくれる
この2点が大変重宝します。
3000円位のシェアウェアですが、永久ライセンスで追加コストが無い点も〇。
今回、フロントエンド開発はCORDOVAを採用しました。理由は2点。
- iOS, Androidの両方に対してアプリケーションをリリースしたい
- 従来のWeb技術をベースに構築出来るため、学習コストの圧縮が期待出来る
Monacaはフロントエンド開発に対する統合開発環境で、実装からビルドまで実行することが出来ます。無料枠あり。神。
circleciは、Jenkins等の様なビルドツールです。無料枠があります。
本当はDocker&Jenkinsの予定でしたが、サーバ費用負担を減らすため没に。
今回はServerのCIツールのみ実施しました。
- 公式HP ※チュートリアルを試して理解するのが手っ取り早い
- いまさらだけどCircleCIに入門したので分かりやすくまとめてみた
SpringBootでRestAPI Serviceを構築する
SpringBootでHelloWorldを動かす所からはじめて、次にRestAPIへと拡張させました。
- SpringBoot入門...いいから動確だ!
- Spring BootとJPAでREST APIを実装する(アプリケーション層編)
- Rest API(GET)を作ってみる
- Spring MVC コントローラの引数
一人開発もあり命名規則は適当になってしまったが、先に見て実践すればよかったと思う記事。
カバレッジを見ながらソースとテストコードを詰めていく
テストコードはSpock、カバレッジ計測はJacocoを利用しました。
今更ながら初めてテストコード、カバレッジレポートを使いましたが、大変有用ですね。
ソースコードとテストコードが相互に堅確になっていく過程が嬉しい&楽しかったです。
JUnitは可読性に課題があるとのことでSpockを採用しましたが、こちらも非常に扱いやすかった。
カバレッジは活躍する範囲、補うべきテストケースを考える機会になりました。
APIのドキュメントを作成する
Swaggerに依頼。GradleにSpringFOXを、mainクラスに説明文章などを記載すればOK。
デプロイ環境を構築する
AWSが理想でしたが、学習コストの都合で扱いなれた月額性のCentOSサーバを借りることにしました。
やること1.Teraterm, WinSPCを使って作業出来るようにする
やること2.SpringBootが動くようにJDKをインストールする
- Java: Linux (CentOS)からJDK (RPM PKG版)をアンインストールする方法
- CentOSにJDK、Tomcatをyumでインストールしてしまったものを最新にするとき
- CentOS7 + OpenJDK11 + Tomcat9 動作環境構築
やること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通信に対応する
AndroidのChromeではHTTPSでなければAPIとの通信を許可してくれない様です。
仕方がないので、Server側にSSLを設定しHTTPS通信が出来るようにしました。
やること1.独自ドメインを設定する
やること2.SSL証明書を取得する
米国の非営利団体が無料で提供しているLet's Encryptを利用しました。
Let's Encryptの証明書は3ヶ月で有効期限が切れるので、cronを仕込むと良いと思います。
※今回はApacheではなくnginxに管理を頼むので、下記記事内のApache導入箇所は無視して下さい。
- 無料SSL証明書のLet’s Encryptとは?
- ネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」
- CentOSにLet's EncryptのSSL証明書を導入する
やること3.nginxをインストールしてSSL証明書と紐付ける
nginxを導入した理由はSpringBootに直接SSLを組み込む方法が理解出来なかったためです。。
AppStoreに提出する
AppStoreに提出したい場合、リリース版のビルドには原則Mac(Xcode)が必要です。
私はWindowsユーザのため、Monacaのビルドサービスを利用しました。
1アプリケーションに対して3300円でリリース版のビルドを実行してくれます。
また、ビルド情報としてデバイスの登録も求められます。
実機デバッグも兼ねて、中古のiPhone6(Bランク)を買いました。約9000円。
コミュ力のあるみんなは、Appleユーザの友達からお古を貰いましょう。
iOSアプリを公開するには、審査をPassする必要があります。
NGでもチャットで丁寧にコメントをくれますので、指示に従って修正&再提出しましょう。
GooglePlayに提出する
GooglePlayではアプリの審査は無く、必要な情報を追加して提出すればよいです。
出来上がったもの
古典文章を入力すると、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枚ペラですが、どれも初物で躓きながらの作業となり、時間がかかりました。
お金もそれなりに発生しましたが、(効率を鑑みて)ノーコストに拘るのは辞めて、出す所は出す様に心掛けました。
紹介は以上です。
折角こなれたので、エンハンスとか、新しいアプリとかまた作りたいですね。