Glitch で Node 以外のアプリを書く裏技
『裏技 = オフィシャルにサポートしていない言語で動かす』なので、Node 以外の言語で書いたアプリは急に使えなくなったりするかもしれません。自己責任で。
Glitch 概要
驚くほど簡単に Node.js アプリを公開できるサービスです。オンラインで JavaScript のコードを書くだけで、https://[プロジェクト名].glitch.me
に自分のアプリが公開され、他の人と共同編集もできます。
いわば CodePen や JSFiddle のサーバーレスアーキテクチャ版、といったところでしょうか。詳しい使い方については、以下の記事をどうぞ。
この手軽さに惚れ込み、私もいくつかアプリを公開したりしています。
Node 以外の言語を使いたい!
この手軽さを Node 以外のアプリでも享受できれば… と思い、サポートフォーラムを覗いてみたところ、Ruby の実行に関してこんな証言が。
Although it’s not officially supported, Ruby is installed, and you can use a custom glitch.json to install and run your app.
── https://support.glitch.com/t/using-ruby-rails-with-glitch/2576/2
どうやら Ruby は入っているようなので、glitch.json
を用意してあげれば、アプリのインストール・実行をカスタマイズできるようです。
glitch.json
どこにも文献がありませんので、利用例を探したところ、PHP で利用している例が見つかりました。
glitch.json{ "install": "composer install", "start": "composer start", "watch": { "ignore": [ "logs" ] } }
── https://github.com/cpinheir1103/SandysPetShop/blob/glitch/glitch.json
つまり、こういうことみたいですね。
キー | 概要 | デフォルト |
---|---|---|
install |
アプリインストール時に実行するコマンド | npm install |
start |
Webサーバー起動時に実行するコマンド | npm run start |
watch |
ファイルの監視設定 (watch.json 相当) |
参照... |
watch
は watch.json
に相当する設定です。こちらは公式に Glitch の FAQ に記載されているので、そちらを参照してください。
使えそうな言語
2017/12/29 時点で、Glitch アプリのコンソールを開いてザッと調べたところ、以下が使えそうでした。
- Elixir 1.5.2
- Erlang 9.1
- Go 1.7.5
- PHP 7.0.22
- Java 1.8.0
- Python 2.7.12
- Python 3.5.2
- Ruby 2.3.1
- Rust 1.20.0
- Swift 3.0.1
思った以上に揃ってます。3系ですが Swift が使えるのは「おっ」となりました。ちなみに .NET Core (dotnet
) も入っていましたが、プレビュー版だったのでココには含めてません。
実践
Ruby + Sinatra
https://glitch.com/edit/#!/ruby-sinatra-example
Glitch に向いてそうな Sinatra を試してみます。
glitch.json
{
"install": "bundle install --path ./.data/bundler",
"start": "bundle exec ruby server.rb",
"watch": {
"install": {
"include": [
"^Gemfile$"
]
},
"restart": {
"include": [
"\\.rb$"
]
}
}
}
Bundler による gem のインストール先を変えていますが、標準のインストール先 (vendor/bundler
) にインストールしてしまうと、オンラインエディタに内容がズラッと表示されてしまうため、それを回避するためです。
.data
フォルダは Glitch が提供しているデータファイルの保存先で、Remix(プロジェクトをフォーク)されても、内容は引き継がれません。(参照...)
サーバーの記述
Sinatra の README とほぼ同一内容です。
require 'sinatra'
get '/' do
'Hello, Glitch!'
end
Glitch の場合、環境変数 PORT
で指定されたポートに Web サーバーを公開する必要がありますが、幸い Sinatra は環境変数を読み取ってくれるので、特にポート設定せずとも動きました。
表示
https://ruby-sinatra-example.glitch.me/ にアクセスし、"Hello, Glitch!" が出れば準備完了です。
Ruby サーバーが動作していますね!WEBrick ではうまくルーティングが動作しなかったため、thin
gem も一緒に導入しています。
あとは Glitch で Ruby アプリを書くだけ!Remix してお試しください。
Go + Echo
https://glitch.com/edit/#!/go-echo-example
同じように Go も試してみました。フレームワークには Echo を使用しています。
glitch.json
{
"install": "GOPATH=$PWD/.data/go go get -v -u github.com/labstack/echo",
"start": "GOPATH=$PWD/.data/go go run server.go",
"watch": {
"restart": {
"include": [
"\\.go$"
]
}
}
}
先と同じように、.data
内に GOPATH
を設定しました。
Glitch が提供する .env
で GOPATH
を設定すると、パブリックなプロジェクトでは他者にその内容が見えなくなってしまい、Remix した時に正しく動かなくなってしまうので、JSON 内で直接指定しています。
パッケージ管理もシンプルに go get
で実施していますが、依存が多くなりそうであれば dep
や glide
を別途インストールして実行した方が良いかもしれません。
サーバーの記述
こちらも Echo のガイド にほぼ準拠しています。
package main
import (
"github.com/labstack/echo"
"net/http"
"os"
)
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, Glitch!")
})
e.Logger.Fatal(e.Start(":" + os.Getenv("PORT")))
}
こちらは PORT
環境変数を自動で考慮しないので、node + Express のサーバーと同じように、環境変数を os.Getenv
で取得してポート指定を行っています。
表示
https://go-echo-example.glitch.me/ にアクセスし、"Hello, Glitch!" が出れば準備完了です。
Go サーバーが動作していますね!(内容的に全く同じなのでスクショは使い回しですが...)
あとは Glitch で Go アプリを書くだけ!Remix してお試しください。
他の言語
他の言語でも原理は同じで、glitch.json
で適切なインストールコマンド・サーバー起動コマンドを記述すれば、Glitch 実行環境にインストールされている言語で開発できます。
"左上のメニュー → Advanced Options → Open Console " でアプリ実行環境のコンソールを開けますので、環境確認に利用できます。
おわりに
改めてですが、Glitch はオフィシャルでは Node 以外の言語はサポートされていません。 実際に Node 以外のアプリを作る際は、自己責任でおねがいします。
そうは言っても、JavaScript に慣れていない人でも、手軽な Glitch のアプリ開発環境を体験できるので、個人的な実験等に使ってみるのはアリかもしれません。
Author And Source
この問題について(Glitch で Node 以外のアプリを書く裏技), 我々は、より多くの情報をここで見つけました https://qiita.com/yhatt/items/8e14ccefbec8bf9fe407著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .