青ポスの部屋

旅と技術とポエムのブログ

Electron (01) Hello World

Electronとは

デスクトップ向けクロスプラットフォームフレームワーク。Node.jsベースで、html/CSS/JavaScriptというwebのスタックで、Windows/Mac/Linuxそれぞれで動くデスクトップアプリを作ることができます。あの有名なVSCodeもElectronベースで動いています。

環境構築

Node.jsがインストールされていれば、npmでインストールできます。オプションをつけなければプロジェクトごとのローカルインストールになります。

npm install electron

サンプル

index.jsで制御部分、index.htmlでビューを書きます。プロジェクトのルート(node_modulesと同じ階層)にそれぞれ配置します。

index.js

'use strict';

const electron = require("electron");
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;

let mainWindow;

app.on("window-all-closed", function () {
    app.quit();
});

app.on("ready", function () {
    mainWindow = new BrowserWindow();

    mainWindow.loadURL("file://" + __dirname + "/index.html");

    mainWindow.on("closed", function () {
        mainWindow = null;
    })
});

webと同じく、基本的にイベント駆動で書きます。loadURLにhttps://yahoo.co.jpのような一般のwebのURLを書くと、超簡単なwebブラウザになったりします。

index.html

<html>
<head>
    <meta charset="utf-8">
    <title>Hello World</title>
</head>

<body>
    <h1> Hello World</h1><br>
    <p>This is sample page.</p>
</body>
</html>

動作

プロジェクトのロートディレクトリで下記を実行します。ローカルインストールの場合はnode_modules/.bin以下の実行ファイルをたたく必要がありますが、グローバルインストールしている場合はelectronのみでできます。

node_modules/.bin/electron .

すると下記のような画面が現れます。

f:id:bluepost69:20201123150855p:plain

ビューのhtmlにはすごく初歩的なコードしか書いてませんが、「File」「Edit」「View」などの基本的なタブがデフォルトでそろっており、「Undo/Redo」や「Reload」といった機能やショートカットキーまで用意されています。

20201101 南海フェリー

南海フェリーについて

和歌山~徳島を結ぶ航路。

本州と四国を結ぶ橋で原付が通れるのはしまなみ海道しかないので、関西と四国を原付で行き来するには南海フェリー一択になる。

往路

朝5時半に起きて9時台に和歌山についた。わずかに頭痛があったが、乗ってるうちに気分も乗ってきたのでフェリーも乗ることにした。和歌山市内で少し道に迷ったが、フェリーへの乗船はスムーズに行った。

f:id:bluepost69:20201107000111j:plain

f:id:bluepost69:20201107000046j:plain

フェリーでは座敷席の窓際に陣取った。和歌山港を出てからしばらく寝ていた。アイマスクと耳栓をつけて万全のつもりで寝た。

目が覚めて、ちょっと気持ち悪いなと思った。今まで自分は船酔いしない体質*1だと思っていたのでまさかと思ったが、この日は酔ってしまった。無理に寝ていても段々気分が悪くなってきたので、ミンティアをかなりのハイペースで食べていた。

外に出て風に当たると少しマシにはなった。しかし降りる準備で下に降りるとまた気持ち悪くなった。「帰りもこれ乗らなあかんか...。」と思うと、久方ぶりに「これ本当に帰れるのか」と絶望した。

月見ヶ丘公園

船を降りた瞬間、無情にも雨が降ってきた。まさに「なんて日だ!」という感じだ。船を降りても気持ち悪かったので、鳴門まで行くのは時間的制約もあり断念した。代わりに近場で月見ヶ丘公園というところがあったので、そこで休憩することにした。

テントサイトなどもあるきれいに整備された公園で、親子連れが多かった。帰りのフェリーで寝れなくなっても困るので、休憩しながらブラブラした。

船酔いのせいでいろいろ嫌になってしまっていて、「こうなったのもバイクに乗っているからだ、もうバイクに乗るのもやめてしまおうか」と思った。

帰路

往路で覚悟はしていたが、往路以上に揺れがひどかった。

どれくらいかというと、横になって窓を見ていると海面が窓の下から上まで上下しているのがわかるくらいだった。今思い出しても気持ち悪くなりそう。

でも往路で失敗した原因を考えて対策したおかげか、多少は気持ち悪かったが、大きく悪化することはなかった。

揺れが収まっているときに外へ出てみた。夕暮れで外は真っ暗で不気味だった。手すりを触ると小雨とも波しぶきともわからない水滴で濡れていた。

和歌山港についてからもきつかった。今度は頭痛がひどくなり道中で薬を飲んだ(幸い道中で薬が効いてマシになった)。夜のR24は真っ暗で困った。

まとめ

船酔いした原因

  • 早起きしており体調が万全でなかった。
  • バイクで80km走った後で神経に疲労がたまっていた。
  • 船の側面に近い揺れの大きいところで過ごした。
  • どちらかというと厚着で寝てしまった。
  • アイマスクをしたので頭の温度が上がった。
  • 両耳に耳栓をしていた。
  • たまたま波の高い日だった。
  • 淡路島の影になっているところはそうでもないが、そうでないところは揺れる。

カウントしてみるとものすごい数の悪条件が重なってしまっていた。

今後

徳島港に降りた辺りでは「二度と乗るか!!!」と思っていたが、アホなので1週間経ったら忘れてしまい、将来的にまた乗りそうな気がしている。

*1:小学生の頃まで毎年夏は五島列島行きのフェリー太古に乗っていたが、記憶の限りでは動けなくなるほど酔ったことがない。家族全員酔うほどの時化でも父と自分だけ大丈夫だったということもある。

プログラマとしてスランプだった時期

当時のことをふと思い出したので、書いてみる。

ネットの体験談は「イケイケなプログラミング言語で1週間オンライン学習したらweb系イケイケベンチャーに転職できた」とか成功経験か「クラウド課金をミスってxx十万円課金された」みたいな派手なやらかしかにかたよっているので、地味な失敗談も書いておこうと思う。

一番スランプだった時期

一番スランプだった時期は、おそらく学部3年生ごろだと思う。当時のスキルはfortranVBAくらいで「そもそもプログラマとして始まってなかったのでは?」感もあるにはある。

このスランプはやる気がわかないとか何も手がつかないとかではなく、「やる気もあって手もつけているのに何も物にならない」という時期である。

プログラミングはおもしろいと思ってはいた。次の言語をやりたかったが、何をやればいいのかよくわかってなかった。そこでCやらVBやらのテキストを古本で買ってちょびっと手をつけて、ループとかif分岐みたいな基本文法だけやって「これFortran以上のことできるの?」とほっぽりだしていた。結局どれも当時は使いこなすことはできなかった*1

スランプに陥った原因

第一に目的がなかった。「Fortran以外の言語もできといた方がええか」というのがモチベーションだったので、Fortran以上のことが想像さえできなかった。

第二に単純に理解ができなかった。VBのテキストはいきなりGUIのページを開いたが、WindowsAPIを叩く数ページ分のコードを見せられたので心が折れてしまった。

第三に周辺知識不足で適切な言語を選べなかった。今なら「GUIをやりたくなったらWindowsならC#だし、それ以前にwebやElectronみたいなクロスプラットフォームをやるべきだ」とわかる。しかし当時は名前は聞いたことがあるくらいだった*2

スランプを打開できた理由

  • 研究という目的ができた。グラフを描くというモチベーションでPythonを覚えられた。
  • 「成果を出してほめられる」という成功体験を積み重ねられた。
  • 「成果物を出したことで次の課題が明らかになり、それが次の学習のきっかけになる」といういいサイクルが回り始めた。

今と何がちがうのか

正直「今もやってることは大して変わらんのでは」というところもある。今だって「聞きかじりでやったことがない言語をちょっとだけ調べてすぐやめる」ということは無限にある*3。「手当たり次第調べてすぐやめる」ということは同じな気がする。

最大の違いは手当たり次第ではあるがちゃんと品定めしてからやめているというところだと思う。当時とちがって周辺知識がついているので、

  • その言語やライブラリがどういう位置付けのものか
  • 何の代わりになるものか

がちょっと調べれば分かるようになった。やっぱり広く浅い知識というのも少なくともIT業界では多少は必要なんだと思う。

*1:VBに関しては今もよくわからないしやる意味もあまりないと思う。Cは...よくわからない...。

*2:C#は聞いたことはあるが「Cの仲間」くらいの認識しかなかった。Electronは「Atomに使われてる超高度な技術」と思っていた。

*3:最近だとReactとかLaravelとか