便利ツール紹介のコーナー #2

プライバシーポリシーとか利用規約が気になるという話は尤も。

PlayCode – Code Sandbox. Online Code Editor.

https://playcode.io/

「ブラウザ上で使えるJavaScriptの開発環境」の有名所。

ページを開いたらすぐにコードが書け、 出力結果がリアルタイムで出てくるため、ちょっとしたプログラムの動作確認などにもサクサク使える。

書いたコードは特に登録等せずとも保存が可能で、 アカウント登録をすれば、 ページを公開するといったことも可能になっている。
今の所はプログラムのちょっとした動作確認程度にしか使えていない。


PHP Sandbox, test PHP online, PHP tester

http://sandbox.onlinephpfunctions.com/

ブラウザ上でちょろっとPHPの動作確認ができる。内容を見るに、PHPの学習サイトっぽい。

PHPのバージョンが選択できるのは嬉しいポイント。
セキュアじゃないのが気になるところではある。 たまに使うことがある。


Regexper

https://regexper.com/

正規表現パターンをグラフ化してくれるサイト。
パターンを入力してワンクリックで綺麗に図示される。大変便利。
正規表現解読による頭痛とおさらばできる。彼女もできる。

図は保存ボタンが用意されているし、アドレスで共有することもできる。

すまんやっぱ彼女はできない。でも便利。正規表現と戦う機会があったら是非。


Trello

https://trello.com/ja

タスク管理に求められる機能、見やすいUI、外部ツールとの連携、快適な操作性を備えた人気のカンバン(ボード)方式タスク管理ツール。
基本的な機能はすべて無料で利用でき、個人利用なら十分なレベル。

利用例や活用方法、便利なChrome拡張機能などの情報がネット上に多数転がっており、 使用方法で困ることは少ないだろう。

外部ツールとの連携を行うことで、Slackに通知を飛ばしたり、受信したメールから即座にタスクを生成するといったことも可能になる。

強力なコラボレーション支援機能を有し、個人でのタスク管理やTo Do Listレベルの利用にとどまらず、チームのプロジェクト管理まで行えるパワーのあるツールとなっている。


Asana

https://app.asana.com/

基本無料で利用できるタスク管理ツールとして、非常に評価の高いツール。
基本的な機能は無料で利用可能。個人利用なら必要十分。

Trelloのようなカンバン(ボード)方式、To Do Listのようなタスクリスト方式の2種類の表示方法でタスクを一覧できる。
機能が豊富なだけでなく、美麗で親しみやすいUIは、こういったツール等に馴染みのない層にも使いやすい。

Trello同様、数多くの外部ツールと連携が可能であり、業務効率改善に繋がる。

元々プロジェクト管理ツールとして構築されているため、チームで利用する機能も当然作り込まれている。
個人からチームまで利用可能な、非常にパワフルなツールといえよう。


今回はここまで。

便利ツール紹介のコーナー #1

便利。

difff《デュフフ》

https://difff.jp/

2つのテキスト間でdiffコマンドによるテキスト差分チェックが簡単に行えるウェブツール。

入力されたテキストのログは取っていないので安心してお使いいただけます

https://twitter.com/meso_cacase/status/190715810971516928

差分箇所がハイライトされて表示される。 (ハイライトの色は青or緑orモノクロ。春には季節限定桜色が選べる)
どうしてもローカルで使いたい場合には、GitHubのリポジトリをクローンして利用できる。

めっちゃ使ってる。イチオシ。


JSON Pretty Linter – JSONの整形と構文チェック

https://lab.syncer.jp/Tool/JSON-Viewer/

オンライン上で、JSONの整形と、構文チェックができるサービスです。処理は全てJavaScript(ローカル環境)で行なっているため、当サーバーにデータを送る必要がありません。

– サイト説明文より

JSONをちゃちゃっと整形して見たいときに便利。


複数の文字コード方式に一括変換 | エンコード / デコード ツール

https://so-zou.jp/web-app/text/encode-decode/

入力した情報はブラウザでのみ処理され、外部へ送信されません。

– サイト説明文より

複数の文字コードに一括で変換してくれるので非常に楽ちん。
使う機会はあんまり。

迷惑メールでたまに見るBase64エンコードはコイツだとダメかもしれない。


SQLフォーマッターFor WEB – ドットツールズ

https://atl2.net/webtool/sql%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%82%BF%E3%83%BCfor-web/

SQLの整形を行うWebツール。整形時のパターンを少しだけ指定できる。

サクっと使えていい感じ。


Code Beautify

https://codebeautify.org/

オンラインでフォーマッター、エディター、コンバーターなどの機能を提供するやたらと多機能なサービス群。

UIがシンプルで一見使いやすそうだが、全体が英語だったり多機能すぎて目的の機能を見つけにくかったりするので、実はそんなに使っていない。


今回はここまで。

Ghost Inspector 変数を使う

Ghost Inspectorでテストを行う際、「判定に変数を使いたい……」とか、「画面の表示内容をパターンチェックしたい……」とかってことを思うわけです。

ググっても日本語の解説があんまり出てこなくて仕方ないので、公式のリファレンスを見ることにしました。

今回やりたいことは 、
「画面に表示されている、ある文字列が、現在時刻を示しているか判定する」
です。

めっちゃ簡単。

テスト中にJavaScriptを実行することもできるようです。

やってみる

例えば下記のような、日付時刻が表示される箇所があったとします。

ここで、現在の日付が表示されているかを判定するようなときには、 例えば以下のようにすればよさそうです。

実行すると以下のようになりました。

めっちゃ簡単でしたね。

正規表現パターンチェックとかもできるんだろうか。
「表示内容→変数→JS内で処理」はできそうにないけど、JS内でElementの値参照する感じでやったらちょろっとできそうな気もする。 いけそう。まあ後々。

参考

Vagrant + VirtualBox ローカルの開発環境をうっかり消し飛ばした日の話

2019年3月14日 快晴 社員旅行を明日にひかえ、本日も開発日和である。

普段使っている開発環境の挙動が気になり、ゴミファイルの掃除を思いつきました。

私は普段、Vagrant と VirtualBox で作った仮想環境で開発を行っています。

仮想マシンを閉じてもマシンが動いているような気配を感じたスピリチュアルエンジニアの私は、vagrantの様子を伺いました。

こころがおだやかではないので、たんたんとかいてゆきます。
ぜったいにまねしないでください。

>vagrant box list

hogehoge (virtualbox, 0)
piyopiyo (virtualbox, 0)

ここで私はhogehogeの方しか使っていないつもりだったので、piyopiyoを消そうと考えました。

>vagrant box remove piyopiyo
Box 'piyopiyo' (v0) with provider 'virtualbox' appears
to still be in use by at least one Vagrant environment. Removing
the box could corrupt the environment. We recommend destroying
these environments first:

default (ID: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
default (ID: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)

Are you sure you want to remove this box? [y/N] n

???

なんか2つ動いてる。どういうこっちゃ。

ここでVMの電源をオフにします。

>vagrant box remove piyopiyo
Box 'piyopiyo' (v0) with provider 'virtualbox' appears
to still be in use by at least one Vagrant environment. Removing
the box could corrupt the environment. We recommend destroying
these environments first:

default (ID: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)

Are you sure you want to remove this box? [y/N] n

おっ 片方消えた。残った方何者。

>vagrant global-status
id       name    provider   state    directory
--------------------------------------------------------------------------
aaaaaaa  default virtualbox poweroff C:/test_vagrant/hogehuga
bbbbbbb  default virtualbox running  C:/vagrant_test/hogehuga
ccccccc  default virtualbox poweroff C:/vagrant/test
ddddddd  default virtualbox running  C:/vagrant/hogehuga
eeeeeee  default virtualbox aborted  c:/vagrant/hogehuga

The above shows information about all known Vagrant environments
on this machine. This data is cached and may not be completely
up-to-date. To interact with any of the machines, you can go to
that directory and run Vagrant, or you can use the ID directly
with Vagrant commands from any directory. For example:
"vagrant destroy 1a2b3c4d"

うわなんかめっちゃある。

どうやら過去に使った事があるもの(=キャッシュの残っているもの)は全て表示されているらしい。

>vagrant up

>vagrant global-status
id       name    provider   state    directory
--------------------------------------------------------------------------
aaaaaaa  default virtualbox poweroff C:/test_vagrant/hogehuga
bbbbbbb  default virtualbox running  C:/vagrant_test/hogehuga
ccccccc  default virtualbox poweroff C:/vagrant/test
ddddddd  default virtualbox running  C:/vagrant/hogehuga
eeeeeee  default virtualbox running  c:/vagrant/hogehuga

eeeeeeeのやつのstateが変わった。普段使ってるのはコイツか。

>vagrant global-status  --prune
id       name    provider   state   directory
------------------------------------------------------------------------
ddddddd  default virtualbox running  C:/vagrant/hogehuga
eeeeeee  default virtualbox running  c:/vagrant/hogehuga

ふーん? bbbbbbbお前消えるのか。まあ実体無いしそりゃ消えるか。

>vagrant halt
==> default: Attempting graceful shutdown of VM...

>vagrant global-status
id       name    provider   state    directory
-------------------------------------------------------------------------
ddddddd  default virtualbox running  C:/vagrant/hogehuga
eeeeeee  default virtualbox poweroff c:/vagrant/hogehuga

eeeeeeeが停止するよなぁそうだよなぁ。
それはいいんだけど走り続けるddddddd何者なんだ。

>vagrant box list
hogehoge (virtualbox, 0)
piyopiyo (virtualbox, 0)
>vagrant box remove hogehoge
Box 'hogehoge' (v0) with provider 'virtualbox' appears
to still be in use by at least one Vagrant environment. Removing
the box could corrupt the environment. We recommend destroying
these environments first:

default (ID: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)

Are you sure you want to remove this box? [y/N] n

適当にコマンドを打ち冷静になろうとした。

>vagrant destroy ddddddd
    default: Are you sure you want to destroy the 'default' VM? [y/N] n
==> default: The VM 'default' will not be destroyed, since the confirmation
==> default: was declined.
>vagrant package
==> default: Clearing any previously set forwarded ports...
==> default: Exporting VM...
==> default: Compressing package to: C:/vagrant/hogehuga/package.box

おもむろにバックアップを残そうとする。

>vagrant destroy ddddddd
    default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Destroying VM and associated drives...

あ、今回あっさり消えた。なんで。仮想マシン切ったっけな?

>vagrant global-status
id       name    provider   state   directory
------------------------------------------------------------------------
ddddddd  default virtualbox running C:/vagrant/hogehuga

>vagrant global-status  --prune
id       name   provider state  directory
--------------------------------------------------------------------
There are no active Vagrant environments on this computer! Or,
you haven't destroyed and recreated Vagrant environments that were
started with an older version of Vagrant.

消えてる。

>vagrant box list
hogehoge (virtualbox, 0)
piyopiyo (virtualbox, 0)

piyopiyo消えないかな?

>vagrant up

>vagrant box list
hogehoge (virtualbox, 0)
piyopiyo (virtualbox, 0)

>vagrant global-status
id       name    provider   state   directory
------------------------------------------------------------------------
fffffff  default virtualbox running C:/vagrant/hogehuga

>vagrant halt
==> default: Attempting graceful shutdown of VM...

>vagrant global-status
id       name    provider   state   directory
------------------------------------------------------------------------
fffffff  default virtualbox unknown C:/vagrant/hogehuga

???

――あれ、なんかローカル環境でDBにログインできなくなった。

すっかりvagrantとの戯れを楽しんでしまい、異変に気付くのが遅れました。

サービスもなんかダメだぞなんだこれ?? なんか下手なもん消したか??

やらかした感が溢れだします。面倒なことになりました。

>vagrant up

>vagrant ssh
Last login: Fri Mar 16 14:34:16 2018 from 10.0.2.2
Last login: Fri Mar 16 14:34:16 2018 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.

>vagrant box list
hogehoge (virtualbox, 0)
piyopiyo (virtualbox, 0)

>vagrant box remove piyopiyo
Removing box 'hogehoge' (v0) with provider 'virtualbox'...

>vagrant box list
hogehoge (virtualbox, 0)

>vagrant global-status
id       name    provider   state   directory
------------------------------------------------------------------------
fffffff  default virtualbox unknown C:/vagrant/hogehuga

……(新しくboxから開発環境を復旧させようとする音)

[root@localhost ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@localhost ~]# mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@localhost ~]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

……(裏でmysqlにアクセスができないことを確認している図)

自分の設定したパスでローカルにアクセスできないってのは恐らく、DBが太古の昔(自分がこのDBデータを先人から受け取ったあの日)に戻ってしまったからですね。

……(mysqlのパスを再設定する音

お、DB入れた。

あ、DBのデータが以前のものに戻ってる……

Vagrantをup/haltしても全く動かず電源オフのままであるような、よくわからない仮想マシンを1機削除していたことを思い出し、本件の原因は九割九分九厘それであることを理解しました。

やれやれ。

boxファイルにDBをバックアップしたい。(できるのかな?)

教訓

  • よくわからないデータやファイルを適当に削除するのはやめましょう。
  • 削除前にはバックアップを取るなど、備えを怠らないようにしましょう。

参考

不用意なリソース削除には気をつけよう!

Ghost Inspector の実行APIを試してみる

Ghost Inspector にテストsuiteを実行するためのWebhookがあることに気付いたので、試してみることにしました。

実行API (Webhook URL)

公式のAPIドキュメント によれば、Ghost Inspectorのテストsuite実行APIは、以下の形式になっています。

https://api.ghostinspector.com/v1/suites/<suiteId>/execute/?apiKey=<apiKey>&startUrl=<startUrl>
suiteIdテストsuite画面のアドレスの末尾にある英数字部分です。
https://app.ghostinspector.com/suites/xxx... ←これのxxx...の部分)
apiKey Account Settings > API Access にあるAPI Keyをコピペします。
横にある[Regenerate API Key]は鍵の再生成ボタンなので注意します。
startUrlテストのStart URLが指定できます。(省略するとテストの設定が参照されるっぽい?)
テストの設定が参照される方が嬉しいので、今回は省略します。

というわけで、今回試すWebhook URLは以下のような形になります。

https://api.ghostinspector.com/v1/suites/xxxxxxxxxxxxxxxxxxxxxxxx/execute/?apiKey=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

さあ叩こう

とりあえず、Webhookを叩いてみます。今回はPythonでやってみることにしましょう。

今回、HTTPリクエストの送出には requestsを利用するので、pip等でインストールします。

pip install requests

下記のサイトを参考に、Webhook URLを叩くコードをさっくりと書いていきます。

PythonでSlackのIncoming Webhookを試してみる

先程のWebhook URLをそのまま踏んづけてもテストは実行されるけど、せっかくなのでそれっぽく書いて動作確認。

こちらを実行してみると……Ghost Inspectorのテストが走ります!やったぜ。

もちろんテストの通知設定に従って通知も飛びます。

GETで簡素にやる場合は以下みたいな感じ。

ちなみにrequestsのレスポンスはテストが走り終わるまで返ってこないので、ここでは特に見ていません。
レスポンスに異常があれば、別途Slackに投稿されるような仕組みにしておくと、テストの実行失敗時も検知できて安心感が高まる。

所感

実務的には、動作確認用環境(いわゆるテストサイト/テスト環境)にサービスをデプロイしたあとに、Webhookが自動で叩かれてテストが走る……という流れになると良さそうですね。
テストのし忘れがなくなっていい感じ。

参考