最近のソフトウェア開発（PaizaCloud＆Electron）

# 目的

最近の仕事では、ネットと切り離された環境で動くシステムばかり担当しており開発環境もネットに繋がらないため、最近のソフトウェアを動かすことが難しい。
そこで、無料で使える以下のサービスやOSSを使い、簡単なアプリの作成[^0]を行ってみた。

0. [PaizaCloud](https://paiza.cloud/ja/)：Webブラウザだけで開発環境が用意できるサービス。
0. [Electron](https://electronjs.org/)：ブラウザ技術だけで、どんな環境でも動くアプリケーションが作成可能。
0. [openlayers](https://openlayers.org/)：ブラウザ上で地図などを扱うライブラリ。

なお、ここで使っているソースは、過去に私が投稿した「[Webで地球地図データ(標高第1.1版)を使う](https://qiita.com/Helicobacter_pylori/items/73ba815668c81f471a15#_reference-ca40687dc15f8e4907bc)」で作ったタイルデータを使ったものです。

# 手順

## 1.使用準備（登録からサーバ作成まで）

### 1.1 [PaizaCloud](https://paiza.cloud/ja/)から登録し、ログインする。

特に難しいことは無く、メールアドレスさえ登録すれば良いので省略します。
（GitHubやGoogleのIDを持っていればクリックだけです）

### 1.2 新規サーバ作成

「新規サーバ作成」をクリックするだけです。

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/111541/54ccf747-5c12-d15f-73b5-ee59de5b0ebc.png)
最初にサーバ作成する際に料金プランを選びますが「無料プラン」[^1]で問題ありません。
なおPaizaCloudのサーバは、Dockerのコンテナで動いており、具体的なOSはUbuntuになります。

![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/111541/5018df76-1653-1210-eaa0-1c9a694793d7.png)
サーバ名だけ適当に設定[^2]したら「新規サーバ作成」をクリックすると、数秒でサーバが動き出します。
（初期インストールやSSH利用も必要なら利用可能ですが、今回は不要なので省略します。）

## 2.IDEの使用

サーバが動き出すとブラウザ上にPaizaCloudのCloud IDE（開発環境）が表示され、すべての操作がここから可能になります。
![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/111541/a86e1fc8-60e7-90dc-1db9-9c70c57abe37.png)

左端にアイコン、その右にファイル構成が表示され、右の大きな空白部分が作業領域になるイメージです。
（本来エディタやブラウザを使用した作業も行えますが、今回は過去に作成したソースを使用するため使いません）

### 2.1 ソースとelectronのインストール

![CMD.PNG](https://qiita-image-store.s3.amazonaws.com/0/111541/0192dcdd-4825-5efb-a74d-142e571ea211.png)

左端の「ターミナル」をクリックすると、お馴染みの黒い画面（ターミナル）が開き各種作業が行えます。
ここでは手っ取り早く、過去に作ってGitHubに登録していたソースを持ってきます。

```
~$ git clone https://github.com/HelicobacterPylori/MapSample MapSample
Cloning into 'MapSample'...
remote: Counting objects: 16, done.
remote: Total 16 (delta 0), reused 0 (delta 0), pack-reused 16
Unpacking objects: 100% (16/16), done.
Checking connectivity... done.
~$
```

これで、`MapSample`の中に`src`が取り込まれました。
今回はこれをelectronでpackageできるようにします。
まずはelectronを`MapSample`の中にインストールしたいので、以下のように実行。

```
~$ cd MapSample/
~/MapSample$ npm i -D electron

> electron@1.8.4 postinstall /home/ubuntu/MapSample/node_modules/electron
> node install.js

Downloading SHASUMS256.txt
[============================================>] 100.0% of 3.43 kB (3.43 kB/s)
npm WARN saveError ENOENT: no such file or directory, open '/home/ubuntu/MapSample/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/home/ubuntu/MapSample/package.json'
npm WARN MapSample No description
npm WARN MapSample No repository field.
npm WARN MapSample No README data
npm WARN MapSample No license field.

+ electron@1.8.4
added 153 packages in 35.426s
~/MapSample$
```

### 2.2 electronのpackage作成

packageの作成に必要な`electron-packager`を以下のとおりインストールします。

```
~/MapSample$ npm i -D electron-packager
npm WARN saveError ENOENT: no such file or directory, open '/home/ubuntu/MapSample/package.json'
npm WARN enoent ENOENT: no such file or directory, open '/home/ubuntu/MapSample/package.json'
npm WARN MapSample No description
npm WARN MapSample No repository field.
npm WARN MapSample No README data
npm WARN MapSample No license field.

+ electron-packager@11.2.0
added 74 packages in 3.801s
~/MapSample$
```

ここで、これまでのメッセージの中で`package.json`が無いと言われていますので、`npm init`で再作成しました。
（質問に全てエンターで回答するだけで、作成されます）

なお、Linux環境でWindows向けのパッケージを作る場合、Wineが必要なのですがインストールが面倒です。
なので今回は必要なファイルをまとめてくれている`electron-packager-dummy-wine`を入れます。

```
~/MapSample$ npm i -D electron-packager-dummy-wine
+ electron-packager-dummy-wine@1.0.2
added 1 package in 2.584s
~/MapSample$
```

後は、以下のようにパッケージ作成を実行します。

```
~/MapSample$ npx electron-packager src MapSample --platform=win32 --arch=x64 --overwrite
Packaging app for platform win32 x64 using electron v1.8.4
Wrote new app to /home/ubuntu/MapSample/MapSample-win32-x64
~/MapSample$ ls
LICENSE              node_modules  package-lock.json  src
MapSample-win32-x64  package.json  README.md
~/MapSample$
```

これで`MapSample-win32-x64`の中に、Windows向けパッケージが作成されましたので、次のような感じでzipに圧縮します。

```
~/MapSample$ zip MapSample-win32-x64.zip -r MapSample-win32-x64/
  adding: MapSample-win32-x64/ (stored 0%)
  adding: MapSample-win32-x64/api-ms-win-core-debug-l1-1-0.dll (deflated 45%)
    :
    :
  adding: MapSample-win32-x64/MapSample.exe (deflated 56%)
  adding: MapSample-win32-x64/LICENSE (deflated 41%)
~/MapSample$
```

ここまでで作成が終わったファイル一覧はこんな感じです。

![キャプチャ5.PNG](https://qiita-image-store.s3.amazonaws.com/0/111541/98fb09f5-1760-7a68-afeb-d5a512afdbcb.png)

後は、このzipファイルを右クリックで「ダウンロード」して、Windowsで実行確認してみます。

## 3.Windowsで実行確認

ダウンロードしたzipを解凍し、中にある`MapSample.exe`を実行した結果が以下の画像になります。

![キャプチャ6.PNG](https://qiita-image-store.s3.amazonaws.com/0/111541/05f1107e-7d28-916c-dc20-62beacb3b282.png)

このアプリは自前で日本全土の地形データを持っていますので、ネットに繋がらなくても地形を扱うことができます。

# 最後に

最近はハードウェアの性能進歩も目覚しく、無償でこれだけのことができるサービスが存在しますので、学習等には便利かと思います。
環境の違いも、仮想化や高度なラッピングでカバーされるため、よほどシビアな要求のあるソフトウェア以外は環境を気にせず動かせるようになっています。
また、各種の高機能なライブラリ等が多く、やりたいことを一から作るのではなく、あるものを探す方が早い場合が多くなっています。

世の中には未だにネットと隔離された環境のソフトウェアも多く、そうした環境ではこうした最新のライブラリ等も導入が難しいですが、利用すれば効果は大きいため、機会を見つけては提案を行っています。
その提案のためにも、こうしたサービスを使い、出来るだけ新しい技術を使って置こうと思います。

---

[^0]: 実際には、過去適当に作成したソースを、きちんとelectronでpackageできるようにしただけですが。
[^1]: 無料プランでは制限に達するとサーバが消えてしまいますが、また必要な時に作成すれば問題ありません。
[^2]: サーバ名に日本語や英大文字は使えません。また先頭を英小文字にする必要あり。