
目次
はじめに
jKanban
かんばんを表示する
タスクを追加する
開発者ツールを表示する
次回予告
はじめに
前回は、アプリケーションの起動までを行いました。
今回からは、簡単なかんばんアプリを作成しながらElectronの機能を紹介します。

jKanban
今回はかんばんアプリの画面を簡単に作成するため、JavaScriptのかんばんアプリのライブラリ「jKanban」を使用します。
jKanban:https://github.com/riktar/jkanban
jKanbanを使用するには、githubから取得したjsとcssをプロジェクトに含めます。
index.htmlでは下記のようにjkanban.min.cssとjkanban.min.jsを指定します。
※デザイン用にbootstrapのcssも追加しています。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>itport-electron</title>
<!-- https://electronjs.org/docs/tutorial/security#csp-meta-tag -->
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<!-- jKanbanを追加 -->
<link rel="stylesheet" href="./dist/jkanban.min.css">
<script src="./dist/jkanban.min.js"></script>
</head>
<body>
<h1>Hello World!</h1>
このアプリケーションは以下を使用しています。
<ul>
<li>node <script>document.write(process.versions.node)</script></li>
<li>chrome <script>document.write(process.versions.chrome)</script></li>
<li>Electron <script>document.write(process.versions.electron)</script></li>
</ul>
</body>
</html>
かんばんを表示する
jKanbanを使ってかんばんを表示するために、bodyタグ内を以下のように変更します。
<body>
<div style="margin:10px;">
<div id="kanban"></div><!-- ここにかんばんを表示します -->
</div>
<script>
<!-- ここにかんばんを表示するプログラムを記載します -->
</script>
</body>
HTMLとしては以上で、script内にjKanbanを使ったプログラムを記載していきます。
かんばん自体はID属性「kanban」に対して表示を行うようにします。
jKanbanの使い方は簡単です。
以下の書き方でjKanbanを初期化します。
var kanban = new jKanban(options)
今回は最低限のオプションのみ使用します。その他のオプションについてはgithubのページを参照してください。
今回はサンプルとして以下のような内容を指定します。
<script>
var boards = [
{
"id": "board-1",
"title": "未対応",
"class": "bg-danger",
},
{
"id": "board-2",
"title": "処理中",
"class": "bg-primary",
},
{
"id": "board-3",
"title": "処理済み",
"class": "bg-success",
},
{
"id": "board-4",
"title": "完了",
"class": "bg-info",
},
];
var kanban = new jKanban({
element: "#kanban", //ボード表示対象の要素
gutter: '5px', //ボード同士の間隔
widthBoard: '250px', //ボードのサイズ
boards: boards, //初期データ
});
</script>
ボードのサイズやボード間の間隔と初期表示時のデータを指定します。
初期データとして「未対応」「処理中」「処理済み」「完了」の4つのボードをデータ無しで指定しており、classにはbootstrapのcssでかんばんの色を設定しています。
ここまでの内容で、一度画面を見てみます。

意図したとおり 「未対応」「処理中」「処理済み」「完了」 の4つのボードが色分けされて表示されました。
このままでは、タスクの追加が出来ないので、次にタスクが追加できるように修正します。
タスクを追加する
タスクの追加が出来るように、ボタンの表示とボタン選択時の動作を追加します。
タスク追加ボタンは、jKanbanにオプション「itemAddOptions」が用意されているので、オプションを使用して表示します。
タスク追加ボタンをクリックした際のイベントは「buttonClick」にて指定します。
var kanban = new jKanban({
element: "#kanban", //ボード表示対象の要素
gutter: '5px', //ボード同士の間隔
widthBoard: '250px', //ボードのサイズ
boards: boards, //初期データ
dragBoards: false, //ボードのドラッグ
itemAddOptions: { //タスク追加用のボタンを表示
enabled: true, // 追加ボタン表示
content: '+', // ボタンテキスト
class: 'kanban-title-button btn btn-light btn-sm', // ボタンに設定するclass
footer: false // 表示位置
},
buttonClick: function (el, boardId) {
// 入力フォームを作成してボードに追加
const formItem = document.createElement('form');
formItem.innerHTML = '<input type="text" class="form-control" placeholder="課題を入力...">'
formItem.innerHTML += '<button type="submit" class="btn btn-primary btn-sm">追加</button>'
formItem.innerHTML += '<button type="button" class="btn btn-secondary btn-sm">キャンセル</button>';
kanban.addForm(boardId, formItem);
//キャンセルボタン
formItem.elements[2].addEventListener("click", (e) => {
formItem.parentNode.removeChild(formItem); //入力フォーム削除
});
//タスク追加処理
formItem.addEventListener('submit', (e) => {
e.preventDefault();
var title = e.target[0].value;
// 0文字の場合登録しない
if (title.length == 0) {
return;
}
kanban.addElement(boardId, { "title": title}); //入力された文字列をタスクとして登録
formItem.parentNode.removeChild(formItem); //入力フォーム削除
})
},
});
今回は、追加ボタンを選択すると、テキストボックスと追加・キャンセルのボタンを表示するようにしました。
実際の画面を見てみましょう。

意図したとおり、ボードのタイトルに「+」ボタンが表示され、ボタンを押すことでボードにテキストボックスと追加・キャンセルボタンが表示されることが確認できます。
また、ドラッグ&ドロップにより、タスクを別のボードへ移動できます。
開発者ツールを表示する
ElectronはChromium(Googleが開発しているオープンソースのWebブラウザ)が使用されているので、GoogleChromeなどのブラウザと同様に、開発者ツールを表示できます。
HTMLやJavaScriptを記載していると、開発者ツールでコンソールを表示したり、CSSの確認をしたくなることがあります。
main.jsで「openDevTools()」を呼ぶことで、アプリ起動時点で開発者ツールが表示できます。main.jsに追加した場合は以下になります。
//main.js
const { app, BrowserWindow } = require('electron')
function createWindow () {
// ブラウザウィンドウを作成
let win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
// ウィンドウに読み込む画面を指定
win.loadFile('index.html')
win.webContents.openDevTools();// 開発者ツールを開く
}
app.whenReady().then(createWindow)
1文追加したことで、chromeで見る開発者ツールとほとんど同じ画面が、アプリケーションのウィンドウとは別に表示されます。

次回予告
今回はかんばんアプリの画面を作成しました。
現状では起動するたびにタスクがクリアされた状態となるので、次回からは追加したタスクの保存と保存データの表示を行います。
