スマホで開発環境構築

全くの私事ですが、最近Googleから発売されたPixel3aを購入しました。
実はスマートフォンに簡易的な開発環境を構築することができるのはご存知でしょうか。

手元にPCが無い!けどソースコードを見たい、書きたい、コンパイルしたいという
変態ニッチなケースに対して、一部ですがアプリを紹介したいと思います。

※「開発者モード」を除き、いずれも個人的に利用したものになります。仕事で使えるかについては、セキュリティなどの社内の決まりをよく確認しましょう。

 
開発者モード

Androidには、開発者モードがあります。
有効にすると、以下のような開発者向けの表示や設定ができます。
・USBデバッグ(開発用PCからアプリインストールやログ取得ができるようになる)
・通信設定(WiFi詳細ログ、モバイルデータ通信を常にON)
BlueTooth設定
・タップ位置の表示
・画面描画の詳細表示(画面更新時に点滅、アニメーション設定)
・GPUレンダリング設定
・アプリ設定(アクティビティ保持OFF)

やり方は設定画面の「ビルド番号」を連打するだけです(自己責任で)。

qiita.com

sp7pc.com


AIDE

play.google.com

Android上でAndroidアプリが作れる開発者向け統合環境アプリです。

利点
JavaコンソールアプリやAndroidアプリが作成可能
・コード補完が優秀
・GitやDropBoxにあるソースと連携可能
・UIのレイアウトエディタなども具備

弱点
Xperiaと相性が悪く、端末によってはコンパイルできなくなることもあります
・昨今Android開発で推奨されるKotolinは非対応
アノテーションプロセッサが対応していないので、RealmやLombokが使えない


Pydroid

play.google.com

Android上でのPython統合開発環境

利点
・エディタ内蔵。シンタックスハイライトもお手の物。
・パッケージ管理ソフトも内蔵。pipもUIを通して実行できる。

弱点
・インストールに失敗するライブラリもある(Pydroidが対応していない?)


CodeAnywhere

play.google.com

オンライン開発環境CodeAnywhereへアクセスするアプリです。
無料枠であれば、一時的に開発用コンテナ(Dockerからの仮想マシン)を借りて
Webサーバを立ち上げることができます(恒久的に立ち上げる場合は有料)

利点
・上記に挙げたような疑似環境ではなく、ちゃんとLinux環境で動作させることができる

弱点
スマホで作業するには画面が狭い、リモートなので重たい
・オンライン開発環境なので、モバイルデータ通信の容量に注意
・無料枠で開発するならばコンテナの生存期間が短く、再起動にも時間がかかる


Termux

play.google.com

Android上でLinux環境を構築できます。
Android上のシェルにアクセスして、BusyBoxのコマンドを提供しているつくりのようです。
node.jsやpythonの環境を作ることができました。

利点
・apt-getやpkgコマンドが利用可能なので、必要なコマンドを追加可能
・SDカードなどでコマンドを叩くことができる

弱点
・SDカードの制約でシンボリックリンク(ハードリンクも)が作成できない。
 (内部でシンボリックリンクを使ったプログラムは使用できない)
・pkg/aptのarchitechtureはarm,archlinuxになっているようで、
 X86でしか提供されていないライブラリはインストールできなかったです
 (libsassはインストールできなかった(ソースからも試みたが駄目だった))


GoogleRemoteDesktop

chrome.google.com

Googleアカウントを通してPCにリモートログインできるモバイルアプリです。
ChromeChromeプラグインさえあれば容易に環境構築できます。

(あまりに簡単にリモート環境が構築できてしまうので、利用する際はセキュリティなどによく注意しましょう)

利点
・比較的容易にリモート環境を構築できます
・ちょっとPCの画面を確認したいときなどに便利

弱点
スマホで作業するには画面が狭い
・通信遅延がある(もさもさする)
・オンラインなので、モバイルデータ通信の容量に注意


Termius

termius.com

スマホssh通信ができるアプリです。
PCにsshログインしてvimエディタで作業できます。

 利点
・ちゃんと環境さえ整えておけば情報系技術者であれば、これでだいたいなんでもできます。

弱点
CUIオンリーなので、UIを使った開発はあきらめざるを得ない
 (VisualStudioCodeとかeclipseとかAndroidStudioとか使えない)
・viコマンドを覚える学習コストもかかる

 

Realmやアノテーション技術を使ったライブラリが出そろう前までは「AIDE」をずっと使っていました。非常に優秀な開発アプリだったので、今後のアップデートに期待です。

いまは、スマホで完結するような簡単な作業やスクリプト程度であれば「Termux」、
「Terminus」でsshログインで作業をし、UIがあるアプリなどで作業をする場合があれば「GoogleRemoteDesktop」を使うという使い分けをしています。

PCで開発するのが一番早いですけど、あくまで臨時環境のはなしでした。

 

YOSAKOIソーラン

久しぶりの更新になります。

 

さて6月5日から札幌市大通公園では
YOSAKOIソーラン祭りが開催され
大変な賑わいをみせています。

 

YOSAKOIソーラン祭り 公式ホームページ
www.yosakoi-soran.jp


弊社では「通信エンジニアリング事業」も行っており、
このイベントを通信についての切り口で見てみたいと思います。

 

放送関連

会場すぐ横にSTV札幌テレビ放送)の中継車が停まっていました。
中継車にはパラボラアンテナが設置されています。

f:id:tri-development-center:20190607090210p:plain


パラボラアンテナが向いている先を見ると・・・

f:id:tri-development-center:20190607090240p:plain

ビルの隙間を縫ってSTV(札幌テレビ放送)社屋が見えます(電波塔のある建物)。

 

パラボラアンテナは指向性の大容量通信に向いているので、
おそらく会場で撮影した映像を
中継車のパラボラを通して放送局に送信しているのでしょう。

にしても、うまいところに中継車が設置されているものです・・・。

 

スマートフォン

携帯電話の基地局には許容量があることをご存知でしょうか。
特定の場所に携帯電話が集まりすぎると、基地局でさばける通信があふれて

「電波があるのに繋がりにくい」といった現象が起こります。

 

なので、イベントがあると携帯電話キャリア
移動基地局という臨時の基地局を設置することがあります。

 

各キャリアのイベント対策状況
  • ドコモ:エリア対策強化イベント

www.nttdocomo.co.jp

  • au:イベント対策

www.au.com

www.softbank.jp

 


…おおう。
YOSAKOIソーラン祭りは各社移動基地局は出していないようです。

 

キャリアに従事しているわけではないのであくまで想定ですが、
移動基地局について、電波の原理に問題があります。

 

電波の特性

www.nttdocomo.co.jp

 

f:id:tri-development-center:20190607090532p:plain

(電波の特性サイトからスナップショット抜粋)

 

大通公園は札幌市中心部で密集地になります。
そのため、基地局の容量が溢れないようにたくさんの基地局
それぞれケンカ(電波干渉)しないようにビルの屋上に立てています。

 

そこへ安易に移動基地局を立てると、

持ち場の奪い合いのようなケンカ(電波干渉)を招いてしまい
かえって通信できなくなってしまう現象が起こります。

 

大通公園はイベントが多いので
もしかすると定常的にイベント対策済みなのかもしれませんね。

 

 

#あ、結局ほとんどYOSAKOIとは関係ない内容になってしまった!

 

<2019/06/10 追記>

土日のYOSAKOI決勝に向けて、金曜の夜にはTV中継車のパラボラがパワーアップしていました。

f:id:tri-development-center:20190610091452p:plain



OracleJDK有償化

去年のDevelopersFestaSapporo2017というイベントに行ってきて、

日本オラクルの方のプレゼンでJava有償化に触れていました。

(今年も出席したい・・・)

www.devfesta.jp

 

Javaの開発ツールJdk(正確にはOracleJdk)が有償化するそうです。

OpenJdkが現在のJdkレベルまで引き上げられて、

無償で使いたい人はOpenJdkを使ってねという感じのようです。

ただ、企業でJavaを使っている場合は長期サポート付けたほうが良いので

OracleJdkを使っていった方がよいという意見があります。

 

来月にはJava 10が登場し、9月にはJava 11が登場予定。

新しいリリースモデルを採用した今後のJava、入手方法やサポート期間はこう変わる

(OpenJDKに関する追記あり

www.publickey1.jp

上記リンクの抜粋ショットです。

f:id:tri-development-center:20180904132622p:plain

商用で使うのは2019年1月までサポートのようです。

OracleJdk11からは有償モデルで、OpenJdk11を使わなければ有償のようです。

Jdk9やJdk10は半年程度しかサポートされないので、ほんとに「繋ぎ」にしかならないです。

KotlinなどのJavaコンパイルするJVM言語がせっかく流行ってきたのに、いったいどうなるんでしょうか(影響ないのか全然わからない・・・・)。

 

Java有償化でかかる金額などについてはこちらが分かりやすいです。

2018年にJavaを利用している人は全員理解すべきことを説明してみる(追記あり

www.orangeitems.com

上記リンクの抜粋ショットです。

f:id:tri-development-center:20180904132922p:plain

1プロセッサあたり年間60万円はなかなかハードル高そうです。。。

ただ、Java有償化まわりの情報は各ベンダーの意向もあってなんだか流動的です。

(各ベンダーの意向がありすぎてJavaの更新が進まない現状もあるのですが…)

 

フレームワーク

フレームワークとは、骨組みのようなものです。
アプリケーションを開発する際は、
お客様が要望される機能や画面を、
骨組みに肉付けするように作成することで、
提供しています。

アプリケーションフレームワーク - Wikipedia


WebであればApacheStrutsというフレームワーク流れが多かったのですが、
Strutsには脆弱性が見つかり、また多種多様なフレームワークが登場しています。

様々な特徴を持ったフレームワークが存在することで多様性があるということは
理解できますが、エンジニアにとっては学習コストが多くてなかなか大変です。


代表的なフレームワークを挙げます。


Apache Struts

Webアプリケーションフレームワーク。言語はJava
ApacheTomcatというWebサーバ上で動作します。
広く一般的だったが脆弱性により情報漏洩の被害が発生し、今では選択されない。

Welcome to the Apache Struts project


Spring

Webアプリケーションフレームワーク。言語はJava
様々な機能を持ったモジュールで構成されており、
ネットでも情報が豊富に存在しているので、
Strutsから選択されることも多い。

spring.io


Seasor

Webアプリケーションフレームワーク。言語はJava
一般的には骨組みと肉付けの対応は設定ファイルによって定義されるが、
Seasorは「設定よりも規約」という概念で作られており、
規約(例えばファイル名など)に従うことで動作するので
設定ファイルが少なくて済むのが特徴。
国産だが、2016年で終了(EndOfLife)。残念。

www.seasar.org


RubyOnRails

Webアプリケーションフレームワーク。言語はRuby
Railsとも呼ばれる。これも「設定よりも規約」タイプ。
サーバからクライアントまで一貫してカバーするフルスタックフレームワークの先駆者。

github.com


Express

Webアプリケーションフレームワーク。言語はJavaScript(Node.js)。
Node.jsと言われるJavascriptエンジンで動作するWebサーバのスタンダード。
MongoDB(Database), Express(WebFramework), AngularJS(MVCFramework), Node.js(JavascriptEngine)
の頭文字をとってMEANと言われる統合環境がフルスタックフレームワークとして成長しつつある
(サーバからクライアントまでJavaScriptJSONだけで統一できる)。

Express - Node.js web application framework


このほかにも数えきれないほどのフレームワークが存在します。
すみません・・・。


個人的には2006年くらいから開発業務している私にとって
コマンドひとつで環境が自動的に構築できるようになってきたことが脅威と感じます。
それはパッケージ管理システムが潤沢に機能するようになったことが要因です。
Linuxには早くから機能が実装され、BSD系であればports、Debia系であればapt、Redhat系であればyumというコマンドが代表的です。
(2006年当時はyumは無くてrpmを自分でかき集めてインストしていた…)

これがプログラミング言語でもサポートし、
RubyであればGems、Node.jsであればnpmのコマンドを使えばサクサク環境が構築できます。
便利な時代になりました。

NOSQL

システム開発にてデータを保存する際、Oracle,MySQLをはじめとするリレーション型のデータベース(RDBMS)が一般的に使われてきました。SQLと言われる言語を用いて、データを登録・更新・削除を行うシステムです。データ間に連携がある場合にもSQLは柔軟に対応しており、SQLを覚えることはデータベースアクセスに必須の言語でした。

 

昨今では、NOSQLと言われるデータベースが登場しつつあります。SQLを使わずにデータを登録・更新・削除する仕組みです。


個人的に私が経験したNOSQLなデータベースは以下です。

Apache River

私が経験したときはまだSunMicrosystemsが運営しておりJiniと言われていました。Javaのクラスをネットワーク上に共有する分散システムです。ストレージではなくネットワーク上の共有空間に、問合せやトランザクションが張れる仕組みでした。
※jiniはNOSQLという言葉が出てくる前の遠い昔の技術です・・・。

Apache River -

 

Realm

モバイル向けDBから始まったデータベースです。RealmObjectを継承したクラス単位にデータ保存が可能です。Androidアプリ開発では非常に便利に使えました。

realm.io

 


いま気になっているデータベースはこれです。

MongoDB

大量データを捌くために開発されたデータベースです。
JSON単位でデータ保存が可能。利用率は世界第4位との情報も見受けられます。 www.mongodb.com

 

 

あとは大手クラウドは以下のようなサービスを展開しています。

 

Firebase

Google社が運営。GoogleCloudPlatformと連携可能。MonogoDBから始まってリアルタイムデータベースへ。データの変更がAndroidへリアルタイムにプッシュされたりします。

またモバイル側がオフラインでもモバイル側のキャッシュで動作するので、サーバレスなアプリが開発も可能と言われています。

firebase.google.com

 

DynamoDB

Amazonが運営。AWSで利用可能なデータベースです。

aws.amazon.com


CosmosDB

Microsoftが運営。Azureで利用可能。

azure.microsoft.com

 

CSSフレームワーク

PCでもタブレットでもスマホでも
Webサイトが綺麗に見れる「レスポンシブWebデザイン」

レスポンシブ対応のWebサイトを構築する上で
近道としてはCSSフレームワークと言われるものを適用するという方法があります。

※ただしCSSフレームワークによってはカスタマイズが利きにくいものや、
 他のライブラリと競合すると場合があるので、実際に使用する際は吟味しましょう。

昨今注目されているCSSフレームワークを挙げてみます。

 

BootStrap

getbootstrap.com

広く用いられているので、機能やテーマが多かったり、
困ったときの情報検索で引っかかることも多いです。
ただしclassがガチガチに定義されているので競合することが多く、
また機能が多い分データ容量が大きく、表示が重たいという難点もあるようです。


Foundation

The most advanced responsive front-end framework in the world. | Foundation

Bootstrapと同じくらい豊富な機能があり、
Bootstrapの次くらいにメジャーなフレームワークです。


UIKit

getuikit.com

マテリアルデザインのページが作れるフレームワークです。
UIコンポーネントも豊富かつ綺麗で、class設計も比較的わかりやすいです。

 

GoogleMapAPI

今更ですが、2018/06/11より、GoogleMapAPIがGoogleMapsPlatformに変わったそうです。これによって料金体系がガラリと変わったみたいです。

 

APIKeyを取り直さないといけなさそうだったりするのかな・・・汗

cloud.google.com

 

個別料金表(※2018/07/16から適用)

cloud.google.com

 

以下は関連サイト情報

www.marie-web.design

 

jp.techcrunch.com

 

maps.multisoup.co.jp