Go
Electron
PWA
Lorca

Electronより軽くて手軽なlorca製デスクトップガワアプリのススメ

最近ScrapboxをデスクトップPWAとして使い始めました。
やはりデスクトップアプリとしてDockに表示されるだけで体験はすごく良くなるなー

PWAもっといろんなサービスで使えるようになってほしいです(オフライン動作とかとりあえず要らないんでアプリとしてインストールだけでもさせてほしいなぁ)

Webサービスのデスクトップアプリ化で感じる利点は、具体的にはショートカットやSpotlightで呼び出しやすいといったことくらいなのですが、OSのインタフェースから自然に使えるという体験はヘビーユースしているWebサービスを更にヘビーに使うきっかけになりえるなと。

自分自身、よく使うWebサービスは個別アプリにしたいと日頃から思っており、Electronを使ってよく使うWebサービスは個人利用用にアプリ化したりしてました。
ただElectronはアプリサイズが大きいのと、Gmail等一部のWebサービスはそのまま開いても動かない(Ramboxとかはどうやっているんだろう)のが悩みでした。

今回使ってみたlorcaはその部分を解決しており、PWAが広まるまでの代替として割と最適感があります。

lorcaってなに

lorcaはHTML5アプリケーションを構築するための非情に小さなライブラリで、ElectronのようにChromiumを内蔵するのではなくインストール済のChromeブラウザを利用して動作しています。

lorcaはGoのライブラリであり、類似のcarloよりも手軽にガワデスクトップアプリを作ることができます。
(carloではアプリケーションアイコンの設定に別ライブラリが必要だったりとひと手間かかる)

追記:
以下のサンプルでは、Spotlightから起動したときに別ウィンドウとして開かれてしまうという問題があります。解決したい...

lorcaでガワアプリを作ってみよう

(今回はMacOSでMacOS向けアプリを作ってみますが、Windowsもbuild用のシェルスクリプト以外は同じでいけると思います。)

まずはGolangをインストール

brew install go
go get github.com/zserge/lorca

~/go/src/github.com/shwld/gcal-client みたいなディレクトリを作ってそこで作業します。

goファイルを作りましょう。これがガワアプリの全てです。

main.go
package main

import (
    "os"
    "os/user"
    "github.com/zserge/lorca"
)

func main() {
    user, err := user.Current()
    if err != nil {
            panic(err)
    }
    dir := user.HomeDir + "/.lorca-app"
    os.MkdirAll(dir, os.ModePerm);
    ui, _ := lorca.New("https://calendar.google.com", dir, 2000, 1000, "--start-maximized")
    defer ui.Close()
    <-ui.Done()
}

次にimage2iconとかでicon.icnsファイルを作ってディレクトリの中に配置します。
iconの画像はicons8から取得しました。

あとはbuild用のシェルスクリプトを作ればおしまい!

build-macos.sh
#!/bin/sh

APP="gCal.app"
mkdir -p $APP/Contents/{MacOS,Resources}
go build -o $APP/Contents/MacOS/gCal
cat > $APP/Contents/Info.plist << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleExecutable</key>
    <string>gCal</string>
    <key>CFBundleIconFile</key>
    <string>icon.icns</string>
    <key>CFBundleIdentifier</key>
    <string>net.shwld.gcal-client</string>
</dict>
</plist>
EOF
cp icon.icns $APP/Contents/Resources/icon.icns
find $APP

シェルを実行するだけでアプリが出来上がりです!
ビルドがすぐに終わる上にファイルサイズが小さいのでとーってもに手軽でよい!

今回作ったのはgoogle calendarのガワアプリでソースコードはこちらです。
https://github.com/shwld/gcal-client

自分用にガワアプリ作ってお気に入りのWebサービスをもっとヘビーに使おうぜ!