iPad環境でのデータ分析環境を作ってみた

この記事は、ドコモアドベントカレンダー16日目の記事になります。

## はじめに

データ分析といってもいろいろと幅広いですが、私のチームでは主に位置情報データなどを用いた案件を担当しており、特に最近では予測モデルを構築する内容が増えています。

普段はMacBookなどを用いてコーディングや分析作業を行っていますが、都内では大規模なスポーツイベントなども控えているため、在宅などのリモートワークが推奨されるようになり、作業場所が会社ではないことも増えました。しかし、PCの持ち出しは情報管理上のリスクがあり社内手続きが面倒ですし、それなりに重いので持ち歩きたくありません。幸いにも社内システムにはタブレットでもアクセスできるので、よほどでない限りはiPad Pro + Smart Keyboad + [Swiftpoint GT Mouse](https://www.swiftpoint.com/products/swiftpoint-gt-ergonomic-mouse/)を使ってリモートワークを行っています。このマウスは価格が高いですが、iPadのVMware HorizonやSplashtopなどのリモートデスクトップ系アプリでマウス操作ができる数少ない製品でした（iPad OSになってからはBTマウスにOSレベルで対応しました）。

iPadであれ事務作業をするときはWindows環境に入るのですが、データ分析はMacを使っていたので、iPadでどうにかできないか調べてみました。

![IMG_1141.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320413/5a84b5ff-d516-5234-e58d-6805a7a47415.jpeg)

## 前提

iPad OSもリリースされ、Apple社はPCの代替として使えることをアピールしているようですが、少なくとも開発やデータ分析においてはLinux等が使えるサーバ環境やクラウドがないと厳しいです。

開発用のネットワーク環境が整備されていて、そこにiPadから入れることが今回のお話の前提になります。ただ、昨今はAmazon Web Services (AWS)等のクラウド環境を利用されている場合が多いと思うので、割と何とかなるのではないでしょうか。

社内からのみのアクセスに限定するようIP制限等を設定されている場合が多いと思いますが、固定IPが使えるSIMや光回線（というかプロバイダ）もありますので、アクセス元として追加してもらえば良いでしょう。もちろん、社内ネットワークにVPN接続もありです。

## サーバへのリモートアクセス（主にSSH）

まずはじめに、シェルにアクセスできないと進まないと思いますので、SSH等で作業をする際に使うアプリを調べてみました。
PCなら難なくこなせるこの程度のことでも、iPadでやろうと思うと意外に選択肢が少なかったりします。

SSHクライアントアプリは有償のものも多く、どれを使うのか悩んでいたのですが、[xckb的雑記帳](https://xckb.hatenablog.com/entry/2019/01/19/194952)さんが複数のアプリを比較検証した結果を公開しています。

もちろんSSHでも良いのですが、モバイル環境から使うのであればmoshの方がネットワークが切れてもセッションが継続されるのでおススメです。というかそもそもiOS系ではアプリをバックグラウンドにまわすと、音楽再生などの一部アプリを除いて、最長5分で動作が止まってしまうので、再接続を自動的に処理してくれないとストレスが溜まります。

上記の記事にある通り、moshが使えて日本語の入力・表示もできるのはTermiusとBlinkになります。（社内的な事情もあり、）AWS上のインスタンスは踏み台サーバを経由する必要があるので、できればエージェントフォワーディングにも対応してほしいのですが、そうするとTermius一択になります。でもサブスクリプション型の課金モデルは色々と面倒なので、Blink Shellで踏み台サーバをconfigに入れる方法で対応します。

<!-- Blinkアプリのスクショ -->
![2019-12-16 20-13-52-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320413/cbaa6f3b-5a40-d21e-5908-6196f81e298c.png)

ちなみにBlinkはAppStoreでは有償ですが、Githubにコードが公開されているので、自分でXcodeでビルドすれば導入できます。
ローカルでシェルライクな操作もできるので、コマンドラインでsedとかawkがかける人はちょっと便利に使えます。

同様にシェルライクに使えるアプリとして[iSH](https://ish.app/)というアプリもあり、こちらはPythonが使えたり、apkコマンドでパッケージを追加できるのでmoshクライアントもインストールすれば利用可能です。しかし、バイナリが追加できるアプリは規約上、AppStoreでは配布できないので、TestFlightを経由してインストールする必要があります。詳細な手順は上記の公式サイトに書いてあります。

<!-- iSHアプリのスクショ -->
![2019-12-16 20-12-39-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320413/59bb2132-62e8-9a4e-155e-c017ae450632.png)

個人的にはローカル上でもある程度のコマンドが使えるiSHを使っていますが、個々人の状況に合わせて好きなアプリを使ってください。

## データベースを使った分析

データ分析といっても、機械学習うんぬんの前にデータベース等でデータの分布をみて傾向を把握したり、加工を行ったりすると思います。そこで、SQLを使ったデータベースの操作をiPadからやってみたいと思います。

Macでデータベースの操作をする際には、[Navicat](https://jp.navicat.com/products/)を利用していますが、これのiOS版もリリースされています。iOS版は現時点でMySQL、PostgreSQL、MariaDBに対応しているようです。テーブルの内容をざっと確認したいときにフィルターやソートを簡単にできるので便利だと思います。クエリーを書く際には補完が効くので、テーブル名やカラム名がうろ覚えでも何とかなる点は良いですね。

<!-- Navicatアプリのデータビュー画面スクショ -->
![2019-12-16 20-13-05-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320413/5b106dc4-e5cc-0da5-2f0a-e0b46e49ce51.png)

<!-- Navicatアプリのクエリービルダー画面スクショ -->
![2019-12-16 20-13-16-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320413/2dea1fe6-7a54-71fe-4f51-039b295a05b1.png)

基本的にはデータの加工や処理はCLIでやるかPythonコードからなので、Navicatの使用用途としてはデータの確認がほとんどだと思います。

## Jupyter Notebook環境を使った分析

最近はデータ分析をするとなったら、まずは[Jupyter Notebook](https://jupyter.org/)が使える環境を構築する場合がほとんどだと思います。
ブラウザベースでインタラクティブにPythonなどのコードを実行できるのですが、iOSのブラウザでは微妙に操作しづらく、セル間移動などするにも画面タッチが必要になるので使う気が起きません。

そこで、Jupyter Notebookのサーバに接続するクライアントアプリである[Juno Connect for Jupyter](https://apps.apple.com/app/id1315744137)を使っています。自分で立てたサーバーにアクセスできるのはもちろん、サーバーがないという場合にもAzure上のJupyterサーバーを立ち上げて接続することができます。

<!-- Junoアプリのスクショ -->
![2019-12-16 20-14-21-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320413/bc64c755-f192-3e48-9ae9-ceff2b59a95f.png)
![2019-12-16 20-14-04-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320413/489840ed-c3e4-4d5b-3634-61af9d547aa5.png)

iPad内ではなく、あくまでリモートのサーバー上で実際の処理を行うので、自分で好きなライブラリを追加できますし、リッチなハードウェア上で作業が行えます。もしネットワークがない環境などでiPadのローカル環境でJupyterを使いたいという場合は、[Juno](https://apps.apple.com/app/id1462586500)というアプリもあります。これはJupyterサーバ自体もiPad内で動作させるもので、使えるライブラリは限られます。一応、numpy、pandasあたりは使えるのですが、scipyなどはまだ未対応です。とはいえ、Pythonのみで実装されているライブラリであればPyPIのレポジトリからインストールして追加することができます。

<!-- JunoアプリのPyPI画面スクショ -->
![2019-12-16 20-29-39-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320413/e3cdb0a5-0cd8-966d-94a3-34e962159262.png)


## 最後に

まだまだiPadでの作業環境はPCには及びませんが、ここで紹介したようなアプリを組み合わせることで、少なからず代替として使えるような場面は増えてくると思います。iPadなら持ち運びは楽ですし、立ち上がりも早いので、作業したいときにサッとコードを書けるのは良いところだと思います。ぜひ、皆さんも快適な作業環境を目指して色々と試してもらえれば幸いです。