Chromeアプリを作ってみた

ChromeBookを使っているとやっぱり気になるChromeアプリ。
作るのって難しいのかなぁ・・・ということで実際に作ってみたのでその過程を書いていきます。
アプリを作成してみました
ちなみに作ったのは一番アプリっぽいPackagedAppsです。
Chromeアプリの構成と開発環境
まずどういう構成で作成するか、何が必要か調べました。
困ったときのGoogle先生ということで、こちら(ChromeApp-HatenaBlog)のサイトなどによると、Chromeアプリは下記で構成されているようです。
- JSON(マニフェスト)ファイル
- JavaScript
- 初期ウィンドウ生成用
- アプリ用
- HTML
- CSS
- アイコンファイル
特別な環境も必要なさそうです。まぁいけるでしょうということで、続けて必要な設定も行いました。
さっそく作ってみました
何作ろうか・・・と考えに考えて、時間にして5秒くらいですかね。今回は電卓にしました!HTMLの勉強で作り掛けのがあったので。上記サイトのサンプルを参考に試行錯誤もすること約1日…。
▼完成しました!!

作ったアプリをインストールするには、拡張機能を開いて右上のデベロッパーモードにチェックを入れ、「パッケージ化されていない拡張機能を読み込む」から指定するとインストールできます。
ソースは以下の通りです。躓いたところも書いておきます。
manifest.json
{
"name": "Calclator",
"description": "Calclator",
"version": "1",
"manifest_version": 2,
"app": {
"background": {
"scripts": ["src/background.js"]
}
},
"icons": {
"16" : "icon_16.png",
"128": "icon_128.png"
},
"sandbox": {
"pages": ["src/calc.html"]
},
"permissions": [
]
}
マニフェストファイルです。
基本的には参考サイトと同じですが、1箇所SandBox対応を追加しました。
電卓で使用しているeval関数を有効化するためです。
background.js
chrome.app.runtime.onLaunched.addListener(function() {
var screenWidth = screen.availWidth;
var screenHeight = screen.availHeight;
var width = 120;
var height = 135;
chrome.app.window.create("src/calc.html",{
bounds: {
width: width,
height: height,
left: 100/*Math.round((screenWidth - width)/2)*/,
top: 100/*Math.round((screenHeight - height)/2)*/
}/*,
frame: "none"
*/
});
});
アプリのWindowを構築するJavaScriptです。マニフェストファイルのappプロパティで指定しているのですが、このJSからHTMLを参照してアプリ画面を作ります。
ウィンドウ枠が邪魔だなと思い調べたら、frameプロパティで消せました。コメントアウト部分を有効化してください。
▼このような感じで消えます。

calc.js
//-- JQuery --
$("td").click(function(){
var id = $(this).attr("id");
if (id == null || id == "calc") {
return;
}
if(id == "clear"){
$("#result").text(0);
return;
}
if(id == "equal"){
var tmp = eval($("#result").html());
tmp *= 1000;
tmp = Math.floor(tmp)
$("#result").text(tmp/1000);
return;
}
var value = convert(id);
update(value);
});
function convert(id){
var value;
switch(id){
case "zero":
value = 0;
break;
case "one":
value = 1;
break;
case "two":
value = 2;
break;
case "three":
value = 3;
break;
case "four":
value = 4;
break;
case "five":
value = 5;
break;
case "six":
value = 6;
break;
case "seven":
value = 7;
break;
case "eight":
value = 8;
break;
case "nine":
value = 9;
break;
case "plus":
value = "+";
break;
case "minus":
value = "-";
break;
case "multiply":
value = "*";
break;
case "divide":
value = "/";
break;
default:
break;
}
return value;
}
function update(value){
var text = $("#result").html();
var lastStr = text.slice(-1);
if(text == 0){
if(!isOperator(value) &&value != 0){
$("#result").text(value);
}
}else{
if(!(isOperator(lastStr) && isOperator(value))) {
$("#result").append(value);
}
}
}
function isOperator(str){
if(str == "+" || str == "-" || str == "*" || str == "/"){
return true;
}else{
return false;
}
}
電卓の処理を行うJavaScript(JQuery)です。
Chromeアプリ化のために修正したところはありません。ソースは割愛しますが、JQueryを使わなくても(addEventListener等々で実装しても)動作しました。
calc.html
<!DOCTYPE html>;
<html lang="ja">
<head>
<meta charset="utf-8">
<title>calclator</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="calc">
<table>
<tr>
<td id="result" colspan="3">0&</td>
<td id="clear">;C</td>
</tr>
<tr>
<td id="seven>"7</td>
<td id="eight"<8</td>
<td id="nine">9</td>
<td id="divide">÷</td>
</tr>
<tr>
<td id="four">4</td>
<td id="five">5<td>
<td id="six">6</td>
<td id="multiply">×</td>
</tr>
<tr>
<td id="one">1</td>
<td id="two">2</td>
<td id="three">3</td>
<td id="minus">-</td>
</tr>
<tr>
<td id="zero" colspan="2">0</td>
<td id="equal">=</td>
<td id="plus">+</td>
</tr>
</table>
</div>
<script src="jquery-1.7.2.min.js">&</script>
<script src="calc.js"></script>
</body>
</html>
アプリ用のHTMLです。こちらもそのまま流用可でした。
CSS
body{
margin: 0;
}
div#calc{
width:100%;
height:100%;
background-color: #b0c4de;
padding-top: 10px;
padding-bottom: 10px;
border-radius: 5px;
box-shadow:0px 0px 5px;
}
table{
line-height:160%;
}
tr{
margin:0;
padding:0;
color: #000000;
}
td{
margin:0;
padding:0;
width:30px;
text-align:center;
border:1px solid #84b2e0;
border-radius: 5px;
background-color: #dcdcdc;
box-shadow:0px 0px 5px;
-webkit-user-select: none;
}
td:hover{
background-color: #f5f5f5;
cursor: pointer;
}
td:active{
background-color: #708090;
border:1px solid #dcdcdc;
cursor: pointer;
}
td#result{
background-color: #f5f5f5;
text-align:right;
cursor: auto;
-webkit-user-select: auto;
}
アプリのCSSです。CSSもそのまま流用できました。
最後に
JavaScript→HTML→JavaScriptというロードに違和感はありますが、ほとんどはまることなく直感的に作ることができました。
今回は触わりだけでChromeアプリ向けのAPIは使用しませんでしたが、こちら(JavaScript APIs – Google Chrome)のサイトを見ると多数用意されていることがわかります。
