現役情シスが送る実践的Tips集

2020/08/31

【Gmail】共有テンプレートでメール業務はもっと楽になる

こんにちは。

今回は以前投稿したテンプレートアドオンのおまけで、テンプレートを共有化してみました。

元の記事はこちら。

【Gmail】テンプレートアドオンをインストールしよう

 

概要

以下のような観点からGmailのテンプレートを共有したいと考えたことはないでしょうか。

・カスタマーサポートをチームで行っているが担当者によって文言が微妙に違う
・新人や中途社員でもすぐメール業務を開始できるようにしたい
・メールテンプレートの更新を一括で行いたい

 アドオンのカスタマイズで共有化が実現できたのでご紹介します。

  

前提条件

・Gmailを利用している
・共有テンプレートの管理者を決めておく (テンプレートの更新は管理者のみとしておくことを推奨する)

 

導入手順

1. 共有テンプレート用スプレッドシートを準備する  (全文解説)
2. プログラミングする (差分解説)
3. Gmailに組み込む (省略)
4. 試してみる (差分解説)

流れは元のアドオンとほぼ同じため差分だけの解説とさせていただきます。

  

共有テンプレート用スプレッドシートを準備する (全文解説)

①テンプレート管理者は任意の場所に以下のスプレッドシートを作成する

※ 元のアドオンを実装済みの方は「gmail_template_list」を複製するだけで良い

・ファイル名:任意
・保存場所:任意
・シート名:list
・内容:
・A1:No
・B1:Title
・C1:Message

以下はスプレッドシートのサンプルです。

spleadsheet1

 

 

②作成したスプレッドシートを共有設定する

ユーザーの権限設定は以下が望ましい

・スプレッドシートを更新する人:「編集者
・それ以外のテンプレート利用者:「閲覧者

 

③スプレッドシートのURLから以下赤字部分を控える

例. https://docs.google.com/spreadsheets/d/13D_mdsvjyVd5Qxg_JS4CKb544dVdZrNyZCzY-IL7Po/

 

プログラミングする (差分解説)

~中略~

③以下のプログラムコードをコピーして…

// main
function buildTemplateComposeCard() {
  // settings template SpleadSheetID and SheetName (SpleadSheet must be shared)
  var ssID  = "スプレッドシートのID";
  var ssSName = "list";
  var ssUrl = DriveApp.getFileById(ssID).getUrl();

  // ①. Define Button "Show SpleadSheet"
  var showSSButton = CardService.newTextButton()
    .setText('Show Template')
    .setTextButtonStyle(CardService.TextButtonStyle.FILLED)
    .setBackgroundColor('#696969')
    .setOpenLink(CardService.newOpenLink()
      .setUrl(ssUrl)
      .setOnClose(CardService.OnClose.RELOAD_ADD_ON));

  // ②. exists template data. Display tempate list.
  var ss = SpreadsheetApp.openByUrl(ssUrl);
  var startRow = 1;
  var startCol = 1;
  var lastRow = ss.getLastRow();
  var lastCol = ss.getLastColumn();
  var ssData= ss.getSheetByName(ssSName).getRange(startRow,startCol,lastRow,lastCol).getValues();
  var buttons = CardService.newCardSection()

  for( var i=1; i<ssData.length; i++ ) {
    buttons.addWidget(CardService.newTextButton()
      .setText(ssData[i][1])
      .setOnClickAction(CardService.newAction()
        .setFunctionName('applyInsertTemplateAction')
        .setParameters({'message': ssData[i][2]})))
  }

  // Define UI
  var card = CardService.newCardBuilder()
    .addSection(CardService.newCardSection()
      .addWidget(showSSButton))
    .addSection(buttons)
    .build();
  return [card];
}


// functions
// Define template Buttons
function applyInsertTemplateAction(e) {
  var messages = e.parameters['message'];
  var sp_messages = messages.split(String.fromCharCode(10)).join(''); // ”\n” convert HTML format.
  var response = CardService.newUpdateDraftActionResponseBuilder()
    .setUpdateDraftBodyAction(CardService.newUpdateDraftBodyAction()
      .addUpdateContent(
        sp_messages,
        CardService.ContentType.MUTABLE_HTML)
      .setUpdateType(CardService.UpdateDraftBodyType.IN_PLACE_INSERT))
    .build();
  return response;
}

「コード.gs」タブに上書き貼り付けし、4行目の以下 スプレッドシートのID を1-③で控えた文字に置換する

  var ssID  = "スプレッドシートのID";

 

~中略~

⑦以下のプログラムコードをコピーして…


{
"timeZone": "Asia/Tokyo",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"oauthScopes": [
"https://www.googleapis.com/auth/gmail.addons.execute",
"https://www.googleapis.com/auth/gmail.addons.current.action.compose",
"https://www.googleapis.com/auth/gmail.addons.current.message.metadata",
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/drive"
],
"gmail": {
"name": "gmail_share_template",
"logoUrl":
"https://www.gstatic.com/images/icons/material/system/1x/label_googblue_24dp.png",
"primaryColor": "#45c4bf",
"secondaryColor": "#0000FF",
"composeTrigger": {
"selectActions": [
{
"text": "Build Mail Share Template",
"runFunction": "buildTemplateComposeCard"
}
]
}
}
}

「appsscript.json」タブに上書き貼り付けする

~中略~

⑪「Deployment ID」 の値をコピーし、共有テンプレートを利用するメンバーに共有する

 

Gmailに組み込む (省略)

※ 本手順は共有テンプレートの管理者・利用者共に実施すること

 

~中略~

⑥「インストール済みのデベロッパーアドオン」に「gmail_share_template」が表示されたら組み込み完了

  

試してみる

※ 本手順は共有テンプレートの管理者・利用者共に実施すること

 

~中略~

④警告画面が表示されるが「詳細」をクリックし…

下に展開された「gmail_share_template」をクリックする

※ 画像省略

 

~中略~

⑥「アクセス承認」が完了するとテンプレート機能が利用可能になる

 テンプレートの内容を確認したい場合は「SHOW TEMPLATE」をクリックする

 ※ スプレッドシートの「編集者」権限のみテンプレートの更新が可能

gmail addon1

 

以上。

 

補足

・件名、宛先の追加機能はまだない (アドオン側が未実装)
・スプレッドシートのTitleに数字のみはNG
・スプレッドシートの各列はすべて入力必須項目
・スプレッドシートの入力ミスなどでテンプレート機能が正常に動作しなくなった場合はGoogleドライブからスプレッドシートを直接開いて修正する
・コードはグローバル対応のため英語表記ですが (自己責任で) ソースを修正して日本語表記にすることも可能です
・くどいようですが、本機能はあくまで自分(あなた)が自作したものであり例えるならExcelの自作マクロと同等であるため、企業にありがちなセキュリティ要件はクリアできます
・AndroidのGmailアプリでも同じテンプレートが利用できます (iPhone未対応)
・機能を呼び出すアイコンが元のテンプレートアドオンと同じ青いラベルになっています。両方使う方はご注意ください。 (良いものがあれば追記予定)

 

最後に

2重更新の手間を省くために元のテンプレートアドオン記事からの差分のみの解説となっており、読みにくくて大変申し訳ないです。

わかりにくいという声が多い場合は再投稿も検討するため遠慮なくコメントしてください。

本投稿時点では類似機能はリリースされていないようなので興味がある方は検討の余地ありだと思います。

また、アドオン側の機能強化により宛先追加などが可能になった際は改修版を公開したいと思います。

 

2020/08/30

【Googleドライブ】開けなくなった破損データをGoogleドライブで修復しよう(Excel/Word/PowerPoint/PDF)

こんにちは。
今回はパソコンを使ってお仕事をしている方なら一度は体験したことがあるであろう
破損データの修復に関するお話です。


概要

「昨日までは開けたのに、今日はエラーが出て開かない!」
「メール添付してもらったデータをダウンロードしたらエラーで開けない!」
そんな事象に遭遇したこと、ありませんか?

例えばExcelファイルが破損した場合、主な修復はExcel自体の修復機能かフリーツールを頼ることになるかと思います。
前者は成功率が低く、後者は適切なソフトウェアの選定が困難であり
更にファイルを開けるようになるだけで内容に欠損が残ることが多いです。(文字化けなど)
結果、修復を諦めるケースが大半だったかと思います。

しかし、Googleドライブを使用するとかなり高いレベルで修復できます!
今回は手法が最も面倒なExcelファイルを例にして説明したいと思います。
f:id:cool-f:20191113155251p:plain
Excelのファイル破損によるエラーメッセージ

 

修復方法

ExcelファイルをGoogleドライブにアップロードする

まずはとにもかくにも破損したExcelファイルをアップロードします。

f:id:cool-f:20191113204005p:plain
Googleドライブへアップロード

スプレッドシートに変換する

アップロードしたExcelファイルをスプレッドシートに変換します。

f:id:cool-f:20191113204406p:plain
スプレッドシートに変換

下図のように内容を表示できたら一安心。ただし、ここからが重要です。

f:id:cool-f:20191113204554p:plain
スプレッドシート上で見るExcelファイル

新規スプレッドシートにコピーしてダウンロードする

シートのプルダウンから新しいスプレッドシートにコピーしてください。

f:id:cool-f:20191113204840p:plain
新しいスプレッドシートにコピーする

f:id:cool-f:20191113204954p:plain
コピー完了
コピー先のスプレッドシートを開き、Excel形式でダウンロードすると修復完了です。

ダウンロードしたExcelファイルを開いてみてください。エラーなく開けるはずです。

f:id:cool-f:20191113205038p:plain
コピーしたスプレッドシートをExcelとしてダウンロードする

 

考察

あくまで推測に過ぎませんが、Office製品はファイルオープン時に多様なバリデーションをかけている印象があります。
これはファイルオープンに要する時間や、オープン中のダイアログに表示されるメッセージから判断できます。
つまりオープン成功には複雑な条件をクリアする必要があるわけです。
一方でGoogleドライブは表示形式が多少崩れようともファイルオープンできるケースがかなり多いです。

作り手の設計方針の違いを垣間見れるようで大変興味深いですが、
恐らくExcel→スプレッドシートへの変換によってバリデーション機能自体 (およびエラーの原因) が削られるために、
とりあえずファイルを開くことができるのだと思います。

 

注意点

今回の方法で修復できるのはあくまでレイアウトのみです。(なのでとりあえず、です)
マクロやVBAなどはほぼ100%消えると思ってください。
これはMicrosoft OfficeとGoogleドライブの互換性によるものですので諦めていただくしかありません。
それでも開きさえしたらバックアップからマクロやVBAは組み直すことができるので十分ですよね。

今回はExcelを例にご説明しましたが、題名にもあるとおりWord/PowerPoint/PDFなんかも同じ手法で修復可能です。
Word/PowerPointはGoogleドライブ上で形式を変換してダウンロードするだけでOKです。
PDFは単純にGoogleドライブにアップロードするだけでかなり高い確率で開くことができます。

例えメインの業務システムがOffice365などの異なるグループウェアであったとしても、
本稿のテクニックを活用するためだけでもGoogleアカウントを持つ価値はあると思います。

ただし、Googleのポリシーと規約に同意できることが利用にあたっての前提条件ですので、
利用にあたっては慎重な判断をお願いします。

policies.google.com

 

2020/08/29

【Gmail】テンプレートアドオンをAndroidで使ってみた

こんにちは。

引き続きテンプレート機能の話です。

今回はAndroidでの使用感をレポートします。

 

初めて訪問された方は以下もどうぞ。

【Gmail】テンプレートアドオンを開発してみた

【Gmail】テンプレートアドオンをインストールしよう

 

概要

同じGoogleアカウントであればPC・Android(スマホ・タブレット)問わず共通のテンプレートが利用できます。

PCを利用しない方々にとっても導入する価値は大いにあると思います。

 

それでは利用イメージの紹介です。

今回はすごく短いので読みやすいと思います。

 

利用イメージ

①Gmailアプリにてメール新規作成画面を開き、右上のメニューから「挿入元 gmail_template」をタップする

gmail1

 

②共通のテンプレート一覧が表示するため前回同様「TEST TEMPLATE B」をタップする

gmail2

 

③対応したテンプレート内容がメール本文に反映された 

gmail3

 

以下は②で「EDIT TEMPLATE」をタップした場合

スプレッドシートアプリにてテンプレートを更新することができる

spleadsheet1

 

 

以上です。

 

 

スマホ・タブレットは文字入力に慣れが必要なため長文入力に苦労する人が多いと思います。

この機能を使えば定型文をボタン操作で本文に挿入できるため手間が軽減できるようになります。

テンプレートの更新はPCから行えばメンテナンスも簡単にできるはずです。

何よりPCで使っているテンプレートがスマホ・タブレットでも使えるのはGmailユーザーにとって感動ものだと思います。

 

2020/08/25

【Gmail】テンプレートアドオンをインストールしよう

こんにちは。

今回は前回の続きでテンプレートアドオンの設定手順を説明します。

 

非エンジニアの方でも利用できるよう詳細に記述するので有識者はご容赦ください。

前回の投稿はこちらからどうぞ。

https://blog.fkmint.com/2020/08/gmail20200802.html

 

では早速、解説に移ります。 

 

アドオンの利用要件

  • Gmailを利用している (フリーでも利用可)   …だけ

 

設定手順

GoogleAppsScriptでコードを書く

コード管理画面にアクセスして「新規スクリプト」ボタンをクリックする

gas1

 

②新しいタブにスクリプトエディタが開く

gas2

 

③以下のプログラムコードをコピーして… 

// main
function buildTemplateComposeCard() {
  // settings template SpleadSheetName and SheetName (save in MyDrive)
  var ssName  = "gmail_template_list";
  var ssSName = "list";

  // exits SpleadSheat
  var ssExists = DriveApp.getFilesByName(ssName);
  if ( !ssExists.hasNext() ){
    createSS(ssName, ssSName);
  }
  // get SpleadSheetURL
  var ssUrl = DriveApp.getFilesByName(ssName).next().getUrl();
  // ①. Define Button "Edit SpleadSheet"
  var editSSButton = CardService.newTextButton()
    .setText('Edit Template')
    .setTextButtonStyle(CardService.TextButtonStyle.FILLED)
    .setBackgroundColor('#696969')
    .setOpenLink(CardService.newOpenLink()
      .setUrl(ssUrl)
      .setOnClose(CardService.OnClose.RELOAD_ADD_ON));
  // ②-A. for example first run, there is no template data. Display messages.
  var noDataMessage = CardService.newTextButton()
    .setText('Please, Click [Edit Template] and define template.')
    .setDisabled(true)
    .setOpenLink(CardService.newOpenLink() // dummy
      .setUrl(ssUrl)); // dummy
  // ②-B. exists template data. Display tempate list.
  var ss = SpreadsheetApp.openByUrl(ssUrl);
  var startRow = 1;
  var startCol = 1;
  var lastRow = ss.getLastRow();
  var lastCol = ss.getLastColumn();
  var ssData= ss.getSheetByName(ssSName).getRange(startRow,startCol,lastRow,lastCol).getValues();
  var buttons = CardService.newCardSection()
  // switch ②-A/B
  if ( lastRow == 1 ) {
    buttons.addWidget(noDataMessage)
  } else {
    for( var i=1; i<ssData.length; i++ ) {
      buttons.addWidget(CardService.newTextButton()
        .setText(ssData[i][1])
        .setOnClickAction(CardService.newAction()
          .setFunctionName('applyInsertTemplateAction')
          .setParameters({'message': ssData[i][2]})))
    }
  }
  // Define UI
  var card = CardService.newCardBuilder()
    .addSection(CardService.newCardSection()
      .addWidget(editSSButton))
    .addSection(buttons)
    .build();
  return [card];
}


// functions
// Create tempalte SpleadSheet
function createSS(ssName, ssSName) {
  var ssNew = SpreadsheetApp.create(ssName);
  ssNew.renameActiveSheet(ssSName);
  ssNew.getSheetByName(ssSName).getRange(1,1).setValue("No");
  ssNew.getSheetByName(ssSName).getRange(1,2).setValue("Title");
  ssNew.getSheetByName(ssSName).getRange(1,3).setValue("Message");
}
// Define template Buttons
function applyInsertTemplateAction(e) {
  var messages = e.parameters['message'];
  var sp_messages = messages.split(String.fromCharCode(10)).join('<br />'); // ”\n” convert HTML format.
  var response = CardService.newUpdateDraftActionResponseBuilder()
    .setUpdateDraftBodyAction(CardService.newUpdateDraftBodyAction()
      .addUpdateContent(
        sp_messages,
        CardService.ContentType.MUTABLE_HTML)
      .setUpdateType(CardService.UpdateDraftBodyType.IN_PLACE_INSERT))
    .build();
  return response;
}

「コード.gs」タブに上書き貼り付けする

gas3

 

④メニューの「表示」>「マニフェスト ファイルを表示」をクリックする

gas4

 

⑤作成中のプログラムに命名を求められるため「gmail_template」と入力して「OK」をクリックする

※ 個人で使う分には自由に名付けて問題ないが複数名で使用する場合は相談の上で命名すること

 

gas5

 

⑥「コード.gs」タブの隣に「appsscript.json」タブが表示される

gas6

 

⑦以下のプログラムコードをコピーして…

{
  "timeZone": "Asia/Tokyo",
  "oauthScopes":[
    "https://www.googleapis.com/auth/gmail.addons.execute",
    "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
    "https://www.googleapis.com/auth/gmail.addons.current.message.metadata",
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/drive"
    ],
  "gmail":{
    "name": "gmail_template",
    "logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/label_googblue_24dp.png",
    "primaryColor": "#4285F4",
    "secondaryColor": "#0000FF",
    "composeTrigger": {
      "selectActions": [
        {
          "text": "Build Mail Template",
          "runFunction": "buildTemplateComposeCard"
        }
      ]
    }
  },
  "exceptionLogging": "STACKDRIVER"
}

「appsscript.json」タブに上書き貼り付けする

gas7

 

⑧ 「コード.gs」と「appsscript.json」タブでそれぞれフロッピーアイコンをクリックして保存する

※下図のように最終的にタブ名の左隣  が表示されなくなればOK

gas8

 

⑨メニューの「公開」>「マニフェストから配置」をクリックする

gas9

 

⑩「Get ID」をクリックする

gas10

 

 

⑪「Deployment ID」 の値をコピーする

gas11

 

Gmailにアドオンをインストールする

Gmailを開き、歯車アイコン>「設定」をクリックする

gmail1

 

②「アドオン」タブで「ご利用のアカウントで、デベロッパーアドオンを有効にします」にチェックを入れる

gmail2

 

③「有効にする」をクリックする

gmail3

 

④「デベロッパー アドオン」項目が追加されるため空欄に1-⑪でコピーしたDeployment IDを貼り付けて「インストール」をクリックする

 

 

⑤「このアドオンのデベロッパーを信頼します」にチェックを入れて「インストール」をクリックする

gmail4

 

⑥「インストール済みのデベロッパーアドオン」に「gmail_template」が表示されたらインストール完了

gmail5

 

使用方法

初回のアクセス承認

①Gmailで新規作成画面を開き、青いラベルアイコンをクリックする

gmail6

 

②初回実行時のみ承認が必要となるため「アクセスを承認」をクリックする

gmail7

 

③使用するGoogleアカウントを尋ねられるため現在使用中のアカウントをクリックする

gmail8

 

④警告画面が表示されるが「詳細」をクリックし…

gmail9

下に展開された「gmail_template」をクリックする

gmail10

 

⑤テンプレート機能がアクセスする項目について確認が求められるため「許可」をクリックする

※ 第3者が作成したツールを利用する場合はアクセス項目が妥当であるか確認の上で使用してほしいが、今回は第3者(私)が考えたプログラムコードを使って自分(あなた)が作成したツールとなるため遠慮なく「許可」してほしい

gmail11

 

初期設定の例

①「アクセス承認」が完了するとテンプレート機能が利用可能になる

   初期状態ではテンプレートがないため以下のような画面となる

   早速テンプレートを作成するため「EDIT TEMPLATE」をクリックする

gmail12

 

②新しいタブにテンプレートを管理するスプレッドシートが開く

ss1

 

③例として以下のようなテンプレートを定義する

 なお、各列の説明は以下のとおり

・No:フィルタのソートで並び替えをするためのナンバリング
・Title:テンプレートの題名、テンプレート機能で一覧化される表示名
・Message:テンプレートの内容、Titleに紐づく

ss2

 

④スプレッドシートを閉じると以下のように反映される

gmail13

 

⑤「test template B」を選択した結果

対応するテンプレート内容がメール本文に反映された

gmail14

 

補足

・件名、宛先の追加機能はまだない (アドオン側が未実装)
・スプレッドシートのTitleに数字のみはNG
・スプレッドシートの各列はすべて入力必須項目
・スプレッドシートの入力ミスなどでテンプレート機能が正常に動作しなくなった場合はGoogleドライブからスプレッドシートを直接開いて修正する
・企業など複数名で使用したい場合は作成した「gmail_template」をメンバー間で共有設定した上で、2と3の作業を行ってもらう (2-④で入力するDeployment IDは共有メンバー間で同値となる)
・コードはグローバル対応のため英語表記ですが (自己責任で) ソースを修正して日本語表記にすることも可能です
・くどいようですが、本機能はあくまで自分(あなた)が自作したものであり例えるならExcelの自作マクロと同等であるため、企業にありがちなセキュリティ要件はクリアできます
・AndroidのGmailアプリでも同じテンプレートが利用できます (iPhone未対応)

 

最後に

本職がコーダーではないのでコードの完成度については目を瞑っていただきたいです。

 

基本的に最低限動けば良いレベルで作成していますので、コメントなどで修正の要望をいただいても対応できかねる場合があります。ご容赦ください。

また、本機能をご利用の際はあくまで自己責任でお願いします。


2020/08/23

【Gmail】テンプレートアドオンを開発してみた

こんにちは。

今回はGmailのテンプレート機能を開発した話をします。

 

Gmailには詳細設定からテンプレート機能を追加することができますが、使い勝手があまりよくありません。

そこでアドオンを使用してちょっとリッチなテンプレート機能を開発してみました。

なお、アドオンの公式資料は以下を参考にしてください。

developers.google.com

 

では早速、解説に移ります。 

 

概要

本機能はスプレッドシートとGoogleAppsScriptで成り立っています。

スプレッドシートには各テンプレートを登録しており、GoogleAppsScriptで作成したアドオンがGmailの新規作成画面との橋渡しを行います。

百聞は一見に如かずと言う通り実際に見ていただくのが早いですね。

次に動画を用意したのでご覧ください。

 

アドオン使用ムービー

まずはテンプレートを本文に挿入するシーンです。

新規作成画面下部の青いラベルがアドオンです。

「TEST TEMPLATE B」を選択すると対応するテンプレートが本文に挿入されたことがわかると思います。

f:id:cool-f:20191110203731g:plain
テンプレート挿入

 

次にテンプレートを編集するシーンです。

「EDIT TEMPLATE」ボタンを押すとスプレッドシートを呼び出すことができます。

スプレッドシートを編集→タブを閉じてGmailの画面に戻ると、最新版のテンプレートに読み込み直してくれるので便利です。

f:id:cool-f:20191110204532g:plain
テンプレート編集
 

 

いかがでしょう、利用イメージが掴めたでしょうか?

続けて本アドオンの設定方法をご説明したいところですが、長丁場になってしまいますので次回の投稿とさせていただきます。

お楽しみに。

 

2020/08/22

【Googleドライブ】File Streamのエラーはキャッシュ削除で解消しよう

こんにちは。

今回はG Suite限定で利用できるGoogle Drive File Streamのトラブルシューティングについてです。

※ 現在は「パソコン版Googleドライブ」が正式名称のようですね

 

概要

PCを交換する際、データ移行のために「C:\Users\ユーザー名」フォルダを

丸ごとコピーすることは良くあるかと思います。

このとき、旧環境でGoogle Drive File Streamを使用していると新環境でアプリが正常に動作しないことがあります。

症状は様々で例として以下のようなものがありますが総じてハマりやすいのが難点です。

  • 見た目はアプリ自体は起動しているがフォルダにアクセスできない
  • 何度もGoogleのログイン認証を求められる

今回はこのような不具合の解消法をお伝えします。

 

手順

結論から申し上げるとキャッシュを削除するだけで解消します。

手順は以下のとおりです。

  1. タスクトレイのGoogle Drive File Streamを右クリックして終了する
  2. アイコンが消えたら「%LOCALAPPDATA%\Google\DriveFS」を削除する
  3. スタートメニューからGoogle Drive File Streamを起動しログインする

以上で大抵のエラーは解消されます。

 

蛇足

詳しい仕組みはわかりかねますが旧環境のキャッシュが新環境で不整合を起こすようです。

いっそのこと移行前にキャッシュを削除しておいた方が良いです。

なお、この手の問題に遭遇するときエンジニアに相談するのは避けてできるだけ自己解決してほしいと思います。

なぜならエンジニアは原因追求に没頭し、しばしば現実に困っている利用者を置き去りにすることが多々あるからです。(自戒も込めてます)

悪気はないのですが、ビジネスシーンにおいては合理的とは言い難いので、

利用者で解決する術を身につけるのも決して悪い話ではないと思います。

 

最後に、キャッシュの保存場所については以下を参考にしました。

G Suite 管理者ヘルプ > ドライブファイルストリームを構成する

 

2020/08/20

【GoogleMeet】最速でビデオ会議を始めたいなら「ニックネーム」を使おう

こんにちは。

今回は組織でGoogle Meetを推進したい人向けに書きました。

 

概要

G Suiteに標準で実装されているビデオ会議システムMeet。

各地に拠点を展開する事業を持つ組織では「会議のための出張費」を削減するためのドンピシャなツールなので使わない手はないかと思います。

しかし、推進してもなかなか普及しない。あるいは最初から難色を示され説明すらさせてもらえない…なんてことは割とよくある話なのではないでしょうか。

そこで今回は腰の重いユーザー向けに簡単・手軽にビデオ会議を始めるためのMeetの使い方をご案内します。

 

まず使わせる

重要なことはズバリ「怖がらせない」ことです。

拒否反応は知らないツールに対する不安から生まれます。

なので推進する人はそのツールの使い方の中で最も手順が少ない方法を用いて「怖くないよ~簡単だよ~」と言って聞かせて見せてやらせるわけです。

Meetにおいてソレは「ニックネームを使う」ことです。

 

手順

それでは手順の説明に移ります。

相手にMeetで会議を始めてもらい、自分がその会議に参加するという段取りで説明しましょう。

 

Meetを起動してもらう

Googleのランチャや事前登録したお気に入りなどからMeetにアクセスしてもらいます。

f:id:cool-f:20200202023128p:plain
Meetの起動
 

適当なニックネームで会議を開始してもらう

Meetの画面にある「ミーティング参加または開始」をクリックし、テキストボックスに適当な名前を入力してミーティングを開始してもらいます。

日本語対応していないので「taro20200202」や「cool-f」などにします。

わかりやすく被りにくいものである点に注意です。

f:id:cool-f:20200202024256p:plain
ニックネームでミーティング開始
 

自分のアカウントでニックネームを使って会議に参加する

まったく同じ手順で今度はあなたがMeetで同じニックネームの会議に参加します。

するとあら簡単、2人のビデオ会議の始まり始まり。

たったこれだけです。 

 

まとめ

ニックネームは同じドメイン内で何度も使いまわすことができるフリースペースのようなものです。

よくやり取りをする相手ならば事前に合言葉のようにニックネームを決めておけば即席会議もお手の物。

ただし被りやすいものにしておくと、たまたまニックネームが被った人が突然会議に乱入してくるという面白事件に遭遇してしまうので忘れずお伝えください。

 

よくある案内方法ではGoogleカレンダーに登録した会議予定からMeetを起動したり、Meetのミーティングコード (gde-dcs-lodのようなランダムな文字列) を相手にメールやチャットで送り付けて会議に招待するなんてものがありますが、これらはクリック数が多くなるので拒否感を助長するだけです。

そういうのは慣れてからにしましょう。

とにかく使ってもらうことを第一に、推進がんばってください。

 

 

2020/08/19

【Windows10】低スペックPCはクリーンアップスクリプトで乗り切ろう

event_note8月 19, 2020 forumNo comments
こんにちは。
今回は低スペックなWindows7PCをWindows10にアップグレードしたことで性能不足に悩む人々に向けたTipsです。

 

概要

Windows7全盛期のPCと言えばメモリ2~4GB、ディスクはHDDといったところだと思いますが、
これではWindows10を満足に使いこなすことができないのは周知の事実かと思います。
性能が不足していると動作遅延であったりスリープから復帰しない等の電源周りの動作不全も引き起こします。
※ 個人的見解です
 
訳あってPCの買い替えができず低スペックのWindows10でやり繰りしないといけない方のために、
少しでも動作を軽くするための方法の一つとしてディスクのデフラグとクリーンアップを
簡単確実かつ任意のタイミングで行う方法をご紹介します。

 

解説

通常、WindowsPCのディスクのデフラグとクリーンアップは手動であればGUI操作で、
自動であればメンテナンス機能がバックグラウンドで勝手に処理してくれます。

しかし、GUI操作はそこそこWindowsの知識が必要な上にクリーンアップを完全に行うには
管理者権限が必要なため企業のシステム管理者にとっては歯痒い存在です。
一方、メンテナンス機能に関しては放っておけば勝手にやってくれるとは言え、
100%クリーンアップするには数日の猶予期間が設けられているため
すぐにキャッシュを削除してくれずヤキモキさせられます。
 
ピンと来ない方のためにGUI操作を行う場合の実際の画像を以下にご用意しました。 
f:id:cool-f:20200211200151p:plain
ディスクのデフラグ

f:id:cool-f:20200211200331p:plain
ディスクのクリーンアップ

今回はこの2つの操作を一般ユーザー権限のアカウントでも行える設定手順を解説します。

 

設定手順

タスクスケジューラにタスク作成

管理者権限が必要な作業を一般ユーザー権限のアカウントで実行する方法は幾つかありますが、
今回はタスクスケジューラを使った方法で行いたいと思います。
コマンドプロンプトを起動して以下のコマンドを実行します。青字部分は環境に合わせてください。
 
★デフラグ用タスク

schtasks /create /ru example.local\administrator /rp p@ssw0rd /tn ManualDefrag_%username% /tr "defrag.exe %systemdrive% /h /o" /sc once /st 00:00 /f

★クリーンアップ用タスク

schtasks /create /ru example.local\administrator /rp p@ssw0rd /tn ManualDiskClean_%username% /tr "dism.exe /online /cleanup-image /startcomponentcleanup /resetbase" /sc once /st 00:00 /f

 
コマンド内の各オプション説明は今回は割愛させていただきますが、
ポイントは /tnオプション で指定するタスク名に %username% を付与している点です。

これは自作タスクは他者アカウントでは実行できないため、
ログオンしたユーザーごとにタスク登録ができるようにタスク名を区別しているのです。
PC故障などで予備機と交換したりすると利用者がコロコロ変わる可能性があるため、その対策となります。
組織の管理者は上記コマンドをバッチ化させてADのログオンスクリプトに仕込むのが良いでしょう。
 
以下はコマンド実行直後のタスクスケジューラの画面です。
f:id:cool-f:20200211221224p:plain
タスク作成直後のタスクスケジューラ

※ ワークグループ環境の方は自分自身が管理者権限をお持ちだと思うので、
※ 上記コマンドのそれぞれ /tr 以降のダブルクォーテーションで囲まれた部分だけをバッチ化すると良いです。

 

タスク実行用のVBS作成

登録したタスクを一般ユーザー権限のアカウントで実行するためのVBSを作成します。
バッチでも良いのですがユーザー向けにメッセージを表示させたい時はVBSが適切です。
メモ帳を起動したら以下の内容を張り付けて.vbs形式で任意の場所に保存しましょう。

 

Option Explicit
Dim Ans
Dim objShell
Ans = MsgBox("PC maintenance Start",vbYesNo + vbExclamation,"Info")
if Ans = vbNo Then
  Call MsgBox("PC maintenance Cancel",,"info")
else
  Set objShell = CreateObject("WScript.Shell")
  objShell.Run "C:\Windows\System32\schtasks.exe /run /tn ManualDefrag_%username%",0
  objShell.Run "C:\Windows\System32\schtasks.exe /run /tn ManualDiskClean_%username%",0
end if

 

1の手順同様、組織の管理者はADのファイル配布機能を使ってユーザーのデスクトップに設置すると良いでしょう。
完了までPCの動作が少し重くなるため「休憩前に実行してください」などのメッセージを組み込むと、
よりユーザーライクになると思います。

 

実行結果

vbsを実行するとそれぞれのDOSプロンプト(黒い画面)が表示され進捗状況を確認することができます。
両方のDOSプロンプトが消えたらクリーンアップ完了と思ってください。

 

以下はvbs実行後の結果確認です。
デフラグは「最後の実行」が更新されており、
クリーンアップは6.51GBもあったWindowsUpdateが消えているのがわかります。
f:id:cool-f:20200211221803p:plain
vbs実行後のデフラグ

f:id:cool-f:20200211222812p:plain
vbs実行後のクリーンアップ

 

最後に

今回の記事内容はいわゆる「その場しのぎ」です。
最善策は適正な性能のパソコンを購入することであることをお忘れなく。

もし採用される方は月1回の頻度で実行していただくのが良いと思います。
あまり時間を空けすぎるとクリーンアップ処理の所要時間が増えるのでご注意ください。