リバース・エンジニアリング

Flultterとテックブログと時々iOS

SeleniumでUIテストを自動化しよう

いつものFlutter開発とは話が変わりますが、Seleniumを使うとGoogle Chrome をプログラムで自動化することができます。 ちなみに今回の話しはMac限定でWindowsには対応しておりません。 (Selenium自体はWindowsにも対応していたはず)

今回はそのSelenium をインストールしてGoogleページを開くところまでご案内したいと思います。

Seleniumのインストール

私、pip使いなのでpipからSeleniumをインストールします。

pipからseleniumのインストール

$ pip install selenium

pipがない方は次のコマンドでpipを入れましょう。

$ python -V
Python 3.6.0
$ sudo easy_install pip

driverのインストール

次にChromeDriver を動かすためにchromedriverをインストールします。

$ brew install chromedriver

これでSeleniumとChromedriverがインストールできて準備ができました。

注記(Message: session not created: This version of ChromeDriver only supports Chrome version Xが表示される方)

今回の記事を書こうと思った動機がこちらです。 長年seleniumを使っていたのですが、とあるタイミングからterminal でseleniumを走らせようと思った所ターミナルで次のようなエラーが表示されて GoogleChromeが起動しなくなりました。

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 78

私の場合はこのようなエラーが表示されました。 表示される理由はGoogleChromeのバージョンが新しくなって、ChromeDriverのバージョンが合わなくなって使えなくなるからでした。 このようなエラーが表示された場合は、一度インストールしたseleniumとchromedriver をアンインストールして再度インストールしなおせば直ります。

$ pip uninstall selenium
$ pip uninstall chromedriver

このコマンドを実行した後に再度

$ pip install selenium
$ pip install chromedriver

したらエラーが直りました。

サンプルコード

それではseleniumをインストールしたことですし、一度seleniumを使ってみましょう。

VSCodeをお持ちの方でしたら「書類(Documents)」ディレクトリにでも、index.pyのファイル名で次のコードを書いてみましょう。

index.py

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.google.com")
driver.close()
driver.quit()

保存します。

保存したらターミナルを開いて、Documentsディレクトリに移動しましょう。

cd Documents

このあとに保存したindex.pyファイルをpythonコマンドで実行したらGoogleChromeが起動します。

python index.py
# google chromeが起動

今回のサンプルコードはグーグルクロムが起動して閉じるだけの処理になります。

これを使えば、自分が操作しなくてもある一定の処理を自動で行ってくれるようになります。

マイプロテインのおかげで筋トレにハマりそう

こんばんは。Tamappeです。約半年間ぐらいブログを放置していました。

2019年3月末付で法人を持ちながらフリーランス活動を停止させることにしました。 2019年4月から正社員に戻ってサラリーマンを再開しました。

法人を持っていたので実質「代表取締役(=社長)」としての肩書を持ちながらフリーランス活動していたことになります。 なので、ツイッターで流行っているような「退職エントリー」は書けなくて「辞任エントリー」になってしまいます。

代表取締役フリーランスはなかなかいいポジションだったので別の機会にこの話しについて記事にしたいです。

本日はタイトルにもあるように私の趣味の一つに「筋トレ」がありフリーランス時代は週2ぐらいの頻度でジムに通って筋トレしていました。 通っているジムは「ANYTIME FITNESS」という24時間営業しているジムです。

正社員に戻ってからは日々の忙しさから週2から週1と頻度が下がり、先月9月頃には2週間に1回というペースまで落ちてしまっていた。

そんななのでそろそろ筋トレがMy hobby として出せなくなりそうで危惧していましたが、 先日、社内の人に筋トレするんなら「BCAA」を取ったほうが疲労が早く回復してとてもいいよとオススメして頂きましたので 「マイプロテイン」で試しに「BCAA」を購入してみました。

www.myprotein.jp

ちなみに購入したBCAA はこちらです。

www.myprotein.jp

さらにマイプロテインで商品をこういうする場合はポイントサイトの「ハピタス」を経由して購入するのが注文金額の4%分のポイントがゲットできますのでベストです。 (ハピタスの1P = 1 円で100P以上から還元できます)

その買うを、もっとハッピーに。|ハピタス

f:id:qed805:20191006201640p:plain
myprotein

マイプロテインは今だと「HACHI35」で35%オフで購入できますので35%オフ + 4 % ポイント分が還元できます。

で、ハピタスを紹介したいわけではなくてこのBCAAですが本当に筋トレに相性が良いみたいで 試しにガッツリ筋トレしてもトレーニング中に疲れることがなくさらに翌日も筋肉痛になることがなかったのです。

これは私自身本当にアンビリバボーな体験でした。

いつも筋トレするときは帰り道にクタクタになるのですがそんなことは起きませんでした。 全然疲れないのです。 もしかすると全力で1時間ぐらい筋トレしたら疲れるかもしれませんが1時間も筋トレすると逆に効果が下がってしまいますね。

そして翌日の筋肉痛についてですが朝起きても筋肉痛になっていなかったのは非常に驚いた。 これなら土日に連続でジムに行っても疲れないし胸筋、足、背中と3日間筋トレをしても大丈夫そうです。

ということで来週から試しに週1か2を目指して筋トレを続けようかなと思った日でした。

3年後のスマホ業界の時代の遷移を想像してみた

普及しているプログラミング言語Google言語だけとなった世界

おそらく皆が同意すると思うが2010年から2018年までの間はスマホ業界はApple一強の時代であると言い切れる。

5年前なら20代後半がiOSアプリを開発するだけでも圧倒的な有利を取れていた。

だがここ2~3年で10代~20代前半の子らがこの市場に参入し始めてきた。

少なくともiOS/Androidアプリ開発で20代前半のエンジニアは1人は必ずいる。

それだけ若い人がiOSアプリ開発がそれなりのステータスになることを認知し始めたのだ。

5年前はそもそもプログラマ業界は3Kとして学生に不人気だったのに世の中変わったものである。

だいぶ話が脱線したがこれだけiOS(というかiPhone)が人気になってくるとGoogleとしてはちょっと面白くないはずである。

そんなGoogleは次の5年を圧勝するために今この時間とお金を投資しまくっているのではないかな。

だからこれから来る2020年の代はもしかするとGoogleが開発するプラットフォームでソフトウェアを開発しているかもしれない。

僕は去年の夏頃からブロックチェーンのリサーチのためにブロックチェーン業界のコミュニティに入って内部調査をしていたが、

その時に初めてGoogle製のサーバーサイド言語のGoとiOS/Androidマルチプラットフォーム開発のFlutterの存在を知った。

Flutterに関してはReact Nativeの2番線じ感を最初は感じていた。

だがGoの方をリサーチしてみるとこれがどうもプログラマ業界に人気らしかった。

フリーランス案件で単価の高い案件にGo言語が入った事もそれを物語っていた。

僕の中ではすでにGoはプログラミング言語のトレンドとしては成功していると思っている。

GoはGoogle製のサーバーサイド言語である。

そしてまたFireBaseの存在もある。これもまたGoogle製のMBaasだ。

アクセス解析ツールであるGoogle Analyticsはもちろんgoogle製。

あれ、Google製のモノ増えて来てない?

と思うと最近のgoogleは結構伸びて来ている感がある。

そのため私は密かに高確率でGoogle製のプラットフォームであるFlutterが今後5年の未来を勝利を獲得するのかもと予想するようになった。

さらにAndroidの開発用プログラミング言語であるJavaはオラクルに裁判で負けてしまったため新OSを開発せざるを得ない状況もありますからね。

ASCII.jp:Google-Oracle訴訟はOracleに有利な判断 判決からAndroid登場時の裏が見えてくる (1/2)|末岡洋子の海外モバイルビジネス最新情勢

これでもうGoogleは次の5年のスマホ業界でAppleに逆転するために本気になると思う。

これまでの5年間はずっとAppleに負け続けて来たから。

任天堂が昔長期間ソニーに負け続けて最近復活して来たようにGoogleは次の5年間をAppleに勝つ施策を出して来るはずである。

逆にまあAppleジョブズの財産を消化しきったのでこれから先はゆっくり劣化していくと予想する。

iOSアプリエンジニアもAndroidアプリエンジニアも同じコードをメンテする

本当は日本のキャリア(ソフトバンク・ドコモ、AU)みたいに競合相手が複数になる世界が面白いんだけど、

GoogleのプラットフォームがAppleに勝利したら今後のスマホアプリの業界は

iOSエンジニアもAndroidエンジニアも同じコードをメンテナンスする未来が見えて来たかもと思っている。

www.gizmodo.jp

japanese.engadget.com

このあたりを見るとGoogleの本気度が伺える。

Googleが新OSを開発している辺りAndroidのプラットフォームを無くしそうである。

2010年はiOSによってFlashのプラットフォームが衰退した時のようにこれから先はAndroidのプラットフォームが衰退するのかもしれない。

同僚のAndroidエンジニアはこの点に関しては悲観的である。

今僕はAndroidの開発や勉強もやっているが、

Androiderからは「Androidは今後廃れるからやる必要ないと思うよ」という忠告を何度も頂きます。

こう考えるとやはり十何年前にAppleジョブズ

は本当に凄い事だと思う。

実際の技術選定はウォズの方だと思うけど、

ジョブズは将来流行る技術の目利きが出来るからそれにOKを出したのはやっぱり凄い。

それに比べてMicroSoftと来たら

Dartは未来の言語となり得るか

Dartに関してはどうだろうか。

この世界、プログラミング言語の仕様がいいからと行って技術が流行るとは限らないのが技術選定の難しいところである。

なんせiOSで懲りたけどObjective-Cは文法構文上みんなに嫌われてたしなかなか難しかったけどiOSの普及で一気に

流行った言語なので。

特にブラウザ言語であるJavaScriptに関しては昔はクソ言語の一つだし言語仕様も複雑怪奇だけど

使われているプログラミング言語ランキングナンバーワンという地位を獲得しているのである。

もちろん僕はあまりJavaScriptは触りたくないし書きたくない。

変数のスコープとか鬼畜すぎて共同開発に向いてないんじゃないかってくらいよくわからない言語である。

それに比べたらDartはまだ良心的な言語仕様だと思う。

JavaJavaScriptを足して2で割ったような言語仕様らしいけど。

なんか、今後Dartが流行った暁には

JavaJavaScriptの違いのネタにDartで例えられそうな感があるね。

グーグル検索でここまで感動したことはあっただろうか?

エンジニアのグーグル検索についてのテクニック

をまとめたいと思う。 特にiOSエンジニアの場合にはXcodeのコンソール上で意味不明なエラー文言が起きた時には どうやって検索すべきかを悩んでしまう。 プログラマとして日々バグのデバッグの解決法としてグーグルで検索した時にQiitaの記事がヒットしてくれたら非常にラッキーでありますが、 大体はStackOverFlowのページが検索されると思います。

幸福度の順番で言えば

Qiita > StackOverFlow > 日本人のブログ記事 > 英語の記事

の順番かな。

ですが、プログラマとしてブログに情報発信するようになってからはトレンドを追う癖ができてしまって 何かを調べている時に日本語の記事がヒットすると逆にイラついてしまいます。

トレンドな情報の多くはやっぱり英語の記事が多いので 初めからグーグルさんが英語だけに絞った検索をしてくれたらいいのになと思っていたところ そのテクニックが分かりましたので共有します。

英語サイトのみをGoogle検索結果に表示させる方法

グーグルのトップ画面にアクセスします。

Google

f:id:qed805:20190209001100p:plain
google

  1. 検索窓の下の「設定」ボタンをクリックします。

  2. 言語を選択します

f:id:qed805:20190209001245p:plain
settei

  1. 言語選択画面が表示されますので「English」を選び「保存」をクリックします。

f:id:qed805:20190209001403p:plain
language

クリックで表示された検索結果のページの多くが英語の記事になっています。

f:id:qed805:20190209001512p:plain
english

これで英語だけの検索結果になりトレンドな情報を追いやすくなりました。 仕事では意外に便利な機能なのでぜひ活かしてもらえれば幸いです。

技術書典に行ってきました。

技術書典

昨日10/8はエンジニアのための書籍イベント「技術書典」が開催されていたので試しに行っていきました。ええ、行きましたよ。わざわざ池袋のサンシャインシティまでトコトコ歩いていきました。5回目だからなのか技術書典5でしたが。書店ではなく「書典」なので私の日本語変換ソフトは毎回誤変換をしてくれます。定番の「書店」という誤変換から「書展」「諸点」などと変換してくれます。「書典」と入力するたびに集中力が途切れてしまいます。

技術書典

結論からいうと「技術書典」マジ最高やんけ!
ということでした。本当軽い気持ちで「面倒臭いな」とか思いながらサンシャインシティの奥まで足を運びましたが頑張ってめっちゃ正解でした。軽い気持ちでいきましたので本は2冊ぐらい購入したら帰ろうかなと思っていました。が、結果的には電子書籍を含めると5冊は購入しています。やばい、本だけで1時間の滞在で1万円も使っていますね。まあ、コスパを考えるとそれでも安かったと思えました。

というより、寧ろもっと早い時期から技術書典に足を運ぶべきだったとも思えてきました。良い技術書が多いし購入するときにその著者(?)らしき方々に質問を投げることができるからです。

技術書って一般的にも1冊3000~4000円ぐらいかかりますので、
本を購入するときにはどうしても

  • この本って初心者向けかな
  • 今仕事で必要な「〇〇」の部分をもうちょっと詳しく知りたいんだけどな。
  • ボリューム分厚そうかも
  • タイポや載ってるソースコードってちゃんと動くのかな

といった疑問を持ってしまいます。なので、購入後に購入者のニーズと著者の意図がミスマッチするとそこに悲劇が起きてしまいます。(あと、時間の浪費)

ですが、購入前に著者に販売している本の対象者だとか書いている内容に付いて事前に質問してちゃんと回答してくれるとそういった問題を事前にある程度解消できます。そして、満足して帰宅できるのです。

そんな感じだったので私は技術書典で予算よりも多く使ってしまった罪悪感を持たずに帰宅することができました(笑)。あとで計算してみるとやっぱり罪悪感をひしひしと感じてしまいました。ですが、それは購入した技術書で勉強してちゃんとその分を取り返そうと思っています。

購入した本について

ではどういう本を購入したのかというと

  • iOS、Metalの解説本
  • iOS、ARKitの解説本
  • iOS、UnitTestの解説本
  • iOS、RxSwiftの解説本
  • Laravel、初めてのWeb開発

こういった本を購入しました。
はい、iOSに偏っています。やっぱり、仕事で使うiOSの本が沢山ありました(Androidは大丈夫か?)。もっとAndroidの方も足を運んでおけばよかったと今後悔しています。多分、良書多そう。。。

Laravelの本は個人のWeb開発のために購入しました。本の表紙と売り子さんの外見のギャップはとんでもなく乖離していましたが中身はサンプルアプリの開発フローが書いてあったのでサンプルコードを書きながら勉強できるので即買いでした。(ギャップ萌えですね。)

今月中にタスク管理アプリぐらいは開発したいと思います。
APIが出来上がったらそのままiOSAndroidにも移植できますしね。
Webは今の所もバイル開発よりも難しい概念がないからいかにサンプルアプリを拡張していけるかが上達の鍵になりそう。

電子書籍版の購入について

実はここ技術書典で販売されていた本は「電子書籍」版だとウェブで購入できたりします。

販売しているのは「BOOTH」という同人誌を販売しているウェブサイトらしい。
ここで検索で「技術書典」と検索すると確かに出てきます。なので、紙の本を購入できなかった人はここで電子書籍を購入すれば良かったりします。
BOOTHですますか技術書典まで足を運ぶかはもうその人個人の好き好みで決まりますので好きな方を選ぶ感じで良いかと思います。

あとがき

このブログを書いている最中に気づきましたが、もしかして「技術」「書典」ではなく「技術書」「典」という区切りだったのかもと思えてきました。これだと私の変換ソフトはある程度の確率で正しく変換してくれますね。「書典」だとSEOを考えた場合、なんか損してそうなワードですが技術を語る方々が運営しているのだからSEOには強い方が多いはず。

とかまあ、そんなくだらないことを考えながら今日は仕事をしていました。

SublimeTextからVisual Stuidio Codeに乗り換えしました

VSCodeに完全移行

Visual Studio Code

エントリのタイトル通りに今まで仕事でもプライベートでもメモがわりに使うテキストエディタをSublimeTextからVSCodeに完全乗り換えしました。確かSublimeTextは2014年ぐらいからずっと使っていたテキストエディタ。まだ現役で使うこともできるのですが、仕事の人たち、特に若手の方がVSCodeを使っていたのでこれはもう時代なんだなと思いました。私が2014年から SublimeTextを使っていた動機も同じその時の同僚が使っていたテキストエディタがそれだったからです。

VSCodeのいいところ

SublimeTextからVSCodeに乗り換えて一番感激したのがMarkdownに対応しているということ。
記憶に覚えてはいないが今はVSCodeで編集したMarkdownを右側のプレビューで見え方を確認しながらリアルタイムで編集しています。このリアルタイム感が良いです。私は性格的に文字入力をするのが大変億劫らしくてブログを更新するのが大変苦手であったが、VSCodeにしてからは見え方をリアルタイムで確認できるので文字入力のスピードが格段に上がりました。

ブログに記事を更新してから、あーこの行間で改行するのは読みにくかったんだなといつも後悔します。それがリアルタイムで見え方を確認するのでブログに記事を投稿してからの気持ちの差異が少ないので最近ではブログに投稿した後の確認をしていないぐらいです。あと、MarkdownなしだとHTMLのタグ打ちをしなければならないのですが、\

\

とタグ打ちするのが大変に好きでないことを知っているのでできれば文章を書いている最中はタグ打ちを気にしたくないんですよ。なので、私は基本Markdownで文章を編集しています。

使っているMarkdown

ちなみに私が普段使っているMarkdown

# (h1)
## (h2)
### (h3)

[リンク](url) (リンク)

`文字` (文字装飾)

```code```

これらを頻繁に使っています。

それとVSCodeが相性が良いのでとうとうVSCodeに完全移行することにしました。
最初はVSCodeの使い方が全く分からなかったのですが、使っていけば慣れるものですね。
これで文字数カウントみたいなものがあれば完璧ですね。プラグインを導入すればトータル文字数を見れるらしいとのことですがググるのがそんな得意ではないのでまた近い内かな。
あと、タブ機能も付いているから普段XcodeAndroid Studioでコードを編集する感覚に近いのも比較的大きいかもしれない。

もう時代はVSCodeなんだろうな。

注記

文字数カウントぽいプラグイン見つかりました。

(CharacterCount)https://marketplace.visualstudio.com/items?itemName=8amjp.charactercount

このプラグインをインストールして有効にすれば、ウィンドーの一番下のブルーの左側に xx Charactersといった感じで表示されてました。これでブロガーさんにとっては今何文字を入力したのかリアルタイムで意識しながら文章が書けますね。
これでまたライティング効率が上がります。