Folioscope

curlで覚えるWebDriver (2/2)

curlで覚えるWebDriver、第二段です。 前回の記事はこちら。

前回に引き続き、Seleniumのコア機能であるWebDriverをcurlで叩いてみます。 この記事では要素の取得やクリックの送信など、より実践的なAPIを使ってみます。 この記事の最後に、シェルスクリプトによる簡単なE2Eテストの例を紹介します。

サンプルアプリケーション

まずこの記事で使用するサンプルアプリケーションを作ります。 以下のHTMLはボタンを押すと画面上の数値が+1されるシンプルなアプリケーションです。 このHTMLを適当な名前で保存します。

<!doctype html>
<html lang="en">
  <body>
    <button id="button">++</button>
    <span id="counter">0</span> …
もっと読む…

curlで覚えるWebDriver (1/2)

WebDriverについて調べる機会があったので簡単にまとめました。 この記事ではcurlを使って、WebDriverによるブラウザ操作をしてみます。

WebDriverとSeleniumの歴史

Seleniumは現在最も広く使われている、Webブラウザの自動化・テストフレームワークです。 多くの言語をサポートしており、JavaやC#などの言語から、Webページを開いたり要素の検証ができます。 そのためWebサービスのEnd-to-end (E2E) テストの自動化で主に利用されています。

Selenium 1 (Selenium RC) と呼ばれていた時代は、ブラウザを操作するためにSelenium CoreというJavaScriptをブラウザ上でロードしてました。 しかしブラウザのセキュリティ強化により、Selenium CoreのJavaScript実行が難しくなったため、モダンブラウザではSelenium Coreが動かなくなりました。

SeleniumのヘビーユーザーだったGoogleは、Selenium Coreとは別のアプローチをとるため、WebDriverと …

もっと読む…

Builderscon Tokyo 2019 2日目 参加レポート

朝食

Builderscon Tokyo 2019の2日目に参加してきました。 本日も朝から晩まで参加しました。 その中でも個人的に気になった3セッションを紹介します。

OSS Security the hard way

1つめは@hsbtさんによる発表です。 Rubyを例にした、オープンソースソフトウェアとセキュリティに関する発表でした。

OSS Security the hard way from Hiroshi SHIBATA

Rybyの脆弱性が報告された後の対応が特に興味深かったです。 OSSであっても報告された脆弱性は修正されるまでは外部に公開できません。 Rubyも同じで、脆弱性に関するやり取りや修正コードも対応が終わるまで公開されません。 レビューもトピックブランチを切るのではなく、昔ながらのパッチのやり取りで進めるという味わい深いものでした。

オー …

もっと読む…

Builderscon Tokyo 2019 1日目 参加レポート

オープニング

Builderscon Tokyo 2019の1日目に参加してきました。 本日は朝から晩まで参加しましたが、その中でも個人的に気になった3セッションを紹介します。

Open SKT: メルペイ開発の裏側 (@kazegusuri)

1つめはメルペイの@kazegusuriさんによる発表です。 Open SKTはメルペイで行われているアーキテクチャ研修の名称です。

メルペイのアーキテクチャはマイクロサービスで構成されます。 それぞれのサービスが協調して各サービスの一貫性を保証して、システム全体での一貫性を保証する必要があります。

各サービス間の整合性は2相コミットしてるとのことです。 それに加えてサービスは他のサービスのデータを確認して、サービス感で発生した差分を吸収しています (reconsile)。 前者の2相コミットだけでも各サービスの一貫性は(理論上は)保証 …

もっと読む…

JVMのヒープサイズとコンテナ時代のチューニング

Java

最近JVMのヒープ領域とパラメータ、そしてコンテナの関係について調べてました。 案外まとまった情報が少なかったので簡単にまとめました。

Javaのヒープサイズを設定

まずはJavaのヒープサイズについて簡単なおさらいです。

本番環境でJavaアプリケーションを運用する上で、JVMのヒープサイズを決定するのは非常に大事なポイントです。 ヒープ領域の最大サイズを大きくすればガベージコレクション (GC) の回数は減らすことができますが、 必要以上に大きくしすぎると無駄にリソースを消費したり、OOM killerでOSにプロセスを終了させられます。

JVMが使用できるヒープサイズは、Java APIの Runtime.getRuntime().maxMemory() で確認できます。 また java の起動オプションに -XX:+PrintFlagsFinal オプションを付与すると、JVMの各種パラメータを取得できます。 この記事では後者の -XX:+PrintFlagsFinal オプションで取得する方法で解説を進めます。 また実行するJavaプログラムが無くても、 …

もっと読む…

複数Podでコマンドを実行できるツールを作った

Go Kubernetes

Kubernetesの複数コンテナ上で、並列のコマンドを実行できるツール bow を作りました。 英語で bow は船首を意味します。

スクリーンショット
ueokande/bow github.com

なぜ作ったの?

kubectl exec コマンドは、Kubernetes上のアプリケーションのデバッグや、障害調査に役立てることができます。 しかし水平スケールが柔軟にできるKubernetesでは、特定のコンテナでコマンドを実行するというのはあまり適切ではありません。 規模によってはコンテナの数が数個から数十個になることもあります。 そういった環境でコンテナ1つずつkubectl execするのは大変だというのが容易に想像ができるでしょう。

また別のケースを考えてみます。 Kubernetes上のアプリケーションは、標 …

もっと読む…

Kubernetesのログビューアを作った

Go Kubernetes

KubernetesのログビューアLogbookを作りました。 Kubernetesやその周辺ツールは船に関する名前から由来されることが多いです。 英語で logbook は航海日誌のことを指します。 航海日誌のようにログをパラパラとログを閲覧できる、そんなツールを作りました。

スクリーンショット
ueokande/logbook Another log viewer for Kubernetes github.com

なぜ作ったの?

Webサービスにおいてログは大変重要なものです。 Kubernetesでもログを閲覧するコマンドkubectl logsコマンドがあります。 しかしログを追う時、kubectl podskubectl logsを何往復もすることが割と面倒です(自分だけかも知れませんが)。

複数コンテ …

もっと読む…

英和辞書をポップアップするVimプラグインを作った

Vim Vimscript

ついこの間、Vimにpopupが実装されたという話題と、Mouse Dictionaryがタイムラインに流れてきました。 自分もVimのPopupを使って英単語の意味を調べるプラグインを作ってみました。

スクリーンショット

GitHubレポジトリはこちらです。

ueokande/popupdict.vim 読力、活力、元気 github.com

使い方

dein.vimやvim-plugのパッケージマネージャーでインストールできるはずです。

" vim-plug
Plug 'ueokande/popupdict.vim'

" dein.vim:
dein#add('ueokande/popupdict.vim')

" NeoBundle …
もっと読む…

TSyringe - JavaScript/TypeScript向けの軽量DIコンテナ

Vim Vixen TypeScript

Vim VixenではClean Architecture風の設計をしており、扱うモデルやレイヤー毎にクラスを作成します。 現在はクラス数が100を超えて、クラスにインスタンスをいちいち渡したり、インスタンスの作成と管理が面倒になってきました。 そこでVim VixenではDependency Injection (DI)コンテナを導入することにしました。

いろいろ探してみると、すでにJavaScript/TypeScript用のDIコンテナがいくつか存在するようです。 その中で(巨人の肩に乗るつもりで)Microsoftの「TSyringe」という軽量DIコンテナを採用しました。

microsoft/tsyringe Lightweight dependency injection container for JavaScript/TypeScript github.com

TSyringeはデコレーター(Javaのアノテーションのようなもの)でDIするクラスを指定したり、必要なクラスをコンストラ …

もっと読む…

TypeScriptに移行して気づいた10の事実

Vim Vixen TypeScript

ついにVim VixenをTypeScriptに移行しました。 今まで強がりでECMAScriptで書いてたのですが、静的型付き言語の便利さに負けてついに移行しました。 その時に新しい発見がいくつかあったので簡単にまとめます。

エコシステムが十分に育っている

TypeScriptに移行するのなら、トランスパイラ本体だけではなく周辺ライブラリのサポートも必要です。 たとえばVim VixenではWebpackでのビルドやLinterのチェックをしてます。 また使ってるライブラリの型定義もほしいです。 それらTypeScript以外とのエコシステムの成熟度が、今回の移行の鍵でした。

結論として無事移行できました。 Vim Vixenのライブラリ利用状況は以下のようになりました。

  • ビルド: Webpack + ts-loader
  • Linter: ESLint + @typescript-eslint/eslint-plugin
  • テスト: karma-webpack + mocha/chai

若干@typescript-eslint/eslint-pluginで不具合がありま …

もっと読む…
Page 1 of 25 >