[GAS]WEBアプリケーションの見た目を整える

GASでWEBアプリケーションを作れるようになると、さまざまなシーンで電子化・自動化を進められます。よりたくさんの人に使いやすいと感じてもらうためには、多少の工夫が必要です。HTMLの知識があれば、見た目のよい、ぱっと見てわかりやすいWEBアプリケーションを作成することができるでしょう。

WEBページの見た目を改善するのには、HTMLと組み合わせて使われるCSSの作例を調べるのが簡単です。以下にすぐ使えるページを紹介します。

[GAS] Googleドキュメントの途中にパラグラフを挿入する

基準点となる文字列を含んだパラグラフの次に新しいパラグラフを挿入する方法を考えます。新しいパラグラフの中身はダイアログボックスで入力した文字列とします。

function myFunction() {
  var body = DocumentApp.getActiveDocument().getBody();
  
  var paragraphs = body.getParagraphs();
  
  for (var i = 0; i < paragraphs.length; i++) {
    var paragraph = paragraphs[i];
    var index = i;
    var text = paragraph.getText();
    if(text === 'key paragraph'){
      Logger.log('index %s text %s', index, text);
      var child = paragraph;
    }
  }
  
  var childIndex = body.getChildIndex(child);
  Logger.log('childIndex %s', childIndex);
  
  //input text to insert
  var ui = DocumentApp.getUi();
  var response = ui.prompt( '挿入する文字列を記入する。', ui.ButtonSet.OK_CANCEL);
  
  // Process the user's response.
  var button = response.getSelectedButton();
  var textToInsert = response.getResponseText();
  //キャンセルならスクリプト終了
  if (button !== ui.Button.OK) {
    return;
  }
  
  //insertParagraph
  body.insertParagraph(childIndex + 1, textToInsert);
}

//メニューを追加
function onOpen(e) {
  DocumentApp.getUi()
      .createMenu('GAS')
      .addItem('insert paragraph', 'myFunction')
      .addToUi();
}


まず、DocumentAppでBodyとその下のparagraphsを取ってきます。各paragraphの中の文字列はgetText()で取れるので、基準点となる文字列が含まれるparagraphを探します。上の例では、paragraphの文字列が「key paragraph」であるという条件で該当するparagraphを指定しました。

基準点となるparagraphオブジェクトが見つかったら、body.getChildIndex(paragraph)のように引数として渡してやると、bodyに対するchildIndexが返ってきます。

基準となるparagraphの childIndexが求まったら、そのparagraphの前に挿入する場合は childIndex を、そのparagraphの後ろに挿入する場合はchildIndex+1を、insertParagraphの引数に渡します。

挿入する文字列を入力するのに使ったダイアログボックスですが、V8エンジンではBrowser.inputbox()が動かないのか、UI.prompt()を使うと動きました。UI.prompt()は返ってきたresponseにさらにgetResponseText()しないとテキストが取れません。

ドキュメントのメニューからスクリプトを動作せさせる工程はGoogle Apps Scriptを使った独自メニューの作り方を参照しました。

テンプレートを別ファイルで用意する場合はGoogle Apps Scriptで議事録テンプレ作成を楽にしたが参考になります。

電気自動車の救急車

東京消防庁が2020年3月31日に電気自動車の救急車を導入しました。救急搬送時に患者が受ける振動が小さくなりそうです。

電動の商用車としては日産eNV200がありますが、画像を見るとeNV200よりも大きく、NV400のサイズに見えます。NV400は救急車として使われている実績があるようなので、電池やモーターといったeNV200の部品を使いまわしているのかもしれません。


日本初EV救急車登場 特徴は排ガスを出さないのみならず 各種メリットと池袋配備のワケ
乗り物ニュース 2020.04.19

電動ストレッチャーを搭載したことが救急隊員の負担軽減に与える影響を評価するために池袋のデイタイム救急隊に配備されたらしい。

新型リーフ (2017) のバッテリー劣化 – 新車24か月点検を終えて

新型リーフ (2017) のバッテリー劣化 – 新車12か月点検を終えての続編です。

2017年10月の納車から2回目の12か月点検を終えました。さらに数か月経っていますが、バッテリー劣化の現状を報告します。

LeafSpyで取得したSOHの経時データ。2017年10月納車、走行距離は1,000km/月、気候は関東平野部。

バッテリーの劣化は、納車時に比べて1割程度のようです。満充電時の航続可能距離にしても、LeafSpyの示すSOHにしても、約1割低下しています。走行距離は月1,000km程度で、現時点で27,000kmくらいです。同時期に6万km走った方も同等のSOHであると報告しているので、バッテリー劣化は走行距離(充電回数と言い換えられる)に依存せず、単純に時間が経過したことによる劣化が主である可能性が高いといえます。

ZE1の発表時に日産が10年10万kmで10%以内といっていたのよりは早く劣化が進行しています。この違いはどうしてでしょうか?おそらく、電池の経時劣化に対する理解が十分でないために試算を誤ったのだろうと私は考えています。通常、工業製品の寿命試験は加速試験をして求められます。加速試験とは、 通常よりも過酷な条件で使用してもこの程度の劣化なのだから、通常の条件での劣化は同等以下に収まるはずだというものです。10年後の寿命を実測するには時間がかかりすぎるので、加速試験の結果を外挿して長期間劣化の程度を見積もります。電池の研究開発の段階では、電池を高温で経時させたり、繰り返し充放電させたりといった試験が行われたはずです。走行距離が2万kmでも6万kmでもバッテリー劣化が同程度だるというのは、充放電による劣化を抑える施策は効果的に働いたことを意味しています。一方で、冒頭で述べた2年で10%の劣化のいう結果から、通常の条件で放置しているだけの劣化については、外挿する条件が適切でなかったといえます。実験室レベルではとらえにくいゆっくりと進行する劣化に対処するのは非常に難しいことだと、技術者の身としてはよくわかります。ただ、EVのパイオニアである日産とAESCであってもその程度の技術力なのかと残念な気持ちになります。今後、AESCの電池を使っていた日産やPanasonicの電池を使っていたテスラがCATLの電池を使う方針を示しています。同じ完成車メーカーが異なる電池メーカーから調達することによって、本当に強い技術を持った電池メーカーがどこなのかが明らかになるでしょう。

真の働き方改革 楽をしよう!

私は戦前から続く古びた会社で研究開発の業務に携わりながら、身の回りの業務効率向上―いわゆる働き方改革に取り組んでいます。同僚の多くは真面目で根気よく働くのですが、それゆえに抜本的に働き方、仕事のやり方を変えるという思考には至らないように見えます。たとえば、生産性を上げるためにどのような取り組みをするのかを議論すると、「よく考える」「がんばる」といった精神論レベルのアイデアしか出てこないのが現実です。本稿では、そのような勤勉な方々に向けて、大幅に生産性を向上させるための考え方を提示することを目指しています。

まず、楽をしよう。そして、浮いた時間で新しいことをしよう。

生産性を上げるとは、ある一定の時間に出せる成果の量を増やすことと言い換えられます。つまり、同じ仕事を短時間で処理できれば、生産性が上がったといえます。そこで、頑張って、あるいは気合を入れて、集中して仕事に取り組くことで、ひとつの仕事をいつもより短時間で終わらせることができたとします。ちょっと疲れていませんか?そのペースで一日中働けますか?時間やお金が有限なように、人間の体力や集中力も有限です。気合いを入れて、多くの体力や集中力をひとつの仕事に費やしてしまえば、あとの仕事に支障がでます。一日あるいは一週間というまとまった時間を振り返ってたときに、本当に成果の量は増えるでしょうか。

たとえ話として、走って移動する状況をイメージしてください。普段より気合いを入れて仕事にあたるのは、ジョギングのペースはなくダッシュのペースで走るようなものです。短距離走のペースで長距離走の距離を走ることはできません。長距離を走ろうと思えば、平均的な速度は遅くなります。そこで、別の方法を考える必要が出てきます。別の方法があるのかを考えるときに重要なのが、本来の目的です。もし走ることが目的ではなくて、何かを届けるのが目的なのであれば、駅伝にしてしまえばいい。一人当たりの走る距離を短くすれば速度は上がり、より早く遠くまでタスキを届けられるでしょう。ところで、どうして自分の足で走っているのでしょうか。自転車、自動車、電車、飛行機。 何かを届けるのが目的なら、 自力で走るという条件を外せば、桁違いに速く遠くまで行ける方法があります。冒頭、私が走って移動する状況をイメージしてくださいと書きました。親切なのか無知なのか、仕事の目的ではなく手段を具体的に説明するだけの人はけっこういます。あなたの上司もそんな指示の仕方をしていませんか。

いま取り組んでいる仕事の目的は何でしょうか。おそらく、やり慣れた仕事であれば、どのような成果物が必要なのかを把握されていることでしょう。そこで考えてください。今までのやり方をどのように変えれば、同じ成果物を楽に生み出せるかを。楽にできるということは、より短時間で、体力も集中力も消費せず、ひょっとするとお金もかけずに成果を上げるということです。そのためには、前の段落でたとえ話をしたように、本来の目的以外の前提条件を外して考えることをお勧めします。

楽に成果を上げられるようになったら、時間も体力も余裕ができますね。その浮いた時間で、新しいことをするのが生産性向上です。体力を削って時間を生んでも、あとで帳尻合わせが来ます。時間も体力も消費せずに、同じ成果を上げましょう。

人が手を動かさなくても成果が得られる仕組みをつくろう。

楽に成果を上げるなんて言うは易く行うは難しでは?はい、その通り。簡単ではありません。だから私はこの文章を書いているのです。簡単だったら、みなさんすでにやっておられるでしょう。

楽に成果を上げるのには、3つの方針があります。消す、方法を変える、道具を使うの3つです。

まず、仕事を「消す」ことを考えましょう。昔から続けているというだけで、何の役にも立たない仕事は消す価値があります。やめたら誰かに迷惑がかかるかもしれない?では、その迷惑がかかるかもしれない相手に聞いてみましょう。もし必要ないと言われれば、正々堂々と止めることができます。もし完全に止めることができなくても、ほかの仕事と共通化できれば、2あった仕事を1に減らせます。仕事を消すには関係者との交渉や確認が面倒くさいのですが、その苦労してでもやる価値があります。なんといっても、その仕事、消してしまえば金輪際やらなくていいんですよ。

次に考えるのは、仕事の「方法を変える」ことです。流れを変えるともいえるでしょう。たとえば、予め準備をしておくことを考えます。準備のない状態で問い合わせや指示が来て業務がスタートすると、その場で内容を確認し、適切な対処方法を調べたり考えたり、関連するルールとの整合性を検討したりといった多数の作業に取り掛かります。類似事例の経験があっても、昔のことで詳細は記憶に残っていないかもしれませんし、当時と現在ではルール変更など状況変化があるかもしれません。そのうえ納期はなるべく早くと言われたら、時間のない中でストレスを感じつつ、どうにかそれらしい答えを紡ぎだす羽目になります。そうならないための準備をしましょう。ある程度の経験があれば、業務のパターンが見えてきます。パターンごとに先方に確認すべき事項のリストを作ったり、過去事例をまとめた資料をつくったり、関連する規制情報をすぐに参照できるよう確認手段を明確にしておくといった準備ができるはずです。今の時代、たいていの情報はWEBや共有ネットワーク上に電子データで存在しますから、Wordで資料をつくって外部リソースへリンクを張っておけば、数クリックで必要な情報が集まるようにできます。さらに、電子データで準備をしておけば、容易に使いまわしができます。問い合わせてを受けて、調べて回答するまで数分から数時間かかっていたような業務が、準備資料を検索してコピーするだけのわずか数秒で解決できるようにできます。成果を使いまわせる点は重要です。むしろ、使いまわす前提で資料をまとめましょう。個別の案件にその都度対応していては、結局人間の手間がかかります。そこで、別件のための生み出した成果を使いまわすことを考えましょう。うまくいけば、インプットなしで成果を出せます。

最後に、仕事に「道具を使う」ことを考えましょう。人力で走るより車に乗った方が楽なのは言うまでもありません。車がコスト的に難しいなら、自転車でも人力よりずっとマシでしょう。今日の仕事の大部分である事務仕事にとって、Microsoft OfficeのWordやExcelあるいはG Suite (Google) のドキュメントやスプレッドシートは自転車と同じくらい当たり前の存在です。特に、事務仕事でExcelやスプレッドシートを開かない日はないほどです。これらのソフトウェアは、自転車以上に使うものの技量が問われます。SUM関数やグラフの挿入、罫線の修飾は誰でも使えるかもしれませんが、VLOOKUP関数やデータの並べ替え、データ分析に至っては10人に1人も使えるか怪しいところです。単純な道具の代表であるハサミでも使いようによっては繊細な紙細工を生み出せます。現代のコンピュータ技術の粋を集めて作られたExcelのようなソフトウェアを使いこなせたなら、どれほどのことができるか言うまでもないでしょう。多くの職場には、そんな便利な道具がすでに導入されているのですから、うまく使えるようになれば劇的に事務作業が楽になります。
もっと楽をしたいなら、プログラミングに挑戦しましょう。Officeソフトの使いこなしが自転車レベルとしたら、プログラミングは自動車レベルです。段違いの楽ができます。MS OfficeならVBA、G SuiteならGASというプログラムを自分で作ることで、ほとんどの作業は自動化できます。巷には何冊も書籍が出ていますし、ネット上を検索すれば参考になる情報がいくらでも出てきます。

最後に、他人を動かすのは北風ではなく太陽であることを忘れないで。

ここまで頑張ってきたあなたは、効率化の施策もろもろを組織全体に広げたいと考えることでしょう。ひたすらに前例踏襲に励み、ちっとも業務を効率化しようとしない同僚に苛立ちすら覚えているかもしれません。そこで、思い出していただきたいのが、北風と太陽の寓話です。人は激しい重圧に曝されると身を守る行動にでます。叱責や非難は、行動を変容させるための良い手段ではありません。他人の行動を変えるには、太陽のように温かい心で優しく手を差し伸べることが近道です。

自分ひとりで効率化を進めてきたあなたにとっては納得しがたいことかもしれません。大して努力しようとしない他人のために、なぜ自分が苦労しなければならないのかと。ここで思い出していただきたいのが、あなた自身がここまで来るのに積み重ねた努力と苦労の大きさです。それを他人にも強いるのですか?全ての人類が自分自身の成長を常に望んでいるわけではありませんよね。

自分の業務を効率化して多少の余裕がある。同僚にも役立つ効率化の具体的な手法と効果を知っている。そんな立場だからこそ、最小の労力で同僚の業務を効率化する提案ができるはずです。人間なんて現金なものですから、自分が労せずして楽をできると知れば、こちらの話に乗ってくれる可能性が高くなります。少し頑張るだけで楽をできるなら、自分も工夫してみようと考える仲間が現れるかもしれません。

まず、楽をしよう。次に、他人を楽させよう。そして、働きやすい環境を実現しよう。

[GAS] WEBアプリケーションでJavaScriptを使う例 QRコードの読み込み

GAS上でJavaScriptやCSSをHTMLと別ファイルで管理し、埋め込む方法

GASのWEBアプリケーションでは、GASを使ってhtmlファイルを生成し、それを表示している。普通のWEBのように、htmlファイルにJavaScriptを埋め込むこともできる。

JavaScriptやCSSをHTMLファイルに直で書き込むと読みにくいので、別のファイルに書いたJavaScriptやCSSをHTMLファイルで読み込む形をとることが多い。GASではファイルの扱いが面倒くさいが、以下のページの記述がわかりやすい。

GASでHTML/CSS/JavaScriptを使ってWebアプリケーションを作る方法

やっていることは、GASでHTMLファイルにJavaScriptやCSSを埋め込んでしまい、マージされたHTMLを表示させるというものだ。

GASのプロジェクトではHTMLファイルとしてJavaScriptやCSSを作っておく。このとき、HTMLファイルといえどもJavaScriptならscriptタグとその中身、CSSならstyleタグとその中身だけを書いておく。また、HTMLのテンプレートとなるファイルには、<?!= HtmlService.createHtmlOutputFromFile(‘ 読み込むファイル名 ‘).getContent(); ?> と記述しておく。

関連 [GAS] Google Apps Script のHtmlServiceまとめ

JavaScriptの利用例 ブラウザ上でQRコードを読み込む

JavaScriptを使うといろいろ可能性が広がる。

たとえば、スマホのブラウザ (Chrome, Safariなど) からQRコードを読み込ませることもできる。ユーザーにブラウザ以外のアプリをインストールさせる必要がない。

たとえば、次に示すページでは、フォームのテキストボックスにQRコードを読んだ結果を書き込むシンプルな方法を紹介している。

ネイティブアプリ不要!モバイルWebサイトにQRコードリーダーを実装する方法 LazarSoft/jsqrcodeを使った例。写真を撮ってQRコード読み込み。

[HTML5] QRコードリーダーを作成する cozmo/jsQRを使った例。ビデオで撮ってQRコードを検出すると結果がテキストで出てくる。

QRコードの生成や印刷の条件

QRコードの生成はGoogleスプレッドシートとGoogle Charts APIを使うのが楽。QRコードに埋め込みたい文字列とGoogle Chartsを呼び出す式を並べれば一気にQRコードを生成できる。
Google Charts APIのQRコードの説明

1個1個つくるならQRコードの生みの親デンソーウェーブのQRQRも使い勝手がいい。PCにソフトウェアをインストールすれば大量生成も可能。

QRコードの仕様を学びたければKeyenceの資料がわかりやすい。

2020年1月

1月の走行距離は292 kmでした。

電費は7.2 km/kWhで12月より0.1改善しました。高速道路での長距離移動が減ったためでしょう。

月額2,200円のZESP2に対して、ガソリン145 円/Lとして燃費19.3 km/Lと同等です。

急速充電 4回、普通充電は1回、急速充電1回あたりの走行距離は73 kmでした。

2019年12月

12月の走行距離は1,563kmでした。

電費は7.1 km/kWhで11月より0.5悪化しました。気温が低下したうえに、高速道路で長距離移動が多かったためでしょう。

月額2,200円のZESP2に対して、ガソリン143 円/Lとして燃費101 km/Lと同等です。

急速充電 16回、普通充電は1回、急速充電1回あたりの走行距離は98 kmでした。

2019年11月

11月の走行距離は645 kmでした。

電費は7.6 km/kWhで10月より0.2悪化しました。暖房を使い始めた影響が出ています。

月額2,200円のZESP2に対して、ガソリン140 円/Lとして燃費19.8 km/Lと同等です。

急速充電 5回、普通充電は0回、急速充電1回あたりの走行距離は129 kmでした。

[GAS]DriveAppでファイルを移動する

stackoverflowの説明が端的でわかりやすい。Googleドライブ上のファイルがどのフォルダに入っているかは、いわゆるフォルダ構成とはイメージが異なる。Googleドライブであるファイルがどのフォルダに入っているのかは、Gmailのラベルに相当するものと考えればよい。同時に複数のフォルダに同一のファイルが所属できるのも、Gmailのラベルを思い出せばおかしなことではないだろう。

新しいファイルの生成は、ルートフォルダである「マイドライブ」で行われる。これは新しいファイルに「マイドライブ」のラベルが付いた状態だと思えばいい。Googleドライブ上でどこかのフォルダにファイルを移動させたければ、移動先のfolderに対してfolder.addFile(ファイル)を行ったうえで、「マイドライブ」フォルダからremoveFile()すればよい。addFileする前にファイルのgetParents()をしておけば、移動元のフォルダ(「マイドライブ」だろう)を取得できる

日本語だとGASで業務効率化 ~スプレッドシートからGoogleドキュメントを作成する~の説明通りにやればファイルを移動できる。ほかのサイトだと、copyして元のファイルを削除しているケースが見られるが、これだとcopyした意味がない。