サーバー上にFlutter環境を構築し、どこからでも開発が出来るようにする

プログラミング

 

わたすけです。

Flutterという、Android, iOS, Web, Desktop, 様々な環境で動作するアプリを開発できるフレームワークが存在します。

最初はLinux上で動くデスクトップアプリから開発しようと思っていたのですが、途中で気になってWebでテストビルドをした時、ふと思いました。

ざっくり言うと、サーバーでFlutterアプリを動かし、そのサーバーにローカルから接続することによって、面倒な環境構築を最小限に抑え、全ての環境で開発を可能に出来る、ということです。すごいですね(こなみ)

ということで、今回はFlutter環境をサーバーに構築し、リモート開発の環境を整えてたので、やり方をまとめておきます。

環境

Azure VM上のUbuntu Server 18.04 LTS

Azure for Students は素晴らしいですね。今回はUbuntu Serverですが、Ubuntu系ならほぼ同じような手順で可能だと思います。

Flutterをインストール

まずはFlutterをサーバーに入れましょう。

必要なものを入れる

$ sudo apt install clang curl lib32stdc++6

ついでにここでAndriod Studioのインストールもしてやります。

$ sudo snap refresh
$ sudo snap install android-studio

ダウンロード

GitHubから引っ張ってきます。

$ git clone https://github.com/flutter/flutter

移動・パスの設定

パスを通します。ちなみにこの設定だとターミナル閉じたりログアウトしたりしたらもう一度exportしないといけないので、bashrc/zshrcなどに書いておくのが良いと思います。

$ sudo mv flutter /usr/local
$ export PATH=$PATH:/usr/local/flutter/bin

Web開発を有効化

$ flutter config --enable-web

確認

$ flutter doctor

で、必要な物などのチェックが入ります。

[ ! ]とかなっても実行できればいいのでとりあえず次に進みましょう。

Flutterプロジェクトの作成・実行

ということで、ひとまずサンプルプロジェクトをビルドしてみます。

任意のフォルダに移動して以下のコマンドを実行すると、sampleフォルダにFlutterのサンプルが生成されます。sampleの部分は多少変えても大丈夫なはずです。

$ flutter create sample

そして、とりあえず実行してみましょう。

$ flutter run -d web

すると以下のようなメッセージが出てきます。(一部)

Syncing files to device Web Server...                
lib/main.dart is being served at http://localhost:9999
The web-server device requires the Dart Debug Chrome extension for debugging. Consider using the Chrome or Edge devices for an improved development workflow.

ここでは例として9999になっていますが、この数字は実行するたびに変わります。
もしGUIがあれば、Chrome等でURLを入力し、実行を確認してみてください。

ngrokのインストール

一部の人は「これlocalhostにさえ接続できれば最強なのでは??」と思ったことでしょう。その通りです。
localhostを公開してくれるサービス、ngrokを入れます。
(もしかしたらzipファイルのURL変わってるかも知れません)

$ wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
$ unzip ngrok-stable-linux-amd64.zip
$ sudo mv ngrok /usr/bin/
$ rm ngrok-stable-linux-amd64.zip

localhost公開して最強になる

それでは、いよいよサーバー上のFlutterに接続してみたいと思います。ターミナルが2つ必要になるので、SSH接続なら任意のターミナルウィンドウを2つ開いてそれぞれログインしておいてください。

まずは先程作ったFlutterのプロジェクトフォルダに移動します。

そして、以下のようにコマンドを打ち、起動しておきます。

$ flutter run -d web --web-port 任意の数字

任意の数字は0〜65535で好きなもので大丈夫です。数字を覚えておいてください。

次に、もう一つのターミナルで以下のコマンドを実行します。

$ ngrok http 任意の数字

ここの任意の数字は、一つ前の数字と一致させてください。

以下のような表示になるはずです。

ngrok by @inconshreveable                                                   (Ctrl+C to quit)


Session Status                online
Session Expires               7 hours, 59 minutes
Version                       2.3.35
Region                        United States (us)
Web Interface                 http://127.0.0.1:4041
Forwarding                    http://(ランダムな文字列).ngrok.io -> http://localhost:任意の数字
Forwarding                    https://(ランダムな文字列) -> http://localhost:任意の数字

ローカルで「http://ランダムな文字列.ngrok.io」にアクセスし、しばらくロードを待って、表示されたら完了です!

ざっくりやってみた感想

ngrokのロードがめちゃめちゃ遅い。ホットリロード(笑)になっている

毎回ターミナルでR入力するたびにブラウザをリロードしないといけないので、ここまでロードが遅いとわりとストレスかもしれないです。

ただ、それ以外はいい感じです。VScodeでSSH接続して、ファイルをいじるだけでアプリを作ることが出来ます。

おわりに

最初は web-port部分で指定したポートを開放すればどうにかなるでしょ!w  と思ってましたがうまくいかず、最終的にngrokを使うことで出来たのでよかったです(こなみ)

以上、Flutter環境をサーバー上に構築し、外出先など全ての状況で開発を可能にする方法でした。こんなことしても外出中にプログラミングしないかもしれませんが。

コメント

タイトルとURLをコピーしました