Translate

Post Date:2022年6月17日 

gasの変数について考えてみる

ゾウでもわかる Google Apps Script

Google Apps Scrit (GAS) で変数を定義するキーワードには、var, let, const の3種類があります。変数と定数の違いは明確ですが、varlet の違いはどのようなところにあるのかをサンプルプログラムを実行しながら確認してみました。


変数と定数

var, let は、再代入(値を入れ替えること)ができる変数で、const は定義した値を変更できない定数です。

再代入とは、下記の例のように、最初に x に 1を代入して、次に x に x+1(=2) を代入するということです。

function argument() {
  let x = 1
  x = x + 1
}

定数の場合には、x に 1を代入したあとに変更ができません。下記を実行するとエラーとなります。

function argument() {
  const x = 1
  x = x + 1
}

変数の利用可能範囲(スコープ)

では、varlet の違いは何でしょうか?

GoogleのV8ランタイムの説明を読むと

let および const キーワードは、ブロックスコープのローカル変数/定数を定義することができます。(和訳)

【引用】 let and const - Google Apps Script

と記載されています。

ブロックとは、{}で括られた処理のことで、例えば、if分も{}で括られた処理です。ローカル変数というのは、そのブロック内でしか使えない変数/定数ということです。

letconst は、同じ関数内であってもif文内で宣言した関数は使えないということになります。ちなみに var の場合は、同じ関数内であれば if文内で宣言した変数を利用することができます。

let and const - Google Apps Script にあるサンプルプログラムに constvar を追加してスコープについて確認してみます。

function myFunction() {
  let x = 'hello'
  const y = 'hello'
  var z = 'hello'
  if (x === 'hello') {
    let x = 'World'
    const y = 'World'
    var z = 'World'
    console.log('let x=', x)      // Prints 'world'
    console.log('const y=', y) // Prints 'world'
    console.log('var z=', z)     // Prints 'world'
  }
  console.log('let x=', x)      // Prints 'hello'
  console.log('const y=', y) // Prints 'hello'
console.log('var z=', z)     // Prints 'world' }

let, const の有効範囲はブロック内です。5行目からのif文のブロックの中では、6,7行目で変数の宣言と代入がされている 'world' が出力されます。

しかし、13,14行目のログ出力では、myFunction() として、2,3行目で変数の宣言と代入がされている 'hello' が有効な変数となります。

一方、var で定義した変数 xは、15行目のログ出力で 'world' と出力されます。これは var 変数は同一関数内で有効であり、かつ次に説明する再宣言ができるので、console.log が実行される直前(11行目)に宣言と代入がされた変数の値が出力されます。


関数で定義した変数はif, for のブロック内でも使える

上位のブロックで let, const で宣言された変数は、下位のブロックでも参照できます。

下記の例で説明します。

function checkScope() {
  let x = 0
  if (x==0)  {
    let y = 0
    for (let i=0; i<10; i++) {
      x = x + 1
      y = y + 1
    }
    console.log('y=', y)
  }
  console.log('x=', x)
}

変数 x は、checkScope() 関数で定義しているので、下位ブロックのif文、さらにその下位にあたる forループでも参照することができます。なので、x=x+1 が10回実行され、forループ、if文を抜けたあとのログ出力で x=10 と出力することができます。

変数 y は、if文の中で宣言されているので、下位ブロックのforループで参照することができます。forループでの処理で再代入された値が、if文内のログ出力で可能です。

しかし、if文を出た後にログ出力をしようとすると y は定義されていないとエラーとなります。

function checkScope() {
  let x = 0
  if (x==0)  {
    let y = 0
    for (let i=0; i<10; i++) {
      x = x + 1
      y = y + 1
    }
    console.log('y=', y)
  }
  console.log('x=', x)
  console.log('y=', y)
}

また forループで使っている変数 i も let で定義しているので forループ内だけで有効です。これを for (var i=0; ....) とすると、変数 i は、関数内で参照できる変数となります。

また 変数 i を宣言するときに、let, var のキーワードを付けないと(忘れると)、変数 i は、グローバル変数となり、変数が宣言された以降に実行されるどの関数でもアクセスできるようになってしまいます。

function checkScope() {
  let x = 0
  if (x==0)  {
    let y = 0
    for (i=0; i<10; i++) {
      x = x + 1
      y = y + 1
    }
    console.log('y=', y)
  }
  console.log('x=', x)
  print()
}
function print()	{
  console.log('i=', i)
}

再宣言

変数のスコープで var の再宣言についてふれましたが、もう少し簡単な例で説明します。下記のように var は、同じ関数内で何度でも宣言できます。

function redeclaration() {
  var x = 1
  x = x + 1
  console.log('x=', x)
  var x = 'Hello'
  console.log('x=', x)
}

let, const は同一ブロック内では1回しか宣言できません。下記のプログラムは構文エラーとなり保存できません。

function test() {
  let x = 1
  x = x + 1
  console.log('x=', x)
  let x = 'Hello'
  console.log('x=', x)
}

var, let, constの違い(まとめ)

var, int, const の違いを表にまとめます。

キーワード 再代入 再宣言 スコープ
var 可能 可能 同一関数内
let 可能 不可 ブロック内
const 不可 不可 ブロック内

参照できる範囲が少なく、再宣言ができないということは、より明示的に変数を使うということになるので、「varではなくlet を利用しましょう」というのも納得できます。


関数間で値の引き渡し

関数の中で関数を呼び出す場合には、引数として関数に値を引き渡すことができます。また、関数での実行結果を戻す場合には、戻り値として結果を返却することができます。

function argument() {
  let x = 1
  let y = 2
  let z = cal(x, y)
  console.log('z=', z)
}
function cal(a, b)	{
  let c = a + b
  return c
}

cal() を呼び出すときに引数として x, y をセットしています。7行目の function cal(x, y)では、4行目で設定した引数 x, y をそれぞれ a, b にセットしています。この関数の中では、合算した値(1+2)を cに代入して、cを戻り値としています。

関数の呼び出し側は、戻り値を変数zに代入するために let z = cal(x, y) としています。


グローバル変数

最後にグローバル変数についてです。関数内ではなくプログラムのトップレベルで定義された変数/定数は、プログラ内のどこから(同じプロジェクト内のどの関数から)でもアクセスすることができます。

const x = 1
const y = 2
function main()	{
  sub1()
  sub2()
  console.log('x=', x)
  console.log('y=', y)
}
function sub1()	{
  console.log('x=', x)
}
function sub2()	{
  console.log('y=', y)
}

変数も奥が深いですね。


GASの基礎を学べる参考図書

ある程度プログラミンがわかっていれば、WEBやYoutubeでも十分に調べられると思いますが、初歩的なところからであれば参考図書は有効な学習手段です。

詳解! Google Apps Script完全入門 [第3版]」は、プラグラミング初心者にわかりやすく説明されています。GASを最初に学ぶ一冊として良書です。

Udemy オススメ講座

【新IDE対応】Google Apps Script(GAS)の基礎を完全習得

【新IDE対応】Google Apps Script(GAS)の基礎を完全習得

講師:事務職たらこ

印象に残りやすい手書き風スライドを用いGASの基本的なプログラミングを気軽に学ぶことができる。本講座でGASを活用した自動化ができるレベルにはなれないが、基礎としては十分。

Post Date:2022年6月11日 

安価な棕櫚箒(シュロホウキ)の実力は?

高砂 - 棕櫚ほうき短柄5玉

部屋の掃除には座敷箒(アズマ 匠箒 短柄)を使っています。

アズマ工業 - 座敷箒 短柄 匠125
アズマ工業 - 座敷箒 短柄 匠125

床、畳、敷物と、どこでも掃き掃除ができる万能なホウキですが、棕櫚箒(シュロホウキ)は使ったことがないので焦がれています。

アズマ工業の箒(ホウキ)は、とてもしっかりしているので、「いつか、吾妻棕櫚箒 鬼毛を!」と思っていましたが、値段もそれなりにするので躊躇しまくりです。


棕櫚箒(シュロホウキ)とは

棕櫚(シュロ)はヤシ科の植物で、棕櫚皮の繊維で作られたのが棕櫚箒。

棕櫚箒には、棕櫚皮を丸め、先端をほぐした「」と、棕櫚皮から良質な繊維のみを選別して束にした「鬼毛」の2種類があります。

棕櫚箒は、イネ科の「ホウキモロコシ」で作られる座敷箒よりも歴史が古い箒ですが、板間から座敷(畳)が広がる中で、江戸では畳の掃除に適した座敷箒が普及していきました。

その後も、棕櫚箒は西日本、座敷箒は東日本で好まれていたようなので、東に住んでいると生活の中で棕櫚箒をみる機会がありませんでした。

棕櫚皮の繊維は柔らかく、皮巻きの箒は、繊維の密度が高いので、細かいゴミが掃けるのが特徴です。また繊維に天然油分が含まれているので、掃けば掃くほど床に艶がでると言われています。

板間→畳→フローリングへと変遷する住居環境と、SDGsという考え方の浸透で、フローリングの掃除に適している棕櫚箒は、再度注目される掃除具となりました。


安価な棕櫚箒(皮)

Amazonで検索しても安価な棕櫚箒は散見されます。「安かろう悪かろう」かもしれませんが、箒で掃除をするようになったキッカケも安価なカバー箒を購入したことからです。

アズマのカバー箒型 棕櫚箒(鬼毛)を購入しよとかと思ったのですが、実用的な座敷箒を既に持っているので、無理な選択はせずに  "The シュロホウキ" というフォルムの安価な棕櫚箒を検索。

箒には短柄(みじかえ)と長柄(ながえ)がありますが、長い箒を吊り下げて収納する場所がないのと、手軽に掃除をするには片手で掃除できる短柄の方が扱いやすいので、安価で購入できる短柄の棕櫚箒(皮巻き)をAmazonで検索。

下記の5点がヒットしました。

Amazonにある安価な棕櫚箒(皮)
商品名ブランドサイズ(cm)重量(g)
棕櫚ほうき短柄5玉高砂長さ75×幅27250
YATSUYA しゅろ手ほうき 上八ツ矢工業長さ75×幅??250
手作り棕櫚ほうき 5つ玉 短柄カワタキコーポレーション長さ73×幅24270
TRUSCO しゅろほうき短柄トラスコ中山長さ75×幅30200
矢車印 棕櫚手箒五つ玉矢車商店長さ72×幅20222

自社で清掃用具を製造販売しているのは、高砂と八ツ矢工業です。八ツ矢工業の成り立ちはシュロ、パーム製品の製造販売というので惹かれましたが、送料を含めた価格で比較して高砂の「棕櫚ほうき短柄5玉」を購入。

カワキタコーポレーション、トラスコ中山の棕櫚箒も価格的には魅力的です。


棕櫚ほうき短柄5玉(高砂)

高砂の「棕櫚ほうき短柄5玉」は、MADE IN CHAINAの棕櫚箒です。棕櫚皮を銅線で巻き、鋲で止めてあるだけのシンプルな作りで、柄も竹と環境にやさしい素材です。

Amazonの説明に注意点として「使用初期に棕櫚の細かい繊維が落ちます」とあり、商品にも「初めのうちは棕櫚の繊維から粉が噴くことがあります。気になる場合には叩いてからご使用ください。」と記載されていますが、

使用前に穂先をパタパタと叩いてみると、大量の茶色い粉のような繊維屑が落ちてきます。その後も2-3日は掃き掃除で集めた塵埃(じんあい)に繊維屑が混ざっていましたが、次第になくなってきました。


棕櫚箒の掃き心地

同じ箒でも随分と掃き心地が違います。カバー箒から座敷箒に変えたときは、リズム感のような違いでしたが、棕櫚箒は掃き掃除としての感覚が異なります。

棕櫚の繊維は柔らかく細かいため、掃くというより床を箒で撫でているような感覚です。この撫でるような掃き方だと埃が飛散しないという利点があります。

密度が高い皮巻き棕櫚箒

フローリングとは相性がよさそうです。しかし、畳や敷物では座敷箒に分があります。とくに敷物の上は柔らかい穂先だと敷物の繊維からゴミを掃き出すパワーがありません。

部屋がフローリングだけなら皮巻きの棕櫚箒1本で十分ではないかと思います。


チリトリではなくコロコロで粘着させる

掃き掃除で集めたゴミはチリトリではなくコロコロを使うと簡単に収集できます。象と散歩: 箒(ほうき)のある生活で紹介している、無印良品のシステム カーペットクリーナーに木製ショートポールを装着すると立ったままコロコロできるので楽ちんです。

木製ショートポールは楽天の無印良品公式で購入できます。



箒で掃除をしよう

掃除機は部屋に出しっ放しにしていると"ダラシなさ"しかありません。しかし、座敷箒や棕櫚箒は、オブジェとしても映えるために、部屋に吊り下げておける掃除用具です。

木製ショートポールのコロコロも「部屋に置ける掃除用具」として選びました。

部屋に置ける掃除用具は、ちょっとした時間にもささっと掃除できるという利点もあります。

そして、時間があるときには、掃き掃除後にフローリングワイパーで拭き掃除もしましょう。

フローリングワイパーについては、象と散歩: 掃除の基本は「掃いて」「拭く」(フローリングワイパー編)をご覧ください。

「箒とコロコロでエコで時間を気にしない掃除を!」

Post Date:2022年6月7日 

アナログ・スマートウォッチという選択

Withings ScanWatch 38mm ブラック

Apple Watch と決別をして、Withings ScanWatch にしてから半年が過ぎました。

Apple Watch は、スマホを出さずに完結できる "スマホの代替" としての機能が充実しているのでとても便利でした。

しかし、その利便性の代償として、毎日の充電という苦行があります

これが、Apple Watch に別れを告げた理由です、、、。


充電の束縛からの解放

「毎日充電しなくていい!!」

というのは、常に腕にしているスマートウォッチにとっては大きな意味があるということがこの半年で実感できました。

Apple Watch の駆動時間は最大18時間ですが、ScanWatchは「最大30日間充電不要」です。実際に使ってみても20日以上は充電せずに使えています。

この30日間というのは他のスマートウォッチと比較して、ずば抜けて長い駆動時間です。

スマートウォッチ - 駆動時間の比較

また、バッテーリー低下の通知(4%)から1日以上は普通に使えるので、1日の途中でバッテリー切れるといったことがありません。

また、自宅では Withings Sleep で睡眠計測をしていますが、旅行や出張時には ScanWatch で睡眠計測もするので、バッテリーの消費が多くなります。しかし、出発前日にフル充電をしておけば、1-2週間の不在でも充電器を持ち歩く必要がないというのも安心です。


なぜスマートウォッチではデジタルを受容するのか

日本時計協会のデータをみると腕時計の世界生産の7割がアナログ時計です。

世界のウォッチ生産台数
【引用】日本時計協会 - 2021年ウォッチの世界生産(推定値)

デジタルネイティブではない世代としては、針で時を刻まれた方が、残り時間(あと何分)、経過時間(どれくらい経った)が直感的に分かるのでアナログ時計の方が好きです。

またアナログ時計では、常に時間を物理的な針で示しているので、時計をチラ見したときに時間がわかるというのも地味にありがたいです。


アナログ時計とスマートウォッチのハイブリッド

そんなアナログ時計の良さを活かした、シチズン エコ・ドライブ Riiiver は、充電不要のアナログ時計なスマートウォッチです。

シチズン エコ・ドライブ Riiiver

洗練されたデザインで、針で色々なことを表すという発想が素敵です。「LINEで通知あり」とかまでなら針の動きで把握することができます。また加速度センサーが搭載されているので、活動量計の機能もあります。

かなり惹かれましたが、スマホの代替までとはいかなくとも、通知内容を把握するための小型スクリーンと心拍数などの健康管理機能は捨てられない、、、。

小型スクリーンを搭載しながらも長時間駆動、心拍数などのセンサーを備えたアナログ時計型のスマートウォッチとなると、候補は限られ、

  • Withings ScanWatch
  • SKAGEN JORN

の 2つでした。

Withings Scan Watch には、小さなスクリーンがあり、送信者、メッセージの一部、次の予定 などが表示されます。

また、SKAGEN ハイブリッドスマートウォッチJORN は、デザイン変更可能なE-inkディスプレイを搭載していますが、最大2週間の駆動で、価格もお手頃です。


Withings ScanWatch

Withings(ウィジングズ)は、フランスのヘルス・テック企業です。WiFi体重計(Body Cardio)睡眠計測パッド(Sleep)を愛用していたので、Withings ScanWatch を購入。

Withings ScanWatch 38mm ブラック

デザイン的には 42mm の方が好みでしたが、大きな時計は好きではないので 38mm を選択。湾曲した面のサファイアガラスが腕時計感を更に醸し出し、カジュアルでもスーツにもマッチします。

付属のバンドはシリコン製ですが、専用のミラネーゼリストバンド、専用レザーバンド/ミラネーゼバンドが別売されています。

後から専用レザーバンド(ブラック)を購入しました。

Withings ScanWatch 38mm ブラック

バンドの取り外し方は、購入したバンドのケースの裏側に記載されていましたが、簡単です。

Withings 専用レザーバンド

専用バンドでなくても、同じような仕様の18mmのバンドであれば ScanWatch 38mm に取り付けられるのではないかと思います。ScanWatch 42mm のバンド幅は 20mm です。


SacnWatchの健康管理機能

ScanWatchでは、歩数、階段の昇降、心拍、運動(ウォーキングやサイクリングなど自動判定)などが記録されます。

また睡眠時の心拍数、呼吸の乱れ、血中酸素も記録できますが、夜間は時計を外してWithings Sleep(睡眠パッド)で記録し、外泊したときだけ睡眠時もScanWatchを使っています。

残念ながら日本ではScanWachのすべの機能を使えません。酸素飽和度(SpO2)は利用できるようになりましたが、心電図(ECG)などは、まだ日本では利用できません。

Apple Watchでは、ECGも日本でも利用可能となっているのでWithingsにも頑張ってもらいたいところです。

下記が現在、日本でも利用できる健康管理機能となっています。

ScanWatch 健康管理機能日本
心電図(ECG)
酸素飽和度:医療用 SpO2
酸素飽和度:血中酸素✔️
呼吸スキャン:
呼吸障害と夜通し連続の血中酸素
✔️
心拍動通知:不規則な心拍動✔️
心拍動通知:心房細動の徴候

詳細は、ScanWatch - 私の地域では現在、どの様な健康関連の機能が利用できますか? – Withings | Support を参照してください。


アップデートでさらに使い勝手がよくなった

2022年3月末にScanWatchのファームウェアがアップデートされ、

  • アクティビティ・リマインダー
  • 新たな針の動作

が追加されました。

SCANWATCHがさらに進化しました!

アクティビティ・リマインダーで、直近1時間でアクティビティがないと通知されます。夜間や既に目標を達成していると通知がないというのは気が利いています。

  • 「Unwind with 100 steps(100ステップ歩いて体をほぐそう)」
  • 「Let's go for a walk(散歩しよう)」
  • 「Take some time for a walk(散歩の時間を!)」
  • 「Think about taking a lunch walk(お昼に散歩をしたら?)」

など、いくつかのパターンで通知されます。

新たな針の動作というのは、針待避機能のことです。時計の短針、長針の何れかが小さいな円形スクリーン上にあるときに、通知があると、文字を見やすくするために針が(おおよそ)10時10分になります。

ダイヤルボタンを押したときにも同様の動きです。

Withings ScanWatch 38mm ブラック

これ滅茶ありがたい。


ScanWatch を使う上での注意点

通知を受け取るためには、スマホ側とHelth Mate(Withingsのアプリ)での設定が必要です。また、Helth Mate App がバックグランドで起動していなければ通知は受け取れません。

「ScanWatch - 通知の有効化」に設定方法が記載されていますが、日本語の画面だとこんな感じです。LINEやインスタも、もちろん通知を受信することが可能です。

Helth Mate App - 通知設定

またスマホ(iPhone)の通知設定で、「プレビューを表示」を「常に(デフォルト)」にする必要があります。

iPhone 設定 - 通知

アナログなスマートウォッチはちょうどいい

Withngs ScanWatchは、Apple Wathcほど高機能ではありませんが、

  • 充電の呪縛から解放
  • アナログ時計への懐古
  • 健康状態の追跡

を重視するであれば、「ちょうどいい」ハイブリッド・スマートウォッチです。

象と散歩:人気の投稿(過去7日間)