一度あることは2度あるからしっかりとPCと奮闘メモ日記

日々の実話に基づいて検索してもズバリがなかったものを綴っていきます。

GoogleAnalyticsページごとのエンゲージメント時間をBigQueryで集計する (滞在時間)

GoogleAnalyticsのエンゲージメント時間をBigQueryで集計する (滞在時間)

ネットで調べたら、少し違うものが上位にでてきてなかなか回答にたどりつかなかったので、こちらで記載します。

 

滞在時間を求めてください。

最初このように依頼がきました。

普通の感覚で滞在時間をとらえてしまうと、GA4の概念とは離れてしまいます。

普通の感覚の滞在時間はUAに近いようでGA4では別の概念になります。

具体的には

エンゲージメントという考えが必要です。

以下のサイトがわかりやすかったです。

小川卓さんのGA4(Google Analytics 4)連載 第11回 基本的な指標「滞在時間」「コンバージョン」を理解する | パソコン工房 NEXMAG

 

エンゲージメント時間を求める

以下のサイトを参考にSQLを作成しました。(二つとも海外のサイト)

https://www.vakulski-group.com/blog/post/complete-guide-to-user-engagement-in-google-analytics-4/

sql - How to calculate the "average engagement time" of GA4 using Big Query? - Stack Overflow

 

ページごとのエンゲージメント時間を集計するSQLです。

ポイント

時間はengagement_time_msecを集計

session_engaged = '1' エンゲージメントのあるものを集計

WITH base_data AS (
    SELECT
        event_date,
        (SELECT value.string_value FROM UNNEST(event_params) WHERE KEY = 'page_location') AS page_location,
        user_pseudo_id,
        (SELECT value.int_value FROM UNNEST(event_params) WHERE KEY = 'ga_session_id') AS session_id,
        (SELECT value.string_value FROM UNNEST(event_params) WHERE KEY = 'session_engaged') AS session_engaged,
        (SELECT value.int_value FROM UNNEST(event_params) WHERE KEY = 'engagement_time_msec')/1000 AS engagement_time_seconds
        
    FROM
        `プロジェクト46302.analytics_377777777.events_*`
    WHERE
        _TABLE_SUFFIX BETWEEN '20230904' AND '20230904'
),

-- ステップ2: 各セッションにおけるページごとのエンゲージメント時間を計算
session_engagement AS (
    SELECT
        event_date,
        user_pseudo_id,
        session_id,
        page_location,
        SUM(engagement_time_seconds) AS session_engagement_time
    FROM
        base_data
    WHERE
        session_engaged = '1'
    GROUP BY
        event_date, user_pseudo_id, session_id, page_location
)

select 
event_date,
page_location,
sum(session_engagement_time)

 from session_engagement
 group by event_date,page_location
~

以上です。
数値は探索レポートで確認しました。
ピタッと一緒ではないけれど、ほぼ同じでした。

Firebase の BigQuery Export サンプルデータセットを追加する

Firebase の BigQuery Export

Firebase の BigQuery Export - Firebase ヘルプ

 

上の記事によると、このようにあります。

あらかじめ Firebase のデータを BigQuery にエクスポートしたサンプル データセットがこちらに用意されています。

https://bigquery.cloud.google.com/dataset/firebase-public-project:analytics

で、リンクをクリックしても、

「あれ、いつもの自分のBigQuery」Firebaseなんてないよ

 

その理由は

「firebase-public-project」プロジェクトを追加していないからでです。

追加したら画像のようにfirebase-public-projectが表示されます。

その方法を説明します。

firebase-public-project

firebase-public-project

firebase-public-projecの追加方法

1 追加を押す(エクスプローラーの横にあります。

追加を押す

追加を押す

2 名前を指定してプロジェクトにスターをつけるを押す

名前を指定してプロジェクトにスターをつけるを押す

名前を指定してプロジェクトにスターをつけるを押す

3 プロジェクト名を入力し、「スターを付ける」を押す

プロジェクト名を入力する

プロジェクト名を入力する

4 firebase-public-projectが表示されているはずです。

firebase-public-projectデータセット横のスターについては

こちらの記事も参考にしてください。

BigQueryを他のプロジェクトにすべて表示する - 一度あることは2度あるからしっかりとPCと奮闘メモ日記

 

以上です。

BigQueryを他のプロジェクトにすべて表示する

他のプロジェクトのビッククエリをごそっと丸ごと表示させたい。

★イメージ画像

他のプロジェクトのビッククエリを表示したい

ビッククエリ

ネットで検索しても、ビッククエリのタブにある「共有」

を使う方法のみ。

これだと、データセットごとにひとつひとつ全部共有しなくてはいけない。

 

そこで、試行錯誤した結果とても簡単でした。

なんと、共有したいビッククエリにある☆を★にするだけ。

もちろん権限は必要です。

とても便利です。

☆を★に

☆を★に

 

 

GCP ロードバランサ エラー

VMインスタンスインスタンスグループに対して

ロードバランシサを設定したときのエラー

 

Error: Server Error

The server encountered a temporary error and could not complete your request.

 

原因:インスタンスグループのポートが間違っていた。

誤り:79

正:80

なぜこのようになってしまったのか不明です。

ロードバランサの設定テストをしていた時のはなし

解決への道:

外部 HTTP(S) ロード バランシングのトラブルシューティング  |  負荷分散  |  Google Cloud

 

 

 

サービスアカウント BigQueryのデータセットだけに権限を付与する

BigQuery

特定のデータセットのみにサービスアカウントでアクセスしたい場合。

公式サイトの説明は少しわかりづらかったのでここでメモします。

データセットへのアクセスの制御  |  BigQuery  |  Google Cloud

 

結論

①データセットの共有→権限で付与

②サービスアカウントにBigQueryジョブユーザー権限を付与

この②が公式ドキュメントでは見落としがち。

 

まず、

データセット情報→共有→権限

サービスアカウントに権限を追加します。

データセットへのアクセスの制御  |  BigQuery  |  Google Cloud

データセットから共有を押す

データセットから共有

 プリンシパルを追加ボタンをおします。

あとは通常のIAMと同じです。

必要な権限をつけてください。

プリンシパルを追加

プリンシパルを追加
これでOKとおもいきや、あれ、以下のエラーがでている

User does not have bigquery.jobs.create permission in project   

一応管理者にしたので、bigquery.jobs.create はOKなはずなんだけど。

 

いきづまったのでもう一度公式サイトのドキュメントを見てみます。 

つまり、データセットで権限を付与するだけでは不十分で、

サービスアカウントにBigQueryジョブユーザー権限がないとだめとのことです。

注:じゃなくて、もっとめだつように書いてほしかった。

注: ユーザーがデータセット内のテーブルをクエリできるようにするには、データセットへのアクセス権があるだけでは不十分です。ユーザーには、プロジェクト内でクエリジョブを実行する権限も必要です。プロジェクトからクエリを実行する権限をユーザーに付与する場合は、プロジェクトの bigquery.jobs.create 権限をユーザーに付与します。これを行うには、ユーザーにプロジェクトの roles/bigquery.jobUser ロールを割り当てます。

 

サービスアカウントにBigQueryジョブユーザーを割り当てる

こちらはIAM画面で割り当てることができます。

 

以上です。

これで、                                                                                                                                  User does not have bigquery.jobs.create permission in project 

消えました。

めでたしめでたし。            

GAIQ試験問題集 その1

GAIQ日本語でテスト受けることができるようになりましたー。

 

少しずつ勉強します。メモします。

回答は自分で考えたものをメモしているだけなので、正解ではありません。

間違っているかもしれません。

その場合はぜひ教えてください。

 

Q:Google アナリティクス 4 プロパティをユニバーサル アナリティクス プロパティと区別するものはどのようなことですか。


1 Google アナリティクス 4 プロパティではデータの収集とレポートの基盤に「イベント」を使うが、ユニバーサル アナリティクスではデータの収集とレポートの基盤に「ディメンション」を使う。

2 Google アナリティクス 4 プロパティはデータの収集とレポートの基盤に「ディメンション」を使うが、ユニバーサル アナリティクスではデータの収集とレポートの基盤に「イベント」を使う。

3 Google アナリティクス 4 プロパティではデータの収集とレポートの基盤に「イベント」を使うが、ユニバーサル アナリティクスではデータの収集とレポートの基盤に「セッション」を使う。

4 Google アナリティクス 4 プロパティはデータの収集とレポートの基盤に「セッション」を使うが、ユニバーサル アナリティクスではデータの収集とレポートの基盤に「イベント」を使う。

回答:3

 


Q:あなたは、顧客のエンゲージメントについての詳細なインサイトを確認できる、標準的なレポートのレベルを超える高度な手法を見つけたいと思っています。

Google アナリティクスのプロパティのセクションのうち、その情報があるのはどこですか。


設定

探す

広告

レポート

 

A:レポートのことかなー???グラフっぽいマークのことだよね。?

インサイト

インサイト

 

 

Q:あなたはハードウェア店の経営者で、自社が販売するツールの正しい使い方を顧客が学べる新しいハウツー動画を、自社のウェブサイトに投稿します。Google アナリティクスには、この動画へのユーザーの反応に関するデータが多数入っています。

Google アナリティクスによって収集されたと思われる「ユーザー プロパティ」は、次のうちどれですか。


1 サイトで動画を含むページを開いたユーザーの人数

2 サイトで動画を見ているユーザーの言語設定

3 サイトで動画を見たユーザーの人数

4 サイトでユーザーが見られる動画の名前

 

回答:2 サイトで動画を見ているユーザーの言語設定は、Googleアナリティクスによって収集された可能性があります

しかし、1、3、4は、Googleアナリティクスによって収集されたユーザープロパティではありません。Googleアナリティクスが収集するユーザープロパティには、デバイス、ブラウザ、地理的位置、言語などが含まれます。

 

Q あなたは小さな会社を経営していて、会社にはウェブサイトの他に、iOS 用アプリと Android 用アプリがあります。これら 3 つを総合的に見てイベントとユーザーを分析することが目的の場合、アカウントをどのように設定すべきですか。 

1 ウェブサイト用のウェブデータ ストリームを含む 1 つのプロパティと、アプリ用のアプリデータ ストリームを含む 1 つのプロパティ

2 ウェブサイト用のウェブデータ ストリーム 1 つとアプリ用のアプリデータ ストリーム 1 つを含む 1 つのプロパティ

3 ウェブサイト用のウェブデータ ストリーム 1 つを含む 1 つのプロパティと、2 つのアプリデータ ストリーム(iOS 用 1 つと Android 用 1 つ)を含む 1 つのプロパティ

4 ウェブサイト用のウェブデータ ストリーム 1 つと アプリデータ ストリーム 2 つ(iOS 用 1 つと Android 用 1 つ)を含む 1 つのプロパティ

 

A:4 WEB,IOSアプリ、Androidアプリ、すべてひとつのプロパティでよいと思うのですが。

 

Q オーディエンス トリガーを使用すると何ができるようになりますか。

 
1 予測指標に基づいて新しいイベントを作成する

2 トリガーされている特定のイベントに基づいて新しいイベントを作成する

3 既存のイベントのパラメータに基づいて新しいイベントを作成する

4 達成されているオーディエンスのルールに基づいて新しいイベントを作成する

 

回答 4 達成されているオーディエンスのルールに基づいて新しいイベントを作成することができます。

オーディエンストリガーを使用すると、特定のオーディエンスがサイト上で特定の行動を実行した場合に、そのオーディエンスに関する新しいイベントをトリガーできます。たとえば、特定のページを訪問したユーザーに対してメールキャンペーンを開始することができます。オーディエンストリガーは、Googleタグマネージャーで設定できます。

 

Q あなたは、Google アナリティクス プロパティの [探索] セクションを表示しています。指標とディメンションを表形式にカスタマイズするには、次の探索手法のうちどれを使用すべきですか。

1 目標到達プロセスデータ探索

2 自由形

3 コホートデータ探索

4 セグメントの重複

 

A:2かなー。

 

Q あなたは、数人の寄稿者を擁するブログを管理する編集者です。

各記事のページに投稿者の名前を報告するには、どれを使えばよいですか。

1カスタム表

2 カスタム ディメンション

3 カスタム ユーザー パラメータ

 

A 2 カスタムディメンションかな。というかほかの二つ何?

 

Q あなたがビジネス オーナーで、ユーザーがどのようにして自社のウェブサイトとアプリに到達しているかや両プラットフォームでのユーザーの行動を知りたい場合、何を使用すればインサイトを生成できますか。

 

Google マーケティング プラットフォーム

2 ユニバーサル アナリティクス プロパティ

3 Google アナリティクス 4 プロパティ

4 Google オプティマイズ

 

A:3 Google アナリティクス 4 プロパティ

 

Q あなたは、新規ユーザーが自社のホームページを見た後にどのページを最も頻繁に開いているかを知りたいと思っています。そのため、新しい経路データ探索機能を [探索] 内に作成し、そのデータを同僚と共有します。

この新しい経路データ探索のデータを見られるのは、デフォルトでは誰になりますか。

1 データを見られるのは自分だけだが、プロパティの他のユーザーと編集可能な状態で共有することは可能。

2 データを見られるのは自分だけだが、プロパティの他のユーザーと読み取り専用モードで共有することは可能。

3 プロパティ内の誰でも、アクセスして編集することが可能。

4 プロパティ内の誰でも、読み取り専用モードでアクセス可能。

 

A: 2番 デフォルトでは誰ですかとあるので実際にためしてみた。↓

 

Q 次の探索手法のうちどれを使えば、ユーザーが重要なタスクやコンバージョンに至るまでのステップを可視化して、各ステップでどの程度タスクやコンバージョンに成功しているか、または失敗しているかを確認できますか。

1 目標到達プロセスデータ探索

2 自由形

3 セグメントの重複

4 コホートデータ探索

 

A:1 目標到達プロセスデータ探索

 

Q あるウェブサイトの管理者であるあなたは、一部のイベント(ユーザーがニュースレターに登録したとか商品を購入したとか)を非常に有益だと考えています。

そのようなイベントを重要であると指定して価値を割り当てたい場合、Google アナリティクス 4 プロパティではそのイベントにどのようにラベル付けするべきでしょうか。

1 スタム イベント

2 目標

3 コンバージョン イベント

4 推奨イベント

A 3 コンバージョンイベント

「コンバージョンイベント」は、ユーザーが特定のアクションを完了したことを示すものです。例えば、ニュースレターに登録したり、商品を購入したりするなど、管理者が有益だと考えているイベントを特定することができます。このようなイベントを「コンバージョンイベント」として設定することで、重要なイベントに対して価値を割り当てることができます。

 

Q:自社のウェブサイトへユーザーを呼んでいるオーガニック検索クエリのインサイトを獲得するために、アナリティクスを結びつけるとよいプラットフォームはどれですか

1 Google 広告

2 Google オプティマイズ

3 検索広告 360

4 サーチコンソール

 

回答4 

サーチコンソールは、Googleが提供する無料のツールで、ウェブサイトの検索エンジン上での表示状況や検索クエリの情報を提供します。ウェブサイトの統計情報を収集し、SEO改善に役立てることができます。オーガニック検索クエリのインサイトを獲得するためには、サーチコンソールを結びつけることが適しています。

 


Q:あなたは、過去 30 日間にユーザーがアクセスに使用したデバイスのタイプ(パソコンやスマートフォンなど)を示すレポートを作成します。

このレポートでは、デバイスのタイプは何ですか。


1 ユーザー

2 指標

3 イベント

4 ディメンション

 

回答 4 ディメンション
ディメンションは、Googleアナリティクスにおいて、集計されるデータを説明する属性のことであり、レポートの中でデータを分類するために使用されます。デバイスのタイプは、ディメンションの一つであり、過去30日間にユーザーがアクセスに使用したデバイスのタイプを示すレポートを作成する場合には、デバイスタイプをディメンションとして選択する必要があります。

 


Q:あなたは、自社のウェブサイトとアプリから Google アナリティクスへ送信するデータの補完になりそうな POS システムのデータを収集しています。

次のどの機能を使用すれば、イベントを収集して Google アナリティクス サーバーへ直接送信できますか。


1 イベントを変更する

2 HTTP リクエス

3 データ インポート

4 測定プロトコル

 

回答:

4 測定プロトコル
Google Analyticsは、測定プロトコル(Measurement Protocol)を提供しており、これを使用することで、Google Analyticsにデータを直接送信することができます。測定プロトコルを使用することで、POSシステムのデータをGoogle Analyticsに統合し、ウェブサイトやアプリのデータと組み合わせて、ビジネスの洞察を得ることができます。

 

 

Q:自社のウェブサイトに Google アナリティクスを活用している場合に [エンゲージメント] の概要レポートが便利なのは、次のどのシナリオですか。


1 自社のサイトでのユーザーのアクションをそのままモニタリングしたいとき。

2 ユーザーがどこから自社のウェブサイトにたどり着いているかを見たいとき。

3 オンラインでの閲覧および購入のアクティビティを通じてユーザーが表している興味の対象に関するインサイトが欲しいとき。

4 自社のサイトのどのページが最も多くのトラフィックを獲得しているかを見たいとき。

 

回答:3オンラインでの閲覧および購入のアクティビティを通じてユーザーが表している興味の対象に関するインサイトが欲しいとき。


エンゲージメントの概要レポートは、ウェブサイトのユーザーがどのように相互作用しているか、どのような行動をとっているかを把握するためのレポートで、ユーザーがページを訪問したり、コンテンツを読んだり、動画を視聴したり、フォームを送信したり、他のアクションを起こしたりした回数を確認できます。このレポートを使用することで、ユーザーが表している興味の対象に関するインサイトを得ることができます。

 

Q:モバイルアプリからデータを収集して Google アナリティクス 4 プロパティに送信するためには、次のツールのうちどれを使用すればよいですか。

1 Firebase SDK

2 Google 広告

3 Google マーケティング プラットフォーム

4 ウェブサイト タグ

 

回答:1 Firebase SDK

 

Q あなたは自社のウェブサイトとモバイルアプリ用に Google アナリティクス 4 プロパティを作成しました。ユーザーがウェブサイトとアプリにエンゲージすると、Google アナリティクスではどのように個別のユーザーの操作を測定して報告しますか。


 1 視聴として

2 ヒットとして

3 セッションとして

4 イベントとして

回答:4 イベントとして

 

 

Q:あなたは、Google アナリティクスのデータを BigQuery にエクスポートしてクエリを実行し、オフライン データの一部をアナリティクスのデータと結合したいと思っています。

BigQuery にエクスポート可能なアナリティクスのプロパティのタイプは次のうちどれですか。


1 ユニバーサル アナリティクスを使用する標準プロパティまたはアナリティクス 360 プロパティ

2 GA4 を使用する標準プロパティまたはアナリティクス 360 プロパティ

3 GA4 またはユニバーサル アナリティクスの標準プロパティのみ

4 GA4 またはユニバーサル アナリティクスのアナリティクス 360 プロパティのみ

回答:2 GA4 を使用する標準プロパティまたはアナリティクス 360 プロパティ

 


Q:「コンバージョン経路」では、コンバージョン経路において各種の広告がどのように作用し合うかを見ることができます。「コンバージョン経路」のレポートは、Google アナリティクス 4 プロパティのどこで見られるでしょうか。


1 探す

2 広告

3 レポート

4 設定

 

回答: 3「コンバージョン経路」のレポートは、Google アナリティクス 4 プロパティの「レポート」セクションで見ることができます。

あれー

広告の箇所にコンバージョン経路あるよー

 

 


Q:あなたは、自社のウェブサイトが Google アナリティクス プロパティにデータをフィードするようなウェブデータ ストリームを設定中です。ウェブデータ ストリームの設定中、拡張計測機能の設定を有効のままにしておくと、どのようなことが起こりますか。


1 モバイルアプリのイベントを、既存のウェブサイトのデータと結合できる

2 自分でウェブサイトのコードを変更しなくても、ウェブサイトから追加のイベントが収集される

3 ウェブデータ ストリームのコンバージョン レポートが機械学習を利用してクレジットを各チャネルに配分する

4 ログインしているユーザーにイベントを関連付けて、クロスデバイス レポートを有効にできる

 

回答:2

 


Q:Google アナリティクス アカウントからあるプロパティを削除した場合、そのプロパティが完全に削除されるまでに何日間の猶予がありますか。


1 14

2 35

3 60

4 7

 

回答 2 35日

Google アナリティクス アカウントからプロパティを削除した場合、そのプロパティが完全に削除されるまでに35日間の猶予があります。この35日間は、削除されたプロパティに関連するデータを復元するために必要な期間です。

 

GA4データインポートでSFTPを選択したときのエラー

GA4データインポートでSFTPを選択

設定するも

内部エラーが発生しました。
しばらくしてからもう一度お試しください

複数のエラーがすべて↑で片付けられて、なかなか正解にいたらなかったので、

メモします。

 

①まず、入力形式が正しいか確認してください。

以下の記事に入力形式をまとめました。

グーグルアナリティクス データインポートでSFTPを選択 - 一度あることは2度あるからしっかりとPCと奮闘メモ日記

 

②サーバーのSSH設定を確認

どうやら、Googleは古い鍵で接続しているらしく、

openssh8を使ったサーバーの場合、グーグルは接続できないようです。

その場合、sshの設定を変更し、古い鍵でも接続できるように、する必要があります。

 

opensshのバージョン確認

ssh -V

で確認できます。

OpenSSH_8.9などと表示されていたら、以下の設定が必要になるので、読み進めてください。

ssh -V

ssh -V

 

 

/etc/ssh/sshd_configに追記する

HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

(注意)

ssh_configではありません。sshd_configです。

必ずsshd_configのバックアップをとってください。

バックアップしたファイルの末尾はconfigにしないでください。

読み込まれてしまいます。

良い:sshd_config_20221111

悪い:sshd_back_config

 

文法チェックをする

sshd -t

何もでてこなければOKです。

 

sshdの再起動する

OSによりコマンドは異なるようですので、ここでは説明を省略します。

 

以上

 

参考URL

OpenSSHがSHA-1を使用したRSA署名を廃止、BacklogのGitで発生した問題と解決にいたるまでの道のり | 株式会社ヌーラボ(Nulab inc.)

 

 

グーグルアナリティクス データインポートでSFTPを選択

グーグルアナリティクス データインポートでSFTPを選択

公式サイトの説明が詳しくないので補足

[GA4] データ インポートについて - アナリティクス ヘルプ

 

SFTPサーバーのURL

は以下の形式になります。

sftp://IPアドレス:ポート番号/csvファイルまでのパス

例①

ユーザー名:sftptest

IPアドレス:192.158.789.78

ポート番号:22

CSVファイルが /home/sftptest/ga4/sample.csv にある

sftp://192.158.789.78:22/ga4/sample.csv

例②

ユーザー名:sftptest2

サーバー名:test4561.jirosieni.ne.jp

ポート番号:34595857

CSVファイルが /home/sftptest2/ga4/sample2.csv にある

sftp://test4561.jirosieni.ne.jp:34595857/ga4.sample2.csv

SFTPでインポート

SFTPでインポート

 

 

 

Cloud Functionsの開発環境Function Frameworkの使い方について(初心者用)

Cloud Functionsの開発環境Function Frameworkの使い方について

 

インストールまではググるとでてくるのですが、実際の動かし方がよくわからなくて、

戸惑ったのでメモします。

 

自分は以下の環境です。(ほぼ初心者)

OS Windows11

Python 3.10

Visual Studio Code

CloudFunctionsは第2世代

GoogleCloud SDKは使える

 

 

■FunctionFrameworkのインストール

pip install functions-fraemwork

参考:

Function Frameworks を使用した関数の実行  |  Google Cloud Functions に関するドキュメント

 

■IAMの認証情報作成

これがあると、Cloud Storageのテストもできます。

下のコマンドを実行すると、ブラウザが立ち上がってログインを求められました。

CloudFunctionsを利用するIDでログインすれば認証情報が作成されます。

gcloud auth application-default login

参考:

gcloud auth application-default login  |  Google Cloud CLI Documentation

Cloud Functions の関数をローカルで検証できる Functions Framework のインストール方法 - G-gen Tech Blog

 

---------------ここまで

ここまではスムーズにいったのですが・・・

自分のローカルにある、Visual Studio Codeの記述をどうやってクラウドファンクションとしてテスト実行するのかわからなかったので自分の方法をメモします。

 

もう一度環境のおさらい

Visual Studio Code

Windows11

Python10

CloudFunctionsは第2世代

GoogleCloud SDKは使える

 

■注意事項

コンソールのパスに注意する。

常に、pythonファイルのあるフォルダがカレントディレクトリであることを確認して、コマンドを打ってください。

 

■HTTPトリガーの場合

ローカル環境に

main.py

requirements.txtを準備します。

以下例です。

main.py

import functions_framework
@functions_framework.http
def hello_http(request):
"""HTTP Cloud Function.
Args:
request (flask.Request): The request object.
Returns:
The response text, or any set of values that can be turned into a
Response object using `make_response`
"""
request_json = request.get_json(silent=True)
request_args = request.args
if request_json and 'name' in request_json:
name = request_json['name']
elif request_args and 'name' in request_args:
name = request_args['name']
else:
name = 'World'
return 'Hello {}!'.format(name)

 

requirements.txt

functions-framework==3.*

 

■①コマンド入力
functions-framework --target hello_http --debug

hello_httpの部分は関数名で置き換えてください。

VisualStudioCodeでコマンド入力

VisualStudioCodeでコマンド入力

■②ブラウザを立ち上げアドレス入力

CloudFunctionsで利用しているグーグルアカウントでログインしているブラウザを立ち上げ

http://127.0.0.1:8080と入力してください。

Hello World!

と表示されれば成功です。

成功したー

成功したー

クラウドストレージのトリガーの場合

クラウドファンクション上できちんと動くソースを準備してください。

以下ローカルの開発環境でデバックするときの注意点です。

■①コマンド入力
functions-framework --target hello_gcs --debug

hello_gcsの部分は関数名で置き換えてください。

 

■②GoogleCloudSDKShellで以下のコマンド入力

参考:ローカル関数の呼び出し  |  Google Cloud Functions に関するドキュメント

 

上をそのままコピペしても動きません

bucketは自分のバケットにします。

nameはファイル名にします。フォルダ以下にある場合は folder/Test.txtのように指定します。

Windowsno場合、\を^に変更する必要があります。

まだJSON部分の改行も削除する必要があります。

環境によりそのままコピペできないようです。

参考:長いコマンドを複数行に分割して実行する方法(Windows) | SyachikuLOG

 

最後は駆け足で書いてしまいましたが、順次追記する予定。

GCP Cloud Source Repositories Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.

 

GCP Cloud Source Repositories

ローカルGitリポジトリからコードをpush したところ

git push --all google

で以下のエラーが

Permission denied (publickey). fatal: Could not read from remote repository.  Please make sure you have the correct access rights and the repository exists.

自分の環境は

Windows11

解決策は

手動で生成した認証情報

にしたらOKでした。

 

 

下の画面がわからないひとは↓を参考に

https://source.developers.google.com/new-password

また

自分はこちらのページも参考にしました。

GCP Cloud Source Repositoriesを利用する手順のメモ - Qiita

 

まず

①ローカルgitリポジトリからコードをpushを選びます

そして、

「手動で生成した認証情報」をクリックします。

手動で生成した認証情報を選択

手動で生成した認証情報を選択

「Git認証情報を生成して保存します」をクリック

Git認証情報を生成して保存を選択

Git認証情報を生成して保存を選択

アカウントの選択の画面が表示されるので

GCP Cloud Source Repositories を使うアカウントを選択します。

 

アカウントを選択してください

アカウントを選択してください

 

許可を押します

許可します

許可します

スクリプトが書かれた画面が表示されます。

Windowsの場合上のスクリプトが必要なので

コピペします。

ポイント

コピペしたスクリプト

一つに見えて実は2つあります。

そのまま実行しても×です。

別々に実行する必要があります。

ちなみにevalから始まるスクリプト(下段のスクリプト)は使いません

Widowsの場合上のスクリプトを実行

Windowsの場合上のスクリプトを実行

 

Google Cloud SDK shellで実行します。

①まず赤枠の上段を実行

git config --global http.cookiefile "%USERPROFILE%\.gitcookies"

 

②次に赤枠の下段を実行

(↓は自分の例なのでそのままコピペしないでください)

powershell -noprofile -nologo -command Write-Output "source.developers.google.com`tFALSE`t/`tTRUE`t2147483647`to`tgit-werserxrto55.tokyo=1//0gJ2mUAAVA_UbCgYIARAAGBASNwF-L9IreqDPMDSiYNPrrrrrrrNGCuwGw34JA0lDN0-cJmWA_M" >>"%USERPROFILE%\.gitcookies"

 

 

 

先ほどの画面に戻り

Cloud Repository を remote として追加します:

リモートリポジトリの追加

リモートリポジトリの追加

ローカルGitリポジトリからGCP Cloud Source Repositoriesにpushします

pushする

pushする

 

git pushで

Permission denied (publickey). fatal: Could not read from remote repository.  Please make sure you have the correct access rights and the repository exists.

がでなくて感動!!!

 

 

メモリ増設後画面が真っ暗で起動しない

メモリ増設後画面が真っ暗で起動しない

結論:ホコリが原因

エアダスターで解決

 

最近多いのが2015年~2017年購入PCのメモリ増設

同機種のメモリを移設したり、購入したり、

8Gから16Gに増設しています。

最初は恐恐して宝石を触るかのようにメモリ交換してたのですが、

20台を超えるとなれたもの。ささっとメモリ選定して、増設です。

余裕と思ってたときの出来事。

メモリ増設後、PCのスイッチを入れても画面が真っ暗

もう20台越えのベテランですから、このくらい余裕です。

メモリがきちっとはまってないんだね。

もう一度メモリを上からぎゅっぎゅと押します。

 

・・・あれ、まだPCのスイッチを入れても真っ暗

 

少し焦ってきました。

ネットで調べます。

ネットには

・規格があってない。

・電気の問題

BIOSの問題

・スロットの故障

 

などなど、難しいことが。

一つ一つ確認するけれど、

どれも特に問題なし。

 

どうしよう、壊してしまったのかしら。

稟議書いて会社のお金でメモリ購入したのに。

と絶望して、もういちどメモリスロットをみてみます。

 

あれ、なんか小さーな黒いものがメモリスロットについてる。

ダニよりも小さな黒いものが。

もしかして、これのせい?

と思い、エアダスターでシューっとひと吹き。

ホコリが舞います。

 

見た感じホコリの気配ないけれど、エアダスターするとこんなにホコリがでるんだ

と感心するほど。

きがつくと、すごーく小さな黒いものは消えてました。

 

もしかして、このくろーい小さなものがメモリ増設後真っ暗の原因では

 

希望を胸に、もう一度メモリスロットにメモリを

しっかり差し込みます。

 

おそるおそる、PCの電源を入れたら

見事起動して、Windowsのロゴが表示されました。

 

それにしても、

ダニより小さいホコリ。PCを真っ暗にしてしまうとは恐るべし。

次からはエアダスターでホコリとりしてからメモリ増設しようと心に決めました。

 

メモリ真っ暗の原因はホコリ

メモリ真っ暗の原因はホコリ



 

 

富士通 LIFEBOOK WA3/C2 ハードディスクからSSDに交換してみた(FMVWC2A35)

富士通 LIFEBOOK WA3/C2は遅いファンがうるさい

2018年10月秋に購入した富士通Lifebook wa3/c2

メモリ増設して16G快適なはずだったのですが、

遅い、そして、ファンの音がうるさい。

最初はメモリ16Gにしたからファンの音が大きいのかしらと思って我慢してました。

そして、絶対の音うるさいよと思いながら月日はながれ

1年の保証期間ぎりぎりの2019年9月。

突如ゴゴゴとファンの音が大きくなって、修理してもらいました。

その後、ファンの音は解決。やっぱり最初からおかしかったんだ。

でも遅い・・・。というか決して快適ではない。

ディスクトップ画面を表示してタスクバーにアイコンが表示されるまで、1分はかかる。

不要なソフトをけしたり、起動ソフトを停止したり、

高速化の処理をネットでしらべたのですが、基本遅い。

 

しかも、2012年に購入した同じく富士通のノートPC

メモリは8Gだけど、SSDに交換済みのノートのほうが明らかに快適。

そんなとき、以下の記事を見つけました。

この方もあんまり早くない、ファンがうるさいと書いています。

富士通LIFE BOOK WA3/C2 のSSD換装で高速化 | 古都瀬しゅうブログ - 楽天ブログ

 

もうHDからSSDに交換するしかありませんね。

自分が失敗してもとに戻すときのメモ用にかなり詳しくメモしました。

同じ機種の人の役にたつといいな。

 

 

◆準備したもの(2021年8月末)

①交換用のSSD 1000GB 2.5インチ SATA 9980円

Crucial SSD 1000GB MX500 内蔵2.5インチ 7mm MX500 (9.5mmスペーサー付属) 5年保証 【PlayStation4 動作確認済】 正規代理店保証品 CT1000MX500SSD1/JP - Amazon.co.jp

② 交換用のSSDとノートPCをつなぐケーブル(ノートPCのクローン作製時に使用)

1000円

https://www.amazon.co.jp/gp/product/B01EAEPE6Q/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1

 

③ノートPCのクローンをSSDに作成するためのソフト 無料

(Crucial SSD のホームページに解説がありました。)

https://www.crucial.jp/support/ssd/ssd-install/ssd-install-steps/part-1-prepare

 

④普通のドライバーセット

 

 

 

①ノートPCとSSDをつなげる

まずケーブルの差し込み口を確認。

あまり見たことのない差し込み口です。

左が1000円で購入したケーブル

右が9990円で購入したSSDです。


f:id:orangekiiro:20210825081722j:image

 ②SSDが認識されているか確認する

確認はディスクの管理で行います。

さらに初期化が必要な場合があります。

まず、スマホを接続したときみたいにPCにでてくるか確認します。

何もでてこない、不安になります。

f:id:orangekiiro:20210825082845p:plain

認識されているか確認

ディスクの管理で確認します。ディスクの管理の表示方法は↓のページがわかりやすいです。

ディスクの管理 パソコン初心者講座

↑に従ってディスクの管理を表示したら、いきなり、

「ディスクの初期化」がでてきてびっくりします。

こわかったので「キャンセル」を押して、さらに確認すると、

「不明初期化が必要です」と書いてある。

やはり初期化が必要なようです。

なので、もういちどディスクの管理を表示し、「ディスクの初期化」画面を表示させ、初期化しました。

ディスクの初期化画面

ディスクの初期化画面

よく確認すると「不明 初期化されていません」とある、やはり初期化が必要です。

初期化されていません

初期化されていません

初期化したら、次はシンプルボリュームの割り当てをしました。

未り割当てと書いてあるところを右クリックしたらでてきます。

ここで、DとかEとか空いているアルファベットを割り当てます。

 

シンプルボリュームの割り当て

シンプルボリュームの割り当て

このシンプルボリュームの割り当てをしたあと、もう一度認識されているか見てみたのですが、スマホを接続したときみたいにドライブ名がでてこない。

不安だけど、先に進みます。

 

③ノートPCのクローンをSSDに作成する

 SSDをの会社から無料でダウンロードできます。

Acronis True Image for Crucial というソフトです。

インストールするのに時間がかかりました。

Acronis True Image for Crucial

ソフトがインストールされたらいよいよノートPCのクローンをSSDに作成します。

ソフトもIDパスワードもすべてそのまま引き継がれるので安心です。

万一失敗した場合に備えて大切なデータはグーグルドライブに避難させました。

・ソフトを立ち上げてディスクのクローン作成選択します。

ディスクのクローン作製を選択

ディスクのクローン作成を選択

モードは自動を選択

公式サイトの説明には初めての場合は自動を選択してくださいとあるので自動を選択します。

パート2:コピー

自動を選択

自動を選択

転送先ドライブを選択します。先ほど初期化して作成したボリュームが自動で選択されていました。

転送先ドライブの選択

転送先ドライブの選択

ここからは時間がかかります。自分は寝て起きたらディスクのクローンが正常に作成されていました。

これでいよいよSSDをハードディスクに取り付けます。

できたようです

できたようです

 ④ LIFEBOOK WA3/C2 裏を開けてみる

いよいよです。

どうやら、 LIFEBOOK WA3/C2 は一か所ねじをあけるだけでよいです。ラッキー

見ずらいですが黄色い付箋のはってある横がねじですねじは1か所です。


f:id:orangekiiro:20210825112224j:image

ねじを1か所外す

裏を開けてみます。ねじは1つだけ

 

 

⑤バッテリを外す 

ふたをあけたら、次はバッテリを外します。よくみるとバッテリロックの解除ボタンがあります。

解除してくぼみに手を入れて引っ張るとスポッとバッテリが外れました。


f:id:orangekiiro:20210825091403j:image

 

バッテリをとったところ。右側がバッテリのあったところです。


f:id:orangekiiro:20210825091446j:image

 

 

 

 ⑥ハードディスクを取り外す

ついにハードディスクを取り外します。

右端にねじが2つあるのでねじを取り外します。

 

ねじ2か所外してハードディスクを取り出す

ねじ2か所外してハードディスクを取り出します。



 

ねじ2か所を外して引っ張ってみました。

どうやらハードディスクはケーブルでつながっているようです。

 

ハードディスクはケーブルでつながっているので抜く

 

 

ケーブルを抜いたら金色のギザギザがでてきました。


f:id:orangekiiro:20210825091816j:image

 

 

SSDを取り付ける

ハードディスクの周りに枠があるのでその枠を外し、かわりにSSDをとりつければよいです。

見ればすぐにイメージがわきました。なんか安心です。

左が新規購入したSSD

右が取り外したハードディスクです。


f:id:orangekiiro:20210825092020j:image

ハードディスクの枠がねじでとまっているのでねじを外し(4か所)

枠も外します。


f:id:orangekiiro:20210825092240j:image 

外した枠にそのままSSDを入れ替えます。

ネジのいちもおなじなのですぐにわかりました。


f:id:orangekiiro:20210825092518j:image

 

ここからはいままでと逆の手順です。

付け替えたSSDにケーブルをつなぎます。


f:id:orangekiiro:20210825092640j:image

 

もとに戻してねじ2か所ももとに戻します。

 


f:id:orangekiiro:20210825092832j:image

バッテリももとに戻して、ロックをかけます。


f:id:orangekiiro:20210825093030j:image

 

蓋をしてネジ一箇所はめます。

 


f:id:orangekiiro:20210825093251j:image

 

 ついに完成。

 

感想

・早いです。今まで起動してからタスクバーのアイコンが全部そろまで時間がかかったのに秒速でタスクバーのアイコンがそろってます。

・ネットが早く感じます。

・一番時間がかかったのが、クローンの作成

・取り外し、とりつけは、おちついてねじの位置やはまっている場所を確認すれば

大丈夫です。

 

これで快適なネットライフになります。

 

さくらのレンタルサーバー (別の会員IDで利用されているため利用できません)

さくらのレンタルサーバー間でサイト変更した場合

「別の会員IDで利用されているため利用できません」

と表示されてドメインの登録ができない。

忘れがちだけどサブドメインの存在に気を付けて!!!

 

ものすごく時間がかかった(その間サイト表示されません。)

要注意です。

 

今回のケース

移行前:さくらのレンタルサーバ

移行後:さくらのレンタルサーバー(別会員ID)

ドメイン:お名前.com

 

結論:

時間がかかります。サブドメインもある場合1日かかるので要注意

サブドメインの場合は1日程度かかると書いてある↓

https://help.sakura.ad.jp/206214501/

親になる主ドメインだけ削除してもだめということです。

ドメインサブドメイン両方削除して初めて、別会員IDのさくらのレンタルサーバーで使えるようになります。

 

 

 

 

PowerQuery 改行を消す

旧システムのCSVファイルを

新システム用CSVファイル用にPowerQueryで整形したときの話。

 

改行を消すには

結論:PowerQueryのクリーン機能を使う

 

PowerQueryのクリーン機能に行きつくまでのお話。

 

 最初はPowerQueryではなく、エクセルの置換と検索で改行を削除するつもりでした。

 

①エクセル [検索と置換] ダイアログ ボックスの [置換] タブを表示して

②[検索する文字列] ボックスをクリックして、[Ctrl] キーを押しながら [J] キーを押す

③「すべて置換」ボタンを押す

ネットでよくでてくる方法定番の方法で改行コードを消せばいいしと安心してたら・・・

消えない

消えている改行もあるのですが、消えてない改行もあります。

どうやら改行コードが混在しているようです。

エクセルの検索と置換で改行を削除する

エクセルの検索と置換で改行を削除する

 

PowerQueryの「検索と置換」で改行を消してみる

エクセルシートの検索と置換では消えなかったので

PowerQueryを使って消してみます。

変換タブ→値の置換 → 詳細オプション→特殊文字を仕様した置換

特殊文字を挿入→改行

検索する値の箇所に#(lf)と自動で入力されます。

で置換後の箇所は空白にして「OK」ボタンをおします。

PowerQuery値の置換(改行の削除)

PowerQuery値の置換(改行の削除)

 

改行消えてるかなとワクワクしていたのですが、消えない

 

改行で消えないならじゃ次は

変換タブ→値の置換 → 詳細オプション→特殊文字を仕様した置換

特殊文字を挿入→復帰改行を選択してみます。

PowerQuery値の置換(復帰改行を選択)

改行が消えてない ・・・

 

エクセルのClean関数を使ってみる

PowerQueryからエクセルシートにもどり
clean関数を使ってみたところ改行が消えました。

このままClean関数で改行を消してもよいのですが、Clean関数用の作業列を作るのは時間がかかるので

 

PowerQueryにもエクセルのclean関数があるのではと探しました。

みつけました。

 

 PowerQueryのクリーン機能を使う

使い方は簡単

変換タブ→書式→クリーン

PowerQueryクリーンで

PowerQueryクリーンで改行を消す

これでめでたく消えなかった改行が消えました

今回改行や空白を消したクリーン機能は

こちら

Text.clean関数

印刷不可能な文字をすべて削除したテキスト値を返します。

とのこと。エクセルのClean関数と同じですね。

詳しい説明はこちら↓

https://docs.microsoft.com/ja-jp/powerquery-m/text-clean

 

 今回のシステム移行は改行の削除だったのですが、あえて改行を残すこともあるので

移行後のシステムは改行が必要かどうか確認してつくることが必要です。

 

 

PowerQuery整数の分を時間型に変換する (整数をtime型に変更する)

今回もあるシステムから別のシステムにデータ移行したときの話。

「予約滞在時間」のデータ型を変換する必要がありました。

※初心者が手間をかけて変換しました。他の方法があればご指摘いただきたいです。

 

移行元の「予約滞在時間」→120、90、180と数値型

移行先の「予約滞在時間」→2:00:00 1:30:00 3:00:00 time型

 

 

今回の方法 PowerQueryを使います。

①時間:移行元の滞在時間を60で割った商のカスタム列を作成

例 120÷60=2 90÷60=1あまり30 180÷60=3

②分:移行元の滞在時間を60でわったあまりのカスタム列を作成

例 120÷60=2 あまり0なので分は0

90÷60=1あまり30 あまり30なので30分

③ここで求めた数値を#time(時、分、秒)にあてはめてカスタム列を作成する

 

 では詳しくメモします。

①時間列の作成

#time(時、分、秒)の「時」の列を作成します。

「時」は60でわったときの商なので

Number.IntegerDivide関数を使いました。

 除算した結果の整数部分を返す関数です。詳しい説明は↓参照

Number.IntegerDivide - PowerQuery M | Microsoft Docs

 

具体的には

PowerQuery→列の追加→カスタム列

カスタム列の式には

Nuber.IntergerDivide([予約滞在時間],60)と入力し「OK]を押しました。

そうすると

[予約滞在時間]を60で割った商の列が新たに作成されます。

 

PowerQueryカスタム列Number.InterDivid

PowerQueryカスタム列Number.InterDivide

 

②分列の作成

#time(時、分、秒)の「分」の列を作成します。

「分」は60でわったときのあまりなので

Number.Mod関数を使いました。

 あまりを取得できる関数です。詳しい説明は↓参照

Number.Mod - PowerQuery M | Microsoft Docs

 

具体的には

PowerQuery→列の追加→カスタム列

カスタム列の式には

Nuber.Mod([予約滞在時間],60)と入力し「OK]を押しました。

そうすると

[予約滞在時間]を60で割ったあまりの列が新たに作成されます。

PowerQueryカスタム列Number.Mod

PowerQueryカスタム列Number.Mod
③時と分の列からtime型の列を作成する

time型のデータは#time(時、分、秒)で作成できるので

先ほど作成した時間の列と分の列が使えます。

具体的にはPowerQuery→列の追加→カスタム列

カスタム列の式には

#time(時間の列、分の列、0)

を入力します。↑列名は各自変更してください。秒は0にしました。

 

PowerQuery time型の列を作成する

PowerQuery time型の列を作成する

 

数値型の分からtime型の列を作成することができたとおもったのですがよく見るとデータ型がtime型でないようです。なのでtime型に変更します。

列の見出しの上で右クリックして「時間」を押せば time型に変更できます。

PowerQuery time型に変更する

PowerQuery time型に変更する

 

 

 

数値型の分からtime型の列を作成することができました。

 

time型の列を作成できた

time型の列を作成できた

 

 

とりあえず今回はこの方法でデータ変更をしたのですが

このやり方だと

time型の列を新たに作成する ←今回はここまでをブログでメモ

最初からある列を消す。

time型の新たに作成した列をリネームする

という作業が必要で面倒くさいです。

最初からある列(300分、120分の列)をそのまま変更(3:00:00,2:00:00)できる方法を知りたいです。