Electron + PhotonKit でそれっぽいGUIをお手軽に作る

環境構築手順はこちら

ということで、PhotonKitを使ってみることにしました。

スポンサーリンク

いきなりまとめ

◎ポイント

  • PhotonKitを使うとお手軽にそれなりのGUIを作れる
  • 公式サイトにわりとしっかり使い方があるので迷わない
  • シンプルにCSSとfontのみ

△ポイント

  • Mac以外のOSとのLook&Feelの親和性がビミョい。(electron全体に言えることだけど)
  • 現段階では用意されているスタイルが少ない
  • PhotonKitに同梱のサンプルが動かない
  • 1年近く更新されていない

成果物

めずらしく github に置いてみる。
https://github.com/yyatsuo/electron-photon-template

$git clone https://github.com/yyatsuo/electron-photon-template.git

PhotonKitの入手

http://photonkit.com/ から compiled な photon を入手する。
githubにもあるよ。

サンプルを動かしてみる

electronのお作法が若干変わってしまったため、PhotonKit に付属の template-app はそのままでは動かせないみたいなので、作ってみた。

フォルダ構成はこんな感じにしておく。

MyApp/
│
├─ index.html
├─ main.js
├─ package.json
└─ photon/
       ├── css/*
       └── fonts/*

package.json

素直に本家サイトのquick-startに従って書いておく。

{
  "name"    : "MyApp",
  "version" : "0.1.0",
  "main"    : "main.js"
}

main.js

素直に本家サイトのquick-startに従って書いておく。

const {app, BrowserWindow} = require('electron')
const path = require('path')
const url = require('url')
 
let win
 
function createWindow () {
  win = new BrowserWindow({width: 800, height: 600})
  win.loadURL(url.format({
    pathname: path.join(__dirname, 'index.html'),
    protocol: 'file:',
    slashes: true
  }))
 
 // 実際に開発する時はコメントアウトしない方が良い
 // win.webContents.openDevTools()
 
  win.on('closed', () => {
    win = null
  })
}
 
app.on('ready', createWindow)
 
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})
 
app.on('activate', () => {
  if (win === null) {
    createWindow()
  }
})

index.html

PhotonKitの公式サイトを見ながら好きに書けば良いと思うよ。

<!DOCTYPE html>
<html>
  <head>
    <title>Photon</title>
 
    <!-- Stylesheets -->
    <link rel="stylesheet" href="./photon/css/photon.min.css">
 
  </head>
  <body>
    <div class="window">
 
      <!-- .toolbar-header sits at the top of your app -->
      <header class="toolbar toolbar-header">
        <h1 class="title">Photon</h1>
      </header>
 
      <!-- Your app's content goes inside .window-content -->
      <div class="window-content">
        <div class="pane-group">
          <div class="pane pane-sm sidebar">
            <nav class="nav-group">
              <h5 class="nav-group-title">Favorites</h5>
              <span class="nav-group-item">
                <span class="icon icon-home"></span>
                connors
              </span>
              <span class="nav-group-item active">
                <span class="icon icon-light-up"></span>
                Photon
              </span>
              <span class="nav-group-item">
                <span class="icon icon-download"></span>
                Downloads
              </span>
              <span class="nav-group-item">
                <span class="icon icon-folder"></span>
                Documents
              </span>
              <span class="nav-group-item">
                <span class="icon icon-window"></span>
                Applications
              </span>
              <span class="nav-group-item">
                <span class="icon icon-signal"></span>
                AirDrop
              </span>
              <span class="nav-group-item">
                <span class="icon icon-monitor"></span>
                Desktop
              </span>
            </nav>
          </div>
 
          <div class="pane">
            <table class="table-striped">
              <thead>
                <tr>
                  <th>Name</th>
                  <th>Kind</th>
                  <th>Date Modified</th>
                  <th>Author</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td>bars.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>base.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>button-groups.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>buttons.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>docs.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>forms.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>grid.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>icons.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>images.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>lists.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>mixins.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>navs.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>normalize.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>photon.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>tables.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>tabs.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>utilities.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
                <tr>
                  <td>variables.scss</td>
                  <td>Document</td>
                  <td>Oct 13, 2015</td>
                  <td>connors</td>
                </tr>
              </tbody>
            </table>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>

作業ディレクトリで、

$electron ./

して、こんな感じの画面が出ればOK。

photon_template

スポンサーリンク

フォローする