tec memo

メモです。

Associate Cloud Engineer の認定資格を受けて合格するまでの話。

この記事は🎄GMOペパボエンジニア Advent Calendar 2022 19日目の記事です。

昨日はharachanの「機械学習でFXの予測をしてみる」でした。

zenn.dev

この度、Associate Cloud Engineer 認定資格を取得しました!

Associate Cloud Engineer 認定資格  |  Google Cloud

ここでは技術的な事というよりは技術的な資格取得のための勉強を通して学んだことをKPTを使いつつ書いていきます。

先にKPTの結果は以下。

Keep (うまくいった事/続けること)

  • やると決めたその日に、1週間毎のマイルストーンを立てた。結果、一通りの勉強が1ヶ月早く終わった。
  • 気持ちが熱い最初の一週間で前倒しで進めたため、1週間前倒しで進めれてたので、これを早めたいとモチベーションがあがった。
  • 早く終わった結果、全体的に振り返りの時間を作ることができた。

Problem (失敗した事)

  • 振り返るとわかった気になった気になった箇所がたくさんあったので、GCPをもう少ししっかり理解しながら進められるとよかったかも。
  • 休みの日、衣食住以外の時間を全て勉強時間に充てたりして、家族との時間をかなり潰してしまったので、うまいことメリハリをつけられればよかった。

Try (次にやってみよう)

  • 何か学ぶ際は先に予定を立てる
  • 前倒しできるように(しかしゆるい日程にはしすぎない)してモチベーションをあげる

ACEを受けようと思った経緯

まず、会社で資格取得の案内があって、楽しそうだったので受けてみることにしました。 試験の内容を見て、Dockerやkubernetesなど最近だとスタンダードな環境の概要も把握できそうだったので受けてみようと思いました。

試験までにやったこと

受験日をざっくり3ヶ月後に設定しました。そこから逆算で勉強計画をNotionのデータベースを使って管理することにしました。

そして、各ページに学んだことをメモしまくりました。 また、実際にGCPを触りながら学ぶことで理解を深めました。

一通りの勉強後

一通りの勉強を終えた後は受験の申込みをしました。 こちらは、オンラインか会場での受講を選択出来ましたが、オンラインだと色々制約があったので、会場で受けることにしました。 直近の試験可能日が埋まっていたので2週間後に申し込みました。

その後は、Notionのデータベースにまとめたメモを見返しつつ、 こちらにある模擬試験 Associate Cloud Engineer 認定資格  |  Google Cloud を2度受けて、間違えたところを中心に復習を繰り返しました。

試験当日

試験は10時からの予定だったでの、前日は軽く復習して早めに寝ました。 当日は1時間前に会場に到着し、会場を確認した後、近くのカフェで最後の復習。

ちょうど以下のURLを見つけたのでこちらを倍速で見て、確認しました。

www.youtube.com

そして、会場へ。

試験中

試験は、2時間。50問ありました。 全て4択で、日本語が難しい部分もありましたが、何とか全て埋めたあと、再度回答を確認し、30分ほど早く終えました。

受験日から2日後に合格通知が来ました!

最後に

技術試験を受けたのは新卒時代に、Oracle Gold受けた以来で、あの頃に比べて勉強できる時間も限られており、久々苦悩もしましたが結果的には楽しく勉強出来ました。 そして、改めて予定を立てることの大事さを学びました。

是非、Associate Cloud Engineer 認定資格、チャレンジしてみてはいかがでしょうか。

明日はホスティング事業部の@matsusuke さんです。

Google Apps Script(GAS)を管理するCLIツール Clasp

Clasp なるCLIツールがあることを教えてもらったので、インストールし使えるまでの作業を備忘録として残す。

なお、作業については以下を参照させていただきました。

qiita.com

事前準備

事前にnodejsを入れておきましょう。 私は、nodenvでインストールした。

$ nodenv install 15.6.0
$ nodenv global 15.6.0
$ node rehash

claspをインストール

npmで以下の通りインストールを試みる。

$ npm i @google/clasp -g
npm WARN ERESOLVE overriding peer dependency
npm WARN Found: inquirer@7.3.3
npm WARN node_modules/@google/clasp/node_modules/inquirer
npm WARN   inquirer@"^7.0.0" from @google/clasp@2.3.0
npm WARN   node_modules/@google/clasp
npm WARN     @google/clasp@"*" from the root project
npm WARN
npm WARN Could not resolve dependency:
npm WARN peer inquirer@"^5.0.0 || ^6.0.0" from inquirer-autocomplete-prompt@1.0.1
npm WARN node_modules/@google/clasp/node_modules/inquirer-autocomplete-prompt
npm WARN   inquirer-autocomplete-prompt@"1.0.1" from @google/clasp@2.3.0
npm WARN   node_modules/@google/clasp

changed 160 packages, and audited 161 packages in 10s

13 packages are looking for funding
  run `npm fund` for details

7 high severity vulnerabilities

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

7つの重大な脆弱性が見つかったというメッセージがでた。 npm audit fix で自動で解決を試みた。

$ npm audit fix

up to date, audited 1 package in 602ms

$ npm audit
found 0 vulnerabilities

脆弱性がなくなったようなので、再度claspをインストール

npm i clasp

added 1 package, and audited 2 packages in 10s

found 0 vulnerabilities

googleに認証する

claspでログインをする。

$ clasp login

デフォルトブラウザが起動し、以下のような画面になるので許可をする。

f:id:atani:20210125223621p:plain

ターミナルに戻ると、以下のようなメッセージが出て、ログイン完了。

Authorization successful.

Default credentials saved to: ~/.clasprc.json (/Users/akira/.clasprc.json).
$ clasp create
? Create which script? standalone
User has not enabled the Apps Script API. Enable it by visiting https://script.google.com/home/usersettings then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

GASのAPIが無効になっているので有効にする必要がある。

https://script.google.com/home/usersettings にアクセス

以下のような画面になるので、有効にする。

設定変更前

f:id:atani:20210125223139p:plain:w400

設定変更後

f:id:atani:20210125223218p:plain:w400

再度 GASファイルを作ってみる

GASファイルを作ってみる。

$ clasp create
? Create which script? (Use arrow keys)
❯ standalone
  docs
  sheets
  slides
  forms
  webapp
  api

選択肢が出てくるので、今回は standalone を選択。 以下のようなメッセージが出れば、作成完了。

Created new standalone script: https://script.google.com/d/XXXXXX/edit
Warning: files in subfolder are not accounted for unless you set a '.claspignore' file.
Cloned 1 file.
└─ appsscript.json

文字ベースのコミュニケーションで体力を消耗しないために意識するべきたった一つの事

このエントリは、GMOペパボエンジニア Advent Calendar 2020 – Adventar の16日目の記事です。5日目は、akht さんの バーチャル鹿児島オフィスを作りました でした。

akhtikd.com


今年の1月から新規に発足したホスティング事業部CRチームに所属しております。 実は、入社して以来一度も同じチームから離れたことがなかったので、今回の配属チェンジは、自身の中では、新しい挑戦への第一歩となりました。

チームとしては4名。愉快なメンバーにも恵まれ、充実した日々を送っています。

CRとは?については、他の仲間がめちゃくちゃ素敵な記事として書いてくれているので、是非見てみてください!

さて、今回は、リモートワークの職場において、「文字ベースのコミュニケーションで消耗しないために意識するべきたった一つの事」について、特に私が意識していることを踏まえてご紹介していければと思います。

f:id:atani:20201215190212j:plain

結論から言いますと、コミュニケーションで意識している事は、たった一つです。

相手を思いやる

以上です。

では、終わりません。


コミュニケーションとは?

そもそもコミュニケーションとはどういう意味でしょうか? Weblio辞書で調べると以下のようにありました。

「伝達」「通信」「意思疎通」などの意味の表現

参照 : コミュニケーションの意味や使い方 Weblio辞書

相手に伝える、相手と意思疎通を取る。つまり、相手に自分の言っている事を理解してもらう技術です。 エンジニアと、エンジニア以外の職種になると、当然、知っている領域の範囲が異なってくるため、ミスコミュニケーションが起こりやすくなります。 この両者の知識の範囲のすり合わせと認識を合わせていく作業になります。

例をあげてみましょう。 非エンジニアAさんと、エンジニアBさんのメッセージのやり取りをしています。

例1)
Aさん(非エンジニア)「○○について、△△のようなのですが、調査お願いします。」
Bさん(エンジニア)「○○については以前もお伝えしましたが、○○です。しっかり共有しておいてください。」
Aさん「(めっちゃ怒ってるやん。次から聞きにくいわー...)」

どうでしょうか? 次の例を見てみましょう。

例2)
Bさん「○○について、△△のようなのですが、調査お願いします。」
Aさん「○○は、FTPの△△(技術的な用語)による接続エラーです。」
Bさん「(△△ってなんだろう...でもとりあえずFTPのエラーなのか)」

どうでしょうか? 前者は、もし次回同様の質問がまた起きた場合にしづらくなります(仮に別の人であっても)。 後者は、Bさんはこれくらいは知っているだろう。という思い込みのまま伝えているため、Bさんはなんとなくしか把握できておりませんでした。

文字だけの会話を通して相手がどういう方で、どういう前提知識は持っていて、どういうところを知らないのか?というところを考えながら回答するとミスコミュニケーションが減って、お互いにとってよりよりコミュニケーションを取ることができます。

これらの例を用いて、このミスコミュニケーションをどう解消していけばいいのか?をご紹介していければと思います。

コミュニケーションには大きく、4段階あります。

1. 信頼の段階 1. 傾聴の段階 1. 伝える段階 1. 相互理解の段階

1. 信頼の段階

職場ですと、1の信頼の段階はクリアしていると思います。 会社の中にいる人は仲間であるからという安全が確保されているからです。 (そうじゃない会社は、まず信頼関係を構築することから始めると良いかもしれません)

信頼関係は、コミュニケーションを構築する上で、まず最初にやるべきことです。

全くのつながりのない赤の他人に、いきなり声をかけられて、 「ご飯食べいこう!」 って言われると嫌悪感が出る人が多いかと思います(もちろんそうじゃない人もいるとは思いますが) しかし、 「こんにちは!私○○というものですが」と、礼儀や自己開示から始めると相手は、コミュニケーションを取ることのハードルを下げてくれることでしょう。

2. 傾聴の段階

信頼関係ができていれば、次は、相手のことを知る事です。 相手が何を知りたいのか?それは文字に書いてあることだけを見るのではなく、もっと俯瞰してみることが時には必要だったりします。 例1をもう一度見てみましょう。

例1) 
Aさん(非エンジニア)「○○について、△△のようなのですが、調査お願いします。」
Bさん(エンジニア)「○○については以前もお伝えしましたが、○○です。しっかり共有しておいてください。」
Aさん「(めっちゃ怒ってるやん。次から聞きにくいわー...)」

Aさんが、まず質問した際に、Bさんは、文字通り読み取り回答しています。 返答する前に一歩立ち止まって、少し背景を想像してみます。

「なぜ、Aさんは再度同じ質問をしてきたのか?」

ぱっと思いついたところで以下のようなことが考えられるかもしません。

1. Aさんが、伝えられたことを忘れてた。
2. 先日伝えた事がうまく伝わってなかった。
3. Aさんの別のチームに伝えて共有しておいてくださいと言ったが、チーム内でうまく共有が出来ていなかった

などです(他にも想像すれば色々出てくると思います) もし、仮に原因が2や3だった場合、返答の仕方や、もしかするとその後のAさんのアクションも変わってきそうではありませんか?

ようするに、相手はなぜその質問をしてきたのか?というのを一度立ち止まって考えるようにしています。

社歴が短い方と、長い方では、同じ質問でも返答を変えることがあります。 それは、次でお話します。

3. 伝える段階

傾聴の段階まで来たら、次に伝える段階になります。 ここで、大事なのは伝える相手の背景も考えて、伝えることです。 再度、例1を出しましょう。

例1) 
Aさん(非エンジニア)「○○について、△△のようなのですが、調査お願いします。」
Bさん(エンジニア)「○○については以前もお伝えしましたが、○○です。しっかり共有しておいてください。」
Aさん「(めっちゃ怒ってるやん。次から聞きにくいわー...)」

先程、相手の背景を考えました。もし、前回伝えたことがうまく伝わってないと感じたら、さらに前提などを話しすつつ、詳細に説明します(言葉の意味を説明することもあります) 社歴が長い方については、忘れていた可能性もあるので、前回話した内容を引用すれば、OKな場合も考えられるので、補足する程度にすることもあります。 加えて「わからなかったらお気軽に聞いてね!」と一言付け加えることもあります。

仕事をする上で、文字上でしか会話がない場合、相手のバックグラウンドを知るのは至難の技です。が、文字の使い方、絵文字の使い方等を見て、どういう方なのか?を汲み取りながら伝えるように気をつけるだけで、相手もメッセージを受け取りやすくなります。

4. 相互理解の段階

やはり普段から活発に何気ない会話をすることで、この人は、どういう人でどういうことに興味を持っているのか?やどういう性格で... 逆に、自分はどういう人間で、何が趣味で...みたいなのを相手と共有するだけで、やりとりがスムーズに行きやすくなります。

メラビアンの法則

大昔、メラビアンさんが実験した結果によると相手の何に寄って情報を得ているかを実験した際に、以下の通りとなったとのこと。

「言語情報」から7% 「聴覚情報」から38% 「視覚情報」から55%の情報

なんと、言語情報はたったの7%...

文字での会話の比重が増えた、現代社会だからこそ、より相手を思いやってのメッセージを送ることが求められているのではないでしょうか。

こんなに参加障壁の低い会はない! 鹿児島.mk #10 テクニカルライティング練習会

鹿児島.mkのテクニカルライティング練習会(オンライン)に参加してきました。

kagoshima-mk.connpass.com

なぜ参加しようと思ったのか?

新型コロナウィルスのおかげで、ほとんどのイベントがオンラインイベントとなり、仕事やプライベートでも文字を使ったコミュニケーションが圧倒的に増えてきました。 そんな中、文字で伝える時は、言葉で伝えるときよりもとても丁寧に書かないと伝わらないなと感じていました。書籍を読み実践するもこれでいいのか? と不安になった事と、他の人はどう考えてライティングしてるのだろう?と興味が出てきました。 そこで、鹿児島.mkのテクニカルライティング練習会 があると紹介していただきすぐさま、参加する決意をしました。

内容

最初にライティングの座学が行われました(仕事の都合で少し遅れて参加)。

結論を書くと、たった4つのポイントを抑えるだけで、劇的に読みやすくなるようです。

  1. 文章の目的と読み手を意識する。
  2. 主語と述語を統一させる。
  3. 1文1文メッセージを心がける
  4. 文章の最初に重要なポイントを記載する。

座学が終わった後に、グループに別れて2問あるお題に対してグループごとに考えていきました。 そこで、感じたことは、以下2つ。

  • 伝えたいことを明確にする。
  • 書くための材料集めをできるだけ多くしていること。

まずこれをしたあとに、4つのポイントに気をつけて文章を練り上げていきました。

なるほど、今まで筆の赴くままに書いてて、考え直しては消して書き直して...文章を継ぎ接ぎして...見返すと意味がわからない感じになっていました。 書く前に整理をして、4つのポイントに気をつけて書くだけで全体が整理されて見やすい文章になるんだなと気づきました。

そういえば、少し前に読んだ、「必ず伝わるロジカル会話術」という本にも

「起承転結」ではなく、「結理時結果」でと書かれてたのを思い出しました。

  • Point (論)
  • Reason (由)
  • Exanple (例)
  • Point (論)

とても腑に落ちた瞬間でした。

最後に

最後にゆるく、鹿児島.mkの参加者の皆様と懇親会を spatial.chat で行いました。 思ったことを一言で、言うと「こんなに参加しやすいイベントなのね」でした。 (鹿児島の方がお優しい人が多いからなのかもしれない) 参加させていただきありがとうございました。

鹿児島.mk、しばらくオンラインイベントでの開催になるようなので、ぜひ一度参加してみてはいかがでしょうか😁

超コンパクトなのに大容量で高速! Hyper Disk SSDレビュー

2月にmakuakeで支援をした、HyperDisk SSD(1TB)が到着したので、早速レビューする。

www.makuake.com

到着時の様子

f:id:atani:20200526130801j:plain

画像にはないがしっかり梱包されて中国から届いた。

内容物

f:id:atani:20200528082944j:plain

  • 本体
  • Type-C to Type-Cケーブル
  • Type-C to Type-Aケーブル
  • 説明書

見た目

f:id:atani:20200526131417j:plain

DJI の2.5インチ 外付けHDDとの比較。 さらに、一般的な名刺よりも1サイズ小さい。 なんと言っても、おしゃれ。

性能

今、所有している外付けHDDとの性能比較、また、純正ケーブルとは違うケーブルの2つで比較を行った。

外付けHDDとの性能比較に利用したのは、以下。

Seagate ドローン向け 2TB USB Type C ポータブル HDD

他社ケーブルとの比較には以下を用いた。

TxtechのGen2 Type-C to Type-Cケーブル

性能比較に使用したツールは

AmorphousDiskMark 2.5 www.katsurashareware.com

外付けHDDから外付けSSDに乗り換えるということで、他社のSSDとの比較ではないので、あくまで参考程度に見てもらえたらと思う。 また、純正とは違うケーブルでも比較してみたので、合わせて参考になれば幸いです。

外付けHDDとの性能比較

  • Seagate ドローン向け 2TB USB Type C ポータブル HDD

f:id:atani:20200528093857p:plain

  • HyperDisk SSD

f:id:atani:20200528093930p:plain

読み込みも書き込みも数倍高速!!

ケーブル比較

Type-C to Type-Cのケーブルを純正ケーブルと他社ケーブルを使って比較。

  • 純正ケーブル(先程比較したものを再度掲載)

f:id:atani:20200528093930p:plain

  • TxtechのGen2 Type-C to Type-Cケーブル

f:id:atani:20200528094451p:plain

若干だが、純正ケーブルの方が高速だった(誤差の範囲) 純正ケーブルも完全に使える品物であることがわかった。

感想

これまで、DJIの外付けHDDを使用していたが、本商品は名刺より小さい上に、大容量。そして高速と三拍子揃った満足度100%の商品となった。

あえて欠点を言うならば、処理が多くなると、手で触れないほど熱くなる。ちょっと心配。

ローカルネットワークで使用されているIPアドレス一覧を取得する

先日、ASUSWiFiルーター RT-AX3000 を購入し、回線速度が2倍になりました。

www.amazon.co.jp

その後、誤ってAPモードに設定してしまったところ、ネットワークに繋がらなくなり、更にはルーターの管理画面のIPアドレスDHCPで適当に割り振られてしまい、管理画面に入れなくなりました...。 そこで、ローカルネットワークで割り振られているIPを探すためにいくつか手段はありますが、今回は簡単に探査出来る、arp-scanを利用しました。

その時の備忘録です。

arp-scanをインストール

arp-scanは、brewでインストール可能です(今回は、予備回線で一度つないでからインストールしました)。

% brew install arp-scan
Updating Homebrew...
==> Installing dependencies for arp-scan: libpcap
==> Installing arp-scan dependency: libpcap
==> Downloading https://homebrew.bintray.com/bottles/libpcap-1.9.1.catalina.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/3a/3a85693ff5d241ccdc689af9fa1281434ddf6ae3d0887cd679d07bbc1730ec29?__gda__=exp=1588525025~hmac=c78c6d871e146a7422deb933ed8fb4f006da844cdfb147
######################################################################## 100.0%
==> Pouring libpcap-1.9.1.catalina.bottle.tar.gz
==> Caveats
libpcap is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have libpcap first in your PATH run:
  echo 'export PATH="/usr/local/opt/libpcap/bin:$PATH"' >> ~/.zshrc

For compilers to find libpcap you may need to set:
  export LDFLAGS="-L/usr/local/opt/libpcap/lib"
  export CPPFLAGS="-I/usr/local/opt/libpcap/include"

==> Summary
🍺  /usr/local/Cellar/libpcap/1.9.1: 109 files, 912.4KB
==> Installing arp-scan
==> Downloading https://homebrew.bintray.com/bottles/arp-scan-1.9.7.catalina.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/76/763b615392ea20ab1900bbc4a21fb0a9a978bbf50d3bbd8d5ff490437defc6f8?__gda__=exp=1588525030~hmac=3cbe4a2e0fc3bf32675261dd6735282049477738629fcb
######################################################################## 100.0%
==> Pouring arp-scan-1.9.7.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/arp-scan/1.9.7: 20 files, 1.1MB
==> Caveats
==> libpcap
libpcap is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have libpcap first in your PATH run:
  echo 'export PATH="/usr/local/opt/libpcap/bin:$PATH"' >> ~/.zshrc

For compilers to find libpcap you may need to set:
  export LDFLAGS="-L/usr/local/opt/libpcap/lib"
  export CPPFLAGS="-I/usr/local/opt/libpcap/include"
arp-scan実行

arp-scanのインストールが終わったらいよいよ実行していくのですが、一般ユーザーで実行するには権限がありません。

% arp-scan -I en0 -l
pcap_activate: en0: You don't have permission to capture on that device
((cannot open BPF device) /dev/bpf0: Permission denied)

よって、sudoをつけて実行することで、以下のように使っているIPアドレスリストを取得することができました。

% sudo arp-scan -I en0 -l
Interface: en0, type: EN10MB, MAC: 3c:22:fb:18:49:dd, IPv4: 192.168.50.194
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.50.1    d4:5d:64:97:f3:78   (Unknown)
192.168.50.18   28:cf:da:27:b0:b7   Apple, Inc.

ルーターの変更は最悪ネットワークにつながらなくなることもあるので、誰にも迷惑のかからない時間帯に操作しましょう。