iPadで「どこでも」プログラミングしよう

# iPadで手軽に気楽にプログラミング

投稿日みればわかるかと思いますが、2018年4月上旬時点の情報です。
スクショ掲載してますが、バージョンアップ等でUIが変わっていく可能性が満載な事を先に喚起しておきます。

**「iPadでプログラミングしたい！」**
この欲望を叶えるために、AWS Workspacesを利用してWindows ServerにVisualStudio突っ込んでリモート環境に繋いで実現させてました。

しかしこれ、リモートで画面共有するんで通信量が結構いっちゃうんです。
バッテリー消費もそれなりにするし、iPadも熱帯びてきますし……

軽いエディターくらいでもいいからなんかないの？と思っていたこの頃、
出会ってしまった感 高まったため紹介したいと思います。

# クラウドIDEの「codeanywhere」

クラウドIDEとは、ってここで書くと長くなるので検索してみてください。
codeanywhereとは、ってここで書くと長くなるので…

簡単な説明すると、クラウド上にコンテナ作ってその中を自分で弄れるよってことなんです。
codeanywhereのアカウント登録さえすれば、AWS使うより手軽にサクッと開発環境持てるよ？
っていうのがポイントです。

![logo.PNG](https://qiita-image-store.s3.amazonaws.com/0/113090/7802237e-4a7f-8bc5-a9d8-3288cac9806a.png)
[codeanywhere](https://codeanywhere.com/)

## iOS以外でも利用可能
自分がiPadでプログラミングしたいのでiOSとしてますが、Androidも対応してますし、ブラウザ(chrome)からのアクセスも可能です。
元々Google Chromeのアドオンとしてリリースされていたのを数年前に利用したのがきっかけですが、以来メルマガ的なのが届くくらいのお付き合いしかしてませんでした。

# codeanywhereを使おう！
前置きはこれくらいにして、iPadでプログラミングするための導入部を紹介していきます。

## このエントリーで目指すこと

**「httpアクセスしてweb表示させるぞ！」**
コレを世間では「Hello World」と呼びます。

## 方向性と道筋
- codeanywhere のアカウント登録
- codeanywhere のインストール(iPad)
- codeanywhere でコンテナ作成
- ターミナルで最低限の準備
  + pip アップデート
  + flask インストール
  + ディレクトリ作成
- 最低限のプログラミング
- 起動
- アクセス

# アカウント登録
まずはcodeanywhere のアカウント登録を行います。
メールアドレスとユーザー名の登録をしますが、認証メールが送られてくるタイプのやつです。
それほど手間ではないはずなので、詳細は省きます。

[codeanywhere](https://codeanywhere.com/)
※sign upから登録してください

## お試しならばライセンスはfree で十分
作成できるcontainerが1つだけなど機能は制限されてますが、free プランでも使い勝手を十分知れるはずです。

料金については下記を。
[codeanywhere pricing](https://codeanywhere.com/pricing)

※2019年3月追記
 どうやらFreeプランは7日間だけ試用可能な制限がついてしまったようですね…
 GoogleDriveやDropbox上のファイルを編集するためのエディターとしてはFreeで使い続けられるようですが、
 コンテナ(仮想環境)を立てて使い続けるならば、月々約270円前後支払いが必要なようです。

#codeanywhere をインストール
ストアからcodeanywhere を入手します。
サイズは約30MB。
 
[App Store（codeanywhere）](https://itunes.apple.com/jp/app/codeanywhere-ide-ftp-ssh/id1330643736?mt=8)

# codeanywhere の操作
## ログイン
codeanywhere 起動後にログイン画面になりますので、先ほど登録した（以前からお持ちの）アカウントでログインします。
ログイン後、トップメニューに遷移します。


![img001.png](https://qiita-image-store.s3.amazonaws.com/0/113090/ba2acbe6-3214-27d3-b956-83bcedec345f.png)

## コンテナ作成
そのままconnection wizardが表示されます。
今回は「Container」を選びます。
![img002.png](https://qiita-image-store.s3.amazonaws.com/0/113090/7404a52d-d896-60d1-cd8f-5705e19989fa.png)

Containerの環境を選びます。
選べる環境はOSがUbuntu 14.04 か CentOS 6.5、
開発環境として、.NET、AngularJS、C/C++、PHP、Go、Java、Node.js、Ruby、swift、wordpress等が選べます。
今回はさくっと表示させたいためpython3のubuntu14.04を選びます。
画面右上のNextをタップするとプロジェクト名入力画面が表示されます。
（今回はproject_xとしました）
![img003.png](https://qiita-image-store.s3.amazonaws.com/0/113090/e1a5f7c6-9d9d-5e1d-5dc1-c0312c532676.png)

コンテナの作成と起動中です。
プロジェクト名の横に文字がなくなったら自由にいじくれます。
![img004.png](https://qiita-image-store.s3.amazonaws.com/0/113090/3a4b6dc8-8344-3781-1834-15caba744487.png)

ちなみにコンテナが作成されたらinformation画面が表示されます。
スペックやコンテナへのアクセスlinkが記載されてます。
念のためURLの一部は伏せてます。
![img005.png](https://qiita-image-store.s3.amazonaws.com/0/113090/a5693e9e-efee-d782-2cbd-cbed99666e23.png)

## 注意
クラウドIDEと言っているくらいなので当然ですが、ネット回線が切れると操作不能になります。
ローカルにコンテナ作っているわけではないということですね。
![img006.png](https://qiita-image-store.s3.amazonaws.com/0/113090/a93c1bd6-634d-26a7-7c36-0e2b4e3a59fd.png)

## ターミナル起動
プロジェクト名横のドットアイコンをタップします。
![img007.png](https://qiita-image-store.s3.amazonaws.com/0/113090/acad644b-c8ee-c363-4203-cab28eb9a606.png)

モーダルメニューの一番上に「SSH Terminal」があるのでタップします。
![img008.png](https://qiita-image-store.s3.amazonaws.com/0/113090/12e4524e-5d1c-82b4-643d-e4fe97621da0.png)

ターミナルが起動しました！
この時点で「やった！」とか思っちゃうわんぱく小僧ですみません…
ここから細かな環境を整えていきます。
![img009.png](https://qiita-image-store.s3.amazonaws.com/0/113090/efffa9a9-dc26-3cc8-0d87-c61b06b3c554.png)

## セットアップ
まずはpythonのバージョン確認です。
どちらも投稿時点では古いバージョンです……
virtualenvはプリインストールされているのですが、ひとまずここはサクッと表示させるのが目的なので3.4.3で我慢してやります。
ちなみにiPadの入力を気遣ってか、コンソールやコードエディター画面ではアシスト入力がちゃっかりと用意されています。
（これのおかげかBluetoothキーボードのCTRLとかALTが利かないという罠）
![img010.png](https://qiita-image-store.s3.amazonaws.com/0/113090/482959f1-8307-d547-1e69-10d0f653ce56.png)

必要なパッケージをインストールしたいので、pipの更新もしておきます。
![img011.png](https://qiita-image-store.s3.amazonaws.com/0/113090/f3125c52-145d-89fb-c629-4f772ec1e63d.png)

お約束のpermission denied……コンテナなので権限周りがナイーブなのですね……

```terminal
python3 -m pip install --upgrade pip --user
```

そういう時に使うのが、最後のuserオプション。無事更新。

そして軽量フレームワークのFlaskを導入します。
インストールできたら「source」ディレクトリを作成します。
![img012.png](https://qiita-image-store.s3.amazonaws.com/0/113090/a6d244e7-d2c8-ed5c-fe98-b437bb0b9083.png)

## ソースコード準備
画面上部の左矢印でプロジェクト画面に戻ります。
プロジェクト名をタップすると、プロジェクトディレクトリに入ります。
![img007 (2).png](https://qiita-image-store.s3.amazonaws.com/0/113090/a4bd51c3-1004-e64f-a0aa-1fd295ae1e8c.png)

先ほどターミナルで作成したsourceディレクトリが出来ているはずです。
もし表示されていなければ、画面を下にスワイプしてリロードしてみましょう。
表示されたsourceディレクトリをタップします。
![img013.png](https://qiita-image-store.s3.amazonaws.com/0/113090/70bd1582-ce74-2628-e63f-7556d519dbfb.png)

sourceディレクトリにはまだ何も存在しません。
ロケットアイコンをタップすると操作コマンドがずらりとでてきますので、「New File」をタップします。
![img014.png](https://qiita-image-store.s3.amazonaws.com/0/113090/040b4fb2-5f89-1cdf-3a4b-a8bfcb4ef60d.png)


エディター画面が表示されます。
ひとまずpythonらしくモジュールのimportを一行書いてみました。
せっかくのエディターですので、もっと雰囲気を出したいですね……
ということで、ロケットアイコンをタップします。
![img015.png](https://qiita-image-store.s3.amazonaws.com/0/113090/44f46af1-0c41-fba5-2b6f-d55f2042d326.png)

エディターのModeが選べます。ここでPythonを選択、またはMode:Pythonと入力します。
![img016.png](https://qiita-image-store.s3.amazonaws.com/0/113090/a88deb87-aeca-0ed6-d1b9-fc671a3bfce5.png)

文字色がかわりました！それっぽいですね！
というエディター感を堪能したところで一度保存しておきましょう。
画面上部の右端のドットアイコンをタップします。
![img017.png](https://qiita-image-store.s3.amazonaws.com/0/113090/ddea464e-320c-950e-2ea4-55a09ed9973d.png)

ハンバーガーメニュー内に「Save As」がありますのでタップします。
（文字をタップしないと反応しないくらいシビアな判定でした…）
![img018.png](https://qiita-image-store.s3.amazonaws.com/0/113090/315db88a-0e86-8da5-6827-e1b0983b220a.png)

ファイル名称と保存先のディレクトリを選びます。
ファイル名は入力し、ディレクトリは選択式となってます。
「Destination」下のディレクトリをタップするとファイルブラウザ画面になります。
この画面下部に「SAVE」と「CANCEL」があります。
![img019.png](https://qiita-image-store.s3.amazonaws.com/0/113090/a910c81f-17ad-e49d-950b-c0bad1cca866.png)

分かりづらいですが、保存したいディレクトリ内に入った状態で右上のディレクトリアイコンをタップして選択状態となります。
「Save As」画面に戻って「SAVE」をタップします。
![img020.png](https://qiita-image-store.s3.amazonaws.com/0/113090/9c76692b-b3e9-35f6-23af-d266adf15c2a.png)


保存されたmanage.pyを完成させます。
![img021.png](https://qiita-image-store.s3.amazonaws.com/0/113090/04b8ff0c-abf9-3492-2fcb-8ecf72b05be9.png)

コードプリンタ使ってよ！と言われるかもしれませんが、今回はアプリの使い方がメインです。
そして、コードは、自力で書けばかくほど、慣れてきますから、頑張って、くだしぁ。

## app.run
ターミナル画面に戻ります。画面（タブと呼ばれている）は画面上部の右に数字が四角く囲われている箇所をタップすれば切り替えできます。もしくは画面上部を左右にスワイプしてみてください。（このへんは自分もまだ慣れてないです）
![img021 (2)_LI.jpg](https://qiita-image-store.s3.amazonaws.com/0/113090/7b822014-40fc-fa84-d634-fe226e35c7cb.jpeg)


ターミナルで作成したmanage.pyを実行します。

```terminal
#cd source
python3 manage.py
```

![img022.png](https://qiita-image-store.s3.amazonaws.com/0/113090/5fb41a10-254b-b21e-2477-1e091baa5a4d.png)


flaskが良しなにhttpサーバーを起動してくれますので、あとはアクセスするだけです！
親切にアクセスIPを載せてくれるのがFlaskの優しさ。


## Hello World!
![img023.png](https://qiita-image-store.s3.amazonaws.com/0/113090/5c56ce04-25ff-de7a-863c-9e3171fc1361.png)

**やっ…なッ…！！**

Flaskが示した先は真っ白な雪原でした。

落ち着きましょう。最初の方にinformationページが表示されていたのを覚えておいでですか？

![img005B.png](https://qiita-image-store.s3.amazonaws.com/0/113090/8867f444-beb8-9b84-b7dd-e7301c79a1cf.png)


こちらの1番目のURLはポート番号でアクセスを分けてるだけなので、このURLをコピーしましょう。
タップしても結構です。ですが、そのままのURLではアクセスできません。

![img024.png](https://qiita-image-store.s3.amazonaws.com/0/113090/80be277c-da0a-23ba-9386-27e177a37c7f.png)

manage.pyで指定したportは5005です。
このURLに「:5005」を追加してアクセスします。

　
　
　
　
![img025.png](https://qiita-image-store.s3.amazonaws.com/0/113090/c2b49725-8561-3b85-3f53-bfbb8d4a9a75.png)

**Yeah!!\\(ﾟ∀ﾟ)/**


# むすびに
駆け足で説明してきましたが、githubやonedrive、S3との連携もできるので、外部にソース置いとけばいつでもちゃちゃっとコードの確認やプロトタイプ製作なんかできるし動作感も十分だと思います。

今回はstring返すだけのインチキですが、template整えたりDBもこさえてwebアプリ作成もできるし中々よいのでは？
CodeをAnywhereに書けるのはプログラミング欲をイイ感じで満たしてくれます。

iPadの利用用途が広がりました(´ω｀*)